docs(quick-start): add refine quick start

This commit is contained in:
necatiozmen
2023-11-16 12:34:24 +03:00
parent dc376b42da
commit 1626379bed
23 changed files with 289 additions and 67 deletions

View File

@@ -0,0 +1 @@
<svg width="120" height="120" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M57.700 0.119 C 57.370 0.167,56.249 0.395,55.209 0.627 C 53.461 1.016,51.678 1.868,31.526 11.939 C 19.541 17.929,9.193 23.198,8.530 23.648 C 4.667 26.271,1.597 30.863,0.472 35.700 C 0.121 37.210,0.100 38.576,0.100 60.000 C 0.100 85.317,0.026 83.862,1.501 87.538 C 2.867 90.940,5.824 94.598,8.800 96.568 C 9.515 97.041,19.730 102.239,31.500 108.119 C 56.162 120.439,54.821 119.883,59.900 119.894 C 63.173 119.901,64.630 119.643,67.341 118.578 C 69.506 117.727,109.700 97.557,111.200 96.569 C 114.030 94.704,117.087 90.984,118.394 87.815 C 118.710 87.048,119.179 85.628,119.435 84.660 L 119.900 82.900 119.900 60.100 C 119.900 38.578,119.879 37.210,119.528 35.700 C 118.403 30.863,115.333 26.271,111.470 23.648 C 110.807 23.198,100.463 17.931,88.483 11.943 C 64.080 -0.252,65.205 0.225,60.600 0.097 C 59.335 0.062,58.030 0.072,57.700 0.119 M64.791 20.601 C 68.105 21.410,71.646 23.417,74.114 25.886 C 76.593 28.364,78.562 31.847,79.445 35.312 L 79.900 37.100 79.900 60.000 L 79.900 82.900 79.445 84.688 C 77.610 91.893,72.167 97.429,65.024 99.355 C 63.343 99.808,62.709 99.874,60.000 99.874 C 57.291 99.874,56.657 99.808,54.976 99.355 C 50.269 98.086,46.201 95.231,43.562 91.344 C 42.366 89.582,41.073 86.720,40.555 84.688 L 40.100 82.900 40.100 60.000 L 40.100 37.100 40.555 35.312 C 41.078 33.258,42.363 30.425,43.611 28.575 C 46.518 24.265,51.684 21.073,57.163 20.202 C 58.917 19.922,62.858 20.129,64.791 20.601 M57.902 30.235 C 55.184 30.753,52.260 33.048,51.033 35.627 C 48.145 41.695,51.871 48.808,58.477 49.835 C 63.908 50.679,68.990 46.961,69.835 41.523 C 70.333 38.317,69.340 35.304,67.018 32.982 C 64.564 30.528,61.386 29.571,57.902 30.235 " fill="#14141F" stroke="none" fill-rule="evenodd"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -30,11 +30,12 @@ $aw-icon-nuxt: "\ea1d";
$aw-icon-platform: "\ea1e";
$aw-icon-plus: "\ea1f";
$aw-icon-product-hunt: "\ea20";
$aw-icon-rest: "\ea21";
$aw-icon-search: "\ea22";
$aw-icon-star: "\ea23";
$aw-icon-system: "\ea24";
$aw-icon-twitter: "\ea25";
$aw-icon-vue: "\ea26";
$aw-icon-x: "\ea27";
$aw-icon-youtube: "\ea28";
$aw-icon-refine: "\ea21";
$aw-icon-rest: "\ea22";
$aw-icon-search: "\ea23";
$aw-icon-star: "\ea24";
$aw-icon-system: "\ea25";
$aw-icon-twitter: "\ea26";
$aw-icon-vue: "\ea27";
$aw-icon-x: "\ea28";
$aw-icon-youtube: "\ea29";

View File

@@ -49,11 +49,12 @@
.aw-icon-platform:before { content: "\ea1e"; }
.aw-icon-plus:before { content: "\ea1f"; }
.aw-icon-product-hunt:before { content: "\ea20"; }
.aw-icon-rest:before { content: "\ea21"; }
.aw-icon-search:before { content: "\ea22"; }
.aw-icon-star:before { content: "\ea23"; }
.aw-icon-system:before { content: "\ea24"; }
.aw-icon-twitter:before { content: "\ea25"; }
.aw-icon-vue:before { content: "\ea26"; }
.aw-icon-x:before { content: "\ea27"; }
.aw-icon-youtube:before { content: "\ea28"; }
.aw-icon-refine:before { content: "\ea21"; }
.aw-icon-rest:before { content: "\ea22"; }
.aw-icon-search:before { content: "\ea23"; }
.aw-icon-star:before { content: "\ea24"; }
.aw-icon-system:before { content: "\ea25"; }
.aw-icon-twitter:before { content: "\ea26"; }
.aw-icon-vue:before { content: "\ea27"; }
.aw-icon-x:before { content: "\ea28"; }
.aw-icon-youtube:before { content: "\ea29"; }

Binary file not shown.

View File

@@ -48,14 +48,15 @@
.aw-icon-platform:before { content: "\ea1e"; }
.aw-icon-plus:before { content: "\ea1f"; }
.aw-icon-product-hunt:before { content: "\ea20"; }
.aw-icon-rest:before { content: "\ea21"; }
.aw-icon-search:before { content: "\ea22"; }
.aw-icon-star:before { content: "\ea23"; }
.aw-icon-system:before { content: "\ea24"; }
.aw-icon-twitter:before { content: "\ea25"; }
.aw-icon-vue:before { content: "\ea26"; }
.aw-icon-x:before { content: "\ea27"; }
.aw-icon-youtube:before { content: "\ea28"; }
.aw-icon-refine:before { content: "\ea21"; }
.aw-icon-rest:before { content: "\ea22"; }
.aw-icon-search:before { content: "\ea23"; }
.aw-icon-star:before { content: "\ea24"; }
.aw-icon-system:before { content: "\ea25"; }
.aw-icon-twitter:before { content: "\ea26"; }
.aw-icon-vue:before { content: "\ea27"; }
.aw-icon-x:before { content: "\ea28"; }
.aw-icon-youtube:before { content: "\ea29"; }
$aw-icon-apple: "\ea01";
$aw-icon-arrow-down: "\ea02";
@@ -89,11 +90,12 @@ $aw-icon-nuxt: "\ea1d";
$aw-icon-platform: "\ea1e";
$aw-icon-plus: "\ea1f";
$aw-icon-product-hunt: "\ea20";
$aw-icon-rest: "\ea21";
$aw-icon-search: "\ea22";
$aw-icon-star: "\ea23";
$aw-icon-system: "\ea24";
$aw-icon-twitter: "\ea25";
$aw-icon-vue: "\ea26";
$aw-icon-x: "\ea27";
$aw-icon-youtube: "\ea28";
$aw-icon-refine: "\ea21";
$aw-icon-rest: "\ea22";
$aw-icon-search: "\ea23";
$aw-icon-star: "\ea24";
$aw-icon-system: "\ea25";
$aw-icon-twitter: "\ea26";
$aw-icon-vue: "\ea27";
$aw-icon-x: "\ea28";
$aw-icon-youtube: "\ea29";

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 111 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -191,52 +191,58 @@
"className": "aw-icon-product-hunt",
"unicode": "&#59936;"
},
"rest": {
"refine": {
"encodedCode": "\\ea21",
"prefix": "aw-icon",
"className": "aw-icon-rest",
"className": "aw-icon-refine",
"unicode": "&#59937;"
},
"search": {
"rest": {
"encodedCode": "\\ea22",
"prefix": "aw-icon",
"className": "aw-icon-search",
"className": "aw-icon-rest",
"unicode": "&#59938;"
},
"star": {
"search": {
"encodedCode": "\\ea23",
"prefix": "aw-icon",
"className": "aw-icon-star",
"className": "aw-icon-search",
"unicode": "&#59939;"
},
"system": {
"star": {
"encodedCode": "\\ea24",
"prefix": "aw-icon",
"className": "aw-icon-system",
"className": "aw-icon-star",
"unicode": "&#59940;"
},
"twitter": {
"system": {
"encodedCode": "\\ea25",
"prefix": "aw-icon",
"className": "aw-icon-twitter",
"className": "aw-icon-system",
"unicode": "&#59941;"
},
"vue": {
"twitter": {
"encodedCode": "\\ea26",
"prefix": "aw-icon",
"className": "aw-icon-vue",
"className": "aw-icon-twitter",
"unicode": "&#59942;"
},
"x": {
"vue": {
"encodedCode": "\\ea27",
"prefix": "aw-icon",
"className": "aw-icon-x",
"className": "aw-icon-vue",
"unicode": "&#59943;"
},
"youtube": {
"x": {
"encodedCode": "\\ea28",
"prefix": "aw-icon",
"className": "aw-icon-youtube",
"className": "aw-icon-x",
"unicode": "&#59944;"
},
"youtube": {
"encodedCode": "\\ea29",
"prefix": "aw-icon",
"className": "aw-icon-youtube",
"unicode": "&#59945;"
}
}

View File

@@ -37,6 +37,11 @@
name: 'Angular',
href: '/docs/quick-starts/angular',
image: `/images/platforms/${$themeInUse}/angular.svg`
},
{
name: 'Refine',
href: '/docs/quick-starts/refine',
image: `/images/platforms/${$themeInUse}/refine.svg`
},
{
name: 'Apple',
@@ -47,7 +52,8 @@
name: 'Android',
href: '/docs/quick-starts/android',
image: `/images/platforms/${$themeInUse}/android.svg`
}
},
] as Array<{
name: string;
href: string;

View File

@@ -48,6 +48,12 @@
icon: 'icon-svelte',
image: '/images/blog/placeholder.png',
href: 'sveltekit'
},
{
title: 'Refine',
icon: 'aw-icon-refine',
image: '/images/blog/placeholder.png',
href: 'refine'
}
]
},

View File

@@ -0,0 +1,179 @@
---
layout: article
title: Start with Refine
description: Build Refine apps with Appwrite and learn how to use our powerful backend to add authentication, user management, file storage, and more.
difficulty: beginner
readtime: 3
back: /docs/quick-starts
---
Learn how to setup your first Refine project powered by Appwrite.
{% section #step-1 step=1 title="Create project" %}
Head to the [Appwrite Console](https://cloud.appwrite.io/console).
{% only_dark %}
![Create project screen](/images/docs/quick-starts/dark/create-project.png)
{% /only_dark %}
{% only_light %}
![Create project screen](/images/docs/quick-starts/create-project.png)
{% /only_light %}
If this is your first time using Appwrite, create an account and create your first project.
Then, under **Add a platform**, add a **Web app**. The **Hostname** should be `localhost`.
{% only_dark %}
![Add a platform](/images/docs/quick-starts/dark/add-platform.png)
{% /only_dark %}
{% only_light %}
![Add a platform](/images/docs/quick-starts/add-platform.png)
{% /only_light %}
You can skip optional steps.
{% /section %}
{% section #step-2 step=2 title="Create Refine project" %}
Create a Refine project with Appwrite support.
```sh
npm create refine-app@latest -- --preset refine-appwrite
```
{% /section %}
{% section #step-3 step=3 title="Install Appwrite" %}
Using the `refine-appwrite` preset eliminates the need for extra dependencies for a quick start.
If you want to integrate Appwrite into an existing Refine app, simply use this command:
```sh
npm install @refinedev/appwrite
```
Then follow [this](https://refine.dev/docs/packages/documentation/data-providers/appwrite) guide.
{% /section %}
{% section #step-4 step=4 title="Import Appwrite" %}
Find your project's ID in the **Settings** page.
{% only_dark %}
![Project settings screen](/images/docs/quick-starts/dark/project-id.png)
{% /only_dark %}
{% only_light %}
![Project settings screen](/images/docs/quick-starts/project-id.png)
{% /only_light %}
Navigate to `src/utility/appwriteClient.ts` and add your API credentials.
```ts
import { Account, Appwrite, Storage } from "@refinedev/appwrite";
const APPWRITE_URL = '<YOUR_API_ENDPOINT>'; // Replace with your Appwrite API Endpoint
const APPWRITE_PROJECT = "<YOUR_PROJECT_ID>"; // Replace with your project ID
const appwriteClient = new Appwrite();
appwriteClient.setEndpoint(APPWRITE_URL).setProject(APPWRITE_PROJECT);
const account = new Account(appwriteClient);
const storage = new Storage(appwriteClient);
export { account, appwriteClient, storage };
```
{% /section %}
{% section #step-5 step=5 title="Create a login page" %}
Replace the code in `src/App.tsx` with the following.
```js
import { Authenticated, Refine } from '@refinedev/core';
import { dataProvider, liveProvider } from '@refinedev/appwrite';
import {
AuthPage,
ErrorComponent,
RefineThemes,
ThemedLayoutV2,
useNotificationProvider,
} from '@refinedev/antd';
import routerProvider, {
CatchAllNavigate,
NavigateToResource,
} from '@refinedev/react-router-v6';
import '@refinedev/antd/dist/reset.css';
import { App as AntdApp, ConfigProvider } from 'antd';
import { BrowserRouter, Outlet, Route, Routes } from 'react-router-dom';
import { appwriteClient } from './utility';
import { authProvider } from './authProvider';
const App: React.FC = () => {
return (
<BrowserRouter>
<ConfigProvider theme={RefineThemes.Blue}>
<AntdApp>
<Refine
dataProvider={dataProvider(appwriteClient, {
databaseId: '<APPWRITE_DATABASE_ID>',
})}
liveProvider={liveProvider(appwriteClient, {
databaseId: '<APPWRITE_DATABASE_ID>',
})}
authProvider={authProvider}
routerProvider={routerProvider}
notificationProvider={useNotificationProvider}
>
<Routes>
<Route
element={
<Authenticated
fallback={
<CatchAllNavigate to="/login" />
}
>
<ThemedLayoutV2>
<Outlet />
</ThemedLayoutV2>
</Authenticated>
}
></Route>
<Route
element={
<Authenticated fallback={<Outlet />}>
<NavigateToResource resource="<APPWRITE_COLLECTION_ID>" />
</Authenticated>
}
>
<Route path="/login" element={<AuthPage />} />
<Route
path="/register"
element={<AuthPage type="register" />}
/>
</Route>
<Route
element={
<Authenticated>
<ThemedLayoutV2>
<Outlet />
</ThemedLayoutV2>
</Authenticated>
}
>
<Route path="*" element={<ErrorComponent />} />
</Route>
</Routes>
</Refine>
</AntdApp>
</ConfigProvider>
</BrowserRouter>
);
};
export default App;
```
{% /section %}
{% section #step-6 step=6 title="All set" %}
Run your project with `npm run dev -- --open --port 3000` and open [Localhost on Port 3000](http://localhost:3000) in your browser.
{% /section %}

View File

@@ -76,7 +76,7 @@
<li class="is-mobile-col-span-2">
<a href="/docs/tutorials/refine" class="aw-card is-normal">
<header class="u-flex u-cross-baseline u-gap-4">
<span class="icon-svelte aw-u-font-size-24" aria-hidden="true" />
<span class="aw-icon-refine aw-u-font-size-24" aria-hidden="true" />
<h4 class="aw-sub-body-500 aw-u-color-text-primary">Refine</h4>
</header>
<p class="aw-sub-body-400 u-margin-block-start-4">

View File

@@ -11,8 +11,13 @@ readtime: 10
In this tutorial, you will build admin panel app with Appwrite and [Refine](https://github.com/refinedev/refine).
![Create project screen](/images/docs/tutorials/refine/blog-admin-panel.png)
{% only_dark %}
![Create project screen](/images/docs/tutorials/refine/refine-admin-panel-dark.png)
{% /only_dark %}
{% only_light %}
![Create project screen](/images/docs/tutorials/refine/refine-admin-panel-light.png)
{% /only_light %}
# Concepts {% #concepts %}

View File

@@ -36,16 +36,19 @@ This allows the framework to identify resources from routes and efficiently hand
```ts
import { authProvider } from './authProvider';
import routerProvider from '@refinedev/react-router-v6';
import { BrowserRouter } from 'react-router-dom';
import { authProvider } from './authProvider';
...
<BrowserRouter>
<Refine
...
authProvider={authProvider}
routerProvider={routerProvider}
>
...
</BrowserRouter>
```
# Login page {% #login-page %}
@@ -117,7 +120,7 @@ const App: React.FC = () => {
</Authenticated>
}
>
<Route path="/login" element={<AuthPage />} />
<Route path="/login" element={<AuthPage forgotPasswordLink={false} />} />
<Route
path="/register"
element={<AuthPage type="register" />}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

View File

@@ -0,0 +1,3 @@
<svg width="120" height="120" viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg"><path d="M57.700 0.119 C 57.370 0.167,56.249 0.395,55.209 0.627 C 53.461 1.016,51.678 1.868,31.526 11.939 C 19.541 17.929,9.193 23.198,8.530 23.648 C 4.667 26.271,1.597 30.863,0.472 35.700 C 0.121 37.210,0.100 38.576,0.100 60.000 C 0.100 85.317,0.026 83.862,1.501 87.538 C 2.867 90.940,5.824 94.598,8.800 96.568 C 9.515 97.041,19.730 102.239,31.500 108.119 C 56.162 120.439,54.821 119.883,59.900 119.894 C 63.173 119.901,64.630 119.643,67.341 118.578 C 69.506 117.727,109.700 97.557,111.200 96.569 C 114.030 94.704,117.087 90.984,118.394 87.815 C 118.710 87.048,119.179 85.628,119.435 84.660 L 119.900 82.900 119.900 60.100 C 119.900 38.578,119.879 37.210,119.528 35.700 C 118.403 30.863,115.333 26.271,111.470 23.648 C 110.807 23.198,100.463 17.931,88.483 11.943 C 64.080 -0.252,65.205 0.225,60.600 0.097 C 59.335 0.062,58.030 0.072,57.700 0.119 M64.791 20.601 C 68.105 21.410,71.646 23.417,74.114 25.886 C 76.593 28.364,78.562 31.847,79.445 35.312 L 79.900 37.100 79.900 60.000 L 79.900 82.900 79.445 84.688 C 77.610 91.893,72.167 97.429,65.024 99.355 C 63.343 99.808,62.709 99.874,60.000 99.874 C 57.291 99.874,56.657 99.808,54.976 99.355 C 50.269 98.086,46.201 95.231,43.562 91.344 C 42.366 89.582,41.073 86.720,40.555 84.688 L 40.100 82.900 40.100 60.000 L 40.100 37.100 40.555 35.312 C 41.078 33.258,42.363 30.425,43.611 28.575 C 46.518 24.265,51.684 21.073,57.163 20.202 C 58.917 19.922,62.858 20.129,64.791 20.601 M57.902 30.235 C 55.184 30.753,52.260 33.048,51.033 35.627 C 48.145 41.695,51.871 48.808,58.477 49.835 C 63.908 50.679,68.990 46.961,69.835 41.523 C 70.333 38.317,69.340 35.304,67.018 32.982 C 64.564 30.528,61.386 29.571,57.902 30.235 " style="fill:#e4e4e7" ></path></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,3 @@
<svg width="120" height="120" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M57.700 0.119 C 57.370 0.167,56.249 0.395,55.209 0.627 C 53.461 1.016,51.678 1.868,31.526 11.939 C 19.541 17.929,9.193 23.198,8.530 23.648 C 4.667 26.271,1.597 30.863,0.472 35.700 C 0.121 37.210,0.100 38.576,0.100 60.000 C 0.100 85.317,0.026 83.862,1.501 87.538 C 2.867 90.940,5.824 94.598,8.800 96.568 C 9.515 97.041,19.730 102.239,31.500 108.119 C 56.162 120.439,54.821 119.883,59.900 119.894 C 63.173 119.901,64.630 119.643,67.341 118.578 C 69.506 117.727,109.700 97.557,111.200 96.569 C 114.030 94.704,117.087 90.984,118.394 87.815 C 118.710 87.048,119.179 85.628,119.435 84.660 L 119.900 82.900 119.900 60.100 C 119.900 38.578,119.879 37.210,119.528 35.700 C 118.403 30.863,115.333 26.271,111.470 23.648 C 110.807 23.198,100.463 17.931,88.483 11.943 C 64.080 -0.252,65.205 0.225,60.600 0.097 C 59.335 0.062,58.030 0.072,57.700 0.119 M64.791 20.601 C 68.105 21.410,71.646 23.417,74.114 25.886 C 76.593 28.364,78.562 31.847,79.445 35.312 L 79.900 37.100 79.900 60.000 L 79.900 82.900 79.445 84.688 C 77.610 91.893,72.167 97.429,65.024 99.355 C 63.343 99.808,62.709 99.874,60.000 99.874 C 57.291 99.874,56.657 99.808,54.976 99.355 C 50.269 98.086,46.201 95.231,43.562 91.344 C 42.366 89.582,41.073 86.720,40.555 84.688 L 40.100 82.900 40.100 60.000 L 40.100 37.100 40.555 35.312 C 41.078 33.258,42.363 30.425,43.611 28.575 C 46.518 24.265,51.684 21.073,57.163 20.202 C 58.917 19.922,62.858 20.129,64.791 20.601 M57.902 30.235 C 55.184 30.753,52.260 33.048,51.033 35.627 C 48.145 41.695,51.871 48.808,58.477 49.835 C 63.908 50.679,68.990 46.961,69.835 41.523 C 70.333 38.317,69.340 35.304,67.018 32.982 C 64.564 30.528,61.386 29.571,57.902 30.235 " fill="#56565C" stroke="#56565C" fill-rule="evenodd"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,3 @@
<svg width="120" height="120" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M57.700 0.119 C 57.370 0.167,56.249 0.395,55.209 0.627 C 53.461 1.016,51.678 1.868,31.526 11.939 C 19.541 17.929,9.193 23.198,8.530 23.648 C 4.667 26.271,1.597 30.863,0.472 35.700 C 0.121 37.210,0.100 38.576,0.100 60.000 C 0.100 85.317,0.026 83.862,1.501 87.538 C 2.867 90.940,5.824 94.598,8.800 96.568 C 9.515 97.041,19.730 102.239,31.500 108.119 C 56.162 120.439,54.821 119.883,59.900 119.894 C 63.173 119.901,64.630 119.643,67.341 118.578 C 69.506 117.727,109.700 97.557,111.200 96.569 C 114.030 94.704,117.087 90.984,118.394 87.815 C 118.710 87.048,119.179 85.628,119.435 84.660 L 119.900 82.900 119.900 60.100 C 119.900 38.578,119.879 37.210,119.528 35.700 C 118.403 30.863,115.333 26.271,111.470 23.648 C 110.807 23.198,100.463 17.931,88.483 11.943 C 64.080 -0.252,65.205 0.225,60.600 0.097 C 59.335 0.062,58.030 0.072,57.700 0.119 M64.791 20.601 C 68.105 21.410,71.646 23.417,74.114 25.886 C 76.593 28.364,78.562 31.847,79.445 35.312 L 79.900 37.100 79.900 60.000 L 79.900 82.900 79.445 84.688 C 77.610 91.893,72.167 97.429,65.024 99.355 C 63.343 99.808,62.709 99.874,60.000 99.874 C 57.291 99.874,56.657 99.808,54.976 99.355 C 50.269 98.086,46.201 95.231,43.562 91.344 C 42.366 89.582,41.073 86.720,40.555 84.688 L 40.100 82.900 40.100 60.000 L 40.100 37.100 40.555 35.312 C 41.078 33.258,42.363 30.425,43.611 28.575 C 46.518 24.265,51.684 21.073,57.163 20.202 C 58.917 19.922,62.858 20.129,64.791 20.601 M57.902 30.235 C 55.184 30.753,52.260 33.048,51.033 35.627 C 48.145 41.695,51.871 48.808,58.477 49.835 C 63.908 50.679,68.990 46.961,69.835 41.523 C 70.333 38.317,69.340 35.304,67.018 32.982 C 64.564 30.528,61.386 29.571,57.902 30.235 " fill-rule="evenodd"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB