version 20230116

This commit is contained in:
Guillaume RYCKELYNCK 2023-01-16 09:22:07 +01:00
commit 209b8c3b99
2046 changed files with 82759 additions and 0 deletions

162
.gitignore vendored Normal file
View File

@ -0,0 +1,162 @@
# ---> Python
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

3
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"recommendations": ["svelte.svelte-vscode"]
}

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"jupyter.kernels.filter": []
}

9
LICENSE Normal file
View File

@ -0,0 +1,9 @@
MIT License
Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

2
README.md Normal file
View File

@ -0,0 +1,2 @@
# raster-dl

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
[
{ "code": 51, "name": "MARNE"},
{ "code": 57, "name": "MOSELLE"},
{ "code": 67, "name": "BAS-RHIN"},
{ "code": 68, "name": "HAUT-RHIN"},
{ "code": 8, "name": "ARDENNES"},
{ "code": 54, "name": "MEURTHE-ET-MOSELLE"},
{ "code": 88, "name": "VOSGES"},
{ "code": 55, "name": "MEUSE"},
{ "code": 10, "name": "AUBE"},
{ "code": 52, "name": "HAUTE-MARNE"}
]

151
data/json/level_epci.json Normal file
View File

@ -0,0 +1,151 @@
[
{ "code": 200041622, "name": "CC Ardennes Thiérache"},
{ "code": 200040137, "name": "CC des Lacs de Champagne"},
{ "code": 200041630, "name": "Ardenne Métropole"},
{ "code": 200042992, "name": "CC Perthois-Bocage et Der"},
{ "code": 200066116, "name": "CC Argonne-Meuse"},
{ "code": 200066033, "name": "CC Sud Alsace Largue"},
{ "code": 200000545, "name": "CC des Portes de Romilly sur Seine"},
{ "code": 200067759, "name": "CC Vallées et Plateau d"Ardenne"},
{ "code": 240800920, "name": "CC de l"Argonne Ardennaise"},
{ "code": 200071041, "name": "CC du Chaourçois et du Val d"Armance"},
{ "code": 200068658, "name": "CA de Chaumont du Bassin Nogentais et du Bassin de Bologne Vignory Froncles"},
{ "code": 200069441, "name": "CC du Pays de Bitche"},
{ "code": 200072999, "name": "CC du Grand Langres"},
{ "code": 245701206, "name": "CC du Saulnois"},
{ "code": 200071777, "name": "CC d"Arcis, Mailly, Ramerupt"},
{ "code": 245100615, "name": "CC de la Grande Vallée de la Marne"},
{ "code": 245400676, "name": "Métropole du Grand Nancy"},
{ "code": 246701080, "name": "CC du Pays de Sainte-Odile"},
{ "code": 245400189, "name": "CC des Pays du Sel et du Vermois"},
{ "code": 200013050, "name": "CC Sauer-Pechelbronn"},
{ "code": 246700744, "name": "CC des Portes de Rosheim"},
{ "code": 200040178, "name": "CC de l"Outre-Forêt"},
{ "code": 200066041, "name": "CC Sundgau"},
{ "code": 200066850, "name": "CC des Paysages de la Champagne"},
{ "code": 200067643, "name": "CC Meurthe Mortagne Moselle"},
{ "code": 200069664, "name": "CC Meuse Rognon"},
{ "code": 200027308, "name": "CC d"Auberive Vingeanne et Montsaugeonnais"},
{ "code": 245400262, "name": "CA de Longwy"},
{ "code": 200066108, "name": "CC des Portes de Meuse"},
{ "code": 245400171, "name": "CC Moselle et Madon"},
{ "code": 200033868, "name": "CC des Ballons des Hautes-Vosges"},
{ "code": 200035772, "name": "CC du Pays du Saintois"},
{ "code": 200068377, "name": "CC de la Porte des Vosges Méridionales"},
{ "code": 245701271, "name": "CC du Pays Orne Moselle"},
{ "code": 245701404, "name": "CC du Pays Haut Val d"Alzette"},
{ "code": 246700306, "name": "CC de la Vallée de la Bruche"},
{ "code": 246800205, "name": "CC de la Vallée de Saint-Amarin"},
{ "code": 200067379, "name": "CC Côtes de Champagne et Val de Saulx"},
{ "code": 200067924, "name": "CC du Canton d"Erstein"},
{ "code": 200070126, "name": "CC Seine et Aube"},
{ "code": 200070563, "name": "CC Terres Touloises"},
{ "code": 240800821, "name": "CC Ardenne, Rives de Meuse"},
{ "code": 200066892, "name": "CC de Vendeuvre-Soulaines"},
{ "code": 200066140, "name": "CC de l"Aire à l"Argonne"},
{ "code": 246700967, "name": "CC de Sélestat"},
{ "code": 200069433, "name": "CC de Vezouze en Piémont"},
{ "code": 200066173, "name": "CC de Damvillers Spincourt"},
{ "code": 200066157, "name": "CC de Commercy - Void - Vaucouleurs"},
{ "code": 200049187, "name": "CA du Grand Verdun"},
{ "code": 241000405, "name": "CC de la Région de Bar sur Aube"},
{ "code": 241000488, "name": "CC de l"Orvin et de l"Ardusson"},
{ "code": 241000223, "name": "CC Forêts, Lacs, Terres en Champagne"},
{ "code": 245100979, "name": "CC du Sud Marnais"},
{ "code": 200068666, "name": "CA de Saint-Dizier Der et Blaise"},
{ "code": 245100888, "name": "CC de la Brie Champenoise"},
{ "code": 200066132, "name": "CC du Pays de Stenay et du Val Dunois"},
{ "code": 200043438, "name": "CC de la Moivre à la Coole"},
{ "code": 200042620, "name": "CC de la Région de Suippes"},
{ "code": 245400759, "name": "CC du Pays du Sanon"},
{ "code": 245700133, "name": "CC du District Urbain de Faulquemont (DUF)"},
{ "code": 200039865, "name": "Eurométropole de Metz"},
{ "code": 245400601, "name": "CC du Bassin de Pompey"},
{ "code": 200067957, "name": "CC Haut Chemin-Pays de Pange"},
{ "code": 200067650, "name": "CC Houve-Pays Boulageois"},
{ "code": 245501242, "name": "CC du Pays d"Etain"},
{ "code": 245501176, "name": "CC du Territoire de Fresnes en Woëvre"},
{ "code": 245501259, "name": "CC du Pays de Montmédy"},
{ "code": 200034718, "name": "CC de Vitry, Champagne et Der"},
{ "code": 200042703, "name": "CC de l"Argonne Champenoise"},
{ "code": 200041515, "name": "CC du Bassin de Pont-à-Mousson"},
{ "code": 245700695, "name": "CC de Cattenom et Environs"},
{ "code": 245700372, "name": "CA de Forbach Porte de France"},
{ "code": 245701222, "name": "CA du Val de Fensch"},
{ "code": 200066876, "name": "CA de Châlons-en-Champagne"},
{ "code": 200039949, "name": "CC Rives de Moselle"},
{ "code": 200067874, "name": "CA de Haguenau"},
{ "code": 200069003, "name": "CC du Barséquanais en Champagne"},
{ "code": 245700950, "name": "CC du Pays de Phalsbourg"},
{ "code": 245701354, "name": "CC de l"Arc Mosellan"},
{ "code": 200034270, "name": "CC du Pays de Barr"},
{ "code": 200041283, "name": "CC de la Plaine du Rhin"},
{ "code": 246700777, "name": "CC de la Vallée de Villé"},
{ "code": 246700843, "name": "CC de la Basse-Zorn"},
{ "code": 246701064, "name": "CC de la Région de Molsheim-Mutzig"},
{ "code": 246700959, "name": "CC du Pays de la Zorn"},
{ "code": 200030526, "name": "CC du Ried de Marckolsheim"},
{ "code": 245700398, "name": "CC de Freyming-Merlebach"},
{ "code": 246701098, "name": "CC du Pays de Niederbronn-les-Bains"},
{ "code": 200070290, "name": "CC Coeur du Pays Haut"},
{ "code": 200067502, "name": "CA Saint-Avold Synergie"},
{ "code": 200070746, "name": "CA Sarreguemines Confluences"},
{ "code": 200068369, "name": "CC de Mirecourt Dompaire"},
{ "code": 200068864, "name": "CC de la Mossig et du Vignoble"},
{ "code": 246700488, "name": "Eurométropole de Strasbourg"},
{ "code": 200034635, "name": "CC du Kochersberg"},
{ "code": 200036465, "name": "CC de Thann-Cernay"},
{ "code": 246800445, "name": "CC du Centre du Haut-Rhin"},
{ "code": 200066058, "name": "CA Saint-Louis Agglomération"},
{ "code": 200066835, "name": "CC de Sézanne-Sud Ouest Marnais"},
{ "code": 200043693, "name": "CC Terre Lorraine du Longuyonnais"},
{ "code": 200070738, "name": "CC Mad et Moselle"},
{ "code": 246700926, "name": "CC du Pays de Wissembourg"},
{ "code": 245701362, "name": "CA Portes de France-Thionville"},
{ "code": 246800551, "name": "CC de la Vallée de Kaysersberg"},
{ "code": 200071066, "name": "CA de Saint-Dié-des-Vosges"},
{ "code": 200006716, "name": "CC du Nogentais"},
{ "code": 200067783, "name": "CC de Hanau-La Petite Pierre"},
{ "code": 200068682, "name": "CC Terre d"Eau"},
{ "code": 200068773, "name": "CC des Vosges côté Sud Ouest"},
{ "code": 200033025, "name": "CA de Bar-le-Duc - Sud Meuse"},
{ "code": 200005957, "name": "CC de la Région de Rambervillers"},
{ "code": 200043156, "name": "CC du Pays Réthelois"},
{ "code": 200070589, "name": "CC de Seille et Grand Couronné"},
{ "code": 200066165, "name": "CC Val de Meuse - Voie Sacrée"},
{ "code": 200067486, "name": "CC Bouzonvillois-Trois Frontières"},
{ "code": 246800585, "name": "CC de la Vallée de Munster"},
{ "code": 245400510, "name": "CC du Pays de Colombey et du Sud Toulois"},
{ "code": 200069250, "name": "CA Troyes Champagne Métropole"},
{ "code": 200067213, "name": "CU du Grand Reims"},
{ "code": 200044253, "name": "CC du Bassin de Joinville en Champagne"},
{ "code": 200070332, "name": "CC des Savoir-Faire"},
{ "code": 200067684, "name": "CA Epernay, Coteaux et Plaine de Champagne"},
{ "code": 200034874, "name": "CC Côtes de Meuse Woëvre"},
{ "code": 246800676, "name": "CC de la Vallée de la Doller et du Soultzbach"},
{ "code": 200066009, "name": "CA Mulhouse Alsace Agglomération"},
{ "code": 246800577, "name": "CC du Pays de Ribeauvillé"},
{ "code": 246800395, "name": "CC du Val d"Argent"},
{ "code": 200071157, "name": "CC des Hautes Vosges"},
{ "code": 200070324, "name": "CC du Territoire de Lunéville à Baccarat"},
{ "code": 246800494, "name": "CC du Pays de Rouffach, Vignobles et Châteaux"},
{ "code": 245500327, "name": "CC du Sammiellois"},
{ "code": 200066025, "name": "CC Pays Rhin - Brisach"},
{ "code": 245701164, "name": "CC du Warndt"},
{ "code": 245200597, "name": "CC des Trois Forêts"},
{ "code": 246800726, "name": "CA Colmar Agglomération"},
{ "code": 200042000, "name": "CC Bruyères-Vallons des Vosges"},
{ "code": 240800847, "name": "CC des Portes du Luxembourg"},
{ "code": 240800862, "name": "CC des Crêtes Préardennaises"},
{ "code": 200070845, "name": "CC Orne Lorraine Confluences"},
{ "code": 245501184, "name": "CC du Pays de Revigny sur Ornain"},
{ "code": 200039907, "name": "CC du Sud Messin"},
{ "code": 200068757, "name": "CA d"Epinal"},
{ "code": 200068559, "name": "CC de l"Ouest Vosgien"},
{ "code": 200067841, "name": "CC de l"Alsace Bossue"},
{ "code": 246800569, "name": "CC de la Région de Guebwiller"},
{ "code": 241000447, "name": "CC du Pays d"Othe"},
{ "code": 200041325, "name": "CC du Pays Rhénan"},
{ "code": 200068112, "name": "CC du Pays de Saverne"},
{ "code": 200068146, "name": "CC Sarrebourg Moselle Sud"}
]

5
data/json/level_pnr.json Normal file
View File

@ -0,0 +1,5 @@
[{ "code": 5, "name": "BALLONS des VOSGES"},
{ "code": 24, "name": "LORRAINE"},
{ "code": 30, "name": "MONTAGNE de REIMS"},
{ "code": 48, "name": "VOSGES du NORD (hors fraction WISSEMBOURG et PHALSBOURG)"}
]

38
data/json/level_scot.json Normal file
View File

@ -0,0 +1,38 @@
[{ "code": 183, "name": "SCOT Nord Ardennes", "shortname": "Nord Ardennes"},
{ "code": 261, "name": "SCOT de la Région Rémoise", "shortname": "Région Rémoise"},
{ "code": 10247, "name": "SCOT du pays Barrois", "shortname": "Pays Barrois"},
{ "code": 494, "name": "SCOT Nord Meurthe et Moselle", "shortname": "Nord Meurthe et Moselle"},
{ "code": 10331, "name": "SCOT de l"arrondissement de Sarrebourg", "shortname": "Arrondissement de Sarrebourg"},
{ "code": 260, "name": "SCOT Châlons-en-Champagne", "shortname": "Châlons-en-Champagne"},
{ "code": 6828, "name": "SCOT du PETR d"Alsace Centrale", "shortname": "Selestat et sa Région"},
{ "code": 1037, "name": "SCOT de l"arrondissement de Sarreguemines", "shortname": "Arrondissement de Sarreguemines"},
{ "code": 10419, "name": "SCOT du Nord Haute-Marne", "shortname": "Nord Haute-Marne"},
{ "code": 99, "name": "SCOT du Verdunois", "shortname": "Verdunois"},
{ "code": 88999, "name": "SCOT Massif des Vosges", "shortname": "Massif des Vosges"},
{ "code": 123, "name": "SCOTAN", "shortname": "SCOTAN"},
{ "code": 10418, "name": "SCOT du pays de Chaumont", "shortname": "Pays de Chaumont"},
{ "code": 978, "name": "SCOT de Commercy", "shortname": "Commercy"},
{ "code": 10420, "name": "SCOT ADEVA pays Vitryat", "shortname": "ADEVA pays Vitryat"},
{ "code": 276, "name": "SCOT Bande Rhénane Nord", "shortname": "Bande Rhénane Nord"},
{ "code": 211, "name": "SCOT Région de Strasbourg (SCOTERS)", "shortname": "Région de Strasbourg (SCOTERS)"},
{ "code": 281, "name": "SCOT Rhin-Vignoble-Grand-Ballon", "shortname": "Rhin-Vignoble-Grand-Ballon"},
{ "code": 52999, "name": "SCOT du PETR du Pays de Langres", "shortname": "Pays de Langres"},
{ "code": 278, "name": "SCOT du PETR du Sundgau", "shortname": "Sundgau"},
{ "code": 6938, "name": "SCOT Bruche-Mossig", "shortname": "Bruche"},
{ "code": 51999, "name": "SCOT du Pays de Brie et Champagne", "shortname": ""},
{ "code": 102, "name": "SCOT de l"Agglomération Messine", "shortname": "Agglomération Messine"},
{ "code": 157, "name": "SCOT des Vosges centrales", "shortname": "Vosges centrales"},
{ "code": 279, "name": "SCOT Pays Thur Doller", "shortname": "Pays Thur Doller"},
{ "code": 1355, "name": "SCOT Val de Rosselle", "shortname": "Val de Rosselle"},
{ "code": 3041, "name": "SCOT Sud Meurthe-et-Moselle", "shortname": "Sud Meurthe-et-Moselle"},
{ "code": 234, "name": "SCOT des Territoires de l"Aube", "shortname": "Territoires de l"Aube"},
{ "code": 3367, "name": "SCOT Colmar-Rhin-Vosges", "shortname": "Colmar-Rhin-Vosges"},
{ "code": 126, "name": "SCOT Région de Saverne", "shortname": "Région de Saverne"},
{ "code": 212, "name": "SCOT Région mulhousienne", "shortname": "Région mulhousienne"},
{ "code": 10999, "name": "SCOT du PETR de Seine en Plaine Champenoise", "shortname": "PETR de Seine en Plaine Champenoise"},
{ "code": 283, "name": "SCOT du pays de Saint Louis et des Trois Frontières", "shortname": "Pays de Saint Louis et des Trois Frontières"},
{ "code": 1352, "name": "SCOT Agglomération Thionvilloise", "shortname": "Agglomération Thionvilloise"},
{ "code": 204, "name": "SCOT d"Epernay et sa région", "shortname": "Epernay et sa région"},
{ "code": 282, "name": "SCOT Montagne Vignoble Ried", "shortname": "Montagne Vignoble Ried"},
{ "code": 124, "name": "SCOT Piémont des Vosges", "shortname": "Piémont des Vosges"}
]

18
data/json/levels.json Normal file
View File

@ -0,0 +1,18 @@
[
{
"name": "Commune",
"code": "commune"
}, {
"name": "EPCI",
"code": "epci"
}, {
"name": "SCOT",
"code": "scot"
}, {
"name": "PNR",
"code": "pnr"
}, {
"name": "Département",
"code": "departement"
}
]

BIN
data/raster-dl.gpkg Normal file

Binary file not shown.

View File

@ -0,0 +1,14 @@
--SELECT d.fid id, d.FILE_IMG AS FILE, d.geom
--FROM dalles_ortho_67 d, communes c
--WHERE ST_INTERSECTS(d.geom, ST_BUFFER(c.geom, 500)) AND c.insee_com == '67180'
--SELECT c.fid AS id, ST_BUFFER(c.geom, 500) AS geom
--FROM communes c
--WHERE c.insee_com == '67180'
SELECT d.fid id, d.FILE_IMG AS FILE, d.geom
FROM dalles_ortho_67 d
WHERE ST_INTERSECTS(d.geom, (
SELECT ST_BUFFER(c.geom, 0) AS geom
FROM communes c
WHERE c.insee_com == '67180'))

149
python/eel/run.py Normal file
View File

@ -0,0 +1,149 @@
import os
import shutil
import eel
import geopandas as gpd
from shapely.geometry import Polygon
import matplotlib.pyplot as plt
import folium
@eel.expose
def get_extent_types():
"""Return the list of extends of level layer."""
return [
{
'name': 'Communes',
'value': 'communes',
'table': 'communes',
},
{
'name': 'EPCI',
'value': 'epci',
'table': 'epci',
},
{
'name': 'EPCI',
'value': 'pnr',
'table': 'pnr',
},
{
'name': 'SCOT',
'value': 'scot',
'table': 'scot',
}
]
@eel.expose
def get_extents(level='communes'):
"""Return the list of extends of level layer."""
gdf_level = gpd.read_file("../../data/raster-dl.gpkg", layer=level)
return gdf_level[['name', 'code']].to_dict(orient='records')
@eel.expose
def get_products(code=None, level=None, buffer=0, bbox=False):
"""Return the list of extends of level layer."""
if not code or not level:
return []
gdf_level = gpd.read_file("../../data/raster-dl.gpkg", layer=level)
level_feature = gdf_level[gdf_level['code'] == str(code)]
level_feature = level_feature[['geometry', 'code', 'name']]
if bbox:
bbox_feature = get_bbox(level_feature, buffer)
extent = bbox_feature
else:
level_feature['geometry']= level_feature.buffer(int(buffer))
bbox_feature = get_bbox(level_feature)
extent = level_feature
gdf_products = gpd.read_file("../../data/raster-dl.gpkg", layer='products')
products_seleted = gpd.sjoin(gdf_products, extent, how='inner', predicate='intersects')
products_seleted['code'] = products_seleted['code_left']
products_seleted['name'] = products_seleted['name_left']
products_seleted = products_seleted[['code', 'name', 'data_extent', 'data_product', 'data_date', 'data_resolution', 'data_compression', 'data_type', 'metadata_url', 'data_directory', 'data_url', 'layer_tiles', 'parent']]
return products_seleted.to_dict(orient='records')
@eel.expose
def get_map(code=None, level=None, tiles_layer=None, buffer=0, bbox=False):
"""Generate plot map and return the list of extents of level layer."""
if not code or not level or not tiles_layer:
return []
gdf_level = gpd.read_file("../../data/raster-dl.gpkg", layer=level)
level_feature = gdf_level[gdf_level['code'] == code]
level_feature = level_feature[['geometry', 'code', 'name']]
if bbox:
bbox_feature = get_bbox(level_feature, buffer)
extent = bbox_feature
else:
level_feature['geometry']= level_feature.buffer(int(buffer))
bbox_feature = get_bbox(level_feature)
extent = level_feature
gdf_dalles = gpd.read_file("../../data/raster-dl.gpkg", layer=tiles_layer)
dalles = gdf_dalles[['geometry', 'FILE_IMG', 'DALLE']]
dalles_seleted = gpd.sjoin(dalles, extent, how='inner', predicate='intersects')
# Generate plot map
fig = plt.figure(figsize=(6, 6))
spec = fig.add_gridspec(ncols=1, nrows=1)
plot_map = fig.add_subplot(spec[0, 0])
fig.suptitle('Selection des dalles sur {extent}'.format(extent=extent.iloc[0]['name']))
level_feature.plot(facecolor='green', edgecolor='black', alpha=0.5, ax=plot_map)
dalles_seleted.plot(facecolor='red', edgecolor='black', alpha=0.5, ax=plot_map)
if bbox:
bbox_feature.plot(facecolor='None', edgecolor='blue', linewidth=2, ax=plot_map)
plt.axis('off')
plt.savefig('./web/map.png')
# Generate map html file
map = level_feature.explore("code", name="extent", cmap=["green"], popup=False, tooltip=False, width=800, height=600, tiles="Stamen Terrain")
map = dalles_seleted.explore("FILE_IMG", m=map, name="tiles", cmap=["red"], popup=False, tooltip="DALLE", legend=False)
folium.LayerControl().add_to(map)
map.save("./web/map.html")
return dalles_seleted[['DALLE', 'FILE_IMG', 'code']].to_dict(orient='records')
def get_bbox(layer, buffer=0):
x_min, y_min, x_max, y_max = layer.total_bounds
bbox_polygon = Polygon([(x_min, y_min), (x_max, y_min), (x_max, y_max), (x_min, y_max)])
level_bbox = gpd.GeoDataFrame({'geometry': [bbox_polygon], 'name': layer.iloc[0]['name'], 'code': layer.iloc[0]['code']}, crs="EPSG:2154")
level_bbox['geometry']= level_bbox.buffer(int(buffer))
return level_bbox
def start_eel():
"""Start Eel."""
if os.path.isfile('./web/map.png'):
# os.remove('./web/map.png')
shutil.copyfile('./web/empty.png', './web/map.png')
directory = 'web'
app = 'chrome-app'
page = 'index.html'
eel.init(directory, ['.js', '.html', '.txt', '.htm', '.xhtml'])
try:
eel.start(page, mode=app, host='localhost', port=8080, size=(800, 600))
except EnvironmentError:
# If Chrome isn't found, fallback to Microsoft Edge on Win10 or greater
if sys.platform in ['win32', 'win64'] and int(platform.release()) >= 10:
eel.start(page, mode='edge', host='localhost', port=8080, size=(800, 600))
else:
raise
if __name__ == '__main__':
start_eel()

BIN
python/eel/web/empty.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
python/eel/web/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

146
python/eel/web/index.html Normal file
View File

@ -0,0 +1,146 @@
<!DOCTYPE html>
<html>
<head>
<title>Raster download</title>
<link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.css">
<link rel="stylesheet" href="./libs/bootstrap-icons/bootstrap-icons.css">
<style>
.hidden {
display: none;
}
</style>
</head>
<body class="m-5">
<div class="container">
<h2 class="mb-5">
<i class="bi-grid-3x3-gap-fill"></i>
Get tiles from administrative extent
</h2>
<form id="form">
<div class="row gx-1">
<div class="col-8">
<label class="form-label me-3">Choose a level:</label>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="level" id="commune" value="communes"
checked="checked">
<label class="form-check-label" for="commune">
Commune
</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="level" id="epci" value="epci">
<label class="form-check-label" for="epci">
EPCI
</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="level" id="pnr" value="pnr">
<label class="form-check-label" for="pnr">
PNR
</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="level" id="scot" value="scot">
<label class="form-check-label" for="scot">
SCOT
</label>
</div>
</div>
</div>
<div class="row gx-1 mt-3">
<div class="col">
<label for="extent-input" class="form-label">Choose an extent:</label>
<div class="d-flex">
<input type="text" id="extent-input" name="extent" list="extents-list" size="30" placeholder=""
class="form-control flex-grow-1">
<datalist id="extents-list">
</datalist>
<div id="loading-extents" class="spinner-border spinner-border-sm mt-2 ms-3 hidden"
role="status"></div>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col-6">
<label for="extent-buffer" class="form-label">Buffer (m):</label>
<input type="number" id="extent-buffer" name="buffer" size="10" placeholder="0"
class="form-control">
</div>
<div class="col-6">
<label for="bbox" class="form-label">BBox extent:</label>
<div class="form-check form-switch mt-2">
<input class="form-check-input" type="checkbox" role="switch" id="bbox">
<label class="form-check-label" for="bbox">Use BBOX to select tiles</label>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col">
<label class="form-label">
Productuct list:
<span id="loading-products" class="spinner-border spinner-border-sm ms-1 hidden"
role="status"></span>
</label>
<div id="products-list"></div>
</div>
</div>
<div id="error" class="alert alert-danger my-3 collapse" role="alert"></div>
<div class="row">
<div class="col">
<input type="button" id="clear" name="clear" value="Effacer"
class="btn btn-outline-dark mt-3 ms-3 float-end">
<input type="submit" id="submit" name="submit" value="Valider"
class="btn btn-outline-dark mt-3 float-end">
<button id="loading_bnt" class="btn btn-outline-dark mt-3 float-end hidden" type="button" disabled>
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
Loading...
</button>
</div>
</div>
</form>
<div class="row gx-3 mt-3">
<div class="col-6">
<div class="border rounded p-3 pb-5 mb-5">
<div class="d-flex">
<span class="flex-grow-1">List of tiles (<span id="nb_tiles">0</span>)</span>
<input type="button" id="download-files" name="download-files"
value="Download all files" class="btn btn-sm btn-outline-dark me-2">
<input type="button" id="download-files-list" name="download-files-list"
value="Download files list" class="btn btn-sm btn-outline-dark">
</div>
<ul class="list-group pb-5 mb-5" id="tiles-list">
<li class="list-group-item">Empty list</li>
</ul>
</div>
</div>
<div class="col-6">
<div class="border rounded py-3">
<p class="ms-3">Aperçu <span id="map-link" class="hidden">(<a href="./map.html" target="_blank"
class="link-primary">carte interactive</a>)</span></p>
<img src="./map.png" id="map-picture" class="img-fluid">
</div>
</div>
</div>
</div>
<!-- Include eel.js - note this file doesn't exist in the 'web' directory -->
<script type="text/javascript" src="/eel.js"></script>
<script type="text/javascript" src="./libs/jquery/jquery-3.6.3.min.js"></script>
<script type="text/javascript" src="./libs/bootstrap/js/bootstrap.bundle.min.js"></script>
<script type="text/javascript" src="./index.js"></script>
<script type="text/javascript">
</script>
</body>
</html>

322
python/eel/web/index.js Normal file
View File

@ -0,0 +1,322 @@
var extents = [];
var products = [];
var files_list = [];
const form = document.querySelector('#form');
const submit_btn = document.querySelector('#submit');
const loading_map = document.querySelector('#loading_bnt');
const loading_extents = document.querySelector('#loading-extents');
const loading_products = document.querySelector('#loading-products');
const extent_input = document.querySelector('#extent-input');
const error = document.querySelector('#error');
const map_picture = document.querySelector('#map-picture');
const nb_tiles = document.querySelector('#nb_tiles');
const tiles_list = document.querySelector('#tiles-list');
const extents_list = document.querySelector('#extents-list');
const products_list = document.querySelector('#products-list');
const extents_level = document.querySelectorAll("input[type=radio][name='level']");
const bbox_ckeckbox = document.querySelector('#bbox');
const extent_buffer = document.querySelector('#extent-buffer');
const clear = document.querySelector('#clear');
const map_link = document.querySelector('#map-link');
const download_files_list = document.querySelector('#download-files-list');
const download_files = document.querySelector('#download-files');
function loading_submit(on) {
on = on || false;
if (on) {
loading_map.classList.remove("hidden");
submit_btn.classList.add("hidden");
} else {
loading_map.classList.add("hidden");
submit_btn.classList.remove("hidden");
}
}
function displayError(message) {
message = message || false;
if (message) {
error.textContent = message;
error.classList.remove("collapse");
} else {
error.textContent = '';
error.classList.add("collapse");
}
}
async function get_map(code, level, product, buffer, bbox) {
tiles_layer = product['layer_tiles'] || 'dalles_ortho_1km';
tiles = await eel.get_map(code, level, tiles_layer, buffer, bbox)(); // Call a Python function
if (tiles.length) {
const tile_name_prefix = [product['data_extent'], product['data_date']].join('-');
var tile_name_sufix = '';
if (product['data_date'] == '2015') {
// 67-2015-0988-6877-LA93-0M20-E100.jp2
tile_name_sufix = ['LA93', '0M' + product['data_resolution'], 'E' + product['data_compression']].join('-');
} else {
// 67-2018-0988-6876-LA93-0M20-RVB.jp2
tile_name_sufix = ['LA93', '0M' + product['data_resolution'], product['data_type'].toUpperCase()].join('-');
}
nb_tiles.textContent = tiles.length
tiles_list.innerHTML = "";
for (var i=0, n=tiles.length; i<n; i++) {
tile_name = [tile_name_prefix, tiles[i]['DALLE'], tile_name_sufix].join('-');
tile_url = product['data_url'] + tile_name + '.jp2';
tiles_list.innerHTML += '<li class="list-group-item border border-0"><a href="' + tile_url + '" class="file_link">' + tile_name + '</a></li>';
// files_list.push({'name': tile_name, 'url': tile_url});
files_list.push(tile_name);
}
var d = new Date();
var image='./map.png?' + d.getMilliseconds();
map_picture.src = image;
} else {
map_picture.src = './empty.png';
nb_tiles.textContent = 0;
}
}
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
const downloadAllLinks = (links) => {
if (links.length == 0) return;
let delay = 100;
for (let i=0, n=links.length; i<n; i++) {
const link = links[i];
link.setAttribute('download', link.getAttribute('href'));
setTimeout(() => link.click(), delay);
delay += 2000;
}
}
async function get_extents(level) {
loading_extents.classList.remove("hidden");
extents = await eel.get_extents(level)(); // Call a Python function
extents_list.innerHTML = "";
for (var i=0, n=extents.length; i<n; i++) {
const option = new Option(extents[i]['name'], extents[i]['name']);
extents_list.appendChild(option);
}
loading_extents.classList.add("hidden");
}
function get_extent(search, extents) {
return extents.find((extent) => {
if (extent['name'].toLowerCase().includes(search)) {
return extent;
}
return false;
});
}
async function get_products(code, level, buffer, bbox) {
loading_products.classList.remove("hidden");
products = await eel.get_products(code, level, buffer, bbox)();
products.sort(function(a,b) {
return b.code < a.code
});
products_tree = {root: []};
for (var i=0, n=products.length; i<n; i++) {
const parent = products[i]['parent'];
if (!parent) {
products_tree['root'].push(products[i]);
} else {
if (!products_tree[parent]) {
products_tree[parent] = [];
}
products_tree[products[i]['parent']].push(products[i]);
}
}
products_list.innerHTML = "";
const products_root = products_tree['root'];
if (products_root.length) {
/*
for (var i=0, n=products_root.length; i<n; i++) {
var product = [];
product.push('<div class="form-check">');
product.push('<input class="form-check-input" type="radio" name="product" id="' + products_root[i]['code'] + '" value="' + products_root[i]['code'] + '"></input>');
product.push('<label class="form-check-label" for="' + products_root[i]['code'] + '">');
product.push(products_root[i]['code']);
product.push('</label>');
product.push('</div>');
const subproducts = products_tree[products_root[i]['code']];
if (subproducts && subproducts.length) {
for (var j=0, m=subproducts.length; j<m; j++) {
// var product = [];
product.push('<div class="form-check ms-3">');
product.push('<input class="form-check-input" type="radio" name="product" id="' + subproducts[j]['code'] + '" value="' + subproducts[j]['code'] + '"></input>');
product.push('<label class="form-check-label" for="' + subproducts[j]['code'] + '">');
product.push(subproducts[j]['code']);
product.push('</label>');
product.push('</div>');
}
}
products_list.innerHTML += product.join('\n');
}
*/
for (var i=0, n=products_root.length; i<n; i++) {
var root = products_root[i];
const children = products_tree[root['code']];
if (children.length == 1) {
root = children[0];
}
var product = [];
product.push('<div class="form-check">');
product.push('<input class="form-check-input" type="radio" name="product" id="' + root['code'] + '" value="' + root['code'] + '"></input>');
product.push('<label class="form-check-label fw-bold" for="' + root['code'] + '">');
product.push(root['name']);
product.push('<a href="' + root['metadata_url'] + '" target="_blank" class="text-dark"><i class="bi-info-circle-fill ms-3"></i></a>');
product.push('</label>');
product.push('</div>');
if (children && children.length > 1) {
for (var j=0, m=children.length; j<m; j++) {
const child = children[j];
product.push('<div class="form-check ms-5">');
product.push('<input class="form-check-input" type="radio" name="product" id="' + child['code'] + '" value="' + child['code'] + '"></input>');
product.push('<label class="form-check-label" for="' + child['code'] + '">');
product.push(child['name']);
product.push('<a href="' + child['metadata_url'] + '" target="_blank" class="text-dark"><i class="bi-info-circle-fill ms-3"></i></a>');
product.push('</label>');
product.push('</div>');
}
}
products_list.innerHTML += product.join('\n');
}
}
loading_products.classList.add("hidden");
}
function get_product(product_code, products) {
return products.find((product) => {
if (product['code'].toLowerCase().includes(product_code)) {
return product;
}
return false;
});
}
function clear_form() {
displayError(false);
extents_list.innerHTML = "";
extents_level.forEach(level => level.checked = false);
bbox_ckeckbox.checked = false;
tiles_list.innerHTML = '<li class="list-group-item border border-0">Empty list</li>';
map_picture.src = './empty.png';
nb_tiles.textContent = 0;
extent_input.value = '';
extent_buffer.value = 0;
submit_btn.disabled = true;
map_link.classList.add("hidden");
}
// On change extent level
extents_level.forEach(level => level.addEventListener('change', (e) => {
get_extents(e.target.value);
extent_input.value = '';
submit_btn.disabled = true;
}));
// On type extent name
extent_input.addEventListener('change', (e) => {
const product_checked = document.querySelector('input[name="product"]:checked');
submit_btn.disabled = extent_input.value.length < 3 && product_checked && product_checked.value;
const extent_name = extent_input.value.toLowerCase();
const level_checked = document.querySelector('input[name="level"]:checked');
const level = level_checked ? level_checked.value : false;
// console.log(level_checked.value)
if (extent_name && level) {
const extent = get_extent(extent_name, extents);
if (extent) {
var buffer = extent_buffer.value;
buffer = buffer ? parseInt(buffer) : 0;
const bbox = bbox_ckeckbox.checked;
console.log(extent_name, extent, level)
products = get_products(extent['code'], level, buffer, bbox);
} else {
displayError("Il y a une erreure dans l'emprise saisie.")
}
} else {
displayError("Il y a une erreure dans le formulaire. Merci de vérifier le niveau et le nom de l'emprise saisie.");
}
});
// On submit Form
form.addEventListener('submit', (e) => {
e.preventDefault();
loading_submit(true);
displayError(false);
map_link.classList.add("hidden");
const extent_name = extent_input.value.toLowerCase();
const level_checked = document.querySelector('input[name="level"]:checked');
const level = level_checked ? level_checked.value.toLowerCase() : false;
const product_checked = document.querySelector('input[name="product"]:checked');
const product_code = product_checked ? product_checked.value.toLowerCase() : false;
if (extent_name && level && product_code) {
const extent = get_extent(extent_name, extents);
const product = get_product(product_code, products);
if (extent) {
var buffer = extent_buffer.value;
buffer = buffer ? parseInt(buffer) : 0;
const bbox = bbox_ckeckbox.checked;
get_map(extent['code'], level, product, buffer, bbox).then(() => {
loading_submit(false);
map_link.classList.remove("hidden");
});
} else {
displayError("Il y a une erreure dans le formulaire. Merci de vérifier l'emprise saisie.")
loading_submit(false);
}
} else {
displayError("Il y a une erreure dans le formulaire. Merci de vérifier le niveau et le nom de l'emprise saisie.")
loading_submit(false);
}
});
// On clear form
clear.addEventListener('click', (e) => {
clear_form();
});
// On download_files_list
download_files_list.addEventListener('click', (e) => {
download('files.txt', files_list.join('\n'));
});
// On download_files
download_files.addEventListener('click', (e) => {
e.preventDefault();
const links = document.querySelectorAll('a.file_link');
downloadAllLinks(links);
});
// On load page
function init() {
// A GARDER ?
// extent_input = document.querySelector('#extent-input');
// extent_input.onfocus = function() { extent_input.value =''; };
clear_form();
}
init();

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-circle-fill" viewBox="0 0 16 16">
<path d="M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895Z"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-8.012 4.158c1.858 0 2.96-1.582 2.96-3.99V7.84c0-2.426-1.079-3.996-2.936-3.996-1.864 0-2.965 1.588-2.965 3.996v.328c0 2.42 1.09 3.99 2.941 3.99Z"/>
</svg>

After

Width:  |  Height:  |  Size: 479 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-circle" viewBox="0 0 16 16">
<path d="M7.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99ZM8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895Z"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Z"/>
</svg>

After

Width:  |  Height:  |  Size: 511 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-square-fill" viewBox="0 0 16 16">
<path d="M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895Z"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm5.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99Z"/>
</svg>

After

Width:  |  Height:  |  Size: 518 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-square" viewBox="0 0 16 16">
<path d="M7.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99ZM8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 585 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM9.283 4.002H7.971L6.072 5.385v1.271l1.834-1.318h.065V12h1.312V4.002Z"/>
</svg>

After

Width:  |  Height:  |  Size: 257 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM9.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383h1.312Z"/>
</svg>

After

Width:  |  Height:  |  Size: 287 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm7.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383h1.312Z"/>
</svg>

After

Width:  |  Height:  |  Size: 294 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-square" viewBox="0 0 16 16">
<path d="M9.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383h1.312Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 376 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-123" viewBox="0 0 16 16">
<path d="M2.873 11.297V4.142H1.699L0 5.379v1.137l1.64-1.18h.06v5.961h1.174Zm3.213-5.09v-.063c0-.618.44-1.169 1.196-1.169.676 0 1.174.44 1.174 1.106 0 .624-.42 1.101-.807 1.526L4.99 10.553v.744h4.78v-.99H6.643v-.069L8.41 8.252c.65-.724 1.237-1.332 1.237-2.27C9.646 4.849 8.723 4 7.308 4c-1.573 0-2.36 1.064-2.36 2.15v.057h1.138Zm6.559 1.883h.786c.823 0 1.374.481 1.379 1.179.01.707-.55 1.216-1.421 1.21-.77-.005-1.326-.419-1.379-.953h-1.095c.042 1.053.938 1.918 2.464 1.918 1.478 0 2.642-.839 2.62-2.144-.02-1.143-.922-1.651-1.551-1.714v-.063c.535-.09 1.347-.66 1.326-1.678-.026-1.053-.933-1.855-2.359-1.845-1.5.005-2.317.88-2.348 1.898h1.116c.032-.498.498-.944 1.206-.944.703 0 1.206.435 1.206 1.07.005.64-.504 1.106-1.2 1.106h-.75v.96Z"/>
</svg>

After

Width:  |  Height:  |  Size: 870 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM6.646 6.24c0-.691.493-1.306 1.336-1.306.756 0 1.313.492 1.313 1.236 0 .697-.469 1.23-.902 1.705l-2.971 3.293V12h5.344v-1.107H7.268v-.077l1.974-2.22.096-.107c.688-.763 1.287-1.428 1.287-2.43 0-1.266-1.031-2.215-2.613-2.215-1.758 0-2.637 1.19-2.637 2.402v.065h1.271v-.07Z"/>
</svg>

After

Width:  |  Height:  |  Size: 458 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM6.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306Z"/>
</svg>

After

Width:  |  Height:  |  Size: 480 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm4.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306Z"/>
</svg>

After

Width:  |  Height:  |  Size: 487 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-square" viewBox="0 0 16 16">
<path d="M6.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 569 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-8.082.414c.92 0 1.535.54 1.541 1.318.012.791-.615 1.36-1.588 1.354-.861-.006-1.482-.469-1.54-1.066H5.104c.047 1.177 1.05 2.144 2.754 2.144 1.653 0 2.954-.937 2.93-2.396-.023-1.278-1.031-1.846-1.734-1.916v-.07c.597-.1 1.505-.739 1.482-1.876-.03-1.177-1.043-2.074-2.637-2.062-1.675.006-2.59.984-2.625 2.12h1.248c.036-.556.557-1.054 1.348-1.054.785 0 1.348.486 1.348 1.195.006.715-.563 1.237-1.342 1.237h-.838v1.072h.879Z"/>
</svg>

After

Width:  |  Height:  |  Size: 608 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-circle" viewBox="0 0 16 16">
<path d="M7.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318Z"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Z"/>
</svg>

After

Width:  |  Height:  |  Size: 645 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm5.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318Z"/>
</svg>

After

Width:  |  Height:  |  Size: 637 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-square" viewBox="0 0 16 16">
<path d="M7.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 719 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM7.519 5.057c-.886 1.418-1.772 2.838-2.542 4.265v1.12H8.85V12h1.26v-1.559h1.007V9.334H10.11V4.002H8.176c-.218.352-.438.703-.657 1.055ZM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218Z"/>
</svg>

After

Width:  |  Height:  |  Size: 391 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-circle" viewBox="0 0 16 16">
<path d="M7.519 5.057c.22-.352.439-.703.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265ZM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218Z"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Z"/>
</svg>

After

Width:  |  Height:  |  Size: 433 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-square-fill" viewBox="0 0 16 16">
<path d="M6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218Z"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm5.519 5.057c.22-.352.439-.703.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265Z"/>
</svg>

After

Width:  |  Height:  |  Size: 440 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-square" viewBox="0 0 16 16">
<path d="M7.519 5.057c.22-.352.439-.703.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265ZM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 507 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-8.006 4.158c1.74 0 2.924-1.119 2.924-2.806 0-1.641-1.178-2.584-2.56-2.584-.897 0-1.442.421-1.612.68h-.064l.193-2.344h3.621V4.002H5.791L5.445 8.63h1.149c.193-.358.668-.809 1.435-.809.85 0 1.582.604 1.582 1.57 0 1.085-.779 1.682-1.57 1.682-.697 0-1.389-.31-1.53-1.031H5.276c.065 1.213 1.149 2.115 2.72 2.115Z"/>
</svg>

After

Width:  |  Height:  |  Size: 496 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 1 14 0A7 7 0 0 1 1 8Zm15 0A8 8 0 1 0 0 8a8 8 0 0 0 16 0Zm-8.006 4.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
</svg>

After

Width:  |  Height:  |  Size: 516 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm5.994 12.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
</svg>

After

Width:  |  Height:  |  Size: 523 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-square" viewBox="0 0 16 16">
<path d="M7.994 12.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 605 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM8.21 3.855c-1.868 0-3.116 1.395-3.116 4.407 0 1.183.228 2.039.597 2.642.569.926 1.477 1.254 2.409 1.254 1.629 0 2.847-1.013 2.847-2.783 0-1.676-1.254-2.555-2.508-2.555-1.125 0-1.752.61-1.98 1.155h-.082c-.012-1.946.727-3.036 1.805-3.036.802 0 1.213.457 1.312.815h1.29c-.06-.908-.962-1.899-2.573-1.899Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582Z"/>
</svg>

After

Width:  |  Height:  |  Size: 619 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM8.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582Z"/>
</svg>

After

Width:  |  Height:  |  Size: 643 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-square-fill" viewBox="0 0 16 16">
<path d="M8.111 7.863c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582Z"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm6.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Z"/>
</svg>

After

Width:  |  Height:  |  Size: 665 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-square" viewBox="0 0 16 16">
<path d="M8.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 732 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM5.37 5.11h3.972v.07L6.025 12H7.42l3.258-6.85V4.002H5.369v1.107Z"/>
</svg>

After

Width:  |  Height:  |  Size: 252 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM5.37 5.11V4.001h5.308V5.15L7.42 12H6.025l3.317-6.82v-.07H5.369Z"/>
</svg>

After

Width:  |  Height:  |  Size: 281 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm3.37 5.11V4.001h5.308V5.15L7.42 12H6.025l3.317-6.82v-.07H5.369Z"/>
</svg>

After

Width:  |  Height:  |  Size: 288 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-square" viewBox="0 0 16 16">
<path d="M5.37 5.11V4.001h5.308V5.15L7.42 12H6.025l3.317-6.82v-.07H5.369Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 370 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-5.03 1.803c0-1.248-.943-1.84-1.646-1.992v-.065c.598-.187 1.336-.72 1.336-1.781 0-1.225-1.084-2.121-2.654-2.121-1.57 0-2.66.896-2.66 2.12 0 1.044.709 1.589 1.33 1.782v.065c-.697.152-1.647.732-1.647 2.003 0 1.39 1.19 2.344 2.953 2.344 1.77 0 2.989-.96 2.989-2.355Zm-4.347-3.71c0 .739.586 1.255 1.383 1.255s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23Zm-.281 3.645c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424Z"/>
</svg>

After

Width:  |  Height:  |  Size: 694 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-5.03 1.803c0 1.394-1.218 2.355-2.988 2.355-1.763 0-2.953-.955-2.953-2.344 0-1.271.95-1.851 1.647-2.003v-.065c-.621-.193-1.33-.738-1.33-1.781 0-1.225 1.09-2.121 2.66-2.121s2.654.896 2.654 2.12c0 1.061-.738 1.595-1.336 1.782v.065c.703.152 1.647.744 1.647 1.992Zm-4.347-3.71c0 .739.586 1.255 1.383 1.255s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23Zm-.281 3.645c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424Z"/>
</svg>

After

Width:  |  Height:  |  Size: 720 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-square-fill" viewBox="0 0 16 16">
<path d="M6.623 6.094c0 .738.586 1.254 1.383 1.254s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23Zm-.281 3.644c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424Z"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm8.97 9.803c0 1.394-1.218 2.355-2.988 2.355-1.763 0-2.953-.955-2.953-2.344 0-1.271.95-1.851 1.647-2.003v-.065c-.621-.193-1.33-.738-1.33-1.781 0-1.225 1.09-2.121 2.66-2.121s2.654.896 2.654 2.12c0 1.061-.738 1.595-1.336 1.782v.065c.703.152 1.647.744 1.647 1.992Z"/>
</svg>

After

Width:  |  Height:  |  Size: 741 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-square" viewBox="0 0 16 16">
<path d="M10.97 9.803c0 1.394-1.218 2.355-2.988 2.355-1.763 0-2.953-.955-2.953-2.344 0-1.271.95-1.851 1.647-2.003v-.065c-.621-.193-1.33-.738-1.33-1.781 0-1.225 1.09-2.121 2.66-2.121s2.654.896 2.654 2.12c0 1.061-.738 1.595-1.336 1.782v.065c.703.152 1.647.744 1.647 1.992Zm-4.347-3.71c0 .739.586 1.255 1.383 1.255s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23Zm-.281 3.645c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 809 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-8.223 4.146c2.104 0 3.123-1.464 3.123-4.3 0-3.147-1.459-4.014-2.97-4.014-1.63 0-2.871 1.02-2.871 2.73 0 1.706 1.171 2.667 2.566 2.667 1.06 0 1.7-.557 1.934-1.184h.076c.047 1.67-.475 3.023-1.834 3.023-.71 0-1.149-.363-1.248-.72H5.258c.094.908.926 1.798 2.52 1.798Zm.118-3.972c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
</svg>

After

Width:  |  Height:  |  Size: 575 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-8.223 4.146c-1.593 0-2.425-.89-2.52-1.798h1.296c.1.357.539.72 1.248.72 1.36 0 1.88-1.353 1.834-3.023h-.076c-.235.627-.873 1.184-1.934 1.184-1.395 0-2.566-.961-2.566-2.666 0-1.711 1.242-2.731 2.87-2.731 1.512 0 2.971.867 2.971 4.014 0 2.836-1.02 4.3-3.123 4.3Zm.118-3.972c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
</svg>

After

Width:  |  Height:  |  Size: 600 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-square-fill" viewBox="0 0 16 16">
<path d="M7.895 8.174c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm5.777 12.146c-1.593 0-2.425-.89-2.52-1.798h1.296c.1.357.539.72 1.248.72 1.36 0 1.88-1.353 1.834-3.023h-.076c-.235.627-.873 1.184-1.934 1.184-1.395 0-2.566-.961-2.566-2.666 0-1.711 1.242-2.731 2.87-2.731 1.512 0 2.971.867 2.971 4.014 0 2.836-1.02 4.3-3.123 4.3Z"/>
</svg>

After

Width:  |  Height:  |  Size: 623 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-square" viewBox="0 0 16 16">
<path d="M7.777 12.146c-1.593 0-2.425-.89-2.52-1.798h1.296c.1.357.539.72 1.248.72 1.36 0 1.88-1.353 1.834-3.023h-.076c-.235.627-.873 1.184-1.934 1.184-1.395 0-2.566-.961-2.566-2.666 0-1.711 1.242-2.731 2.87-2.731 1.512 0 2.971.867 2.971 4.014 0 2.836-1.02 4.3-3.123 4.3Zm.118-3.972c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 689 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-activity" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 2a.5.5 0 0 1 .47.33L10 12.036l1.53-4.208A.5.5 0 0 1 12 7.5h3.5a.5.5 0 0 1 0 1h-3.15l-1.88 5.17a.5.5 0 0 1-.94 0L6 3.964 4.47 8.171A.5.5 0 0 1 4 8.5H.5a.5.5 0 0 1 0-1h3.15l1.88-5.17A.5.5 0 0 1 6 2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 367 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-airplane-engines-fill" viewBox="0 0 16 16">
<path d="M8 0c-.787 0-1.292.592-1.572 1.151A4.347 4.347 0 0 0 6 3v3.691l-2 1V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.191l-1.17.585A1.5 1.5 0 0 0 0 10.618V12a.5.5 0 0 0 .582.493l1.631-.272.313.937a.5.5 0 0 0 .948 0l.405-1.214 2.21-.369.375 2.253-1.318 1.318A.5.5 0 0 0 5.5 16h5a.5.5 0 0 0 .354-.854l-1.318-1.318.375-2.253 2.21.369.405 1.214a.5.5 0 0 0 .948 0l.313-.937 1.63.272A.5.5 0 0 0 16 12v-1.382a1.5 1.5 0 0 0-.83-1.342L14 8.691V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v.191l-2-1V3c0-.568-.14-1.271-.428-1.849C9.292.591 8.787 0 8 0Z"/>
</svg>

After

Width:  |  Height:  |  Size: 690 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-airplane-engines" viewBox="0 0 16 16">
<path d="M8 0c-.787 0-1.292.592-1.572 1.151A4.347 4.347 0 0 0 6 3v3.691l-2 1V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.191l-1.17.585A1.5 1.5 0 0 0 0 10.618V12a.5.5 0 0 0 .582.493l1.631-.272.313.937a.5.5 0 0 0 .948 0l.405-1.214 2.21-.369.375 2.253-1.318 1.318A.5.5 0 0 0 5.5 16h5a.5.5 0 0 0 .354-.854l-1.318-1.318.375-2.253 2.21.369.405 1.214a.5.5 0 0 0 .948 0l.313-.937 1.63.272A.5.5 0 0 0 16 12v-1.382a1.5 1.5 0 0 0-.83-1.342L14 8.691V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v.191l-2-1V3c0-.568-.14-1.271-.428-1.849C9.292.591 8.787 0 8 0ZM7 3c0-.432.11-.979.322-1.401C7.542 1.159 7.787 1 8 1c.213 0 .458.158.678.599C8.889 2.02 9 2.569 9 3v4a.5.5 0 0 0 .276.447l5.448 2.724a.5.5 0 0 1 .276.447v.792l-5.418-.903a.5.5 0 0 0-.575.41l-.5 3a.5.5 0 0 0 .14.437l.646.646H6.707l.647-.646a.5.5 0 0 0 .14-.436l-.5-3a.5.5 0 0 0-.576-.411L1 11.41v-.792a.5.5 0 0 1 .276-.447l5.448-2.724A.5.5 0 0 0 7 7V3Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-airplane-fill" viewBox="0 0 16 16">
<path d="M6.428 1.151C6.708.591 7.213 0 8 0s1.292.592 1.572 1.151C9.861 1.73 10 2.431 10 3v3.691l5.17 2.585a1.5 1.5 0 0 1 .83 1.342V12a.5.5 0 0 1-.582.493l-5.507-.918-.375 2.253 1.318 1.318A.5.5 0 0 1 10.5 16h-5a.5.5 0 0 1-.354-.854l1.319-1.318-.376-2.253-5.507.918A.5.5 0 0 1 0 12v-1.382a1.5 1.5 0 0 1 .83-1.342L6 6.691V3c0-.568.14-1.271.428-1.849Z"/>
</svg>

After

Width:  |  Height:  |  Size: 493 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-airplane" viewBox="0 0 16 16">
<path d="M6.428 1.151C6.708.591 7.213 0 8 0s1.292.592 1.572 1.151C9.861 1.73 10 2.431 10 3v3.691l5.17 2.585a1.5 1.5 0 0 1 .83 1.342V12a.5.5 0 0 1-.582.493l-5.507-.918-.375 2.253 1.318 1.318A.5.5 0 0 1 10.5 16h-5a.5.5 0 0 1-.354-.854l1.319-1.318-.376-2.253-5.507.918A.5.5 0 0 1 0 12v-1.382a1.5 1.5 0 0 1 .83-1.342L6 6.691V3c0-.568.14-1.271.428-1.849Zm.894.448C7.111 2.02 7 2.569 7 3v4a.5.5 0 0 1-.276.447l-5.448 2.724a.5.5 0 0 0-.276.447v.792l5.418-.903a.5.5 0 0 1 .575.41l.5 3a.5.5 0 0 1-.14.437L6.708 15h2.586l-.647-.646a.5.5 0 0 1-.14-.436l.5-3a.5.5 0 0 1 .576-.411L15 11.41v-.792a.5.5 0 0 0-.276-.447L9.276 7.447A.5.5 0 0 1 9 7V3c0-.432-.11-.979-.322-1.401C8.458 1.159 8.213 1 8 1c-.213 0-.458.158-.678.599Z"/>
</svg>

After

Width:  |  Height:  |  Size: 849 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-alarm-fill" viewBox="0 0 16 16">
<path d="M6 .5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1H9v1.07a7.001 7.001 0 0 1 3.274 12.474l.601.602a.5.5 0 0 1-.707.708l-.746-.746A6.97 6.97 0 0 1 8 16a6.97 6.97 0 0 1-3.422-.892l-.746.746a.5.5 0 0 1-.707-.708l.602-.602A7.001 7.001 0 0 1 7 2.07V1h-.5A.5.5 0 0 1 6 .5zm2.5 5a.5.5 0 0 0-1 0v3.362l-1.429 2.38a.5.5 0 1 0 .858.515l1.5-2.5A.5.5 0 0 0 8.5 9V5.5zM.86 5.387A2.5 2.5 0 1 1 4.387 1.86 8.035 8.035 0 0 0 .86 5.387zM11.613 1.86a2.5 2.5 0 1 1 3.527 3.527 8.035 8.035 0 0 0-3.527-3.527z"/>
</svg>

After

Width:  |  Height:  |  Size: 626 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-alarm" viewBox="0 0 16 16">
<path d="M8.5 5.5a.5.5 0 0 0-1 0v3.362l-1.429 2.38a.5.5 0 1 0 .858.515l1.5-2.5A.5.5 0 0 0 8.5 9V5.5z"/>
<path d="M6.5 0a.5.5 0 0 0 0 1H7v1.07a7.001 7.001 0 0 0-3.273 12.474l-.602.602a.5.5 0 0 0 .707.708l.746-.746A6.97 6.97 0 0 0 8 16a6.97 6.97 0 0 0 3.422-.892l.746.746a.5.5 0 0 0 .707-.708l-.601-.602A7.001 7.001 0 0 0 9 2.07V1h.5a.5.5 0 0 0 0-1h-3zm1.038 3.018a6.093 6.093 0 0 1 .924 0 6 6 0 1 1-.924 0zM0 3.5c0 .753.333 1.429.86 1.887A8.035 8.035 0 0 1 4.387 1.86 2.5 2.5 0 0 0 0 3.5zM13.5 1c-.753 0-1.429.333-1.887.86a8.035 8.035 0 0 1 3.527 3.527A2.5 2.5 0 0 0 13.5 1z"/>
</svg>

After

Width:  |  Height:  |  Size: 711 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-alexa" viewBox="0 0 16 16">
<path d="M7.996 0A7.998 7.998 0 0 0 0 8a8 8 0 0 0 6.93 7.93v-1.613a1.06 1.06 0 0 0-.717-1.008A5.602 5.602 0 0 1 2.4 7.865 5.579 5.579 0 0 1 8.054 2.4a5.599 5.599 0 0 1 5.535 5.81l-.002.046a6.116 6.116 0 0 1-.012.192l-.005.061a4.85 4.85 0 0 1-.033.284l-.01.068c-.685 4.516-6.564 7.054-6.596 7.068A7.998 7.998 0 0 0 15.992 8 7.998 7.998 0 0 0 7.996.001Z"/>
</svg>

After

Width:  |  Height:  |  Size: 487 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-align-bottom" viewBox="0 0 16 16">
<rect width="4" height="12" x="6" y="1" rx="1"/>
<path d="M1.5 14a.5.5 0 0 0 0 1v-1zm13 1a.5.5 0 0 0 0-1v1zm-13 0h13v-1h-13v1z"/>
</svg>

After

Width:  |  Height:  |  Size: 271 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-align-center" viewBox="0 0 16 16">
<path d="M8 1a.5.5 0 0 1 .5.5V6h-1V1.5A.5.5 0 0 1 8 1zm0 14a.5.5 0 0 1-.5-.5V10h1v4.5a.5.5 0 0 1-.5.5zM2 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V7z"/>
</svg>

After

Width:  |  Height:  |  Size: 315 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-align-end" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M14.5 1a.5.5 0 0 0-.5.5v13a.5.5 0 0 0 1 0v-13a.5.5 0 0 0-.5-.5z"/>
<path d="M13 7a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V7z"/>
</svg>

After

Width:  |  Height:  |  Size: 318 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-align-middle" viewBox="0 0 16 16">
<path d="M6 13a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v10zM1 8a.5.5 0 0 0 .5.5H6v-1H1.5A.5.5 0 0 0 1 8zm14 0a.5.5 0 0 1-.5.5H10v-1h4.5a.5.5 0 0 1 .5.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 316 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-align-start" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M1.5 1a.5.5 0 0 1 .5.5v13a.5.5 0 0 1-1 0v-13a.5.5 0 0 1 .5-.5z"/>
<path d="M3 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V7z"/>
</svg>

After

Width:  |  Height:  |  Size: 318 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-align-top" viewBox="0 0 16 16">
<rect width="4" height="12" rx="1" transform="matrix(1 0 0 -1 6 15)"/>
<path d="M1.5 2a.5.5 0 0 1 0-1v1zm13-1a.5.5 0 0 1 0 1V1zm-13 0h13v1h-13V1z"/>
</svg>

After

Width:  |  Height:  |  Size: 287 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-alipay" viewBox="0 0 16 16">
<path d="M2.541 0H13.5a2.551 2.551 0 0 1 2.54 2.563v8.297c-.006 0-.531-.046-2.978-.813-.412-.14-.916-.327-1.479-.536-.303-.113-.624-.232-.957-.353a12.98 12.98 0 0 0 1.325-3.373H8.822V4.649h3.831v-.634h-3.83V2.121H7.26c-.274 0-.274.273-.274.273v1.621H3.11v.634h3.875v1.136h-3.2v.634H9.99c-.227.789-.532 1.53-.894 2.202-2.013-.67-4.161-1.212-5.51-.878-.864.214-1.42.597-1.746.998-1.499 1.84-.424 4.633 2.741 4.633 1.872 0 3.675-1.053 5.072-2.787 2.08 1.008 6.37 2.738 6.387 2.745v.105A2.551 2.551 0 0 1 13.5 16H2.541A2.552 2.552 0 0 1 0 13.437V2.563A2.552 2.552 0 0 1 2.541 0Z"/>
<path d="M2.309 9.27c-1.22 1.073-.49 3.034 1.978 3.034 1.434 0 2.868-.925 3.994-2.406-1.602-.789-2.959-1.353-4.425-1.207-.397.04-1.14.217-1.547.58Z"/>
</svg>

After

Width:  |  Height:  |  Size: 864 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-alt" viewBox="0 0 16 16">
<path d="M1 13.5a.5.5 0 0 0 .5.5h3.797a.5.5 0 0 0 .439-.26L11 3h3.5a.5.5 0 0 0 0-1h-3.797a.5.5 0 0 0-.439.26L5 13H1.5a.5.5 0 0 0-.5.5zm10 0a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 0-1h-3a.5.5 0 0 0-.5.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 326 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-amd" viewBox="0 0 16 16">
<path d="m.334 0 4.358 4.359h7.15v7.15l4.358 4.358V0H.334ZM.2 9.72l4.487-4.488v6.281h6.28L6.48 16H.2V9.72Z"/>
</svg>

After

Width:  |  Height:  |  Size: 240 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-android" viewBox="0 0 16 16">
<path d="M2.76 3.061a.5.5 0 0 1 .679.2l1.283 2.352A8.94 8.94 0 0 1 8 5a8.94 8.94 0 0 1 3.278.613l1.283-2.352a.5.5 0 1 1 .878.478l-1.252 2.295C14.475 7.266 16 9.477 16 12H0c0-2.523 1.525-4.734 3.813-5.966L2.56 3.74a.5.5 0 0 1 .2-.678ZM5 10a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm6 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 438 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-android2" viewBox="0 0 16 16">
<path d="m10.213 1.471.691-1.26c.046-.083.03-.147-.048-.192-.085-.038-.15-.019-.195.058l-.7 1.27A4.832 4.832 0 0 0 8.005.941c-.688 0-1.34.135-1.956.404l-.7-1.27C5.303 0 5.239-.018 5.154.02c-.078.046-.094.11-.049.193l.691 1.259a4.25 4.25 0 0 0-1.673 1.476A3.697 3.697 0 0 0 3.5 5.02h9c0-.75-.208-1.44-.623-2.072a4.266 4.266 0 0 0-1.664-1.476ZM6.22 3.303a.367.367 0 0 1-.267.11.35.35 0 0 1-.263-.11.366.366 0 0 1-.107-.264.37.37 0 0 1 .107-.265.351.351 0 0 1 .263-.11c.103 0 .193.037.267.11a.36.36 0 0 1 .112.265.36.36 0 0 1-.112.264Zm4.101 0a.351.351 0 0 1-.262.11.366.366 0 0 1-.268-.11.358.358 0 0 1-.112-.264c0-.103.037-.191.112-.265a.367.367 0 0 1 .268-.11c.104 0 .19.037.262.11a.367.367 0 0 1 .107.265c0 .102-.035.19-.107.264ZM3.5 11.77c0 .294.104.544.311.75.208.204.46.307.76.307h.758l.01 2.182c0 .276.097.51.292.703a.961.961 0 0 0 .7.288.973.973 0 0 0 .71-.288.95.95 0 0 0 .292-.703v-2.182h1.343v2.182c0 .276.097.51.292.703a.972.972 0 0 0 .71.288.973.973 0 0 0 .71-.288.95.95 0 0 0 .292-.703v-2.182h.76c.291 0 .54-.103.749-.308.207-.205.311-.455.311-.75V5.365h-9v6.404Zm10.495-6.587a.983.983 0 0 0-.702.278.91.91 0 0 0-.293.685v4.063c0 .271.098.501.293.69a.97.97 0 0 0 .702.284c.28 0 .517-.095.712-.284a.924.924 0 0 0 .293-.69V6.146a.91.91 0 0 0-.293-.685.995.995 0 0 0-.712-.278Zm-12.702.283a.985.985 0 0 1 .712-.283c.273 0 .507.094.702.283a.913.913 0 0 1 .293.68v4.063a.932.932 0 0 1-.288.69.97.97 0 0 1-.707.284.986.986 0 0 1-.712-.284.924.924 0 0 1-.293-.69V6.146c0-.264.098-.491.293-.68Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-app-indicator" viewBox="0 0 16 16">
<path d="M5.5 2A3.5 3.5 0 0 0 2 5.5v5A3.5 3.5 0 0 0 5.5 14h5a3.5 3.5 0 0 0 3.5-3.5V8a.5.5 0 0 1 1 0v2.5a4.5 4.5 0 0 1-4.5 4.5h-5A4.5 4.5 0 0 1 1 10.5v-5A4.5 4.5 0 0 1 5.5 1H8a.5.5 0 0 1 0 1H5.5z"/>
<path d="M16 3a3 3 0 1 1-6 0 3 3 0 0 1 6 0z"/>
</svg>

After

Width:  |  Height:  |  Size: 387 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-app" viewBox="0 0 16 16">
<path d="M11 2a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3V5a3 3 0 0 1 3-3h6zM5 1a4 4 0 0 0-4 4v6a4 4 0 0 0 4 4h6a4 4 0 0 0 4-4V5a4 4 0 0 0-4-4H5z"/>
</svg>

After

Width:  |  Height:  |  Size: 282 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-apple" viewBox="0 0 16 16">
<path d="M11.182.008C11.148-.03 9.923.023 8.857 1.18c-1.066 1.156-.902 2.482-.878 2.516.024.034 1.52.087 2.475-1.258.955-1.345.762-2.391.728-2.43Zm3.314 11.733c-.048-.096-2.325-1.234-2.113-3.422.212-2.189 1.675-2.789 1.698-2.854.023-.065-.597-.79-1.254-1.157a3.692 3.692 0 0 0-1.563-.434c-.108-.003-.483-.095-1.254.116-.508.139-1.653.589-1.968.607-.316.018-1.256-.522-2.267-.665-.647-.125-1.333.131-1.824.328-.49.196-1.422.754-2.074 2.237-.652 1.482-.311 3.83-.067 4.56.244.729.625 1.924 1.273 2.796.576.984 1.34 1.667 1.659 1.899.319.232 1.219.386 1.843.067.502-.308 1.408-.485 1.766-.472.357.013 1.061.154 1.782.539.571.197 1.111.115 1.652-.105.541-.221 1.324-1.059 2.238-2.758.347-.79.505-1.217.473-1.282Z"/>
<path d="M11.182.008C11.148-.03 9.923.023 8.857 1.18c-1.066 1.156-.902 2.482-.878 2.516.024.034 1.52.087 2.475-1.258.955-1.345.762-2.391.728-2.43Zm3.314 11.733c-.048-.096-2.325-1.234-2.113-3.422.212-2.189 1.675-2.789 1.698-2.854.023-.065-.597-.79-1.254-1.157a3.692 3.692 0 0 0-1.563-.434c-.108-.003-.483-.095-1.254.116-.508.139-1.653.589-1.968.607-.316.018-1.256-.522-2.267-.665-.647-.125-1.333.131-1.824.328-.49.196-1.422.754-2.074 2.237-.652 1.482-.311 3.83-.067 4.56.244.729.625 1.924 1.273 2.796.576.984 1.34 1.667 1.659 1.899.319.232 1.219.386 1.843.067.502-.308 1.408-.485 1.766-.472.357.013 1.061.154 1.782.539.571.197 1.111.115 1.652-.105.541-.221 1.324-1.059 2.238-2.758.347-.79.505-1.217.473-1.282Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-archive-fill" viewBox="0 0 16 16">
<path d="M12.643 15C13.979 15 15 13.845 15 12.5V5H1v7.5C1 13.845 2.021 15 3.357 15h9.286zM5.5 7h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1zM.8 1a.8.8 0 0 0-.8.8V3a.8.8 0 0 0 .8.8h14.4A.8.8 0 0 0 16 3V1.8a.8.8 0 0 0-.8-.8H.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 359 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-archive" viewBox="0 0 16 16">
<path d="M0 2a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1v7.5a2.5 2.5 0 0 1-2.5 2.5h-9A2.5 2.5 0 0 1 1 12.5V5a1 1 0 0 1-1-1V2zm2 3v7.5A1.5 1.5 0 0 0 3.5 14h9a1.5 1.5 0 0 0 1.5-1.5V5H2zm13-3H1v2h14V2zM5 7.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 401 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-90deg-down" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M4.854 14.854a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L4 13.293V3.5A2.5 2.5 0 0 1 6.5 1h8a.5.5 0 0 1 0 1h-8A1.5 1.5 0 0 0 5 3.5v9.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4z"/>
</svg>

After

Width:  |  Height:  |  Size: 350 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-90deg-left" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M1.146 4.854a.5.5 0 0 1 0-.708l4-4a.5.5 0 1 1 .708.708L2.707 4H12.5A2.5 2.5 0 0 1 15 6.5v8a.5.5 0 0 1-1 0v-8A1.5 1.5 0 0 0 12.5 5H2.707l3.147 3.146a.5.5 0 1 1-.708.708l-4-4z"/>
</svg>

After

Width:  |  Height:  |  Size: 349 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-90deg-right" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M14.854 4.854a.5.5 0 0 0 0-.708l-4-4a.5.5 0 0 0-.708.708L13.293 4H3.5A2.5 2.5 0 0 0 1 6.5v8a.5.5 0 0 0 1 0v-8A1.5 1.5 0 0 1 3.5 5h9.793l-3.147 3.146a.5.5 0 0 0 .708.708l4-4z"/>
</svg>

After

Width:  |  Height:  |  Size: 350 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-90deg-up" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M4.854 1.146a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L4 2.707V12.5A2.5 2.5 0 0 0 6.5 15h8a.5.5 0 0 0 0-1h-8A1.5 1.5 0 0 1 5 12.5V2.707l3.146 3.147a.5.5 0 1 0 .708-.708l-4-4z"/>
</svg>

After

Width:  |  Height:  |  Size: 349 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-bar-down" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M1 3.5a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 0 1h-13a.5.5 0 0 1-.5-.5zM8 6a.5.5 0 0 1 .5.5v5.793l2.146-2.147a.5.5 0 0 1 .708.708l-3 3a.5.5 0 0 1-.708 0l-3-3a.5.5 0 0 1 .708-.708L7.5 12.293V6.5A.5.5 0 0 1 8 6z"/>
</svg>

After

Width:  |  Height:  |  Size: 375 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-bar-left" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M12.5 15a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5ZM10 8a.5.5 0 0 1-.5.5H3.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L3.707 7.5H9.5a.5.5 0 0 1 .5.5Z"/>
</svg>

After

Width:  |  Height:  |  Size: 375 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-bar-right" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 8a.5.5 0 0 0 .5.5h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L12.293 7.5H6.5A.5.5 0 0 0 6 8Zm-2.5 7a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5Z"/>
</svg>

After

Width:  |  Height:  |  Size: 375 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-bar-up" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M8 10a.5.5 0 0 0 .5-.5V3.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 3.707V9.5a.5.5 0 0 0 .5.5zm-7 2.5a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 0 1h-13a.5.5 0 0 1-.5-.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 376 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-clockwise" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z"/>
<path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z"/>
</svg>

After

Width:  |  Height:  |  Size: 352 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-counterclockwise" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z"/>
<path d="M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z"/>
</svg>

After

Width:  |  Height:  |  Size: 359 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-down-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v5.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V4.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 321 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-down-circle" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v5.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V4.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 370 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-down-left-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 0 0 8a8 8 0 0 0 16 0zm-5.904-2.803a.5.5 0 1 1 .707.707L6.707 10h2.768a.5.5 0 0 1 0 1H5.5a.5.5 0 0 1-.5-.5V6.525a.5.5 0 0 1 1 0v2.768l4.096-4.096z"/>
</svg>

After

Width:  |  Height:  |  Size: 326 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-down-left-circle" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-5.904-2.854a.5.5 0 1 1 .707.708L6.707 9.95h2.768a.5.5 0 1 1 0 1H5.5a.5.5 0 0 1-.5-.5V6.475a.5.5 0 1 1 1 0v2.768l4.096-4.097z"/>
</svg>

After

Width:  |  Height:  |  Size: 377 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-down-left-square-fill" viewBox="0 0 16 16">
<path d="M2 16a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2zm8.096-10.803L6 9.293V6.525a.5.5 0 0 0-1 0V10.5a.5.5 0 0 0 .5.5h3.975a.5.5 0 0 0 0-1H6.707l4.096-4.096a.5.5 0 1 0-.707-.707z"/>
</svg>

After

Width:  |  Height:  |  Size: 363 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-down-left-square" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M15 2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2zM0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm10.096 3.146a.5.5 0 1 1 .707.708L6.707 9.95h2.768a.5.5 0 1 1 0 1H5.5a.5.5 0 0 1-.5-.5V6.475a.5.5 0 1 1 1 0v2.768l4.096-4.097z"/>
</svg>

After

Width:  |  Height:  |  Size: 451 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-down-left" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2 13.5a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 0-1H3.707L13.854 2.854a.5.5 0 0 0-.708-.708L3 12.293V7.5a.5.5 0 0 0-1 0v6z"/>
</svg>

After

Width:  |  Height:  |  Size: 286 B

Some files were not shown because too many files have changed in this diff Show More