From dca68e896db2675de2e42a2c599394a62a0f5535 Mon Sep 17 00:00:00 2001 From: nsemets Date: Thu, 14 Aug 2025 13:53:26 +0300 Subject: [PATCH 01/16] fix(menu): added new items --- .../components/nav-menu/nav-menu.component.ts | 4 ++++ src/app/core/constants/nav-items.constant.ts | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/app/core/components/nav-menu/nav-menu.component.ts b/src/app/core/components/nav-menu/nav-menu.component.ts index e730b3a40..c8d2400df 100644 --- a/src/app/core/components/nav-menu/nav-menu.component.ts +++ b/src/app/core/components/nav-menu/nav-menu.component.ts @@ -87,6 +87,10 @@ export class NavMenuComponent { } goToLink(item: MenuItem) { + if (item.id === 'support' || item.id === 'donate') { + window.open(item.url, '_blank'); + } + if (!item.items) { this.closeMenu.emit(); } diff --git a/src/app/core/constants/nav-items.constant.ts b/src/app/core/constants/nav-items.constant.ts index 3ed62c7c9..e8e289b33 100644 --- a/src/app/core/constants/nav-items.constant.ts +++ b/src/app/core/constants/nav-items.constant.ts @@ -167,7 +167,16 @@ export const MENU_ITEMS: MenuItem[] = [ label: 'navigation.searchOsf', icon: 'osf-icon-search', routerLinkActiveOptions: { exact: false }, + visible: true, + }, + { + id: 'support', + routerLink: null, + label: 'navigation.support', + icon: 'osf-icon-support', styleClass: 'mb-5', + url: 'https://help.osf.io/', + routerLinkActiveOptions: { exact: false }, visible: true, }, { @@ -370,4 +379,13 @@ export const MENU_ITEMS: MenuItem[] = [ }, ], }, + { + id: 'donate', + routerLink: null, + routerLinkActiveOptions: { exact: false }, + label: 'navigation.donate', + icon: 'osf-icon-donate', + url: 'https://www.cos.io/support-cos', + visible: true, + }, ]; From 4a28cb8210d909d28a7f29ab868718fc7c101b28 Mon Sep 17 00:00:00 2001 From: nsemets Date: Thu, 14 Aug 2025 15:49:41 +0300 Subject: [PATCH 02/16] fix(menu): updated naming --- src/app/core/constants/nav-items.constant.ts | 38 ++++++++++---------- src/assets/i18n/en.json | 1 + 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/app/core/constants/nav-items.constant.ts b/src/app/core/constants/nav-items.constant.ts index c93d02985..0fba21ee3 100644 --- a/src/app/core/constants/nav-items.constant.ts +++ b/src/app/core/constants/nav-items.constant.ts @@ -236,7 +236,7 @@ export const MENU_ITEMS: MenuItem[] = [ { id: 'registries-overview', routerLink: '/registries/overview', - label: 'navigation.overview', + label: 'navigation.discover', visible: true, routerLinkActiveOptions: { exact: true }, }, @@ -267,7 +267,7 @@ export const MENU_ITEMS: MenuItem[] = [ { id: 'preprints-overview', routerLink: '/preprints/overview', - label: 'navigation.overview', + label: 'navigation.discover', visible: true, routerLinkActiveOptions: { exact: false }, }, @@ -287,22 +287,6 @@ export const MENU_ITEMS: MenuItem[] = [ }, ], }, - { - id: 'my-profile', - routerLink: '/my-profile', - label: 'navigation.profile', - icon: 'osf-icon-profile', - visible: false, - routerLinkActiveOptions: { exact: false }, - }, - { - id: 'institutions', - routerLink: '/institutions', - label: 'navigation.institutions', - icon: 'osf-icon-institutions', - visible: true, - routerLinkActiveOptions: { exact: false }, - }, { id: 'collections', label: 'navigation.collections', @@ -327,12 +311,28 @@ export const MENU_ITEMS: MenuItem[] = [ visible: true, routerLinkActiveOptions: { exact: false }, }, + { + id: 'institutions', + routerLink: '/institutions', + label: 'navigation.institutions', + icon: 'osf-icon-institutions', + visible: true, + routerLinkActiveOptions: { exact: false }, + styleClass: 'mb-5', + }, + { + id: 'my-profile', + routerLink: '/my-profile', + label: 'navigation.profile', + icon: 'osf-icon-profile', + visible: false, + routerLinkActiveOptions: { exact: false }, + }, { id: 'settings', label: 'navigation.settings', icon: 'osf-icon-settings', routerLinkActiveOptions: { exact: true }, - styleClass: 'mt-5', visible: false, items: [ { diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index ed151ff90..36af20d73 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -148,6 +148,7 @@ "myResources": "My Resources", "registries": "Registries", "overview": "Overview", + "discover": "Discover", "registriesSubRoutes": { "myRegistrations": "My Registrations", "registryDetails": "Registry Details" From 27f4b5d700e895535e5f90aafe89b6888a691275 Mon Sep 17 00:00:00 2001 From: nsemets Date: Thu, 14 Aug 2025 18:46:47 +0300 Subject: [PATCH 03/16] fix(menu): changed overview to discover and replaced some icons --- .../pages/dashboard/dashboard.component.html | 10 ++-- .../pages/dashboard/dashboard.component.scss | 10 ---- .../pages/dashboard/dashboard.component.ts | 4 +- .../my-profile/my-profile.component.html | 2 +- .../preprint-services.component.html | 2 +- .../contributors/contributors.component.html | 11 ++-- .../title-and-abstract-step.component.html | 2 +- .../landing/preprints-landing.component.html | 11 ++-- .../features/preprints/preprints.routes.ts | 8 +-- .../view-duplicates.component.html | 7 ++- .../view-duplicates.component.ts | 5 +- .../linked-resources.component.html | 7 ++- .../linked-resources.component.ts | 5 +- .../overview-components.component.html | 7 ++- .../overview-components.component.ts | 5 +- .../registry-services.component.html | 2 +- .../my-registrations.component.scss | 3 + .../features/registries/registries.routes.ts | 4 +- .../registration-links-card.component.html | 9 +-- .../registration-links-card.component.ts | 9 +-- .../folder-selector.component.html | 2 +- .../data-resources.component.html | 53 +++++++++--------- .../data-resources.component.scss | 6 +- .../files-tree/files-tree.component.html | 14 ++--- .../my-projects-table.component.html | 2 +- .../my-projects-table.component.ts | 11 ++-- .../registration-card.component.html | 8 +-- .../registration-card.component.ts | 12 +++- src/assets/i18n/en.json | 4 +- src/assets/icons/colored/sort.svg | 4 -- src/assets/images/files/doc.svg | 4 -- src/assets/images/files/pdf.svg | 3 - src/assets/images/help-button.svg | 12 ---- src/assets/images/project/arnold-ven.png | Bin 6135 -> 0 bytes src/assets/images/project/center-for-os.png | Bin 10432 -> 0 bytes 35 files changed, 119 insertions(+), 139 deletions(-) delete mode 100644 src/assets/icons/colored/sort.svg delete mode 100644 src/assets/images/files/doc.svg delete mode 100644 src/assets/images/files/pdf.svg delete mode 100644 src/assets/images/help-button.svg delete mode 100644 src/assets/images/project/arnold-ven.png delete mode 100644 src/assets/images/project/center-for-os.png diff --git a/src/app/features/home/pages/dashboard/dashboard.component.html b/src/app/features/home/pages/dashboard/dashboard.component.html index e0b636867..d732f630d 100644 --- a/src/app/features/home/pages/dashboard/dashboard.component.html +++ b/src/app/features/home/pages/dashboard/dashboard.component.html @@ -34,12 +34,14 @@ /> -
- +
+

{{ 'home.loggedIn.publicProjects.title' | translate }}

-
+

{{ 'home.loggedIn.latestResearch.title' | translate }}

{{ 'home.loggedIn.latestResearch.subtitle' | translate }}

@@ -48,7 +50,7 @@

{{ 'home.loggedIn.latestResearch.title' | translate }}

-
+

{{ 'home.loggedIn.hosting.title' | translate }}

{{ 'home.loggedIn.hosting.subtitle' | translate }}

diff --git a/src/app/features/home/pages/dashboard/dashboard.component.scss b/src/app/features/home/pages/dashboard/dashboard.component.scss index e146c9417..db6bc077a 100644 --- a/src/app/features/home/pages/dashboard/dashboard.component.scss +++ b/src/app/features/home/pages/dashboard/dashboard.component.scss @@ -1,5 +1,3 @@ -@use "assets/styles/mixins" as mix; - :host { display: flex; flex-direction: column; @@ -20,20 +18,12 @@ .public-projects-container { background-color: var(--gradient-1); - - .osf-icon-search { - color: var(--dark-blue-1); - font-size: mix.rem(32px); - margin-right: mix.rem(12px); - } } .latest-research-container { background-color: var(--bg-blue-3); - row-gap: mix.rem(24px); } .hosting-container { background-color: var(--bg-blue-2); - row-gap: mix.rem(24px); } diff --git a/src/app/features/home/pages/dashboard/dashboard.component.ts b/src/app/features/home/pages/dashboard/dashboard.component.ts index 563e18143..66608b15f 100644 --- a/src/app/features/home/pages/dashboard/dashboard.component.ts +++ b/src/app/features/home/pages/dashboard/dashboard.component.ts @@ -16,7 +16,7 @@ import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import { CreateProjectDialogComponent } from '@osf/features/my-projects/components'; import { AccountSettingsService } from '@osf/features/settings/account-settings/services'; -import { MyProjectsTableComponent, SubHeaderComponent } from '@osf/shared/components'; +import { IconComponent, MyProjectsTableComponent, SubHeaderComponent } from '@osf/shared/components'; import { MY_PROJECTS_TABLE_PARAMS } from '@osf/shared/constants'; import { SortOrder } from '@osf/shared/enums'; import { IS_MEDIUM } from '@osf/shared/helpers'; @@ -27,7 +27,7 @@ import { ConfirmEmailComponent } from '../../components'; @Component({ selector: 'osf-dashboard', - imports: [RouterLink, Button, SubHeaderComponent, MyProjectsTableComponent, TranslatePipe], + imports: [RouterLink, Button, SubHeaderComponent, MyProjectsTableComponent, IconComponent, TranslatePipe], templateUrl: './dashboard.component.html', styleUrl: './dashboard.component.scss', providers: [DialogService], diff --git a/src/app/features/my-profile/my-profile.component.html b/src/app/features/my-profile/my-profile.component.html index 75465539d..a1c91161c 100644 --- a/src/app/features/my-profile/my-profile.component.html +++ b/src/app/features/my-profile/my-profile.component.html @@ -42,7 +42,7 @@

{{ currentUser()?.fullName }}

@if (currentUser()?.education?.length) {
- +

{{ currentUser()?.education?.[0]?.institution }}

diff --git a/src/app/features/preprints/components/preprint-services/preprint-services.component.html b/src/app/features/preprints/components/preprint-services/preprint-services.component.html index afd953155..c4f3cc58a 100644 --- a/src/app/features/preprints/components/preprint-services/preprint-services.component.html +++ b/src/app/features/preprints/components/preprint-services/preprint-services.component.html @@ -8,7 +8,7 @@

{{ 'preprints.services.title' | translate }}

diff --git a/src/app/features/preprints/components/stepper/metadata-step/contributors/contributors.component.html b/src/app/features/preprints/components/stepper/metadata-step/contributors/contributors.component.html index 18e837dc1..c0aceccdb 100644 --- a/src/app/features/preprints/components/stepper/metadata-step/contributors/contributors.component.html +++ b/src/app/features/preprints/components/stepper/metadata-step/contributors/contributors.component.html @@ -1,11 +1,12 @@

{{ 'project.overview.metadata.contributors' | translate }}

+
- - - Warning: Changing your permissions will prevent you from editing your draft. + + {{ 'preprints.preprintContributorsWarning' | translate }}
+ {{ 'project.overview.metadata.contributors' | translate }}
diff --git a/src/app/features/preprints/components/stepper/title-and-abstract-step/title-and-abstract-step.component.html b/src/app/features/preprints/components/stepper/title-and-abstract-step/title-and-abstract-step.component.html index 7e835e96c..63e2b0b1c 100644 --- a/src/app/features/preprints/components/stepper/title-and-abstract-step/title-and-abstract-step.component.html +++ b/src/app/features/preprints/components/stepper/title-and-abstract-step/title-and-abstract-step.component.html @@ -50,7 +50,7 @@

{{ 'preprints.preprintStepper.titleAndAbstract.title' | translate }}

styleClass="w-full" [label]="'common.buttons.back' | translate" severity="info" - [routerLink]="['/preprints', 'overview', providerId(), 'discover']" + [routerLink]="['/preprints', providerId(), 'discover']" /> {{ 'preprints.title' | translate }}

{{ 'preprints.createServer.title' | translate }}

{{ 'preprints.createServer.description' | translate }} - {{ - 'preprints.createServer.openSourceCode' | translate - }} + + {{ 'preprints.createServer.openSourceCode' | translate }} + {{ 'preprints.createServer.and' | translate }} - {{ - 'preprints.createServer.publicRoadmap' | translate - }} + {{ 'preprints.createServer.publicRoadmap' | translate }} . {{ 'preprints.createServer.inputWelcome' | translate }}

diff --git a/src/app/features/preprints/preprints.routes.ts b/src/app/features/preprints/preprints.routes.ts index bb6400578..53d6f507a 100644 --- a/src/app/features/preprints/preprints.routes.ts +++ b/src/app/features/preprints/preprints.routes.ts @@ -36,24 +36,24 @@ export const preprintsRoutes: Routes = [ { path: '', pathMatch: 'full', - redirectTo: 'overview', + redirectTo: 'discover', }, { - path: 'overview', + path: 'discover', loadComponent: () => import('@osf/features/preprints/pages/landing/preprints-landing.component').then( (c) => c.PreprintsLandingComponent ), }, { - path: 'overview/:providerId', + path: ':providerId', loadComponent: () => import('@osf/features/preprints/pages/preprint-provider-overview/preprint-provider-overview.component').then( (c) => c.PreprintProviderOverviewComponent ), }, { - path: 'overview/:providerId/discover', + path: ':providerId/discover', loadComponent: () => import('@osf/features/preprints/pages/preprint-provider-discover/preprint-provider-discover.component').then( (c) => c.PreprintProviderDiscoverComponent diff --git a/src/app/features/project/analytics/components/view-duplicates/view-duplicates.component.html b/src/app/features/project/analytics/components/view-duplicates/view-duplicates.component.html index b3ca268c8..f3940f870 100644 --- a/src/app/features/project/analytics/components/view-duplicates/view-duplicates.component.html +++ b/src/app/features/project/analytics/components/view-duplicates/view-duplicates.component.html @@ -16,10 +16,11 @@

{{ 'project.overview.dialog.fork.noForksMessage' | @if (duplicate.currentUserPermissions.includes(UserPermissions.Read)) {
-

- +

+ {{ duplicate.title }}

+
@if (duplicate.currentUserPermissions.includes(UserPermissions.Write)) { icon="fas fa-ellipsis-vertical" raised variant="outlined" - (click)="componentActionMenu.toggle($event)" + (onClick)="componentActionMenu.toggle($event)" > } diff --git a/src/app/features/project/analytics/components/view-duplicates/view-duplicates.component.ts b/src/app/features/project/analytics/components/view-duplicates/view-duplicates.component.ts index d58e3aa7c..03596d19b 100644 --- a/src/app/features/project/analytics/components/view-duplicates/view-duplicates.component.ts +++ b/src/app/features/project/analytics/components/view-duplicates/view-duplicates.component.ts @@ -9,7 +9,7 @@ import { PaginatorState } from 'primeng/paginator'; import { map, of } from 'rxjs'; -import { DatePipe, NgClass } from '@angular/common'; +import { DatePipe } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -32,6 +32,7 @@ import { } from '@osf/features/registry/store/registry-overview'; import { CustomPaginatorComponent, + IconComponent, LoadingSpinnerComponent, SubHeaderComponent, TruncatedTextComponent, @@ -49,11 +50,11 @@ import { ClearDuplicates, DuplicatesSelectors, GetAllDuplicates } from '@shared/ Button, Menu, TruncatedTextComponent, - NgClass, DatePipe, LoadingSpinnerComponent, RouterLink, CustomPaginatorComponent, + IconComponent, ], templateUrl: './view-duplicates.component.html', styleUrl: './view-duplicates.component.scss', diff --git a/src/app/features/project/overview/components/linked-resources/linked-resources.component.html b/src/app/features/project/overview/components/linked-resources/linked-resources.component.html index dafa8ce61..240745ac9 100644 --- a/src/app/features/project/overview/components/linked-resources/linked-resources.component.html +++ b/src/app/features/project/overview/components/linked-resources/linked-resources.component.html @@ -17,17 +17,18 @@

{{ 'project.overview.linkedProjects.title' | translate }}

@for (linkedResource of linkedResources(); track linkedResource.id) {
-

- +

+ {{ linkedResource.title }}

+
diff --git a/src/app/features/project/overview/components/linked-resources/linked-resources.component.ts b/src/app/features/project/overview/components/linked-resources/linked-resources.component.ts index 18ec6782c..5496a16f5 100644 --- a/src/app/features/project/overview/components/linked-resources/linked-resources.component.ts +++ b/src/app/features/project/overview/components/linked-resources/linked-resources.component.ts @@ -6,18 +6,17 @@ import { Button } from 'primeng/button'; import { DialogService } from 'primeng/dynamicdialog'; import { Skeleton } from 'primeng/skeleton'; -import { NgClass } from '@angular/common'; import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { DeleteNodeLinkDialogComponent, LinkResourceDialogComponent } from '@osf/features/project/overview/components'; -import { TruncatedTextComponent } from '@osf/shared/components'; +import { IconComponent, TruncatedTextComponent } from '@osf/shared/components'; import { IS_XSMALL } from '@osf/shared/helpers'; import { NodeLinksSelectors } from '@shared/stores'; @Component({ selector: 'osf-linked-resources', - imports: [Button, NgClass, Skeleton, TranslatePipe, TruncatedTextComponent], + imports: [Button, Skeleton, TranslatePipe, TruncatedTextComponent, IconComponent], templateUrl: './linked-resources.component.html', styleUrl: './linked-resources.component.scss', providers: [DialogService], diff --git a/src/app/features/project/overview/components/overview-components/overview-components.component.html b/src/app/features/project/overview/components/overview-components/overview-components.component.html index 57320c9c7..275c3c19c 100644 --- a/src/app/features/project/overview/components/overview-components/overview-components.component.html +++ b/src/app/features/project/overview/components/overview-components/overview-components.component.html @@ -19,10 +19,11 @@

{{ 'project.overview.components.title' | translate }}

@for (component of components(); track component.id) {
-

- +

+ {{ component.title }}

+
@if (component.currentUserPermissions.includes(UserPermissions.Write)) { icon="fas fa-ellipsis-vertical" raised variant="outlined" - (click)="componentActionMenu.toggle($event)" + (onClick)="componentActionMenu.toggle($event)" > } diff --git a/src/app/features/project/overview/components/overview-components/overview-components.component.ts b/src/app/features/project/overview/components/overview-components/overview-components.component.ts index b023deaeb..01660ddfd 100644 --- a/src/app/features/project/overview/components/overview-components/overview-components.component.ts +++ b/src/app/features/project/overview/components/overview-components/overview-components.component.ts @@ -7,12 +7,11 @@ import { DialogService } from 'primeng/dynamicdialog'; import { Menu } from 'primeng/menu'; import { Skeleton } from 'primeng/skeleton'; -import { NgClass } from '@angular/common'; import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { Router } from '@angular/router'; -import { TruncatedTextComponent } from '@osf/shared/components'; +import { IconComponent, TruncatedTextComponent } from '@osf/shared/components'; import { ResourceType, UserPermissions } from '@osf/shared/enums'; import { IS_XSMALL } from '@osf/shared/helpers'; @@ -22,7 +21,7 @@ import { DeleteComponentDialogComponent } from '../delete-component-dialog/delet @Component({ selector: 'osf-project-components', - imports: [Button, Menu, Skeleton, TranslatePipe, TruncatedTextComponent, NgClass], + imports: [Button, Menu, Skeleton, TranslatePipe, TruncatedTextComponent, IconComponent], templateUrl: './overview-components.component.html', styleUrl: './overview-components.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/src/app/features/registries/components/registry-services/registry-services.component.html b/src/app/features/registries/components/registry-services/registry-services.component.html index 5a629b5e4..832caae5d 100644 --- a/src/app/features/registries/components/registry-services/registry-services.component.html +++ b/src/app/features/registries/components/registry-services/registry-services.component.html @@ -8,7 +8,7 @@

{{ 'registries.services.title' | translate }} diff --git a/src/app/features/registries/pages/my-registrations/my-registrations.component.scss b/src/app/features/registries/pages/my-registrations/my-registrations.component.scss index e69de29bb..5f81e6c60 100644 --- a/src/app/features/registries/pages/my-registrations/my-registrations.component.scss +++ b/src/app/features/registries/pages/my-registrations/my-registrations.component.scss @@ -0,0 +1,3 @@ +:host { + flex: 1; +} diff --git a/src/app/features/registries/registries.routes.ts b/src/app/features/registries/registries.routes.ts index 4b3ea5983..c2ce29a6f 100644 --- a/src/app/features/registries/registries.routes.ts +++ b/src/app/features/registries/registries.routes.ts @@ -31,11 +31,11 @@ export const registriesRoutes: Routes = [ redirectTo: 'overview', }, { - path: 'overview', + path: 'discover', loadComponent: () => import('@osf/features/registries/pages').then((c) => c.RegistriesLandingComponent), }, { - path: 'overview/:name', + path: ':name', loadComponent: () => import('@osf/features/registries/pages/registries-provider-search/registries-provider-search.component').then( (c) => c.RegistriesProviderSearchComponent diff --git a/src/app/features/registry/components/registration-links-card/registration-links-card.component.html b/src/app/features/registry/components/registration-links-card/registration-links-card.component.html index 95a2f6e72..8afb19122 100644 --- a/src/app/features/registry/components/registration-links-card/registration-links-card.component.html +++ b/src/app/features/registry/components/registration-links-card/registration-links-card.component.html @@ -1,12 +1,9 @@ @if (registrationData()) {
-
- @if (registrationData().isPublic) { - - } @else { - - } +
+ +

{{ registrationData().title || 'project.registrations.card.noTitle' | translate }}

diff --git a/src/app/features/registry/components/registration-links-card/registration-links-card.component.ts b/src/app/features/registry/components/registration-links-card/registration-links-card.component.ts index bc6556254..02831f81a 100644 --- a/src/app/features/registry/components/registration-links-card/registration-links-card.component.ts +++ b/src/app/features/registry/components/registration-links-card/registration-links-card.component.ts @@ -6,13 +6,14 @@ import { Card } from 'primeng/card'; import { DatePipe } from '@angular/common'; import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core'; -import { LinkedNode, LinkedRegistration, RegistryComponentModel } from '@osf/features/registry/models'; -import { DataResourcesComponent, TruncatedTextComponent } from '@shared/components'; -import { RevisionReviewStates } from '@shared/enums'; +import { DataResourcesComponent, IconComponent, TruncatedTextComponent } from '@osf/shared/components'; +import { RevisionReviewStates } from '@osf/shared/enums'; + +import { LinkedNode, LinkedRegistration, RegistryComponentModel } from '../../models'; @Component({ selector: 'osf-registration-links-card', - imports: [Card, Button, TranslatePipe, DatePipe, DataResourcesComponent, TruncatedTextComponent], + imports: [Card, Button, TranslatePipe, DatePipe, DataResourcesComponent, TruncatedTextComponent, IconComponent], templateUrl: './registration-links-card.component.html', styleUrl: './registration-links-card.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/src/app/shared/components/addons/folder-selector/folder-selector.component.html b/src/app/shared/components/addons/folder-selector/folder-selector.component.html index ca63a66d2..c9e78d3b9 100644 --- a/src/app/shared/components/addons/folder-selector/folder-selector.component.html +++ b/src/app/shared/components/addons/folder-selector/folder-selector.component.html @@ -47,7 +47,7 @@

{{ 'settings.addons.configureAddon.selectFolder' | translate }}

diff --git a/src/app/shared/components/data-resources/data-resources.component.scss b/src/app/shared/components/data-resources/data-resources.component.scss index 95189c74d..0552ac4b9 100644 --- a/src/app/shared/components/data-resources/data-resources.component.scss +++ b/src/app/shared/components/data-resources/data-resources.component.scss @@ -1,13 +1,11 @@ -@use "/assets/styles/variables" as var; - .icon-container { - color: var.$dark-blue-1; + color: var(--dark-blue-1); display: flex; align-items: center; column-gap: 0.5rem; &:hover { text-decoration: none; - color: var.$pr-blue-1; + color: var(--pr-blue-1); } } diff --git a/src/app/shared/components/files-tree/files-tree.component.html b/src/app/shared/components/files-tree/files-tree.component.html index 3282cfd12..a1d66f1f1 100644 --- a/src/app/shared/components/files-tree/files-tree.component.html +++ b/src/app/shared/components/files-tree/files-tree.component.html @@ -10,7 +10,7 @@ @if (isDragOver()) {
-

{{ 'project.files.dropText' | translate }}

+

{{ 'project.files.dropText' | translate }}

}
@@ -35,12 +35,10 @@ @if (file.previousFolder) {
-
-
- - - {{ file.name ?? '' }} -
+
+ + + {{ file.name ?? '' }}
} @else { @@ -100,7 +98,7 @@

{{ 'project.files.emptyState' | transl } @else {
-

{{ 'project.files.dropText' | translate }}

+

{{ 'project.files.dropText' | translate }}

}

diff --git a/src/app/shared/components/my-projects-table/my-projects-table.component.html b/src/app/shared/components/my-projects-table/my-projects-table.component.html index 3b210ca68..141f1fda4 100644 --- a/src/app/shared/components/my-projects-table/my-projects-table.component.html +++ b/src/app/shared/components/my-projects-table/my-projects-table.component.html @@ -63,7 +63,7 @@

- + {{ item.title }}

diff --git a/src/app/shared/components/my-projects-table/my-projects-table.component.ts b/src/app/shared/components/my-projects-table/my-projects-table.component.ts index f15e71df9..a748d2238 100644 --- a/src/app/shared/components/my-projects-table/my-projects-table.component.ts +++ b/src/app/shared/components/my-projects-table/my-projects-table.component.ts @@ -8,14 +8,15 @@ import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'; import { FormControl } from '@angular/forms'; -import { SortOrder } from '@osf/shared/enums/sort-order.enum'; -import { TableParameters } from '@osf/shared/models/table-parameters.model'; -import { SearchInputComponent } from '@shared/components/search-input/search-input.component'; -import { MyResourcesItem } from '@shared/models/my-resources/my-resources.models'; +import { SortOrder } from '@osf/shared/enums'; +import { MyResourcesItem, TableParameters } from '@osf/shared/models'; + +import { IconComponent } from '../icon/icon.component'; +import { SearchInputComponent } from '../search-input/search-input.component'; @Component({ selector: 'osf-my-projects-table', - imports: [CommonModule, TableModule, SearchInputComponent, Skeleton, TranslatePipe], + imports: [CommonModule, TableModule, SearchInputComponent, IconComponent, Skeleton, TranslatePipe], templateUrl: './my-projects-table.component.html', styleUrl: './my-projects-table.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/src/app/shared/components/registration-card/registration-card.component.html b/src/app/shared/components/registration-card/registration-card.component.html index 41f52bb53..2dfae9848 100644 --- a/src/app/shared/components/registration-card/registration-card.component.html +++ b/src/app/shared/components/registration-card/registration-card.component.html @@ -2,12 +2,8 @@ @if (registrationData()) {
-
- @if (registrationData().public) { - - } @else { - - } +
+

{{ registrationData().title || 'project.registrations.card.noTitle' | translate }}

diff --git a/src/app/shared/components/registration-card/registration-card.component.ts b/src/app/shared/components/registration-card/registration-card.component.ts index a1d28102f..733cb2197 100644 --- a/src/app/shared/components/registration-card/registration-card.component.ts +++ b/src/app/shared/components/registration-card/registration-card.component.ts @@ -11,11 +11,21 @@ import { RegistrationReviewStates, RegistryStatus, RevisionReviewStates } from ' import { RegistrationCard } from '@osf/shared/models'; import { DataResourcesComponent } from '../data-resources/data-resources.component'; +import { IconComponent } from '../icon/icon.component'; import { StatusBadgeComponent } from '../status-badge/status-badge.component'; @Component({ selector: 'osf-registration-card', - imports: [Card, Button, TranslatePipe, DatePipe, RouterLink, StatusBadgeComponent, DataResourcesComponent], + imports: [ + Card, + Button, + TranslatePipe, + DatePipe, + RouterLink, + StatusBadgeComponent, + DataResourcesComponent, + IconComponent, + ], templateUrl: './registration-card.component.html', styleUrl: './registration-card.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 36af20d73..5a1c35c56 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -2079,7 +2079,9 @@ "postModerationNotice": "{{pluralCapitalizedPreprintWord}} are a permanent part of the scholarly record. Withdrawal requests are subject to this service’s policy on {{singularPreprintWord}} version removal and at the discretion of the moderators.
This service uses post-moderation. This request will be submitted to service moderators for review. If the request is approved, this {{singularPreprintWord}} version will be replaced by a tombstone page with metadata and the reason for withdrawal. This {{singularPreprintWord}} version will still be searchable by other users after removal.", "noModerationNotice": "{{pluralCapitalizedPreprintWord}} are a permanent part of the scholarly record. Withdrawal requests are subject to this service’s policy on {{singularPreprintWord}} version removal and at the discretion of the moderators.
This request will be submitted to {{supportEmail}} for review and removal. If the request is approved, this {{singularPreprintWord}} version will be replaced by a tombstone page with metadata and the reason for withdrawal. This {{singularPreprintWord}} version will still be searchable by other users after removal." } - } + }, + "preprintContributorsWarning": "Warning: Changing your permissions will prevent you from editing your draft.", + "addContributorBySearch": "Add Contributor By Search" }, "registries": { "title": "Registries", diff --git a/src/assets/icons/colored/sort.svg b/src/assets/icons/colored/sort.svg deleted file mode 100644 index d0e579666..000000000 --- a/src/assets/icons/colored/sort.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/images/files/doc.svg b/src/assets/images/files/doc.svg deleted file mode 100644 index 0755bd04a..000000000 --- a/src/assets/images/files/doc.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/images/files/pdf.svg b/src/assets/images/files/pdf.svg deleted file mode 100644 index f2bd18821..000000000 --- a/src/assets/images/files/pdf.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/images/help-button.svg b/src/assets/images/help-button.svg deleted file mode 100644 index 3ef25edd3..000000000 --- a/src/assets/images/help-button.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/src/assets/images/project/arnold-ven.png b/src/assets/images/project/arnold-ven.png deleted file mode 100644 index fbe982d021ca8918960397d51ade0e8ef6e30cd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6135 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 diff --git a/src/assets/images/project/center-for-os.png b/src/assets/images/project/center-for-os.png deleted file mode 100644 index 64955a25ac0f5012315b3cbca5dd1b7a556f27c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10432 zcmZ{qWmFq&*M;%o8lbqlyE`dTEVxT?mm&p#L@Q-u_ZrEP4yK^_+S)wY%4?LA^_kr_WOO@CZnlAD(b-L*d{N zPzaEq=(yY^G#c8$!7^AOFyK1}R1hJxxrSVB2^@SFDFPT7_3bP!Gplr0Zlp8>I7Hz8 zJ>)L|M4O$cv9ZzC+S+-ot$)A<*3b}FRFoPWeGrPA&BIfjl9G~@m9@f)fP{L-4?=#< zmI~_d*kQ%OQcYA$`8GQ{Tdd-)tf**bX9xGKIRY8=u7zg)THZ~(SA7s?rxB5^UD=T4P;j>a^w(f<<$ZUCy;R?mz;9rD@@2Bz= z;z>#4cC{dChIPLm?=SaOpuqVIr--2qjg5NR+S}XPD;)uk<5^<9zUr)OY+|CK!i!5w zOS%E4vT(_ub}1goM?uu5-05jz^Q%KcBpl=E0{%nz>tSzjY;0{YU0O?FklJX3H3eP@JbVdx%$uxuD6qe|-t0^hD`{XeFF`Anfa&vbV z@!?c%(xKbHh^zrQySQMZp;gzBbM4(Qel~0>-Q2|MtLdgPZT4Ug>x8DBOxm*ru4bN% z%+2OB7Cs;6@Xzl3cHu;ho}?%6%Du%J(t5&aZt7wW(*)F?gZ;DD5he#e^! z0&jMNa_H*L-dyg6pT=(ok=@*6Xc4OTJ+7Wl z2c5PFtXLO9TZo2scXqCi7x|LggI*=~e^!C%EiJ#@-F;qI+Tf5w(HFX00 z-hMES0w@+{?7xD(MUU~1RA)bi)PgWLr`*@c2?*p|*2;|VFT7iBZCeRxk6Kn7Y%lSxPn4S)H^->7G8AF-eY=U9^At zR3_xQcD4U7kJLm7EJ#Ej@0uXTliMXx61Sj)$QS1a0%;yFA1|-;TSK?1r0J}JxrT9!xLKg^1s3W|$g5C4>92fVVvt>+aK(2I#ZzC1tP z-`{hYwwa4PeL3Xeh!EG-)y21Pc5-58W!(;CTB7&K0HPtw8;M%-i4)W!alo}MlYh7-0vzRcSON0IR@q^E%>4Jqus&ui%x&7%()sks$&)cAE?VeSVNyPrNcfhA2 zYX>WfP0REs?x=srGzphOj=HJ+6$XFre{;O}Q>W}*EUAFaXxjPT!J~r%5)u-VCby7> zC+dpg;^NfQ)V#brJPd_6a+=!#pp1$uDt^!n$aTjU6l1Do%iZl6QiYmfD+}pXFiE<^L(uBj7c+*VfUgudg5SvYMHnU$3%2 zT%i3^9%5ro0o^}5tYP!?_U`aHA{s)J@YoxtaCCH}prG)aSXm(t8ci2qV`7Tp#kIV; zy&Z(JAJoXJu68#xOeg=xU6PvyLqtLS*W^OYWBvaL@x6h@nfO26LVOvWG>1v4M{!Dp)|vt3tJ zMIDqQ;ZHPYG_4BZ_6CZaYDw6aS3n?z8yJK*yu{NSi2Fd0ZKM% za-(UL#U#j28ZTD{P_5I|A1H)!pBz|91N$47%5^u zP0x(s;p%!O#{;fbG-|kG3wq6GE49b;S-)95-(%#_@iA-k@>E86akyhJ&i*CFS1Q43Y2Sy ?Lq6SEB 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 YHhh>u_bd4~U@{R-39KexDQh13KhrJI%K!iX From 9a91b4ff99c224663e1df1a3ea3475c5ce30db03 Mon Sep 17 00:00:00 2001 From: nsemets Date: Thu, 14 Aug 2025 18:49:52 +0300 Subject: [PATCH 04/16] fix(menu): added margin --- src/app/core/constants/nav-items.constant.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/core/constants/nav-items.constant.ts b/src/app/core/constants/nav-items.constant.ts index 0fba21ee3..523333453 100644 --- a/src/app/core/constants/nav-items.constant.ts +++ b/src/app/core/constants/nav-items.constant.ts @@ -394,7 +394,7 @@ export const MENU_ITEMS: MenuItem[] = [ visible: false, routerLink: null, routerLinkActiveOptions: { exact: false }, - styleClass: 'mt-5', + styleClass: 'my-5', }, { id: 'log-out', @@ -402,6 +402,6 @@ export const MENU_ITEMS: MenuItem[] = [ visible: false, routerLink: null, routerLinkActiveOptions: { exact: false }, - styleClass: 'mt-5', + styleClass: 'my-5', }, ]; From 63ea2eaf178ccb5fe5cc23e59185b74835fa1cff Mon Sep 17 00:00:00 2001 From: nsemets Date: Thu, 14 Aug 2025 19:19:50 +0300 Subject: [PATCH 05/16] fix(menu): fixed links to discover --- src/app/core/constants/nav-items.constant.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/core/constants/nav-items.constant.ts b/src/app/core/constants/nav-items.constant.ts index 523333453..746da2133 100644 --- a/src/app/core/constants/nav-items.constant.ts +++ b/src/app/core/constants/nav-items.constant.ts @@ -235,7 +235,7 @@ export const MENU_ITEMS: MenuItem[] = [ items: [ { id: 'registries-overview', - routerLink: '/registries/overview', + routerLink: '/registries/discover', label: 'navigation.discover', visible: true, routerLinkActiveOptions: { exact: true }, @@ -266,7 +266,7 @@ export const MENU_ITEMS: MenuItem[] = [ items: [ { id: 'preprints-overview', - routerLink: '/preprints/overview', + routerLink: '/preprints/discover', label: 'navigation.discover', visible: true, routerLinkActiveOptions: { exact: false }, From dd44f6f0980de820adbb47f3ba731afc9ab5e8af Mon Sep 17 00:00:00 2001 From: nsemets Date: Fri, 15 Aug 2025 13:13:42 +0300 Subject: [PATCH 06/16] fix(preprints): fixed routes --- src/app/features/preprints/preprints.routes.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/app/features/preprints/preprints.routes.ts b/src/app/features/preprints/preprints.routes.ts index 53d6f507a..059a8f64e 100644 --- a/src/app/features/preprints/preprints.routes.ts +++ b/src/app/features/preprints/preprints.routes.ts @@ -45,13 +45,6 @@ export const preprintsRoutes: Routes = [ (c) => c.PreprintsLandingComponent ), }, - { - path: ':providerId', - loadComponent: () => - import('@osf/features/preprints/pages/preprint-provider-overview/preprint-provider-overview.component').then( - (c) => c.PreprintProviderOverviewComponent - ), - }, { path: ':providerId/discover', loadComponent: () => @@ -109,6 +102,13 @@ export const preprintsRoutes: Routes = [ ), canDeactivate: [ConfirmLeavingGuard], }, + { + path: ':providerId', + loadComponent: () => + import('@osf/features/preprints/pages/preprint-provider-overview/preprint-provider-overview.component').then( + (c) => c.PreprintProviderOverviewComponent + ), + }, ], }, ]; From a3affeceb4f7a13d7e58637748f52aa900bfeccd Mon Sep 17 00:00:00 2001 From: nsemets Date: Fri, 22 Aug 2025 14:51:08 +0300 Subject: [PATCH 07/16] fix(icons): updated menu icons --- .../nav-menu/nav-menu.component.scss | 4 - src/app/core/constants/nav-items.constant.ts | 40 +++++---- .../pages/dashboard/dashboard.component.html | 2 +- .../institutions-list.component.html | 2 +- .../meetings-landing.component.html | 2 +- .../my-projects/my-projects.component.html | 2 +- .../landing/preprints-landing.component.html | 2 +- .../landing/preprints-landing.component.scss | 12 +-- .../my-preprints/my-preprints.component.html | 2 +- .../project/addons/addons.component.html | 2 +- .../my-registrations.component.html | 2 +- .../registries-landing.component.html | 2 +- .../account-settings.component.html | 2 +- .../settings/addons/addons.component.html | 2 +- .../developer-apps-container.component.html | 2 +- .../notifications.component.html | 2 +- .../profile-settings.component.html | 2 +- .../settings/tokens/tokens.component.html | 2 +- .../sub-header/sub-header.component.html | 2 +- .../sub-header/sub-header.component.scss | 5 +- src/assets/icons/colored/collections.svg | 3 + src/assets/icons/colored/institutions.svg | 20 +++++ src/assets/icons/colored/meetings.svg | 18 ++++ src/assets/icons/colored/preprints.svg | 11 +++ src/assets/icons/colored/projects.svg | 12 +++ src/assets/icons/colored/registries.svg | 11 +++ src/assets/icons/socials/email.svg | 4 - src/assets/icons/socials/facebook.svg | 4 - src/assets/icons/socials/github.svg | 4 - src/assets/icons/socials/group.svg | 4 - src/assets/icons/socials/linkedin.svg | 4 - src/assets/icons/socials/website.svg | 12 --- src/assets/icons/socials/x.svg | 4 - src/assets/icons/source/collections-dark.svg | 3 + src/assets/icons/source/institutions-dark.svg | 20 +++++ src/assets/icons/source/meetings-dark.svg | 18 ++++ src/assets/icons/source/preprints-dark.svg | 11 +++ src/assets/icons/source/projects-dark.svg | 12 +++ src/assets/icons/source/registries-dark.svg | 11 +++ src/assets/styles/_icons.scss | 88 +++++++++++++++++++ src/assets/styles/overrides/panel-menu.scss | 2 + src/assets/styles/styles.scss | 8 +- 42 files changed, 293 insertions(+), 84 deletions(-) create mode 100644 src/assets/icons/colored/collections.svg create mode 100644 src/assets/icons/colored/institutions.svg create mode 100644 src/assets/icons/colored/meetings.svg create mode 100644 src/assets/icons/colored/preprints.svg create mode 100644 src/assets/icons/colored/projects.svg create mode 100644 src/assets/icons/colored/registries.svg delete mode 100644 src/assets/icons/socials/email.svg delete mode 100644 src/assets/icons/socials/facebook.svg delete mode 100644 src/assets/icons/socials/github.svg delete mode 100644 src/assets/icons/socials/group.svg delete mode 100644 src/assets/icons/socials/linkedin.svg delete mode 100644 src/assets/icons/socials/website.svg delete mode 100644 src/assets/icons/socials/x.svg create mode 100644 src/assets/icons/source/collections-dark.svg create mode 100644 src/assets/icons/source/institutions-dark.svg create mode 100644 src/assets/icons/source/meetings-dark.svg create mode 100644 src/assets/icons/source/preprints-dark.svg create mode 100644 src/assets/icons/source/projects-dark.svg create mode 100644 src/assets/icons/source/registries-dark.svg create mode 100644 src/assets/styles/_icons.scss diff --git a/src/app/core/components/nav-menu/nav-menu.component.scss b/src/app/core/components/nav-menu/nav-menu.component.scss index 97b64216b..c16ce5464 100644 --- a/src/app/core/components/nav-menu/nav-menu.component.scss +++ b/src/app/core/components/nav-menu/nav-menu.component.scss @@ -7,8 +7,4 @@ border-radius: 0.5rem; font-weight: 700; } - - ::ng-deep li[aria-label="navigation.registriesSubRoutes.registryDetails"] { - border-left-color: transparent !important; - } } diff --git a/src/app/core/constants/nav-items.constant.ts b/src/app/core/constants/nav-items.constant.ts index 746da2133..4a990e163 100644 --- a/src/app/core/constants/nav-items.constant.ts +++ b/src/app/core/constants/nav-items.constant.ts @@ -157,7 +157,7 @@ export const MENU_ITEMS: MenuItem[] = [ id: 'home', routerLink: '/', label: 'navigation.home', - icon: 'osf-icon-home', + icon: 'fas fa-home', routerLinkActiveOptions: { exact: true }, visible: true, }, @@ -165,7 +165,7 @@ export const MENU_ITEMS: MenuItem[] = [ id: 'search', routerLink: '/search', label: 'navigation.searchOsf', - icon: 'osf-icon-search', + icon: 'fas fa-magnifying-glass', routerLinkActiveOptions: { exact: false }, visible: true, }, @@ -173,7 +173,7 @@ export const MENU_ITEMS: MenuItem[] = [ id: 'support', routerLink: null, label: 'navigation.support', - icon: 'osf-icon-support', + icon: 'fas fa-headset', styleClass: 'mb-5', url: 'https://help.osf.io/', routerLinkActiveOptions: { exact: false }, @@ -182,7 +182,7 @@ export const MENU_ITEMS: MenuItem[] = [ { id: 'my-resources', label: 'navigation.myResources', - icon: 'osf-icon-my-projects', + icon: 'custom-icon-projects', routerLinkActiveOptions: { exact: true }, visible: false, items: [ @@ -212,13 +212,14 @@ export const MENU_ITEMS: MenuItem[] = [ { id: 'projects', label: 'navigation.projects', - icon: 'osf-icon-my-projects', + icon: 'custom-icon-projects', routerLinkActiveOptions: { exact: true }, visible: false, items: [ { id: 'project-details', label: 'navigation.projectDetails', + icon: 'custom-icon-projects', routerLink: null, visible: false, routerLinkActiveOptions: { exact: true }, @@ -229,7 +230,7 @@ export const MENU_ITEMS: MenuItem[] = [ { id: 'registries', label: 'navigation.registries', - icon: 'osf-icon-registries', + icon: 'custom-icon-registries', visible: true, routerLinkActiveOptions: { exact: true }, items: [ @@ -249,10 +250,10 @@ export const MENU_ITEMS: MenuItem[] = [ }, { id: 'registry-details', - routerLink: null, label: 'navigation.registriesSubRoutes.registryDetails', - visible: false, + icon: 'custom-icon-registries', routerLinkActiveOptions: { exact: true }, + visible: false, styleClass: 'border-none', }, ], @@ -260,7 +261,7 @@ export const MENU_ITEMS: MenuItem[] = [ { id: 'preprints', label: 'navigation.preprints', - icon: 'osf-icon-preprints', + icon: 'custom-icon-preprints', visible: true, routerLinkActiveOptions: { exact: true }, items: [ @@ -281,8 +282,9 @@ export const MENU_ITEMS: MenuItem[] = [ { id: 'preprints-details', label: 'navigation.preprintsSubRoutes.preprintDetails', - visible: false, + icon: 'custom-icon-preprints', routerLinkActiveOptions: { exact: true }, + visible: false, styleClass: 'border-none', }, ], @@ -290,7 +292,7 @@ export const MENU_ITEMS: MenuItem[] = [ { id: 'collections', label: 'navigation.collections', - icon: 'osf-icon-collections', + icon: 'custom-icon-collections', visible: true, routerLinkActiveOptions: { exact: false }, items: [ @@ -307,7 +309,7 @@ export const MENU_ITEMS: MenuItem[] = [ id: 'meetings', routerLink: '/meetings', label: 'navigation.meetings', - icon: 'osf-icon-meetings', + icon: 'custom-icon-meetings', visible: true, routerLinkActiveOptions: { exact: false }, }, @@ -315,7 +317,7 @@ export const MENU_ITEMS: MenuItem[] = [ id: 'institutions', routerLink: '/institutions', label: 'navigation.institutions', - icon: 'osf-icon-institutions', + icon: 'custom-icon-institutions', visible: true, routerLinkActiveOptions: { exact: false }, styleClass: 'mb-5', @@ -324,14 +326,14 @@ export const MENU_ITEMS: MenuItem[] = [ id: 'my-profile', routerLink: '/my-profile', label: 'navigation.profile', - icon: 'osf-icon-profile', + icon: 'fas fa-user', visible: false, routerLinkActiveOptions: { exact: false }, }, { id: 'settings', label: 'navigation.settings', - icon: 'osf-icon-settings', + icon: 'fas fa-gear', routerLinkActiveOptions: { exact: true }, visible: false, items: [ @@ -384,24 +386,26 @@ export const MENU_ITEMS: MenuItem[] = [ routerLink: null, routerLinkActiveOptions: { exact: false }, label: 'navigation.donate', - icon: 'osf-icon-donate', + icon: 'fas fa-hand-holding-dollar', url: 'https://www.cos.io/support-cos', visible: true, }, { id: 'sign-in', label: 'navigation.signIn', - visible: false, + icon: 'fas fa-arrow-right-to-bracket', routerLink: null, routerLinkActiveOptions: { exact: false }, + visible: false, styleClass: 'my-5', }, { id: 'log-out', label: 'navigation.logOut', - visible: false, + icon: 'fas fa-arrow-right-from-bracket', routerLink: null, routerLinkActiveOptions: { exact: false }, + visible: false, styleClass: 'my-5', }, ]; diff --git a/src/app/features/home/pages/dashboard/dashboard.component.html b/src/app/features/home/pages/dashboard/dashboard.component.html index d732f630d..46a55cd5e 100644 --- a/src/app/features/home/pages/dashboard/dashboard.component.html +++ b/src/app/features/home/pages/dashboard/dashboard.component.html @@ -2,7 +2,7 @@ diff --git a/src/app/features/institutions/pages/institutions-list/institutions-list.component.html b/src/app/features/institutions/pages/institutions-list/institutions-list.component.html index 30b6ec1dc..ee230607c 100644 --- a/src/app/features/institutions/pages/institutions-list/institutions-list.component.html +++ b/src/app/features/institutions/pages/institutions-list/institutions-list.component.html @@ -3,7 +3,7 @@ class="pt-6" [description]="'institutions.description' | translate" [title]="'institutions.title' | translate" - [icon]="'institutions'" + [icon]="'custom-icon-institutions-dark'" /> @if (institutionsLoading()) { diff --git a/src/app/features/meetings/pages/meetings-landing/meetings-landing.component.html b/src/app/features/meetings/pages/meetings-landing/meetings-landing.component.html index 18d8e8720..87b658163 100644 --- a/src/app/features/meetings/pages/meetings-landing/meetings-landing.component.html +++ b/src/app/features/meetings/pages/meetings-landing/meetings-landing.component.html @@ -1,6 +1,6 @@ diff --git a/src/app/features/my-projects/my-projects.component.html b/src/app/features/my-projects/my-projects.component.html index 214654dfe..f584ef2b9 100644 --- a/src/app/features/my-projects/my-projects.component.html +++ b/src/app/features/my-projects/my-projects.component.html @@ -3,7 +3,7 @@ [showButton]="true" [buttonLabel]="'myProjects.header.createProject' | translate" [title]="'myProjects.header.title' | translate" - [icon]="'my-projects'" + [icon]="'custom-icon-projects-dark'" (buttonClick)="createProject()" /> diff --git a/src/app/features/preprints/pages/landing/preprints-landing.component.html b/src/app/features/preprints/pages/landing/preprints-landing.component.html index 13845ba84..b35b84a56 100644 --- a/src/app/features/preprints/pages/landing/preprints-landing.component.html +++ b/src/app/features/preprints/pages/landing/preprints-landing.component.html @@ -1,7 +1,7 @@
- +

{{ 'preprints.title' | translate }}

@if (isPreprintProviderLoading()) { diff --git a/src/app/features/preprints/pages/landing/preprints-landing.component.scss b/src/app/features/preprints/pages/landing/preprints-landing.component.scss index 8cae1f8ce..703d057b1 100644 --- a/src/app/features/preprints/pages/landing/preprints-landing.component.scss +++ b/src/app/features/preprints/pages/landing/preprints-landing.component.scss @@ -1,11 +1,13 @@ -@use "assets/styles/mixins" as mix; -@use "assets/styles/variables" as var; - .subheader { - color: var.$dark-blue-1; + color: var(--dark-blue-1); + + .custom-icon-preprints-dark { + width: 2.25rem; + height: 2.25rem; + } .provider-description { - line-height: mix.rem(24px); + line-height: 1.5rem; } } diff --git a/src/app/features/preprints/pages/my-preprints/my-preprints.component.html b/src/app/features/preprints/pages/my-preprints/my-preprints.component.html index 3c2f71c8e..e914d66ba 100644 --- a/src/app/features/preprints/pages/my-preprints/my-preprints.component.html +++ b/src/app/features/preprints/pages/my-preprints/my-preprints.component.html @@ -1,7 +1,7 @@
+
+ @if (currentUser()?.id) {
diff --git a/src/app/features/settings/addons/addons.component.html b/src/app/features/settings/addons/addons.component.html index ffc5bbb6e..4e7b369f8 100644 --- a/src/app/features/settings/addons/addons.component.html +++ b/src/app/features/settings/addons/addons.component.html @@ -1,4 +1,4 @@ - +
@if (!isEmailPreferencesLoading()) { diff --git a/src/app/features/settings/profile-settings/profile-settings.component.html b/src/app/features/settings/profile-settings/profile-settings.component.html index d6ed64385..5241637b8 100644 --- a/src/app/features/settings/profile-settings/profile-settings.component.html +++ b/src/app/features/settings/profile-settings/profile-settings.component.html @@ -1,4 +1,4 @@ - +
diff --git a/src/app/features/settings/tokens/tokens.component.html b/src/app/features/settings/tokens/tokens.component.html index 77ac84e55..1e625b4c8 100644 --- a/src/app/features/settings/tokens/tokens.component.html +++ b/src/app/features/settings/tokens/tokens.component.html @@ -2,7 +2,7 @@ [showButton]="isBaseRoute()" [buttonLabel]="'settings.tokens.header.createButton' | translate" [title]="'settings.tokens.header.title' | translate" - [icon]="'settings'" + [icon]="'fas fa-gear'" (buttonClick)="createToken()" /> diff --git a/src/app/shared/components/sub-header/sub-header.component.html b/src/app/shared/components/sub-header/sub-header.component.html index 07774ca3a..1042335c0 100644 --- a/src/app/shared/components/sub-header/sub-header.component.html +++ b/src/app/shared/components/sub-header/sub-header.component.html @@ -2,7 +2,7 @@
@if (icon()) { - + } @if (isLoading()) { diff --git a/src/app/shared/components/sub-header/sub-header.component.scss b/src/app/shared/components/sub-header/sub-header.component.scss index 8703d555b..ae5c9ccf7 100644 --- a/src/app/shared/components/sub-header/sub-header.component.scss +++ b/src/app/shared/components/sub-header/sub-header.component.scss @@ -1,14 +1,15 @@ @use "assets/styles/mixins" as mix; -@use "assets/styles/variables" as var; :host { width: 100%; } .sub-header { - color: var.$dark-blue-1; + color: var(--dark-blue-1); } .title-icon { font-size: mix.rem(36px); + width: mix.rem(36px); + height: mix.rem(36px); } diff --git a/src/assets/icons/colored/collections.svg b/src/assets/icons/colored/collections.svg new file mode 100644 index 000000000..fd98f14a2 --- /dev/null +++ b/src/assets/icons/colored/collections.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/colored/institutions.svg b/src/assets/icons/colored/institutions.svg new file mode 100644 index 000000000..6b1288a06 --- /dev/null +++ b/src/assets/icons/colored/institutions.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/colored/meetings.svg b/src/assets/icons/colored/meetings.svg new file mode 100644 index 000000000..08247183b --- /dev/null +++ b/src/assets/icons/colored/meetings.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/colored/preprints.svg b/src/assets/icons/colored/preprints.svg new file mode 100644 index 000000000..7573b0285 --- /dev/null +++ b/src/assets/icons/colored/preprints.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/icons/colored/projects.svg b/src/assets/icons/colored/projects.svg new file mode 100644 index 000000000..26ef2bc17 --- /dev/null +++ b/src/assets/icons/colored/projects.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/icons/colored/registries.svg b/src/assets/icons/colored/registries.svg new file mode 100644 index 000000000..e2a621fac --- /dev/null +++ b/src/assets/icons/colored/registries.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/icons/socials/email.svg b/src/assets/icons/socials/email.svg deleted file mode 100644 index daf7bb5e2..000000000 --- a/src/assets/icons/socials/email.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/icons/socials/facebook.svg b/src/assets/icons/socials/facebook.svg deleted file mode 100644 index fd8cf8ad0..000000000 --- a/src/assets/icons/socials/facebook.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/icons/socials/github.svg b/src/assets/icons/socials/github.svg deleted file mode 100644 index a1d1c554a..000000000 --- a/src/assets/icons/socials/github.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/icons/socials/group.svg b/src/assets/icons/socials/group.svg deleted file mode 100644 index 9de3a79f1..000000000 --- a/src/assets/icons/socials/group.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/icons/socials/linkedin.svg b/src/assets/icons/socials/linkedin.svg deleted file mode 100644 index cb47bd4c6..000000000 --- a/src/assets/icons/socials/linkedin.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/icons/socials/website.svg b/src/assets/icons/socials/website.svg deleted file mode 100644 index 55e99a902..000000000 --- a/src/assets/icons/socials/website.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/src/assets/icons/socials/x.svg b/src/assets/icons/socials/x.svg deleted file mode 100644 index 687e579ad..000000000 --- a/src/assets/icons/socials/x.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/icons/source/collections-dark.svg b/src/assets/icons/source/collections-dark.svg new file mode 100644 index 000000000..1e697cbd9 --- /dev/null +++ b/src/assets/icons/source/collections-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/source/institutions-dark.svg b/src/assets/icons/source/institutions-dark.svg new file mode 100644 index 000000000..78e1fb33c --- /dev/null +++ b/src/assets/icons/source/institutions-dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/source/meetings-dark.svg b/src/assets/icons/source/meetings-dark.svg new file mode 100644 index 000000000..a27f4157a --- /dev/null +++ b/src/assets/icons/source/meetings-dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/source/preprints-dark.svg b/src/assets/icons/source/preprints-dark.svg new file mode 100644 index 000000000..fe5908a69 --- /dev/null +++ b/src/assets/icons/source/preprints-dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/icons/source/projects-dark.svg b/src/assets/icons/source/projects-dark.svg new file mode 100644 index 000000000..a821a23e6 --- /dev/null +++ b/src/assets/icons/source/projects-dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/icons/source/registries-dark.svg b/src/assets/icons/source/registries-dark.svg new file mode 100644 index 000000000..a2a34f6f6 --- /dev/null +++ b/src/assets/icons/source/registries-dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/styles/_icons.scss b/src/assets/styles/_icons.scss new file mode 100644 index 000000000..34bea74fd --- /dev/null +++ b/src/assets/styles/_icons.scss @@ -0,0 +1,88 @@ +.custom-icon-registries { + background: url("/assets/icons/colored/registries.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-preprints { + background: url("/assets/icons/colored/preprints.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-collections { + background: url("/assets/icons/colored/collections.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-institutions { + background: url("/assets/icons/colored/institutions.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-projects { + background: url("/assets/icons/colored/projects.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-meetings { + background: url("/assets/icons/colored/meetings.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-registries-dark { + background: url("/assets/icons/source/registries-dark.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-preprints-dark { + background: url("/assets/icons/source/preprints-dark.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-collections-dark { + background: url("/assets/icons/source/collections-dark.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-institutions-dark { + background: url("/assets/icons/source/institutions-dark.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-projects-dark { + background: url("/assets/icons/source/projects-dark.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-meetings-dark { + background: url("/assets/icons/source/meetings-dark.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-5xl { + width: 2.5rem; + height: 2.5rem; +} diff --git a/src/assets/styles/overrides/panel-menu.scss b/src/assets/styles/overrides/panel-menu.scss index cc3a64f4e..2d900b33c 100644 --- a/src/assets/styles/overrides/panel-menu.scss +++ b/src/assets/styles/overrides/panel-menu.scss @@ -16,6 +16,8 @@ .nav-icon { font-size: 1.25rem; + width: 1.25rem; + height: 1.25rem; } } diff --git a/src/assets/styles/styles.scss b/src/assets/styles/styles.scss index 4fe24fd18..635570dc6 100644 --- a/src/assets/styles/styles.scss +++ b/src/assets/styles/styles.scss @@ -6,6 +6,10 @@ @use "common"; @use "base"; +@use "./components/md-editor"; +@use "./components/preprints"; +@use "./components/collections"; + @use "./overrides/button"; @use "./overrides/button-toggle"; @use "./overrides/badge"; @@ -42,7 +46,5 @@ @use "./overrides/multiselect"; @use "./overrides/tree"; @use "./overrides/breadcrumbs"; -@use "./components/md-editor"; -@use "./components/preprints"; @use "./overrides/cedar-metadata"; -@use "./components/collections"; +@use "./icons"; From 92b7643d78f2c484f661b6d8716990680a43b898 Mon Sep 17 00:00:00 2001 From: nsemets Date: Fri, 22 Aug 2025 17:50:05 +0300 Subject: [PATCH 08/16] fix(icons): removed fantastic icons package --- .fantasticonrc.js | 7 - angular.json | 1 - package-lock.json | 1322 +---------------------------- package.json | 4 - src/assets/icons/dist/icons.css | 295 ------- src/assets/icons/dist/icons.eot | Bin 12984 -> 0 bytes src/assets/icons/dist/icons.html | 612 ------------- src/assets/icons/dist/icons.json | 71 -- src/assets/icons/dist/icons.ts | 285 ------- src/assets/icons/dist/icons.woff | Bin 6768 -> 0 bytes src/assets/icons/dist/icons.woff2 | Bin 5700 -> 0 bytes src/assets/icons/optimize.mjs | 40 - 12 files changed, 38 insertions(+), 2599 deletions(-) delete mode 100644 .fantasticonrc.js delete mode 100644 src/assets/icons/dist/icons.css delete mode 100644 src/assets/icons/dist/icons.eot delete mode 100644 src/assets/icons/dist/icons.html delete mode 100644 src/assets/icons/dist/icons.json delete mode 100644 src/assets/icons/dist/icons.ts delete mode 100644 src/assets/icons/dist/icons.woff delete mode 100644 src/assets/icons/dist/icons.woff2 delete mode 100644 src/assets/icons/optimize.mjs diff --git a/.fantasticonrc.js b/.fantasticonrc.js deleted file mode 100644 index 9769026ca..000000000 --- a/.fantasticonrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - inputDir: 'src/assets/icons/source', - outputDir: 'src/assets/icons/dist', - normalize: true, - descent: 45, - prefix: 'osf-icon', -}; diff --git a/angular.json b/angular.json index d73854c98..cc652c774 100644 --- a/angular.json +++ b/angular.json @@ -44,7 +44,6 @@ ], "styles": [ "src/assets/styles/styles.scss", - "src/assets/icons/dist/icons.css", "node_modules/primeflex/primeflex.css", "node_modules/@fortawesome/fontawesome-free/css/all.min.css", "node_modules/ngx-markdown-editor/assets/highlight.js/agate.min.css" diff --git a/package-lock.json b/package-lock.json index 73d3d9191..30110ef3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,6 @@ "eslint-plugin-prettier": "^5.4.0", "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-unused-imports": "^4.1.4", - "fantasticon": "^3.0.0", "husky": "^9.1.7", "jest": "^29.7.0", "jest-preset-angular": "^14.5.5", @@ -4400,13 +4399,6 @@ "node": ">=6" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true, - "license": "MIT" - }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -6569,84 +6561,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/move-file/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@npmcli/move-file/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/move-file/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@npmcli/node-gyp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", @@ -8824,17 +8738,6 @@ "@xtuc/long": "4.2.2" } }, - "node_modules/@xmldom/xmldom": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", - "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", - "deprecated": "this version is no longer supported, please update to at least 0.8.*", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -8990,33 +8893,6 @@ "node": ">= 14" } }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", @@ -9217,28 +9093,6 @@ "node": ">=8" } }, - "node_modules/aproba": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", - "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", - "dev": true, - "license": "ISC" - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -9823,16 +9677,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -10078,19 +9922,6 @@ "dev": true, "license": "MIT" }, - "node_modules/bufferstreams": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-3.0.0.tgz", - "integrity": "sha512-Qg0ggJUWJq90vtg4lDsGN9CDWvzBMQxhiEkSOD/sJfYt6BLect3eV1/S6K7SCSKJ34n60rf6U5eUPmQENVE4UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">=8.12.0" - } - }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -10302,16 +10133,6 @@ ], "license": "CC-BY-4.0" }, - "node_modules/case": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", - "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", - "dev": true, - "license": "(MIT OR GPL-3.0-or-later)", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/cedar-embeddable-editor": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/cedar-embeddable-editor/-/cedar-embeddable-editor-1.5.0.tgz", @@ -10479,33 +10300,6 @@ "dev": true, "license": "MIT" }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-color": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz", - "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.64", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -11003,13 +10797,6 @@ "node": ">= 0.6" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true, - "license": "ISC" - }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -11396,27 +11183,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cubic2quad": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cubic2quad/-/cubic2quad-1.2.1.tgz", - "integrity": "sha512-wT5Y7mO8abrV16gnssKdmIhIbA9wSkeMzhh27jAguKrV82i24wER0vL5TGhUJ9dbJNDcigoRZ0IAHFEEEI4THQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "dev": true, - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/dargs": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", @@ -11678,13 +11444,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true, - "license": "MIT" - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -12244,35 +12003,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "dev": true, - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, "node_modules/es6-shim": { "version": "0.35.8", "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.8.tgz", @@ -12280,33 +12010,6 @@ "dev": true, "license": "MIT" }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, "node_modules/esbuild": { "version": "0.25.4", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", @@ -12879,22 +12582,6 @@ "node": ">=8" } }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -12996,17 +12683,6 @@ "node": ">= 0.6" } }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, "node_modules/event-stream": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", @@ -13168,16 +12844,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "license": "ISC", - "dependencies": { - "type": "^2.7.2" - } - }, "node_modules/fancy-log": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", @@ -13191,32 +12857,6 @@ "node": ">=10.13.0" } }, - "node_modules/fantasticon": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fantasticon/-/fantasticon-3.0.0.tgz", - "integrity": "sha512-PylulixZA8I0SeiUKtuyOhwrz/ojZTSA1KXddipvEyQXCVrpPMTnSXzaE9nXXK7nCjJWFkqoBAQ1aBdaxMltrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "case": "^1.6.3", - "cli-color": "^2.0.4", - "commander": "^12.0.0", - "glob": "^10.3.12", - "handlebars": "^4.7.8", - "slugify": "^1.6.6", - "svg2ttf": "^6.0.3", - "svgicons2svgfont": "^12.0.0", - "ttf2eot": "^3.1.0", - "ttf2woff": "^3.0.0", - "ttf2woff2": "^5.0.0" - }, - "bin": { - "fantasticon": "bin/fantasticon" - }, - "engines": { - "node": ">= 16.0.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -13353,13 +12993,6 @@ "node": ">=16.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "license": "MIT" - }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -13721,107 +13354,24 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "deprecated": "This package is no longer supported.", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/gauge/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-east-asian-width": { @@ -14239,13 +13789,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true, - "license": "ISC" - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -14551,16 +14094,6 @@ "node": ">=10.17.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/husky": { "version": "9.1.7", "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", @@ -14849,23 +14382,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true, - "license": "ISC" - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -15211,13 +14727,6 @@ "node": ">=8" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -15324,13 +14833,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -17999,16 +17501,6 @@ "yallist": "^3.0.2" } }, - "node_modules/lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es5-ext": "~0.10.2" - } - }, "node_modules/lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", @@ -18184,26 +17676,6 @@ "url": "https://github.com/sponsors/streamich" } }, - "node_modules/memoizee": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", - "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.2", - "es5-ext": "^0.10.64", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/meow": { "version": "12.1.1", "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", @@ -18254,13 +17726,6 @@ "node": ">= 0.6" } }, - "node_modules/microbuffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/microbuffer/-/microbuffer-1.0.0.tgz", - "integrity": "sha512-O/SUXauVN4x6RaEJFqSPcXNtLFL+QzJHKZlyDVYFwcDDRVca3Fa/37QXXC+4zAGGa4YhHrHxKXuuHvLDIQECtA==", - "dev": true, - "license": "MIT" - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -18699,13 +18164,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/nan": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", - "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", - "dev": true, - "license": "MIT" - }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -18777,13 +18235,6 @@ "node": ">= 10" } }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true, - "license": "ISC" - }, "node_modules/ng-mocks": { "version": "14.13.5", "resolved": "https://registry.npmjs.org/ng-mocks/-/ng-mocks-14.13.5.tgz", @@ -19143,23 +18594,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -19698,13 +19132,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true, - "license": "(MIT AND Zlib)" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -20324,13 +19751,6 @@ "dev": true, "license": "MIT" }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, - "license": "ISC" - }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -21424,7 +20844,8 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "dev": true, - "license": "ISC" + "license": "ISC", + "optional": true }, "node_modules/saxes": { "version": "6.0.0", @@ -21944,16 +21365,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slugify": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -22808,107 +22219,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/svg-pathdata": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", - "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/svg2ttf": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/svg2ttf/-/svg2ttf-6.0.3.tgz", - "integrity": "sha512-CgqMyZrbOPpc+WqH7aga4JWkDPso23EgypLsbQ6gN3uoPWwwiLjXvzgrwGADBExvCRJrWFzAeK1bSoSpE7ixSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xmldom/xmldom": "^0.7.2", - "argparse": "^2.0.1", - "cubic2quad": "^1.2.1", - "lodash": "^4.17.10", - "microbuffer": "^1.0.0", - "svgpath": "^2.1.5" - }, - "bin": { - "svg2ttf": "svg2ttf.js" - } - }, - "node_modules/svgicons2svgfont": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/svgicons2svgfont/-/svgicons2svgfont-12.0.0.tgz", - "integrity": "sha512-fjyDkhiG0M1TPBtZzD12QV3yDcG2fUgiqHPOCYzf7hHE40Hl3GhnE6P1njsJCCByhwM7MiufyDW3L7IOR5dg9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^9.3.0", - "glob": "^8.0.3", - "sax": "^1.2.4", - "svg-pathdata": "^6.0.3" - }, - "bin": { - "svgicons2svgfont": "bin/svgicons2svgfont.js" - }, - "engines": { - "node": ">=16.15.0" - } - }, - "node_modules/svgicons2svgfont/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/svgicons2svgfont/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/svgicons2svgfont/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/svgpath": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/svgpath/-/svgpath-2.6.0.tgz", - "integrity": "sha512-OIWR6bKzXvdXYyO4DK/UWa1VA1JeKq8E+0ug2DG98Y/vOmMpfZNj+TIG988HjfYSqtcy/hFOtZq/n/j5GSESNg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/fontello/svg2ttf?sponsor=1" - } - }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -23275,20 +22585,6 @@ "dev": true, "license": "MIT" }, - "node_modules/timers-ext": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", - "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", - "dev": true, - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.64", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/tinyexec": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", @@ -23544,525 +22840,48 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/ttf2eot": { + "node_modules/tuf-js": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ttf2eot/-/ttf2eot-3.1.0.tgz", - "integrity": "sha512-aHTbcYosNHVqb2Qtt9Xfta77ae/5y0VfdwNLUS6sGBeGr22cX2JDMo/i5h3uuOf+FAD3akYOr17+fYd5NK8aXw==", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", + "integrity": "sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "@tufjs/models": "3.0.1", + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" }, - "bin": { - "ttf2eot": "ttf2eot.js" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/ttf2woff": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ttf2woff/-/ttf2woff-3.0.0.tgz", - "integrity": "sha512-OvmFcj70PhmAsVQKfC15XoKH55cRWuaRzvr2fpTNhTNer6JBpG8n6vOhRrIgxMjcikyYt88xqYXMMVapJ4Rjvg==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1", - "pako": "^1.0.0" + "prelude-ls": "^1.2.1" }, - "bin": { - "ttf2woff": "ttf2woff.js" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/ttf2woff2": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ttf2woff2/-/ttf2woff2-5.0.0.tgz", - "integrity": "sha512-FplhShJd3rT8JGa8N04YWQuP7xRvwr9AIq+9/z5O/5ubqNiCADshKl8v51zJDFkhDVcYpdUqUpm7T4M53Z2JoQ==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "dependencies": { - "bindings": "^1.5.0", - "bufferstreams": "^3.0.0", - "nan": "^2.14.2", - "node-gyp": "^9.0.0" - }, - "bin": { - "ttf2woff2": "bin/ttf2woff2.js" - }, "engines": { - "node": ">=14" + "node": ">=4" } }, - "node_modules/ttf2woff2/node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ttf2woff2/node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "license": "ISC" - }, - "node_modules/ttf2woff2/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ttf2woff2/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/ttf2woff2/node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "dev": true, - "license": "ISC", - "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" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ttf2woff2/node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ttf2woff2/node_modules/cacache/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ttf2woff2/node_modules/cacache/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ttf2woff2/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ttf2woff2/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ttf2woff2/node_modules/https-proxy-agent": { - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ttf2woff2/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/ttf2woff2/node_modules/make-fetch-happen": { - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "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": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ttf2woff2/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ttf2woff2/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ttf2woff2/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ttf2woff2/node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/ttf2woff2/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ttf2woff2/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ttf2woff2/node_modules/node-gyp": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", - "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/ttf2woff2/node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ttf2woff2/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ttf2woff2/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ttf2woff2/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/ttf2woff2/node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ttf2woff2/node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ttf2woff2/node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ttf2woff2/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/tuf-js": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", - "integrity": "sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "3.0.1", - "debug": "^4.4.1", - "make-fetch-happen": "^14.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -25593,71 +24412,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", diff --git a/package.json b/package.json index 80a0413d4..d512f4e59 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,6 @@ "format": "prettier --write .", "format:check": "prettier --check .", "lint:format": "npm run lint:fix && npm run format", - "icons:optimize": "node src/assets/icons/optimize.mjs", - "icons:generate": "fantasticon -c .fantasticonrc.js", - "icons:build": "npm run icons:optimize && npm run icons:generate", "prepare": "husky", "ngxs:actions": "ng generate @ngxs/store:actions --name --path", "ngxs:store": "ng generate @ngxs/store:store --name --path", @@ -81,7 +78,6 @@ "eslint-plugin-prettier": "^5.4.0", "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-unused-imports": "^4.1.4", - "fantasticon": "^3.0.0", "husky": "^9.1.7", "jest": "^29.7.0", "jest-preset-angular": "^14.5.5", diff --git a/src/assets/icons/dist/icons.css b/src/assets/icons/dist/icons.css deleted file mode 100644 index ed242cf53..000000000 --- a/src/assets/icons/dist/icons.css +++ /dev/null @@ -1,295 +0,0 @@ -@font-face { - font-family: 'icons'; - src: - url('./icons.eot?5089ecbbc9bed1b09d80f14b2dfb8179#iefix') format('embedded-opentype'), - url('./icons.woff2?5089ecbbc9bed1b09d80f14b2dfb8179') format('woff2'), - url('./icons.woff?5089ecbbc9bed1b09d80f14b2dfb8179') format('woff'); -} - -i[class^='osf-icon-']:before, -i[class*=' osf-icon-']:before { - font-family: icons !important; - font-style: normal; - font-weight: normal !important; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.osf-icon-withdrawn:before { - content: '\f101'; -} - -.osf-icon-warning:before { - content: '\f102'; -} - -.osf-icon-warning-sign:before { - content: '\f103'; -} - -.osf-icon-upload:before { - content: '\f104'; -} - -.osf-icon-trash:before { - content: '\f105'; -} - -.osf-icon-support:before { - content: '\f106'; -} - -.osf-icon-supplements:before { - content: '\f107'; -} - -.osf-icon-sort-desc:before { - content: '\f108'; -} - -.osf-icon-sort-asc:before { - content: '\f109'; -} - -.osf-icon-sort-asc-grey:before { - content: '\f10a'; -} - -.osf-icon-share:before { - content: '\f10b'; -} - -.osf-icon-settings:before { - content: '\f10c'; -} - -.osf-icon-search:before { - content: '\f10d'; -} - -.osf-icon-search-2:before { - content: '\f10e'; -} - -.osf-icon-rejected:before { - content: '\f10f'; -} - -.osf-icon-registries:before { - content: '\f110'; -} - -.osf-icon-quotes:before { - content: '\f111'; -} - -.osf-icon-profile:before { - content: '\f112'; -} - -.osf-icon-preprints:before { - content: '\f113'; -} - -.osf-icon-plus:before { - content: '\f114'; -} - -.osf-icon-pending:before { - content: '\f115'; -} - -.osf-icon-pdf:before { - content: '\f116'; -} - -.osf-icon-papers:before { - content: '\f117'; -} - -.osf-icon-padlock:before { - content: '\f118'; -} - -.osf-icon-padlock-unlock:before { - content: '\f119'; -} - -.osf-icon-my-projects:before { - content: '\f11a'; -} - -.osf-icon-minus:before { - content: '\f11b'; -} - -.osf-icon-menu:before { - content: '\f11c'; -} - -.osf-icon-meetings:before { - content: '\f11d'; -} - -.osf-icon-materials:before { - content: '\f11e'; -} - -.osf-icon-list:before { - content: '\f11f'; -} - -.osf-icon-link:before { - content: '\f120'; -} - -.osf-icon-last:before { - content: '\f121'; -} - -.osf-icon-institutions:before { - content: '\f122'; -} - -.osf-icon-institution:before { - content: '\f123'; -} - -.osf-icon-information:before { - content: '\f124'; -} - -.osf-icon-image:before { - content: '\f125'; -} - -.osf-icon-home:before { - content: '\f126'; -} - -.osf-icon-home-2:before { - content: '\f127'; -} - -.osf-icon-help:before { - content: '\f128'; -} - -.osf-icon-folder:before { - content: '\f129'; -} - -.osf-icon-first:before { - content: '\f12a'; -} - -.osf-icon-filter:before { - content: '\f12b'; -} - -.osf-icon-eye-view:before { - content: '\f12c'; -} - -.osf-icon-eye-hidden:before { - content: '\f12d'; -} - -.osf-icon-email:before { - content: '\f12e'; -} - -.osf-icon-duplicate:before { - content: '\f12f'; -} - -.osf-icon-download:before { - content: '\f130'; -} - -.osf-icon-double-arrow-left:before { - content: '\f131'; -} - -.osf-icon-dots:before { - content: '\f132'; -} - -.osf-icon-donate:before { - content: '\f133'; -} - -.osf-icon-doc:before { - content: '\f134'; -} - -.osf-icon-diagram:before { - content: '\f135'; -} - -.osf-icon-data:before { - content: '\f136'; -} - -.osf-icon-customize:before { - content: '\f137'; -} - -.osf-icon-copy:before { - content: '\f138'; -} - -.osf-icon-contact:before { - content: '\f139'; -} - -.osf-icon-collections:before { - content: '\f13a'; -} - -.osf-icon-code:before { - content: '\f13b'; -} - -.osf-icon-close:before { - content: '\f13c'; -} - -.osf-icon-chevron-right:before { - content: '\f13d'; -} - -.osf-icon-chevron-left:before { - content: '\f13e'; -} - -.osf-icon-calendar-silhouette:before { - content: '\f13f'; -} - -.osf-icon-bookmark:before { - content: '\f140'; -} - -.osf-icon-bookmark-fill:before { - content: '\f141'; -} - -.osf-icon-arrow:before { - content: '\f142'; -} - -.osf-icon-arrow-left:before { - content: '\f143'; -} - -.osf-icon-arrow-down:before { - content: '\f144'; -} - -.osf-icon-accepted:before { - content: '\f145'; -} diff --git a/src/assets/icons/dist/icons.eot b/src/assets/icons/dist/icons.eot deleted file mode 100644 index 8db0dbdd8fe5f41162af76ac1041b26b48e7922d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12984 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 - - - - icons - - - - - - -

icons

- -
- - - -
- withdrawn -
- -
- - - -
- warning -
- -
- - - -
- warning-sign -
- -
- - - -
- upload -
- -
- - - -
- trash -
- -
- - - -
- support -
- -
- - - -
- supplements -
- -
- - - -
- sort-desc -
- -
- - - -
- sort-asc -
- -
- - - -
- sort-asc-grey -
- -
- - - -
- share -
- -
- - - -
- settings -
- -
- - - -
- search -
- -
- - - -
- search-2 -
- -
- - - -
- rejected -
- -
- - - -
- registries -
- -
- - - -
- quotes -
- -
- - - -
- profile -
- -
- - - -
- preprints -
- -
- - - -
- plus -
- -
- - - -
- pending -
- -
- - - -
- pdf -
- -
- - - -
- papers -
- -
- - - -
- padlock -
- -
- - - -
- padlock-unlock -
- -
- - - -
- my-projects -
- -
- - - -
- minus -
- -
- - - -
- menu -
- -
- - - -
- meetings -
- -
- - - -
- materials -
- -
- - - -
- list -
- -
- - - -
- link -
- -
- - - -
- last -
- -
- - - -
- institutions -
- -
- - - -
- institution -
- -
- - - -
- information -
- -
- - - -
- image -
- -
- - - -
- home -
- -
- - - -
- home-2 -
- -
- - - -
- help -
- -
- - - -
- folder -
- -
- - - -
- first -
- -
- - - -
- filter -
- -
- - - -
- eye-view -
- -
- - - -
- eye-hidden -
- -
- - - -
- email -
- -
- - - -
- duplicate -
- -
- - - -
- download -
- -
- - - -
- double-arrow-left -
- -
- - - -
- dots -
- -
- - - -
- donate -
- -
- - - -
- doc -
- -
- - - -
- diagram -
- -
- - - -
- data -
- -
- - - -
- customize -
- -
- - - -
- copy -
- -
- - - -
- contact -
- -
- - - -
- collections -
- -
- - - -
- code -
- -
- - - -
- close -
- -
- - - -
- chevron-right -
- -
- - - -
- chevron-left -
- -
- - - -
- calendar-silhouette -
- -
- - - -
- bookmark -
- -
- - - -
- bookmark-fill -
- -
- - - -
- arrow -
- -
- - - -
- arrow-left -
- -
- - - -
- arrow-down -
- -
- - - -
- accepted -
- - diff --git a/src/assets/icons/dist/icons.json b/src/assets/icons/dist/icons.json deleted file mode 100644 index d3a8b1c36..000000000 --- a/src/assets/icons/dist/icons.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "withdrawn": 61697, - "warning": 61698, - "warning-sign": 61699, - "upload": 61700, - "trash": 61701, - "support": 61702, - "supplements": 61703, - "sort-desc": 61704, - "sort-asc": 61705, - "sort-asc-grey": 61706, - "share": 61707, - "settings": 61708, - "search": 61709, - "search-2": 61710, - "rejected": 61711, - "registries": 61712, - "quotes": 61713, - "profile": 61714, - "preprints": 61715, - "plus": 61716, - "pending": 61717, - "pdf": 61718, - "papers": 61719, - "padlock": 61720, - "padlock-unlock": 61721, - "my-projects": 61722, - "minus": 61723, - "menu": 61724, - "meetings": 61725, - "materials": 61726, - "list": 61727, - "link": 61728, - "last": 61729, - "institutions": 61730, - "institution": 61731, - "information": 61732, - "image": 61733, - "home": 61734, - "home-2": 61735, - "help": 61736, - "folder": 61737, - "first": 61738, - "filter": 61739, - "eye-view": 61740, - "eye-hidden": 61741, - "email": 61742, - "duplicate": 61743, - "download": 61744, - "double-arrow-left": 61745, - "dots": 61746, - "donate": 61747, - "doc": 61748, - "diagram": 61749, - "data": 61750, - "customize": 61751, - "copy": 61752, - "contact": 61753, - "collections": 61754, - "code": 61755, - "close": 61756, - "chevron-right": 61757, - "chevron-left": 61758, - "calendar-silhouette": 61759, - "bookmark": 61760, - "bookmark-fill": 61761, - "arrow": 61762, - "arrow-left": 61763, - "arrow-down": 61764, - "accepted": 61765 -} diff --git a/src/assets/icons/dist/icons.ts b/src/assets/icons/dist/icons.ts deleted file mode 100644 index 7ac49e6f0..000000000 --- a/src/assets/icons/dist/icons.ts +++ /dev/null @@ -1,285 +0,0 @@ -export type IconsId = - | 'withdrawn' - | 'warning' - | 'warning-sign' - | 'upload' - | 'trash' - | 'support' - | 'supplements' - | 'sort-desc' - | 'sort-asc' - | 'sort-asc-grey' - | 'share' - | 'settings' - | 'search' - | 'search-2' - | 'rejected' - | 'registries' - | 'quotes' - | 'profile' - | 'preprints' - | 'plus' - | 'pending' - | 'pdf' - | 'papers' - | 'padlock' - | 'padlock-unlock' - | 'my-projects' - | 'minus' - | 'menu' - | 'meetings' - | 'materials' - | 'list' - | 'link' - | 'last' - | 'institutions' - | 'institution' - | 'information' - | 'image' - | 'home' - | 'home-2' - | 'help' - | 'folder' - | 'first' - | 'filter' - | 'eye-view' - | 'eye-hidden' - | 'email' - | 'duplicate' - | 'download' - | 'double-arrow-left' - | 'dots' - | 'donate' - | 'doc' - | 'diagram' - | 'data' - | 'customize' - | 'copy' - | 'contact' - | 'collections' - | 'code' - | 'close' - | 'chevron-right' - | 'chevron-left' - | 'calendar-silhouette' - | 'bookmark' - | 'bookmark-fill' - | 'arrow' - | 'arrow-left' - | 'arrow-down' - | 'accepted'; - -export type IconsKey = - | 'Withdrawn' - | 'Warning' - | 'WarningSign' - | 'Upload' - | 'Trash' - | 'Support' - | 'Supplements' - | 'SortDesc' - | 'SortAsc' - | 'SortAscGrey' - | 'Share' - | 'Settings' - | 'Search' - | 'Search2' - | 'Rejected' - | 'Registries' - | 'Quotes' - | 'Profile' - | 'Preprints' - | 'Plus' - | 'Pending' - | 'Pdf' - | 'Papers' - | 'Padlock' - | 'PadlockUnlock' - | 'MyProjects' - | 'Minus' - | 'Menu' - | 'Meetings' - | 'Materials' - | 'List' - | 'Link' - | 'Last' - | 'Institutions' - | 'Institution' - | 'Information' - | 'Image' - | 'Home' - | 'Home2' - | 'Help' - | 'Folder' - | 'First' - | 'Filter' - | 'EyeView' - | 'EyeHidden' - | 'Email' - | 'Duplicate' - | 'Download' - | 'DoubleArrowLeft' - | 'Dots' - | 'Donate' - | 'Doc' - | 'Diagram' - | 'Data' - | 'Customize' - | 'Copy' - | 'Contact' - | 'Collections' - | 'Code' - | 'Close' - | 'ChevronRight' - | 'ChevronLeft' - | 'CalendarSilhouette' - | 'Bookmark' - | 'BookmarkFill' - | 'Arrow' - | 'ArrowLeft' - | 'ArrowDown' - | 'Accepted'; - -export enum Icons { - Withdrawn = 'withdrawn', - Warning = 'warning', - WarningSign = 'warning-sign', - Upload = 'upload', - Trash = 'trash', - Support = 'support', - Supplements = 'supplements', - SortDesc = 'sort-desc', - SortAsc = 'sort-asc', - SortAscGrey = 'sort-asc-grey', - Share = 'share', - Settings = 'settings', - Search = 'search', - Search2 = 'search-2', - Rejected = 'rejected', - Registries = 'registries', - Quotes = 'quotes', - Profile = 'profile', - Preprints = 'preprints', - Plus = 'plus', - Pending = 'pending', - Pdf = 'pdf', - Papers = 'papers', - Padlock = 'padlock', - PadlockUnlock = 'padlock-unlock', - MyProjects = 'my-projects', - Minus = 'minus', - Menu = 'menu', - Meetings = 'meetings', - Materials = 'materials', - List = 'list', - Link = 'link', - Last = 'last', - Institutions = 'institutions', - Institution = 'institution', - Information = 'information', - Image = 'image', - Home = 'home', - Home2 = 'home-2', - Help = 'help', - Folder = 'folder', - First = 'first', - Filter = 'filter', - EyeView = 'eye-view', - EyeHidden = 'eye-hidden', - Email = 'email', - Duplicate = 'duplicate', - Download = 'download', - DoubleArrowLeft = 'double-arrow-left', - Dots = 'dots', - Donate = 'donate', - Doc = 'doc', - Diagram = 'diagram', - Data = 'data', - Customize = 'customize', - Copy = 'copy', - Contact = 'contact', - Collections = 'collections', - Code = 'code', - Close = 'close', - ChevronRight = 'chevron-right', - ChevronLeft = 'chevron-left', - CalendarSilhouette = 'calendar-silhouette', - Bookmark = 'bookmark', - BookmarkFill = 'bookmark-fill', - Arrow = 'arrow', - ArrowLeft = 'arrow-left', - ArrowDown = 'arrow-down', - Accepted = 'accepted', -} - -export const ICONS_CODEPOINTS: Record = { - [Icons.Withdrawn]: '61697', - [Icons.Warning]: '61698', - [Icons.WarningSign]: '61699', - [Icons.Upload]: '61700', - [Icons.Trash]: '61701', - [Icons.Support]: '61702', - [Icons.Supplements]: '61703', - [Icons.SortDesc]: '61704', - [Icons.SortAsc]: '61705', - [Icons.SortAscGrey]: '61706', - [Icons.Share]: '61707', - [Icons.Settings]: '61708', - [Icons.Search]: '61709', - [Icons.Search2]: '61710', - [Icons.Rejected]: '61711', - [Icons.Registries]: '61712', - [Icons.Quotes]: '61713', - [Icons.Profile]: '61714', - [Icons.Preprints]: '61715', - [Icons.Plus]: '61716', - [Icons.Pending]: '61717', - [Icons.Pdf]: '61718', - [Icons.Papers]: '61719', - [Icons.Padlock]: '61720', - [Icons.PadlockUnlock]: '61721', - [Icons.MyProjects]: '61722', - [Icons.Minus]: '61723', - [Icons.Menu]: '61724', - [Icons.Meetings]: '61725', - [Icons.Materials]: '61726', - [Icons.List]: '61727', - [Icons.Link]: '61728', - [Icons.Last]: '61729', - [Icons.Institutions]: '61730', - [Icons.Institution]: '61731', - [Icons.Information]: '61732', - [Icons.Image]: '61733', - [Icons.Home]: '61734', - [Icons.Home2]: '61735', - [Icons.Help]: '61736', - [Icons.Folder]: '61737', - [Icons.First]: '61738', - [Icons.Filter]: '61739', - [Icons.EyeView]: '61740', - [Icons.EyeHidden]: '61741', - [Icons.Email]: '61742', - [Icons.Duplicate]: '61743', - [Icons.Download]: '61744', - [Icons.DoubleArrowLeft]: '61745', - [Icons.Dots]: '61746', - [Icons.Donate]: '61747', - [Icons.Doc]: '61748', - [Icons.Diagram]: '61749', - [Icons.Data]: '61750', - [Icons.Customize]: '61751', - [Icons.Copy]: '61752', - [Icons.Contact]: '61753', - [Icons.Collections]: '61754', - [Icons.Code]: '61755', - [Icons.Close]: '61756', - [Icons.ChevronRight]: '61757', - [Icons.ChevronLeft]: '61758', - [Icons.CalendarSilhouette]: '61759', - [Icons.Bookmark]: '61760', - [Icons.BookmarkFill]: '61761', - [Icons.Arrow]: '61762', - [Icons.ArrowLeft]: '61763', - [Icons.ArrowDown]: '61764', - [Icons.Accepted]: '61765', -}; diff --git a/src/assets/icons/dist/icons.woff b/src/assets/icons/dist/icons.woff deleted file mode 100644 index 8fd3eb2994d0e82eaa002e4360b5530f7d399d41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6768 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 diff --git a/src/assets/icons/dist/icons.woff2 b/src/assets/icons/dist/icons.woff2 deleted file mode 100644 index d552055b4951c8ab5d98da1e9c2af51fa4dc1033..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5700 zcmV-K7Q5+pPew8T0RR9102V|53jhEB05Ti^02T580RR9100000000000000000000 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 { - return svgString.replace(/ fill="[^"]*"/g, ''); -}; - -fs.promises - .readdir(path.join(__dirname, sourceDirectory)) - .then((files) => { - files.forEach((file) => { - if (file.endsWith('.svg')) { - console.log(file); - const filePath = path.join(__dirname, sourceDirectory, file); - const command = `picosvg ${filePath}`; - - exec(command, (error, stdout, stderr) => { - if (error) { - console.error(`Error executing picosvg for ${filePath}: ${error.message}`); - return; - } - const modifiedSVG = removeFillAttribute(stdout); - fs.writeFileSync(filePath, modifiedSVG); - }); - } - }); - }) - .finally(() => { - console.log('Optimise Done'); - }) - .catch((err) => { - console.error(`Error reading directory: ${err}`); - }); From 65fc442458c86f8c22bfb63381545489ea528e5a Mon Sep 17 00:00:00 2001 From: nsemets Date: Fri, 22 Aug 2025 17:50:51 +0300 Subject: [PATCH 09/16] fix(icons): removed unused svg icons --- src/assets/icons/source/accepted.svg | 5 ----- src/assets/icons/source/arrow-down.svg | 5 ----- src/assets/icons/source/arrow-left.svg | 5 ----- src/assets/icons/source/arrow.svg | 5 ----- src/assets/icons/source/bookmark-fill.svg | 5 ----- src/assets/icons/source/bookmark.svg | 5 ----- src/assets/icons/source/calendar-silhouette.svg | 5 ----- src/assets/icons/source/chevron-left.svg | 5 ----- src/assets/icons/source/chevron-right.svg | 5 ----- src/assets/icons/source/close.svg | 5 ----- src/assets/icons/source/collections.svg | 5 ----- src/assets/icons/source/contact.svg | 5 ----- src/assets/icons/source/copy.svg | 5 ----- src/assets/icons/source/customize.svg | 5 ----- src/assets/icons/source/diagram.svg | 5 ----- src/assets/icons/source/doc.svg | 5 ----- src/assets/icons/source/donate.svg | 11 ----------- src/assets/icons/source/dots.svg | 5 ----- src/assets/icons/source/double-arrow-left.svg | 5 ----- src/assets/icons/source/download.svg | 5 ----- src/assets/icons/source/duplicate.svg | 5 ----- src/assets/icons/source/email.svg | 5 ----- src/assets/icons/source/eye-hidden.svg | 5 ----- src/assets/icons/source/eye-view.svg | 5 ----- src/assets/icons/source/filter.svg | 6 ------ src/assets/icons/source/first.svg | 5 ----- src/assets/icons/source/folder.svg | 5 ----- src/assets/icons/source/help.svg | 5 ----- src/assets/icons/source/home-2.svg | 5 ----- src/assets/icons/source/home.svg | 5 ----- src/assets/icons/source/image.svg | 5 ----- src/assets/icons/source/information.svg | 5 ----- src/assets/icons/source/institution.svg | 15 --------------- src/assets/icons/source/institutions.svg | 5 ----- src/assets/icons/source/last.svg | 5 ----- src/assets/icons/source/link.svg | 5 ----- src/assets/icons/source/list.svg | 5 ----- src/assets/icons/source/meetings.svg | 5 ----- src/assets/icons/source/menu.svg | 5 ----- src/assets/icons/source/minus.svg | 5 ----- src/assets/icons/source/my-projects.svg | 5 ----- src/assets/icons/source/padlock-unlock.svg | 5 ----- src/assets/icons/source/padlock.svg | 5 ----- src/assets/icons/source/pdf.svg | 5 ----- src/assets/icons/source/pending.svg | 5 ----- src/assets/icons/source/plus.svg | 5 ----- src/assets/icons/source/preprints.svg | 6 ------ src/assets/icons/source/profile.svg | 6 ------ src/assets/icons/source/quotes.svg | 5 ----- src/assets/icons/source/registries.svg | 5 ----- src/assets/icons/source/rejected.svg | 5 ----- src/assets/icons/source/search-2.svg | 5 ----- src/assets/icons/source/search.svg | 5 ----- src/assets/icons/source/settings.svg | 5 ----- src/assets/icons/source/share.svg | 5 ----- src/assets/icons/source/sort-asc-grey.svg | 5 ----- src/assets/icons/source/sort-asc.svg | 5 ----- src/assets/icons/source/sort-desc.svg | 5 ----- src/assets/icons/source/support.svg | 5 ----- src/assets/icons/source/trash.svg | 5 ----- src/assets/icons/source/upload.svg | 5 ----- src/assets/icons/source/warning-sign.svg | 5 ----- src/assets/icons/source/warning.svg | 5 ----- src/assets/icons/source/withdrawn.svg | 5 ----- 64 files changed, 339 deletions(-) delete mode 100644 src/assets/icons/source/accepted.svg delete mode 100644 src/assets/icons/source/arrow-down.svg delete mode 100644 src/assets/icons/source/arrow-left.svg delete mode 100644 src/assets/icons/source/arrow.svg delete mode 100644 src/assets/icons/source/bookmark-fill.svg delete mode 100644 src/assets/icons/source/bookmark.svg delete mode 100644 src/assets/icons/source/calendar-silhouette.svg delete mode 100644 src/assets/icons/source/chevron-left.svg delete mode 100644 src/assets/icons/source/chevron-right.svg delete mode 100644 src/assets/icons/source/close.svg delete mode 100644 src/assets/icons/source/collections.svg delete mode 100644 src/assets/icons/source/contact.svg delete mode 100644 src/assets/icons/source/copy.svg delete mode 100644 src/assets/icons/source/customize.svg delete mode 100644 src/assets/icons/source/diagram.svg delete mode 100644 src/assets/icons/source/doc.svg delete mode 100644 src/assets/icons/source/donate.svg delete mode 100644 src/assets/icons/source/dots.svg delete mode 100644 src/assets/icons/source/double-arrow-left.svg delete mode 100644 src/assets/icons/source/download.svg delete mode 100644 src/assets/icons/source/duplicate.svg delete mode 100644 src/assets/icons/source/email.svg delete mode 100644 src/assets/icons/source/eye-hidden.svg delete mode 100644 src/assets/icons/source/eye-view.svg delete mode 100644 src/assets/icons/source/filter.svg delete mode 100644 src/assets/icons/source/first.svg delete mode 100644 src/assets/icons/source/folder.svg delete mode 100644 src/assets/icons/source/help.svg delete mode 100644 src/assets/icons/source/home-2.svg delete mode 100644 src/assets/icons/source/home.svg delete mode 100644 src/assets/icons/source/image.svg delete mode 100644 src/assets/icons/source/information.svg delete mode 100644 src/assets/icons/source/institution.svg delete mode 100644 src/assets/icons/source/institutions.svg delete mode 100644 src/assets/icons/source/last.svg delete mode 100644 src/assets/icons/source/link.svg delete mode 100644 src/assets/icons/source/list.svg delete mode 100644 src/assets/icons/source/meetings.svg delete mode 100644 src/assets/icons/source/menu.svg delete mode 100644 src/assets/icons/source/minus.svg delete mode 100644 src/assets/icons/source/my-projects.svg delete mode 100644 src/assets/icons/source/padlock-unlock.svg delete mode 100644 src/assets/icons/source/padlock.svg delete mode 100644 src/assets/icons/source/pdf.svg delete mode 100644 src/assets/icons/source/pending.svg delete mode 100644 src/assets/icons/source/plus.svg delete mode 100644 src/assets/icons/source/preprints.svg delete mode 100644 src/assets/icons/source/profile.svg delete mode 100644 src/assets/icons/source/quotes.svg delete mode 100644 src/assets/icons/source/registries.svg delete mode 100644 src/assets/icons/source/rejected.svg delete mode 100644 src/assets/icons/source/search-2.svg delete mode 100644 src/assets/icons/source/search.svg delete mode 100644 src/assets/icons/source/settings.svg delete mode 100644 src/assets/icons/source/share.svg delete mode 100644 src/assets/icons/source/sort-asc-grey.svg delete mode 100644 src/assets/icons/source/sort-asc.svg delete mode 100644 src/assets/icons/source/sort-desc.svg delete mode 100644 src/assets/icons/source/support.svg delete mode 100644 src/assets/icons/source/trash.svg delete mode 100644 src/assets/icons/source/upload.svg delete mode 100644 src/assets/icons/source/warning-sign.svg delete mode 100644 src/assets/icons/source/warning.svg delete mode 100644 src/assets/icons/source/withdrawn.svg diff --git a/src/assets/icons/source/accepted.svg b/src/assets/icons/source/accepted.svg deleted file mode 100644 index 2581218bc..000000000 --- a/src/assets/icons/source/accepted.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/arrow-down.svg b/src/assets/icons/source/arrow-down.svg deleted file mode 100644 index 9815a74e0..000000000 --- a/src/assets/icons/source/arrow-down.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/arrow-left.svg b/src/assets/icons/source/arrow-left.svg deleted file mode 100644 index 96bd1c44e..000000000 --- a/src/assets/icons/source/arrow-left.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/arrow.svg b/src/assets/icons/source/arrow.svg deleted file mode 100644 index 3bf0bcce5..000000000 --- a/src/assets/icons/source/arrow.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/bookmark-fill.svg b/src/assets/icons/source/bookmark-fill.svg deleted file mode 100644 index 357d4b776..000000000 --- a/src/assets/icons/source/bookmark-fill.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/bookmark.svg b/src/assets/icons/source/bookmark.svg deleted file mode 100644 index 1ab4e55dd..000000000 --- a/src/assets/icons/source/bookmark.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/calendar-silhouette.svg b/src/assets/icons/source/calendar-silhouette.svg deleted file mode 100644 index cd59ddba3..000000000 --- a/src/assets/icons/source/calendar-silhouette.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/chevron-left.svg b/src/assets/icons/source/chevron-left.svg deleted file mode 100644 index dca23580a..000000000 --- a/src/assets/icons/source/chevron-left.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/chevron-right.svg b/src/assets/icons/source/chevron-right.svg deleted file mode 100644 index 44b526ef2..000000000 --- a/src/assets/icons/source/chevron-right.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/close.svg b/src/assets/icons/source/close.svg deleted file mode 100644 index 50cd3ecdd..000000000 --- a/src/assets/icons/source/close.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/collections.svg b/src/assets/icons/source/collections.svg deleted file mode 100644 index 65b4920b9..000000000 --- a/src/assets/icons/source/collections.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/contact.svg b/src/assets/icons/source/contact.svg deleted file mode 100644 index c4dad9b1d..000000000 --- a/src/assets/icons/source/contact.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/copy.svg b/src/assets/icons/source/copy.svg deleted file mode 100644 index cabb5ba04..000000000 --- a/src/assets/icons/source/copy.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/customize.svg b/src/assets/icons/source/customize.svg deleted file mode 100644 index 2459a0fe5..000000000 --- a/src/assets/icons/source/customize.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/diagram.svg b/src/assets/icons/source/diagram.svg deleted file mode 100644 index ecee37636..000000000 --- a/src/assets/icons/source/diagram.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/doc.svg b/src/assets/icons/source/doc.svg deleted file mode 100644 index ddc872469..000000000 --- a/src/assets/icons/source/doc.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/donate.svg b/src/assets/icons/source/donate.svg deleted file mode 100644 index 01d73ef19..000000000 --- a/src/assets/icons/source/donate.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/assets/icons/source/dots.svg b/src/assets/icons/source/dots.svg deleted file mode 100644 index 89830634b..000000000 --- a/src/assets/icons/source/dots.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/double-arrow-left.svg b/src/assets/icons/source/double-arrow-left.svg deleted file mode 100644 index 2461567f7..000000000 --- a/src/assets/icons/source/double-arrow-left.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/download.svg b/src/assets/icons/source/download.svg deleted file mode 100644 index 58b364f83..000000000 --- a/src/assets/icons/source/download.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/duplicate.svg b/src/assets/icons/source/duplicate.svg deleted file mode 100644 index 809743d18..000000000 --- a/src/assets/icons/source/duplicate.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/email.svg b/src/assets/icons/source/email.svg deleted file mode 100644 index 22dc77d5c..000000000 --- a/src/assets/icons/source/email.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/eye-hidden.svg b/src/assets/icons/source/eye-hidden.svg deleted file mode 100644 index 16e47bcdb..000000000 --- a/src/assets/icons/source/eye-hidden.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/eye-view.svg b/src/assets/icons/source/eye-view.svg deleted file mode 100644 index fe9c1acbb..000000000 --- a/src/assets/icons/source/eye-view.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/filter.svg b/src/assets/icons/source/filter.svg deleted file mode 100644 index 55f40e154..000000000 --- a/src/assets/icons/source/filter.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/assets/icons/source/first.svg b/src/assets/icons/source/first.svg deleted file mode 100644 index 4f947b44f..000000000 --- a/src/assets/icons/source/first.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/folder.svg b/src/assets/icons/source/folder.svg deleted file mode 100644 index 6d03a6227..000000000 --- a/src/assets/icons/source/folder.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/help.svg b/src/assets/icons/source/help.svg deleted file mode 100644 index cee22ee87..000000000 --- a/src/assets/icons/source/help.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/home-2.svg b/src/assets/icons/source/home-2.svg deleted file mode 100644 index fce263aba..000000000 --- a/src/assets/icons/source/home-2.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/home.svg b/src/assets/icons/source/home.svg deleted file mode 100644 index fce263aba..000000000 --- a/src/assets/icons/source/home.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/image.svg b/src/assets/icons/source/image.svg deleted file mode 100644 index ddc872469..000000000 --- a/src/assets/icons/source/image.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/information.svg b/src/assets/icons/source/information.svg deleted file mode 100644 index c9a19c940..000000000 --- a/src/assets/icons/source/information.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/institution.svg b/src/assets/icons/source/institution.svg deleted file mode 100644 index d8f284ab2..000000000 --- a/src/assets/icons/source/institution.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/assets/icons/source/institutions.svg b/src/assets/icons/source/institutions.svg deleted file mode 100644 index 7195d2caf..000000000 --- a/src/assets/icons/source/institutions.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/last.svg b/src/assets/icons/source/last.svg deleted file mode 100644 index 3c8e11dab..000000000 --- a/src/assets/icons/source/last.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/link.svg b/src/assets/icons/source/link.svg deleted file mode 100644 index 50e146204..000000000 --- a/src/assets/icons/source/link.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/list.svg b/src/assets/icons/source/list.svg deleted file mode 100644 index 0e8ccd3e4..000000000 --- a/src/assets/icons/source/list.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/meetings.svg b/src/assets/icons/source/meetings.svg deleted file mode 100644 index 2f17d9949..000000000 --- a/src/assets/icons/source/meetings.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/menu.svg b/src/assets/icons/source/menu.svg deleted file mode 100644 index 951acbab9..000000000 --- a/src/assets/icons/source/menu.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/minus.svg b/src/assets/icons/source/minus.svg deleted file mode 100644 index 8228e9cd6..000000000 --- a/src/assets/icons/source/minus.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/my-projects.svg b/src/assets/icons/source/my-projects.svg deleted file mode 100644 index ed5094954..000000000 --- a/src/assets/icons/source/my-projects.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/padlock-unlock.svg b/src/assets/icons/source/padlock-unlock.svg deleted file mode 100644 index 03c241f75..000000000 --- a/src/assets/icons/source/padlock-unlock.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/padlock.svg b/src/assets/icons/source/padlock.svg deleted file mode 100644 index 0542b65c3..000000000 --- a/src/assets/icons/source/padlock.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/pdf.svg b/src/assets/icons/source/pdf.svg deleted file mode 100644 index ddc872469..000000000 --- a/src/assets/icons/source/pdf.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/pending.svg b/src/assets/icons/source/pending.svg deleted file mode 100644 index 35f2eb2cd..000000000 --- a/src/assets/icons/source/pending.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/plus.svg b/src/assets/icons/source/plus.svg deleted file mode 100644 index 61e215105..000000000 --- a/src/assets/icons/source/plus.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/preprints.svg b/src/assets/icons/source/preprints.svg deleted file mode 100644 index 87d546724..000000000 --- a/src/assets/icons/source/preprints.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/assets/icons/source/profile.svg b/src/assets/icons/source/profile.svg deleted file mode 100644 index 479006fff..000000000 --- a/src/assets/icons/source/profile.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/assets/icons/source/quotes.svg b/src/assets/icons/source/quotes.svg deleted file mode 100644 index b079ea60f..000000000 --- a/src/assets/icons/source/quotes.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/registries.svg b/src/assets/icons/source/registries.svg deleted file mode 100644 index b74ce9773..000000000 --- a/src/assets/icons/source/registries.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/rejected.svg b/src/assets/icons/source/rejected.svg deleted file mode 100644 index 325640f0b..000000000 --- a/src/assets/icons/source/rejected.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/search-2.svg b/src/assets/icons/source/search-2.svg deleted file mode 100644 index 639f02652..000000000 --- a/src/assets/icons/source/search-2.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/search.svg b/src/assets/icons/source/search.svg deleted file mode 100644 index e55be9a83..000000000 --- a/src/assets/icons/source/search.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/settings.svg b/src/assets/icons/source/settings.svg deleted file mode 100644 index b2ea08ea9..000000000 --- a/src/assets/icons/source/settings.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/share.svg b/src/assets/icons/source/share.svg deleted file mode 100644 index f0a9d9eaf..000000000 --- a/src/assets/icons/source/share.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/sort-asc-grey.svg b/src/assets/icons/source/sort-asc-grey.svg deleted file mode 100644 index fdf2263c5..000000000 --- a/src/assets/icons/source/sort-asc-grey.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/sort-asc.svg b/src/assets/icons/source/sort-asc.svg deleted file mode 100644 index fdf2263c5..000000000 --- a/src/assets/icons/source/sort-asc.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/sort-desc.svg b/src/assets/icons/source/sort-desc.svg deleted file mode 100644 index cd78f729e..000000000 --- a/src/assets/icons/source/sort-desc.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/support.svg b/src/assets/icons/source/support.svg deleted file mode 100644 index f6a837dbb..000000000 --- a/src/assets/icons/source/support.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/trash.svg b/src/assets/icons/source/trash.svg deleted file mode 100644 index ab4df580c..000000000 --- a/src/assets/icons/source/trash.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/upload.svg b/src/assets/icons/source/upload.svg deleted file mode 100644 index 38bbf227f..000000000 --- a/src/assets/icons/source/upload.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/warning-sign.svg b/src/assets/icons/source/warning-sign.svg deleted file mode 100644 index 2abc980b1..000000000 --- a/src/assets/icons/source/warning-sign.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/warning.svg b/src/assets/icons/source/warning.svg deleted file mode 100644 index 56e8f0bcb..000000000 --- a/src/assets/icons/source/warning.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/withdrawn.svg b/src/assets/icons/source/withdrawn.svg deleted file mode 100644 index 220ab25fc..000000000 --- a/src/assets/icons/source/withdrawn.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - From eed87a4b3536aa857c4988f6926043daf61d5443 Mon Sep 17 00:00:00 2001 From: nsemets Date: Fri, 22 Aug 2025 19:20:21 +0300 Subject: [PATCH 10/16] fix(icons): updated icons and image across app --- .../institutions-projects.component.ts | 2 - .../institutions-users.component.ts | 1 - .../auth/pages/sign-up/sign-up.component.html | 2 +- .../move-file-dialog.component.html | 2 +- src/app/features/home/constants/data.ts | 16 ++-- .../my-profile/my-profile.component.html | 8 +- .../project/settings/settings.component.html | 2 +- .../add-resource-dialog.component.html | 4 +- .../add-resource-dialog.component.ts | 8 +- .../resource-form/resource-form.component.ts | 20 ++-- src/app/features/registry/models/index.ts | 9 +- .../registry/models/resources/index.ts | 7 ++ .../resources/registry-resource-form.model.ts | 7 ++ .../registry-overview.component.ts | 2 +- .../registry-resources.component.html | 9 +- .../registry-resources.component.scss | 3 +- .../registry-resources.component.ts | 14 +-- .../registry-resources.actions.ts | 3 +- .../registry-resources.model.ts | 18 +++- .../registry-resources.selectors.ts | 4 +- .../registry-resources.state.ts | 23 ++--- .../addon-card/addon-card.component.html | 2 +- .../data-resources.component.html | 47 +++++----- .../data-resources.component.ts | 4 +- .../resource-card.component.html | 2 +- .../search-input/search-input.component.html | 12 +-- .../search-input/search-input.component.scss | 7 +- .../search-input/search-input.component.ts | 4 +- .../{images => icons}/addons/bitbucket.svg | 0 src/assets/{images => icons}/addons/box.svg | 0 .../{images => icons}/addons/dataverse.svg | 0 .../{images => icons}/addons/dropbox.svg | 0 .../{images => icons}/addons/figshare.svg | 0 .../{images => icons}/addons/github.svg | 0 .../{images => icons}/addons/gitlab.svg | 0 .../{images => icons}/addons/googledrive.svg | 0 .../{images => icons}/addons/mendeley.svg | 0 .../{images => icons}/addons/onedrive.svg | 0 .../{images => icons}/addons/owncloud.svg | 0 src/assets/{images => icons}/addons/s3.svg | 0 .../{images => icons}/addons/zotero.svg | 0 src/assets/icons/colored/cloud-upload.svg | 11 --- src/assets/icons/{source => colored}/code.svg | 0 .../{source => colored}/collections-dark.svg | 0 .../icons/colored/conference-organizers.svg | 4 - .../icons/colored/conference-participants.svg | 11 --- src/assets/icons/colored/cos-shield.svg | 10 +- src/assets/icons/{source => colored}/data.svg | 0 src/assets/icons/colored/filter-colored.svg | 4 - src/assets/icons/colored/filter.svg | 11 --- .../{source => colored}/institutions-dark.svg | 0 .../icons/{source => colored}/materials.svg | 0 .../{source => colored}/meetings-dark.svg | 0 .../icons/colored/{orchid.svg => orcid.svg} | 0 .../icons/{source => colored}/papers.svg | 0 .../{source => colored}/preprints-dark.svg | 0 .../{source => colored}/projects-dark.svg | 0 src/assets/icons/colored/question-mark.svg | 5 - .../{source => colored}/registries-dark.svg | 0 .../icons/{source => colored}/supplements.svg | 0 .../icons/socials/{github2.svg => github.svg} | 0 .../socials/{linkedin2.svg => linkedin.svg} | 0 src/assets/icons/socials/x.svg | 1 + src/assets/images/cos-shield.svg | 9 -- src/assets/images/hosting-background.svg | 57 ------------ .../integrations/dropbox.png | Bin .../integrations/google-drive.png | Bin .../integrations/google-scholar.png | Bin .../integrations/incommon.png | Bin .../integrations/mendeley.png | Bin .../socials => images}/integrations/orcid.png | Bin .../socials => images}/integrations/sso.png | Bin .../integrations/zotero.png | Bin src/assets/images/orcid.svg | 9 -- src/assets/styles/_icons.scss | 87 ++++++++++++++++-- 75 files changed, 205 insertions(+), 256 deletions(-) create mode 100644 src/app/features/registry/models/resources/index.ts create mode 100644 src/app/features/registry/models/resources/registry-resource-form.model.ts rename src/assets/{images => icons}/addons/bitbucket.svg (100%) rename src/assets/{images => icons}/addons/box.svg (100%) rename src/assets/{images => icons}/addons/dataverse.svg (100%) rename src/assets/{images => icons}/addons/dropbox.svg (100%) rename src/assets/{images => icons}/addons/figshare.svg (100%) rename src/assets/{images => icons}/addons/github.svg (100%) rename src/assets/{images => icons}/addons/gitlab.svg (100%) rename src/assets/{images => icons}/addons/googledrive.svg (100%) rename src/assets/{images => icons}/addons/mendeley.svg (100%) rename src/assets/{images => icons}/addons/onedrive.svg (100%) rename src/assets/{images => icons}/addons/owncloud.svg (100%) rename src/assets/{images => icons}/addons/s3.svg (100%) rename src/assets/{images => icons}/addons/zotero.svg (100%) delete mode 100644 src/assets/icons/colored/cloud-upload.svg rename src/assets/icons/{source => colored}/code.svg (100%) rename src/assets/icons/{source => colored}/collections-dark.svg (100%) delete mode 100644 src/assets/icons/colored/conference-organizers.svg delete mode 100644 src/assets/icons/colored/conference-participants.svg rename src/assets/icons/{source => colored}/data.svg (100%) delete mode 100644 src/assets/icons/colored/filter-colored.svg delete mode 100644 src/assets/icons/colored/filter.svg rename src/assets/icons/{source => colored}/institutions-dark.svg (100%) rename src/assets/icons/{source => colored}/materials.svg (100%) rename src/assets/icons/{source => colored}/meetings-dark.svg (100%) rename src/assets/icons/colored/{orchid.svg => orcid.svg} (100%) rename src/assets/icons/{source => colored}/papers.svg (100%) rename src/assets/icons/{source => colored}/preprints-dark.svg (100%) rename src/assets/icons/{source => colored}/projects-dark.svg (100%) delete mode 100644 src/assets/icons/colored/question-mark.svg rename src/assets/icons/{source => colored}/registries-dark.svg (100%) rename src/assets/icons/{source => colored}/supplements.svg (100%) rename src/assets/icons/socials/{github2.svg => github.svg} (100%) rename src/assets/icons/socials/{linkedin2.svg => linkedin.svg} (100%) create mode 100644 src/assets/icons/socials/x.svg delete mode 100644 src/assets/images/cos-shield.svg delete mode 100644 src/assets/images/hosting-background.svg rename src/assets/{icons/socials => images}/integrations/dropbox.png (100%) rename src/assets/{icons/socials => images}/integrations/google-drive.png (100%) rename src/assets/{icons/socials => images}/integrations/google-scholar.png (100%) rename src/assets/{icons/socials => images}/integrations/incommon.png (100%) rename src/assets/{icons/socials => images}/integrations/mendeley.png (100%) rename src/assets/{icons/socials => images}/integrations/orcid.png (100%) rename src/assets/{icons/socials => images}/integrations/sso.png (100%) rename src/assets/{icons/socials => images}/integrations/zotero.png (100%) delete mode 100644 src/assets/images/orcid.svg diff --git a/src/app/features/admin-institutions/pages/institutions-projects/institutions-projects.component.ts b/src/app/features/admin-institutions/pages/institutions-projects/institutions-projects.component.ts index ec919ce76..f6ef5e56f 100644 --- a/src/app/features/admin-institutions/pages/institutions-projects/institutions-projects.component.ts +++ b/src/app/features/admin-institutions/pages/institutions-projects/institutions-projects.component.ts @@ -75,8 +75,6 @@ export class InstitutionsProjectsComponent implements OnInit { } onSortChange(params: QueryParams): void { - console.log(params); - this.sortField.set(params.sortColumn || '-dateModified'); this.sortOrder.set(params.sortOrder || 1); diff --git a/src/app/features/admin-institutions/pages/institutions-users/institutions-users.component.ts b/src/app/features/admin-institutions/pages/institutions-users/institutions-users.component.ts index b0f74e19f..1a8180f06 100644 --- a/src/app/features/admin-institutions/pages/institutions-users/institutions-users.component.ts +++ b/src/app/features/admin-institutions/pages/institutions-users/institutions-users.component.ts @@ -189,7 +189,6 @@ export class InstitutionsUsersComponent implements OnInit { const filters = this.buildFilters(); const sortField = this.sortField(); const sortOrder = this.sortOrder(); - console.log(sortOrder); const sortParam = sortOrder === 0 ? `-${sortField}` : sortField; this.actions.fetchInstitutionUsers( diff --git a/src/app/features/auth/pages/sign-up/sign-up.component.html b/src/app/features/auth/pages/sign-up/sign-up.component.html index 2d2ec0572..9f7544fc9 100644 --- a/src/app/features/auth/pages/sign-up/sign-up.component.html +++ b/src/app/features/auth/pages/sign-up/sign-up.component.html @@ -11,7 +11,7 @@

{{ 'auth.signUp.title' | translate }}

raised (onClick)="navigateToOrcidSingIn()" > - Orchid icon + Orcid icon
- cost-shield + cost-shield

{{ 'files.dialogs.moveFile.storage' | translate }}

diff --git a/src/app/features/home/constants/data.ts b/src/app/features/home/constants/data.ts index 003f936e8..8b6b300c8 100644 --- a/src/app/features/home/constants/data.ts +++ b/src/app/features/home/constants/data.ts @@ -26,12 +26,12 @@ export const INTEGRATION_ICONS = [ { title: 'home.loggedOut.integrations.categories.authentication', first: { - path: 'assets/icons/socials/integrations/incommon.png', + path: 'assets/images/integrations/incommon.png', height: '36', width: '200', }, second: { - path: 'assets/icons/socials/integrations/sso.png', + path: 'assets/images/integrations/sso.png', height: '59', width: '135', }, @@ -39,12 +39,12 @@ export const INTEGRATION_ICONS = [ { title: 'home.loggedOut.integrations.categories.discovery', first: { - path: 'assets/icons/socials/integrations/google-scholar.png', + path: 'assets/images/integrations/google-scholar.png', height: '36', width: '215', }, second: { - path: 'assets/icons/socials/integrations/orcid.png', + path: 'assets/images/integrations/orcid.png', height: '34', width: '111', }, @@ -52,12 +52,12 @@ export const INTEGRATION_ICONS = [ { title: 'home.loggedOut.integrations.categories.references', first: { - path: 'assets/icons/socials/integrations/mendeley.png', + path: 'assets/images/integrations/mendeley.png', height: '42', width: '214', }, second: { - path: 'assets/icons/socials/integrations/zotero.png', + path: 'assets/images/integrations/zotero.png', height: '36', width: '152', }, @@ -65,12 +65,12 @@ export const INTEGRATION_ICONS = [ { title: 'home.loggedOut.integrations.categories.storage', first: { - path: 'assets/icons/socials/integrations/dropbox.png', + path: 'assets/images/integrations/dropbox.png', height: '34', width: '175', }, second: { - path: 'assets/icons/socials/integrations/google-drive.png', + path: 'assets/images/integrations/google-drive.png', height: '35', width: '207', }, diff --git a/src/app/features/my-profile/my-profile.component.html b/src/app/features/my-profile/my-profile.component.html index a1c91161c..7b5b073e4 100644 --- a/src/app/features/my-profile/my-profile.component.html +++ b/src/app/features/my-profile/my-profile.component.html @@ -25,7 +25,7 @@

{{ currentUser()?.fullName }}

@if (currentUser()?.social?.orcid) {
- orcid + orcid https://orcid.org/{{ currentUser()?.social?.orcid }} @@ -63,7 +63,7 @@

@if (currentUser()?.social?.github) { - github + github } @if (currentUser()?.social?.scholar) { @@ -73,12 +73,12 @@

} @if (currentUser()?.social?.twitter) { - twitter + x(twitter) } @if (currentUser()?.social?.linkedIn) { - linkedin + linkedin } @if (currentUser()?.social?.impactStory) { diff --git a/src/app/features/project/settings/settings.component.html b/src/app/features/project/settings/settings.component.html index e119bc64c..bf82bc5dc 100644 --- a/src/app/features/project/settings/settings.component.html +++ b/src/app/features/project/settings/settings.component.html @@ -72,7 +72,7 @@

{{ 'myProjects.settings.projectAffiliation' | translate class="flex justify-content-between align-items-center w-full border-bottom-1 border-gray-300 pb-2 pr-2 sm:pr-4" >
- cos-shield + cos-shield

{{ affiliation }}

diff --git a/src/app/features/registry/components/add-resource-dialog/add-resource-dialog.component.html b/src/app/features/registry/components/add-resource-dialog/add-resource-dialog.component.html index b5557a65f..4983d95fb 100644 --- a/src/app/features/registry/components/add-resource-dialog/add-resource-dialog.component.html +++ b/src/app/features/registry/components/add-resource-dialog/add-resource-dialog.component.html @@ -6,11 +6,11 @@ @let resourceType = currentResource()?.type; @let iconName = resourceType === 'analytic_code' ? 'code' : resourceType; - @let icon = `assets/icons/colored/${iconName}-colored.svg`; + @let icon = `custom-icon-${iconName} icon-resource-size`; @let resourceName = resourceType === RegistryResourceType.Code ? 'Analytic Code' : resourceType;
- resource-type icon +

{{ resourceName }}

diff --git a/src/app/features/registry/components/add-resource-dialog/add-resource-dialog.component.ts b/src/app/features/registry/components/add-resource-dialog/add-resource-dialog.component.ts index 3d8b0e885..00084c4d1 100644 --- a/src/app/features/registry/components/add-resource-dialog/add-resource-dialog.component.ts +++ b/src/app/features/registry/components/add-resource-dialog/add-resource-dialog.component.ts @@ -10,14 +10,14 @@ import { finalize, take } from 'rxjs'; import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; -import { LoadingSpinnerComponent } from '@osf/shared/components'; +import { IconComponent, LoadingSpinnerComponent } from '@osf/shared/components'; import { InputLimits } from '@osf/shared/constants'; import { RegistryResourceType } from '@osf/shared/enums'; import { CustomValidators } from '@osf/shared/helpers'; import { SelectOption } from '@osf/shared/models'; import { resourceTypeOptions } from '../../constants'; -import { AddResource, ConfirmAddResource } from '../../models'; +import { AddResource, ConfirmAddResource, RegistryResourceFormModel } from '../../models'; import { ConfirmAddRegistryResource, PreviewRegistryResource, @@ -28,7 +28,7 @@ import { ResourceFormComponent } from '../resource-form/resource-form.component' @Component({ selector: 'osf-add-resource-dialog', - imports: [Button, TranslatePipe, ReactiveFormsModule, LoadingSpinnerComponent, ResourceFormComponent], + imports: [Button, TranslatePipe, ReactiveFormsModule, LoadingSpinnerComponent, ResourceFormComponent, IconComponent], templateUrl: './add-resource-dialog.component.html', styleUrl: './add-resource-dialog.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, @@ -45,7 +45,7 @@ export class AddResourceDialogComponent { protected inputLimits = InputLimits; protected isResourceConfirming = signal(false); - protected form = new FormGroup({ + protected form = new FormGroup({ pid: new FormControl('', [CustomValidators.requiredTrimmed(), CustomValidators.doiValidator]), resourceType: new FormControl('', [Validators.required]), description: new FormControl(''), diff --git a/src/app/features/registry/components/resource-form/resource-form.component.ts b/src/app/features/registry/components/resource-form/resource-form.component.ts index e0259c76c..c1ebdc13d 100644 --- a/src/app/features/registry/components/resource-form/resource-form.component.ts +++ b/src/app/features/registry/components/resource-form/resource-form.component.ts @@ -6,16 +6,12 @@ import { Textarea } from 'primeng/textarea'; import { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { resourceTypeOptions } from '@osf/features/registry/constants'; -import { FormSelectComponent, TextInputComponent } from '@shared/components'; -import { InputLimits } from '@shared/constants'; -import { SelectOption } from '@shared/models'; - -interface ResourceForm { - pid: FormControl; - resourceType: FormControl; - description: FormControl; -} +import { FormSelectComponent, TextInputComponent } from '@osf/shared/components'; +import { InputLimits } from '@osf/shared/constants'; +import { SelectOption } from '@osf/shared/models'; + +import { resourceTypeOptions } from '../../constants'; +import { RegistryResourceFormModel } from '../../models'; @Component({ selector: 'osf-resource-form', @@ -25,7 +21,7 @@ interface ResourceForm { changeDetection: ChangeDetectionStrategy.OnPush, }) export class ResourceFormComponent { - formGroup = input.required>(); + formGroup = input.required>(); showCancelButton = input(true); showPreviewButton = input(false); cancelButtonLabel = input('common.buttons.cancel'); @@ -37,7 +33,7 @@ export class ResourceFormComponent { protected inputLimits = InputLimits; public resourceOptions = signal(resourceTypeOptions); - protected getControl(controlName: keyof ResourceForm): FormControl { + protected getControl(controlName: keyof RegistryResourceFormModel): FormControl { return this.formGroup().get(controlName) as FormControl; } diff --git a/src/app/features/registry/models/index.ts b/src/app/features/registry/models/index.ts index cb8464af7..fcf6c2b48 100644 --- a/src/app/features/registry/models/index.ts +++ b/src/app/features/registry/models/index.ts @@ -11,11 +11,4 @@ export * from './registry-contributor-json-api.model'; export * from './registry-metadata.models'; export * from './registry-overview.models'; export * from './registry-subject.model'; -export * from './resources/add-resource.model'; -export * from './resources/add-resource-request.model'; -export * from './resources/add-resource-response-json-api.model'; -export * from './resources/confirm-add-resource.model'; -export * from './resources/get-registry-resources-json-api.model'; -export * from './resources/get-registry-resources-json-api.model'; -export * from './resources/registry-resource.model'; -export * from './resources/registry-resource.model'; +export * from './resources'; diff --git a/src/app/features/registry/models/resources/index.ts b/src/app/features/registry/models/resources/index.ts new file mode 100644 index 000000000..a75d9c33b --- /dev/null +++ b/src/app/features/registry/models/resources/index.ts @@ -0,0 +1,7 @@ +export * from './add-resource.model'; +export * from './add-resource-request.model'; +export * from './add-resource-response-json-api.model'; +export * from './confirm-add-resource.model'; +export * from './get-registry-resources-json-api.model'; +export * from './registry-resource.model'; +export * from './registry-resource-form.model'; diff --git a/src/app/features/registry/models/resources/registry-resource-form.model.ts b/src/app/features/registry/models/resources/registry-resource-form.model.ts new file mode 100644 index 000000000..041d1e20c --- /dev/null +++ b/src/app/features/registry/models/resources/registry-resource-form.model.ts @@ -0,0 +1,7 @@ +import { FormControl } from '@angular/forms'; + +export interface RegistryResourceFormModel { + pid: FormControl; + resourceType: FormControl; + description: FormControl; +} diff --git a/src/app/features/registry/pages/registry-overview/registry-overview.component.ts b/src/app/features/registry/pages/registry-overview/registry-overview.component.ts index 937cba632..10adb104c 100644 --- a/src/app/features/registry/pages/registry-overview/registry-overview.component.ts +++ b/src/app/features/registry/pages/registry-overview/registry-overview.component.ts @@ -26,7 +26,7 @@ import { toCamelCase } from '@osf/shared/helpers'; import { MapRegistryOverview } from '@osf/shared/mappers'; import { SchemaResponse, ToolbarResource } from '@osf/shared/models'; import { ToastService } from '@osf/shared/services'; -import { GetBookmarksCollectionId } from '@shared/stores'; +import { GetBookmarksCollectionId } from '@osf/shared/stores'; import { ArchivingMessageComponent, RegistryRevisionsComponent, RegistryStatusesComponent } from '../../components'; import { RegistryMakeDecisionComponent } from '../../components/registry-make-decision/registry-make-decision.component'; diff --git a/src/app/features/registry/pages/registry-resources/registry-resources.component.html b/src/app/features/registry/pages/registry-resources/registry-resources.component.html index da98378a9..03f2ae84d 100644 --- a/src/app/features/registry/pages/registry-resources/registry-resources.component.html +++ b/src/app/features/registry/pages/registry-resources/registry-resources.component.html @@ -17,9 +17,9 @@
@let iconName = resource.type === 'analytic_code' ? 'code' : resource.type; - @let icon = `assets/icons/colored/${iconName}-colored.svg`; + @let icon = `custom-icon-${iconName} icon-resource-size`; @let resourceName = resource.type === 'analytic_code' ? 'analytic code' : resource.type; - data-resource +

{{ resourceName }}

@@ -34,14 +34,15 @@

{{ resourceName }}

styleClass="w-full md:w-auto" severity="secondary" [label]="'common.buttons.edit' | translate" - (click)="updateResource(resource)" + (onClick)="updateResource(resource)" > +
diff --git a/src/app/features/registry/pages/registry-resources/registry-resources.component.scss b/src/app/features/registry/pages/registry-resources/registry-resources.component.scss index 916e85804..5d7068592 100644 --- a/src/app/features/registry/pages/registry-resources/registry-resources.component.scss +++ b/src/app/features/registry/pages/registry-resources/registry-resources.component.scss @@ -1,4 +1,3 @@ -@use "/assets/styles/variables" as var; @use "assets/styles/mixins" as mix; .resource-block { @@ -6,6 +5,6 @@ align-items: center; width: 100%; height: max-content; - border: 1px solid var.$grey-2; + border: 1px solid var(--grey-2); border-radius: mix.rem(12px); } diff --git a/src/app/features/registry/pages/registry-resources/registry-resources.component.ts b/src/app/features/registry/pages/registry-resources/registry-resources.component.ts index 4d52eb605..7ccd81da4 100644 --- a/src/app/features/registry/pages/registry-resources/registry-resources.component.ts +++ b/src/app/features/registry/pages/registry-resources/registry-resources.component.ts @@ -10,22 +10,22 @@ import { finalize, take } from 'rxjs'; import { ChangeDetectionStrategy, Component, HostBinding, inject, signal } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { AddResourceDialogComponent } from '@osf/features/registry/components/add-resource-dialog/add-resource-dialog.component'; -import { EditResourceDialogComponent } from '@osf/features/registry/components/edit-resource-dialog/edit-resource-dialog.component'; -import { RegistryResource } from '@osf/features/registry/models'; +import { IconComponent, LoadingSpinnerComponent, SubHeaderComponent } from '@osf/shared/components'; +import { CustomConfirmationService, ToastService } from '@osf/shared/services'; + +import { AddResourceDialogComponent, EditResourceDialogComponent } from '../../components'; +import { RegistryResource } from '../../models'; import { AddRegistryResource, DeleteResource, GetRegistryResources, RegistryResourcesSelectors, SilentDelete, -} from '@osf/features/registry/store/registry-resources'; -import { LoadingSpinnerComponent, SubHeaderComponent } from '@shared/components'; -import { CustomConfirmationService, ToastService } from '@shared/services'; +} from '../../store/registry-resources'; @Component({ selector: 'osf-registry-resources', - imports: [SubHeaderComponent, TranslatePipe, Button, LoadingSpinnerComponent], + imports: [SubHeaderComponent, TranslatePipe, Button, LoadingSpinnerComponent, IconComponent], templateUrl: './registry-resources.component.html', styleUrl: './registry-resources.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/src/app/features/registry/store/registry-resources/registry-resources.actions.ts b/src/app/features/registry/store/registry-resources/registry-resources.actions.ts index 14ed0dad5..11109ed33 100644 --- a/src/app/features/registry/store/registry-resources/registry-resources.actions.ts +++ b/src/app/features/registry/store/registry-resources/registry-resources.actions.ts @@ -1,5 +1,4 @@ -import { AddResource } from '@osf/features/registry/models/resources/add-resource.model'; -import { ConfirmAddResource } from '@osf/features/registry/models/resources/confirm-add-resource.model'; +import { AddResource, ConfirmAddResource } from '../../models'; export class GetRegistryResources { static readonly type = '[Registry Resources] Get Registry Resources'; diff --git a/src/app/features/registry/store/registry-resources/registry-resources.model.ts b/src/app/features/registry/store/registry-resources/registry-resources.model.ts index 5f8bc44dc..00ca172bc 100644 --- a/src/app/features/registry/store/registry-resources/registry-resources.model.ts +++ b/src/app/features/registry/store/registry-resources/registry-resources.model.ts @@ -1,7 +1,21 @@ -import { RegistryResource } from '@osf/features/registry/models/resources/registry-resource.model'; -import { AsyncStateModel } from '@shared/models'; +import { AsyncStateModel } from '@osf/shared/models'; + +import { RegistryResource } from '../../models'; export interface RegistryResourcesStateModel { resources: AsyncStateModel; currentResource: AsyncStateModel; } + +export const REGISTRY_RESOURCES_STATE_DEFAULTS = { + resources: { + data: null, + isLoading: false, + error: null, + }, + currentResource: { + data: null, + isLoading: false, + error: null, + }, +}; diff --git a/src/app/features/registry/store/registry-resources/registry-resources.selectors.ts b/src/app/features/registry/store/registry-resources/registry-resources.selectors.ts index 6675ecc3a..b482de595 100644 --- a/src/app/features/registry/store/registry-resources/registry-resources.selectors.ts +++ b/src/app/features/registry/store/registry-resources/registry-resources.selectors.ts @@ -1,9 +1,9 @@ import { Selector } from '@ngxs/store'; -import { RegistryResource } from '@osf/features/registry/models'; -import { RegistryResourcesState } from '@osf/features/registry/store/registry-resources/registry-resources.state'; +import { RegistryResource } from '../../models'; import { RegistryResourcesStateModel } from './registry-resources.model'; +import { RegistryResourcesState } from './registry-resources.state'; export class RegistryResourcesSelectors { @Selector([RegistryResourcesState]) diff --git a/src/app/features/registry/store/registry-resources/registry-resources.state.ts b/src/app/features/registry/store/registry-resources/registry-resources.state.ts index fc5239e10..01c8932f3 100644 --- a/src/app/features/registry/store/registry-resources/registry-resources.state.ts +++ b/src/app/features/registry/store/registry-resources/registry-resources.state.ts @@ -5,34 +5,25 @@ import { catchError } from 'rxjs/operators'; import { inject, Injectable } from '@angular/core'; -import { RegistryResourcesService } from '@osf/features/registry/services'; +import { handleSectionError } from '@osf/shared/helpers'; + +import { RegistryResourcesService } from '../../services'; + import { AddRegistryResource, ConfirmAddRegistryResource, DeleteResource, GetRegistryResources, PreviewRegistryResource, - RegistryResourcesStateModel, SilentDelete, UpdateResource, -} from '@osf/features/registry/store/registry-resources'; -import { handleSectionError } from '@shared/helpers'; +} from './registry-resources.actions'; +import { REGISTRY_RESOURCES_STATE_DEFAULTS, RegistryResourcesStateModel } from './registry-resources.model'; @Injectable() @State({ name: 'registryResources', - defaults: { - resources: { - data: null, - isLoading: false, - error: null, - }, - currentResource: { - data: null, - isLoading: false, - error: null, - }, - }, + defaults: REGISTRY_RESOURCES_STATE_DEFAULTS, }) export class RegistryResourcesState { private readonly registryResourcesService = inject(RegistryResourcesService); diff --git a/src/app/shared/components/addons/addon-card/addon-card.component.html b/src/app/shared/components/addons/addon-card/addon-card.component.html index 95ba8ff0d..c1cea7502 100644 --- a/src/app/shared/components/addons/addon-card/addon-card.component.html +++ b/src/app/shared/components/addons/addon-card/addon-card.component.html @@ -4,7 +4,7 @@ Addon card image }
diff --git a/src/app/shared/components/data-resources/data-resources.component.html b/src/app/shared/components/data-resources/data-resources.component.html index 48a878e97..820605a48 100644 --- a/src/app/shared/components/data-resources/data-resources.component.html +++ b/src/app/shared/components/data-resources/data-resources.component.html @@ -1,45 +1,44 @@ diff --git a/src/app/shared/components/data-resources/data-resources.component.ts b/src/app/shared/components/data-resources/data-resources.component.ts index 3880dcec9..c6c37317d 100644 --- a/src/app/shared/components/data-resources/data-resources.component.ts +++ b/src/app/shared/components/data-resources/data-resources.component.ts @@ -3,9 +3,11 @@ import { TranslatePipe } from '@ngx-translate/core'; import { ChangeDetectionStrategy, Component, HostBinding, input } from '@angular/core'; import { RouterLink } from '@angular/router'; +import { IconComponent } from '../icon/icon.component'; + @Component({ selector: 'osf-data-resources', - imports: [TranslatePipe, RouterLink], + imports: [TranslatePipe, RouterLink, IconComponent], templateUrl: './data-resources.component.html', styleUrl: './data-resources.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/src/app/shared/components/resource-card/resource-card.component.html b/src/app/shared/components/resource-card/resource-card.component.html index a5685b933..984bb5cb8 100644 --- a/src/app/shared/components/resource-card/resource-card.component.html +++ b/src/app/shared/components/resource-card/resource-card.component.html @@ -23,7 +23,7 @@ } @if (item().orcid) { - orcid + orcid }
diff --git a/src/app/shared/components/search-input/search-input.component.html b/src/app/shared/components/search-input/search-input.component.html index 9028ae4ad..4594076aa 100644 --- a/src/app/shared/components/search-input/search-input.component.html +++ b/src/app/shared/components/search-input/search-input.component.html @@ -11,16 +11,6 @@ /> @if (showHelpIcon()) { - Info icon + }
diff --git a/src/app/shared/components/search-input/search-input.component.scss b/src/app/shared/components/search-input/search-input.component.scss index c85d70a7a..1491d1cb2 100644 --- a/src/app/shared/components/search-input/search-input.component.scss +++ b/src/app/shared/components/search-input/search-input.component.scss @@ -1,4 +1,3 @@ -@use "assets/styles/variables" as var; @use "assets/styles/mixins" as mix; .search-container { @@ -7,16 +6,16 @@ .search-icon { position: absolute; left: mix.rem(12px); - color: var.$grey-1; + color: var(--grey-1); } .search-input { - color: var.$dark-blue-1; + color: var(--dark-blue-1); padding-left: mix.rem(40px); width: 100%; &::placeholder { - color: var.$grey-1; + color: var(--grey-1); } } diff --git a/src/app/shared/components/search-input/search-input.component.ts b/src/app/shared/components/search-input/search-input.component.ts index 3c413597c..78e95ed48 100644 --- a/src/app/shared/components/search-input/search-input.component.ts +++ b/src/app/shared/components/search-input/search-input.component.ts @@ -1,6 +1,6 @@ +import { Button } from 'primeng/button'; import { InputText } from 'primeng/inputtext'; -import { NgOptimizedImage } from '@angular/common'; import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; @@ -8,7 +8,7 @@ import { IconComponent } from '@shared/components'; @Component({ selector: 'osf-search-input', - imports: [InputText, ReactiveFormsModule, IconComponent, NgOptimizedImage], + imports: [InputText, Button, ReactiveFormsModule, IconComponent], templateUrl: './search-input.component.html', styleUrl: './search-input.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/src/assets/images/addons/bitbucket.svg b/src/assets/icons/addons/bitbucket.svg similarity index 100% rename from src/assets/images/addons/bitbucket.svg rename to src/assets/icons/addons/bitbucket.svg diff --git a/src/assets/images/addons/box.svg b/src/assets/icons/addons/box.svg similarity index 100% rename from src/assets/images/addons/box.svg rename to src/assets/icons/addons/box.svg diff --git a/src/assets/images/addons/dataverse.svg b/src/assets/icons/addons/dataverse.svg similarity index 100% rename from src/assets/images/addons/dataverse.svg rename to src/assets/icons/addons/dataverse.svg diff --git a/src/assets/images/addons/dropbox.svg b/src/assets/icons/addons/dropbox.svg similarity index 100% rename from src/assets/images/addons/dropbox.svg rename to src/assets/icons/addons/dropbox.svg diff --git a/src/assets/images/addons/figshare.svg b/src/assets/icons/addons/figshare.svg similarity index 100% rename from src/assets/images/addons/figshare.svg rename to src/assets/icons/addons/figshare.svg diff --git a/src/assets/images/addons/github.svg b/src/assets/icons/addons/github.svg similarity index 100% rename from src/assets/images/addons/github.svg rename to src/assets/icons/addons/github.svg diff --git a/src/assets/images/addons/gitlab.svg b/src/assets/icons/addons/gitlab.svg similarity index 100% rename from src/assets/images/addons/gitlab.svg rename to src/assets/icons/addons/gitlab.svg diff --git a/src/assets/images/addons/googledrive.svg b/src/assets/icons/addons/googledrive.svg similarity index 100% rename from src/assets/images/addons/googledrive.svg rename to src/assets/icons/addons/googledrive.svg diff --git a/src/assets/images/addons/mendeley.svg b/src/assets/icons/addons/mendeley.svg similarity index 100% rename from src/assets/images/addons/mendeley.svg rename to src/assets/icons/addons/mendeley.svg diff --git a/src/assets/images/addons/onedrive.svg b/src/assets/icons/addons/onedrive.svg similarity index 100% rename from src/assets/images/addons/onedrive.svg rename to src/assets/icons/addons/onedrive.svg diff --git a/src/assets/images/addons/owncloud.svg b/src/assets/icons/addons/owncloud.svg similarity index 100% rename from src/assets/images/addons/owncloud.svg rename to src/assets/icons/addons/owncloud.svg diff --git a/src/assets/images/addons/s3.svg b/src/assets/icons/addons/s3.svg similarity index 100% rename from src/assets/images/addons/s3.svg rename to src/assets/icons/addons/s3.svg diff --git a/src/assets/images/addons/zotero.svg b/src/assets/icons/addons/zotero.svg similarity index 100% rename from src/assets/images/addons/zotero.svg rename to src/assets/icons/addons/zotero.svg diff --git a/src/assets/icons/colored/cloud-upload.svg b/src/assets/icons/colored/cloud-upload.svg deleted file mode 100644 index 003a42771..000000000 --- a/src/assets/icons/colored/cloud-upload.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/assets/icons/source/code.svg b/src/assets/icons/colored/code.svg similarity index 100% rename from src/assets/icons/source/code.svg rename to src/assets/icons/colored/code.svg diff --git a/src/assets/icons/source/collections-dark.svg b/src/assets/icons/colored/collections-dark.svg similarity index 100% rename from src/assets/icons/source/collections-dark.svg rename to src/assets/icons/colored/collections-dark.svg diff --git a/src/assets/icons/colored/conference-organizers.svg b/src/assets/icons/colored/conference-organizers.svg deleted file mode 100644 index 288c3dc32..000000000 --- a/src/assets/icons/colored/conference-organizers.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/icons/colored/conference-participants.svg b/src/assets/icons/colored/conference-participants.svg deleted file mode 100644 index 003a42771..000000000 --- a/src/assets/icons/colored/conference-participants.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/assets/icons/colored/cos-shield.svg b/src/assets/icons/colored/cos-shield.svg index 28fde1b59..1ac2eba44 100644 --- a/src/assets/icons/colored/cos-shield.svg +++ b/src/assets/icons/colored/cos-shield.svg @@ -1,9 +1,9 @@ - - + + - - + + - + diff --git a/src/assets/icons/source/data.svg b/src/assets/icons/colored/data.svg similarity index 100% rename from src/assets/icons/source/data.svg rename to src/assets/icons/colored/data.svg diff --git a/src/assets/icons/colored/filter-colored.svg b/src/assets/icons/colored/filter-colored.svg deleted file mode 100644 index d0e579666..000000000 --- a/src/assets/icons/colored/filter-colored.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/icons/colored/filter.svg b/src/assets/icons/colored/filter.svg deleted file mode 100644 index 31d57840e..000000000 --- a/src/assets/icons/colored/filter.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/assets/icons/source/institutions-dark.svg b/src/assets/icons/colored/institutions-dark.svg similarity index 100% rename from src/assets/icons/source/institutions-dark.svg rename to src/assets/icons/colored/institutions-dark.svg diff --git a/src/assets/icons/source/materials.svg b/src/assets/icons/colored/materials.svg similarity index 100% rename from src/assets/icons/source/materials.svg rename to src/assets/icons/colored/materials.svg diff --git a/src/assets/icons/source/meetings-dark.svg b/src/assets/icons/colored/meetings-dark.svg similarity index 100% rename from src/assets/icons/source/meetings-dark.svg rename to src/assets/icons/colored/meetings-dark.svg diff --git a/src/assets/icons/colored/orchid.svg b/src/assets/icons/colored/orcid.svg similarity index 100% rename from src/assets/icons/colored/orchid.svg rename to src/assets/icons/colored/orcid.svg diff --git a/src/assets/icons/source/papers.svg b/src/assets/icons/colored/papers.svg similarity index 100% rename from src/assets/icons/source/papers.svg rename to src/assets/icons/colored/papers.svg diff --git a/src/assets/icons/source/preprints-dark.svg b/src/assets/icons/colored/preprints-dark.svg similarity index 100% rename from src/assets/icons/source/preprints-dark.svg rename to src/assets/icons/colored/preprints-dark.svg diff --git a/src/assets/icons/source/projects-dark.svg b/src/assets/icons/colored/projects-dark.svg similarity index 100% rename from src/assets/icons/source/projects-dark.svg rename to src/assets/icons/colored/projects-dark.svg diff --git a/src/assets/icons/colored/question-mark.svg b/src/assets/icons/colored/question-mark.svg deleted file mode 100644 index 80521ee6b..000000000 --- a/src/assets/icons/colored/question-mark.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/source/registries-dark.svg b/src/assets/icons/colored/registries-dark.svg similarity index 100% rename from src/assets/icons/source/registries-dark.svg rename to src/assets/icons/colored/registries-dark.svg diff --git a/src/assets/icons/source/supplements.svg b/src/assets/icons/colored/supplements.svg similarity index 100% rename from src/assets/icons/source/supplements.svg rename to src/assets/icons/colored/supplements.svg diff --git a/src/assets/icons/socials/github2.svg b/src/assets/icons/socials/github.svg similarity index 100% rename from src/assets/icons/socials/github2.svg rename to src/assets/icons/socials/github.svg diff --git a/src/assets/icons/socials/linkedin2.svg b/src/assets/icons/socials/linkedin.svg similarity index 100% rename from src/assets/icons/socials/linkedin2.svg rename to src/assets/icons/socials/linkedin.svg diff --git a/src/assets/icons/socials/x.svg b/src/assets/icons/socials/x.svg new file mode 100644 index 000000000..fc484ea97 --- /dev/null +++ b/src/assets/icons/socials/x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/cos-shield.svg b/src/assets/images/cos-shield.svg deleted file mode 100644 index 1ac2eba44..000000000 --- a/src/assets/images/cos-shield.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/assets/images/hosting-background.svg b/src/assets/images/hosting-background.svg deleted file mode 100644 index 1e505c0c0..000000000 --- a/src/assets/images/hosting-background.svg +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/assets/icons/socials/integrations/dropbox.png b/src/assets/images/integrations/dropbox.png similarity index 100% rename from src/assets/icons/socials/integrations/dropbox.png rename to src/assets/images/integrations/dropbox.png diff --git a/src/assets/icons/socials/integrations/google-drive.png b/src/assets/images/integrations/google-drive.png similarity index 100% rename from src/assets/icons/socials/integrations/google-drive.png rename to src/assets/images/integrations/google-drive.png diff --git a/src/assets/icons/socials/integrations/google-scholar.png b/src/assets/images/integrations/google-scholar.png similarity index 100% rename from src/assets/icons/socials/integrations/google-scholar.png rename to src/assets/images/integrations/google-scholar.png diff --git a/src/assets/icons/socials/integrations/incommon.png b/src/assets/images/integrations/incommon.png similarity index 100% rename from src/assets/icons/socials/integrations/incommon.png rename to src/assets/images/integrations/incommon.png diff --git a/src/assets/icons/socials/integrations/mendeley.png b/src/assets/images/integrations/mendeley.png similarity index 100% rename from src/assets/icons/socials/integrations/mendeley.png rename to src/assets/images/integrations/mendeley.png diff --git a/src/assets/icons/socials/integrations/orcid.png b/src/assets/images/integrations/orcid.png similarity index 100% rename from src/assets/icons/socials/integrations/orcid.png rename to src/assets/images/integrations/orcid.png diff --git a/src/assets/icons/socials/integrations/sso.png b/src/assets/images/integrations/sso.png similarity index 100% rename from src/assets/icons/socials/integrations/sso.png rename to src/assets/images/integrations/sso.png diff --git a/src/assets/icons/socials/integrations/zotero.png b/src/assets/images/integrations/zotero.png similarity index 100% rename from src/assets/icons/socials/integrations/zotero.png rename to src/assets/images/integrations/zotero.png diff --git a/src/assets/images/orcid.svg b/src/assets/images/orcid.svg deleted file mode 100644 index 1ef0be7a2..000000000 --- a/src/assets/images/orcid.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/assets/styles/_icons.scss b/src/assets/styles/_icons.scss index 34bea74fd..cda0b6827 100644 --- a/src/assets/styles/_icons.scss +++ b/src/assets/styles/_icons.scss @@ -41,42 +41,112 @@ } .custom-icon-registries-dark { - background: url("/assets/icons/source/registries-dark.svg") no-repeat center; + background: url("/assets/icons/colored/registries-dark.svg") no-repeat center; background-size: contain; width: 1rem; height: 1rem; } .custom-icon-preprints-dark { - background: url("/assets/icons/source/preprints-dark.svg") no-repeat center; + background: url("/assets/icons/colored/preprints-dark.svg") no-repeat center; background-size: contain; width: 1rem; height: 1rem; } .custom-icon-collections-dark { - background: url("/assets/icons/source/collections-dark.svg") no-repeat center; + background: url("/assets/icons/colored/collections-dark.svg") no-repeat center; background-size: contain; width: 1rem; height: 1rem; } .custom-icon-institutions-dark { - background: url("/assets/icons/source/institutions-dark.svg") no-repeat center; + background: url("/assets/icons/colored/institutions-dark.svg") no-repeat center; background-size: contain; width: 1rem; height: 1rem; } .custom-icon-projects-dark { - background: url("/assets/icons/source/projects-dark.svg") no-repeat center; + background: url("/assets/icons/colored/projects-dark.svg") no-repeat center; background-size: contain; width: 1rem; height: 1rem; } .custom-icon-meetings-dark { - background: url("/assets/icons/source/meetings-dark.svg") no-repeat center; + background: url("/assets/icons/colored/meetings-dark.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-data { + background: url("/assets/icons/colored/data-colored.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-code { + background: url("/assets/icons/colored/code-colored.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-materials { + background: url("/assets/icons/colored/materials-colored.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-papers { + background: url("/assets/icons/colored/papers-colored.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-supplements { + background: url("/assets/icons/colored/supplements-colored.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-data-dark { + background: url("/assets/icons/colored/data.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-code-dark { + background: url("/assets/icons/colored/code.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-materials-dark { + background: url("/assets/icons/colored/materials.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-papers-dark { + background: url("/assets/icons/colored/papers.svg") no-repeat center; + background-size: contain; + width: 1rem; + height: 1rem; +} + +.custom-icon-supplements-dark { + background: url("/assets/icons/colored/supplements.svg") no-repeat center; background-size: contain; width: 1rem; height: 1rem; @@ -86,3 +156,8 @@ width: 2.5rem; height: 2.5rem; } + +.icon-recolored-size { + width: 28px; + height: 32px; +} From 1f977c277048d923300c5d07125d122663c02f82 Mon Sep 17 00:00:00 2001 From: nsemets Date: Mon, 25 Aug 2025 11:01:40 +0300 Subject: [PATCH 11/16] fix(sign-up): added message for sign-up error --- src/app/features/auth/pages/sign-up/sign-up.component.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/features/auth/pages/sign-up/sign-up.component.ts b/src/app/features/auth/pages/sign-up/sign-up.component.ts index 290fc2128..0ea518669 100644 --- a/src/app/features/auth/pages/sign-up/sign-up.component.ts +++ b/src/app/features/auth/pages/sign-up/sign-up.component.ts @@ -7,6 +7,7 @@ import { Divider } from 'primeng/divider'; import { Password } from 'primeng/password'; import { CommonModule, NgOptimizedImage } from '@angular/common'; +import { HttpErrorResponse } from '@angular/common/http'; import { Component, inject, OnInit, signal } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; import { RouterLink } from '@angular/router'; @@ -16,6 +17,7 @@ import { AuthService } from '@osf/core/services'; import { PasswordInputHintComponent, TextInputComponent } from '@osf/shared/components'; import { InputLimits } from '@osf/shared/constants'; import { CustomValidators, PASSWORD_REGEX } from '@osf/shared/helpers'; +import { ToastService } from '@osf/shared/services'; import { SignUpForm } from '../../models'; @@ -42,6 +44,7 @@ import { environment } from 'src/environments/environment'; }) export class SignUpComponent implements OnInit { private readonly authService = inject(AuthService); + private readonly toastService = inject(ToastService); signUpForm = new FormGroup({} as SignUpForm); passwordRegex: RegExp = PASSWORD_REGEX; @@ -98,8 +101,9 @@ export class SignUpComponent implements OnInit { this.signUpForm.reset(); this.isFormSubmitted.set(true); }, - error: () => { + error: (error: HttpErrorResponse) => { this.signUpForm.enable(); + this.toastService.showError(error.error?.message_long); }, }); } From ca9be17bf9e1ebbab1d694e00904adc33ff72bb8 Mon Sep 17 00:00:00 2001 From: nsemets Date: Mon, 25 Aug 2025 12:22:01 +0300 Subject: [PATCH 12/16] fix(tokens): fixed bugs --- .../token-add-edit-form.component.ts | 16 ++-- .../token-created-dialog.component.ts | 4 +- .../settings/tokens/mappers/token.mapper.ts | 16 +--- .../tokens/models/add-edit-token.model.ts | 4 - .../tokens/models/scope-json-api.model.ts | 3 - .../tokens/models/token-json-api.model.ts | 27 ++++--- .../settings/tokens/models/token.model.ts | 2 - .../tokens/services/tokens.service.ts | 10 +-- .../settings/tokens/store/tokens.models.ts | 13 ++++ .../settings/tokens/store/tokens.state.ts | 75 +++++++------------ .../settings/tokens/tokens.component.ts | 9 +-- 11 files changed, 73 insertions(+), 106 deletions(-) delete mode 100644 src/app/features/settings/tokens/models/add-edit-token.model.ts diff --git a/src/app/features/settings/tokens/components/token-add-edit-form/token-add-edit-form.component.ts b/src/app/features/settings/tokens/components/token-add-edit-form/token-add-edit-form.component.ts index 32111c9e1..cf2a5d7d1 100644 --- a/src/app/features/settings/tokens/components/token-add-edit-form/token-add-edit-form.component.ts +++ b/src/app/features/settings/tokens/components/token-add-edit-form/token-add-edit-form.component.ts @@ -45,13 +45,13 @@ export class TokenAddEditFormComponent implements OnInit { isEditMode = input(false); initialValues = input(null); - inputLimits = InputLimits.fullName; + readonly inputLimits = InputLimits.fullName; - protected readonly tokenId = toSignal(this.route.params.pipe(map((params) => params['id']))); - protected readonly dialogRef = inject(DynamicDialogRef); - protected readonly TokenFormControls = TokenFormControls; - protected readonly tokenScopes = select(TokensSelectors.getScopes); - protected readonly isLoading = select(TokensSelectors.isTokensLoading); + readonly tokenId = toSignal(this.route.params.pipe(map((params) => params['id']))); + readonly dialogRef = inject(DynamicDialogRef); + readonly TokenFormControls = TokenFormControls; + readonly tokenScopes = select(TokensSelectors.getScopes); + readonly isLoading = select(TokensSelectors.isTokensLoading); readonly tokenForm: TokenForm = new FormGroup({ [TokenFormControls.TokenName]: new FormControl('', { @@ -98,14 +98,14 @@ export class TokenAddEditFormComponent implements OnInit { const tokens = this.store.selectSignal(TokensSelectors.getTokens); const newToken = tokens()[0]; this.dialogRef.close(); - this.showTokenCreatedDialog(newToken.name, newToken.tokenId); + this.showTokenCreatedDialog(newToken.name, newToken.id); }, }); } else { this.actions.updateToken(this.tokenId(), tokenName, scopes).subscribe({ complete: () => { - this.toastService.showSuccess('settings.tokens.toastMessage.successEdit'); this.router.navigate(['settings/tokens']); + this.toastService.showSuccess('settings.tokens.toastMessage.successEdit'); }, }); } diff --git a/src/app/features/settings/tokens/components/token-created-dialog/token-created-dialog.component.ts b/src/app/features/settings/tokens/components/token-created-dialog/token-created-dialog.component.ts index 954116dae..e377692b3 100644 --- a/src/app/features/settings/tokens/components/token-created-dialog/token-created-dialog.component.ts +++ b/src/app/features/settings/tokens/components/token-created-dialog/token-created-dialog.component.ts @@ -26,8 +26,8 @@ import { CopyButtonComponent } from '@shared/components'; changeDetection: ChangeDetectionStrategy.OnPush, }) export class TokenCreatedDialogComponent { - protected readonly dialogRef = inject(DynamicDialogRef); - protected readonly config = inject(DynamicDialogConfig); + readonly dialogRef = inject(DynamicDialogRef); + readonly config = inject(DynamicDialogConfig); readonly tokenInput = viewChild>('tokenInput'); readonly tokenName = input(this.config.data?.tokenName ?? ''); diff --git a/src/app/features/settings/tokens/mappers/token.mapper.ts b/src/app/features/settings/tokens/mappers/token.mapper.ts index b3f0ae3ff..92451a3cf 100644 --- a/src/app/features/settings/tokens/mappers/token.mapper.ts +++ b/src/app/features/settings/tokens/mappers/token.mapper.ts @@ -1,4 +1,4 @@ -import { TokenCreateRequestJsonApi, TokenCreateResponseJsonApi, TokenGetResponseJsonApi, TokenModel } from '../models'; +import { TokenCreateRequestJsonApi, TokenGetResponseJsonApi, TokenModel } from '../models'; export class TokenMapper { static toRequest(name: string, scopes: string[]): TokenCreateRequestJsonApi { @@ -13,23 +13,11 @@ export class TokenMapper { }; } - static fromCreateResponse(response: TokenCreateResponseJsonApi): TokenModel { - return { - id: response.id, - name: response.attributes.name, - tokenId: response.attributes.token_id, - scopes: response.attributes.scopes.split(' '), - ownerId: response.attributes.owner, - }; - } - static fromGetResponse(response: TokenGetResponseJsonApi): TokenModel { return { id: response.id, name: response.attributes.name, - tokenId: response.id, - scopes: response.attributes.scopes.split(' '), - ownerId: response.attributes.owner, + scopes: response.embeds.scopes.data.map((item) => item.id), }; } } diff --git a/src/app/features/settings/tokens/models/add-edit-token.model.ts b/src/app/features/settings/tokens/models/add-edit-token.model.ts deleted file mode 100644 index f7cfdac4e..000000000 --- a/src/app/features/settings/tokens/models/add-edit-token.model.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface AddEditTokenModel { - name: string; - scopes: string[]; -} diff --git a/src/app/features/settings/tokens/models/scope-json-api.model.ts b/src/app/features/settings/tokens/models/scope-json-api.model.ts index 443b1a22f..8933a7ce3 100644 --- a/src/app/features/settings/tokens/models/scope-json-api.model.ts +++ b/src/app/features/settings/tokens/models/scope-json-api.model.ts @@ -4,7 +4,4 @@ export interface ScopeJsonApi { attributes: { description: string; }; - links: { - self: string; - }; } diff --git a/src/app/features/settings/tokens/models/token-json-api.model.ts b/src/app/features/settings/tokens/models/token-json-api.model.ts index 657116c8b..66bc0ac31 100644 --- a/src/app/features/settings/tokens/models/token-json-api.model.ts +++ b/src/app/features/settings/tokens/models/token-json-api.model.ts @@ -8,23 +8,22 @@ export interface TokenCreateRequestJsonApi { }; } -export interface TokenCreateResponseJsonApi { +export interface TokenGetResponseJsonApi { id: string; - type: 'tokens'; - attributes: { - name: string; - token_id: string; - scopes: string; - owner: string; + attributes: TokenAttributesJsonApi; + embeds: TokenEmbedsJsonApi; +} + +interface TokenAttributesJsonApi { + name: string; +} + +interface TokenEmbedsJsonApi { + scopes: { + data: TokenEmbedsDataItemJsonApi[]; }; } -export interface TokenGetResponseJsonApi { +interface TokenEmbedsDataItemJsonApi { id: string; - type: 'tokens'; - attributes: { - name: string; - scopes: string; - owner: string; - }; } diff --git a/src/app/features/settings/tokens/models/token.model.ts b/src/app/features/settings/tokens/models/token.model.ts index f4b5a3748..735b29bcd 100644 --- a/src/app/features/settings/tokens/models/token.model.ts +++ b/src/app/features/settings/tokens/models/token.model.ts @@ -1,7 +1,5 @@ export interface TokenModel { id: string; name: string; - tokenId: string; scopes: string[]; - ownerId: string; } diff --git a/src/app/features/settings/tokens/services/tokens.service.ts b/src/app/features/settings/tokens/services/tokens.service.ts index c29cb06f4..2735c5bad 100644 --- a/src/app/features/settings/tokens/services/tokens.service.ts +++ b/src/app/features/settings/tokens/services/tokens.service.ts @@ -7,7 +7,7 @@ import { JsonApiResponse } from '@osf/shared/models'; import { JsonApiService } from '@osf/shared/services'; import { ScopeMapper, TokenMapper } from '../mappers'; -import { ScopeJsonApi, ScopeModel, TokenCreateResponseJsonApi, TokenGetResponseJsonApi, TokenModel } from '../models'; +import { ScopeJsonApi, ScopeModel, TokenGetResponseJsonApi, TokenModel } from '../models'; import { environment } from 'src/environments/environment'; @@ -39,16 +39,16 @@ export class TokensService { const request = TokenMapper.toRequest(name, scopes); return this.jsonApiService - .post>(environment.apiUrl + '/tokens/', request) - .pipe(map((response) => TokenMapper.fromCreateResponse(response.data))); + .post>(environment.apiUrl + '/tokens/', request) + .pipe(map((response) => TokenMapper.fromGetResponse(response.data))); } updateToken(tokenId: string, name: string, scopes: string[]): Observable { const request = TokenMapper.toRequest(name, scopes); return this.jsonApiService - .patch(`${environment.apiUrl}/tokens/${tokenId}/`, request) - .pipe(map((response) => TokenMapper.fromCreateResponse(response))); + .patch(`${environment.apiUrl}/tokens/${tokenId}/`, request) + .pipe(map((response) => TokenMapper.fromGetResponse(response))); } deleteToken(tokenId: string): Observable { diff --git a/src/app/features/settings/tokens/store/tokens.models.ts b/src/app/features/settings/tokens/store/tokens.models.ts index 3f5a6a8b5..fcbd2c285 100644 --- a/src/app/features/settings/tokens/store/tokens.models.ts +++ b/src/app/features/settings/tokens/store/tokens.models.ts @@ -6,3 +6,16 @@ export interface TokensStateModel { scopes: AsyncStateModel; tokens: AsyncStateModel; } + +export const TOKENS_STATE_DEFAULTS: TokensStateModel = { + scopes: { + data: [], + isLoading: false, + error: null, + }, + tokens: { + data: [], + isLoading: false, + error: null, + }, +}; diff --git a/src/app/features/settings/tokens/store/tokens.state.ts b/src/app/features/settings/tokens/store/tokens.state.ts index a955fcb41..2230aab44 100644 --- a/src/app/features/settings/tokens/store/tokens.state.ts +++ b/src/app/features/settings/tokens/store/tokens.state.ts @@ -1,33 +1,24 @@ import { Action, State, StateContext } from '@ngxs/store'; -import { catchError, of, tap, throwError } from 'rxjs'; +import { catchError, of, tap } from 'rxjs'; import { inject, Injectable } from '@angular/core'; +import { handleSectionError } from '@osf/shared/helpers'; + import { TokenModel } from '../models'; import { TokensService } from '../services'; import { CreateToken, DeleteToken, GetScopes, GetTokenById, GetTokens, UpdateToken } from './tokens.actions'; -import { TokensStateModel } from './tokens.models'; +import { TOKENS_STATE_DEFAULTS, TokensStateModel } from './tokens.models'; @State({ name: 'tokens', - defaults: { - scopes: { - data: [], - isLoading: false, - error: null, - }, - tokens: { - data: [], - isLoading: false, - error: null, - }, - }, + defaults: TOKENS_STATE_DEFAULTS, }) @Injectable() export class TokensState { - tokensService = inject(TokensService); + private readonly tokensService = inject(TokensService); @Action(GetScopes) getScopes(ctx: StateContext) { @@ -39,7 +30,7 @@ export class TokensState { tap((scopes) => { ctx.patchState({ scopes: { data: scopes, isLoading: false, error: null } }); }), - catchError((error) => this.handleError(ctx, 'scopes', error)) + catchError((error) => handleSectionError(ctx, 'scopes', error)) ); } @@ -51,7 +42,7 @@ export class TokensState { tap((tokens) => { ctx.patchState({ tokens: { data: tokens, isLoading: false, error: null } }); }), - catchError((error) => this.handleError(ctx, 'tokens', error)) + catchError((error) => handleSectionError(ctx, 'tokens', error)) ); } @@ -71,7 +62,22 @@ export class TokensState { const updatedTokens = [...state.tokens.data, token]; ctx.patchState({ tokens: { data: updatedTokens, isLoading: false, error: null } }); }), - catchError((error) => this.handleError(ctx, 'tokens', error)) + catchError((error) => handleSectionError(ctx, 'tokens', error)) + ); + } + + @Action(CreateToken) + createToken(ctx: StateContext, action: CreateToken) { + const state = ctx.getState(); + ctx.patchState({ tokens: { ...state.tokens, isLoading: true, error: null } }); + + return this.tokensService.createToken(action.name, action.scopes).pipe( + tap((newToken) => { + const state = ctx.getState(); + const updatedTokens = [newToken, ...state.tokens.data]; + ctx.patchState({ tokens: { data: updatedTokens, isLoading: false, error: null } }); + }), + catchError((error) => handleSectionError(ctx, 'tokens', error)) ); } @@ -88,7 +94,7 @@ export class TokensState { ); ctx.patchState({ tokens: { data: updatedTokens, isLoading: false, error: null } }); }), - catchError((error) => this.handleError(ctx, 'tokens', error)) + catchError((error) => handleSectionError(ctx, 'tokens', error)) ); } @@ -103,36 +109,7 @@ export class TokensState { const updatedTokens = state.tokens.data.filter((token: TokenModel) => token.id !== action.tokenId); ctx.patchState({ tokens: { data: updatedTokens, isLoading: false, error: null } }); }), - catchError((error) => this.handleError(ctx, 'tokens', error)) + catchError((error) => handleSectionError(ctx, 'tokens', error)) ); } - - @Action(CreateToken) - createToken(ctx: StateContext, action: CreateToken) { - const state = ctx.getState(); - ctx.patchState({ tokens: { ...state.tokens, isLoading: true, error: null } }); - - return this.tokensService.createToken(action.name, action.scopes).pipe( - tap((newToken) => { - const state = ctx.getState(); - const updatedTokens = [newToken, ...state.tokens.data]; - ctx.patchState({ tokens: { data: updatedTokens, isLoading: false, error: null } }); - - return newToken; - }), - catchError((error) => this.handleError(ctx, 'tokens', error)) - ); - } - - private handleError(ctx: StateContext, key: keyof TokensStateModel, error: Error) { - const state = ctx.getState(); - ctx.patchState({ - [key]: { - ...state[key], - isLoading: false, - error: error.message, - }, - }); - return throwError(() => error); - } } diff --git a/src/app/features/settings/tokens/tokens.component.ts b/src/app/features/settings/tokens/tokens.component.ts index f2057e31d..194bfd636 100644 --- a/src/app/features/settings/tokens/tokens.component.ts +++ b/src/app/features/settings/tokens/tokens.component.ts @@ -30,11 +30,10 @@ export class TokensComponent implements OnInit { private readonly translateService = inject(TranslateService); private readonly actions = createDispatchMap({ getScopes: GetScopes }); - protected readonly isSmall = toSignal(inject(IS_SMALL)); - protected readonly isBaseRoute = toSignal( - this.router.events.pipe(map(() => this.router.url === '/settings/tokens')), - { initialValue: this.router.url === '/settings/tokens' } - ); + readonly isSmall = toSignal(inject(IS_SMALL)); + readonly isBaseRoute = toSignal(this.router.events.pipe(map(() => this.router.url === '/settings/tokens')), { + initialValue: this.router.url === '/settings/tokens', + }); ngOnInit() { this.actions.getScopes(); From 35821de0208e94d9b874b35dc729f58e33d15a15 Mon Sep 17 00:00:00 2001 From: nsemets Date: Mon, 25 Aug 2025 17:36:20 +0300 Subject: [PATCH 13/16] fix(project-settings): fixed region and affiliations --- .../project/settings/components/index.ts | 1 + ...ettings-project-affiliation.component.html | 40 +++++ ...ettings-project-affiliation.component.scss | 0 ...ings-project-affiliation.component.spec.ts | 22 +++ .../settings-project-affiliation.component.ts | 25 ++++ .../settings-project-form-card.component.ts | 7 +- .../settings/mappers/settings.mapper.ts | 24 ++- .../features/project/settings/models/index.ts | 2 + .../settings/models/node-details.model.ts | 10 ++ .../models/project-details-json-api.model.ts | 19 +++ .../settings/services/settings.service.ts | 37 ++++- .../project/settings/settings.component.html | 140 +++++++----------- .../project/settings/settings.component.ts | 69 +++++---- .../settings/store/settings.actions.ts | 9 ++ .../project/settings/store/settings.model.ts | 8 +- .../settings/store/settings.selectors.ts | 5 + .../project/settings/store/settings.state.ts | 29 ++-- .../models/{ => common}/id-name.model.ts | 0 src/app/shared/models/common/id-type.model.ts | 4 + src/app/shared/models/common/index.ts | 2 + .../shared/models/common/json-api.model.ts | 7 +- src/app/shared/models/index.ts | 1 - .../models/nodes/nodes-json-api.model.ts | 102 ++++++------- .../shared/services/my-resources.service.ts | 11 -- src/assets/i18n/en.json | 6 + 25 files changed, 376 insertions(+), 204 deletions(-) create mode 100644 src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.html create mode 100644 src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.scss create mode 100644 src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.spec.ts create mode 100644 src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.ts create mode 100644 src/app/features/project/settings/models/node-details.model.ts create mode 100644 src/app/features/project/settings/models/project-details-json-api.model.ts rename src/app/shared/models/{ => common}/id-name.model.ts (100%) create mode 100644 src/app/shared/models/common/id-type.model.ts diff --git a/src/app/features/project/settings/components/index.ts b/src/app/features/project/settings/components/index.ts index d38eed9dd..773124c7f 100644 --- a/src/app/features/project/settings/components/index.ts +++ b/src/app/features/project/settings/components/index.ts @@ -2,6 +2,7 @@ export { ProjectDetailSettingAccordionComponent } from './project-detail-setting export { ProjectSettingNotificationsComponent } from './project-setting-notifications/project-setting-notifications.component'; export { SettingsAccessRequestsCardComponent } from './settings-access-requests-card/settings-access-requests-card.component'; export { SettingsCommentingCardComponent } from './settings-commenting-card/settings-commenting-card.component'; +export { SettingsProjectAffiliationComponent } from './settings-project-affiliation/settings-project-affiliation.component'; export { SettingsProjectFormCardComponent } from './settings-project-form-card/settings-project-form-card.component'; export { SettingsRedirectLinkComponent } from './settings-redirect-link/settings-redirect-link.component'; export { SettingsStorageLocationCardComponent } from './settings-storage-location-card/settings-storage-location-card.component'; diff --git a/src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.html b/src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.html new file mode 100644 index 000000000..af179c1e5 --- /dev/null +++ b/src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.html @@ -0,0 +1,40 @@ + +

{{ 'myProjects.settings.projectAffiliation' | translate }}

+ +

{{ 'myProjects.settings.projectsCanBeAffiliated' | translate }}

+ +
    +
  1. {{ 'myProjects.settings.institutionalLogos' | translate }}
  2. +
  3. {{ 'myProjects.settings.publicProjectsToBeDiscoverable' | translate }}
  4. +
  5. {{ 'myProjects.settings.singleSignInToTHeOSF' | translate }}
  6. +
  7. + + {{ 'myProjects.settings.faq' | translate }} + +
  8. +
+ + @if (affiliations().length > 0) { +
+ @for (affiliation of affiliations(); track $index) { +
+
+ Affiliation logo + +

{{ affiliation.name }}

+
+ + +
+ } +
+ } + diff --git a/src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.scss b/src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.spec.ts b/src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.spec.ts new file mode 100644 index 000000000..685bcc895 --- /dev/null +++ b/src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SettingsProjectAffiliationComponent } from './settings-project-affiliation.component'; + +describe('SettingsProjectAffiliationComponent', () => { + let component: SettingsProjectAffiliationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SettingsProjectAffiliationComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(SettingsProjectAffiliationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.ts b/src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.ts new file mode 100644 index 000000000..693cadb10 --- /dev/null +++ b/src/app/features/project/settings/components/settings-project-affiliation/settings-project-affiliation.component.ts @@ -0,0 +1,25 @@ +import { TranslatePipe } from '@ngx-translate/core'; + +import { Button } from 'primeng/button'; +import { Card } from 'primeng/card'; + +import { NgOptimizedImage } from '@angular/common'; +import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'; + +import { Institution } from '@osf/shared/models'; + +@Component({ + selector: 'osf-settings-project-affiliation', + imports: [Card, Button, NgOptimizedImage, TranslatePipe], + templateUrl: './settings-project-affiliation.component.html', + styleUrl: './settings-project-affiliation.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SettingsProjectAffiliationComponent { + affiliations = input([]); + removed = output(); + + removeAffiliation(affiliation: Institution) { + this.removed.emit(affiliation); + } +} diff --git a/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.ts b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.ts index cba65b3bf..76923ed5e 100644 --- a/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.ts +++ b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.ts @@ -9,9 +9,8 @@ import { ChangeDetectionStrategy, Component, input, output } from '@angular/core import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ProjectFormControls } from '@osf/shared/enums'; -import { NodeData } from '@osf/shared/models'; -import { ProjectDetailsModel } from '../../models'; +import { NodeDetailsModel, ProjectDetailsModel } from '../../models'; @Component({ selector: 'osf-settings-project-form-card', @@ -21,7 +20,7 @@ import { ProjectDetailsModel } from '../../models'; changeDetection: ChangeDetectionStrategy.OnPush, }) export class SettingsProjectFormCardComponent { - projectDetails = input.required(); + projectDetails = input.required(); formGroup = input.required(); submitForm = output(); deleteProject = output(); @@ -29,7 +28,7 @@ export class SettingsProjectFormCardComponent { protected readonly ProjectFormControls = ProjectFormControls; resetForm(): void { - this.formGroup().patchValue({ ...this.projectDetails().attributes }); + this.formGroup().patchValue({ ...this.projectDetails() }); } submit() { diff --git a/src/app/features/project/settings/mappers/settings.mapper.ts b/src/app/features/project/settings/mappers/settings.mapper.ts index 396e28617..c9669145a 100644 --- a/src/app/features/project/settings/mappers/settings.mapper.ts +++ b/src/app/features/project/settings/mappers/settings.mapper.ts @@ -1,4 +1,12 @@ -import { ProjectSettingsData, ProjectSettingsModel, ProjectSettingsResponseModel } from '../models'; +import { InstitutionsMapper } from '@osf/shared/mappers'; + +import { + NodeDataJsonApi, + NodeDetailsModel, + ProjectSettingsData, + ProjectSettingsModel, + ProjectSettingsResponseModel, +} from '../models'; export class SettingsMapper { static fromResponse( @@ -20,4 +28,18 @@ export class SettingsMapper { }, } as ProjectSettingsModel; } + + static fromNodeResponse(data: NodeDataJsonApi): NodeDetailsModel { + return { + id: data.id, + title: data.attributes.title, + description: data.attributes.description, + region: { + id: data.embeds.region.data.id, + name: data.embeds.region.data.attributes.name, + }, + affiliatedInstitutions: InstitutionsMapper.fromInstitutionsResponse(data.embeds.affiliated_institutions), + lastFetched: Date.now(), + }; + } } diff --git a/src/app/features/project/settings/models/index.ts b/src/app/features/project/settings/models/index.ts index 57b6ecf76..7f76959b7 100644 --- a/src/app/features/project/settings/models/index.ts +++ b/src/app/features/project/settings/models/index.ts @@ -1,4 +1,6 @@ +export * from './node-details.model'; export * from './project-details.model'; +export * from './project-details-json-api.model'; export * from './project-settings.model'; export * from './project-settings-response.model'; export * from './redirect-url-data.model'; diff --git a/src/app/features/project/settings/models/node-details.model.ts b/src/app/features/project/settings/models/node-details.model.ts new file mode 100644 index 000000000..73feef9b3 --- /dev/null +++ b/src/app/features/project/settings/models/node-details.model.ts @@ -0,0 +1,10 @@ +import { IdName, Institution } from '@osf/shared/models'; + +export interface NodeDetailsModel { + id: string; + title: string; + description: string; + region: IdName; + affiliatedInstitutions: Institution[]; + lastFetched: number; +} diff --git a/src/app/features/project/settings/models/project-details-json-api.model.ts b/src/app/features/project/settings/models/project-details-json-api.model.ts new file mode 100644 index 000000000..bbfff660f --- /dev/null +++ b/src/app/features/project/settings/models/project-details-json-api.model.ts @@ -0,0 +1,19 @@ +import { InstitutionsJsonApiResponse, NodeData, ResponseDataJsonApi } from '@osf/shared/models'; + +export type NodeResponseJsonApi = ResponseDataJsonApi; + +export interface NodeDataJsonApi extends NodeData { + embeds: NodeEmbedsJsonApi; +} + +interface NodeEmbedsJsonApi { + region: { + data: { + id: string; + attributes: { + name: string; + }; + }; + }; + affiliated_institutions: InstitutionsJsonApiResponse; +} diff --git a/src/app/features/project/settings/services/settings.service.ts b/src/app/features/project/settings/services/settings.service.ts index 07c040ebb..02f549fa4 100644 --- a/src/app/features/project/settings/services/settings.service.ts +++ b/src/app/features/project/settings/services/settings.service.ts @@ -2,10 +2,17 @@ import { map, Observable } from 'rxjs'; import { inject, Injectable } from '@angular/core'; +import { UpdateNodeRequestModel } from '@osf/shared/models'; import { JsonApiService } from '@shared/services'; import { SettingsMapper } from '../mappers'; -import { ProjectSettingsData, ProjectSettingsModel, ProjectSettingsResponseModel } from '../models'; +import { + NodeDetailsModel, + NodeResponseJsonApi, + ProjectSettingsData, + ProjectSettingsModel, + ProjectSettingsResponseModel, +} from '../models'; import { environment } from 'src/environments/environment'; @@ -29,7 +36,35 @@ export class SettingsService { .pipe(map((response) => SettingsMapper.fromResponse(response, model.id))); } + getProjectById(projectId: string): Observable { + const params = { + 'embed[]': ['affiliated_institutions', 'region'], + }; + return this.jsonApiService + .get(`${this.baseUrl}/nodes/${projectId}/`, params) + .pipe(map((response) => SettingsMapper.fromNodeResponse(response.data))); + } + + updateProjectById(model: UpdateNodeRequestModel): Observable { + return this.jsonApiService + .patch(`${this.baseUrl}/nodes/${model?.data?.id}/`, model) + .pipe(map((response) => SettingsMapper.fromNodeResponse(response.data))); + } + deleteProject(projectId: string): Observable { return this.jsonApiService.delete(`${this.baseUrl}/nodes/${projectId}/`); } + + deleteInstitution(institutionId: string, projectId: string): Observable { + const data = { + data: [ + { + type: 'nodes', + id: projectId, + }, + ], + }; + + return this.jsonApiService.delete(`${this.baseUrl}/institutions/${institutionId}/relationships/nodes/`, data); + } } diff --git a/src/app/features/project/settings/settings.component.html b/src/app/features/project/settings/settings.component.html index bf82bc5dc..eb651eaad 100644 --- a/src/app/features/project/settings/settings.component.html +++ b/src/app/features/project/settings/settings.component.html @@ -1,87 +1,61 @@
-
- - - - - - - - - - - - - - - - - -

{{ 'myProjects.settings.projectAffiliation' | translate }}

- -

{{ 'myProjects.settings.projectsCanBeAffiliated' | translate }}

- -
    -
  1. {{ 'myProjects.settings.institutionalLogos' | translate }}
  2. -
  3. {{ 'myProjects.settings.publicProjectsToBeDiscoverable' | translate }}
  4. -
  5. {{ 'myProjects.settings.singleSignInToTHeOSF' | translate }}
  6. -
  7. - - {{ 'myProjects.settings.faq' | translate }} - -
  8. -
- - @if (affiliations.length > 0) { -
- @for (affiliation of affiliations; track $index) { -
-
- cos-shield - -

{{ affiliation }}

-
- - -
- } -
- } -
-
+ @if (areProjectDetailsLoading()) { + + } @else { +
+ + + + + + + + + + + + + + + + + +
+ }
diff --git a/src/app/features/project/settings/settings.component.ts b/src/app/features/project/settings/settings.component.ts index ce5691c53..af201d2ca 100644 --- a/src/app/features/project/settings/settings.component.ts +++ b/src/app/features/project/settings/settings.component.ts @@ -2,12 +2,8 @@ import { createDispatchMap, select } from '@ngxs/store'; import { TranslatePipe } from '@ngx-translate/core'; -import { Button } from 'primeng/button'; -import { Card } from 'primeng/card'; - import { map, of } from 'rxjs'; -import { NgOptimizedImage } from '@angular/common'; import { ChangeDetectionStrategy, Component, effect, inject, OnInit, signal } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; @@ -18,10 +14,10 @@ import { NotificationSubscriptionSelectors, UpdateNotificationSubscriptionForNodeId, } from '@osf/features/settings/notifications/store'; -import { SubHeaderComponent } from '@osf/shared/components'; +import { LoadingSpinnerComponent, SubHeaderComponent } from '@osf/shared/components'; import { ProjectFormControls, ResourceType, SubscriptionEvent, SubscriptionFrequency } from '@osf/shared/enums'; import { CustomValidators } from '@osf/shared/helpers'; -import { UpdateNodeRequestModel, ViewOnlyLinkModel } from '@osf/shared/models'; +import { Institution, UpdateNodeRequestModel, ViewOnlyLinkModel } from '@osf/shared/models'; import { CustomConfirmationService, LoaderService, ToastService } from '@osf/shared/services'; import { DeleteViewOnlyLink, FetchViewOnlyLinks, ViewOnlyLinkSelectors } from '@osf/shared/stores'; @@ -29,14 +25,16 @@ import { ProjectSettingNotificationsComponent, SettingsAccessRequestsCardComponent, SettingsCommentingCardComponent, + SettingsProjectAffiliationComponent, SettingsProjectFormCardComponent, SettingsRedirectLinkComponent, SettingsStorageLocationCardComponent, SettingsViewOnlyLinksCardComponent, SettingsWikiCardComponent, } from './components'; -import { ProjectDetailsModel, ProjectSettingsAttributes, ProjectSettingsData } from './models'; +import { ProjectDetailsModel, ProjectSettingsAttributes, ProjectSettingsData, RedirectUrlDataModel } from './models'; import { + DeleteInstitution, DeleteProject, GetProjectDetails, GetProjectSettings, @@ -52,9 +50,6 @@ import { SubHeaderComponent, FormsModule, ReactiveFormsModule, - Card, - Button, - NgOptimizedImage, SettingsProjectFormCardComponent, SettingsStorageLocationCardComponent, SettingsViewOnlyLinksCardComponent, @@ -62,7 +57,9 @@ import { SettingsWikiCardComponent, SettingsCommentingCardComponent, SettingsRedirectLinkComponent, + SettingsProjectAffiliationComponent, ProjectSettingNotificationsComponent, + LoadingSpinnerComponent, ], templateUrl: './settings.component.html', styleUrl: './settings.component.scss', @@ -77,13 +74,14 @@ export class SettingsComponent implements OnInit { readonly projectId = toSignal(this.route.parent?.params.pipe(map((params) => params['id'])) ?? of(undefined)); - protected settings = select(SettingsSelectors.getSettings); - protected notifications = select(NotificationSubscriptionSelectors.getNotificationSubscriptionsByNodeId); - protected projectDetails = select(SettingsSelectors.getProjectDetails); - protected viewOnlyLinks = select(ViewOnlyLinkSelectors.getViewOnlyLinks); - protected isViewOnlyLinksLoading = select(ViewOnlyLinkSelectors.isViewOnlyLinksLoading); + settings = select(SettingsSelectors.getSettings); + notifications = select(NotificationSubscriptionSelectors.getNotificationSubscriptionsByNodeId); + projectDetails = select(SettingsSelectors.getProjectDetails); + areProjectDetailsLoading = select(SettingsSelectors.areProjectDetailsLoading); + viewOnlyLinks = select(ViewOnlyLinkSelectors.getViewOnlyLinks); + isViewOnlyLinksLoading = select(ViewOnlyLinkSelectors.isViewOnlyLinksLoading); - protected actions = createDispatchMap({ + actions = createDispatchMap({ getSettings: GetProjectSettings, getNotifications: GetNotificationSubscriptionsByNodeId, getProjectDetails: GetProjectDetails, @@ -93,6 +91,7 @@ export class SettingsComponent implements OnInit { updateNotificationSubscriptionForNodeId: UpdateNotificationSubscriptionForNodeId, deleteViewOnlyLink: DeleteViewOnlyLink, deleteProject: DeleteProject, + deleteInstitution: DeleteInstitution, }); projectForm = new FormGroup({ @@ -100,15 +99,13 @@ export class SettingsComponent implements OnInit { [ProjectFormControls.Description]: new FormControl(''), }); - redirectUrlData = signal<{ url: string; label: string }>({ url: '', label: '' }); + redirectUrlData = signal({ url: '', label: '' }); accessRequest = signal(false); wikiEnabled = signal(false); anyoneCanEditWiki = signal(false); anyoneCanComment = signal(false); title = signal(''); - affiliations = []; - constructor() { this.setupEffects(); } @@ -124,7 +121,7 @@ export class SettingsComponent implements OnInit { } submitForm({ title, description }: ProjectDetailsModel): void { - const current = this.projectDetails().attributes; + const current = this.projectDetails(); if (title === current.title && description === current.description) return; @@ -164,7 +161,7 @@ export class SettingsComponent implements OnInit { this.syncSettingsChanges('anyone_can_comment', newValue); } - onRedirectUrlDataRequestChange(data: { url: string; label: string }): void { + onRedirectUrlDataRequestChange(data: RedirectUrlDataModel): void { this.redirectUrlData.set(data); this.syncSettingsChanges('redirectUrl', data); } @@ -197,7 +194,7 @@ export class SettingsComponent implements OnInit { deleteProject(): void { this.customConfirmationService.confirmDelete({ headerKey: 'project.deleteProject.title', - messageParams: { name: this.projectDetails().attributes.title }, + messageParams: { name: this.projectDetails().title }, messageKey: 'project.deleteProject.message', onConfirm: () => { this.loaderService.show(); @@ -210,7 +207,23 @@ export class SettingsComponent implements OnInit { }); } - private syncSettingsChanges(changedField: string, value: boolean | { url: string; label: string }): void { + removeAffiliation(affiliation: Institution): void { + this.customConfirmationService.confirmDelete({ + headerKey: 'project.deleteInstitution.title', + messageParams: { name: affiliation.name }, + messageKey: 'project.deleteInstitution.message', + onConfirm: () => { + this.loaderService.show(); + this.actions.deleteInstitution(affiliation.id, this.projectId()).subscribe(() => { + this.loaderService.hide(); + this.toastService.showSuccess('project.deleteInstitution.success'); + this.actions.getProjectDetails(this.projectId()); + }); + }, + }); + } + + private syncSettingsChanges(changedField: string, value: boolean | RedirectUrlDataModel): void { const payload: Partial = {}; switch (changedField) { @@ -262,12 +275,14 @@ export class SettingsComponent implements OnInit { effect(() => { const project = this.projectDetails(); - if (project?.attributes) { + + if (project) { this.projectForm.patchValue({ - [ProjectFormControls.Title]: project.attributes.title, - [ProjectFormControls.Description]: project.attributes.description, + [ProjectFormControls.Title]: project.title, + [ProjectFormControls.Description]: project.description, }); - this.title.set(project.attributes.title); + + this.title.set(project.title); } }); } diff --git a/src/app/features/project/settings/store/settings.actions.ts b/src/app/features/project/settings/store/settings.actions.ts index a8749e66c..cb30bbd48 100644 --- a/src/app/features/project/settings/store/settings.actions.ts +++ b/src/app/features/project/settings/store/settings.actions.ts @@ -31,3 +31,12 @@ export class DeleteProject { constructor(public projectId: string) {} } + +export class DeleteInstitution { + static readonly type = '[Settings] Delete Institution'; + + constructor( + public institutionId: string, + public projectId: string + ) {} +} diff --git a/src/app/features/project/settings/store/settings.model.ts b/src/app/features/project/settings/store/settings.model.ts index 8137b3961..c26856751 100644 --- a/src/app/features/project/settings/store/settings.model.ts +++ b/src/app/features/project/settings/store/settings.model.ts @@ -1,10 +1,10 @@ -import { AsyncStateModel, NodeData } from '@osf/shared/models'; +import { AsyncStateModel } from '@osf/shared/models'; -import { ProjectSettingsModel } from '../models'; +import { NodeDetailsModel, ProjectSettingsModel } from '../models'; export interface SettingsStateModel { settings: AsyncStateModel; - projectDetails: AsyncStateModel; + projectDetails: AsyncStateModel; } export const SETTINGS_STATE_DEFAULTS: SettingsStateModel = { @@ -14,7 +14,7 @@ export const SETTINGS_STATE_DEFAULTS: SettingsStateModel = { error: null, }, projectDetails: { - data: {} as NodeData, + data: {} as NodeDetailsModel, isLoading: false, error: null, }, diff --git a/src/app/features/project/settings/store/settings.selectors.ts b/src/app/features/project/settings/store/settings.selectors.ts index de6a8ec5e..aef9cbb8e 100644 --- a/src/app/features/project/settings/store/settings.selectors.ts +++ b/src/app/features/project/settings/store/settings.selectors.ts @@ -13,4 +13,9 @@ export class SettingsSelectors { static getProjectDetails(state: SettingsStateModel) { return state.projectDetails.data; } + + @Selector([SettingsState]) + static areProjectDetailsLoading(state: SettingsStateModel) { + return state.projectDetails.isLoading; + } } diff --git a/src/app/features/project/settings/store/settings.state.ts b/src/app/features/project/settings/store/settings.state.ts index 218738d60..b57bd699a 100644 --- a/src/app/features/project/settings/store/settings.state.ts +++ b/src/app/features/project/settings/store/settings.state.ts @@ -1,17 +1,16 @@ import { Action, State, StateContext } from '@ngxs/store'; -import { map, of } from 'rxjs'; +import { of } from 'rxjs'; import { catchError, tap } from 'rxjs/operators'; import { inject, Injectable } from '@angular/core'; import { handleSectionError } from '@osf/shared/helpers'; -import { NodeData } from '@osf/shared/models'; -import { MyResourcesService } from '@osf/shared/services'; import { SettingsService } from '../services'; import { + DeleteInstitution, DeleteProject, GetProjectDetails, GetProjectSettings, @@ -27,8 +26,6 @@ import { SETTINGS_STATE_DEFAULTS, SettingsStateModel } from './settings.model'; @Injectable() export class SettingsState { private readonly settingsService = inject(SettingsService); - private readonly myProjectService = inject(MyResourcesService); - private readonly REFRESH_INTERVAL = 5 * 60 * 1000; private shouldRefresh(lastFetched?: number): boolean { @@ -70,23 +67,10 @@ export class SettingsState { @Action(GetProjectDetails) getProjectDetails(ctx: StateContext, action: GetProjectDetails) { const state = ctx.getState(); - const cached = state.projectDetails.data; - const shouldRefresh = this.shouldRefresh(cached.lastFetched); - - if (cached.id === action.projectId && !shouldRefresh) { - return of(cached).pipe( - tap(() => - ctx.patchState({ - projectDetails: { ...state.projectDetails, isLoading: false, error: null }, - }) - ) - ); - } ctx.patchState({ projectDetails: { ...state.projectDetails, isLoading: true, error: null } }); - return this.myProjectService.getProjectById(action.projectId).pipe( - map((response) => response?.data as NodeData), + return this.settingsService.getProjectById(action.projectId).pipe( tap((details) => { const updatedDetails = { ...details, @@ -107,7 +91,7 @@ export class SettingsState { @Action(UpdateProjectDetails) updateProjectDetails(ctx: StateContext, action: UpdateProjectDetails) { - return this.myProjectService.updateProjectById(action.payload).pipe( + return this.settingsService.updateProjectById(action.payload).pipe( tap((updatedProject) => { ctx.patchState({ projectDetails: { @@ -156,4 +140,9 @@ export class SettingsState { deleteProject(ctx: StateContext, action: DeleteProject) { return this.settingsService.deleteProject(action.projectId); } + + @Action(DeleteInstitution) + deleteInstitution(ctx: StateContext, action: DeleteInstitution) { + return this.settingsService.deleteInstitution(action.institutionId, action.projectId); + } } diff --git a/src/app/shared/models/id-name.model.ts b/src/app/shared/models/common/id-name.model.ts similarity index 100% rename from src/app/shared/models/id-name.model.ts rename to src/app/shared/models/common/id-name.model.ts diff --git a/src/app/shared/models/common/id-type.model.ts b/src/app/shared/models/common/id-type.model.ts new file mode 100644 index 000000000..c01fe4dc5 --- /dev/null +++ b/src/app/shared/models/common/id-type.model.ts @@ -0,0 +1,4 @@ +export interface IdTypeModel { + id: string; + type: string; +} diff --git a/src/app/shared/models/common/index.ts b/src/app/shared/models/common/index.ts index 5595a8933..3a7369809 100644 --- a/src/app/shared/models/common/index.ts +++ b/src/app/shared/models/common/index.ts @@ -1 +1,3 @@ +export * from './id-name.model'; +export * from './id-type.model'; export * from './json-api.model'; diff --git a/src/app/shared/models/common/json-api.model.ts b/src/app/shared/models/common/json-api.model.ts index f1a7ff950..6a6b8fe01 100644 --- a/src/app/shared/models/common/json-api.model.ts +++ b/src/app/shared/models/common/json-api.model.ts @@ -13,6 +13,11 @@ export interface ResponseJsonApi { meta: MetaJsonApi; } +export interface ResponseDataJsonApi { + data: Data; + meta: MetaJsonApi; +} + export interface ApiData { id: string; attributes: Attributes; @@ -25,7 +30,7 @@ export interface ApiData { export interface MetaJsonApi { total: number; per_page: number; - version?: string; + version: string; } export interface PaginationLinksJsonApi { diff --git a/src/app/shared/models/index.ts b/src/app/shared/models/index.ts index 74b2fb24e..432863d6e 100644 --- a/src/app/shared/models/index.ts +++ b/src/app/shared/models/index.ts @@ -17,7 +17,6 @@ export * from './filter-labels.model'; export * from './filters'; export * from './google-drive-folder.model'; export * from './guid-response-json-api.model'; -export * from './id-name.model'; export * from './institutions'; export * from './language-code.model'; export * from './license'; diff --git a/src/app/shared/models/nodes/nodes-json-api.model.ts b/src/app/shared/models/nodes/nodes-json-api.model.ts index e760308f5..7a87a5b8c 100644 --- a/src/app/shared/models/nodes/nodes-json-api.model.ts +++ b/src/app/shared/models/nodes/nodes-json-api.model.ts @@ -1,4 +1,48 @@ -export interface NodeAttributes { +export interface NodeData { + id: string; + type: 'nodes'; + attributes: NodeAttributes; + relationships: NodeRelationships; + links: NodeLinks; + lastFetched?: number; +} + +export interface NodeResponseModel { + data: NodeData; + meta: NodeMeta; +} + +export interface UpdateNodeRequestModel { + data: UpdateNodeData; +} + +export interface CreateProjectPayloadJsoApi { + data: { + type: 'nodes'; + attributes: { + title: string; + description?: string; + category: 'project'; + template_from?: string; + }; + relationships: { + region: { + data: { + type: 'regions'; + id: string; + }; + }; + affiliated_institutions?: { + data: { + type: 'institutions'; + id: string; + }[]; + }; + }; + }; +} + +interface NodeAttributes { title: string; description: string; category: string; @@ -21,7 +65,7 @@ export interface NodeAttributes { subjects: unknown[]; } -export interface RelationshipLinks { +interface RelationshipLinks { related: { href: string; meta: Record; @@ -32,7 +76,7 @@ export interface RelationshipLinks { }; } -export interface NodeRelationships { +interface NodeRelationships { children: { links: RelationshipLinks }; comments: { links: RelationshipLinks }; contributors: { links: RelationshipLinks }; @@ -82,69 +126,25 @@ export interface NodeRelationships { subjects_acceptable: { links: RelationshipLinks }; } -export interface NodeLinks { +interface NodeLinks { html: string; self: string; iri: string; } -export interface NodeData { - id: string; - type: 'nodes'; - attributes: NodeAttributes; - relationships: NodeRelationships; - links: NodeLinks; - lastFetched?: number; -} - -export interface NodeMeta { +interface NodeMeta { version: string; } -export interface NodeResponseModel { - data: NodeData; - meta: NodeMeta; -} - -export interface UpdateNodeAttributes { +interface UpdateNodeAttributes { description?: string; tags?: string[]; public?: boolean; title?: string; } -export interface UpdateNodeData { +interface UpdateNodeData { type: 'nodes'; id: string; attributes: UpdateNodeAttributes; } - -export interface UpdateNodeRequestModel { - data: UpdateNodeData; -} - -export interface CreateProjectPayloadJsoApi { - data: { - type: 'nodes'; - attributes: { - title: string; - description?: string; - category: 'project'; - template_from?: string; - }; - relationships: { - region: { - data: { - type: 'regions'; - id: string; - }; - }; - affiliated_institutions?: { - data: { - type: 'institutions'; - id: string; - }[]; - }; - }; - }; -} diff --git a/src/app/shared/services/my-resources.service.ts b/src/app/shared/services/my-resources.service.ts index c63d1f178..d7cb7b931 100644 --- a/src/app/shared/services/my-resources.service.ts +++ b/src/app/shared/services/my-resources.service.ts @@ -14,9 +14,6 @@ import { MyResourcesItemResponseJsonApi, MyResourcesResponseJsonApi, MyResourcesSearchFilters, - NodeData, - NodeResponseModel, - UpdateNodeRequestModel, } from '@shared/models'; import { JsonApiService } from '@shared/services'; @@ -211,12 +208,4 @@ export class MyResourcesService { .post>(`${environment.apiUrl}/nodes/`, payload, params) .pipe(map((response) => MyResourcesMapper.fromResponse(response.data))); } - - getProjectById(projectId: string): Observable { - return this.jsonApiService.get(`${this.apiUrl}/nodes/${projectId}/`); - } - - updateProjectById(model: UpdateNodeRequestModel): Observable { - return this.jsonApiService.patch(`${this.apiUrl}/nodes/${model?.data?.id}/`, model); - } } diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index c217e0403..312499205 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -417,6 +417,7 @@ "whoCanEdit": "Who can edit:", "url": "url", "label": "label", + "storageLocationMessage": "Storage location cannot be changed after project is created.", "redirectUrlPlaceholder": "Send people who visit your OSF project page to this link instead", "redirectLabelPlaceholder": "Optional", "invalidUrl": "Please enter a valid URL, such as: https://example.com", @@ -918,6 +919,11 @@ "title": "Delete project", "message": "Are you sure you want to delete {{name}} project?", "success": "Project has been successfully deleted." + }, + "deleteInstitution": { + "title": "Delete institution", + "message": "Are you sure you want to delete {{name}} from this project?", + "success": "Institution has been successfully deleted." } }, "files": { From ed5829860d15856dcb264cc6253953e2e4e9465d Mon Sep 17 00:00:00 2001 From: nsemets Date: Mon, 25 Aug 2025 19:15:29 +0300 Subject: [PATCH 14/16] fix(settings): fixed redirect url --- .../settings-project-form-card.component.html | 21 ++-- .../settings-project-form-card.component.ts | 50 +++++++-- .../settings-redirect-link.component.html | 84 +++++--------- .../settings-redirect-link.component.ts | 104 ++++++++++++------ .../features/project/settings/models/index.ts | 3 +- .../models/redirect-link-data.model.ts | 5 + .../models/redirect-link-form.model.ts | 7 ++ .../models/redirect-url-data.model.ts | 4 - .../project/settings/settings.component.html | 1 - .../project/settings/settings.component.ts | 31 ++---- src/assets/i18n/en.json | 5 +- 11 files changed, 172 insertions(+), 143 deletions(-) create mode 100644 src/app/features/project/settings/models/redirect-link-data.model.ts create mode 100644 src/app/features/project/settings/models/redirect-link-form.model.ts delete mode 100644 src/app/features/project/settings/models/redirect-url-data.model.ts diff --git a/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.html b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.html index 11332963b..389147fb2 100644 --- a/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.html +++ b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.html @@ -1,25 +1,20 @@

{{ 'myProjects.settings.project' | translate }}

-
+
- - +
- +
@@ -34,7 +29,7 @@

{{ 'myProjects.settings.project' | translate }}

type="submit" class="w-10rem btn-full-width bg-primary-blue-second" [label]="'myProjects.settings.saveChanges' | translate" - [disabled]="formGroup().invalid" + [disabled]="projectForm.invalid" >
diff --git a/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.ts b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.ts index 76923ed5e..100387ec1 100644 --- a/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.ts +++ b/src/app/features/project/settings/components/settings-project-form-card/settings-project-form-card.component.ts @@ -2,40 +2,72 @@ import { TranslatePipe } from '@ngx-translate/core'; import { Button } from 'primeng/button'; import { Card } from 'primeng/card'; -import { InputText } from 'primeng/inputtext'; import { Textarea } from 'primeng/textarea'; -import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'; -import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ChangeDetectionStrategy, Component, effect, input, output } from '@angular/core'; +import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { TextInputComponent } from '@osf/shared/components'; +import { InputLimits } from '@osf/shared/constants'; import { ProjectFormControls } from '@osf/shared/enums'; +import { CustomValidators } from '@osf/shared/helpers'; import { NodeDetailsModel, ProjectDetailsModel } from '../../models'; @Component({ selector: 'osf-settings-project-form-card', - imports: [Button, Card, FormsModule, InputText, Textarea, TranslatePipe, ReactiveFormsModule], + imports: [Button, Card, Textarea, TranslatePipe, ReactiveFormsModule, TextInputComponent], templateUrl: './settings-project-form-card.component.html', styleUrl: '../../settings.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, }) export class SettingsProjectFormCardComponent { projectDetails = input.required(); - formGroup = input.required(); submitForm = output(); deleteProject = output(); - protected readonly ProjectFormControls = ProjectFormControls; + readonly ProjectFormControls = ProjectFormControls; + readonly inputLimits = InputLimits; + + projectForm = new FormGroup({ + [ProjectFormControls.Title]: new FormControl('', CustomValidators.requiredTrimmed()), + [ProjectFormControls.Description]: new FormControl(''), + }); + + constructor() { + this.setupFormEffects(); + } + + private setupFormEffects(): void { + effect(() => { + const details = this.projectDetails(); + + if (details) { + this.projectForm.patchValue( + { + [ProjectFormControls.Title]: details.title, + [ProjectFormControls.Description]: details.description, + }, + { emitEvent: false } + ); + } + }); + } resetForm(): void { - this.formGroup().patchValue({ ...this.projectDetails() }); + const details = this.projectDetails(); + + this.projectForm.patchValue({ + [ProjectFormControls.Title]: details.title, + [ProjectFormControls.Description]: details.description, + }); } submit() { - if (this.formGroup().invalid) { + if (this.projectForm.invalid) { return; } - this.submitForm.emit(this.formGroup().value); + this.submitForm.emit(this.projectForm.value as ProjectDetailsModel); } } diff --git a/src/app/features/project/settings/components/settings-redirect-link/settings-redirect-link.component.html b/src/app/features/project/settings/components/settings-redirect-link/settings-redirect-link.component.html index 8c849acbf..e89fe4f2f 100644 --- a/src/app/features/project/settings/components/settings-redirect-link/settings-redirect-link.component.html +++ b/src/app/features/project/settings/components/settings-redirect-link/settings-redirect-link.component.html @@ -1,67 +1,39 @@

{{ 'myProjects.settings.redirectLink' | translate }}

-
- + +
+ - -
+ +
- @if (redirectLink()) { -
-
- - + - @if (urlInput.invalid && urlInput.touched) { - - {{ 'myProjects.settings.invalidUrl' | translate }} - - } -
- -
- - -
-
-
- -
- } +
+ +
+ } +
diff --git a/src/app/features/project/settings/components/settings-redirect-link/settings-redirect-link.component.ts b/src/app/features/project/settings/components/settings-redirect-link/settings-redirect-link.component.ts index 852f3b17e..c208f2c75 100644 --- a/src/app/features/project/settings/components/settings-redirect-link/settings-redirect-link.component.ts +++ b/src/app/features/project/settings/components/settings-redirect-link/settings-redirect-link.component.ts @@ -3,58 +3,90 @@ import { TranslatePipe } from '@ngx-translate/core'; import { Button } from 'primeng/button'; import { Card } from 'primeng/card'; import { Checkbox } from 'primeng/checkbox'; -import { InputText } from 'primeng/inputtext'; - -import { TitleCasePipe, UpperCasePipe } from '@angular/common'; -import { - ChangeDetectionStrategy, - Component, - effect, - input, - model, - output, - signal, - WritableSignal, -} from '@angular/core'; -import { FormsModule } from '@angular/forms'; - -import { RedirectUrlDataModel } from '@osf/features/project/settings/models'; + +import { ChangeDetectionStrategy, Component, DestroyRef, effect, inject, input, output } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; + +import { TextInputComponent } from '@osf/shared/components'; +import { InputLimits } from '@osf/shared/constants'; +import { CustomValidators } from '@osf/shared/helpers'; + +import { RedirectLinkDataModel, RedirectLinkForm } from '../../models'; @Component({ selector: 'osf-settings-redirect-link', - imports: [Card, Checkbox, TranslatePipe, FormsModule, InputText, TitleCasePipe, UpperCasePipe, Button], + imports: [Card, Checkbox, TranslatePipe, ReactiveFormsModule, TextInputComponent, Button], templateUrl: './settings-redirect-link.component.html', styleUrl: '../../settings.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, }) export class SettingsRedirectLinkComponent { - redirectUrlDataChange = output(); - redirectUrlDataInput = input.required(); - redirectLink = model(); + private readonly destroyRef = inject(DestroyRef); + + redirectUrlDataInput = input.required(); + redirectUrlDataChange = output(); - redirectUrlData: WritableSignal = signal({ url: '', label: '' }); + inputLimits = InputLimits; + + redirectForm = new FormGroup({ + isEnabled: new FormControl(false, { + nonNullable: true, + validators: [Validators.required], + }), + url: new FormControl('', [CustomValidators.requiredTrimmed(), CustomValidators.linkValidator()]), + label: new FormControl('', [CustomValidators.requiredTrimmed()]), + }); constructor() { + this.setupFormSubscriptions(); + this.setupInputEffects(); + } + + private setupFormSubscriptions(): void { + this.redirectForm.controls.isEnabled?.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe((isEnabled) => { + if (!isEnabled) { + this.redirectForm.get('url')?.setValue(''); + this.redirectForm.get('label')?.setValue(''); + this.emitFormData(); + } + }); + } + + saveRedirectSettings(): void { + if (this.redirectForm.valid) { + this.emitFormData(); + } + } + + private setupInputEffects(): void { effect(() => { - this.redirectUrlData.set(this.redirectUrlDataInput()); - const { url, label } = this.redirectUrlDataInput(); - if (url || label) { - this.redirectLink.set(true); - } + const inputData = this.redirectUrlDataInput(); + this.redirectForm.patchValue( + { + isEnabled: inputData.isEnabled, + url: inputData.url, + label: inputData.label, + }, + { emitEvent: false } + ); + + this.redirectForm.markAsPristine(); }); } - onToggleRedirectLink(checked: boolean): void { - this.redirectLink.set(checked); - if (!checked) { - this.redirectUrlData.set({ url: '', label: '' }); - this.redirectUrlDataChange.emit(this.redirectUrlData()); - } + get hasChanges(): boolean { + return this.redirectForm.dirty; } - emitIfChecked(): void { - if (this.redirectLink()) { - this.redirectUrlDataChange.emit(this.redirectUrlData()); - } + private emitFormData(): void { + const formValue = this.redirectForm.value; + this.redirectUrlDataChange.emit({ + isEnabled: formValue.isEnabled || false, + url: formValue.url || '', + label: formValue.label || '', + }); } } diff --git a/src/app/features/project/settings/models/index.ts b/src/app/features/project/settings/models/index.ts index 7f76959b7..282b281d1 100644 --- a/src/app/features/project/settings/models/index.ts +++ b/src/app/features/project/settings/models/index.ts @@ -3,5 +3,6 @@ export * from './project-details.model'; export * from './project-details-json-api.model'; export * from './project-settings.model'; export * from './project-settings-response.model'; -export * from './redirect-url-data.model'; +export * from './redirect-link-data.model'; +export * from './redirect-link-form.model'; export * from './right-control.model'; diff --git a/src/app/features/project/settings/models/redirect-link-data.model.ts b/src/app/features/project/settings/models/redirect-link-data.model.ts new file mode 100644 index 000000000..f85e7b63b --- /dev/null +++ b/src/app/features/project/settings/models/redirect-link-data.model.ts @@ -0,0 +1,5 @@ +export interface RedirectLinkDataModel { + isEnabled: boolean; + url: string; + label: string; +} diff --git a/src/app/features/project/settings/models/redirect-link-form.model.ts b/src/app/features/project/settings/models/redirect-link-form.model.ts new file mode 100644 index 000000000..1e9deaa7e --- /dev/null +++ b/src/app/features/project/settings/models/redirect-link-form.model.ts @@ -0,0 +1,7 @@ +import { FormControl } from '@angular/forms'; + +export interface RedirectLinkForm { + isEnabled: FormControl; + url: FormControl; + label: FormControl; +} diff --git a/src/app/features/project/settings/models/redirect-url-data.model.ts b/src/app/features/project/settings/models/redirect-url-data.model.ts deleted file mode 100644 index 10ba37999..000000000 --- a/src/app/features/project/settings/models/redirect-url-data.model.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface RedirectUrlDataModel { - url: string; - label: string; -} diff --git a/src/app/features/project/settings/settings.component.html b/src/app/features/project/settings/settings.component.html index eb651eaad..de18298f7 100644 --- a/src/app/features/project/settings/settings.component.html +++ b/src/app/features/project/settings/settings.component.html @@ -8,7 +8,6 @@ diff --git a/src/app/features/project/settings/settings.component.ts b/src/app/features/project/settings/settings.component.ts index af201d2ca..df3b86106 100644 --- a/src/app/features/project/settings/settings.component.ts +++ b/src/app/features/project/settings/settings.component.ts @@ -6,7 +6,7 @@ import { map, of } from 'rxjs'; import { ChangeDetectionStrategy, Component, effect, inject, OnInit, signal } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { @@ -15,8 +15,7 @@ import { UpdateNotificationSubscriptionForNodeId, } from '@osf/features/settings/notifications/store'; import { LoadingSpinnerComponent, SubHeaderComponent } from '@osf/shared/components'; -import { ProjectFormControls, ResourceType, SubscriptionEvent, SubscriptionFrequency } from '@osf/shared/enums'; -import { CustomValidators } from '@osf/shared/helpers'; +import { ResourceType, SubscriptionEvent, SubscriptionFrequency } from '@osf/shared/enums'; import { Institution, UpdateNodeRequestModel, ViewOnlyLinkModel } from '@osf/shared/models'; import { CustomConfirmationService, LoaderService, ToastService } from '@osf/shared/services'; import { DeleteViewOnlyLink, FetchViewOnlyLinks, ViewOnlyLinkSelectors } from '@osf/shared/stores'; @@ -32,7 +31,7 @@ import { SettingsViewOnlyLinksCardComponent, SettingsWikiCardComponent, } from './components'; -import { ProjectDetailsModel, ProjectSettingsAttributes, ProjectSettingsData, RedirectUrlDataModel } from './models'; +import { ProjectDetailsModel, ProjectSettingsAttributes, ProjectSettingsData, RedirectLinkDataModel } from './models'; import { DeleteInstitution, DeleteProject, @@ -94,12 +93,7 @@ export class SettingsComponent implements OnInit { deleteInstitution: DeleteInstitution, }); - projectForm = new FormGroup({ - [ProjectFormControls.Title]: new FormControl('', CustomValidators.requiredTrimmed()), - [ProjectFormControls.Description]: new FormControl(''), - }); - - redirectUrlData = signal({ url: '', label: '' }); + redirectUrlData = signal({ isEnabled: false, url: '', label: '' }); accessRequest = signal(false); wikiEnabled = signal(false); anyoneCanEditWiki = signal(false); @@ -161,7 +155,7 @@ export class SettingsComponent implements OnInit { this.syncSettingsChanges('anyone_can_comment', newValue); } - onRedirectUrlDataRequestChange(data: RedirectUrlDataModel): void { + onRedirectUrlDataRequestChange(data: RedirectLinkDataModel): void { this.redirectUrlData.set(data); this.syncSettingsChanges('redirectUrl', data); } @@ -223,7 +217,7 @@ export class SettingsComponent implements OnInit { }); } - private syncSettingsChanges(changedField: string, value: boolean | RedirectUrlDataModel): void { + private syncSettingsChanges(changedField: string, value: boolean | RedirectLinkDataModel): void { const payload: Partial = {}; switch (changedField) { @@ -236,9 +230,9 @@ export class SettingsComponent implements OnInit { break; case 'redirectUrl': if (typeof value === 'object') { - payload['redirect_link_enabled'] = true; - payload['redirect_link_url'] = value.url ?? null; - payload['redirect_link_label'] = value.label ?? null; + payload['redirect_link_enabled'] = value.isEnabled; + payload['redirect_link_url'] = value.isEnabled ? value.url : undefined; + payload['redirect_link_label'] = value.isEnabled ? value.label : undefined; } break; } @@ -266,7 +260,9 @@ export class SettingsComponent implements OnInit { this.wikiEnabled.set(settings.attributes.wikiEnabled); this.anyoneCanEditWiki.set(settings.attributes.anyoneCanEditWiki); this.anyoneCanComment.set(settings.attributes.anyoneCanComment); + this.redirectUrlData.set({ + isEnabled: settings.attributes.redirectLinkEnabled, url: settings.attributes.redirectLinkUrl, label: settings.attributes.redirectLinkLabel, }); @@ -277,11 +273,6 @@ export class SettingsComponent implements OnInit { const project = this.projectDetails(); if (project) { - this.projectForm.patchValue({ - [ProjectFormControls.Title]: project.title, - [ProjectFormControls.Description]: project.description, - }); - this.title.set(project.title); } }); diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 312499205..e766f6675 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -415,11 +415,10 @@ "contributorsOption": "Contributors (with write access)", "anyoneOption": "Anyone with link", "whoCanEdit": "Who can edit:", - "url": "url", - "label": "label", + "url": "URL", + "label": "Label", "storageLocationMessage": "Storage location cannot be changed after project is created.", "redirectUrlPlaceholder": "Send people who visit your OSF project page to this link instead", - "redirectLabelPlaceholder": "Optional", "invalidUrl": "Please enter a valid URL, such as: https://example.com", "disabledForWiki": "This feature is disabled for wikis of private projects.", "enabledForWiki": "This feature is enabled for wikis of private projects.", From 81a0c48aacde0daea994c5c2cd4b7e963650a8e7 Mon Sep 17 00:00:00 2001 From: nsemets Date: Mon, 25 Aug 2025 20:11:12 +0300 Subject: [PATCH 15/16] fix(settings): updated notifications and removed comments --- .../project/settings/components/index.ts | 1 - ...ct-detail-setting-accordion.component.html | 2 +- ...oject-setting-notifications.component.html | 9 +----- ...project-setting-notifications.component.ts | 31 +++++++------------ .../settings-commenting-card.component.html | 28 ----------------- ...settings-commenting-card.component.spec.ts | 22 ------------- .../settings-commenting-card.component.ts | 19 ------------ .../pipes/notification-description.pipe.ts | 3 +- .../project/settings/settings.component.html | 5 --- .../project/settings/settings.component.ts | 9 +----- .../notification-subscription.service.ts | 5 +-- 11 files changed, 18 insertions(+), 116 deletions(-) delete mode 100644 src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.html delete mode 100644 src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.spec.ts delete mode 100644 src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.ts diff --git a/src/app/features/project/settings/components/index.ts b/src/app/features/project/settings/components/index.ts index 773124c7f..b1d1cc40d 100644 --- a/src/app/features/project/settings/components/index.ts +++ b/src/app/features/project/settings/components/index.ts @@ -1,7 +1,6 @@ export { ProjectDetailSettingAccordionComponent } from './project-detail-setting-accordion/project-detail-setting-accordion.component'; export { ProjectSettingNotificationsComponent } from './project-setting-notifications/project-setting-notifications.component'; export { SettingsAccessRequestsCardComponent } from './settings-access-requests-card/settings-access-requests-card.component'; -export { SettingsCommentingCardComponent } from './settings-commenting-card/settings-commenting-card.component'; export { SettingsProjectAffiliationComponent } from './settings-project-affiliation/settings-project-affiliation.component'; export { SettingsProjectFormCardComponent } from './settings-project-form-card/settings-project-form-card.component'; export { SettingsRedirectLinkComponent } from './settings-redirect-link/settings-redirect-link.component'; diff --git a/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.html b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.html index 4a01216a3..ef7ddc30d 100644 --- a/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.html +++ b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.html @@ -1,5 +1,5 @@
{{ 'myProjects.settings.emailNotifications' | translate }}

[rightControls]="allAccordionData" [title]="title()" > -
- - - {{ subscriptionEvent.Comments | notificationDescription: notifications()?.[0]?.frequency | translate }} - -
-
- {{ subscriptionEvent.FileUpdated | notificationDescription: notifications()?.[1]?.frequency | translate }} + {{ subscriptionEvent.FileUpdated | notificationDescription: notifications()[0].frequency | translate }}
diff --git a/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.ts b/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.ts index f70feaeba..9506cf204 100644 --- a/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.ts +++ b/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.ts @@ -19,9 +19,9 @@ import { ProjectDetailSettingAccordionComponent } from '../project-detail-settin changeDetection: ChangeDetectionStrategy.OnPush, }) export class ProjectSettingNotificationsComponent { - notificationEmitValue = output<{ event: SubscriptionEvent; frequency: SubscriptionFrequency }>(); + notifications = input.required(); title = input(); - notifications = input(); + notificationEmitValue = output(); allAccordionData: RightControl[] | undefined = []; @@ -33,24 +33,14 @@ export class ProjectSettingNotificationsComponent { constructor() { effect(() => { - this.allAccordionData = this.notifications()?.map((notification) => { - if (notification.event === SubscriptionEvent.Comments) { - return { - label: 'settings.notifications.notificationPreferences.items.comments', - value: notification.frequency as string, - type: 'dropdown', - options: this.subscriptionFrequencyOptions, - event: notification.event, - } as RightControl; - } else { - return { - label: 'settings.notifications.notificationPreferences.items.files', - value: notification.frequency as string, - type: 'dropdown', - options: this.subscriptionFrequencyOptions, - event: notification.event, - } as RightControl; - } + this.allAccordionData = this.notifications().map((notification) => { + return { + label: 'settings.notifications.notificationPreferences.items.files', + value: notification.frequency as string, + type: 'dropdown', + options: this.subscriptionFrequencyOptions, + event: notification.event, + } as RightControl; }); }); } @@ -58,6 +48,7 @@ export class ProjectSettingNotificationsComponent { changeEmittedValue(emittedValue: { index: number; value: boolean | string }): void { if (this.allAccordionData) { this.notificationEmitValue.emit({ + id: this.notifications()[0].id, event: this.allAccordionData[emittedValue.index].event as SubscriptionEvent, frequency: emittedValue.value as SubscriptionFrequency, }); diff --git a/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.html b/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.html deleted file mode 100644 index 39351e990..000000000 --- a/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.html +++ /dev/null @@ -1,28 +0,0 @@ - -

{{ 'myProjects.settings.commenting' | translate }}

- -
-
- - -

{{ 'myProjects.settings.contributorsCanPost' | translate }}

-
- -
- - - -

{{ 'myProjects.settings.osfUserCanPost' | translate }}

-
-
-
diff --git a/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.spec.ts b/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.spec.ts deleted file mode 100644 index 639c49a14..000000000 --- a/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { SettingsCommentingCardComponent } from './settings-commenting-card.component'; - -describe('SettingsCommentingCardComponent', () => { - let component: SettingsCommentingCardComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [SettingsCommentingCardComponent], - }).compileComponents(); - - fixture = TestBed.createComponent(SettingsCommentingCardComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.ts b/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.ts deleted file mode 100644 index 4d46cc4a3..000000000 --- a/src/app/features/project/settings/components/settings-commenting-card/settings-commenting-card.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TranslatePipe } from '@ngx-translate/core'; - -import { Card } from 'primeng/card'; -import { RadioButton } from 'primeng/radiobutton'; - -import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'; -import { FormsModule } from '@angular/forms'; - -@Component({ - selector: 'osf-settings-commenting-card', - imports: [Card, RadioButton, TranslatePipe, FormsModule], - templateUrl: './settings-commenting-card.component.html', - styleUrl: '../../settings.component.scss', - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class SettingsCommentingCardComponent { - anyoneCanComment = input.required(); - readonly anyoneCanCommentChange = output(); -} diff --git a/src/app/features/project/settings/pipes/notification-description.pipe.ts b/src/app/features/project/settings/pipes/notification-description.pipe.ts index 48e707f84..f57499a6c 100644 --- a/src/app/features/project/settings/pipes/notification-description.pipe.ts +++ b/src/app/features/project/settings/pipes/notification-description.pipe.ts @@ -9,7 +9,6 @@ export class NotificationDescriptionPipe implements PipeTransform { transform(event: SubscriptionEvent, frequency?: SubscriptionFrequency): string { if (!event || !frequency) return ''; - const key = `myProjects.settings.descriptions.${event}.${frequency}`; - return key; + return `myProjects.settings.descriptions.${event}.${frequency}`; } } diff --git a/src/app/features/project/settings/settings.component.html b/src/app/features/project/settings/settings.component.html index de18298f7..e7bb4aa92 100644 --- a/src/app/features/project/settings/settings.component.html +++ b/src/app/features/project/settings/settings.component.html @@ -35,11 +35,6 @@ [title]="title()" /> - - { let params: Record; + if (nodeId) { params = { - 'filter[id]': `${nodeId}_file_updated,${nodeId}_comments`, + 'filter[id]': `${nodeId}_file_updated`, }; } else { params = { @@ -46,7 +47,7 @@ export class NotificationSubscriptionService { const request = NotificationSubscriptionMapper.toUpdateRequest(id, frequency, isNodeSubscription); return this.jsonApiService - .patch(`${this.baseUrl}/${id}/`, request) + .patch(`${this.baseUrl}${id}/`, request) .pipe(map((response) => NotificationSubscriptionMapper.fromGetResponse(response))); } } From 2170223e67ebf49d42d33f0892e287bb22844f82 Mon Sep 17 00:00:00 2001 From: nsemets Date: Tue, 26 Aug 2025 12:12:08 +0300 Subject: [PATCH 16/16] fix(project-settings): fixed notifications and wiki settings --- .../review-step/review-step.component.html | 8 +++- src/app/features/project/project.routes.ts | 3 +- ...ct-detail-setting-accordion.component.html | 27 ++++------- ...ject-detail-setting-accordion.component.ts | 7 ++- ...oject-setting-notifications.component.html | 26 +++++----- ...project-setting-notifications.component.ts | 2 +- ...ttings-access-requests-card.component.html | 1 + .../settings-wiki-card.component.html | 1 + .../settings-wiki-card.component.ts | 5 +- .../settings/mappers/settings.mapper.ts | 1 + .../settings/models/node-details.model.ts | 1 + .../settings/services/settings.service.ts | 29 +++++++++++- .../project/settings/settings.component.html | 3 +- .../project/settings/settings.component.ts | 16 +++---- .../settings/store/settings.actions.ts | 23 +++++++-- .../project/settings/store/settings.model.ts | 8 +++- .../settings/store/settings.selectors.ts | 12 +++++ .../project/settings/store/settings.state.ts | 45 ++++++++++++++++++ .../settings/notifications/mappers/index.ts | 1 - .../settings/notifications/models/index.ts | 2 - .../notification-subscription.service.ts | 37 +++++---------- .../notification-subscription.actions.ts | 12 ----- .../store/notification-subscription.model.ts | 10 +--- .../notification-subscription.selectors.ts | 7 +-- .../store/notification-subscription.state.ts | 47 +------------------ src/app/shared/enums/subscriptions/index.ts | 6 +-- src/app/shared/mappers/index.ts | 1 + .../notification-subscription.mapper.ts | 5 +- src/app/shared/models/index.ts | 1 + src/app/shared/models/notifications/index.ts | 2 + ...tification-subscription-json-api.model.ts} | 2 +- .../notification-subscription.model.ts} | 2 +- 32 files changed, 189 insertions(+), 164 deletions(-) delete mode 100644 src/app/features/settings/notifications/mappers/index.ts rename src/app/{features/settings/notifications => shared}/mappers/notification-subscription.mapper.ts (89%) create mode 100644 src/app/shared/models/notifications/index.ts rename src/app/{features/settings/notifications/models/notification-subscription-json-api.models.ts => shared/models/notifications/notification-subscription-json-api.model.ts} (87%) rename src/app/{features/settings/notifications/models/notification-subscription.models.ts => shared/models/notifications/notification-subscription.model.ts} (61%) diff --git a/src/app/features/preprints/components/stepper/review-step/review-step.component.html b/src/app/features/preprints/components/stepper/review-step/review-step.component.html index 42b38be03..63e7994a6 100644 --- a/src/app/features/preprints/components/stepper/review-step/review-step.component.html +++ b/src/app/features/preprints/components/stepper/review-step/review-step.component.html @@ -28,7 +28,13 @@

}}

- Provider logo + Provider logo

{{ provider()?.name }}

diff --git a/src/app/features/project/project.routes.ts b/src/app/features/project/project.routes.ts index 79d372493..e5124e04f 100644 --- a/src/app/features/project/project.routes.ts +++ b/src/app/features/project/project.routes.ts @@ -15,7 +15,6 @@ import { import { ActivityLogsState } from '@osf/shared/stores/activity-logs'; import { CollectionsModerationState } from '../moderation/store/collections-moderation'; -import { NotificationSubscriptionState } from '../settings/notifications/store'; import { AnalyticsState } from './analytics/store'; import { SettingsState } from './settings/store'; @@ -63,7 +62,7 @@ export const projectRoutes: Routes = [ { path: 'settings', loadComponent: () => import('../project/settings/settings.component').then((mod) => mod.SettingsComponent), - providers: [provideStates([SettingsState, ViewOnlyLinkState, NotificationSubscriptionState])], + providers: [provideStates([SettingsState, ViewOnlyLinkState])], }, { path: 'contributors', diff --git a/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.html b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.html index ef7ddc30d..aa0da4d82 100644 --- a/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.html +++ b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.html @@ -6,7 +6,7 @@ [icon]="expanded() ? 'fas fa-minus' : 'fas fa-plus'" variant="text" severity="contrast" - (click)="toggle()" + (onClick)="toggle()" > {{ title() }} @@ -22,20 +22,13 @@ } - - - {{ item.label | translate }} - - - - {{ item.label | translate }} - - + [(selectedValue)]="control.value" + [disabled]="disabledRightControls()" + (changeValue)="emitValueChange.emit({ index: index, value: control.value })" + >
}
@@ -43,11 +36,7 @@
@if (expanded()) { -
+
} diff --git a/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.ts b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.ts index 1ad7cb38e..0d24079e9 100644 --- a/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.ts +++ b/src/app/features/project/settings/components/project-detail-setting-accordion/project-detail-setting-accordion.component.ts @@ -1,16 +1,17 @@ import { TranslatePipe } from '@ngx-translate/core'; import { Button } from 'primeng/button'; -import { SelectModule } from 'primeng/select'; import { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core'; import { FormsModule } from '@angular/forms'; +import { SelectComponent } from '@osf/shared/components'; + import { RightControl } from '../../models'; @Component({ selector: 'osf-project-detail-setting-accordion', - imports: [SelectModule, FormsModule, Button, TranslatePipe], + imports: [FormsModule, Button, SelectComponent, TranslatePipe], templateUrl: './project-detail-setting-accordion.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) @@ -18,6 +19,8 @@ export class ProjectDetailSettingAccordionComponent { emitValueChange = output<{ index: number; value: boolean | string }>(); title = input(); rightControls = input.required(); + disabledRightControls = input(false); + expanded = signal(false); toggle() { diff --git a/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.html b/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.html index af12deb9f..a5ea29bdf 100644 --- a/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.html +++ b/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.html @@ -3,16 +3,18 @@

{{ 'myProjects.settings.emailNotifications' | translate }}

{{ 'myProjects.settings.emailNotificationsText' | translate }}

- -
- - - {{ subscriptionEvent.FileUpdated | notificationDescription: notifications()[0].frequency | translate }} - -
-
+ @if (notifications().length) { + +
+ + + {{ subscriptionEvent.FileUpdated | notificationDescription: notifications()[0].frequency | translate }} + +
+
+ } diff --git a/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.ts b/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.ts index 9506cf204..f915fabbc 100644 --- a/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.ts +++ b/src/app/features/project/settings/components/project-setting-notifications/project-setting-notifications.component.ts @@ -4,8 +4,8 @@ import { Card } from 'primeng/card'; import { ChangeDetectionStrategy, Component, effect, input, output } from '@angular/core'; -import { NotificationSubscription } from '@osf/features/settings/notifications/models'; import { SubscriptionEvent, SubscriptionFrequency } from '@osf/shared/enums'; +import { NotificationSubscription } from '@osf/shared/models'; import { RightControl } from '../../models'; import { NotificationDescriptionPipe } from '../../pipes'; diff --git a/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.html b/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.html index c41274a91..78c3a9042 100644 --- a/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.html +++ b/src/app/features/project/settings/components/settings-access-requests-card/settings-access-requests-card.component.html @@ -9,6 +9,7 @@

{{ 'myProjects.settings.accessRequests' | translate }}

id="accessRequest" name="ongoing" > + diff --git a/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.html b/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.html index c3ac8b48b..0a70898ab 100644 --- a/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.html +++ b/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.html @@ -23,6 +23,7 @@

{{ 'myProjects.settings.wikiConfigureTitle' | translate }}

(emitValueChange)="changeEmittedValue($event)" [title]="title()" [rightControls]="allAccordionData" + [disabledRightControls]="!isPublic()" >
diff --git a/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.ts b/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.ts index 919c34137..d6203915f 100644 --- a/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.ts +++ b/src/app/features/project/settings/components/settings-wiki-card/settings-wiki-card.component.ts @@ -23,6 +23,7 @@ export class SettingsWikiCardComponent { wikiEnabled = input.required(); anyoneCanEditWiki = input.required(); title = input.required(); + isPublic = input(false); allAccordionData: RightControl[] = []; @@ -35,8 +36,8 @@ export class SettingsWikiCardComponent { value: anyoneCanEditWiki, type: 'dropdown', options: [ - { label: 'myProjects.settings.contributorsOption', value: true }, - { label: 'myProjects.settings.anyoneOption', value: false }, + { label: 'myProjects.settings.contributorsOption', value: false }, + { label: 'myProjects.settings.anyoneOption', value: true }, ], }, ]; diff --git a/src/app/features/project/settings/mappers/settings.mapper.ts b/src/app/features/project/settings/mappers/settings.mapper.ts index c9669145a..7ffca3f16 100644 --- a/src/app/features/project/settings/mappers/settings.mapper.ts +++ b/src/app/features/project/settings/mappers/settings.mapper.ts @@ -34,6 +34,7 @@ export class SettingsMapper { id: data.id, title: data.attributes.title, description: data.attributes.description, + isPublic: data.attributes.public, region: { id: data.embeds.region.data.id, name: data.embeds.region.data.attributes.name, diff --git a/src/app/features/project/settings/models/node-details.model.ts b/src/app/features/project/settings/models/node-details.model.ts index 73feef9b3..252e05426 100644 --- a/src/app/features/project/settings/models/node-details.model.ts +++ b/src/app/features/project/settings/models/node-details.model.ts @@ -4,6 +4,7 @@ export interface NodeDetailsModel { id: string; title: string; description: string; + isPublic: boolean; region: IdName; affiliatedInstitutions: Institution[]; lastFetched: number; diff --git a/src/app/features/project/settings/services/settings.service.ts b/src/app/features/project/settings/services/settings.service.ts index 02f549fa4..5a5cb8981 100644 --- a/src/app/features/project/settings/services/settings.service.ts +++ b/src/app/features/project/settings/services/settings.service.ts @@ -2,7 +2,14 @@ import { map, Observable } from 'rxjs'; import { inject, Injectable } from '@angular/core'; -import { UpdateNodeRequestModel } from '@osf/shared/models'; +import { SubscriptionFrequency } from '@osf/shared/enums'; +import { NotificationSubscriptionMapper } from '@osf/shared/mappers'; +import { + NotificationSubscription, + NotificationSubscriptionGetResponseJsonApi, + ResponseJsonApi, + UpdateNodeRequestModel, +} from '@osf/shared/models'; import { JsonApiService } from '@shared/services'; import { SettingsMapper } from '../mappers'; @@ -36,6 +43,26 @@ export class SettingsService { .pipe(map((response) => SettingsMapper.fromResponse(response, model.id))); } + getNotificationSubscriptions(nodeId?: string): Observable { + const params: Record = { + 'filter[id]': `${nodeId}_file_updated`, + }; + + return this.jsonApiService + .get>(`${this.baseUrl}/subscriptions/`, params) + .pipe( + map((responses) => responses.data.map((response) => NotificationSubscriptionMapper.fromGetResponse(response))) + ); + } + + updateSubscription(id: string, frequency: SubscriptionFrequency): Observable { + const request = NotificationSubscriptionMapper.toUpdateRequest(id, frequency, false); + + return this.jsonApiService + .patch(`${this.baseUrl}/subscriptions/${id}/`, request) + .pipe(map((response) => NotificationSubscriptionMapper.fromGetResponse(response))); + } + getProjectById(projectId: string): Observable { const params = { 'embed[]': ['affiliated_institutions', 'region'], diff --git a/src/app/features/project/settings/settings.component.html b/src/app/features/project/settings/settings.component.html index e7bb4aa92..d9ef31199 100644 --- a/src/app/features/project/settings/settings.component.html +++ b/src/app/features/project/settings/settings.component.html @@ -1,7 +1,7 @@
- @if (areProjectDetailsLoading()) { + @if (areProjectDetailsLoading() || areNotificationsLoading()) { } @else {
@@ -33,6 +33,7 @@ [wikiEnabled]="wikiEnabled()" [anyoneCanEditWiki]="anyoneCanEditWiki()" [title]="title()" + [isPublic]="projectDetails().isPublic" /> params['id'])) ?? of(undefined)); settings = select(SettingsSelectors.getSettings); - notifications = select(NotificationSubscriptionSelectors.getNotificationSubscriptionsByNodeId); + notifications = select(SettingsSelectors.getNotificationSubscriptions); + areNotificationsLoading = select(SettingsSelectors.areNotificationsLoading); projectDetails = select(SettingsSelectors.getProjectDetails); areProjectDetailsLoading = select(SettingsSelectors.areProjectDetailsLoading); viewOnlyLinks = select(ViewOnlyLinkSelectors.getViewOnlyLinks); @@ -80,12 +78,12 @@ export class SettingsComponent implements OnInit { actions = createDispatchMap({ getSettings: GetProjectSettings, - getNotifications: GetNotificationSubscriptionsByNodeId, + getNotifications: GetProjectNotificationSubscriptions, getProjectDetails: GetProjectDetails, getViewOnlyLinks: FetchViewOnlyLinks, updateProjectDetails: UpdateProjectDetails, updateProjectSettings: UpdateProjectSettings, - updateNotificationSubscriptionForNodeId: UpdateNotificationSubscriptionForNodeId, + updateNotificationSubscription: UpdateProjectNotificationSubscription, deleteViewOnlyLink: DeleteViewOnlyLink, deleteProject: DeleteProject, deleteInstitution: DeleteInstitution, @@ -158,7 +156,7 @@ export class SettingsComponent implements OnInit { const frequency = data.frequency; this.loaderService.show(); - this.actions.updateNotificationSubscriptionForNodeId({ id, frequency }).subscribe(() => { + this.actions.updateNotificationSubscription({ id, frequency }).subscribe(() => { this.toastService.showSuccess('myProjects.settings.updateProjectSettingsMessage'); this.loaderService.hide(); }); diff --git a/src/app/features/project/settings/store/settings.actions.ts b/src/app/features/project/settings/store/settings.actions.ts index cb30bbd48..ae0a30e0b 100644 --- a/src/app/features/project/settings/store/settings.actions.ts +++ b/src/app/features/project/settings/store/settings.actions.ts @@ -1,9 +1,10 @@ +import { SubscriptionFrequency } from '@osf/shared/enums'; import { UpdateNodeRequestModel } from '@shared/models'; import { ProjectSettingsData } from '../models'; export class GetProjectSettings { - static readonly type = '[Settings] Get Project Settings'; + static readonly type = '[Project Settings] Get Project Settings'; constructor(public projectId: string) {} } @@ -15,25 +16,37 @@ export class GetProjectDetails { } export class UpdateProjectSettings { - static readonly type = '[Settings] Update Project Settings'; + static readonly type = '[Project Settings] Update Project Settings'; constructor(public payload: ProjectSettingsData) {} } export class UpdateProjectDetails { - static readonly type = '[Settings] Update Project Details'; + static readonly type = '[Project Settings] Update Project Details'; constructor(public payload: UpdateNodeRequestModel) {} } +export class GetProjectNotificationSubscriptions { + static readonly type = '[Project Settings] Get Project Notification Subscriptions'; + + constructor(public nodeId: string) {} +} + +export class UpdateProjectNotificationSubscription { + static readonly type = '[Project Settings] Update Project Notification Subscription'; + + constructor(public payload: { id: string; frequency: SubscriptionFrequency }) {} +} + export class DeleteProject { - static readonly type = '[Settings] Delete Project'; + static readonly type = '[Project Settings] Delete Project'; constructor(public projectId: string) {} } export class DeleteInstitution { - static readonly type = '[Settings] Delete Institution'; + static readonly type = '[Project Settings] Delete Institution'; constructor( public institutionId: string, diff --git a/src/app/features/project/settings/store/settings.model.ts b/src/app/features/project/settings/store/settings.model.ts index c26856751..691010265 100644 --- a/src/app/features/project/settings/store/settings.model.ts +++ b/src/app/features/project/settings/store/settings.model.ts @@ -1,10 +1,11 @@ -import { AsyncStateModel } from '@osf/shared/models'; +import { AsyncStateModel, NotificationSubscription } from '@osf/shared/models'; import { NodeDetailsModel, ProjectSettingsModel } from '../models'; export interface SettingsStateModel { settings: AsyncStateModel; projectDetails: AsyncStateModel; + notifications: AsyncStateModel; } export const SETTINGS_STATE_DEFAULTS: SettingsStateModel = { @@ -18,4 +19,9 @@ export const SETTINGS_STATE_DEFAULTS: SettingsStateModel = { isLoading: false, error: null, }, + notifications: { + data: [], + isLoading: false, + error: '', + }, }; diff --git a/src/app/features/project/settings/store/settings.selectors.ts b/src/app/features/project/settings/store/settings.selectors.ts index aef9cbb8e..4a46ce241 100644 --- a/src/app/features/project/settings/store/settings.selectors.ts +++ b/src/app/features/project/settings/store/settings.selectors.ts @@ -1,5 +1,7 @@ import { Selector } from '@ngxs/store'; +import { NotificationSubscription } from '@osf/shared/models'; + import { SettingsStateModel } from './settings.model'; import { SettingsState } from './settings.state'; @@ -18,4 +20,14 @@ export class SettingsSelectors { static areProjectDetailsLoading(state: SettingsStateModel) { return state.projectDetails.isLoading; } + + @Selector([SettingsState]) + static getNotificationSubscriptions(state: SettingsStateModel): NotificationSubscription[] { + return state.notifications.data; + } + + @Selector([SettingsState]) + static areNotificationsLoading(state: SettingsStateModel): boolean { + return state.notifications.isLoading; + } } diff --git a/src/app/features/project/settings/store/settings.state.ts b/src/app/features/project/settings/store/settings.state.ts index b57bd699a..4e3698001 100644 --- a/src/app/features/project/settings/store/settings.state.ts +++ b/src/app/features/project/settings/store/settings.state.ts @@ -1,4 +1,5 @@ import { Action, State, StateContext } from '@ngxs/store'; +import { patch, updateItem } from '@ngxs/store/operators'; import { of } from 'rxjs'; import { catchError, tap } from 'rxjs/operators'; @@ -6,6 +7,7 @@ import { catchError, tap } from 'rxjs/operators'; import { inject, Injectable } from '@angular/core'; import { handleSectionError } from '@osf/shared/helpers'; +import { NotificationSubscription } from '@osf/shared/models'; import { SettingsService } from '../services'; @@ -13,8 +15,10 @@ import { DeleteInstitution, DeleteProject, GetProjectDetails, + GetProjectNotificationSubscriptions, GetProjectSettings, UpdateProjectDetails, + UpdateProjectNotificationSubscription, UpdateProjectSettings, } from './settings.actions'; import { SETTINGS_STATE_DEFAULTS, SettingsStateModel } from './settings.model'; @@ -136,6 +140,47 @@ export class SettingsState { ); } + @Action(GetProjectNotificationSubscriptions) + getNotificationSubscriptionsByNodeId( + ctx: StateContext, + action: GetProjectNotificationSubscriptions + ) { + return this.settingsService.getNotificationSubscriptions(action.nodeId).pipe( + tap((notificationSubscriptions) => { + ctx.setState( + patch({ + notifications: patch({ + data: notificationSubscriptions, + isLoading: false, + }), + }) + ); + }), + catchError((error) => handleSectionError(ctx, 'notifications', error)) + ); + } + + @Action(UpdateProjectNotificationSubscription) + updateNotificationSubscriptionForNodeId( + ctx: StateContext, + action: UpdateProjectNotificationSubscription + ) { + return this.settingsService.updateSubscription(action.payload.id, action.payload.frequency).pipe( + tap((updatedSubscription) => { + ctx.setState( + patch({ + notifications: patch({ + data: updateItem((app) => app.id === action.payload.id, updatedSubscription), + error: null, + isLoading: false, + }), + }) + ); + }), + catchError((error) => handleSectionError(ctx, 'notifications', error)) + ); + } + @Action(DeleteProject) deleteProject(ctx: StateContext, action: DeleteProject) { return this.settingsService.deleteProject(action.projectId); diff --git a/src/app/features/settings/notifications/mappers/index.ts b/src/app/features/settings/notifications/mappers/index.ts deleted file mode 100644 index a10b45bdd..000000000 --- a/src/app/features/settings/notifications/mappers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './notification-subscription.mapper'; diff --git a/src/app/features/settings/notifications/models/index.ts b/src/app/features/settings/notifications/models/index.ts index a62c932ec..f306b2228 100644 --- a/src/app/features/settings/notifications/models/index.ts +++ b/src/app/features/settings/notifications/models/index.ts @@ -1,4 +1,2 @@ -export * from './notification-subscription.models'; -export * from './notification-subscription-json-api.models'; export * from './notifications-form.model'; export * from './subscription-event.model'; diff --git a/src/app/features/settings/notifications/services/notification-subscription.service.ts b/src/app/features/settings/notifications/services/notification-subscription.service.ts index f1e9227c4..576e1a775 100644 --- a/src/app/features/settings/notifications/services/notification-subscription.service.ts +++ b/src/app/features/settings/notifications/services/notification-subscription.service.ts @@ -2,12 +2,14 @@ import { map, Observable } from 'rxjs'; import { inject, Injectable } from '@angular/core'; -import { JsonApiResponse } from '@osf/shared/models'; +import { SubscriptionFrequency } from '@osf/shared/enums'; +import { NotificationSubscriptionMapper } from '@osf/shared/mappers'; +import { + JsonApiResponse, + NotificationSubscription, + NotificationSubscriptionGetResponseJsonApi, +} from '@osf/shared/models'; import { JsonApiService } from '@osf/shared/services'; -import { SubscriptionFrequency } from '@shared/enums'; - -import { NotificationSubscriptionMapper } from '../mappers'; -import { NotificationSubscription, NotificationSubscriptionGetResponseJsonApi } from '../models'; import { environment } from 'src/environments/environment'; @@ -18,19 +20,10 @@ export class NotificationSubscriptionService { private readonly jsonApiService = inject(JsonApiService); private readonly baseUrl = `${environment.apiUrl}/subscriptions/`; - getAllGlobalNotificationSubscriptions(nodeId?: string): Observable { - let params: Record; - - if (nodeId) { - params = { - 'filter[id]': `${nodeId}_file_updated`, - }; - } else { - params = { - 'filter[event_name]': - 'global_reviews,global_comments,global_comment_replies,global_file_updated,global_mentions', - }; - } + getAllGlobalNotificationSubscriptions(): Observable { + const params: Record = { + 'filter[event_name]': 'global_reviews,global_comments,global_comment_replies,global_file_updated,global_mentions', + }; return this.jsonApiService .get>(this.baseUrl, params) @@ -39,12 +32,8 @@ export class NotificationSubscriptionService { ); } - updateSubscription( - id: string, - frequency: SubscriptionFrequency, - isNodeSubscription?: boolean - ): Observable { - const request = NotificationSubscriptionMapper.toUpdateRequest(id, frequency, isNodeSubscription); + updateSubscription(id: string, frequency: SubscriptionFrequency): Observable { + const request = NotificationSubscriptionMapper.toUpdateRequest(id, frequency); return this.jsonApiService .patch(`${this.baseUrl}${id}/`, request) diff --git a/src/app/features/settings/notifications/store/notification-subscription.actions.ts b/src/app/features/settings/notifications/store/notification-subscription.actions.ts index 22380163a..dd987411f 100644 --- a/src/app/features/settings/notifications/store/notification-subscription.actions.ts +++ b/src/app/features/settings/notifications/store/notification-subscription.actions.ts @@ -4,20 +4,8 @@ export class GetAllGlobalNotificationSubscriptions { static readonly type = '[Notification Subscriptions] Get All Global'; } -export class GetNotificationSubscriptionsByNodeId { - static readonly type = '[Notification Subscriptions] Get By Node Id'; - - constructor(public nodeId: string) {} -} - export class UpdateNotificationSubscription { static readonly type = '[Notification Subscriptions] Update'; constructor(public payload: { id: string; frequency: SubscriptionFrequency }) {} } - -export class UpdateNotificationSubscriptionForNodeId { - static readonly type = '[Notification Subscriptions] Update For Node'; - - constructor(public payload: { id: string; frequency: SubscriptionFrequency }) {} -} diff --git a/src/app/features/settings/notifications/store/notification-subscription.model.ts b/src/app/features/settings/notifications/store/notification-subscription.model.ts index 129edd72f..b76894743 100644 --- a/src/app/features/settings/notifications/store/notification-subscription.model.ts +++ b/src/app/features/settings/notifications/store/notification-subscription.model.ts @@ -1,10 +1,7 @@ -import { AsyncStateModel } from '@osf/shared/models'; - -import { NotificationSubscription } from '../models'; +import { AsyncStateModel, NotificationSubscription } from '@osf/shared/models'; export interface NotificationSubscriptionStateModel { notificationSubscriptions: AsyncStateModel; - notificationSubscriptionsByNodeId: AsyncStateModel; } export const NOTIFICATION_SUBSCRIPTION_STATE_DEFAULTS: NotificationSubscriptionStateModel = { @@ -13,9 +10,4 @@ export const NOTIFICATION_SUBSCRIPTION_STATE_DEFAULTS: NotificationSubscriptionS isLoading: false, error: '', }, - notificationSubscriptionsByNodeId: { - data: [], - isLoading: false, - error: '', - }, }; diff --git a/src/app/features/settings/notifications/store/notification-subscription.selectors.ts b/src/app/features/settings/notifications/store/notification-subscription.selectors.ts index 629d72796..caf6c19e5 100644 --- a/src/app/features/settings/notifications/store/notification-subscription.selectors.ts +++ b/src/app/features/settings/notifications/store/notification-subscription.selectors.ts @@ -1,6 +1,6 @@ import { Selector } from '@ngxs/store'; -import { NotificationSubscription } from '../models'; +import { NotificationSubscription } from '@osf/shared/models'; import { NotificationSubscriptionStateModel } from './notification-subscription.model'; import { NotificationSubscriptionState } from './notification-subscription.state'; @@ -11,11 +11,6 @@ export class NotificationSubscriptionSelectors { return state.notificationSubscriptions.data; } - @Selector([NotificationSubscriptionState]) - static getNotificationSubscriptionsByNodeId(state: NotificationSubscriptionStateModel): NotificationSubscription[] { - return state.notificationSubscriptionsByNodeId.data; - } - @Selector([NotificationSubscriptionState]) static isLoading(state: NotificationSubscriptionStateModel): boolean { return state.notificationSubscriptions.isLoading; diff --git a/src/app/features/settings/notifications/store/notification-subscription.state.ts b/src/app/features/settings/notifications/store/notification-subscription.state.ts index 41deb5474..daad47f5c 100644 --- a/src/app/features/settings/notifications/store/notification-subscription.state.ts +++ b/src/app/features/settings/notifications/store/notification-subscription.state.ts @@ -6,15 +6,13 @@ import { catchError, tap } from 'rxjs'; import { inject, Injectable } from '@angular/core'; import { handleSectionError } from '@osf/shared/helpers'; +import { NotificationSubscription } from '@osf/shared/models'; -import { NotificationSubscription } from '../models'; import { NotificationSubscriptionService } from '../services'; import { GetAllGlobalNotificationSubscriptions, - GetNotificationSubscriptionsByNodeId, UpdateNotificationSubscription, - UpdateNotificationSubscriptionForNodeId, } from './notification-subscription.actions'; import { NOTIFICATION_SUBSCRIPTION_STATE_DEFAULTS, @@ -48,26 +46,6 @@ export class NotificationSubscriptionState { ); } - @Action(GetNotificationSubscriptionsByNodeId) - getNotificationSubscriptionsByNodeId( - ctx: StateContext, - action: GetNotificationSubscriptionsByNodeId - ) { - return this.notificationSubscriptionService.getAllGlobalNotificationSubscriptions(action.nodeId).pipe( - tap((notificationSubscriptions) => { - ctx.setState( - patch({ - notificationSubscriptionsByNodeId: patch({ - data: notificationSubscriptions, - isLoading: false, - }), - }) - ); - }), - catchError((error) => handleSectionError(ctx, 'notificationSubscriptionsByNodeId', error)) - ); - } - @Action(UpdateNotificationSubscription) updateNotificationSubscription( ctx: StateContext, @@ -88,27 +66,4 @@ export class NotificationSubscriptionState { catchError((error) => handleSectionError(ctx, 'notificationSubscriptions', error)) ); } - - @Action(UpdateNotificationSubscriptionForNodeId) - updateNotificationSubscriptionForNodeId( - ctx: StateContext, - action: UpdateNotificationSubscription - ) { - return this.notificationSubscriptionService - .updateSubscription(action.payload.id, action.payload.frequency, true) - .pipe( - tap((updatedSubscription) => { - ctx.setState( - patch({ - notificationSubscriptionsByNodeId: patch({ - data: updateItem((app) => app.id === action.payload.id, updatedSubscription), - error: null, - isLoading: false, - }), - }) - ); - }), - catchError((error) => handleSectionError(ctx, 'notificationSubscriptionsByNodeId', error)) - ); - } } diff --git a/src/app/shared/enums/subscriptions/index.ts b/src/app/shared/enums/subscriptions/index.ts index c76c1b642..64dbd8be9 100644 --- a/src/app/shared/enums/subscriptions/index.ts +++ b/src/app/shared/enums/subscriptions/index.ts @@ -1,3 +1,3 @@ -export * from '@shared/enums/subscriptions/subscription-event.enum'; -export * from '@shared/enums/subscriptions/subscription-frequency.enum'; -export * from '@shared/enums/subscriptions/subscription-type.enum'; +export * from './subscription-event.enum'; +export * from './subscription-frequency.enum'; +export * from './subscription-type.enum'; diff --git a/src/app/shared/mappers/index.ts b/src/app/shared/mappers/index.ts index 893f2d106..8f9023fad 100644 --- a/src/app/shared/mappers/index.ts +++ b/src/app/shared/mappers/index.ts @@ -8,6 +8,7 @@ export * from './files/files.mapper'; export * from './filters'; export * from './institutions'; export * from './licenses.mapper'; +export * from './notification-subscription.mapper'; export * from './registry'; export * from './resource-card'; export * from './resource-overview.mappers'; diff --git a/src/app/features/settings/notifications/mappers/notification-subscription.mapper.ts b/src/app/shared/mappers/notification-subscription.mapper.ts similarity index 89% rename from src/app/features/settings/notifications/mappers/notification-subscription.mapper.ts rename to src/app/shared/mappers/notification-subscription.mapper.ts index 387603e99..bd0bcc6c9 100644 --- a/src/app/features/settings/notifications/mappers/notification-subscription.mapper.ts +++ b/src/app/shared/mappers/notification-subscription.mapper.ts @@ -1,5 +1,4 @@ -import { SubscriptionEvent, SubscriptionFrequency, SubscriptionType } from '@shared/enums'; - +import { SubscriptionEvent, SubscriptionFrequency, SubscriptionType } from '../enums'; import { NotificationSubscription, NotificationSubscriptionGetResponseJsonApi, @@ -26,7 +25,7 @@ export class NotificationSubscriptionMapper { return { data: { - type: isNodeSubscription ? SubscriptionType.Node : SubscriptionType.Global, + type: SubscriptionType.Global, attributes: baseAttributes, ...(isNodeSubscription ? {} : { id }), }, diff --git a/src/app/shared/models/index.ts b/src/app/shared/models/index.ts index 432863d6e..dfa9a7433 100644 --- a/src/app/shared/models/index.ts +++ b/src/app/shared/models/index.ts @@ -28,6 +28,7 @@ export * from './metadata-field.model'; export * from './my-resources'; export * from './nodes/create-project-form.model'; export * from './nodes/nodes-json-api.model'; +export * from './notifications'; export * from './paginated-data.model'; export * from './pagination-links.model'; export * from './profile-settings-update.model'; diff --git a/src/app/shared/models/notifications/index.ts b/src/app/shared/models/notifications/index.ts new file mode 100644 index 000000000..91dcdba7c --- /dev/null +++ b/src/app/shared/models/notifications/index.ts @@ -0,0 +1,2 @@ +export * from './notification-subscription.model'; +export * from './notification-subscription-json-api.model'; diff --git a/src/app/features/settings/notifications/models/notification-subscription-json-api.models.ts b/src/app/shared/models/notifications/notification-subscription-json-api.model.ts similarity index 87% rename from src/app/features/settings/notifications/models/notification-subscription-json-api.models.ts rename to src/app/shared/models/notifications/notification-subscription-json-api.model.ts index 5d7714c85..a3afd5695 100644 --- a/src/app/features/settings/notifications/models/notification-subscription-json-api.models.ts +++ b/src/app/shared/models/notifications/notification-subscription-json-api.model.ts @@ -1,4 +1,4 @@ -import { SubscriptionFrequency } from '@shared/enums'; +import { SubscriptionFrequency } from '@osf/shared/enums'; export interface NotificationSubscriptionGetResponseJsonApi { id: string; diff --git a/src/app/features/settings/notifications/models/notification-subscription.models.ts b/src/app/shared/models/notifications/notification-subscription.model.ts similarity index 61% rename from src/app/features/settings/notifications/models/notification-subscription.models.ts rename to src/app/shared/models/notifications/notification-subscription.model.ts index 9ad8d3701..7cbefa654 100644 --- a/src/app/features/settings/notifications/models/notification-subscription.models.ts +++ b/src/app/shared/models/notifications/notification-subscription.model.ts @@ -1,4 +1,4 @@ -import { SubscriptionEvent, SubscriptionFrequency } from '@shared/enums'; +import { SubscriptionEvent, SubscriptionFrequency } from '@osf/shared/enums'; export interface NotificationSubscription { id: string;