diff --git a/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.html b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.html new file mode 100644 index 0000000000000000000000000000000000000000..734e863526acd20c6636ae5c81626c6faa62f392 --- /dev/null +++ b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.html @@ -0,0 +1,45 @@ +<div class="grid"> + <div class="image-wrapper"> + <div class="image-container" + [matBadge]="archive.files" + > + <img [src]="defaultImageArchive" + alt="image" + class="image" + > + </div> + </div> + + <dlcm-shared-organizational-unit-name-container class="orgunit" + [id]="archive.organizationalUnitId" + ></dlcm-shared-organizational-unit-name-container> + <span class="title">{{archive.title}}</span> + <div class="detailed-infos"> + <span class="year"> + <dlcm-shared-icon [iconName]="iconNameEnum.creationDate"></dlcm-shared-icon> + {{archive.yearPublicationDate}} + </span> + <span class="access-level" + [class]="colorAccessLevel" + > + <dlcm-shared-icon [iconName]="accessLevelIconName"></dlcm-shared-icon> + {{enumUtil.getLabel(accessEnumTranslate, archive.accessLevel) | translate}} + </span> + <span class="size"> + <dlcm-shared-icon [iconName]="iconNameEnum.foldersView"></dlcm-shared-icon> + {{archive.size}} + </span> + </div> + + + <div class="button-wrapper"> + <button mat-flat-button + color="primary" + solidifyShortCuts + (click)="download($event)" + > + <dlcm-shared-icon [iconName]="iconNameEnum.download"></dlcm-shared-icon> + {{labelTranslateEnum.download | translate}} + </button> + </div> +</div> \ No newline at end of file diff --git a/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.scss b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.scss new file mode 100644 index 0000000000000000000000000000000000000000..6b193e9441aed8a9214b6aa2fa29e7e42ce89826 --- /dev/null +++ b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.scss @@ -0,0 +1,88 @@ +@import "../sass/abstracts/variables"; +@import "../sass/abstracts/mixins"; + +:host { + display: block; + border: 1px solid $extra-light-grey; + padding: 10px 20px; + + &:hover { + cursor: pointer; + } + + .grid { + display: grid; + text-align: center; + justify-content: center; + + .image-wrapper { + display: grid; + justify-content: center; + padding: 20px 0; + + .image-container { + height: 36px; + width: 100px; + + .image { + height: 100%; + } + } + } + + .orgunit { + color: $light-grey; + font-weight: bold; + overflow: hidden; + margin-bottom: 5px; + + ::ng-deep > * { + @include truncate-with-ellipsis; + } + } + + .title { + font-weight: bold; + margin-bottom: 10px; + @include truncate-with-ellipsis; + } + + .detailed-infos { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + grid-gap: 10px; + align-items: center; + justify-content: center; + margin-bottom: 10px; + + .access-level { + &.red { + color: $red; + } + + &.orange { + color: $warning; + } + + &.green { + color: $green-sweet; + } + } + + .year, + .access-level, + .size { + display: grid; + grid-template-columns: min-content max-content; + grid-gap: 10px; + align-items: center; + justify-content: center; + } + } + + .button-wrapper { + margin-top: 10px; + text-align: center; + } + } +} diff --git a/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.ts b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b61550ff0bed7ee175899d05d826507204c0931 --- /dev/null +++ b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.ts @@ -0,0 +1,93 @@ +import { + ChangeDetectionStrategy, + Component, + HostListener, + Input, + OnInit, + Output, +} from "@angular/core"; +import {SharedAbstractPresentational} from "@app/shared/components/presentationals/shared-abstract/shared-abstract.presentational"; +import {Enums} from "@enums"; +import {environment} from "@environments/environment"; +import {Archive} from "@home/models/archive.model"; +import {IconNameEnum} from "@shared/enums/icon-name.enum"; +import {MetadataUtil} from "@shared/utils/metadata.util"; +import { + BehaviorSubject, + Observable, +} from "rxjs"; +import { + EnumUtil, + KeyValue, + ObservableUtil, +} from "solidify-frontend"; + +@Component({ + selector: "dlcm-home-archive-tile", + templateUrl: "./home-archive-tile.presentational.html", + styleUrls: ["./home-archive-tile.presentational.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class HomeArchiveTilePresentational extends SharedAbstractPresentational implements OnInit { + @Input() + archive: Archive; + + private readonly _downloadBS: BehaviorSubject<Archive | undefined> = new BehaviorSubject<Archive | undefined>(undefined); + @Output("downloadChange") + readonly downloadObs: Observable<Archive | undefined> = ObservableUtil.asObservable(this._downloadBS); + + private readonly _selectBS: BehaviorSubject<Archive | undefined> = new BehaviorSubject<Archive | undefined>(undefined); + @Output("selectChange") + readonly selectObs: Observable<Archive | undefined> = ObservableUtil.asObservable(this._selectBS); + + @HostListener("click", ["$event"]) click(mouseEvent: MouseEvent): void { + this._selectBS.next(this.archive); + } + + defaultImageArchive: string = `assets/themes/${environment.theme}/toolbar-header-image.svg`; + + accessLevelIconName: IconNameEnum; + colorAccessLevel: "red" | "orange" | "green"; + + accessEnumTranslate: KeyValue[] = Enums.Deposit.AccessEnumTranslate; + + get metadataUtil(): typeof MetadataUtil { + return MetadataUtil; + } + + get enumUtil(): typeof EnumUtil { + return EnumUtil; + } + + constructor() { + super(); + } + + ngOnInit(): void { + super.ngOnInit(); + this._computeAccessLevelIcon(); + } + + private _computeAccessLevelIcon(): void { + switch (this.archive.accessLevel) { + case Enums.Deposit.AccessEnum.RESTRICTED: + this.accessLevelIconName = IconNameEnum.accessLevelRestricted; + this.colorAccessLevel = "orange"; + break; + case Enums.Deposit.AccessEnum.CLOSED: + this.accessLevelIconName = IconNameEnum.accessLevelClosed; + this.colorAccessLevel = "red"; + break; + case Enums.Deposit.AccessEnum.PUBLIC: + default: + this.accessLevelIconName = IconNameEnum.accessLevelPublic; + this.colorAccessLevel = "green"; + break; + } + } + + download(mouseEvent: MouseEvent): void { + mouseEvent.stopPropagation(); + this._downloadBS.next(this.archive); + } +} diff --git a/src/app/features/home/components/routables/home-detail/home-detail.routable.html b/src/app/features/home/components/routables/home-detail/home-detail.routable.html index d07c741f97e2a4526e4a264e6705a4af3b4ead43..471e34dcb0158bea08f7a4a25763e8908825ad69 100644 --- a/src/app/features/home/components/routables/home-detail/home-detail.routable.html +++ b/src/app/features/home/components/routables/home-detail/home-detail.routable.html @@ -19,7 +19,6 @@ > <dlcm-home-archive-detail *ngIf="(currentObs| async) != null" [archiveMetadata]="currentObs| async" - [searchScope]="searchScopeObs | async" [isLoadingPrepareDownload]="isLoadingPrepareDownloadObs | async" [isLoggedIn]="isLoggedInObs | async" (downloadChange)="download($event)" diff --git a/src/app/features/home/components/routables/home-detail/home-detail.routable.ts b/src/app/features/home/components/routables/home-detail/home-detail.routable.ts index 875f406a493f5f9abb06aaea29243ae0c4637a97..a95691d24912abb6ad1e28469dd0688bc587ea59 100644 --- a/src/app/features/home/components/routables/home-detail/home-detail.routable.ts +++ b/src/app/features/home/components/routables/home-detail/home-detail.routable.ts @@ -17,8 +17,10 @@ import {HomeHelper} from "@home/helpers/home.helper"; import {HomeService} from "@home/services/home.service"; import {Store} from "@ngxs/store"; import {GetShortDoiWrapper} from "@shared/components/presentationals/shared-doi-menu/shared-doi-menu.presentational"; -import {AppRoutesEnum} from "@shared/enums/routes.enum"; -import {RouteUtil} from "@shared/utils/route.util"; +import { + AppRoutesEnum, + RoutesEnum, +} from "@shared/enums/routes.enum"; import {Observable} from "rxjs"; import { MARK_AS_TRANSLATABLE, @@ -83,7 +85,7 @@ export class HomeDetailRoutable extends SharedAbstractPresentational implements back(): void { const search = this._store.selectSnapshot(HomeState.search); - HomeHelper.navigateToSearch(this._store, search, RouteUtil.generateFullUrlFromActivatedRouteNormal(this.route.parent)); + HomeHelper.navigateToSearch(this._store, search, RoutesEnum.homeSearch); } getMessageBackButtonToTranslate(): string { diff --git a/src/app/features/home/components/routables/home-search/home-search.routable.html b/src/app/features/home/components/routables/home-search/home-search.routable.html index 2adcc855509204a26da8741084d76cd24d25405b..18de8eddf89210fb7b3cd2353562fab2ad6bbcb8 100644 --- a/src/app/features/home/components/routables/home-search/home-search.routable.html +++ b/src/app/features/home/components/routables/home-search/home-search.routable.html @@ -9,23 +9,51 @@ [value]="searchValueInUrl" ></dlcm-shared-search> <span class="result-matching"><span class="number-result">{{totalObs | async}}</span> {{labelTranslateEnum.resultsFound | translate}}</span> + <div class="display-mode"> + <dlcm-shared-icon class="icon" + [matTooltip]="labelTranslateEnum.listView | translate" + [iconName]="iconNameEnum.listView" + [class.is-active]="viewModeEnum.list === viewMode" + (click)="switchViewMode(viewModeEnum.list)" + ></dlcm-shared-icon> + <dlcm-shared-icon class="icon" + [matTooltip]="labelTranslateEnum.tilesView | translate" + [iconName]="iconNameEnum.tilesView" + [class.is-active]="viewModeEnum.tiles === viewMode" + (click)="switchViewMode(viewModeEnum.tiles)" + ></dlcm-shared-icon> + </div> </div> <div [dlcmSpinner]="(isLoadingObs | async)" class="wrapper" > - <dlcm-shared-data-table *ngIf="(listAdaptedObs | async).length > 0;" - [isLoading]="isLoadingObs | async" - [columns]="columns" - [actions]="actions" - [datas]="listAdaptedObs | async" - [skipInitialQuery]="true" - [stickyTopPosition]="0" - [queryParameters]="queryParametersObs | async" - (queryParametersChange)="onQueryParametersEvent($event)" - (selectChange)="showDetail($event)" - [dlcmDataTest]="dataTestEnum.homeDataTableSearch" - ></dlcm-shared-data-table> + <ng-template [ngIf]="viewMode === viewModeEnum.list"> + <dlcm-shared-data-table *ngIf="(listAdaptedObs | async).length > 0;" + [isLoading]="isLoadingObs | async" + [columns]="columns" + [actions]="actions" + [datas]="listAdaptedObs | async" + [skipInitialQuery]="true" + [stickyTopPosition]="0" + [queryParameters]="queryParametersObs | async" + (queryParametersChange)="onQueryParametersEvent($event)" + (selectChange)="showDetail($event)" + [dlcmDataTest]="dataTestEnum.homeDataTableSearch" + ></dlcm-shared-data-table> + </ng-template> + + <div *ngIf="viewMode === viewModeEnum.tiles" + class="tiles-container" + > + <!-- <dlcm-shared-paginator></dlcm-shared-paginator>--> + + <dlcm-home-archive-tile *ngFor="let archive of (listAdaptedObs | async)" + [archive]="archive" + (downloadChange)="download($event.archiveMetadata)" + (selectChange)="showDetail($event)" + ></dlcm-home-archive-tile> + </div> <div *ngIf="!(isLoadingObs | async) && (listAdaptedObs | async).length === 0 && !(searchObs | async | isNullOrUndefined) && (searchObs | async | isNonEmptyString)" > diff --git a/src/app/features/home/components/routables/home-search/home-search.routable.scss b/src/app/features/home/components/routables/home-search/home-search.routable.scss index 2f7fd4885ffb44a9a2eaf884b55a35ffbee6be06..551eee325572671d10ff56aeb6b0913ae2a648c3 100644 --- a/src/app/features/home/components/routables/home-search/home-search.routable.scss +++ b/src/app/features/home/components/routables/home-search/home-search.routable.scss @@ -24,7 +24,7 @@ .right-part { .toolbar-content { display: grid; - grid-template-columns: max(400px) 1fr; + grid-template-columns: max(400px) max-content max-content; grid-gap: 30px; align-items: center; @@ -36,7 +36,30 @@ color: $primary-color; } } + + .display-mode { + display: grid; + grid-template-columns: 1fr 1fr; + grid-gap: 10px; + + .icon { + cursor: pointer; + + &.is-active { + cursor: initial; + color: $primary-color; + } + } + } } + .wrapper { + + .tiles-container { + display: grid; + grid-template-columns: repeat(auto-fill, 300px); + grid-gap: 20px; + } + } } } diff --git a/src/app/features/home/components/routables/home-search/home-search.routable.ts b/src/app/features/home/components/routables/home-search/home-search.routable.ts index 191d6f99920c4112cb5d5e67f2de11771f01f170..0900342b2058b6a05a7999c4dada70c9e885cb72 100644 --- a/src/app/features/home/components/routables/home-search/home-search.routable.ts +++ b/src/app/features/home/components/routables/home-search/home-search.routable.ts @@ -69,6 +69,12 @@ export class HomeSearchRoutable extends SharedAbstractPresentational implements listAdaptedBS: BehaviorSubject<Archive[]> = new BehaviorSubject([]); listAdaptedObs: Observable<Archive[]> = this.listAdaptedBS.asObservable(); + viewMode: ViewModeEnum = ViewModeEnum.list; + + get viewModeEnum(): typeof ViewModeEnum { + return ViewModeEnum; + } + columns: DataTableColumns[] = [ { field: "organizationalUnitId", @@ -149,7 +155,7 @@ export class HomeSearchRoutable extends SharedAbstractPresentational implements ]; searchValueInUrl: string = StringUtil.stringEmpty; - fileSizePipe: FileSizePipe; + fileSizePipe: FileSizePipe = new FileSizePipe(); constructor(private store: Store, private translate: TranslateService, @@ -164,7 +170,6 @@ export class HomeSearchRoutable extends SharedAbstractPresentational implements super.ngOnInit(); this.subscribe(this.observeSearchQueryParam()); this.subscribe(this.transformListArchive()); - this.fileSizePipe = new FileSizePipe(); } private transformListArchive(): Observable<ArchiveMetadata[]> { @@ -179,14 +184,14 @@ export class HomeSearchRoutable extends SharedAbstractPresentational implements const newList: Archive[] = []; listArchives.forEach((archive: ArchiveMetadata) => { - console.error("SIZE : ", MetadataUtil.getSize(archive.metadata)); + const size = MetadataUtil.getSize(archive.metadata); newList.push({ resId: archive.resId, organizationalUnitId: MetadataUtil.getOrganizationalUnitResId(archive.metadata), title: MetadataUtil.getTitle(archive.metadata), yearPublicationDate: MetadataUtil.getPublicationYear(archive.metadata), accessLevel: MetadataUtil.getAccessLevel(archive.metadata) as Enums.Deposit.AccessEnum, - size: this.fileSizePipe.transform(MetadataUtil.getSize(archive.metadata)), + size: isNullOrUndefined(size) ? undefined : this.fileSizePipe.transform(size), files: MetadataUtil.getFileNumber(archive.metadata), archiveMetadata: archive, }); @@ -244,4 +249,13 @@ export class HomeSearchRoutable extends SharedAbstractPresentational implements this._oauthService.initAuthorizationCodeFlow(AppRoutesEnum.deposit); } } + + switchViewMode(viewMode: ViewModeEnum): void { + this.viewMode = viewMode; + } } + +enum ViewModeEnum { + list, + tiles +} \ No newline at end of file diff --git a/src/app/features/home/home.module.ts b/src/app/features/home/home.module.ts index 445bd38ca9ecf3fc04ce038b03c27b47a3f8ed7b..155c1c2e845dc2d06e2541bf1d0a7a9721580580 100644 --- a/src/app/features/home/home.module.ts +++ b/src/app/features/home/home.module.ts @@ -12,6 +12,7 @@ import {HomeOrganizationalUnitState} from "@app/features/home/stores/organizatio import {SharedModule} from "@app/shared/shared.module"; import {ArchiveRestrictedRequestAccessDialog} from "@home/components/dialogs/archive-restricted-request-access/archive-restricted-request-access.dialog"; import {HomeArchiveDetailPresentational} from "@home/components/presentationals/home-archive-form/home-archive-detail.presentational"; +import {HomeArchiveTilePresentational} from "@home/components/presentationals/home-archive-tile/home-archive-tile.presentational"; import {HomeCarouselPresentational} from "@home/components/presentationals/home-carousel/home-carousel.presentational"; import {HomeMainButtonPresentational} from "@home/components/presentationals/home-main-button/home-main-button.presentational"; import {HomeMainPageContentPresentational} from "@home/components/presentationals/home-main-page-content/home-main-page-content.presentational"; @@ -47,6 +48,7 @@ const presentationals = [ HomeCarouselPresentational, HomeMainButtonPresentational, HomeSearchFacetPresentational, + HomeArchiveTilePresentational, ]; const services = [ HomeService, diff --git a/src/app/shared/enums/icon-name.enum.ts b/src/app/shared/enums/icon-name.enum.ts index c7f4a1415570dfd8fe433a6782ab1cb17b09b8ea..b24511c8cc954a7fec9d4d513d7f91ae9900e5c0 100644 --- a/src/app/shared/enums/icon-name.enum.ts +++ b/src/app/shared/enums/icon-name.enum.ts @@ -133,4 +133,9 @@ export enum IconNameEnum { approveDisposal, approveDisposalByOrgUnit, extendRetention, + listView, + tilesView, + accessLevelRestricted, + accessLevelClosed, + accessLevelPublic, } diff --git a/src/app/shared/enums/label-translate.enum.ts b/src/app/shared/enums/label-translate.enum.ts index 3366b611b382f6ba2b0f207801e58ae8438dfd56..6a8721caf23e534d4e00e20acda37df29d1e095d 100644 --- a/src/app/shared/enums/label-translate.enum.ts +++ b/src/app/shared/enums/label-translate.enum.ts @@ -300,6 +300,8 @@ export class LabelTranslateEnum { static resultsFound: string = MARK_AS_TRANSLATABLE("general.label.resultsFound"); static refineResearch: string = MARK_AS_TRANSLATABLE("general.label.refineResearch"); static clearFilters: string = MARK_AS_TRANSLATABLE("general.label.clearFilters"); + static listView: string = MARK_AS_TRANSLATABLE("general.label.listView"); + static tilesView: string = MARK_AS_TRANSLATABLE("general.label.tilesView"); static hide: string = MARK_AS_TRANSLATABLE("general.link.hide"); static show: string = MARK_AS_TRANSLATABLE("general.link.show"); diff --git a/src/app/shared/helpers/icon.helper.ts b/src/app/shared/helpers/icon.helper.ts index f1e714e42ddc7e8a95b471eed2e77484246337ad..e36f4e13f256ed5de7dae691d0ad6f0bd6e3ceeb 100644 --- a/src/app/shared/helpers/icon.helper.ts +++ b/src/app/shared/helpers/icon.helper.ts @@ -678,5 +678,30 @@ export class IconHelper { lib: IconLibEnum.materialIcon, icon: "schedule", }, + { + name: IconNameEnum.listView, + lib: IconLibEnum.materialIcon, + icon: "view_list", + }, + { + name: IconNameEnum.tilesView, + lib: IconLibEnum.materialIcon, + icon: "view_module", + }, + { + name: IconNameEnum.accessLevelRestricted, + lib: IconLibEnum.image, + icon: "restricted.svg", + }, + { + name: IconNameEnum.accessLevelClosed, + lib: IconLibEnum.image, + icon: "closed.svg", + }, + { + name: IconNameEnum.accessLevelPublic, + lib: IconLibEnum.image, + icon: "public.svg", + }, ]; } diff --git a/src/app/shared/utils/route.util.ts b/src/app/shared/utils/route.util.ts index a054c64db3704027533c95a2e4a4eb20a338ad0e..66a51197b75a07a75da89b56e6bf188e070f0b09 100644 --- a/src/app/shared/utils/route.util.ts +++ b/src/app/shared/utils/route.util.ts @@ -7,6 +7,7 @@ import {AppRoutesEnum} from "@shared/enums/routes.enum"; export class RouteUtil { static generateFullUrlFromActivatedRouteNormal(route: ActivatedRoute): string[] { + debugger; return this.generateFullUrlFromActivatedRouteSnapshot(route.snapshot); } diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 47c3e4229be3b5e2169acefddebe0857fdd33e1a..9392d1fbd960b6efb3c52f0b4ab8d78399a65845 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -1111,6 +1111,7 @@ "licenses": "Lizenzen", "list": "Liste", "listInvalidCharacter": "Die folgenden Sonderzeichen sind in Dateinamen nicht erlaubt: ~ ! @ # $ % ^ & * ( ) ` ; < > ? , [ ] { } \\\\", + "listView": "Listenansicht", "maintainer": "Pfleger", "mandatory": "Obligatorisch", "matchingPeople": "Passende Personen", @@ -1193,6 +1194,7 @@ "submittedDate": "Eingereichtes Datum", "theDepositHasAnEmbargo": "Die Einlage unterliegt einem Embargo", "themes": "Themen", + "tilesView": "Kacheln-Ansicht", "timeToKeep": "Zeit zu halten", "title": "Titel", "token": "Zeichen", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 3e5d5b11510c4536ed99b6f8082e23b5af882697..1ebd8629ccea9846110a9718fc1d8dd60d947bfe 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -1111,6 +1111,7 @@ "licenses": "Licenses", "list": "List", "listInvalidCharacter": "The following special characters are not allowed in file names: ~ ! @ # $ % ^ & * ( ) ` ; < > ? , [ ] { } \\\\", + "listView": "List view", "maintainer": "Maintainer", "mandatory": "Mandatory", "matchingPeople": "Matching people", @@ -1193,6 +1194,7 @@ "submittedDate": "Submitted date", "theDepositHasAnEmbargo": "The deposit has an embargo", "themes": "Themes", + "tilesView": "Tiles view", "timeToKeep": "Time to keep", "title": "Title", "token": "Token", diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 9ca28ca40b333a0729b65c90649530938b42760c..2da552280ea51dd8e21752b878559a1fdc5fb58f 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -1111,6 +1111,7 @@ "licenses": "Licences", "list": "Liste", "listInvalidCharacter": "Les caractères spéciaux suivants ne sont pas autorisés dans les noms de fichiers: ~ ! @ # $ % ^ & * ( ) ` ; < > ? , [ ] { } \\\\", + "listView": "Vue liste", "maintainer": "Mainteneur", "mandatory": "Obligatoire", "matchingPeople": "Personnes pouvant correspondre", @@ -1193,6 +1194,7 @@ "submittedDate": "Date de soumission", "theDepositHasAnEmbargo": "Le dépôt est soumis à un embargo", "themes": "Thèmes", + "tilesView": "Vue tuiles", "timeToKeep": "Temps de préservation", "title": "Titre", "token": "Jeton", diff --git a/src/assets/images/closed.svg b/src/assets/images/closed.svg new file mode 100644 index 0000000000000000000000000000000000000000..771dfc185ba15e989869261baaf424884934159d --- /dev/null +++ b/src/assets/images/closed.svg @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 24.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" + id="Layer_1" + xmlns="http://www.w3.org/2000/svg" + x="0px" + y="0px" + viewBox="0 0 24 24" + fill="#f44336" + style="enable-background:new 0 0 24 24;" + xml:space="preserve" +> +<style type="text/css"> + .st0 { + fill: none; + } + + .st1 { + fill: #FFFFFF; + } +</style> + <path class="st0" + d="M0,0h24v24H0V0z" + /> + <path d="M12,1L3,5v6c0,5.5,3.8,10.7,9,12c5.2-1.3,9-6.5,9-12V5L12,1z"/> + <path class="st1" + d="M17,8l-1-1l-4,4L8,7L7,8l4,4l-4,4l1,1l4-4l4,4l1-1l-4-4L17,8z" + /> +</svg> diff --git a/src/assets/images/public.svg b/src/assets/images/public.svg new file mode 100644 index 0000000000000000000000000000000000000000..8e12f313a858ac0a68187f9462c8a6e3fadc0c18 --- /dev/null +++ b/src/assets/images/public.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" + height="24" + viewBox="0 0 24 24" + width="24" + fill="#58cb4c" +> + <path d="M0 0h24v24H0z" + fill="none" + /> + <path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"/> +</svg> \ No newline at end of file diff --git a/src/assets/images/restricted.svg b/src/assets/images/restricted.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb109979ea48be8f606c472fcf197db1896fbe28 --- /dev/null +++ b/src/assets/images/restricted.svg @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 24.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" + id="Layer_1" + xmlns="http://www.w3.org/2000/svg" + x="0px" + y="0px" + viewBox="0 0 24 24" + style="enable-background:new 0 0 24 24;" + fill="#ffa500" + xml:space="preserve" +> +<style type="text/css"> + .st0 { + fill: none; + } + + .st1 { + fill: #FFFFFF; + } +</style> + <path class="st0" + d="M0,0h24v24H0V0z" + /> + <path d="M12,1L3,5v6c0,5.5,3.8,10.7,9,12c5.2-1.3,9-6.5,9-12V5L12,1z"/> + <g> + <path class="st1" + d="M10.7,16.3c0-0.4,0.1-0.7,0.3-1c0.2-0.2,0.6-0.3,1-0.3c0.4,0,0.7,0.1,1,0.3c0.2,0.2,0.3,0.5,0.3,1 + c0,0.4-0.1,0.7-0.3,0.9s-0.6,0.3-1,0.3c-0.4,0-0.7-0.1-1-0.3S10.7,16.7,10.7,16.3z M12.9,13.8h-1.8l-0.4-7.4h2.6L12.9,13.8z" + /> +</g> +</svg>