Merge branch 'developer' of bitbucket.org:equilibriumito/gabinete-digital into feature/websocket

This commit is contained in:
Peter Maquiran
2022-01-12 12:00:40 +01:00
25 changed files with 340 additions and 75 deletions
+1
View File
@@ -33,6 +33,7 @@
<ion-icon *ngIf="pathname == '/home/chat'" class="nav-icon" src="assets/images/nav-hover/icons-nav-chat-active.svg"></ion-icon>
<ion-label>Chat</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet">
+6 -2
View File
@@ -4,6 +4,10 @@ ion-tab-bar{
--color: #797979;
}
// ion-tab-button{
// --color-selected: #061b52;
// }
// Badge
// --------------------------------------------------
@@ -18,7 +22,7 @@ ion-badge {/* */
/* display: inline-block;*/
min-width: 18px;
min-width: 18px;
font-size: $badge-font-size;
/* font-weight: $badge-font-weight;
line-height: 1;
@@ -46,4 +50,4 @@ ion-badge {/* */
ion-tab-button.active{
color: #061b52;
}
}
+39 -1
View File
@@ -60,6 +60,13 @@ export class HomePage implements OnInit {
showAttendees: false,
showAttendeeModal: false
}
tabButton = {
home: false,
agenda: false,
gabinete: false,
actions: false,
chat: false,
}
eventToaprove: any = {
back: false,
serialNumber: "",
@@ -167,11 +174,42 @@ export class HomePage implements OnInit {
}
myWorker.postMessage('ali'); */
this.clearTabButtonSelection();
}
clearTabButtonSelection(){
this.tabButton.home = false;
this.tabButton.agenda = false;
this.tabButton.gabinete = false;
this.tabButton.actions = false;
this.tabButton.chat = false;
}
selectedTab(url?:string){
this.clearTabButtonSelection();
if(url =='/home/events'){
this.tabButton.home = true;
}
else if(url == '/home/agenda'){
this.tabButton.agenda = true;
}
else if(url =='/home/gabinete-digital'){
this.tabButton.gabinete = true;
}
else if(url =='/home/publications'){
this.tabButton.actions = true;
}
else if(url == '/home/chat'){
this.tabButton.chat = true;
}
else{
this.clearTabButtonSelection();
}
}
logDeviceInfo = async () => {
const info = await Device.getInfo();
console.log('Device info',info);
};
@@ -92,13 +92,54 @@
</div>
</div>
</div>
</div>
</div>
{{last ? scrollToBottom() : ''}}
</div>
</div>
<div *ngIf="msg.t != 'r' && msg.t != 'ul' && msg.t != 'ru' && msg.alias =='documento'" (press)="handlePress(msg._id)" class='message-container incoming-{{msg.u.username!=loggedUser.me.username}}'>
<div class="title">
<ion-label>{{msg.u.name}}</ion-label>
<span class="time">{{showDateDuration(msg._updatedAt)}}</span>
</div>
<div class="message">
<ion-label>{{msg.msg}}</ion-label>
<div *ngIf="msg.attachments" class="message-attachments">
<div *ngFor="let file of msg.attachments">
<div (click)="openPreview(msg)">
<img *ngIf="file.image_url" src="{{file.image_url}}" alt="image" >
</div>
<div>
<div>
<div class="file">
<!-- <canvas id="pdf_canvas"></canvas> -->
<div (click)="viewDocument(msg.file, file.title_link)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
<span *ngIf="msg.file.type">
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
<ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon>
</span>
<ion-label class="file-title">{{file.title}}</ion-label>
</div>
</div>
<div class="file-details-optional">
<ion-label *ngIf="msg.file">
<span *ngIf="file.description">{{file.description}}</span>
<span *ngIf="file.description && msg.file.type != 'application/webtrix'"></span>
<span *ngIf="msg.file.type != 'application/webtrix'">{{msg.file.type.replace('application/','').toUpperCase()}}</span>
</ion-label>
</div>
</div>
</div>
</div>
</div>
{{last ? scrollToBottom() : ''}}
</div>
</div>
<div *ngIf="msg.t == 'r'" class="info-text">
<ion-label>Alterou o nome do grupo para "{{msg.msg.split('-').join(' ')}}"</ion-label><br />
{{last ? scrollToBottom() : ''}}
@@ -119,8 +160,8 @@
</div>
{{last ? scrollToBottom() : ''}}
</div>
<div *ngIf="msg.file" class="info-meeting">
<div *ngIf="msg.file.type == 'application/meeting'">
<div *ngIf="msg.file">
<div *ngIf="msg.file.type == 'application/meeting'" class="info-meeting">
<ion-label class="info-meeting-small">{{msg.u.name}} criou esta reunião</ion-label><br />
<button (click)="goToEvent(msg.file.id)" class="btn-no-color info-meeting-normal"><ion-label class="info-meeting-normal">{{msg.file.subject}}</ion-label></button><br />
<ion-label class="info-meeting-medium"><ion-icon name="calendar-outline"></ion-icon> De {{showDateDuration(msg.file.start_date)}} a {{showDateDuration(msg.file.end_date)}}</ion-label><br />
+54 -2
View File
@@ -91,8 +91,60 @@
{{last ? scrollToBottom() : ''}}
</div>
</div>
<div *ngIf="msg.file" class="info-meeting">
<div *ngIf="msg.file.type == 'application/meeting'">
<div (press)="handlePress(msg._id)" class='message-container incoming-{{msg.u.username!=loggedUser.me.username}}' (click)="openPreview(msg)" *ngIf="msg.msg !=''">
<div class="title">
<ion-label>{{msg.u.name}}</ion-label>
<span class="time">{{showDateDuration(msg._updatedAt)}}</span>
</div>
<div>
<ion-label>{{msg.msg}}</ion-label>
{{last ? scrollToBottom() : ''}}
</div>
</div>
<div (press)="handlePress(msg._id)" class='message-container incoming-{{msg.u.username!=loggedUser.me.username}}' *ngIf="msg.alias =='documento'">
<div class="title">
<ion-label>{{msg.u.name}}</ion-label>
<span class="time">{{showDateDuration(msg._updatedAt)}}</span>
</div>
<div>
<div *ngIf="msg.attachments" class="message-attachments">
<div *ngFor="let file of msg.attachments let i = index">
<div *ngIf="file.image_url" (click)="openPreview(msg)">
<img src="{{file.image_url}}" alt="image">
</div>
<div>
<div>
<div class="file">
<!-- <canvas id="pdf_canvas"></canvas> -->
<div (click)="docIndex(i); viewDocument(msg.file, file.title_link)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
<span *ngIf="msg.file.type">
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
<ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon>
</span>
<ion-label class="file-title">{{file.title}}</ion-label>
</div>
</div>
<div class="file-details-optional">
<ion-label *ngIf="msg.file && msg.file != ''">
<span *ngIf="file.description">{{file.description}}</span>
<span *ngIf="file.description && msg.file.type != 'application/webtrix'"></span>
<span *ngIf="msg.file.type != 'application/webtrix'">{{msg.file.type.replace('application/','').toUpperCase()}}</span>
</ion-label>
</div>
</div>
</div>
</div>
</div>
{{last ? scrollToBottom() : ''}}
</div>
</div>
<div *ngIf="msg.file">
<div *ngIf="msg.file.type == 'application/meeting'" class="info-meeting">
<ion-label class="info-meeting-small">{{msg.u.name}} criou esta reunião</ion-label><br />
<button (click)="goToEvent(msg.file.id)" class="btn-no-color info-meeting-normal"><ion-label class="info-meeting-normal">{{msg.file.subject}}</ion-label></button><br />
<ion-label class="info-meeting-medium"><ion-icon name="calendar-outline"></ion-icon> De {{showDateDuration(msg.file.start_date)}} a {{showDateDuration(msg.file.end_date)}}</ion-label><br />
@@ -368,10 +368,6 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
if (file.type == "application/webtrix") {
this.openViewDocumentModal(file);
}
else {
let fullUrl = "https://www.tabularium.pt" + url;
this.fileService.viewDocumentByUrl(fullUrl);
}
}
docIndex(index: number) {
+1 -1
View File
@@ -190,7 +190,7 @@ export class ChatService {
let opts = {
headers: this.headers,
}
return this.http.post(environment.apiChatUrl+'im.close', body, this.options);
return this.http.post(environment.apiChatUrl+'im.delete', body, this.options);
}
createRoom(body:any){
@@ -435,6 +435,7 @@ export class FileService {
{
"rid": roomId,
"msg": "",
"alias": "documento",
"attachments": [{
"title": res.data.selected.Assunto,
"description": res.data.selected.DocTypeDesc,
@@ -91,6 +91,57 @@
{{last ? scrollToBottom() : ''}}
</div>
</div>
<div class="message-item incoming-{{msg.u.username!=loggedUser.me.username}} max-width-45" *ngIf="msg.t != 'r' && msg.t != 'ul' && msg.t != 'ru' && msg.alias =='documento'" >
<div class="message-item-options d-flex justify-content-end">
<fa-icon [matMenuTriggerFor]="beforeMenu" icon="chevron-down" class="message-options-icon cursor-pointer"></fa-icon>
<mat-menu #beforeMenu="matMenu" xPosition="before">
<button (click)="deleteMessage(msg._id)" class="menuButton">Apagar mensagem</button>
</mat-menu>
</div>
<div class="title">
<ion-label>{{msg.u.name}}</ion-label>
<span class="time">{{showDateDuration(msg._updatedAt)}}</span>
</div>
<div class="message">
<ion-label>{{msg.msg}}</ion-label>
<div *ngIf="msg.attachments" class="message-attachments">
<div *ngFor="let file of msg.attachments">
<div (click)="openPreview(msg)">
<img *ngIf="file.image_url" src="{{file.image_url}}" alt="image">
</div>
<div>
<div>
<div class="file">
<!-- <canvas id="pdf_canvas"></canvas> -->
<div (click)="viewDocument(msg.file, file.title_link)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
<span *ngIf="msg.file.type">
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
<ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon>
</span>
<ion-label class="file-title">{{file.title}}</ion-label>
</div>
</div>
<div class="file-details-optional">
<ion-label *ngIf="msg.file">
<span *ngIf="file.description">{{file.description}}</span>
<span *ngIf="file.description && msg.file.type != 'application/webtrix'"></span>
<span *ngIf="msg.file.type != 'application/webtrix'">{{msg.file.type.replace('application/','').toUpperCase()}}</span>
</ion-label>
</div>
</div>
</div>
</div>
</div>
{{last ? scrollToBottom() : ''}}
</div>
</div>
<div *ngIf="msg.t == 'r'" class="info-text">
<ion-label>Alterou o nome do grupo para "{{msg.msg.split('-').join(' ')}}"</ion-label><br />
{{last ? scrollToBottom() : ''}}
@@ -111,8 +162,8 @@
</div>
{{last ? scrollToBottom() : ''}}
</div>
<div *ngIf="msg.file" class="info-meeting">
<div *ngIf="msg.file.type == 'application/meeting'">
<div *ngIf="msg.file" >
<div *ngIf="msg.file.type == 'application/meeting'" class="info-meeting">
<ion-label class="info-meeting-small">{{msg.u.name}} criou esta reunião</ion-label><br />
<button (click)="goToEvent(msg.file.id)" class="btn-no-color info-meeting-normal"><ion-label class="info-meeting-normal">{{msg.file.subject}}</ion-label></button><br />
<ion-label class="info-meeting-medium"><ion-icon name="calendar-outline"></ion-icon> De {{showDateDuration(msg.file.start_date)}} a {{showDateDuration(msg.file.end_date)}}</ion-label><br />
@@ -9,7 +9,7 @@
<div hidden class="right">
<button class="btn-no-color" (click)="_openMessagesOptions()">
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " src="assets/images/icons-menu.svg"></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " src="assets/images/icons-menu.svg"></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " src="assets/images/theme/gov/icons-menu.svg"></ion-icon>
</button>
</div>
</div>
@@ -51,13 +51,28 @@
</div>
<div>
<ion-label>{{msg.msg}}</ion-label>
{{last ? scrollToBottom() : ''}}
</div>
</div>
<div class='message-item incoming-{{msg.u.username!=loggedUser.me.username}} max-width-45' *ngIf="msg.alias == 'documento'">
<div class="message-item-options d-flex justify-content-end">
<fa-icon [matMenuTriggerFor]="beforeMenu" icon="chevron-down" class="message-options-icon cursor-pointer"></fa-icon>
<mat-menu #beforeMenu="matMenu" xPosition="before">
<button (click)="deleteMessage(msg._id)" class="menuButton">Apagar mensagem</button>
</mat-menu>
</div>
<div class="title">
<ion-label>{{msg.u.name}}</ion-label>
<span class="time">{{showDateDuration(msg._updatedAt)}}</span>
</div>
<div>
<!-- <ion-label>{{msg.msg}}</ion-label> -->
<div *ngIf="msg.attachments" class="message-attachments">
<div *ngFor="let file of msg.attachments">
<div (click)="openPreview(msg)">
<!-- <img *ngIf="file.image_url" src="{{file.image_url}}" alt="image" (click)="imageSize(file.image_url)"> -->
<img *ngIf="file.image_url" src="{{file.image_url}}" alt="image">
</div>
<!-- <div *ngIf="msg.file.type">
<div *ngIf="msg.file">
<div class="file">
<div (click)="viewDocument(msg, file.title_link)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
<span *ngIf="msg.file.type">
@@ -77,14 +92,15 @@
<span *ngIf="msg.file.type != 'application/webtrix'">{{msg.file.type.replace('application/','').toUpperCase()}}</span>
</ion-label>
</div>
</div> -->
</div>
</div>
</div>
{{last ? scrollToBottom() : ''}}
</div>
</div>
<div *ngIf="msg.file" class="info-meeting">
<div *ngIf="msg.file.type == 'application/meeting'">
<div *ngIf="msg.file" >
<div class="info-meeting" *ngIf="msg.file.type == 'application/meeting'">
<ion-label class="info-meeting-small">{{msg.u.name}} criou esta reunião</ion-label><br />
<button (click)="goToEvent(msg.file.id)" class="btn-no-color info-meeting-normal"><ion-label class="info-meeting-normal">{{msg.file.subject}}</ion-label></button><br />
<ion-label class="info-meeting-medium"><ion-icon name="calendar-outline"></ion-icon> De {{showDateDuration(msg.file.start_date)}} a {{showDateDuration(msg.file.end_date)}}</ion-label><br />
+19 -1
View File
@@ -99,7 +99,25 @@ export class HeaderPage implements OnInit {
}
locationPathname(): string {
return window.location.pathname
let path = window.location.pathname;
if(path.includes('/home/events')){
return '/home/events';
}
else if(path.includes('/home/agenda')){
return '/home/agenda';
}
else if(path.includes('/home/gabinete-digital')){
return '/home/gabinete-digital';
}
else if(path.includes('/home/publications')){
return '/home/publications';
}
else if(path.includes('/home/chat')){
return '/home/chat';
}
else{
return path;
}
}
async openSearch() {
@@ -14,6 +14,7 @@
overflow: hidden;
}
}
.buttons{
display: flex;
flex-wrap: wrap;
@@ -1,13 +1,10 @@
<ion-content class="container">
<div class="arrow-right" (click)="close()">
<button class="btn-no-color">
<ion-icon *ngIf="ThemeService.currentTheme == 'default' "slot="end" class="arrow-right-icon" src='assets/images/icons-arrow-arrow-right.svg'></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " slot="end" class="arrow-right-icon" src='assets/images/theme/gov/icons-calendar-arrow-right.svg'></ion-icon>
<div class="arrow-right">
<button class="btn-no-color" (click)="close()">
<ion-icon src='assets/images/theme/gov/icons-calendar-arrow-right.svg'></ion-icon>
</button>
</div>
<div class="buttons">
<button (click)="close()" full class="btn-cancel" shape="round" >Cancelar</button>
<div class="solid"></div>
<button hidden (click)="closeChatRoom()" full class="btn-delete" shape="round" >Apagar conversa</button>
<button (click)="closeChatRoom()" full class="btn-delete" shape="round" >Apagar conversa</button>
</div>
</ion-content>
@@ -1,50 +1,58 @@
.container{
--padding-top:20px !important;
--padding-bottom:20px !important;
--padding-start:20px !important;
--padding-end:20px !important;
--padding-top:20px !important;
--padding-bottom:20px !important;
--padding-start:20px !important;
--padding-end:20px !important;
}
.arrow-right{
display: none;
margin-bottom: 20px;
.arrow-right-icon{
width: 37px;
float: right;
font-size: 35px;
overflow: hidden;
}
display: none;
margin-bottom: 20px;
.arrow-right-icon{
width: 37px;
float: right;
font-size: 35px;
overflow: hidden;
}
}
.buttons{
display: flex;
flex-wrap: wrap;
justify-content: space-around;
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
.solid {
display: none;
width: 90%;
border-top: 1px solid #bbb;
margin: 0 auto !important;
}
/* .btn-ok, .btn-cancel, .btn-delete{
width: calc(50% - 10px) !important;
margin: 5px 5px 5px 5px !important;
} */
@media only screen and (min-width: 701px) {
.arrow-right{
display: flex;
justify-content: flex-end;
}
.btn-cancel{
display: none;
width: 100% !important;
margin-bottom: 10px !important;
}
.btn-delete{
width: 100% !important;
margin-bottom: 10px !important;
margin-top: 10px !important;
}
/* .solid{
display: block;
} */
display: block;
width: 90%;
border-top: 1px solid #bbb;
margin: 10px auto !important;
}
@media only screen and (min-width: 701px) {
.arrow-right{
display: flex;
justify-content: flex-end;
}
.btn-cancel{
//display: none;
width: 100% !important;
margin-bottom: 10px !important;
}
.btn-cancel:hover, .btn-delete:hover{
background-color: var(--button-hover);
color: #fff !important;
}
.btn-ok{
width: 100% !important;
}
.btn-delete{
width: 100% !important;
margin-bottom: 10px !important;
}
.solid{
display: block;
}
.mobile-only{
display: none !important;
}
}
@@ -1,8 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { ModalController, NavParams, PopoverController } from '@ionic/angular';
import { ChatService } from 'src/app/services/chat.service';
import { ThemeService } from 'src/app/services/theme.service'
import { ThemeService } from 'src/app/services/theme.service';
@Component({
selector: 'app-messages-options',
@@ -18,7 +17,7 @@ export class MessagesOptionsPage implements OnInit {
private modalController: ModalController,
private chatService: ChatService,
private navParams: NavParams,
public ThemeService: ThemeService
public ThemeService: ThemeService,
)
{
this.roomId = this.navParams.get('roomId');
@@ -0,0 +1,5 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5 30.5024C22.023 30.5024 27 29.5253 27 24.0018C27 18.4784 22.523 14.001 17 14.001C11.477 14.001 7 18.4784 7 24.0018C7 29.5253 10.977 30.5024 16.5 30.5024Z" stroke="#061B52" stroke-width="2"/>
<path d="M17 14.001C20.3137 14.001 23 11.3145 23 8.0005C23 4.68652 20.3137 2 17 2C13.6863 2 11 4.68652 11 8.0005C11 11.3145 13.6863 14.001 17 14.001Z" stroke="#061B52" stroke-width="2"/>
<path d="M8.65738 29.0947L22.3427 15.9089M25.157 19.3443L13.8433 30.6589L25.157 19.3443Z" stroke="#061B52" stroke-width="2" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 685 B

@@ -0,0 +1,5 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5 30.5024C22.023 30.5024 27 29.5253 27 24.0018C27 18.4784 22.523 14.001 17 14.001C11.477 14.001 7 18.4784 7 24.0018C7 29.5253 10.977 30.5024 16.5 30.5024Z" stroke="#797979" stroke-width="2"/>
<path d="M17 14.001C20.3137 14.001 23 11.3145 23 8.0005C23 4.68652 20.3137 2 17 2C13.6863 2 11 4.68652 11 8.0005C11 11.3145 13.6863 14.001 17 14.001Z" stroke="#797979" stroke-width="2"/>
<path d="M8.65738 29.0947L22.3427 15.9088M25.157 19.3443L13.8433 30.6589L25.157 19.3443Z" stroke="#797979" stroke-width="2" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 685 B

@@ -0,0 +1,4 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M28 4H6C4.89543 4 4 4.89543 4 6V28C4 29.1046 4.89543 30 6 30H28C29.1046 30 30 29.1046 30 28V6C30 4.89543 29.1046 4 28 4Z" stroke="#061B52" stroke-width="2"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6 11H28V12H6V11ZM22 16H24V18H22V16ZM16 16H18V18H16V16ZM16 22H18V24H16V22ZM22 22H24V24H22V22ZM10 16H12V18H10V16ZM10 22H12V24H10V22Z" stroke="#061B52" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 488 B

+4
View File
@@ -0,0 +1,4 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M28 4H6C4.89543 4 4 4.89543 4 6V28C4 29.1046 4.89543 30 6 30H28C29.1046 30 30 29.1046 30 28V6C30 4.89543 29.1046 4 28 4Z" stroke="#797979" stroke-width="2"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6 11H28V12H6V11ZM22 16H24V18H22V16ZM16 16H18V18H16V16ZM16 22H18V24H16V22ZM22 22H24V24H22V22ZM10 16H12V18H10V16ZM10 22H12V24H10V22Z" stroke="#797979" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 488 B

@@ -0,0 +1,4 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.5 24.1C19.904 24.1 21.25 23.892 22.493 23.51C23.159 23.304 26.745 25.268 27.346 24.969C27.953 24.667 25.576 22.102 26.103 21.716C28.493 19.966 30 17.404 30 14.55C30 9.276 24.851 5 18.5 5C12.149 5 7 9.276 7 14.55C7 19.825 12.149 24.1 18.5 24.1Z" stroke="#061B52" stroke-width="2"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 30.37C11.023 30.37 10.087 30.224 9.222 29.956C8.759 29.813 6.264 31.188 5.846 30.978C5.424 30.768 7.078 28.972 6.711 28.701C5.049 27.476 4 25.683 4 23.685C4 22.133 4.633 20.705 5.695 19.57C7.159 18.006 9.439 17 12 17C16.418 17 20 19.993 20 23.685C20 24.722 19.718 25.703 19.214 26.579C17.923 28.822 15.178 30.37 12 30.37Z" stroke="#061B52" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 849 B

+4
View File
@@ -0,0 +1,4 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.5 24.1C19.904 24.1 21.25 23.892 22.493 23.51C23.159 23.304 26.745 25.268 27.346 24.969C27.953 24.667 25.576 22.102 26.103 21.716C28.493 19.966 30 17.404 30 14.55C30 9.276 24.851 5 18.5 5C12.149 5 7 9.276 7 14.55C7 19.825 12.149 24.1 18.5 24.1Z" stroke="#797979" stroke-width="2"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 30.37C11.023 30.37 10.087 30.224 9.222 29.956C8.759 29.813 6.264 31.188 5.846 30.978C5.424 30.768 7.078 28.972 6.711 28.701C5.049 27.476 4 25.683 4 23.685C4 22.133 4.633 20.705 5.695 19.57C7.159 18.006 9.439 17 12 17C16.418 17 20 19.993 20 23.685C20 24.722 19.718 25.703 19.214 26.579C17.923 28.822 15.178 30.37 12 30.37Z" stroke="#797979" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 849 B

@@ -0,0 +1,4 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M23 28H5V10H30V28H23ZM30 28H23H30ZM23 6V10H12V6H20H23Z" stroke="#061B52" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M7.5 27.5L29.5 12.5M5.5 25.5L27.5 10.5L5.5 25.5Z" stroke="#061B52"/>
</svg>

After

Width:  |  Height:  |  Size: 369 B

@@ -0,0 +1,4 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M23 28H5V10H30V28H23ZM30 28H23H30ZM23 6V10H12V6H20H23Z" stroke="#797979" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M7.5 27.5L29.5 12.5M5.5 25.5L27.5 10.5L5.5 25.5Z" stroke="#797979"/>
</svg>

After

Width:  |  Height:  |  Size: 369 B

@@ -0,0 +1,3 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M17 6L29 12.4599V27.8603C29 28.4122 28.776 28.9122 28.414 29.2741C28.052 29.636 27.552 29.86 27 29.86H22V24.8608C22 24.073 21.696 23.3561 21.2 22.8212C20.69 22.2723 19.978 21.9153 19.183 21.8673L15 21.8613C14.212 21.8613 13.495 22.1653 12.96 22.6612C12.411 23.1711 12.054 23.883 12.006 24.6779L12 29.86H7C6.448 29.86 5.948 29.636 5.586 29.2741C5.224 28.9122 5 28.4122 5 27.8603V12.4599L17 6Z" stroke="#061B52" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 581 B

+5
View File
@@ -0,0 +1,5 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.5">
<path fill-rule="evenodd" clip-rule="evenodd" d="M17 6L29 12.4599V27.8603C29 28.4122 28.776 28.9122 28.414 29.2741C28.052 29.636 27.552 29.86 27 29.86H22V24.8608C22 24.073 21.696 23.3561 21.2 22.8212C20.69 22.2723 19.978 21.9153 19.183 21.8673L15 21.8613C14.212 21.8613 13.495 22.1653 12.96 22.6612C12.411 23.1711 12.054 23.883 12.006 24.6779L12 29.86H7C6.448 29.86 5.948 29.636 5.586 29.2741C5.224 28.9122 5 28.4122 5 27.8603V12.4599L17 6Z" stroke="black" stroke-width="2"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 602 B