Browse Source

UI: Refactoring after review

pull/11138/head
Artem Dzhereleiko 2 years ago
parent
commit
adccb3f628
  1. 6
      ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html
  2. 20
      ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.scss
  3. 2
      ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts
  4. 6
      ui-ngx/src/app/modules/home/components/widget/config/basic/cards/unread-notification-basic-config.component.html
  5. 40
      ui-ngx/src/app/modules/home/components/widget/config/basic/cards/unread-notification-basic-config.component.ts
  6. 23
      ui-ngx/src/app/modules/home/components/widget/lib/cards/unread-notification-widget.component.html
  7. 12
      ui-ngx/src/app/modules/home/components/widget/lib/cards/unread-notification-widget.component.scss
  8. 28
      ui-ngx/src/app/modules/home/components/widget/lib/cards/unread-notification-widget.component.ts
  9. 4
      ui-ngx/src/app/modules/home/components/widget/lib/cards/unread-notification-widget.models.ts
  10. 6
      ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/unread-notification-widget-settings.component.html
  11. 19
      ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/unread-notification-widget-settings.component.ts
  12. 14
      ui-ngx/src/assets/notification-bell.svg

6
ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html

@ -44,7 +44,11 @@
</section>
</ng-container>
<ng-template #emptyNotification>
<img src="assets/notification-bell.svg" alt="empty notification" style="margin: 20px 24%">
<div class="tb-no-notification-svg-color" style="margin: 20px 24%">
<svg height="100%" preserveAspectRatio="xMidYMid meet" viewBox="0 0 149 156" width="100%">
<use [attr.xlink:href]="'assets/notification-bell.svg#CHECK_ICON'"></use>
</svg>
</div>
<span style="text-align: center; margin-bottom: 12px" translate>notification.no-notifications-yet</span>
</ng-template>
<ng-template #loadingNotification>

20
ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.scss

@ -0,0 +1,20 @@
/**
* Copyright © 2016-2024 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@import '../../../../../scss/constants';
.tb-no-notification-svg-color {
color: $tb-primary-color;
}

2
ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts

@ -29,7 +29,7 @@ import { NotificationSubscriber } from '@shared/models/telemetry/telemetry.model
@Component({
selector: 'tb-show-notification-popover',
templateUrl: './show-notification-popover.component.html',
styleUrls: []
styleUrls: ['show-notification-popover.component.scss']
})
export class ShowNotificationPopoverComponent extends PageComponent implements OnDestroy, OnInit {

6
ui-ngx/src/app/modules/home/components/widget/config/basic/cards/unread-notification-basic-config.component.html

@ -115,6 +115,12 @@
<input matInput formControlName="borderRadius" placeholder="{{ 'widget-config.set' | translate }}">
</mat-form-field>
</div>
<div class="tb-form-row space-between">
<div>{{ 'widget-config.card-padding' | translate }}</div>
<mat-form-field appearance="outline" subscriptSizing="dynamic">
<input matInput formControlName="padding" placeholder="{{ 'widget-config.set' | translate }}">
</mat-form-field>
</div>
</div>
<tb-widget-actions-panel
formControlName="actions">

40
ui-ngx/src/app/modules/home/components/widget/config/basic/cards/unread-notification-basic-config.component.ts

@ -71,6 +71,7 @@ export class UnreadNotificationBasicConfigComponent extends BasicWidgetConfigCom
counterColor: [settings.counterColor, []],
background: [settings.background, []],
padding: [settings.padding, []],
cardButtons: [this.getCardButtons(configData.config), []],
borderRadius: [configData.config.borderRadius, []],
@ -78,20 +79,44 @@ export class UnreadNotificationBasicConfigComponent extends BasicWidgetConfigCom
});
}
protected validatorTriggers(): string[] {
return ['showCounter'];
return ['showCounter', 'showTitle', 'showIcon'];
}
protected updateValidators(emitEvent: boolean, trigger?: string) {
const showCounter: boolean = this.unreadNotificationWidgetConfigForm.get('showCounter').value;
const showTitle: boolean = this.unreadNotificationWidgetConfigForm.get('showTitle').value;
const showIcon: boolean = this.unreadNotificationWidgetConfigForm.get('showIcon').value;
if (showTitle) {
this.unreadNotificationWidgetConfigForm.get('title').enable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('titleFont').enable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('titleColor').enable({emitEvent});
} else {
this.unreadNotificationWidgetConfigForm.get('title').disable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('titleFont').disable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('titleColor').disable({emitEvent});
}
if (showIcon) {
this.unreadNotificationWidgetConfigForm.get('iconSize').enable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('iconSizeUnit').enable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('icon').enable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('iconColor').enable({emitEvent});
} else {
this.unreadNotificationWidgetConfigForm.get('iconSize').disable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('iconSizeUnit').disable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('icon').disable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('iconColor').disable({emitEvent});
}
if (showCounter) {
this.unreadNotificationWidgetConfigForm.get('counterValueFont').enable();
this.unreadNotificationWidgetConfigForm.get('counterValueColor').enable();
this.unreadNotificationWidgetConfigForm.get('counterColor').enable();
this.unreadNotificationWidgetConfigForm.get('counterValueFont').enable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('counterValueColor').enable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('counterColor').enable({emitEvent});
} else {
this.unreadNotificationWidgetConfigForm.get('counterValueFont').disable();
this.unreadNotificationWidgetConfigForm.get('counterValueColor').disable();
this.unreadNotificationWidgetConfigForm.get('counterColor').disable();
this.unreadNotificationWidgetConfigForm.get('counterValueFont').disable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('counterValueColor').disable({emitEvent});
this.unreadNotificationWidgetConfigForm.get('counterColor').disable({emitEvent});
}
}
@ -116,6 +141,7 @@ export class UnreadNotificationBasicConfigComponent extends BasicWidgetConfigCom
this.widgetConfig.config.settings.counterColor = config.counterColor;
this.widgetConfig.config.settings.background = config.background;
this.widgetConfig.config.settings.padding = config.padding;
this.widgetConfig.config.actions = config.actions;
this.setCardButtons(config.cardButtons, this.widgetConfig.config);

23
ui-ngx/src/app/modules/home/components/widget/lib/cards/unread-notification-widget.component.html

@ -15,7 +15,7 @@
limitations under the License.
-->
<div class="tb-unread-notification-panel" [style]="backgroundStyle$ | async">
<div class="tb-unread-notification-panel" [style.padding]="padding" [style]="backgroundStyle$ | async">
<div class="tb-unread-notification-overlay" [style]="overlayStyle"></div>
<ng-template #counter>
<div *ngIf="showCounter" class="notification-counter" [style.background-color]="counterBackground">
@ -37,22 +37,11 @@
</div>
</ng-container>
<ng-template #emptyNotification>
<svg class="tb-no-notification-bell" width="149" height="156" viewBox="0 0 149 156" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin: 20px 24%">
<path class="tb-no-notification-bell-fill" fill-rule="evenodd" clip-rule="evenodd" d="M2.51475 83.5197C-2.49495 62.8814 3.18781 41.1064 17.644 25.5483L21.948 20.9161C45.73 -4.67877 85.76 -6.14243 111.348 17.6473L128.138 33.2579C156.49 59.6177 154.721 105.034 124.405 129.109L108.954 141.379C72.7942 170.094 19.05 151.639 8.15805 106.768L2.51475 83.5197ZM118 90L43.5 117.5L42 114C43.5 111 46.6 104.1 47 100.5C47.1929 98.7641 45.8232 95.6888 44.0104 91.6186C41.124 85.1379 37.1142 76.1349 36.5 66C35.7 52.8 44.8333 43.8334 49.5 41C48.5 38.3334 47.9 32.3 53.5 29.5C59.1 26.7 63.1667 33 64.5 36.5C65.8714 36.7613 67.4156 36.8817 69.0836 37.0119C75.9294 37.546 84.8612 38.2429 92.5 49.5C96.0351 54.7096 98.5627 62.5506 100.707 69.2021C102.446 74.5966 103.933 79.2087 105.5 81C108.3 84.2 114 86.3334 116.5 87L118 90ZM72.4999 111.5L91.4999 104C92.6665 106.833 93.1999 113.3 85.9999 116.5C78.7999 119.7 73.9999 114.5 72.4999 111.5Z" fill="#fff" fill-opacity="0.06"/>
<circle class="tb-no-notification-bell-fill" opacity="0.4" cx="123.833" cy="42.876" r="3.79487" fill="#fff" fill-opacity="0.24"/>
<circle class="tb-no-notification-bell-fill" opacity="0.4" cx="77.3461" cy="10.3034" r="6.64103" fill="#fff" fill-opacity="0.24"/>
<circle class="tb-no-notification-bell-fill" opacity="0.4" cx="26.4316" cy="46.6709" r="5.69231" fill="#fff" fill-opacity="0.24"/>
<circle class="tb-no-notification-bell-fill" opacity="0.4" cx="74.1837" cy="30.5427" r="1.5812" fill="#fff" fill-opacity="0.24"/>
<circle class="tb-no-notification-bell-fill" opacity="0.4" cx="124.782" cy="114.03" r="2.21368" fill="#fff" fill-opacity="0.24"/>
<circle class="tb-no-notification-bell-fill" opacity="0.4" cx="65.329" cy="117.825" r="2.21368" fill="#fff" fill-opacity="0.24"/>
<circle class="tb-no-notification-bell-fill" opacity="0.4" cx="18.2094" cy="95.3718" r="3.79487" fill="#fff" fill-opacity="0.24"/>
<mask id="path-9-inside-1_6799_8139" fill="white">
<path d="M92.2083 102.896C92.7237 104.299 92.9577 105.791 92.8968 107.284C92.8359 108.778 92.4814 110.245 91.8535 111.602C91.2256 112.959 90.3366 114.179 89.2373 115.192C88.138 116.205 86.8498 116.992 85.4464 117.508C84.043 118.023 82.5519 118.257 81.058 118.196C79.5642 118.135 78.097 117.781 76.7402 117.153C75.3834 116.525 74.1636 115.636 73.1504 114.536C72.1371 113.437 71.3504 112.149 70.8349 110.746L81.5216 106.821L92.2083 102.896Z"/>
</mask>
<path class="tb-no-notification-bell-stroke" d="M92.2083 102.896C92.7237 104.299 92.9577 105.791 92.8968 107.284C92.8359 108.778 92.4814 110.245 91.8535 111.602C91.2256 112.959 90.3366 114.179 89.2373 115.192C88.138 116.205 86.8498 116.992 85.4464 117.508C84.043 118.023 82.5519 118.257 81.058 118.196C79.5642 118.135 78.097 117.781 76.7402 117.153C75.3834 116.525 74.1636 115.636 73.1504 114.536C72.1371 113.437 71.3504 112.149 70.8349 110.746L81.5216 106.821L92.2083 102.896Z" stroke="#fff" stroke-width="3.79487" mask="url(#path-9-inside-1_6799_8139)"/>
<ellipse class="tb-no-notification-bell-fill" opacity="0.16" cx="71.9699" cy="128.261" rx="44.2735" ry="3.16239" fill="#fff"/>
<path class="tb-no-notification-bell-stroke" d="M48.7194 42.2145L49.2902 41.7946L49.0463 41.1286L48.6002 39.9105C47.8712 37.9201 47.9674 35.7227 48.8689 33.8013C49.7705 31.8798 51.4039 30.3917 53.4105 29.6659C55.4171 28.9401 57.6307 29.0365 59.5642 29.9326C61.4976 30.8286 62.9925 32.4505 63.7214 34.4408L64.1675 35.6589L64.4114 36.3249L65.1202 36.2819C78.6066 35.4632 90.9975 43.5735 95.6213 56.1988L103.405 77.4513C104.417 80.2163 106.492 82.4682 109.169 83.7088L116.516 87.1138L117.592 90.0529L43.3017 116.925L42.2252 113.986L45.6514 106.684C46.8997 104.024 47.0321 100.974 46.0195 98.2087L38.2362 76.9563C33.6124 64.3309 37.8587 50.2026 48.7194 42.2145Z" stroke="#fff" stroke-width="1.89744"/>
</svg>
<div class="tb-no-notification-svg-color" style="margin: 20px 24%">
<svg height="100%" preserveAspectRatio="xMidYMid meet" viewBox="0 0 149 156" width="100%">
<use [attr.xlink:href]="'assets/notification-bell.svg#CHECK_ICON'"></use>
</svg>
</div>
<span class="tb-no-notification-text" translate>notification.no-notifications-yet</span>
</ng-template>
<ng-template #loadingNotification>

12
ui-ngx/src/app/modules/home/components/widget/lib/cards/unread-notification-widget.component.scss

@ -16,6 +16,10 @@
@import "../../../../../../../scss/constants";
.tb-no-notification-svg-color {
color: $tb-primary-color;
}
.tb-unread-notification-panel {
width: 100%;
height: 100%;
@ -43,14 +47,6 @@
display: flex;
flex-direction: column;
align-items: center;
.tb-no-notification-bell {
&-fill {
fill: $tb-primary-color;
}
&-stroke {
stroke: $tb-primary-color;
}
}
.tb-no-notification-text {
text-align: center;
margin-bottom: 12px;

28
ui-ngx/src/app/modules/home/components/widget/lib/cards/unread-notification-widget.component.ts

@ -41,7 +41,7 @@ import {
import { Notification, NotificationRequest, NotificationType } from '@shared/models/notification.models';
import { NotificationSubscriber } from '@shared/models/telemetry/telemetry.models';
import { NotificationWebsocketService } from '@core/ws/notification-websocket.service';
import { distinctUntilChanged, map, share, skip, tap } from 'rxjs/operators';
import { distinctUntilChanged, map, share, skip, take, tap } from 'rxjs/operators';
import { Router } from '@angular/router';
import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';
import { DEFAULT_OVERLAY_POSITIONS } from '@shared/models/overlay.models';
@ -50,6 +50,9 @@ import {
NOTIFICATION_TYPE_FILTER_PANEL_DATA,
NotificationTypeFilterPanelComponent
} from '@home/components/widget/lib/cards/notification-type-filter-panel.component';
import { selectUserDetails } from '@core/auth/auth.selectors';
import { select, Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
@Component({
selector: 'tb-unread-notification-widget',
@ -76,18 +79,20 @@ export class UnreadNotificationWidgetComponent implements OnInit, OnDestroy {
backgroundStyle$: Observable<ComponentStyle>;
overlayStyle: ComponentStyle = {};
padding: string;
private counterValue: BehaviorSubject<number> = new BehaviorSubject(0);
count$ = this.counterValue.asObservable().pipe(
distinctUntilChanged(),
map((value) => value >= 100 ? '99+' : value),
tap(() => setTimeout(() => this.cd.markForCheck())),
tap(() => Promise.resolve().then(() => this.cd.markForCheck())),
share({
connector: () => new ReplaySubject(1)
})
);
private notificationTypes: Array<NotificationType> = [];
private notificationSubscriber: NotificationSubscriber;
@ -96,9 +101,11 @@ export class UnreadNotificationWidgetComponent implements OnInit, OnDestroy {
private contentResize$: ResizeObserver;
private defaultDashboardFullscreen = false;
private viewAllAction: WidgetAction = {
name: 'widgets.notification.button-view-all',
show: true,
show: !this.defaultDashboardFullscreen,
icon: 'open_in_new',
onAction: ($event) => {
this.viewAll($event);
@ -110,7 +117,7 @@ export class UnreadNotificationWidgetComponent implements OnInit, OnDestroy {
show: true,
icon: 'filter_list',
onAction: ($event) => {
this.editColumnsToDisplay($event);
this.editNotificationTypeFilter($event);
}
};
@ -123,7 +130,8 @@ export class UnreadNotificationWidgetComponent implements OnInit, OnDestroy {
}
};
constructor(private imagePipe: ImagePipe,
constructor(private store: Store<AppState>,
private imagePipe: ImagePipe,
private notificationWsService: NotificationWebsocketService,
private sanitizer: DomSanitizer,
private router: Router,
@ -145,12 +153,17 @@ export class UnreadNotificationWidgetComponent implements OnInit, OnDestroy {
this.ctx.widgetActions = [this.viewAllAction, this.filterAction, this.markAsReadAction];
this.viewAllAction.show = isDefined(this.settings.enableViewAll) ? this.settings.enableViewAll : true;
this.store.pipe(select(selectUserDetails), take(1)).subscribe(
user => this.viewAllAction.show = !user.additionalInfo?.defaultDashboardFullscreen
);
this.filterAction.show = isDefined(this.settings.enableFilter) ? this.settings.enableFilter : true;
this.markAsReadAction.show = isDefined(this.settings.enableMarkAsRead) ? this.settings.enableMarkAsRead : true;
this.initSubscription();
this.backgroundStyle$ = backgroundStyle(this.settings.background, this.imagePipe, this.sanitizer);
this.overlayStyle = overlayStyle(this.settings.background.overlay);
this.padding = this.settings.background.overlay.enabled ? undefined : this.settings.padding;
}
@ -168,6 +181,7 @@ export class UnreadNotificationWidgetComponent implements OnInit, OnDestroy {
if (Array.isArray(value)) {
this.loadNotification = true;
this.notifications = value;
this.cd.markForCheck();
}
});
this.notificationCountSubscriber = this.notificationSubscriber.notificationCount$.pipe(
@ -212,7 +226,7 @@ export class UnreadNotificationWidgetComponent implements OnInit, OnDestroy {
return item.id.id;
}
private editColumnsToDisplay($event: Event) {
private editNotificationTypeFilter($event: Event) {
if ($event) {
$event.stopPropagation();
}

4
ui-ngx/src/app/modules/home/components/widget/lib/cards/unread-notification-widget.models.ts

@ -27,6 +27,7 @@ export interface UnreadNotificationWidgetSettings {
enableFilter: boolean;
enableMarkAsRead: boolean;
background: BackgroundSettings;
padding: string;
}
export const unreadNotificationDefaultSettings: UnreadNotificationWidgetSettings = {
@ -53,5 +54,6 @@ export const unreadNotificationDefaultSettings: UnreadNotificationWidgetSettings
color: 'rgba(255,255,255,0.72)',
blur: 3
}
}
},
padding: '12px'
};

6
ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/unread-notification-widget-settings.component.html

@ -70,4 +70,10 @@
<tb-background-settings formControlName="background">
</tb-background-settings>
</div>
<div class="tb-form-row space-between">
<div>{{ 'widget-config.card-padding' | translate }}</div>
<mat-form-field appearance="outline" subscriptSizing="dynamic">
<input matInput formControlName="padding" placeholder="{{ 'widget-config.set' | translate }}">
</mat-form-field>
</div>
</ng-container>

19
ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/unread-notification-widget-settings.component.ts

@ -55,7 +55,8 @@ export class UnreadNotificationWidgetSettingsComponent extends WidgetSettingsCom
enableFilter: [settings?.enableFilter, []],
enableMarkAsRead: [settings?.enableMarkAsRead, []],
background: [settings?.background, []]
background: [settings?.background, []],
padding: [settings.padding, []]
});
}
@ -67,18 +68,14 @@ export class UnreadNotificationWidgetSettingsComponent extends WidgetSettingsCom
const showCounter: boolean = this.unreadNotificationWidgetSettingsForm.get('showCounter').value;
if (showCounter) {
this.unreadNotificationWidgetSettingsForm.get('counterValueFont').enable();
this.unreadNotificationWidgetSettingsForm.get('counterValueColor').enable();
this.unreadNotificationWidgetSettingsForm.get('counterColor').enable();
this.unreadNotificationWidgetSettingsForm.get('counterValueFont').enable({emitEvent});
this.unreadNotificationWidgetSettingsForm.get('counterValueColor').enable({emitEvent});
this.unreadNotificationWidgetSettingsForm.get('counterColor').enable({emitEvent});
} else {
this.unreadNotificationWidgetSettingsForm.get('counterValueFont').disable();
this.unreadNotificationWidgetSettingsForm.get('counterValueColor').disable();
this.unreadNotificationWidgetSettingsForm.get('counterColor').disable();
this.unreadNotificationWidgetSettingsForm.get('counterValueFont').disable({emitEvent});
this.unreadNotificationWidgetSettingsForm.get('counterValueColor').disable({emitEvent});
this.unreadNotificationWidgetSettingsForm.get('counterColor').disable({emitEvent});
}
this.unreadNotificationWidgetSettingsForm.get('counterValueFont').updateValueAndValidity({emitEvent});
this.unreadNotificationWidgetSettingsForm.get('counterValueColor').updateValueAndValidity({emitEvent});
this.unreadNotificationWidgetSettingsForm.get('counterColor').updateValueAndValidity({emitEvent});
}
}

14
ui-ngx/src/assets/notification-bell.svg

@ -1 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" width="234" height="245" fill="none"><rect width="100%" height="100%"/><mask id="a" fill="#fff"><path d="M144.998 161.896a18.006 18.006 0 0 1-.561 13.766 17.988 17.988 0 0 1-10.13 9.336 18.001 18.001 0 0 1-23.102-10.691l16.897-6.205 16.896-6.206Z"/></mask><g class="currentLayer"><path fill="#fff" d="M0 0h234v245H0z"/><path d="M3.186 131.261a100 100 0 0 1 23.92-91.658l6.805-7.324C71.513-8.188 134.803-10.502 175.26 27.111l26.547 24.682c44.827 41.677 42.031 113.484-5.902 151.548l-24.43 19.4c-57.171 45.4-142.145 16.223-159.366-54.722l-8.922-36.758Z" fill="#F3F7FF"/><circle opacity=".4" cx="195" cy="67" r="6" fill="#6794C7"/><circle opacity=".4" cx="121.5" cy="15.5" r="10.5" fill="#6794C7"/><circle opacity=".4" cx="41" cy="73" r="9" fill="#6794C7"/><circle opacity=".4" cx="116.5" cy="47.5" r="2.5" fill="#6794C7"/><circle opacity=".4" cx="196.5" cy="179.5" r="3.5" fill="#6794C7"/><circle opacity=".4" cx="102.5" cy="185.5" r="3.5" fill="#6794C7"/><circle opacity=".4" cx="28" cy="150" r="6" fill="#6794C7"/><path d="M144.998 161.896a18.006 18.006 0 0 1-.561 13.766 17.988 17.988 0 0 1-10.13 9.336 18.001 18.001 0 0 1-23.102-10.691l16.897-6.205 16.896-6.206Z" fill="#fff" stroke="#6794C7" stroke-width="6" mask="url(#a)"/><ellipse opacity=".4" cx="113" cy="202" rx="70" ry="5" fill="#6794C7"/><path d="m76.238 66.355.9-.666-.383-1.052-.705-1.938a12.722 12.722 0 0 1 23.91-8.703l.705 1.938.383 1.053 1.118-.069c21.32-1.302 40.916 11.6 48.23 31.693l12.326 33.866a17.494 17.494 0 0 0 9.049 9.875l11.659 5.437 1.707 4.689L67.675 185.23l-1.706-4.688 5.436-11.66a17.5 17.5 0 0 0 .585-13.381l-12.327-33.866c-7.313-20.093-.595-42.573 16.575-55.28Z" fill="#fff" stroke="#6794C7" stroke-width="3"/></g></svg>
<svg id="CHECK_ICON" width="149" height="156" viewBox="0 0 149 156" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.51475 83.5197C-2.49495 62.8814 3.18781 41.1064 17.644 25.5483L21.948 20.9161C45.73 -4.67877 85.76 -6.14243 111.348 17.6473L128.138 33.2579C156.49 59.6177 154.721 105.034 124.405 129.109L108.954 141.379C72.7942 170.094 19.05 151.639 8.15805 106.768L2.51475 83.5197ZM118 90L43.5 117.5L42 114C43.5 111 46.6 104.1 47 100.5C47.1929 98.7641 45.8232 95.6888 44.0104 91.6186C41.124 85.1379 37.1142 76.1349 36.5 66C35.7 52.8 44.8333 43.8334 49.5 41C48.5 38.3334 47.9 32.3 53.5 29.5C59.1 26.7 63.1667 33 64.5 36.5C65.8714 36.7613 67.4156 36.8817 69.0836 37.0119C75.9294 37.546 84.8612 38.2429 92.5 49.5C96.0351 54.7096 98.5627 62.5506 100.707 69.2021C102.446 74.5966 103.933 79.2087 105.5 81C108.3 84.2 114 86.3334 116.5 87L118 90ZM72.4999 111.5L91.4999 104C92.6665 106.833 93.1999 113.3 85.9999 116.5C78.7999 119.7 73.9999 114.5 72.4999 111.5Z" fill="currentColor" fill-opacity="0.06"/>
<circle opacity="0.4" cx="123.833" cy="42.876" r="3.79487" fill="currentColor" fill-opacity="0.24"/>
<circle opacity="0.4" cx="77.3461" cy="10.3034" r="6.64103" fill="currentColor" fill-opacity="0.24"/>
<circle opacity="0.4" cx="26.4316" cy="46.6709" r="5.69231" fill="currentColor" fill-opacity="0.24"/>
<circle opacity="0.4" cx="74.1837" cy="30.5427" r="1.5812" fill="currentColor" fill-opacity="0.24"/>
<circle opacity="0.4" cx="124.782" cy="114.03" r="2.21368" fill="currentColor" fill-opacity="0.24"/>
<circle opacity="0.4" cx="65.329" cy="117.825" r="2.21368" fill="currentColor" fill-opacity="0.24"/>
<circle opacity="0.4" cx="18.2094" cy="95.3718" r="3.79487" fill="currentColor" fill-opacity="0.24"/>
<path d="M92.2083 102.896C92.7237 104.299 92.9577 105.791 92.8968 107.284C92.8359 108.778 92.4814 110.245 91.8535 111.602C91.2256 112.959 90.3366 114.179 89.2373 115.192C88.138 116.205 86.8498 116.992 85.4464 117.508C84.043 118.023 82.5519 118.257 81.058 118.196C79.5642 118.135 78.097 117.781 76.7402 117.153C75.3834 116.525 74.1636 115.636 73.1504 114.536C72.1371 113.437 71.3504 112.149 70.8349 110.746L81.5216 106.821L92.2083 102.896Z" stroke="currentColor" stroke-width="1.89744"/>
<ellipse opacity="0.16" cx="71.9699" cy="128.261" rx="44.2735" ry="3.16239" fill="currentColor"/>
<path d="M48.7194 42.2145L49.2902 41.7946L49.0463 41.1286L48.6002 39.9105C47.8712 37.9201 47.9674 35.7227 48.8689 33.8013C49.7705 31.8798 51.4039 30.3917 53.4105 29.6659C55.4171 28.9401 57.6307 29.0365 59.5642 29.9326C61.4976 30.8286 62.9925 32.4505 63.7214 34.4408L64.1675 35.6589L64.4114 36.3249L65.1202 36.2819C78.6066 35.4632 90.9975 43.5735 95.6213 56.1988L103.405 77.4513C104.417 80.2163 106.492 82.4682 109.169 83.7088L116.516 87.1138L117.592 90.0529L43.3017 116.925L42.2252 113.986L45.6514 106.684C46.8997 104.024 47.0321 100.974 46.0195 98.2087L38.2362 76.9563C33.6124 64.3309 37.8587 50.2026 48.7194 42.2145Z" stroke="currentColor" stroke-width="1.89744"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Loading…
Cancel
Save