Initial project

This commit is contained in:
liangping 2021-07-21 22:07:38 +08:00
commit ae30de057d
465 changed files with 52080 additions and 0 deletions

4
.prettierignore Normal file
View File

@ -0,0 +1,4 @@
dist
dev/assets/vendor
node_modules
src/node_modules

2
.browserslistrc Normal file
View File

@ -0,0 +1,2 @@
> 1%
last 2 versions

21
.eslintrc.js Normal file
View File

@ -0,0 +1,21 @@
module.exports = {
root: true,
env: {
node: true,
},
extends: ['plugin:vue/recommended', '@vue/airbnb'],
parserOptions: {
parser: 'babel-eslint',
},
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
semi: ['error', 'never'],
'max-len': 'off',
'linebreak-style': 'off',
camelcase: ['error', { properties: 'never', ignoreDestructuring: true, ignoreImports: true }],
'arrow-parens': ['error', 'as-needed'],
'vue/multiline-html-element-content-newline': 'off',
},
}

29
.gitignore vendored Normal file
View File

@ -0,0 +1,29 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode/*
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
!.vscode/*.code-snippets
# script
/vuexy-scripts
# Docs
/docs/.temp

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# Vuexy - Vuejs, React, HTML & Laravel Admin Dashboard Template
**Vuexy Vuejs, React, HTML & Laravel Admin Dashboard Template** is the most developer friendly & highly customizable Admin Dashboard Template based on Bootstrap 4, Bootstrap Vue & Reactstrap.

5
babel.config.js Normal file
View File

@ -0,0 +1,5 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset',
],
}

9
jsconfig.json Normal file
View File

@ -0,0 +1,9 @@
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
"@core/*": ["src/@core/*"],
}
}
}

87
package.json Normal file
View File

@ -0,0 +1,87 @@
{
"name": "vuexy-vuejs-react-html-laravel-admin-dashboard-template",
"version": "6.4.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"tauri:build": "vue-cli-service tauri:build",
"tauri:serve": "vue-cli-service tauri:serve"
},
"dependencies": {
"@casl/ability": "4.1.6",
"@casl/vue": "1.1.1",
"@fullcalendar/common": "5.x",
"@fullcalendar/core": "5.x",
"@fullcalendar/daygrid": "5.x",
"@fullcalendar/interaction": "5.x",
"@fullcalendar/list": "5.x",
"@fullcalendar/timegrid": "5.x",
"@fullcalendar/vue": "5.x",
"@vue/composition-api": "1.0.0-beta.22",
"@vueuse/core": "4.0.0",
"animate.css": "4.1.1",
"apexcharts": "3.23.0",
"axios": "0.21.1",
"axios-mock-adapter": "1.19.0",
"bootstrap": "4.6.0",
"bootstrap-vue": "2.21.1",
"chart.js": "2.9.4",
"core-js": "3.8.1",
"echarts": "4.8.0",
"jsonwebtoken": "8.5.1",
"leaflet": "1.6.0",
"portal-vue": "2.1.7",
"postcss-rtl": "1.7.3",
"prismjs": "1.19.0",
"swiper": "5.4.5",
"uuid": "8.3.2",
"vee-validate": "3.4.5",
"vue": "2.x",
"vue-apexcharts": "1.6.0",
"vue-autosuggest": "2.2.0",
"vue-awesome-swiper": "4.1.1",
"vue-chartjs": "3.5.0",
"vue-cleave-component": "2.1.3",
"vue-clipboard2": "0.3.1",
"vue-context": "6.0.0",
"vue-echarts": "5.0.0-beta.0",
"vue-feather-icons": "5.1.0",
"vue-flatpickr-component": "8.1.6",
"vue-form-wizard": "0.8.4",
"vue-good-table": "2.21.0",
"vue-i18n": "8.22.2",
"vue-perfect-scrollbar": "0.2.1",
"vue-prism-component": "1.1.1",
"vue-quill-editor": "3.0.6",
"vue-ripple-directive": "2.0.1",
"vue-router": "3.4.9",
"vue-select": "3.11.2",
"vue-slider-component": "3.2.11",
"vue-sweetalert2": "4.1.1",
"vue-toastification": "1.7.8",
"vue-tour": "1.5.0",
"vue-tree-halower": "1.8.3",
"vue2-leaflet": "2.5.2",
"vuedraggable": "2.24.3",
"vuex": "3.6.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.9",
"@vue/cli-plugin-eslint": "~4.5.9",
"@vue/cli-plugin-router": "~4.5.9",
"@vue/cli-plugin-vuex": "~4.5.9",
"@vue/cli-service": "~4.5.9",
"@vue/eslint-config-airbnb": "^5.3.0",
"@vuepress/plugin-medium-zoom": "^1.7.1",
"babel-eslint": "^10.0.3",
"eslint": "6.8.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-vue": "6.2.2",
"sass": "1.32.*",
"sass-loader": "^10.1.0",
"vue-cli-plugin-tauri": "~1.0.0-beta.3",
"vue-template-compiler": "2.x"
}
}

5
postcss.config.js Normal file
View File

@ -0,0 +1,5 @@
const rtl = require('postcss-rtl')
module.exports = {
plugins: [rtl()],
}

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

38
public/index.html Normal file
View File

@ -0,0 +1,38 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1" />
<!-- Splash Screen/Loader Styles -->
<link rel="stylesheet" type="text/css" href="<%= BASE_URL %>loader.css" />
<link rel="icon" href="<%= BASE_URL %>favicon.ico" />
<link
href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;1,400&display=swap"
rel="stylesheet"
/>
<title>Vuexy - Vuejs Admin Dashboard Template</title>
</head>
<body>
<noscript>
<strong
>We're sorry but Vuexy - Vuejs Admin Dashboard Template doesn't work properly without JavaScript enabled. Please
enable it to continue.</strong
>
</noscript>
<div id="loading-bg">
<div class="loading-logo">
<img src="<%= BASE_URL %>logo.png" alt="Logo" />
</div>
<div class="loading">
<div class="effect-1 effects"></div>
<div class="effect-2 effects"></div>
<div class="effect-3 effects"></div>
</div>
</div>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

84
public/loader.css Normal file
View File

@ -0,0 +1,84 @@
body {
margin: 0;
}
#loading-bg {
width: 100%;
height: 100%;
background: #fff;
display: block;
position: absolute;
}
.loading-logo {
position: absolute;
left: calc(50% - 45px);
top: 40%;
}
.loading {
position: absolute;
left: calc(50% - 35px);
top: 50%;
width: 55px;
height: 55px;
border-radius: 50%;
-webkit-box-sizing: border-box;
box-sizing: border-box;
border: 3px solid transparent;
}
.loading .effect-1,
.loading .effect-2 {
position: absolute;
width: 100%;
height: 100%;
border: 3px solid transparent;
border-left: 3px solid rgba(121, 97, 249, 1);
border-radius: 50%;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.loading .effect-1 {
animation: rotate 1s ease infinite;
}
.loading .effect-2 {
animation: rotateOpacity 1s ease infinite 0.1s;
}
.loading .effect-3 {
position: absolute;
width: 100%;
height: 100%;
border: 3px solid transparent;
border-left: 3px solid rgba(121, 97, 249, 1);
-webkit-animation: rotateOpacity 1s ease infinite 0.2s;
animation: rotateOpacity 1s ease infinite 0.2s;
border-radius: 50%;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.loading .effects {
transition: all 0.3s ease;
}
@keyframes rotate {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(1turn);
transform: rotate(1turn);
}
}
@keyframes rotateOpacity {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
opacity: 0.1;
}
100% {
-webkit-transform: rotate(1turn);
transform: rotate(1turn);
opacity: 1;
}
}

BIN
public/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1,142 @@
import { computed, watch } from '@vue/composition-api'
import store from '@/store'
export default function usAppConfig() {
// ------------------------------------------------
// isVerticalMenuCollapsed
// ------------------------------------------------
const isVerticalMenuCollapsed = computed({
get: () => store.state.verticalMenu.isVerticalMenuCollapsed,
set: val => {
store.commit('verticalMenu/UPDATE_VERTICAL_MENU_COLLAPSED', val)
},
})
// ------------------------------------------------
// RTL
// ------------------------------------------------
const isRTL = computed({
get: () => store.state.appConfig.layout.isRTL,
set: val => {
store.commit('appConfig/TOGGLE_RTL', val)
},
})
// ------------------------------------------------
// Skin
// ------------------------------------------------
const skin = computed({
get: () => store.state.appConfig.layout.skin,
set: val => {
store.commit('appConfig/UPDATE_SKIN', val)
},
})
const skinClasses = computed(() => {
if (skin.value === 'bordered') return 'bordered-layout'
if (skin.value === 'semi-dark') return 'semi-dark-layout'
// Do not return any class for dark layout because dark layout updates class in body
// Do not return any class for light layout as that is default layout
return null
})
// ------------------------------------------------
// routerTransition
// ------------------------------------------------
const routerTransition = computed({
get: () => store.state.appConfig.layout.routerTransition,
set: val => {
store.commit('appConfig/UPDATE_ROUTER_TRANSITION', val)
},
})
// *===============================================---*
// *--------- LAYOUT ---------------------------------------*
// *===============================================---*
// ------------------------------------------------
// layoutType
// ------------------------------------------------
const layoutType = computed({
get: () => store.state.appConfig.layout.type,
set: val => {
store.commit('appConfig/UPDATE_LAYOUT_TYPE', val)
},
})
// Reset skin if skin is semi-dark and move to horizontal layout
watch(layoutType, val => {
if (val === 'horizontal' && skin.value === 'semi-dark') skin.value = 'light'
})
// ------------------------------------------------
// Content Width (Full/Boxed)
// ------------------------------------------------
const contentWidth = computed({
get: () => store.state.appConfig.layout.contentWidth,
set: val => {
store.commit('appConfig/UPDATE_CONTENT_WIDTH', val)
},
})
// ------------------------------------------------
// isNavMenuHidden
// ------------------------------------------------
const isNavMenuHidden = computed({
get: () => store.state.appConfig.layout.menu.hidden,
set: val => {
store.commit('appConfig/UPDATE_NAV_MENU_HIDDEN', val)
},
})
// *===============================================---*
// *--------- NAVBAR ---------------------------------------*
// *===============================================---*
const navbarBackgroundColor = computed({
get: () => store.state.appConfig.layout.navbar.backgroundColor,
set: val => {
store.commit('appConfig/UPDATE_NAVBAR_CONFIG', { backgroundColor: val })
},
})
const navbarType = computed({
get: () => store.state.appConfig.layout.navbar.type,
set: val => {
store.commit('appConfig/UPDATE_NAVBAR_CONFIG', { type: val })
},
})
// *===============================================---*
// *--------- FOOTER ---------------------------------------*
// *===============================================---*
const footerType = computed({
get: () => store.state.appConfig.layout.footer.type,
set: val => {
store.commit('appConfig/UPDATE_FOOTER_CONFIG', { type: val })
},
})
return {
isVerticalMenuCollapsed,
isRTL,
skin,
skinClasses,
routerTransition,
// Navbar
navbarBackgroundColor,
navbarType,
// Footer
footerType,
// Layout
layoutType,
contentWidth,
isNavMenuHidden,
}
}

Binary file not shown.

View File

@ -0,0 +1,849 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="feather" horiz-adv-x="1024" >
<font-face
font-family="feather"
font-weight="500"
font-stretch="normal"
units-per-em="1024"
ascent="896"
descent="-128"
/>
<missing-glyph />
<glyph glyph-name="x" unicode="x" horiz-adv-x="1001"
d="M281 543q-27 -1 -53 -1h-83q-18 0 -36.5 -6t-32.5 -18.5t-23 -32t-9 -45.5v-76h912v41q0 16 -0.5 30t-0.5 18q0 13 -5 29t-17 29.5t-31.5 22.5t-49.5 9h-133v-97h-438v97zM955 310v-52q0 -23 0.5 -52t0.5 -58t-10.5 -47.5t-26 -30t-33 -16t-31.5 -4.5q-14 -1 -29.5 -0.5
t-29.5 0.5h-32l-45 128h-439l-44 -128h-29h-34q-20 0 -45 1q-25 0 -41 9.5t-25.5 23t-13.5 29.5t-4 30v167h911zM163 247q-12 0 -21 -8.5t-9 -21.5t9 -21.5t21 -8.5q13 0 22 8.5t9 21.5t-9 21.5t-22 8.5zM316 123q-8 -26 -14 -48q-5 -19 -10.5 -37t-7.5 -25t-3 -15t1 -14.5
t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-5 19 -11 39h-368zM336 498v228q0 11 2.5 23t10 21.5t20.5 15.5t34 6h188q31 0 51.5 -14.5t20.5 -52.5v-227h-327z" />
<glyph glyph-name="alert-octagon" unicode="&#59419;" d="M128 542.976v-317.952L353.024 0h317.952L896 225.024V542.976L670.976 768H353.024L128 542.976zM335.36 853.333333h353.28a42.666667 42.666667 0 0 0 30.165333-12.501333l250.026667-250.026667A42.666667 42.666667 0 0 0 981.333333 560.64v-353.28a42.666667 42.666667 0 0 0-12.501333-30.165333l-250.026667-250.026667a42.666667 42.666667 0 0 0-30.165333-12.501333H335.36a42.666667 42.666667 0 0 0-30.165333 12.501333l-250.026667 250.026667A42.666667 42.666667 0 0 0 42.666667 207.36V560.64a42.666667 42.666667 0 0 0 12.501333 30.165333l250.026667 250.026667A42.666667 42.666667 0 0 0 335.36 853.333333zM512 213.333333m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0ZM469.333333 554.666667v-170.666667a42.666667 42.666667 0 0 1 85.333334 0V554.666667a42.666667 42.666667 0 0 1-85.333334 0z" horiz-adv-x="1024" />
<glyph glyph-name="alert-circle" unicode="&#59420;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM469.333333 554.666667v-170.666667a42.666667 42.666667 0 0 1 85.333334 0V554.666667a42.666667 42.666667 0 0 1-85.333334 0zM512 213.333333m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0Z" horiz-adv-x="1024" />
<glyph glyph-name="activity" unicode="&#59421;" d="M424.490667 781.482667c-12.970667 38.912-68.010667 38.912-80.981334 0L225.28 426.666667H85.333333a42.666667 42.666667 0 0 1 0-85.333334h170.666667a42.666667 42.666667 0 0 1 40.490667 29.184L384 633.088l215.509333-646.570667c12.970667-38.912 68.010667-38.912 80.981334 0L798.72 341.333333H938.666667a42.666667 42.666667 0 0 1 0 85.333334h-170.666667a42.666667 42.666667 0 0 1-40.490667-29.184L640 134.912 424.490667 781.482667z" horiz-adv-x="1024" />
<glyph glyph-name="alert-triangle" unicode="&#59422;" d="M402.432 753.237333a128.085333 128.085333 0 0 0 219.136 0L983.296 149.333333A128 128 0 0 0 873.386667-42.666667H150.144a128 128 0 0 0-109.098667 192.597334l361.386667 603.306666zM114.602667 106.666667A42.666667 42.666667 0 0 1 150.613333 42.666667h722.304a42.666667 42.666667 0 0 1 36.821334 63.402666L548.48 709.162667a42.666667 42.666667 0 0 1-72.917333 0.085333L114.602667 106.666667zM512 170.666667m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0ZM469.333333 512v-170.666667a42.666667 42.666667 0 0 1 85.333334 0V512a42.666667 42.666667 0 0 1-85.333334 0z" horiz-adv-x="1024" />
<glyph glyph-name="align-center" unicode="&#59423;" d="M768 512H256a42.666667 42.666667 0 1 1 0-85.333333h512a42.666667 42.666667 0 0 1 0 85.333333zM896 682.666667H128a42.666667 42.666667 0 1 1 0-85.333334h768a42.666667 42.666667 0 0 1 0 85.333334zM896 341.333333H128a42.666667 42.666667 0 0 1 0-85.333333h768a42.666667 42.666667 0 0 1 0 85.333333zM768 170.666667H256a42.666667 42.666667 0 0 1 0-85.333334h512a42.666667 42.666667 0 0 1 0 85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="airplay" unicode="&#59424;" d="M213.333333 213.333333H170.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V682.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h682.666666a42.666667 42.666667 0 0 0 42.666667-42.666666v-426.666667a42.666667 42.666667 0 0 0-42.666667-42.666667h-42.666666a42.666667 42.666667 0 0 1 0-85.333333h42.666666a128 128 0 0 1 128 128V682.666667a128 128 0 0 1-128 128H170.666667a128 128 0 0 1-128-128v-426.666667a128 128 0 0 1 128-128h42.666666a42.666667 42.666667 0 0 1 0 85.333333zM512 189.354667L389.76 42.666667h244.48L512 189.354667zM725.333333-42.666667H298.666667a42.666667 42.666667 0 0 0-32.768 69.973334l213.333333 256a42.666667 42.666667 0 0 0 65.536 0l213.333333-256A42.666667 42.666667 0 0 0 725.333333-42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="align-justify" unicode="&#59425;" d="M896 512H128a42.666667 42.666667 0 1 1 0-85.333333h768a42.666667 42.666667 0 0 1 0 85.333333zM896 682.666667H128a42.666667 42.666667 0 1 1 0-85.333334h768a42.666667 42.666667 0 0 1 0 85.333334zM896 341.333333H128a42.666667 42.666667 0 0 1 0-85.333333h768a42.666667 42.666667 0 0 1 0 85.333333zM896 170.666667H128a42.666667 42.666667 0 0 1 0-85.333334h768a42.666667 42.666667 0 0 1 0 85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="align-left" unicode="&#59426;" d="M725.333333 512H128a42.666667 42.666667 0 1 1 0-85.333333h597.333333a42.666667 42.666667 0 0 1 0 85.333333zM896 682.666667H128a42.666667 42.666667 0 1 1 0-85.333334h768a42.666667 42.666667 0 0 1 0 85.333334zM896 341.333333H128a42.666667 42.666667 0 0 1 0-85.333333h768a42.666667 42.666667 0 0 1 0 85.333333zM725.333333 170.666667H128a42.666667 42.666667 0 0 1 0-85.333334h597.333333a42.666667 42.666667 0 0 1 0 85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="align-right" unicode="&#59427;" d="M896 512H298.666667a42.666667 42.666667 0 1 1 0-85.333333h597.333333a42.666667 42.666667 0 0 1 0 85.333333zM896 682.666667H128a42.666667 42.666667 0 1 1 0-85.333334h768a42.666667 42.666667 0 0 1 0 85.333334zM896 341.333333H128a42.666667 42.666667 0 0 1 0-85.333333h768a42.666667 42.666667 0 0 1 0 85.333333zM896 170.666667H298.666667a42.666667 42.666667 0 0 1 0-85.333334h597.333333a42.666667 42.666667 0 0 1 0 85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-down-left" unicode="&#59428;" d="M737.834667 670.165333l-512-512a42.666667 42.666667 0 0 1 60.330666-60.330666l512 512a42.666667 42.666667 0 1 1-60.330666 60.330666zM298.666667 512a42.666667 42.666667 0 1 1-85.333334 0v-384a42.666667 42.666667 0 0 1 42.666667-42.666667h384a42.666667 42.666667 0 0 1 0 85.333334H298.666667V512z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-down-right" unicode="&#59429;" d="M225.834667 609.834667l512-512a42.666667 42.666667 0 0 1 60.330666 60.330666l-512 512a42.666667 42.666667 0 0 1-60.330666-60.330666zM384 170.666667a42.666667 42.666667 0 0 1 0-85.333334h384a42.666667 42.666667 0 0 1 42.666667 42.666667V512a42.666667 42.666667 0 0 1-85.333334 0v-341.333333H384z" horiz-adv-x="1024" />
<glyph glyph-name="anchor" unicode="&#59430;" d="M554.666667 2.346667000000025A384.170667 384.170667 0 0 1 893.653333 341.33333300000004H810.666667a42.666667 42.666667 0 0 0 0 85.333334h128a42.666667 42.666667 0 0 0 42.666666-42.666667c0-259.2-210.133333-469.333333-469.333333-469.333333S42.666667 124.79999999999995 42.666667 384a42.666667 42.666667 0 0 0 42.666666 42.666667h128a42.666667 42.666667 0 0 0 0-85.333334H130.346667A384.170667 384.170667 0 0 1 469.333333 2.346667000000025V554.666667a42.666667 42.666667 0 0 0 85.333334 0v-552.32zM512 512a170.666667 170.666667 0 1 0 0 341.333333 170.666667 170.666667 0 0 0 0-341.333333z m0 85.333333a85.333333 85.333333 0 1 1 0 170.666667 85.333333 85.333333 0 0 1 0-170.666667z" horiz-adv-x="1024" />
<glyph glyph-name="aperture" unicode="&#59431;" d="M456.533333-82.09066700000005a469.76 469.76 0 0 0-375.893333 280.917334A467.797333 467.797333 0 0 0 42.666667 384c0 102.954667 33.152 198.186667 89.386666 275.584a42.410667 42.410667 0 0 0 4.650667 6.272 468.608 468.608 0 0 0 424.917333 184.874667 469.76 469.76 0 0 0 381.781334-281.6C967.808 512.426667 981.333333 449.792 981.333333 384a467.2 467.2 0 0 0-89.386666-275.584 42.410667 42.410667 0 0 0-4.650667-6.272 468.608 468.608 0 0 0-424.917333-184.874667 42.410667 42.410667 0 0 0-5.802667 0.64z m-14.72 88.490667L536.661333 170.66666699999996H192.682667a384.213333 384.213333 0 0 1 249.130666-164.266667z m95.317334-5.589333a383.146667 383.146667 0 0 1 266.794666 133.717333L709.12 298.66666699999996 647.68 192.42666699999995a42.666667 42.666667 0 0 0-0.426667-0.725334L537.173333 0.8533330000000205z m122.709333 383.146666L585.941333 512h-147.882666l-73.898667-128 73.898667-128h147.882666l73.898667 128z m86.698667 20.522667l109.952-190.336c25.301333 51.2 39.509333 108.885333 39.509333 169.856 0 44.885333-7.68 87.978667-21.845333 128h-189.696l61.056-105.728a42.624 42.624 0 0 0 1.024-1.792zM149.845333 256h189.696l-61.056 105.728a42.624 42.624 0 0 0-1.024 1.792L167.509333 553.856A382.421333 382.421333 0 0 1 128 384c0-44.885333 7.68-87.978667 21.845333-128z m70.229334 377.472L314.88 469.333333 376.32 575.573333a42.666667 42.666667 0 0 0 0.426667 0.725334L486.826667 767.146667a383.146667 383.146667 0 0 1-266.794667-133.717334z m362.112 128.128L487.338667 597.333333H831.317333a384.213333 384.213333 0 0 1-249.130666 164.266667z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-left" unicode="&#59432;" d="M853.333333 426.666667H170.666667a42.666667 42.666667 0 0 1 0-85.333334h682.666666a42.666667 42.666667 0 0 1 0 85.333334zM456.832 609.834667a42.666667 42.666667 0 1 1-60.330667 60.330666l-256-256a42.666667 42.666667 0 0 1 0-60.330666l256-256a42.666667 42.666667 0 1 1 60.330667 60.330666L230.997333 384l225.834667 225.834667z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-right" unicode="&#59433;" d="M170.666667 341.333333h682.666666a42.666667 42.666667 0 0 1 0 85.333334H170.666667a42.666667 42.666667 0 0 1 0-85.333334zM567.168 158.165333a42.666667 42.666667 0 0 1 60.330667-60.330666l256 256a42.666667 42.666667 0 0 1 0 60.330666l-256 256a42.666667 42.666667 0 0 1-60.330667-60.330666L793.002667 384l-225.834667-225.834667z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-down" unicode="&#59434;" d="M469.333333 725.333333v-682.666666a42.666667 42.666667 0 0 1 85.333334 0V725.333333a42.666667 42.666667 0 0 1-85.333334 0zM286.165333 328.832a42.666667 42.666667 0 1 1-60.330666-60.330667l256-256a42.666667 42.666667 0 0 1 60.330666 0l256 256a42.666667 42.666667 0 0 1-60.330666 60.330667L512 102.997333l-225.834667 225.834667z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-up-left" unicode="&#59435;" d="M798.165333 158.165333l-512 512a42.666667 42.666667 0 0 1-60.330666-60.330666l512-512a42.666667 42.666667 0 0 1 60.330666 60.330666zM640 597.333333a42.666667 42.666667 0 0 1 0 85.333334H256a42.666667 42.666667 0 0 1-42.666667-42.666667v-384a42.666667 42.666667 0 0 1 85.333334 0V597.333333h341.333333z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-up-right" unicode="&#59436;" d="M286.165333 97.83466699999997l512 512a42.666667 42.666667 0 1 1-60.330666 60.330666l-512-512a42.666667 42.666667 0 0 1 60.330666-60.330666zM725.333333 256a42.666667 42.666667 0 0 1 85.333334 0V640a42.666667 42.666667 0 0 1-42.666667 42.666667H384a42.666667 42.666667 0 1 1 0-85.333334h341.333333v-341.333333z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-up" unicode="&#59437;" d="M554.666667 42.666667V725.333333a42.666667 42.666667 0 0 1-85.333334 0v-682.666666a42.666667 42.666667 0 0 1 85.333334 0zM737.834667 439.168a42.666667 42.666667 0 0 1 60.330666 60.330667l-256 256a42.666667 42.666667 0 0 1-60.330666 0l-256-256a42.666667 42.666667 0 0 1 60.330666-60.330667L512 665.002667l225.834667-225.834667z" horiz-adv-x="1024" />
<glyph glyph-name="award" unicode="&#59438;" d="M304.646221 283.538374a341.323094 341.323094 0 1 0 414.792889 0l48.211887-363.210437a42.665387 42.665387 0 0 0-64.254072-42.238733L512-7.0129100000000335l-191.396925-114.812555a42.665387 42.665387 0 0 0-64.211407 42.196067l48.211887 363.210437z m79.9976-45.651964l-31.99904-241.059435 137.382545 82.429527a42.665387 42.665387 0 0 0 43.945348 0l137.382545-82.429527-31.956374 241.059435A340.384455 340.384455 0 0 0 512 213.35381299999995a340.384455 340.384455 0 0 0-127.356179 24.532597zM512 298.68458599999997a255.99232 255.99232 0 1 1 0 511.984641 255.99232 255.99232 0 0 1 0-511.984641z" horiz-adv-x="1024" />
<glyph glyph-name="bar-chart" unicode="&#59439;" d="M810.666667 725.333333v-682.666666h85.333333V725.333333h-85.333333z m-42.666667 85.333334h170.666667a42.666667 42.666667 0 0 0 42.666666-42.666667v-768a42.666667 42.666667 0 0 0-42.666666-42.666667h-170.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V768a42.666667 42.666667 0 0 0 42.666667 42.666667zM469.333333 512v-469.333333h85.333334V512h-85.333334z m-42.666666 85.333333h170.666666a42.666667 42.666667 0 0 0 42.666667-42.666666v-554.666667a42.666667 42.666667 0 0 0-42.666667-42.666667h-170.666666a42.666667 42.666667 0 0 0-42.666667 42.666667V554.666667a42.666667 42.666667 0 0 0 42.666667 42.666666zM128 42.666667h85.333333v256H128v-256z m-42.666667 341.333333h170.666667a42.666667 42.666667 0 0 0 42.666667-42.666667v-341.333333a42.666667 42.666667 0 0 0-42.666667-42.666667H85.333333a42.666667 42.666667 0 0 0-42.666666 42.666667v341.333333a42.666667 42.666667 0 0 0 42.666666 42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="at-sign" unicode="&#59440;" d="M725.333333 384v-42.666667a85.333333 85.333333 0 1 1 170.666667 0v42.666667a384 384 0 1 1-150.528-304.896 42.666667 42.666667 0 1 0 51.882667-67.754667A469.333333 469.333333 0 1 0 981.333333 384v-42.666667a170.666667 170.666667 0 0 0-309.76-98.901333A213.333333 213.333333 0 1 0 725.333333 384z m-213.333333-128a128 128 0 1 1 0 256 128 128 0 0 1 0-256z" horiz-adv-x="1024" />
<glyph glyph-name="bar-chart-" unicode="&#59441;" d="M469.333333 725.333333v-682.666666h85.333334V725.333333h-85.333334z m-42.666666 85.333334h170.666666a42.666667 42.666667 0 0 0 42.666667-42.666667v-768a42.666667 42.666667 0 0 0-42.666667-42.666667h-170.666666a42.666667 42.666667 0 0 0-42.666667 42.666667V768a42.666667 42.666667 0 0 0 42.666667 42.666667zM810.666667 512v-469.333333h85.333333V512h-85.333333z m-42.666667 85.333333h170.666667a42.666667 42.666667 0 0 0 42.666666-42.666666v-554.666667a42.666667 42.666667 0 0 0-42.666666-42.666667h-170.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V554.666667a42.666667 42.666667 0 0 0 42.666667 42.666666zM128 42.666667h85.333333v256H128v-256z m-42.666667 341.333333h170.666667a42.666667 42.666667 0 0 0 42.666667-42.666667v-341.333333a42.666667 42.666667 0 0 0-42.666667-42.666667H85.333333a42.666667 42.666667 0 0 0-42.666666 42.666667v341.333333a42.666667 42.666667 0 0 0 42.666666 42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="battery-charging" unicode="&#59442;" d="M213.333333 170.666667H128a42.666667 42.666667 0 0 0-42.666667 42.666666V554.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h136.106667a42.666667 42.666667 0 1 1 0 85.333334H128a128 128 0 0 1-128-128v-341.333334a128 128 0 0 1 128-128h85.333333a42.666667 42.666667 0 0 1 0 85.333334zM640 597.333333h85.333333a42.666667 42.666667 0 0 0 42.666667-42.666666v-341.333334a42.666667 42.666667 0 0 0-42.666667-42.666666h-136.106666a42.666667 42.666667 0 0 1 0-85.333334H725.333333a128 128 0 0 1 128 128V554.666667a128 128 0 0 1-128 128h-85.333333a42.666667 42.666667 0 0 1 0-85.333334zM1024 341.333333v85.333334a42.666667 42.666667 0 0 1-85.333333 0v-85.333334a42.666667 42.666667 0 0 1 85.333333 0zM348.501333 151.68a42.666667 42.666667 0 0 1 70.997334-47.36l170.666666 256A42.666667 42.666667 0 0 1 554.666667 426.666667H378.410667l126.421333 189.653333a42.666667 42.666667 0 1 1-70.997333 47.36l-170.666667-256A42.666667 42.666667 0 0 1 298.666667 341.333333h176.256l-126.421334-189.653333z" horiz-adv-x="1024" />
<glyph glyph-name="bell-off" unicode="&#59443;" d="M386.503252 734.704171A255.868761 255.868761 0 0 0 768.131509 511.671902v-170.579174a42.644793 42.644793 0 0 1 85.289586 0V511.671902A341.158348 341.158348 0 0 1 344.626065 808.906112a42.644793 42.644793 0 1 1 41.877187-74.201941zM256.393987 298.447934V511.671902a255.911405 255.911405 0 0 0 28.529367 117.742274A42.644793 42.644793 0 1 1 209.058267 668.604741 341.158348 341.158348 0 0 1 171.1044 511.629257V298.447934a85.289587 85.289587 0 0 0-85.289586-85.289586c-56.84551 0-56.84551-85.289587 0-85.289587h639.671901a42.644793 42.644793 0 0 1 0 85.289587H233.579023c14.49923 25.075139 22.814964 54.201532 22.814964 85.289586z m292.756507-277.105867a42.644793 42.644793 0 0 0-73.775492 0 42.644793 42.644793 0 0 1-73.775493-42.815373 127.93438 127.93438 0 0 1 221.326478 0 42.644793 42.644793 0 0 1-73.775493 42.815373zM13.020151 822.68038l938.185456-938.185456a42.644793 42.644793 0 0 1 60.299738 60.299738l-938.185456 938.185456A42.644793 42.644793 0 1 1 13.020151 822.68038z" horiz-adv-x="1024" />
<glyph glyph-name="battery" unicode="&#59444;" d="M85.334187 554.282667v-340.565334c0-23.765333 19.114667-43.050667 42.453333-43.050666h597.76c23.381333 0 42.453333 19.2 42.453333 43.050666V554.24C768.000853 578.048 748.886187 597.333333 725.54752 597.333333H127.78752C104.406187 597.333333 85.334187 578.133333 85.334187 554.282667z m-85.333334 0A128.042667 128.042667 0 0 0 127.78752 682.666667h597.76A128.170667 128.170667 0 0 0 853.334187 554.282667v-340.565334A128.042667 128.042667 0 0 0 725.54752 85.333333H127.78752A128.170667 128.170667 0 0 0 0.000853 213.717333V554.24zM1024.000853 341.333333v85.333334a42.666667 42.666667 0 0 1-85.333333 0v-85.333334a42.666667 42.666667 0 0 1 85.333333 0z" horiz-adv-x="1024" />
<glyph glyph-name="bluetooth" unicode="&#59445;" d="M554.660072 17.7251l131.648983 131.648983L554.660072 281.023065v-263.297965zM686.309055 618.634876L554.660072 750.283859v-263.297966L686.309055 618.634876z m-439.100123-30.160671a42.660072 42.660072 0 0 0 60.321342 60.321342l469.260794-469.260793a42.660072 42.660072 0 0 0 0-60.321342l-234.630397-234.630397c-26.875845-26.875845-72.820743-7.849453-72.820743 30.160671V853.265273c0 37.967464 45.944898 57.036516 72.820743 30.160671l234.630397-234.630397a42.660072 42.660072 0 0 0 0-60.321342l-469.260794-469.260793a42.660072 42.660072 0 1 0-60.321342 60.321342L554.660072 486.985893v-205.962828L247.208932 588.474205z" horiz-adv-x="1024" />
<glyph glyph-name="bell" unicode="&#59446;" d="M768 298.66666699999996V512A256 256 0 0 1 256 512v-213.333333c0-31.104-8.32-60.245333-22.826667-85.333334h557.653334A169.898667 169.898667 0 0 0 768 298.66666699999996z m170.666667-170.666667H85.333333c-56.874667 0-56.874667 85.333333 0 85.333333a85.333333 85.333333 0 0 1 85.333334 85.333334V512a341.333333 341.333333 0 0 0 682.666666 0v-213.333333a85.333333 85.333333 0 0 1 85.333334-85.333334c56.874667 0 56.874667-85.333333 0-85.333333zM548.906667 21.418667000000028a42.666667 42.666667 0 0 0-73.813334 0 42.666667 42.666667 0 0 1-73.813333-42.837334 128 128 0 0 1 221.44 0 42.666667 42.666667 0 0 1-73.813333 42.837334z" horiz-adv-x="1024" />
<glyph glyph-name="book" unicode="&#59447;" d="M853.333333 853.333333a42.666667 42.666667 0 0 0 42.666667-42.666666v-853.333334a42.666667 42.666667 0 0 0-42.666667-42.666666H277.333333A149.333333 149.333333 0 0 0 128 64v640A149.333333 149.333333 0 0 0 277.333333 853.333333H853.333333z m-42.666666-640V768H277.333333A64 64 0 0 1 213.333333 704v-505.045333A148.736 148.736 0 0 0 277.333333 213.33333300000004H810.666667z m0-85.333333H277.333333a64 64 0 0 1 0-128H810.666667v128z" horiz-adv-x="1024" />
<glyph glyph-name="briefcase" unicode="&#59448;" d="M298.666667 640V682.666667a128 128 0 0 0 128 128h170.666666a128 128 0 0 0 128-128v-42.666667h128.426667A127.914667 127.914667 0 0 0 981.333333 511.744v-426.154667A128.128 128.128 0 0 0 853.76-42.66666699999996H170.24A127.914667 127.914667 0 0 0 42.666667 85.58933300000001V511.744A128.128 128.128 0 0 0 170.24 640H298.666667z m0-85.333333H170.24C147.2 554.666667 128 535.381333 128 511.744v-426.154667A42.581333 42.581333 0 0 1 170.24 42.66666699999996H298.666667V554.666667z m85.333333 0v-512h256V554.666667H384z m341.333333 0v-512h128.426667c23.04 0 42.24 19.285333 42.24 42.922666V511.744A42.581333 42.581333 0 0 1 853.76 554.666667H725.333333zM384 640h256V682.666667a42.666667 42.666667 0 0 1-42.666667 42.666666h-170.666666a42.666667 42.666667 0 0 1-42.666667-42.666666v-42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="camera-off" unicode="&#59449;" d="M682.884567 273.415441l328.620778-328.620779a42.644793 42.644793 0 0 0-60.299738-60.299738L878.410944-42.71041300000002H128.459607a127.93438 127.93438 0 0 0-127.93438 127.93438V554.316695a127.93438 127.93438 0 0 0 127.93438 127.93438h24.989849L13.020151 822.68038A42.644793 42.644793 0 1 0 73.319889 882.980118l371.265572-371.265572 1.151409-1.108764 236.038932-236.038932 1.108765-1.151409z m-28.870526-91.686306a213.223967 213.223967 0 0 0-301.157531 301.072241L238.739043 596.961489H128.459607a42.644793 42.644793 0 0 1-42.644793-42.644794v-469.092728a42.644793 42.644793 0 0 1 42.644793-42.644793h664.661751l-139.107317 139.107316z m-60.470317 60.427672L413.326827 422.373704a127.93438 127.93438 0 0 1 180.216897-180.216897z m96.462523 373.781615A42.644793 42.644793 0 0 1 725.486715 596.961489h170.579174a42.644793 42.644793 0 0 0 42.644793-42.644794v-398.302371a42.644793 42.644793 0 0 1 85.289587 0V554.316695a127.93438 127.93438 0 0 1-127.93438 127.93438h-147.764209l-72.624084 108.957448A42.644793 42.644793 0 0 1 640.197128 810.185456H384.328368a42.644793 42.644793 0 1 1 0-85.289587h233.053796l72.624083-108.957447z" horiz-adv-x="1024" />
<glyph glyph-name="calendar" unicode="&#59450;" d="M384 768h256V810.666667a42.666667 42.666667 0 0 0 85.333333 0v-42.666667h85.546667A127.786667 127.786667 0 0 0 938.666667 640.213333v-597.76A127.786667 127.786667 0 0 0 810.88-85.33333300000004H213.12A127.786667 127.786667 0 0 0 85.333333 42.45333300000004V640.213333A127.786667 127.786667 0 0 0 213.12 768H298.666667V810.666667a42.666667 42.666667 0 1 0 85.333333 0v-42.666667z m469.333333-341.333333H170.666667v-384.213334c0-23.466667 18.986667-42.453333 42.453333-42.453333h597.76c23.466667 0 42.453333 18.986667 42.453333 42.453333V426.666667zM384 682.666667v-42.666667a42.666667 42.666667 0 1 0-85.333333 0V682.666667H213.12A42.453333 42.453333 0 0 1 170.666667 640.213333V512h682.666666V640.213333A42.453333 42.453333 0 0 1 810.88 682.666667H725.333333v-42.666667a42.666667 42.666667 0 0 0-85.333333 0V682.666667H384z" horiz-adv-x="1024" />
<glyph glyph-name="bookmark" unicode="&#59451;" d="M768 82.901333V682.666667a42.666667 42.666667 0 0 1-42.666667 42.666666H298.666667a42.666667 42.666667 0 0 1-42.666667-42.666666v-599.765334l231.210667 165.12a42.666667 42.666667 0 0 0 49.578666 0L768 82.944zM238.122667-34.730667A42.666667 42.666667 0 0 0 170.666667 0V682.666667a128 128 0 0 0 128 128h426.666666a128 128 0 0 0 128-128v-682.666667a42.666667 42.666667 0 0 0-67.456-34.730667L512 160.896l-273.877333-195.626667z" horiz-adv-x="1024" />
<glyph glyph-name="box" unicode="&#59452;" d="M568.96 872.362667l341.333333-170.666667A128 128 0 0 0 981.333333 587.093333v-406.613333a128 128 0 0 0-70.954666-114.517333l-341.333334-170.666667a128 128 0 0 0-114.517333 0L113.066667 66.00533299999995A127.872 127.872 0 0 0 42.666667 180.90666699999997V587.093333a128 128 0 0 0 70.954666 114.517334L455.04 872.362667a128 128 0 0 0 113.92 0zM512 474.368l331.050667 165.546667-312.106667 156.032a42.624 42.624 0 0 1-37.845333 0L180.949333 639.9573330000001 512 474.368z m384 96.597333l-341.333333-170.666666v-416.810667l317.653333 158.848A42.666667 42.666667 0 0 1 896 180.48000000000002V570.965333zM469.333333-16.725332999999978v417.024l-341.333333 170.666666v-390.357333c-0.128-16.213333 8.96-31.104 23.338667-38.357333L469.333333-16.725332999999978z" horiz-adv-x="1024" />
<glyph glyph-name="camera" unicode="&#59453;" d="M334.165333 616.32A42.666667 42.666667 0 0 0 298.666667 597.333333H128a42.666667 42.666667 0 0 1-42.666667-42.666666v-469.333334a42.666667 42.666667 0 0 1 42.666667-42.666666h768a42.666667 42.666667 0 0 1 42.666667 42.666666V554.666667a42.666667 42.666667 0 0 1-42.666667 42.666666h-170.666667a42.666667 42.666667 0 0 0-35.498666 18.986667L617.173333 725.333333h-210.346666L334.165333 616.32zM896 682.666667a128 128 0 0 0 128-128v-469.333334a128 128 0 0 0-128-128H128a128 128 0 0 0-128 128V554.666667a128 128 0 0 0 128 128h147.84l72.661333 109.013333A42.666667 42.666667 0 0 0 384 810.666667h256a42.666667 42.666667 0 0 0 35.498667-18.986667L748.16 682.666667H896zM512 128a213.333333 213.333333 0 1 0 0 426.666667 213.333333 213.333333 0 0 0 0-426.666667z m0 85.333333a128 128 0 1 1 0 256 128 128 0 0 1 0-256z" horiz-adv-x="1024" />
<glyph glyph-name="check-circle" unicode="&#59454;" d="M896 423.68V384a384 384 0 1 0-227.712 351.018667 42.666667 42.666667 0 1 1 34.730667 77.909333A469.333333 469.333333 0 1 1 981.333333 384v39.722667a42.666667 42.666667 0 0 1-85.333333 0zM414.165333 456.832a42.666667 42.666667 0 0 1-60.330666-60.330667l128-128a42.666667 42.666667 0 0 1 60.330666 0l469.333334 469.333334a42.666667 42.666667 0 1 1-60.330667 60.330666L512 358.997333l-97.834667 97.834667z" horiz-adv-x="1024" />
<glyph glyph-name="check" unicode="&#59455;" d="M200.832 371.498667a42.666667 42.666667 0 1 1-60.330667-60.330667l213.333334-213.333333a42.666667 42.666667 0 0 1 60.330666 0l469.333334 469.333333a42.666667 42.666667 0 1 1-60.330667 60.330667L384 188.330667l-183.168 183.168z" horiz-adv-x="1024" />
<glyph glyph-name="check-square" unicode="&#59456;" d="M371.498667 456.832a42.666667 42.666667 0 0 1-60.330667-60.330667l128-128a42.666667 42.666667 0 0 1 60.330667 0l469.333333 469.333334a42.666667 42.666667 0 1 1-60.330667 60.330666L469.333333 358.997333l-97.834666 97.834667zM810.666667 384v-298.666667a42.666667 42.666667 0 0 0-42.666667-42.666666H170.666667a42.666667 42.666667 0 0 0-42.666667 42.666666V682.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h469.333333a42.666667 42.666667 0 0 1 0 85.333334H170.666667a128 128 0 0 1-128-128v-597.333334a128 128 0 0 1 128-128h597.333333a128 128 0 0 1 128 128v298.666667a42.666667 42.666667 0 0 1-85.333333 0z" horiz-adv-x="1024" />
<glyph glyph-name="cast" unicode="&#59457;" d="M76.8 167.253333a170.666667 170.666667 0 0 0 133.12-133.12 42.666667 42.666667 0 0 1 83.626667 17.066667 256 256 0 0 1-199.68 199.68 42.666667 42.666667 0 0 1-17.066667-83.626667z m3.84 172.202667a341.333333 341.333333 0 0 0 301.482667-301.525333 42.666667 42.666667 0 1 1 84.821333 9.472 426.666667 426.666667 0 0 1-376.874667 376.874666 42.666667 42.666667 0 1 1-9.472-84.821333zM128 554.666667V640a42.666667 42.666667 0 0 0 42.666667 42.666667h682.666666a42.666667 42.666667 0 0 0 42.666667-42.666667v-512a42.666667 42.666667 0 0 0-42.666667-42.666667h-256a42.666667 42.666667 0 0 1 0-85.333333h256a128 128 0 0 1 128 128V640a128 128 0 0 1-128 128H170.666667a128 128 0 0 1-128-128v-85.333333a42.666667 42.666667 0 1 1 85.333333 0zM85.333333 42.666667m-42.666666 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0Z" horiz-adv-x="1024" />
<glyph glyph-name="chevron-down" unicode="&#59458;" d="M286.165333 542.165333a42.666667 42.666667 0 0 1-60.330666-60.330666l256-256a42.666667 42.666667 0 0 1 60.330666 0l256 256a42.666667 42.666667 0 1 1-60.330666 60.330666L512 316.330667 286.165333 542.165333z" horiz-adv-x="1024" />
<glyph glyph-name="chevron-left" unicode="&#59459;" d="M670.165333 609.834667a42.666667 42.666667 0 1 1-60.330666 60.330666l-256-256a42.666667 42.666667 0 0 1 0-60.330666l256-256a42.666667 42.666667 0 0 1 60.330666 60.330666L444.330667 384l225.834666 225.834667z" horiz-adv-x="1024" />
<glyph glyph-name="chevron-right" unicode="&#59460;" d="M353.834667 158.165333a42.666667 42.666667 0 0 1 60.330666-60.330666l256 256a42.666667 42.666667 0 0 1 0 60.330666l-256 256a42.666667 42.666667 0 0 1-60.330666-60.330666L579.669333 384l-225.834666-225.834667z" horiz-adv-x="1024" />
<glyph glyph-name="chevron-up" unicode="&#59461;" d="M737.834667 225.834667a42.666667 42.666667 0 0 1 60.330666 60.330666l-256 256a42.666667 42.666667 0 0 1-60.330666 0l-256-256a42.666667 42.666667 0 0 1 60.330666-60.330666L512 451.669333l225.834667-225.834666z" horiz-adv-x="1024" />
<glyph glyph-name="chevrons-down" unicode="&#59462;" d="M328.832 371.498667a42.666667 42.666667 0 1 1-60.330667-60.330667l213.333334-213.333333a42.666667 42.666667 0 0 1 60.330666 0l213.333334 213.333333a42.666667 42.666667 0 0 1-60.330667 60.330667L512 188.330667l-183.168 183.168zM328.832 670.165333a42.666667 42.666667 0 0 1-60.330667-60.330666l213.333334-213.333334a42.666667 42.666667 0 0 1 60.330666 0l213.333334 213.333334a42.666667 42.666667 0 1 1-60.330667 60.330666L512 486.997333 328.832 670.165333z" horiz-adv-x="1024" />
<glyph glyph-name="chevrons-right" unicode="&#59463;" d="M524.501333 200.832a42.666667 42.666667 0 0 1 60.330667-60.330667l213.333333 213.333334a42.666667 42.666667 0 0 1 0 60.330666l-213.333333 213.333334a42.666667 42.666667 0 0 1-60.330667-60.330667L707.669333 384l-183.168-183.168zM225.834667 200.832a42.666667 42.666667 0 0 1 60.330666-60.330667l213.333334 213.333334a42.666667 42.666667 0 0 1 0 60.330666l-213.333334 213.333334a42.666667 42.666667 0 0 1-60.330666-60.330667L409.002667 384l-183.168-183.168z" horiz-adv-x="1024" />
<glyph glyph-name="chevrons-up" unicode="&#59464;" d="M695.168 396.501333a42.666667 42.666667 0 0 1 60.330667 60.330667l-213.333334 213.333333a42.666667 42.666667 0 0 1-60.330666 0l-213.333334-213.333333a42.666667 42.666667 0 0 1 60.330667-60.330667L512 579.669333l183.168-183.168zM512 281.002667l183.168-183.168a42.666667 42.666667 0 0 1 60.330667 60.330666l-213.333334 213.333334a42.666667 42.666667 0 0 1-60.330666 0l-213.333334-213.333334a42.666667 42.666667 0 0 1 60.330667-60.330666L512 281.002667z" horiz-adv-x="1024" />
<glyph glyph-name="chevrons-left" unicode="&#59465;" d="M499.498667 567.168a42.666667 42.666667 0 1 1-60.330667 60.330667l-213.333333-213.333334a42.666667 42.666667 0 0 1 0-60.330666l213.333333-213.333334a42.666667 42.666667 0 0 1 60.330667 60.330667L316.330667 384l183.168 183.168zM798.165333 567.168a42.666667 42.666667 0 1 1-60.330666 60.330667l-213.333334-213.333334a42.666667 42.666667 0 0 1 0-60.330666l213.333334-213.333334a42.666667 42.666667 0 0 1 60.330666 60.330667L614.997333 384l183.168 183.168z" horiz-adv-x="1024" />
<glyph glyph-name="circle" unicode="&#59466;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768z" horiz-adv-x="1024" />
<glyph glyph-name="clipboard" unicode="&#59467;" d="M298.666667 768c0.213333 46.976 38.4 85.333333 85.205333 85.333333h256.256c47.104 0 84.992-37.973333 85.205333-85.333333h42.666667a128 128 0 0 0 128-128v-597.333333a128 128 0 0 0-128-128H256a128 128 0 0 0-128 128V640a128 128 0 0 0 128 128h42.666667z m0-85.333333H256a42.666667 42.666667 0 0 1-42.666667-42.666667v-597.333333a42.666667 42.666667 0 0 1 42.666667-42.666667h512a42.666667 42.666667 0 0 1 42.666667 42.666667V640a42.666667 42.666667 0 0 1-42.666667 42.666667h-42.666667c-0.213333-46.976-38.4-85.333333-85.205333-85.333334H383.872A85.248 85.248 0 0 0 298.666667 682.666667z m85.205333 85.333333c0.341333 0 0.128-0.213333 0.128-0.426667v-84.48C384 682.752 384 682.666667 383.914667 682.666667h256.213333C639.786667 682.666667 640 682.88 640 683.093333V767.573333c0 0.298667 0 0.426667 0.085333 0.426667H383.872z" horiz-adv-x="1024" />
<glyph glyph-name="chrome" unicode="&#59468;" d="M462.378667-82.77333299999998a42.410667 42.410667 0 0 0-5.802667 0.682666C223.488-54.65599999999995 42.666667 143.530667 42.666667 384c0 102.954667 33.152 198.186667 89.386666 275.584a42.410667 42.410667 0 0 0 4.650667 6.272A468.608 468.608 0 0 0 512 853.333333a469.418667 469.418667 0 0 0 431.36-284.16c24.448-56.832 37.973333-119.424 37.973333-185.173333 0-259.2-210.133333-469.333333-469.333333-469.333333-16.768 0-33.28 0.853333-49.621333 2.56z m-20.608 89.173333l95.616 165.76a213.333333 213.333333 0 0 0-214.528 113.066667l-155.306667 268.672A382.421333 382.421333 0 0 1 128 384c0-188.074667 135.253333-344.618667 313.770667-377.6z m95.317333-5.589333A384 384 0 0 1 874.154667 512H682.666667c26.794667-35.669333 42.666667-79.957333 42.666666-128 0-41.941333-12.117333-81.066667-33.024-114.090667l-155.221333-269.098666z m82.389333 313.642666l3.2 5.546667c0.554667 0.981333 1.152 1.962667 1.792 2.858667a128 128 0 1 1-226.56 2.986666l3.413334-5.845333c0.554667-0.938667 1.066667-1.92 1.536-2.901333a127.914667 127.914667 0 0 1 216.618666-2.645334zM220.16 633.5146669999999l95.701333-165.589334A213.376 213.376 0 0 0 512 597.333333h319.317333A383.616 383.616 0 0 1 512 768a383.146667 383.146667 0 0 1-291.925333-134.485333z" horiz-adv-x="1024" />
<glyph glyph-name="clock" unicode="&#59469;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM554.666667 640a42.666667 42.666667 0 0 1-85.333334 0v-256a42.666667 42.666667 0 0 1 12.501334-30.165333l128-128a42.666667 42.666667 0 0 1 60.330666 60.330666L554.666667 401.664V640z" horiz-adv-x="1024" />
<glyph glyph-name="cloud-lightning" unicode="&#59470;" d="M384.070136 896a383.99632 383.99632 0 0 1-185.939552-719.9931 42.666258 42.666258 0 0 1 41.300938 74.665951A298.663804 298.663804 0 1 0 673.262031 586.669631a42.666258 42.666258 0 0 1 41.300938-31.999693H768.322453a170.665031 170.665031 0 0 0 34.175673-337.916762 42.666258 42.666258 0 0 1 16.98117-83.625865A255.997547 255.997547 0 0 1 768.279787 640.002453h-22.186454a383.99632 383.99632 0 0 1-362.023197 255.997547zM434.160322-61.644156a42.666258 42.666258 0 0 1 70.996653-47.359546l170.665032 255.997547A42.666258 42.666258 0 0 1 640.32368 213.339875h-176.254311l126.420122 189.651516a42.666258 42.666258 0 1 1-70.996653 47.359546l-170.665031-255.997546A42.666258 42.666258 0 0 1 384.326133 128.00736h176.254311l-126.420122-189.651516z" horiz-adv-x="1024" />
<glyph glyph-name="cloud-drizzle" unicode="&#59471;" d="M298.831787 85.333333v-85.333333a42.666667 42.666667 0 0 1 85.333333 0v85.333333a42.666667 42.666667 0 0 1-85.333333 0zM298.831787 341.333333v-85.333333a42.666667 42.666667 0 0 1 85.333333 0v85.333333a42.666667 42.666667 0 0 1-85.333333 0zM640.16512 85.333333v-85.333333a42.666667 42.666667 0 0 1 85.333333 0v85.333333a42.666667 42.666667 0 0 1-85.333333 0zM640.16512 341.333333v-85.333333a42.666667 42.666667 0 0 1 85.333333 0v85.333333a42.666667 42.666667 0 0 1-85.333333 0zM469.498453 0v-85.333333a42.666667 42.666667 0 0 1 85.333334 0v85.333333a42.666667 42.666667 0 0 1-85.333334 0zM469.498453 256v-85.333333a42.666667 42.666667 0 0 1 85.333334 0v85.333333a42.666667 42.666667 0 0 1-85.333334 0zM405.498453 895.36A384 384 0 0 1 144.207787 212.053333a42.666667 42.666667 0 0 1 53.248 66.645334A298.666667 298.666667 0 1 0 673.103787 586.666667a42.666667 42.666667 0 0 1 41.301333-32H768.16512a170.666667 170.666667 0 0 0 68.224-326.997334 42.666667 42.666667 0 0 1 34.218667-78.165333A256 256 0 0 1 768.207787 640h-22.229334A384 384 0 0 1 405.498453 895.36z" horiz-adv-x="1024" />
<glyph glyph-name="cloud-rain" unicode="&#59472;" d="M640.16512 341.333333v-341.333333a42.666667 42.666667 0 0 1 85.333333 0v341.333333a42.666667 42.666667 0 0 1-85.333333 0zM298.831787 341.333333v-341.333333a42.666667 42.666667 0 0 1 85.333333 0v341.333333a42.666667 42.666667 0 0 1-85.333333 0zM469.498453 256v-341.333333a42.666667 42.666667 0 0 1 85.333334 0v341.333333a42.666667 42.666667 0 0 1-85.333334 0zM405.498453 895.36A384 384 0 0 1 144.207787 212.053333a42.666667 42.666667 0 0 1 53.248 66.645334A298.666667 298.666667 0 1 0 673.103787 586.666667a42.666667 42.666667 0 0 1 41.301333-32H768.16512a170.666667 170.666667 0 0 0 68.224-326.997334 42.666667 42.666667 0 0 1 34.218667-78.165333A256 256 0 0 1 768.207787 640h-22.229334A384 384 0 0 1 405.498453 895.36z" horiz-adv-x="1024" />
<glyph glyph-name="cloud-off" unicode="&#59473;" d="M420.661732 767.370083a42.474214 42.474214 0 0 1-45.971088-38.721472 42.559504 42.559504 0 0 1 38.508249-46.226956 297.3195 297.3195 0 0 0 261.583163-223.885166 42.431569 42.431569 0 0 1 41.109581-32.154174h53.433926a169.38512 169.38512 0 0 0 141.580714-76.248891 171.389425 171.389425 0 0 0 14.840388-160.813516 42.730083 42.730083 0 0 1 22.516451-55.864679 42.303635 42.303635 0 0 1 55.608811 22.60174 257.062815 257.062815 0 0 1-22.260582 241.198952A254.077679 254.077679 0 0 1 769.240273 511.671902h-21.876779a382.054704 382.054704 0 0 1-326.701762 255.698181zM197.544172 719.607914c-153.308032-85.289587-229.215765-264.568299-184.097573-434.763669 45.160836-170.238015 199.748212-287.681777 374.890379-284.86722h380.988585c29.552842 0 58.849815 5.24531 86.568931 15.352126 22.004713 8.059866 33.348228 32.495333 25.373652 54.62798a42.34628 42.34628 0 0 1-54.329467 25.544231c-18.50784-6.737877-37.996511-10.23475-57.655761-10.23475H387.654662a297.276855 297.276855 0 0 0-292.24477 221.539702 299.153226 299.153226 0 0 0 143.158572 338.130567c20.469501 11.38616 27.93234 37.356839 16.631469 57.954274a42.26099 42.26099 0 0 1-57.655761 16.674115zM13.020151 822.68038l938.185456-938.185456a42.644793 42.644793 0 0 1 60.299738 60.299738l-938.185456 938.185456A42.644793 42.644793 0 1 1 13.020151 822.68038z" horiz-adv-x="1024" />
<glyph glyph-name="codepen" unicode="&#59474;" d="M535.253333 846.421333l426.666667-277.333333A42.666667 42.666667 0 0 0 981.333333 533.333333v-298.666666a42.666667 42.666667 0 0 0-19.413333-35.754667l-426.666667-277.333333a42.666667 42.666667 0 0 0-46.506666 0l-426.666667 277.333333A42.666667 42.666667 0 0 0 42.666667 234.66666699999996v298.666666a42.666667 42.666667 0 0 0 19.413333 35.754667l426.666667 277.333333a42.666667 42.666667 0 0 0 46.506666 0zM469.333333 732.074667L161.621333 531.9680000000001 298.666667 436.096l170.666666 119.466667V732.032z m85.333334 0V555.52l170.666666-119.466667 137.045334 95.914667L554.666667 732.032zM512 286.72L650.922667 384 512 481.28 373.077333 384 512 286.72z m384 29.866667v134.741333L799.744 384 896 316.58666700000003z m-33.621333-80.64L725.333333 331.904l-170.666666-119.466667v-176.469333l307.712 200.021333z m-700.757334 0L469.333333 35.96799999999996v176.469333l-170.666666 119.466667-137.045334-95.914667zM128 316.58666700000003L224.256 384 128 451.413333v-134.826666z" horiz-adv-x="1024" />
<glyph glyph-name="cloud-snow" unicode="&#59475;" d="M405.632 852.693333A384 384 0 0 1 144.298667 169.386667a42.666667 42.666667 0 0 1 53.290666 66.645333A298.666667 298.666667 0 1 0 673.194667 544a42.666667 42.666667 0 0 1 41.301333-32h53.76a170.666667 170.666667 0 0 0 68.266667-326.997333 42.666667 42.666667 0 0 1 34.218666-78.165334A256 256 0 0 1 768.341333 597.333333h-22.272a384 384 0 0 1-340.48 255.36zM682.666667 256m-42.666667 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0ZM512 170.666667m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0ZM341.333333 256m-42.666666 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0ZM341.333333 42.666667m-42.666666 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0ZM512-42.666667m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0ZM682.666667 42.666667m-42.666667 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0ZM682.666667 42.666667m-42.666667 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0Z" horiz-adv-x="1024" />
<glyph glyph-name="compass" unicode="&#59476;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM455.253333 440.746667L398.592 270.506667l170.154667 56.746666 56.746666 170.154667-170.154666-56.746667z m278.144 110.677333l-90.453333-271.36a42.666667 42.666667 0 0 0-27.008-27.008l-271.36-90.453333a42.666667 42.666667 0 0 0-53.973333 53.973333l90.453333 271.36a42.666667 42.666667 0 0 0 27.008 27.008l271.36 90.453333a42.666667 42.666667 0 0 0 53.973333-53.973333z" horiz-adv-x="1024" />
<glyph glyph-name="copy" unicode="&#59477;" d="M426.666667 426.538667v-383.744A42.666667 42.666667 0 0 1 469.461333 0h383.744A42.666667 42.666667 0 0 1 896 42.794667v383.744A42.666667 42.666667 0 0 1 853.205333 469.333333h-383.744A42.666667 42.666667 0 0 1 426.666667 426.538667z m-85.333334 0A128 128 0 0 0 469.461333 554.666667h383.744A128 128 0 0 0 981.333333 426.538667v-383.744A128 128 0 0 0 853.205333-85.333333h-383.744A128 128 0 0 0 341.333333 42.794667v383.744zM213.333333 298.666667H170.666667a42.666667 42.666667 0 0 0-42.666667 42.666666V725.333333a42.666667 42.666667 0 0 0 42.666667 42.666667h384a42.666667 42.666667 0 0 0 42.666666-42.666667v-42.666666a42.666667 42.666667 0 0 1 85.333334 0V725.333333a128 128 0 0 1-128 128H170.666667a128 128 0 0 1-128-128v-384a128 128 0 0 1 128-128h42.666666a42.666667 42.666667 0 0 1 0 85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="corner-down-right" unicode="&#59478;" d="M609.834667 72.832a42.666667 42.666667 0 0 1 60.330666-60.330667l213.333334 213.333334a42.666667 42.666667 0 0 1 0 60.330666l-213.333334 213.333334a42.666667 42.666667 0 0 1-60.330666-60.330667L793.002667 256l-183.168-183.168zM128 725.333333v-298.666666a213.333333 213.333333 0 0 1 213.333333-213.333334h512a42.666667 42.666667 0 0 1 0 85.333334H341.333333a128 128 0 0 0-128 128V725.333333a42.666667 42.666667 0 1 1-85.333333 0z" horiz-adv-x="1024" />
<glyph glyph-name="corner-down-left" unicode="&#59479;" d="M414.165333 439.168a42.666667 42.666667 0 1 1-60.330666 60.330667l-213.333334-213.333334a42.666667 42.666667 0 0 1 0-60.330666l213.333334-213.333334a42.666667 42.666667 0 1 1 60.330666 60.330667L230.997333 256l183.168 183.168zM810.666667 725.333333v-298.666666a128 128 0 0 0-128-128H170.666667a42.666667 42.666667 0 0 1 0-85.333334h512a213.333333 213.333333 0 0 1 213.333333 213.333334V725.333333a42.666667 42.666667 0 0 1-85.333333 0z" horiz-adv-x="1024" />
<glyph glyph-name="corner-left-down" unicode="&#59480;" d="M200.832 286.165333a42.666667 42.666667 0 1 1-60.330667-60.330666l213.333334-213.333334a42.666667 42.666667 0 0 1 60.330666 0l213.333334 213.333334a42.666667 42.666667 0 0 1-60.330667 60.330666L384 102.997333l-183.168 183.168zM853.333333 768h-298.666666a213.333333 213.333333 0 0 1-213.333334-213.333333v-512a42.666667 42.666667 0 0 1 85.333334 0V554.666667a128 128 0 0 0 128 128h298.666666a42.666667 42.666667 0 0 1 0 85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="corner-left-up" unicode="&#59481;" d="M567.168 481.834667a42.666667 42.666667 0 1 1 60.330667 60.330666l-213.333334 213.333334a42.666667 42.666667 0 0 1-60.330666 0l-213.333334-213.333334a42.666667 42.666667 0 0 1 60.330667-60.330666L384 665.002667l183.168-183.168zM853.333333 85.333333h-298.666666a128 128 0 0 0-128 128V725.333333a42.666667 42.666667 0 1 1-85.333334 0v-512a213.333333 213.333333 0 0 1 213.333334-213.333333h298.666666a42.666667 42.666667 0 0 1 0 85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="corner-up-left" unicode="&#59482;" d="M414.165333 695.168a42.666667 42.666667 0 1 1-60.330666 60.330667l-213.333334-213.333334a42.666667 42.666667 0 0 1 0-60.330666l213.333334-213.333334a42.666667 42.666667 0 1 1 60.330666 60.330667L230.997333 512l183.168 183.168zM896 42.666667v298.666666a213.333333 213.333333 0 0 1-213.333333 213.333334H170.666667a42.666667 42.666667 0 1 1 0-85.333334h512a128 128 0 0 0 128-128v-298.666666a42.666667 42.666667 0 0 1 85.333333 0z" horiz-adv-x="1024" />
<glyph glyph-name="corner-up-right" unicode="&#59483;" d="M609.834667 328.832a42.666667 42.666667 0 0 1 60.330666-60.330667l213.333334 213.333334a42.666667 42.666667 0 0 1 0 60.330666l-213.333334 213.333334a42.666667 42.666667 0 0 1-60.330666-60.330667L793.002667 512l-183.168-183.168zM213.333333 42.666667v298.666666a128 128 0 0 0 128 128h512a42.666667 42.666667 0 0 1 0 85.333334H341.333333a213.333333 213.333333 0 0 1-213.333333-213.333334v-298.666666a42.666667 42.666667 0 0 1 85.333333 0z" horiz-adv-x="1024" />
<glyph glyph-name="corner-right-down" unicode="&#59484;" d="M456.832 286.16533300000003a42.666667 42.666667 0 1 1-60.330667-60.330666l213.333334-213.333334a42.666667 42.666667 0 0 1 60.330666 0l213.333334 213.333334a42.666667 42.666667 0 0 1-60.330667 60.330666L640 102.99733300000003l-183.168 183.168zM170.666667 682.666667h298.666666a128 128 0 0 0 128-128v-512a42.666667 42.666667 0 0 1 85.333334 0V554.666667a213.333333 213.333333 0 0 1-213.333334 213.333333H170.666667a42.666667 42.666667 0 1 1 0-85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="corner-right-up" unicode="&#59485;" d="M823.168 481.834667a42.666667 42.666667 0 1 1 60.330667 60.330666l-213.333334 213.333334a42.666667 42.666667 0 0 1-60.330666 0l-213.333334-213.333334a42.666667 42.666667 0 1 1 60.330667-60.330666L640 665.002667l183.168-183.168zM170.666667 0h298.666666a213.333333 213.333333 0 0 1 213.333334 213.333333V725.333333a42.666667 42.666667 0 0 1-85.333334 0v-512a128 128 0 0 0-128-128H170.666667a42.666667 42.666667 0 0 1 0-85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="cpu" unicode="&#59486;" d="M213.333333 640.256v-512.512c0-23.381333 19.029333-42.410667 42.410667-42.410667h512.512a42.453333 42.453333 0 0 1 42.410667 42.410667V640.256A42.453333 42.453333 0 0 1 768.256 682.666667H255.744A42.453333 42.453333 0 0 1 213.333333 640.256z m-85.333333 0A127.786667 127.786667 0 0 0 255.744 768h512.512A127.786667 127.786667 0 0 0 896 640.256v-512.512A127.786667 127.786667 0 0 0 768.256 0H255.744A127.786667 127.786667 0 0 0 128 127.74400000000003V640.256zM426.666667 298.66666699999996h170.666666v170.666666h-170.666666v-170.666666zM384 554.666667h256a42.666667 42.666667 0 0 0 42.666667-42.666667v-256a42.666667 42.666667 0 0 0-42.666667-42.666667H384a42.666667 42.666667 0 0 0-42.666667 42.666667V512a42.666667 42.666667 0 0 0 42.666667 42.666667zM341.333333 853.333333a42.666667 42.666667 0 1 0 85.333334 0v-128a42.666667 42.666667 0 1 0-85.333334 0V853.333333z m256 0a42.666667 42.666667 0 0 0 85.333334 0v-128a42.666667 42.666667 0 0 0-85.333334 0V853.333333zM341.333333 42.66666699999996a42.666667 42.666667 0 0 0 85.333334 0v-128a42.666667 42.666667 0 0 0-85.333334 0v128z m256 0a42.666667 42.666667 0 0 0 85.333334 0v-128a42.666667 42.666667 0 0 0-85.333334 0v128z m256 426.666666a42.666667 42.666667 0 0 0 0 85.333334h128a42.666667 42.666667 0 0 0 0-85.333334h-128z m0-213.333333a42.666667 42.666667 0 0 0 0 85.333333h128a42.666667 42.666667 0 0 0 0-85.333333h-128zM42.666667 469.333333a42.666667 42.666667 0 1 0 0 85.333334h128a42.666667 42.666667 0 1 0 0-85.333334H42.666667z m0-213.333333a42.666667 42.666667 0 0 0 0 85.333333h128a42.666667 42.666667 0 0 0 0-85.333333H42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="credit-card" unicode="&#59487;" d="M0 640.256A127.616 127.616 0 0 0 127.616 768H896.426667A127.744 127.744 0 0 0 1024 640.256v-512.512A127.616 127.616 0 0 0 896.384 0H127.573333A127.744 127.744 0 0 0 0 127.74400000000003V640.256zM938.666667 512V640.256A42.410667 42.410667 0 0 1 896.384 682.666667H127.573333A42.282667 42.282667 0 0 1 85.333333 640.256V512h853.333334z m0-85.333333H85.333333v-298.922667c0-23.381333 18.986667-42.410667 42.282667-42.410667H896.426667a42.282667 42.282667 0 0 1 42.282666 42.410667V426.666667z" horiz-adv-x="1024" />
<glyph glyph-name="crosshair" unicode="&#59488;" d="M469.333333 2.346667000000025V128a42.666667 42.666667 0 0 0 85.333334 0v-125.653333A384.170667 384.170667 0 0 1 893.653333 341.33333300000004H768a42.666667 42.666667 0 0 0 0 85.333334h125.653333A384.170667 384.170667 0 0 1 554.666667 765.653333V640a42.666667 42.666667 0 0 0-85.333334 0V765.653333A384.170667 384.170667 0 0 1 130.346667 426.666667H256a42.666667 42.666667 0 0 0 0-85.333334H130.346667A384.170667 384.170667 0 0 1 469.333333 2.346667000000025zM512-85.33333300000004C252.8-85.33333300000004 42.666667 124.79999999999995 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z" horiz-adv-x="1024" />
<glyph glyph-name="disc" unicode="&#59489;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM512 213.333333a170.666667 170.666667 0 1 0 0 341.333334 170.666667 170.666667 0 0 0 0-341.333334z m0 85.333334a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="delete" unicode="&#59490;" d="M896 768a128 128 0 0 0 128-128v-512a128 128 0 0 0-128-128H341.333333a42.666667 42.666667 0 0 0-32.128 14.549333l-298.666666 341.333334a42.666667 42.666667 0 0 0 0 56.234666l298.666666 341.333334A42.666667 42.666667 0 0 0 341.333333 768h554.666667z m0-682.666667a42.666667 42.666667 0 0 1 42.666667 42.666667V640a42.666667 42.666667 0 0 1-42.666667 42.666667H360.704l-261.333333-298.666667 261.333333-298.666667H896zM737.834667 542.165333l-256-256a42.666667 42.666667 0 0 1 60.330666-60.330666l256 256a42.666667 42.666667 0 1 1-60.330666 60.330666zM481.834667 481.834667l256-256a42.666667 42.666667 0 0 1 60.330666 60.330666l-256 256a42.666667 42.666667 0 0 1-60.330666-60.330666z" horiz-adv-x="1024" />
<glyph glyph-name="download-cloud" unicode="&#59491;" d="M512.468907 17.663999999999987l-140.501334 140.501333a42.666667 42.666667 0 1 1-60.330666-60.330666l170.666666-170.666667a42.666667 42.666667 0 0 1 60.330667 0l170.666667 170.666667a42.666667 42.666667 0 0 1-60.330667 60.330666L512.468907 17.663999999999987zM469.80224 341.33333300000004v-384a42.666667 42.666667 0 0 1 85.333333 0v384a42.666667 42.666667 0 0 1-85.333333 0zM427.988907 765.9946669999999a384 384 0 0 1-331.477334-635.989334 42.666667 42.666667 0 0 1 63.914667 56.576A298.666667 298.666667 0 1 0 673.32224 458.666667a42.666667 42.666667 0 0 1 41.344-32.042667H768.468907a170.666667 170.666667 0 0 0 98.346666-310.272 42.666667 42.666667 0 0 1 49.066667-69.802667A256 256 0 0 1 768.468907 512h-22.101334a384 384 0 0 1-318.293333 253.994667z" horiz-adv-x="1024" />
<glyph glyph-name="download" unicode="&#59492;" d="M85.333333 170.666667v-128a128 128 0 0 1 128-128h597.333334a128 128 0 0 1 128 128v128a42.666667 42.666667 0 0 1-85.333334 0v-128a42.666667 42.666667 0 0 0-42.666666-42.666667H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666667v128a42.666667 42.666667 0 0 1-85.333334 0zM512 273.664l-140.501333 140.501333a42.666667 42.666667 0 1 1-60.330667-60.330666l170.666667-170.666667a42.666667 42.666667 0 0 1 60.330666 0l170.666667 170.666667a42.666667 42.666667 0 0 1-60.330667 60.330666L512 273.664zM469.333333 810.666667v-597.333334a42.666667 42.666667 0 0 1 85.333334 0V810.666667a42.666667 42.666667 0 0 1-85.333334 0z" horiz-adv-x="1024" />
<glyph glyph-name="droplet" unicode="&#59493;" d="M301.098667 501.034667a290.986667 290.986667 0 0 1-64.853334-320.64c46.250667-109.952 155.136-181.674667 275.968-181.674667s229.717333 71.68 275.968 181.674667a290.986667 290.986667 0 0 1-64.853333 320.64L512 709.162667 301.098667 501.034667z m241.066666 297.301333l241.493334-237.866667a374.144 374.144 0 0 0 83.328-412.245333C807.594667 6.869333 667.562667-85.333333 512.213333-85.333333c-155.306667 0-295.381333 92.16-354.773333 233.557333a374.144 374.144 0 0 0 83.285333 412.202667l241.066667 237.909333a43.093333 43.093333 0 0 0 60.373333 0z" horiz-adv-x="1024" />
<glyph glyph-name="edit-" unicode="&#59494;" d="M170.666667 195.669333V42.666667h153.002666l512 512L682.666667 707.669333l-512-512zM712.832 798.165333l213.333333-213.333333a42.666667 42.666667 0 0 0 0-60.330667l-554.666666-554.666666A42.666667 42.666667 0 0 0 341.333333-42.666667H128a42.666667 42.666667 0 0 0-42.666667 42.666667v213.333333a42.666667 42.666667 0 0 0 12.501334 30.165334l554.666666 554.666666a42.666667 42.666667 0 0 0 60.330667 0z" horiz-adv-x="1024" />
<glyph glyph-name="edit" unicode="&#59495;" d="M810.666667 270.506667V42.666667a42.666667 42.666667 0 0 0-42.666667-42.666667H170.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V640a42.666667 42.666667 0 0 0 42.666667 42.666667h227.84a42.666667 42.666667 0 1 1 0 85.333333H170.666667a128 128 0 0 1-128-128v-597.333333a128 128 0 0 1 128-128h597.333333a128 128 0 0 1 128 128v227.84a42.666667 42.666667 0 0 1-85.333333 0zM384 366.336V256h110.336l384 384L768 750.336l-384-384z m414.165333 474.496l170.666667-170.666667a42.666667 42.666667 0 0 0 0-60.330666l-426.666667-426.666667A42.666667 42.666667 0 0 0 512 170.666667H341.333333a42.666667 42.666667 0 0 0-42.666666 42.666666v170.666667a42.666667 42.666667 0 0 0 12.501333 30.165333l426.666667 426.666667a42.666667 42.666667 0 0 0 60.330666 0z" horiz-adv-x="1024" />
<glyph glyph-name="edit-1" unicode="&#59496;" d="M170.666667 323.669333V213.333333h110.336l426.666666 426.666667L597.333333 750.336l-426.666666-426.666667zM627.498667 840.832l170.666666-170.666667a42.666667 42.666667 0 0 0 0-60.330666l-469.333333-469.333334A42.666667 42.666667 0 0 0 298.666667 128H128a42.666667 42.666667 0 0 0-42.666667 42.666667v170.666666a42.666667 42.666667 0 0 0 12.501334 30.165334l469.333333 469.333333a42.666667 42.666667 0 0 0 60.330667 0zM128-85.333333h768a42.666667 42.666667 0 0 1 0 85.333333H128a42.666667 42.666667 0 0 1 0-85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="external-link" unicode="&#59497;" d="M725.333333 341.333333v-256a42.666667 42.666667 0 0 0-42.666666-42.666666H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666666V554.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h256a42.666667 42.666667 0 0 1 0 85.333334H213.333333a128 128 0 0 1-128-128v-469.333334a128 128 0 0 1 128-128h469.333334a128 128 0 0 1 128 128v256a42.666667 42.666667 0 0 1-85.333334 0zM853.333333 725.333333v-213.333333a42.666667 42.666667 0 0 1 85.333334 0V768a42.666667 42.666667 0 0 1-42.666667 42.666667h-256a42.666667 42.666667 0 0 1 0-85.333334h213.333333zM456.832 268.501333l469.333333 469.333334a42.666667 42.666667 0 1 1-60.330666 60.330666l-469.333334-469.333333a42.666667 42.666667 0 0 1 60.330667-60.330667z" horiz-adv-x="1024" />
<glyph glyph-name="eye" unicode="&#59498;" d="M109.844053 353.834667c24.533333-37.973333 53.504-75.989333 86.613334-111.36C289.172053 143.744 394.900053 85.333333 512.020053 85.333333c117.12 0 222.890667 58.368 315.52 157.184A789.888 789.888 0 0 1 932.713387 384a789.888 789.888 0 0 1-105.130667 141.482667C734.91072 624.298667 629.140053 682.666667 512.020053 682.666667 394.900053 682.666667 289.129387 624.298667 196.500053 525.482667A789.888 789.888 0 0 1 91.32672 384c5.376-9.301333 11.52-19.413333 18.474667-30.165333zM4.54272 403.072c5.973333 11.989333 17.237333 32 33.621333 57.429333a874.325333 874.325333 0 0 0 96.042667 123.306667C241.556053 698.410667 367.80672 768 512.020053 768c144.213333 0 270.464-69.632 377.813334-184.149333a874.325333 874.325333 0 0 0 96-123.349334c16.426667-25.429333 27.690667-45.44 33.706666-57.429333a42.666667 42.666667 0 0 0 0-38.144c-6.016-11.989333-17.28-32-33.706666-57.429333a874.325333 874.325333 0 0 0-96-123.306667C782.484053 69.589333 656.233387 0 512.020053 0c-144.213333 0-270.464 69.632-377.813333 184.149333a874.325333 874.325333 0 0 0-96 123.349334 648.021333 648.021333 0 0 0-33.706667 57.429333 42.666667 42.666667 0 0 0 0 38.144zM512.020053 213.333333a170.666667 170.666667 0 1 0 0 341.333334 170.666667 170.666667 0 0 0 0-341.333334z m0 85.333334a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="feather" unicode="&#59499;" d="M230.997333 42.66666699999996l-115.498666-115.498667a42.666667 42.666667 0 1 0-60.330667 60.330667L170.666667 102.99733300000003V448a42.666667 42.666667 0 0 0 12.501333 30.165333l288 288a298.794667 298.794667 0 0 0 422.613333-422.570666l-287.573333-288.426667A42.666667 42.666667 0 0 0 576 42.66666699999996H230.997333z m256 256l241.365334-0.085334 104.96 105.301334a213.504 213.504 0 1 1-301.824 301.952L256 430.336v-242.005333l396.501333 396.501333a42.666667 42.666667 0 0 0 60.330667-60.330667L486.997333 298.66666699999996z m156.373334-85.333334H401.664l-85.333333-85.333333h241.92l85.12 85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="facebook" unicode="&#59500;" d="M384 597.333333a256 256 0 0 0 256 256h128a42.666667 42.666667 0 0 0 42.666667-42.666666v-170.666667a42.666667 42.666667 0 0 0-42.666667-42.666667h-128v-85.333333h128a42.666667 42.666667 0 0 0 41.386667-53.034667l-42.666667-170.666666A42.666667 42.666667 0 0 0 725.333333 256h-85.333333v-298.666667a42.666667 42.666667 0 0 0-42.666667-42.666666h-170.666666a42.666667 42.666667 0 0 0-42.666667 42.666666v298.666667H298.666667a42.666667 42.666667 0 0 0-42.666667 42.666667v170.666666a42.666667 42.666667 0 0 0 42.666667 42.666667h85.333333V597.333333z m341.333333 170.666667h-85.333333a170.666667 170.666667 0 0 1-170.666667-170.666667v-128a42.666667 42.666667 0 0 0-42.666666-42.666666H341.333333v-85.333334h85.333334a42.666667 42.666667 0 0 0 42.666666-42.666666v-298.666667h85.333334v298.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h94.72l21.333334 85.333334H597.333333a42.666667 42.666667 0 0 0-42.666666 42.666666V597.333333a85.333333 85.333333 0 0 0 85.333333 85.333334h85.333333V768z" horiz-adv-x="1024" />
<glyph glyph-name="file-minus" unicode="&#59501;" d="M554.666667 768H256a42.666667 42.666667 0 0 1-42.666667-42.666667v-682.666666a42.666667 42.666667 0 0 1 42.666667-42.666667h512a42.666667 42.666667 0 0 1 42.666667 42.666667V512h-213.333334a42.666667 42.666667 0 0 0-42.666666 42.666667V768z m85.333333-60.330667V597.333333h110.336L640 707.669333zM597.333333 853.333333a42.666667 42.666667 0 0 0 30.165334-12.501333l256-256A42.666667 42.666667 0 0 0 896 554.666667v-512a128 128 0 0 0-128-128H256a128 128 0 0 0-128 128V725.333333a128 128 0 0 0 128 128h341.333333zM384 213.33333300000004a42.666667 42.666667 0 0 0 0 85.333334h256a42.666667 42.666667 0 0 0 0-85.333334H384z" horiz-adv-x="1024" />
<glyph glyph-name="eye-off" unicode="&#59502;" d="M284.838065 603.144984a42.644793 42.644793 0 1 1-51.77078 67.805221A829.441232 829.441232 0 0 1 5.642602 403.908509a42.644793 42.644793 0 0 1-0.554382-39.23321c5.970271-11.983187 17.228497-31.983595 33.604097-57.399892 27.164733-42.005122 59.148329-83.967598 95.99343-123.243453C241.937402 69.488038 368.123346-0.06562 512.262748-0.06562a472.546956 472.546956 0 0 1 279.152818 96.590457 42.644793 42.644793 0 1 1-51.68549 67.805222A386.788277 386.788277 0 0 0 511.580431 85.223967c-116.420286 0-222.094084 58.338077-314.718575 157.103419a789.483061 789.483061 0 0 0-104.948837 141.282201 744.151646 744.151646 0 0 0 192.925046 219.535397z m571.78139-327.981107a42.644793 42.644793 0 0 1 65.246534-54.926494 831.573472 831.573472 0 0 1 97.102195 143.414441 42.644793 42.644793 0 0 1 0.511737 39.14792c-5.970271 11.983187-17.228497 31.983595-33.604097 57.399892a873.877107 873.877107 0 0 1-95.99343 123.243453C782.588094 697.987004 656.40215 767.540662 512.262748 767.540662a431.352086 431.352086 0 0 1-99.277079-11.343515 42.644793 42.644793 0 0 1 19.446026-83.072057A346.275723 346.275723 0 0 0 512.177458 682.251075c117.145248 0 222.861691-58.338077 315.443537-157.103419a789.483061 789.483061 0 0 0 105.034127-141.324845 746.283885 746.283885 0 0 0-76.035667-108.658934z m-285.165734 47.250431a85.289587 85.289587 0 1 0-120.514186 120.514187 42.644793 42.644793 0 1 1-58.167498 62.431977 170.579174 170.579174 0 1 1 241.113662-241.113662 42.644793 42.644793 0 1 1-62.431978 58.167498zM13.020151 822.68038l938.185456-938.185456a42.644793 42.644793 0 0 1 60.299738 60.299738l-938.185456 938.185456A42.644793 42.644793 0 1 1 13.020151 822.68038z" horiz-adv-x="1024" />
<glyph glyph-name="fast-forward" unicode="&#59503;" d="M580.864 51.626667A42.666667 42.666667 0 0 0 512 85.333333V682.666667a42.666667 42.666667 0 0 0 68.864 33.706666l384-298.666666a42.666667 42.666667 0 0 0 0-67.413334l-384-298.666666zM869.12 384L597.333333 595.413333v-422.826666L869.162667 384zM111.530667 51.626667A42.666667 42.666667 0 0 0 42.666667 85.333333V682.666667a42.666667 42.666667 0 0 0 68.864 33.706666l384-298.666666a42.666667 42.666667 0 0 0 0-67.413334l-384-298.666666zM399.786667 384L128 595.413333v-422.826666L399.829333 384z" horiz-adv-x="1024" />
<glyph glyph-name="file-text" unicode="&#59504;" d="M554.666667 768H256a42.666667 42.666667 0 0 1-42.666667-42.666667v-682.666666a42.666667 42.666667 0 0 1 42.666667-42.666667h512a42.666667 42.666667 0 0 1 42.666667 42.666667V512h-213.333334a42.666667 42.666667 0 0 0-42.666666 42.666667V768z m85.333333-60.330667V597.333333h110.336L640 707.669333zM597.333333 853.333333a42.666667 42.666667 0 0 0 30.165334-12.501333l256-256A42.666667 42.666667 0 0 0 896 554.666667v-512a128 128 0 0 0-128-128H256a128 128 0 0 0-128 128V725.333333a128 128 0 0 0 128 128h341.333333z m85.333334-469.333333a42.666667 42.666667 0 0 0 0-85.333333H341.333333a42.666667 42.666667 0 0 0 0 85.333333h341.333334z m0-170.666667a42.666667 42.666667 0 0 0 0-85.333333H341.333333a42.666667 42.666667 0 0 0 0 85.333333h341.333334z m-256 341.333334a42.666667 42.666667 0 0 0 0-85.333334H341.333333a42.666667 42.666667 0 1 0 0 85.333334h85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="film" unicode="&#59505;" d="M42.666667 717.738667A135.68 135.68 0 0 0 178.261333 853.333333h667.477334A135.68 135.68 0 0 0 981.333333 717.738667v-667.477334A135.68 135.68 0 0 0 845.738667-85.33333300000004H178.261333A135.68 135.68 0 0 0 42.666667 50.261333000000036V717.738667zM341.333333 768v-341.333333h341.333334V768H341.333333z m0-768h341.333334v341.333333H341.333333v-341.333333z m554.666667 426.666667V554.666667h-128v-128h128z m0-85.333334h-128v-128h128v128zM128 341.33333300000004v-128h128v128H128z m0 85.333334h128V554.666667H128v-128z m640 341.333333v-128h128V717.738667A50.346667 50.346667 0 0 1 845.738667 768H768z m128-640h-128v-128h77.738667A50.346667 50.346667 0 0 1 896 50.261333000000036V128zM256 768H178.261333A50.346667 50.346667 0 0 1 128 717.738667V640h128V768z m0-768v128H128v-77.738667C128 22.61333300000001 150.570667 0 178.261333 0H256z" horiz-adv-x="1024" />
<glyph glyph-name="file" unicode="&#59506;" d="M554.666667 853.333333a42.666667 42.666667 0 0 0 30.165333-12.501333l298.666667-298.666667A42.666667 42.666667 0 0 0 896 512v-469.333333a128 128 0 0 0-128-128H256a128 128 0 0 0-128 128V725.333333a128 128 0 0 0 128 128h298.666667z m-42.666667-341.333333V768H256a42.666667 42.666667 0 0 1-42.666667-42.666667v-682.666666a42.666667 42.666667 0 0 1 42.666667-42.666667h512a42.666667 42.666667 0 0 1 42.666667 42.666667V469.333333h-256a42.666667 42.666667 0 0 0-42.666667 42.666667z m85.333333 195.669333V554.666667h153.002667L597.333333 707.669333z" horiz-adv-x="1024" />
<glyph glyph-name="file-plus" unicode="&#59507;" d="M554.666667 768H256a42.666667 42.666667 0 0 1-42.666667-42.666667v-682.666666a42.666667 42.666667 0 0 1 42.666667-42.666667h512a42.666667 42.666667 0 0 1 42.666667 42.666667V512h-213.333334a42.666667 42.666667 0 0 0-42.666666 42.666667V768z m85.333333-60.330667V597.333333h110.336L640 707.669333zM597.333333 853.333333a42.666667 42.666667 0 0 0 30.165334-12.501333l256-256A42.666667 42.666667 0 0 0 896 554.666667v-512a128 128 0 0 0-128-128H256a128 128 0 0 0-128 128V725.333333a128 128 0 0 0 128 128h341.333333z m-128-640H384a42.666667 42.666667 0 0 0 0 85.333334h85.333333v85.333333a42.666667 42.666667 0 0 0 85.333334 0v-85.333333h85.333333a42.666667 42.666667 0 0 0 0-85.333334h-85.333333v-85.333333a42.666667 42.666667 0 0 0-85.333334 0v85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="folder" unicode="&#59508;" d="M170.666667 725.333333a42.666667 42.666667 0 0 1-42.666667-42.666666v-597.333334a42.666667 42.666667 0 0 1 42.666667-42.666666h682.666666a42.666667 42.666667 0 0 1 42.666667 42.666666V554.666667a42.666667 42.666667 0 0 1-42.666667 42.666666h-384a42.666667 42.666667 0 0 0-35.498666 18.986667L361.173333 725.333333H170.666667z m682.666666-42.666666a128 128 0 0 0 128-128v-469.333334a128 128 0 0 0-128-128H170.666667a128 128 0 0 0-128 128V682.666667a128 128 0 0 0 128 128h213.333333a42.666667 42.666667 0 0 0 35.498667-18.986667L492.16 682.666667H853.333333z" horiz-adv-x="1024" />
<glyph glyph-name="filter" unicode="&#59509;" d="M384 348.757333l-331.264 391.68A42.666667 42.666667 0 0 0 85.333333 810.666667h853.333334a42.666667 42.666667 0 0 0 32.597333-70.229334L640 348.757333V0a42.666667 42.666667 0 0 0-61.738667-38.144l-170.666666 85.333333A42.666667 42.666667 0 0 0 384 85.33333300000004v263.424zM177.28 725.333333l281.984-333.397333a42.666667 42.666667 0 0 0 10.069333-27.562667v-252.672l85.333334-42.666666V364.373333a42.666667 42.666667 0 0 0 10.069333 27.562667L846.72 725.333333H177.28z" horiz-adv-x="1024" />
<glyph glyph-name="flag" unicode="&#59510;" d="M128-42.66666699999996V768a42.666667 42.666667 0 0 0 12.501333 30.165333c9.386667 9.386667 26.197333 20.608 51.626667 30.762667C230.698667 844.373333 280.064 853.333333 341.333333 853.333333c60.458667 0 101.674667-11.776 186.496-45.738666C603.008 777.557333 636.458667 768 682.666667 768c50.730667 0 89.344 7.04 117.504 18.261333 14.549333 5.845333 21.674667 10.624 22.997333 11.946667C850.048 825.045333 896 805.973333 896 768v-512a42.666667 42.666667 0 0 0-12.501333-30.165333c-9.386667-9.386667-26.197333-20.608-51.626667-30.762667-38.528-15.445333-87.893333-24.405333-149.205333-24.405333-60.458667 0-101.674667 11.776-186.496 45.738666C420.992 246.44266700000003 387.541333 256 341.333333 256c-50.730667 0-89.344-7.04-117.504-18.261333a174.677333 174.677333 0 0 1-10.496-4.608V-42.66666699999996a42.666667 42.666667 0 0 0-85.333333 0z m213.333333 384c60.458667 0 101.674667-11.776 186.496-45.738666 75.178667-30.037333 108.629333-39.594667 154.837334-39.594667 50.730667 0 89.344 7.04 117.504 18.261333 4.053333 1.664 7.552 3.2 10.496 4.608v420.693334c-34.986667-10.794667-77.397333-16.896-128-16.896-60.458667 0-101.674667 11.776-186.496 45.738666C420.992 758.442667 387.541333 768 341.333333 768c-50.730667 0-89.344-7.04-117.504-18.261333A174.677333 174.677333 0 0 1 213.333333 745.130667v-420.693334C248.32 335.23199999999997 290.730667 341.33333300000004 341.333333 341.33333300000004z" horiz-adv-x="1024" />
<glyph glyph-name="globe" unicode="&#59511;" d="M512-85.33333300000004C252.8-85.33333300000004 42.666667 124.79999999999995 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m211.2 426.666666a695.466667 695.466667 0 0 0-114.176-328.96A384.341333 384.341333 0 0 1 893.653333 341.33333300000004H723.2z m-422.272 0H130.346667a384.341333 384.341333 0 0 1 284.629333-328.96A696.789333 696.789333 0 0 0 300.928 341.33333300000004z m308.096 414.293334A696.789333 696.789333 0 0 0 723.072 426.666667h170.581333a384.341333 384.341333 0 0 1-284.629333 328.96z m-194.048 0A384.341333 384.341333 0 0 1 130.346667 426.666667H300.8a695.466667 695.466667 0 0 0 114.176 328.96zM386.474667 341.33333300000004A610.133333 610.133333 0 0 1 512 23.46666700000003 609.621333 609.621333 0 0 1 637.653333 341.33333300000004H386.474667z m251.050666 85.333334A610.133333 610.133333 0 0 1 512 744.533333 609.621333 609.621333 0 0 1 386.346667 426.666667h251.178666z" horiz-adv-x="1024" />
<glyph glyph-name="grid" unicode="&#59512;" d="M170.666667 512h213.333333V725.333333H170.666667v-213.333333zM128 810.666667h298.666667a42.666667 42.666667 0 0 0 42.666666-42.666667v-298.666667a42.666667 42.666667 0 0 0-42.666666-42.666666H128a42.666667 42.666667 0 0 0-42.666667 42.666666V768a42.666667 42.666667 0 0 0 42.666667 42.666667zM640 512h213.333333V725.333333h-213.333333v-213.333333z m-42.666667 298.666667h298.666667a42.666667 42.666667 0 0 0 42.666667-42.666667v-298.666667a42.666667 42.666667 0 0 0-42.666667-42.666666h-298.666667a42.666667 42.666667 0 0 0-42.666666 42.666666V768a42.666667 42.666667 0 0 0 42.666666 42.666667zM640 42.666667h213.333333v213.333333h-213.333333v-213.333333z m-42.666667 298.666666h298.666667a42.666667 42.666667 0 0 0 42.666667-42.666666v-298.666667a42.666667 42.666667 0 0 0-42.666667-42.666667h-298.666667a42.666667 42.666667 0 0 0-42.666666 42.666667v298.666667a42.666667 42.666667 0 0 0 42.666666 42.666666zM170.666667 42.666667h213.333333v213.333333H170.666667v-213.333333z m-42.666667 298.666666h298.666667a42.666667 42.666667 0 0 0 42.666666-42.666666v-298.666667a42.666667 42.666667 0 0 0-42.666666-42.666667H128a42.666667 42.666667 0 0 0-42.666667 42.666667v298.666667a42.666667 42.666667 0 0 0 42.666667 42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="heart" unicode="&#59513;" d="M527.061333 729.472A277.333333 277.333333 0 0 0 1000.618667 533.333333a277.333333 277.333333 0 0 0-81.28-196.138666l-377.173334-377.173334a42.666667 42.666667 0 0 0-60.330666 0l-377.173334 377.173334a277.376 277.376 0 0 0 392.277334 392.277333l15.061333-15.061333 15.061333 15.061333z m286.72-377.173333l45.226667 45.226666a192 192 0 0 1-135.808 327.893334 192 192 0 0 1-135.808-56.32l-45.226667-45.226667a42.666667 42.666667 0 0 0-60.330666 0l-45.226667 45.226667a192.042667 192.042667 0 0 1-271.616-271.573334L512 50.517333l301.781333 301.781334z" horiz-adv-x="1024" />
<glyph glyph-name="home" unicode="&#59514;" d="M101.802667 545.7066669999999l384 298.666666a42.666667 42.666667 0 0 0 52.394666 0l384-298.666666A42.666667 42.666667 0 0 0 938.666667 512v-469.333333a128 128 0 0 0-128-128H213.333333a128 128 0 0 0-128 128V512a42.666667 42.666667 0 0 0 16.469334 33.706667zM682.666667 0h128a42.666667 42.666667 0 0 1 42.666666 42.666667V491.093333l-341.333333 265.514667-341.333333-265.472V42.66666699999996a42.666667 42.666667 0 0 1 42.666666-42.666667h128v384a42.666667 42.666667 0 0 0 42.666667 42.666667h256a42.666667 42.666667 0 0 0 42.666667-42.666667v-384z m-256 0h170.666666v341.333333h-170.666666v-341.333333z" horiz-adv-x="1024" />
<glyph glyph-name="github" unicode="&#59515;" d="M371.754667 83.541333c-91.818667-27.562667-128.896-12.970667-174.805334 43.861334-3.072 3.797333-15.786667 19.968-19.2 24.192-27.477333 33.92-49.408 52.309333-82.048 60.458666a42.666667 42.666667 0 0 1-20.736-82.773333c9.813333-2.474667 19.712-10.752 36.394667-31.36 2.986667-3.626667 15.701333-19.797333 19.2-24.106667 66.304-82.133333 138.026667-110.293333 265.685333-72.021333a42.666667 42.666667 0 0 1-24.490666 81.749333zM960 489.813333a274.773333 274.773333 0 0 1-58.837333 169.856 258.986667 258.986667 0 0 1-12.458667 167.808 42.666667 42.666667 0 0 1-27.093333 24.106667 64.085333 64.085333 0 0 1-8.96 1.877333c-40.064 5.802667-98.858667-10.026667-177.621334-59.989333a613.546667 613.546667 0 0 1-283.392 0C312.874667 843.434667 254.08 859.306667 213.973333 853.461333a64.085333 64.085333 0 0 1-8.96-1.877333 42.666667 42.666667 0 0 1-27.050666-24.106667 258.986667 258.986667 0 0 1-12.458667-167.808A274.773333 274.773333 0 0 1 106.666667 488.32c0-196.778667 87.893333-292.949333 247.466666-329.6a186.453333 186.453333 0 0 1-12.714666-81.92L341.333333-85.333333a42.666667 42.666667 0 0 1 85.333334 0v165.12c-2.133333 31.616 8.106667 59.776 28.117333 80.426666a42.666667 42.666667 0 0 1-25.429333 71.978667C267.52 252.330667 192 315.776 192 488.533333a189.568 189.568 0 0 0 52.224 131.84 42.666667 42.666667 0 0 1 9.088 44.373334 173.653333 173.653333 0 0 0-5.973333 102.058666c2.986667-0.64 6.272-1.493333 9.856-2.56 27.52-7.893333 61.781333-24.490667 103.04-52.181333a42.666667 42.666667 0 0 1 34.944-5.717333 528.213333 528.213333 0 0 0 276.309333 0 42.666667 42.666667 0 0 1 34.944 5.717333c41.258667 27.690667 75.52 44.288 103.04 52.224 3.584 1.024 6.826667 1.877333 9.813333 2.56a173.653333 173.653333 0 0 0-5.930666-102.101333 42.666667 42.666667 0 0 1 9.088-44.373334A189.44 189.44 0 0 0 874.666667 489.813333c0-174.421333-76.032-238.336-236.8-256.256a42.666667 42.666667 0 0 1-25.941334-72.106666 101.12 101.12 0 0 0 28.202667-78.336L640-85.333333a42.666667 42.666667 0 0 1 85.333333 0v165.12a177.237333 177.237333 0 0 1-12.373333 79.658666c158.72 35.2 247.04 132.266667 247.04 330.368z" horiz-adv-x="1024" />
<glyph glyph-name="image" unicode="&#59516;" d="M213.333333-42.66666699999996h-0.213333A127.786667 127.786667 0 0 0 85.333333 85.12V682.88A127.786667 127.786667 0 0 0 213.12 810.666667h597.76A127.786667 127.786667 0 0 0 938.666667 682.88v-597.76A127.786667 127.786667 0 0 0 810.88-42.66666699999996H213.333333z m640 401.664v323.84A42.453333 42.453333 0 0 1 810.88 725.333333H213.12A42.453333 42.453333 0 0 1 170.666667 682.88v-597.76c0-18.261333 11.52-33.792 27.648-39.808L652.501333 499.498667a42.666667 42.666667 0 0 0 60.330667 0L853.333333 358.997333z m0-120.661333l-170.666666 170.666667L316.330667 42.66666699999996h494.506666c23.466667 0 42.496 18.986667 42.496 42.453333v153.173333zM362.666667 426.666667a106.666667 106.666667 0 1 0 0 213.333333 106.666667 106.666667 0 0 0 0-213.333333z m0 85.333333a21.333333 21.333333 0 1 1 0 42.666667 21.333333 21.333333 0 0 1 0-42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="inbox" unicode="&#59517;" d="M311.466667 768h401.066666a128 128 0 0 0 117.077334-76.117333l148.053333-333.226667A42.666667 42.666667 0 0 0 981.333333 341.33333300000004v-213.333333a128 128 0 0 0-128-128H170.666667a128 128 0 0 0-128 128v213.333333a42.666667 42.666667 0 0 0 3.669333 17.322667l148.053333 333.226667A128 128 0 0 0 311.466667 768z m561.536-384l-121.386667 273.28A42.666667 42.666667 0 0 1 712.533333 682.666667H311.466667a42.666667 42.666667 0 0 1-39.082667-25.386667L151.04 384H341.333333a42.666667 42.666667 0 0 0 35.498667-18.986667L449.493333 256h125.013334l72.661333 109.013333A42.666667 42.666667 0 0 0 682.666667 384h190.336zM896 128v170.666667h-190.506667l-72.661333-109.013334A42.666667 42.666667 0 0 0 597.333333 170.66666699999996h-170.666666a42.666667 42.666667 0 0 0-35.498667 18.986666L318.506667 298.66666699999996H128v-170.666667a42.666667 42.666667 0 0 1 42.666667-42.666667h682.666666a42.666667 42.666667 0 0 1 42.666667 42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="layers" unicode="&#59518;" d="M492.928 848.810667a42.666667 42.666667 0 0 0 38.144 0l426.666667-213.333334a42.666667 42.666667 0 0 0 0-76.288l-426.666667-213.333333a42.666667 42.666667 0 0 0-38.144 0l-426.666667 213.333333a42.666667 42.666667 0 0 0 0 76.288l426.666667 213.333334zM180.736 597.333333L512 431.701333 843.264 597.333333 512 762.965333 180.736 597.333333zM104.405333 208.810667a42.666667 42.666667 0 0 1-38.144-76.288l426.666667-213.333334a42.666667 42.666667 0 0 1 38.144 0l426.666667 213.333334a42.666667 42.666667 0 0 1-38.144 76.288L512 5.034667l-407.594667 203.776zM104.405333 422.144a42.666667 42.666667 0 0 1-38.144-76.288l426.666667-213.333333a42.666667 42.666667 0 0 1 38.144 0l426.666667 213.333333a42.666667 42.666667 0 0 1-38.144 76.288L512 218.368l-407.594667 203.776z" horiz-adv-x="1024" />
<glyph glyph-name="info" unicode="&#59519;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM554.666667 213.333333v170.666667a42.666667 42.666667 0 0 1-85.333334 0v-170.666667a42.666667 42.666667 0 0 1 85.333334 0zM512 554.666667m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0Z" horiz-adv-x="1024" />
<glyph glyph-name="instagram" unicode="&#59520;" d="M128 597.546667v-427.093334A170.453333 170.453333 0 0 1 298.453333 0h427.093334A170.453333 170.453333 0 0 1 896 170.453333V597.546667A170.453333 170.453333 0 0 1 725.546667 768H298.453333A170.453333 170.453333 0 0 1 128 597.546667z m-85.333333 0A255.786667 255.786667 0 0 0 298.453333 853.333333h427.093334A255.786667 255.786667 0 0 0 981.333333 597.546667v-427.093334A255.786667 255.786667 0 0 0 725.546667-85.333333H298.453333A255.786667 255.786667 0 0 0 42.666667 170.453333V597.546667zM640.426667 404.608a128 128 0 1 1-253.184-37.546667 128 128 0 0 1 253.226666 37.546667z m84.48 12.544a213.333333 213.333333 0 1 0-422.101334-62.592 213.333333 213.333333 0 0 0 422.058667 62.592zM725.333333 640m-42.666666 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0Z" horiz-adv-x="1024" />
<glyph glyph-name="layout" unicode="&#59521;" d="M85.333333 682.88A127.786667 127.786667 0 0 0 213.12 810.666667h597.76A127.786667 127.786667 0 0 0 938.666667 682.88v-597.76A127.786667 127.786667 0 0 0 810.88-42.66666699999996H213.12A127.786667 127.786667 0 0 0 85.333333 85.12V682.88zM853.333333 554.666667V682.88A42.453333 42.453333 0 0 1 810.88 725.333333H213.12A42.453333 42.453333 0 0 1 170.666667 682.88V554.666667h682.666666z m0-85.333334H426.666667v-426.666666h384.213333c23.466667 0 42.453333 18.986667 42.453333 42.453333V469.333333zM341.333333 42.66666699999996V469.333333H170.666667v-384.213333c0-23.466667 18.986667-42.453333 42.453333-42.453333H341.333333z" horiz-adv-x="1024" />
<glyph glyph-name="link-" unicode="&#59522;" d="M640 554.666667h128a170.666667 170.666667 0 1 0 0-341.333334h-128a42.666667 42.666667 0 0 1 0-85.333333h128a256 256 0 1 1 0 512h-128a42.666667 42.666667 0 0 1 0-85.333333z m-256-341.333334H256a170.666667 170.666667 0 0 0 0 341.333334h128a42.666667 42.666667 0 1 1 0 85.333333H256a256 256 0 1 1 0-512h128a42.666667 42.666667 0 0 1 0 85.333333zM341.333333 341.333333h341.333334a42.666667 42.666667 0 0 1 0 85.333334H341.333333a42.666667 42.666667 0 0 1 0-85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="life-buoy" unicode="&#59523;" d="M272.298667 83.96799999999996A382.378667 382.378667 0 0 1 512 0a382.378667 382.378667 0 0 1 239.701333 83.968l-122.026666 122.026667A212.352 212.352 0 0 0 512 170.66666699999996a212.352 212.352 0 0 0-117.632 35.328l-122.026667-122.026667z m-60.330667 60.330667l122.026667 122.026666A212.352 212.352 0 0 0 298.666667 384c0 43.52 13.013333 83.925333 35.328 117.632l-122.026667 122.026667A382.378667 382.378667 0 0 1 128 384c0-90.666667 31.402667-173.994667 83.968-239.701333z m60.330667 539.733333l122.026666-122.026667A212.352 212.352 0 0 0 512 597.333333c43.52 0 83.925333-13.013333 117.632-35.328l122.026667 122.026667A382.378667 382.378667 0 0 1 512 768a382.378667 382.378667 0 0 1-239.701333-83.968z m539.733333-60.330667l-122.026667-122.026666c22.314667-33.749333 35.328-74.197333 35.328-117.674667 0-43.52-13.013333-83.925333-35.328-117.632l122.026667-122.026667A382.378667 382.378667 0 0 1 896 384a382.378667 382.378667 0 0 1-83.968 239.701333zM512-85.33333300000004C252.8-85.33333300000004 42.666667 124.79999999999995 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 341.333333a128 128 0 1 1 0 256 128 128 0 0 1 0-256z" horiz-adv-x="1024" />
<glyph glyph-name="link" unicode="&#59524;" d="M392.533333 315.776a256 256 0 0 1 386.005334-27.648l128 128a256 256 0 1 1-361.472 362.496l-73.813334-73.386667a42.666667 42.666667 0 1 1 60.16-60.501333l73.386667 72.96a170.538667 170.538667 0 0 0 238.805333-2.517333 170.666667 170.666667 0 0 0 2.090667-239.232l-127.488-127.488A170.666667 170.666667 0 0 0 460.8 366.933333a42.666667 42.666667 0 1 1-68.352-51.114666zM631.466667 452.224a256 256 0 0 1-386.005334 27.648l-128-128a256 256 0 1 1 361.472-362.496l73.472 73.472a42.666667 42.666667 0 0 1-60.330666 60.330667l-72.96-72.96c-66.432-64.170667-172.885333-63.232-238.72 2.602666a170.666667 170.666667 0 0 0-2.090667 239.232l127.488 127.488a170.666667 170.666667 0 0 0 257.365333-18.432 42.666667 42.666667 0 1 1 68.352 51.114667z" horiz-adv-x="1024" />
<glyph glyph-name="log-in" unicode="&#59525;" d="M597.333333-85.333333h213.333334a128 128 0 0 1 128 128V725.333333a128 128 0 0 1-128 128h-213.333334a42.666667 42.666667 0 0 1 0-85.333333h213.333334a42.666667 42.666667 0 0 0 42.666666-42.666667v-682.666666a42.666667 42.666667 0 0 0-42.666666-42.666667h-213.333334a42.666667 42.666667 0 0 1 0-85.333333zM439.168 243.498667a42.666667 42.666667 0 0 1 60.330667-60.330667l170.666666 170.666667a42.666667 42.666667 0 0 1 0 60.330666l-170.666666 170.666667a42.666667 42.666667 0 0 1-60.330667-60.330667L579.669333 384l-140.501333-140.501333zM640 426.666667H128a42.666667 42.666667 0 0 1 0-85.333334h512a42.666667 42.666667 0 0 1 0 85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="list" unicode="&#59526;" d="M341.333333 597.333333h554.666667a42.666667 42.666667 0 0 1 0 85.333334H341.333333a42.666667 42.666667 0 1 1 0-85.333334zM341.333333 341.333333h554.666667a42.666667 42.666667 0 0 1 0 85.333334H341.333333a42.666667 42.666667 0 0 1 0-85.333334zM341.333333 85.333333h554.666667a42.666667 42.666667 0 0 1 0 85.333334H341.333333a42.666667 42.666667 0 0 1 0-85.333334zM128 640m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0ZM128 384m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0ZM128 128m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0Z" horiz-adv-x="1024" />
<glyph glyph-name="lock" unicode="&#59527;" d="M256 469.333333V597.333333a256 256 0 1 0 512 0v-128h42.88A127.957333 127.957333 0 0 0 938.666667 341.674667v-299.349334A127.701333 127.701333 0 0 0 810.88-85.33333300000004H213.12A127.957333 127.957333 0 0 0 85.333333 42.325333v299.349334A127.701333 127.701333 0 0 0 213.12 469.333333H256z m-85.333333-127.658666v-299.349334c0-23.168 19.157333-42.325333 42.453333-42.325333h597.76c23.466667 0 42.453333 18.944 42.453333 42.325333v299.349334a42.624 42.624 0 0 1-42.453333 42.325333H213.12a42.368 42.368 0 0 1-42.453333-42.325333z m170.666666 127.786666h341.333334V597.333333a170.666667 170.666667 0 1 1-341.333334 0v-127.872z" horiz-adv-x="1024" />
<glyph glyph-name="log-out" unicode="&#59528;" d="M426.666667 0H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666667V725.333333a42.666667 42.666667 0 0 0 42.666666 42.666667h213.333334a42.666667 42.666667 0 0 1 0 85.333333H213.333333a128 128 0 0 1-128-128v-682.666666a128 128 0 0 1 128-128h213.333334a42.666667 42.666667 0 0 1 0 85.333333zM695.168 243.498667a42.666667 42.666667 0 0 1 60.330667-60.330667l170.666666 170.666667a42.666667 42.666667 0 0 1 0 60.330666l-170.666666 170.666667a42.666667 42.666667 0 0 1-60.330667-60.330667L835.669333 384l-140.501333-140.501333zM896 426.666667H384a42.666667 42.666667 0 0 1 0-85.333334h512a42.666667 42.666667 0 0 1 0 85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="loader" unicode="&#59529;" d="M469.333333 810.666667v-170.666667a42.666667 42.666667 0 0 1 85.333334 0V810.666667a42.666667 42.666667 0 0 1-85.333334 0zM469.333333 128v-170.666667a42.666667 42.666667 0 0 1 85.333334 0v170.666667a42.666667 42.666667 0 0 1-85.333334 0zM180.181333 655.488l120.746667-120.746667a42.666667 42.666667 0 0 1 60.330667 60.330667l-120.746667 120.746667a42.666667 42.666667 0 0 1-60.330667-60.330667zM662.741333 172.928l120.746667-120.746667a42.666667 42.666667 0 0 1 60.330667 60.330667l-120.746667 120.746667a42.666667 42.666667 0 0 1-60.330667-60.330667zM85.333333 341.333333h170.666667a42.666667 42.666667 0 0 1 0 85.333334H85.333333a42.666667 42.666667 0 0 1 0-85.333334zM768 341.333333h170.666667a42.666667 42.666667 0 0 1 0 85.333334h-170.666667a42.666667 42.666667 0 0 1 0-85.333334zM240.512 52.181333l120.746667 120.746667a42.666667 42.666667 0 0 1-60.330667 60.330667l-120.746667-120.746667a42.666667 42.666667 0 0 1 60.330667-60.330667zM723.072 534.741333l120.746667 120.746667a42.666667 42.666667 0 1 1-60.330667 60.330667l-120.746667-120.746667a42.666667 42.666667 0 1 1 60.330667-60.330667z" horiz-adv-x="1024" />
<glyph glyph-name="mail" unicode="&#59530;" d="M170.666667 768h682.666666c70.485333 0 128-57.514667 128-128v-512c0-70.485333-57.514667-128-128-128H170.666667c-70.485333 0-128 57.514667-128 128V640c0 70.485333 57.514667 128 128 128z m720.768-108.970667A42.922667 42.922667 0 0 1 853.333333 682.666667H170.666667c-16.554667 0-31.061333-9.685333-38.101334-23.637334L512 393.429333l379.434667 265.6zM896 558.0799999999999l-359.552-251.648a42.666667 42.666667 0 0 0-48.896 0L128 558.037333V128c0-23.381333 19.285333-42.666667 42.666667-42.666667h682.666666c23.381333 0 42.666667 19.285333 42.666667 42.666667V558.0799999999999z" horiz-adv-x="1024" />
<glyph glyph-name="maximize-" unicode="&#59531;" d="M853.333333 725.333333v-213.333333a42.666667 42.666667 0 0 1 85.333334 0V768a42.666667 42.666667 0 0 1-42.666667 42.666667h-256a42.666667 42.666667 0 0 1 0-85.333334h213.333333zM170.666667 256a42.666667 42.666667 0 0 1-85.333334 0v-256a42.666667 42.666667 0 0 1 42.666667-42.666667h256a42.666667 42.666667 0 0 1 0 85.333334H170.666667v213.333333zM865.834667 798.165333l-298.666667-298.666666a42.666667 42.666667 0 1 1 60.330667-60.330667l298.666666 298.666667a42.666667 42.666667 0 1 1-60.330666 60.330666zM158.165333-30.165333l298.666667 298.666666a42.666667 42.666667 0 0 1-60.330667 60.330667l-298.666666-298.666667a42.666667 42.666667 0 0 1 60.330666-60.330666z" horiz-adv-x="1024" />
<glyph glyph-name="map" unicode="&#59532;" d="M640 613.6320000000001l-256 128v-587.264l256-128V613.6320000000001z m85.333333 1.621333v-584.405333l213.333334 121.898667V737.152L725.333333 615.253333zM319.530667 847.36a42.453333 42.453333 0 0 0 41.642666 1.066667l320.170667-160.042667 278.826667 159.317333A42.666667 42.666667 0 0 0 1024 810.666667v-682.666667a42.666667 42.666667 0 0 0-21.504-37.034667l-298.666667-170.666666a42.666667 42.666667 0 0 0-40.234666-1.109334l-320.938667 160.426667-278.826667-159.317333A42.666667 42.666667 0 0 0 0-42.66666699999996V640a42.666667 42.666667 0 0 0 21.504 37.034667L319.530667 847.36zM298.666667 737.152L85.333333 615.253333v-584.405333l213.333334 121.898667V737.152z" horiz-adv-x="1024" />
<glyph glyph-name="map-pin" unicode="&#59534;" d="M545.408-7.253333a1243.946667 1243.946667 0 0 1 127.616 116.608C786.218667 228.821333 853.333333 351.872 853.333333 469.333333a341.333333 341.333333 0 0 1-682.666666 0c0-117.461333 67.114667-240.469333 180.309333-359.978666A1243.946667 1243.946667 0 0 1 512-32.981333c10.325333 7.68 21.546667 16.213333 33.408 25.685333z m189.568 57.898666a1328.298667 1328.298667 0 0 0-181.504-158.976c-8.32-6.016-14.378667-10.24-17.792-12.501333a42.666667 42.666667 0 0 0-47.36 0c-3.413333 2.304-9.472 6.485333-17.792 12.501333a1328.298667 1328.298667 0 0 0-181.504 158.976C162.218667 184.490667 85.333333 325.461333 85.333333 469.333333 85.333333 704.981333 276.352 896 512 896s426.666667-191.018667 426.666667-426.666667c0-143.872-76.885333-284.842667-203.690667-418.688zM512 298.666667a170.666667 170.666667 0 1 0 0 341.333333 170.666667 170.666667 0 0 0 0-341.333333z m0 85.333333a85.333333 85.333333 0 1 1 0 170.666667 85.333333 85.333333 0 0 1 0-170.666667z" horiz-adv-x="1024" />
<glyph glyph-name="menu" unicode="&#59535;" d="M128 341.333333h768a42.666667 42.666667 0 0 1 0 85.333334H128a42.666667 42.666667 0 0 1 0-85.333334zM128 597.333333h768a42.666667 42.666667 0 0 1 0 85.333334H128a42.666667 42.666667 0 1 1 0-85.333334zM128 85.333333h768a42.666667 42.666667 0 0 1 0 85.333334H128a42.666667 42.666667 0 0 1 0-85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="message-circle" unicode="&#59536;" d="M357.717333 121.557333a42.666667 42.666667 0 0 0 32.725334-2.389333A314.965333 314.965333 0 0 1 533.333333 85.333333a320.085333 320.085333 0 0 1 286.165334 177.066667A314.88 314.88 0 0 1 853.333333 405.248l0.085334 19.114667C844.458667 586.752 714.752 716.373333 554.666667 725.333333h-21.461334a315.093333 315.093333 0 0 1-142.933333-33.92A320 320 0 0 1 213.333333 405.205333a314.88 314.88 0 0 1 33.834667-142.762666 42.666667 42.666667 0 0 0 2.389333-32.725334L195.413333 67.413333l162.261334 54.101334z m538.026667 102.570667A405.333333 405.333333 0 0 0 533.504 0a400.213333 400.213333 0 0 0-165.12 35.157333L141.525333-40.533333a42.666667 42.666667 0 0 0-53.973333 53.973333l75.648 226.901333A405.248 405.248 0 0 0 351.957333 767.701333 400.085333 400.085333 0 0 0 533.333333 810.666667l23.68-0.085334C762.88 799.232 927.232 634.88 938.666667 426.666667v-21.290667a400.042667 400.042667 0 0 0-42.88-181.248z" horiz-adv-x="1024" />
<glyph glyph-name="message-square" unicode="&#59537;" d="M268.501333 200.832A42.666667 42.666667 0 0 0 298.666667 213.333333h512a42.666667 42.666667 0 0 1 42.666666 42.666667V682.666667a42.666667 42.666667 0 0 1-42.666666 42.666666H213.333333a42.666667 42.666667 0 0 1-42.666666-42.666666v-579.669334l97.834666 97.834667z m-110.336-230.997333C131.285333-57.045333 85.333333-38.016 85.333333 0V682.666667a128 128 0 0 0 128 128h597.333334a128 128 0 0 0 128-128v-426.666667a128 128 0 0 0-128-128H316.330667l-158.165334-158.165333z" horiz-adv-x="1024" />
<glyph glyph-name="minimize-" unicode="&#59538;" d="M384 42.666667a42.666667 42.666667 0 0 1 85.333333 0v256a42.666667 42.666667 0 0 1-42.666666 42.666666H170.666667a42.666667 42.666667 0 0 1 0-85.333333h213.333333v-213.333333zM640 725.333333a42.666667 42.666667 0 0 1-85.333333 0v-256a42.666667 42.666667 0 0 1 42.666666-42.666666h256a42.666667 42.666667 0 0 1 0 85.333333h-213.333333V725.333333zM627.498667 439.168l298.666666 298.666667a42.666667 42.666667 0 1 1-60.330666 60.330666l-298.666667-298.666666a42.666667 42.666667 0 1 1 60.330667-60.330667zM158.165333-30.165333l298.666667 298.666666a42.666667 42.666667 0 0 1-60.330667 60.330667l-298.666666-298.666667a42.666667 42.666667 0 0 1 60.330666-60.330666z" horiz-adv-x="1024" />
<glyph glyph-name="mic-off" unicode="&#59539;" d="M13.020151 822.68038l938.185456-938.185456a42.644793 42.644793 0 0 1 60.299738 60.299738l-938.185456 938.185456A42.644793 42.644793 0 1 1 13.020151 822.68038zM341.683574 511.671902v-127.934381a170.579174 170.579174 0 0 1 291.136005-120.599476 42.644793 42.644793 0 0 1-60.299738 60.385028A85.289587 85.289587 0 0 0 426.973161 383.737521V511.671902a42.644793 42.644793 0 1 1-85.289587 0z m341.158348-14.49923V724.895869a170.579174 170.579174 0 0 1-337.746764 34.07319 42.644793 42.644793 0 0 1 83.583795-16.972628 85.289587 85.289587 0 0 0 168.873382-17.057917V497.172672a42.644793 42.644793 0 0 1 85.289587 0zM695.038333 202.497149A255.868761 255.868761 0 0 0 256.393987 383.439008V469.027108a42.644793 42.644793 0 1 1-85.289587 0v-85.289587a341.158348 341.158348 0 0 1 584.830698-240.943083 42.644793 42.644793 0 0 1-60.896765 59.702711zM768.131509 469.027108v-85.289587c0-15.053612-1.364633-30.064579-4.008611-44.904967a42.644793 42.644793 0 1 1 83.924954-15.096257A341.158348 341.158348 0 0 1 853.421095 383.737521V469.027108a42.644793 42.644793 0 0 1-85.289586 0zM469.617955 85.223967v-170.579174a42.644793 42.644793 0 0 1 85.289586 0v170.579174a42.644793 42.644793 0 0 1-85.289586 0zM341.683574-128h341.158348a42.644793 42.644793 0 0 1 0 85.289587H341.683574a42.644793 42.644793 0 0 1 0-85.289587z" horiz-adv-x="1024" />
<glyph glyph-name="minus-circle" unicode="&#59540;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM341.333333 341.333333h341.333334a42.666667 42.666667 0 0 1 0 85.333334H341.333333a42.666667 42.666667 0 0 1 0-85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="mic" unicode="&#59541;" d="M682.666667 725.333333v-341.333333a170.666667 170.666667 0 1 0-341.333334 0V725.333333a170.666667 170.666667 0 1 0 341.333334 0z m-170.666667 85.333334a85.333333 85.333333 0 0 1-85.333333-85.333334v-341.333333a85.333333 85.333333 0 1 1 170.666666 0V725.333333a85.333333 85.333333 0 0 1-85.333333 85.333334zM768 469.333333v-85.333333a256 256 0 0 0-512 0v85.333333a42.666667 42.666667 0 1 1-85.333333 0v-85.333333a341.333333 341.333333 0 0 1 682.666666 0v85.333333a42.666667 42.666667 0 0 1-85.333333 0zM469.333333 85.333333v-170.666666a42.666667 42.666667 0 0 1 85.333334 0v170.666666a42.666667 42.666667 0 0 1-85.333334 0zM341.333333-128h341.333334a42.666667 42.666667 0 0 1 0 85.333333H341.333333a42.666667 42.666667 0 0 1 0-85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="minus-square" unicode="&#59542;" d="M170.666667 682.88v-597.76c0-23.466667 18.986667-42.453333 42.453333-42.453333h597.76c23.466667 0 42.453333 18.986667 42.453333 42.453333V682.88A42.453333 42.453333 0 0 1 810.88 725.333333H213.12A42.453333 42.453333 0 0 1 170.666667 682.88z m-85.333334 0A127.786667 127.786667 0 0 0 213.12 810.666667h597.76A127.786667 127.786667 0 0 0 938.666667 682.88v-597.76A127.786667 127.786667 0 0 0 810.88-42.666667H213.12A127.786667 127.786667 0 0 0 85.333333 85.12V682.88zM341.333333 341.333333h341.333334a42.666667 42.666667 0 0 1 0 85.333334H341.333333a42.666667 42.666667 0 0 1 0-85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="minus" unicode="&#59543;" d="M213.333333 341.333333h597.333334a42.666667 42.666667 0 0 1 0 85.333334H213.333333a42.666667 42.666667 0 0 1 0-85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="moon" unicode="&#59544;" d="M476.202667 348.245333a342.058667 342.058667 0 0 0-79.786667 358.229334 341.973333 341.973333 0 1 1 438.016-438.016 342.058667 342.058667 0 0 0-358.229333 79.786666z m462.250666-2.773333A427.477333 427.477333 0 1 0 473.472 810.496c36.778667 3.413333 60.245333-38.272 38.314667-67.968a256.469333 256.469333 0 0 1 358.698666-358.741333c29.696 21.973333 71.381333-1.536 67.968-38.314667z" horiz-adv-x="1024" />
<glyph glyph-name="monitor" unicode="&#59545;" d="M554.666667 128v-85.333333h128a42.666667 42.666667 0 0 0 0-85.333334H341.333333a42.666667 42.666667 0 0 0 0 85.333334h128v85.333333H170.24A127.914667 127.914667 0 0 0 42.666667 256.256V682.410667A128.128 128.128 0 0 0 170.24 810.666667h683.52A127.914667 127.914667 0 0 0 981.333333 682.410667v-426.154667A128.128 128.128 0 0 0 853.76 128H554.666667zM128 682.410667v-426.154667A42.581333 42.581333 0 0 1 170.24 213.33333300000004h683.52c23.04 0 42.24 19.285333 42.24 42.922667V682.410667A42.581333 42.581333 0 0 1 853.76 725.333333H170.24C147.2 725.333333 128 706.048 128 682.410667z" horiz-adv-x="1024" />
<glyph glyph-name="more-vertical" unicode="&#59546;" d="M512 256a128 128 0 1 0 0 256 128 128 0 0 0 0-256z m0 85.333333a42.666667 42.666667 0 1 1 0 85.333334 42.666667 42.666667 0 0 1 0-85.333334zM512 597.333333a128 128 0 1 0 0 256 128 128 0 0 0 0-256z m0 85.333334a42.666667 42.666667 0 1 1 0 85.333333 42.666667 42.666667 0 0 1 0-85.333333zM512-85.333333a128 128 0 1 0 0 256 128 128 0 0 0 0-256z m0 85.333333a42.666667 42.666667 0 1 1 0 85.333333 42.666667 42.666667 0 0 1 0-85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="more-horizontal" unicode="&#59547;" d="M512 256a128 128 0 1 0 0 256 128 128 0 0 0 0-256z m0 85.333333a42.666667 42.666667 0 1 1 0 85.333334 42.666667 42.666667 0 0 1 0-85.333334zM853.333333 256a128 128 0 1 0 0 256 128 128 0 0 0 0-256z m0 85.333333a42.666667 42.666667 0 1 1 0 85.333334 42.666667 42.666667 0 0 1 0-85.333334zM170.666667 256a128 128 0 1 0 0 256 128 128 0 0 0 0-256z m0 85.333333a42.666667 42.666667 0 1 1 0 85.333334 42.666667 42.666667 0 0 1 0-85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="move" unicode="&#59548;" d="M243.498667 481.834667a42.666667 42.666667 0 0 1-60.330667 60.330666l-128-128a42.666667 42.666667 0 0 1 0-60.330666l128-128a42.666667 42.666667 0 1 1 60.330667 60.330666L145.664 384l97.834667 97.834667zM609.834667 652.501333a42.666667 42.666667 0 0 1 60.330666 60.330667l-128 128a42.666667 42.666667 0 0 1-60.330666 0l-128-128a42.666667 42.666667 0 0 1 60.330666-60.330667L512 750.336l97.834667-97.834667zM414.165333 115.498667a42.666667 42.666667 0 1 1-60.330666-60.330667l128-128a42.666667 42.666667 0 0 1 60.330666 0l128 128a42.666667 42.666667 0 0 1-60.330666 60.330667L512 17.664l-97.834667 97.834667zM780.501333 286.165333a42.666667 42.666667 0 0 1 60.330667-60.330666l128 128a42.666667 42.666667 0 0 1 0 60.330666l-128 128a42.666667 42.666667 0 0 1-60.330667-60.330666L878.336 384l-97.834667-97.834667zM85.333333 341.333333h853.333334a42.666667 42.666667 0 0 1 0 85.333334H85.333333a42.666667 42.666667 0 0 1 0-85.333334zM469.333333 810.666667v-853.333334a42.666667 42.666667 0 0 1 85.333334 0V810.666667a42.666667 42.666667 0 0 1-85.333334 0z" horiz-adv-x="1024" />
<glyph glyph-name="music" unicode="&#59549;" d="M426.666667 646.528V85.33333300000004a128 128 0 0 0-128-128H213.333333a128 128 0 0 0 0 256h128V682.666667a42.666667 42.666667 0 0 0 35.669334 42.069333l512 85.333333A42.666667 42.666667 0 0 0 938.666667 768v-597.333333a128 128 0 0 0-128-128h-85.333334a128 128 0 0 0 0 256h128V717.653333L426.666667 646.528zM341.333333 128H213.333333a42.666667 42.666667 0 0 1 0-85.333333h85.333334a42.666667 42.666667 0 0 1 42.666666 42.666666v42.666667z m512 85.333333h-128a42.666667 42.666667 0 0 1 0-85.333333h85.333334a42.666667 42.666667 0 0 1 42.666666 42.666667v42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="navigation-" unicode="&#59550;" d="M293.845333 52.48l196.992 112.554667a42.666667 42.666667 0 0 0 42.325334 0l196.992-112.554667L512 644.565333 293.845333 52.48z m-59.306666-132.181333c-34.602667-19.754667-75.008 14.421333-61.226667 51.797333l298.666667 810.666667c13.696 37.205333 66.346667 37.205333 80.042666 0l298.666667-810.666667c13.781333-37.376-26.624-71.552-61.184-51.797333L512 78.848l-277.504-158.549333z" horiz-adv-x="1024" />
<glyph glyph-name="navigation" unicode="&#59551;" d="M479.701333 340.053333a42.666667 42.666667 0 0 0 31.018667-31.018666l56.405333-225.706667 281.856 594.986667-594.986666-281.856 225.706666-56.405334z m-362.069333 2.56c-38.826667 9.728-44.117333 62.805333-7.893333 79.957334l810.666666 384c36.266667 17.152 73.984-20.608 56.832-56.832l-384-810.666667c-17.152-36.224-70.229333-30.933333-79.957333 7.893333l-79.146667 316.501334-316.501333 79.146666z" horiz-adv-x="1024" />
<glyph glyph-name="octagon" unicode="&#59552;" d="M128 542.976v-317.952L353.024 0h317.952L896 225.024V542.976L670.976 768H353.024L128 542.976zM335.36 853.333333h353.28a42.666667 42.666667 0 0 0 30.165333-12.501333l250.026667-250.026667A42.666667 42.666667 0 0 0 981.333333 560.64v-353.28a42.666667 42.666667 0 0 0-12.501333-30.165333l-250.026667-250.026667a42.666667 42.666667 0 0 0-30.165333-12.501333H335.36a42.666667 42.666667 0 0 0-30.165333 12.501333l-250.026667 250.026667A42.666667 42.666667 0 0 0 42.666667 207.36V560.64a42.666667 42.666667 0 0 0 12.501333 30.165333l250.026667 250.026667A42.666667 42.666667 0 0 0 335.36 853.333333z" horiz-adv-x="1024" />
<glyph glyph-name="package" unicode="&#59553;" d="M568.96 872.362667l341.333333-170.666667A128 128 0 0 0 981.333333 587.093333v-406.613333a128 128 0 0 0-70.954666-114.517333l-341.333334-170.666667a128 128 0 0 0-114.517333 0L113.066667 66.00533299999995A127.872 127.872 0 0 0 42.666667 180.90666699999997V587.093333a128 128 0 0 0 70.954666 114.517334L455.04 872.362667a128 128 0 0 0 113.92 0z m274.090667-232.490667l-312.106667 156.074667a42.624 42.624 0 0 1-37.845333 0L394.282667 746.624 725.333333 581.034667l117.717334 58.88zM896 570.965333l-151.125333-75.562666a42.837333 42.837333 0 0 0-0.853334-0.426667L554.666667 400.298667v-416.810667l317.653333 158.848A42.666667 42.666667 0 0 1 896 180.48000000000002V570.965333zM469.333333-16.725332999999978v417.024l-341.333333 170.666666v-390.357333c-0.128-16.213333 8.96-31.104 23.338667-38.357333L469.333333-16.725332999999978zM298.88 698.837333L180.949333 639.914667 512 474.368 629.930667 533.333333 298.88 698.88z" horiz-adv-x="1024" />
<glyph glyph-name="pause-circle" unicode="&#59554;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM469.333333 256V512a42.666667 42.666667 0 0 1-85.333333 0v-256a42.666667 42.666667 0 0 1 85.333333 0zM640 256V512a42.666667 42.666667 0 0 1-85.333333 0v-256a42.666667 42.666667 0 0 1 85.333333 0z" horiz-adv-x="1024" />
<glyph glyph-name="pause" unicode="&#59555;" d="M298.666667 682.666667v-597.333334h85.333333V682.666667H298.666667zM256 768h170.666667a42.666667 42.666667 0 0 0 42.666666-42.666667v-682.666666a42.666667 42.666667 0 0 0-42.666666-42.666667H256a42.666667 42.666667 0 0 0-42.666667 42.666667V725.333333a42.666667 42.666667 0 0 0 42.666667 42.666667zM640 682.666667v-597.333334h85.333333V682.666667h-85.333333z m-42.666667 85.333333h170.666667a42.666667 42.666667 0 0 0 42.666667-42.666667v-682.666666a42.666667 42.666667 0 0 0-42.666667-42.666667h-170.666667a42.666667 42.666667 0 0 0-42.666666 42.666667V725.333333a42.666667 42.666667 0 0 0 42.666666 42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="percent" unicode="&#59556;" d="M780.501333 712.832l-597.333333-597.333333a42.666667 42.666667 0 0 1 60.330667-60.330667l597.333333 597.333333a42.666667 42.666667 0 1 1-60.330667 60.330667zM277.333333 469.333333a149.333333 149.333333 0 1 0 0 298.666667 149.333333 149.333333 0 0 0 0-298.666667z m0 85.333334a64 64 0 1 1 0 128 64 64 0 0 1 0-128zM746.666667 0a149.333333 149.333333 0 1 0 0 298.666667 149.333333 149.333333 0 0 0 0-298.666667z m0 85.333333a64 64 0 1 1 0 128 64 64 0 0 1 0-128z" horiz-adv-x="1024" />
<glyph glyph-name="phone-call" unicode="&#59557;" d="M981.333333 3.5839999999999463a128 128 0 0 0-140.288-127.914667 886.613333 886.613333 0 0 0-386.474666 137.386667 874.24 874.24 0 0 0-268.928 268.8A887.68 887.68 0 0 0 47.957333 671.146667 128 128 0 0 0 175.36 810.666667H302.933333a128.085333 128.085333 0 0 0 128.042667-110.506667c4.992-37.76 14.250667-74.837333 27.52-110.421333a128.085333 128.085333 0 0 0-28.970667-135.253334l-30.592-30.549333a640 640 0 0 1 195.669334-195.669333l30.72 30.762666a128 128 0 0 0 134.997333 28.842667c35.669333-13.312 72.746667-22.570667 110.933333-27.605333A128 128 0 0 0 981.333333 130.986667v-127.36z m-85.333333 127.829333c0.554667 22.698667-15.232 41.344-36.266667 44.330667a590.72 590.72 0 0 0-129.365333 32.213333 42.581333 42.581333 0 0 1-44.8-9.429333l-54.186667-54.186667a42.666667 42.666667 0 0 0-51.285333-6.912 725.333333 725.333333 0 0 0-272 272 42.666667 42.666667 0 0 0 6.912 51.242667l54.016 54.016a42.666667 42.666667 0 0 1 9.557333 45.098667 589.525333 589.525333 0 0 0-32.128 128.853333A42.794667 42.794667 0 0 1 303.36 725.333333h-128a42.666667 42.666667 0 0 1-42.496-45.824 802.133333 802.133333 0 0 1 124.586667-351.573333 789.802667 789.802667 0 0 1 243.2-243.072 801.024 801.024 0 0 1 348.842666-124.288A42.666667 42.666667 0 0 1 896 3.413332999999966v128zM633.984 598.144a42.666667 42.666667 0 0 0 16.298667 83.712 256 256 0 0 0 202.24-202.24 42.666667 42.666667 0 1 0-83.712-16.298667 170.666667 170.666667 0 0 1-134.826667 134.826667z m3.413333 170.112a42.666667 42.666667 0 1 0 9.429334 84.821333 426.666667 426.666667 0 0 0 376.917333-376.405333 42.666667 42.666667 0 0 0-84.821333-9.557333 341.333333 341.333333 0 0 1-301.482667 301.141333z" horiz-adv-x="1024" />
<glyph glyph-name="phone-forwarded" unicode="&#59558;" d="M780.478569 499.510231a42.665422 42.665422 0 1 1 60.328907-60.328907l170.661689 170.661689a42.665422 42.665422 0 0 1 0 60.328907l-170.661689 170.661689a42.665422 42.665422 0 0 1-60.328907-60.328907L920.975805 640.007466l-140.497236-140.497235zM639.981334 597.342044h341.323378a42.665422 42.665422 0 0 1 0 85.330845h-341.323378a42.665422 42.665422 0 0 1 0-85.330845zM895.547213 129.174366a43.049411 43.049411 0 0 1-36.521601 44.45737 594.542659 594.542659 0 0 0-129.958876 32.34039 42.836084 42.836084 0 0 1-45.097352-9.471724l-54.441079-54.355748c-13.652935-13.652935-34.729654-16.468853-51.53983-6.954464a728.384089 728.384089 0 0 0-273.35736 272.888041 42.750753 42.750753 0 0 0 6.954464 51.454499l54.270417 54.185087c11.775657 11.903653 15.572879 29.524472 9.642385 45.225347-15.65821 41.897445-26.495227 85.37351-32.297724 129.27623-3.029245 21.332711-21.375377 37.033587-43.305404 36.820259H171.259005a42.921415 42.921415 0 0 1-42.708088-45.993325 803.859221 803.859221 0 0 1 125.180349-352.672381 793.107534 793.107534 0 0 1 244.47287-243.918219 805.949826 805.949826 0 0 1 350.581774-124.668363 42.921415 42.921415 0 0 1 46.718638 42.96408v128.422921zM981.304712 0.922106a128.33759 128.33759 0 0 0-41.684118-95.143891 129.190899 129.190899 0 0 0-99.325103-33.193699 892.091314 892.091314 0 0 0-388.468669 137.809314 877.883728 877.883728 0 0 0-270.28545 269.7308 889.574054 889.574054 0 0 0-138.363965 390.559275 128.294925 128.294925 0 0 0 33.108368 98.130471A128.764244 128.764244 0 0 0 171.21634 810.669155H299.511264a128.678914 128.678914 0 0 0 128.678914-110.844767c5.03452-37.886895 14.292916-75.091143 27.647193-110.802101 17.663485-46.931964 6.399813-99.837088-29.097818-135.676043l-30.761769-30.719104a642.669255 642.669255 0 0 1 196.687597-196.260942l30.889765 30.8471a128.764244 128.764244 0 0 0 135.633378 28.927156c35.838955-13.354277 73.128534-22.612674 111.484748-27.689859a128.508252 128.508252 0 0 0 110.63144-129.745549v-127.78294z" horiz-adv-x="1024" />
<glyph glyph-name="phone-missed" unicode="&#59559;" d="M951.140258 840.833609l-255.992533-255.992534a42.665422 42.665422 0 1 1 60.328907-60.328907l255.992533 255.992534a42.665422 42.665422 0 1 1-60.328907 60.328907zM695.147725 780.504702l255.992533-255.992534a42.665422 42.665422 0 0 1 60.328907 60.328907l-255.992533 255.992534a42.665422 42.665422 0 0 1-60.328907-60.328907zM895.547213 129.174366a43.049411 43.049411 0 0 1-36.521601 44.45737 594.542659 594.542659 0 0 0-129.958876 32.34039 42.836084 42.836084 0 0 1-45.097352-9.471724l-54.441079-54.355748c-13.652935-13.652935-34.729654-16.468853-51.53983-6.954464a728.384089 728.384089 0 0 0-273.35736 272.888041 42.750753 42.750753 0 0 0 6.954464 51.454499l54.270417 54.185087c11.775657 11.903653 15.572879 29.524472 9.642385 45.225347-15.65821 41.897445-26.495227 85.37351-32.297724 129.27623-3.029245 21.332711-21.375377 37.033587-43.305404 36.820259H171.259005a42.921415 42.921415 0 0 1-42.708088-45.993325 803.859221 803.859221 0 0 1 125.180349-352.672381 793.107534 793.107534 0 0 1 244.47287-243.918219 805.949826 805.949826 0 0 1 350.581774-124.668363 42.921415 42.921415 0 0 1 46.718638 42.96408v128.422921zM981.304712 0.922106a128.33759 128.33759 0 0 0-41.684118-95.143891 129.190899 129.190899 0 0 0-99.325103-33.193699 892.091314 892.091314 0 0 0-388.468669 137.809314 877.883728 877.883728 0 0 0-270.28545 269.7308 889.574054 889.574054 0 0 0-138.363965 390.559275 128.294925 128.294925 0 0 0 33.108368 98.130471A128.764244 128.764244 0 0 0 171.21634 810.669155H299.511264a128.678914 128.678914 0 0 0 128.678914-110.844767c5.03452-37.886895 14.292916-75.091143 27.647193-110.802101 17.663485-46.931964 6.399813-99.837088-29.097818-135.676043l-30.761769-30.719104a642.669255 642.669255 0 0 1 196.687597-196.260942l30.889765 30.8471a128.764244 128.764244 0 0 0 135.633378 28.927156c35.838955-13.354277 73.128534-22.612674 111.484748-27.689859a128.508252 128.508252 0 0 0 110.63144-129.745549v-127.78294z" horiz-adv-x="1024" />
<glyph glyph-name="phone-off" unicode="&#59560;" d="M485.596263 358.022711a42.644793 42.644793 0 1 1-60.299738-60.299738 724.961489 724.961489 0 0 1 154.502087-117.78492 42.644793 42.644793 0 0 1 51.216397 6.908457l54.158887 54.158888a42.559504 42.559504 0 0 0 44.819678 9.381854c41.791898-15.56535 85.119008-26.354482 129.256369-32.154174a42.559504 42.559504 0 0 0 36.290719-42.644793v-128.318184a42.730083 42.730083 0 0 0-46.482825-42.815373 800.613352 800.613352 0 0 0-348.663831 124.224284c-49.041512 31.130699-94.244994 67.378774-135.056061 108.232485a42.644793 42.644793 0 1 1-60.299738-60.299737 870.806682 870.806682 0 0 1 149.299422-119.703936 886.158808 886.158808 0 0 1 386.276539-137.316235A127.93438 127.93438 0 0 1 980.830249 47.44068V175.204481a127.806446 127.806446 0 0 1-110.023567 127.507933 505.895185 505.895185 0 0 0-110.876463 27.591181 127.93438 127.93438 0 0 1-134.885482-28.82788l-30.746896-30.746896a639.671902 639.671902 0 0 0-108.701578 87.293892z m-228.490803 14.371295a801.295669 801.295669 0 0 0-124.309573 349.431438A42.644793 42.644793 0 0 0 175.312746 767.540662H303.204481c21.834134 0.213224 40.086106-15.48006 43.071242-36.674522 5.757047-43.753558 16.54618-87.080668 32.111529-128.787276a42.644793 42.644793 0 0 0-9.552434-45.075547L314.84651 503.015009a42.644793 42.644793 0 0 1 60.299738-60.299738l54.158888 54.158887a128.01967 128.01967 0 0 1 28.998459 135.141351A504.70113 504.70113 0 0 0 430.712414 742.380234a128.01967 128.01967 0 0 1-127.934381 110.40737H175.270101a127.93438 127.93438 0 0 1-127.337353-139.448474 887.310217 887.310217 0 0 1 137.614748-387.385304 42.644793 42.644793 0 0 1 71.557964 46.397535zM950.68038 882.980118l-938.185456-938.185456a42.644793 42.644793 0 0 1 60.299738-60.299738l938.185456 938.185456A42.644793 42.644793 0 1 1 950.68038 882.980118z" horiz-adv-x="1024" />
<glyph glyph-name="phone-incoming" unicode="&#59561;" d="M725.312178 768.003733a42.665422 42.665422 0 0 1-85.330844 0v-255.992533a42.665422 42.665422 0 0 1 42.665422-42.665423h255.992534a42.665422 42.665422 0 0 1 0 85.330845h-213.327112V768.003733zM951.140258 840.833609l-298.657955-298.657956a42.665422 42.665422 0 1 1 60.328907-60.328907l298.657955 298.657956a42.665422 42.665422 0 1 1-60.328907 60.328907zM895.547213 129.174366a43.049411 43.049411 0 0 1-36.521601 44.45737 594.542659 594.542659 0 0 0-129.958876 32.34039 42.836084 42.836084 0 0 1-45.097352-9.471724l-54.441079-54.355748c-13.652935-13.652935-34.729654-16.468853-51.53983-6.954464a728.384089 728.384089 0 0 0-273.35736 272.888041 42.750753 42.750753 0 0 0 6.954464 51.454499l54.270417 54.185087c11.775657 11.903653 15.572879 29.524472 9.642385 45.225347-15.65821 41.897445-26.495227 85.37351-32.297724 129.27623-3.029245 21.332711-21.375377 37.033587-43.305404 36.820259H171.259005a42.921415 42.921415 0 0 1-42.708088-45.993325 803.859221 803.859221 0 0 1 125.180349-352.672381 793.107534 793.107534 0 0 1 244.47287-243.918219 805.949826 805.949826 0 0 1 350.581774-124.668363 42.921415 42.921415 0 0 1 46.718638 42.96408v128.422921zM981.304712 0.922106a128.33759 128.33759 0 0 0-41.684118-95.143891 129.190899 129.190899 0 0 0-99.325103-33.193699 892.091314 892.091314 0 0 0-388.468669 137.809314 877.883728 877.883728 0 0 0-270.28545 269.7308 889.574054 889.574054 0 0 0-138.363965 390.559275 128.294925 128.294925 0 0 0 33.108368 98.130471A128.764244 128.764244 0 0 0 171.21634 810.669155H299.511264a128.678914 128.678914 0 0 0 128.678914-110.844767c5.03452-37.886895 14.292916-75.091143 27.647193-110.802101 17.663485-46.931964 6.399813-99.837088-29.097818-135.676043l-30.761769-30.719104a642.669255 642.669255 0 0 1 196.687597-196.260942l30.889765 30.8471a128.764244 128.764244 0 0 0 135.633378 28.927156c35.838955-13.354277 73.128534-22.612674 111.484748-27.689859a128.508252 128.508252 0 0 0 110.63144-129.745549v-127.78294z" horiz-adv-x="1024" />
<glyph glyph-name="phone" unicode="&#59562;" d="M895.573333 171.818667a43.050667 43.050667 0 0 1-36.522666 44.458666 594.56 594.56 0 0 0-129.962667 32.341334 42.837333 42.837333 0 0 1-45.098667-9.472l-54.442666-54.357334c-13.653333-13.653333-34.730667-16.469333-51.541334-6.954666a728.405333 728.405333 0 0 0-273.365333 272.896 42.752 42.752 0 0 0 6.954667 51.456l54.272 54.186666c11.776 11.904 15.573333 29.525333 9.642666 45.226667-15.658667 41.898667-26.496 85.376-32.298666 129.28-3.029333 21.333333-21.376 37.034667-43.306667 36.821333H171.264a42.922667 42.922667 0 0 1-42.709333-45.994666 803.882667 803.882667 0 0 1 125.184-352.682667 793.130667 793.130667 0 0 1 244.48-243.925333 805.973333 805.973333 0 0 1 350.592-124.672 42.922667 42.922667 0 0 1 46.72 42.965333v128.426667zM981.333333 43.562667a128.341333 128.341333 0 0 0-41.685333-95.146667 129.194667 129.194667 0 0 0-99.328-33.194667 892.117333 892.117333 0 0 0-388.48 137.813334 877.909333 877.909333 0 0 0-270.293333 269.738666 889.6 889.6 0 0 0-138.368 390.570667 128.298667 128.298667 0 0 0 33.109333 98.133333A128.768 128.768 0 0 0 171.221333 853.333333H299.52a128.682667 128.682667 0 0 0 128.682667-110.848c5.034667-37.888 14.293333-75.093333 27.648-110.805333 17.664-46.933333 6.4-99.84-29.098667-135.68l-30.762667-30.72a642.688 642.688 0 0 1 196.693334-196.266667l30.890666 30.848a128.768 128.768 0 0 0 135.637334 28.928c35.84-13.354667 73.130667-22.613333 111.488-27.690666a128.512 128.512 0 0 0 110.634666-129.749334v-127.786666z" horiz-adv-x="1024" />
<glyph glyph-name="phone-outgoing" unicode="&#59563;" d="M938.63929 768.003733v-213.327111a42.665422 42.665422 0 0 1 85.330844 0V810.669155a42.665422 42.665422 0 0 1-42.665422 42.665423h-255.992534a42.665422 42.665422 0 0 1 0-85.330845h213.327112zM712.81121 481.846746l298.657955 298.657956a42.665422 42.665422 0 1 1-60.328907 60.328907l-298.657955-298.657956a42.665422 42.665422 0 1 1 60.328907-60.328907zM895.973867 131.435633c0.55465 22.698005-15.231556 41.342794-36.265608 44.329374a590.702771 590.702771 0 0 0-129.361561 32.212394 42.580091 42.580091 0 0 1-44.798693-9.429059l-54.185086-54.185086a42.665422 42.665422 0 0 0-51.283838-6.911798 725.312178 725.312178 0 0 0-271.992067 271.992067 42.665422 42.665422 0 0 0 6.911799 51.241172l54.014424 54.014424a42.665422 42.665422 0 0 1 9.557055 45.097352 589.508139 589.508139 0 0 0-32.127063 128.849575A42.793419 42.793419 0 0 1 303.351152 725.338311h-127.996267a42.665422 42.665422 0 0 1-42.49476-45.822664 802.109938 802.109938 0 0 1 124.583033-351.563079 789.779631 789.779631 0 0 1 243.192907-243.064911 801.000637 801.000637 0 0 1 348.832492-124.284375A42.665422 42.665422 0 0 1 895.973867 3.439366v127.996267z m85.330845-130.513527a128.33759 128.33759 0 0 0-41.684118-95.143891 129.190899 129.190899 0 0 0-99.325103-33.193699 892.091314 892.091314 0 0 0-388.468669 137.809314 877.883728 877.883728 0 0 0-270.28545 269.7308 889.574054 889.574054 0 0 0-138.363965 390.559275 128.294925 128.294925 0 0 0 33.108368 98.130471A128.764244 128.764244 0 0 0 171.21634 810.669155H299.511264a128.678914 128.678914 0 0 0 128.678914-110.844767c5.03452-37.886895 14.292916-75.091143 27.647193-110.802101 17.663485-46.931964 6.399813-99.837088-29.097818-135.676043l-30.761769-30.719104a642.669255 642.669255 0 0 1 196.687597-196.260942l30.889765 30.8471a128.764244 128.764244 0 0 0 135.633378 28.927156c35.838955-13.354277 73.128534-22.612674 111.484748-27.689859a128.508252 128.508252 0 0 0 110.63144-129.745549v-127.78294z" horiz-adv-x="1024" />
<glyph glyph-name="pie-chart" unicode="&#59564;" d="M865.664 234.666667A384 384 0 1 0 358.4 736.085333a42.666667 42.666667 0 0 1-34.133333 78.250667A469.333333 469.333333 0 1 1 944.256 201.386667a42.666667 42.666667 0 0 1-78.592 33.194666zM981.333333 384a42.666667 42.666667 0 0 0-42.666666-42.666667H512a42.666667 42.666667 0 0 0-42.666667 42.666667V810.666667a42.666667 42.666667 0 0 0 42.666667 42.666666 469.333333 469.333333 0 0 0 469.333333-469.333333z m-197.802666 271.530667A384 384 0 0 1 554.666667 765.610667V426.666667h338.944a384 384 0 0 1-110.08 228.864z" horiz-adv-x="1024" />
<glyph glyph-name="play-circle" unicode="&#59565;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM469.333333 293.077333L605.738667 384 469.333333 474.922667v-181.845334z m-18.986666 297.088l256-170.666666a42.666667 42.666667 0 0 0 0-70.997334l-256-170.666666A42.666667 42.666667 0 0 0 384 213.333333V554.666667a42.666667 42.666667 0 0 0 66.346667 35.498666z" horiz-adv-x="1024" />
<glyph glyph-name="play" unicode="&#59566;" d="M256 78.165333L731.733333 384 256 689.834667v-611.669334z m-19.626667 725.76l597.333334-384a42.666667 42.666667 0 0 0 0-71.808l-597.333334-384A42.666667 42.666667 0 0 0 170.666667 0V768a42.666667 42.666667 0 0 0 65.706666 35.882667z" horiz-adv-x="1024" />
<glyph glyph-name="plus-square" unicode="&#59567;" d="M170.666667 682.88v-597.76c0-23.466667 18.986667-42.453333 42.453333-42.453333h597.76c23.466667 0 42.453333 18.986667 42.453333 42.453333V682.88A42.453333 42.453333 0 0 1 810.88 725.333333H213.12A42.453333 42.453333 0 0 1 170.666667 682.88z m-85.333334 0A127.786667 127.786667 0 0 0 213.12 810.666667h597.76A127.786667 127.786667 0 0 0 938.666667 682.88v-597.76A127.786667 127.786667 0 0 0 810.88-42.666667H213.12A127.786667 127.786667 0 0 0 85.333333 85.12V682.88zM469.333333 554.666667v-341.333334a42.666667 42.666667 0 0 1 85.333334 0V554.666667a42.666667 42.666667 0 0 1-85.333334 0zM341.333333 341.333333h341.333334a42.666667 42.666667 0 0 1 0 85.333334H341.333333a42.666667 42.666667 0 0 1 0-85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="plus-circle" unicode="&#59568;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM469.333333 554.666667v-341.333334a42.666667 42.666667 0 0 1 85.333334 0V554.666667a42.666667 42.666667 0 0 1-85.333334 0zM341.333333 341.333333h341.333334a42.666667 42.666667 0 0 1 0 85.333334H341.333333a42.666667 42.666667 0 0 1 0-85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="plus" unicode="&#59569;" d="M469.333333 682.666667v-597.333334a42.666667 42.666667 0 0 1 85.333334 0V682.666667a42.666667 42.666667 0 0 1-85.333334 0zM213.333333 341.333333h597.333334a42.666667 42.666667 0 0 1 0 85.333334H213.333333a42.666667 42.666667 0 0 1 0-85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="pocket" unicode="&#59570;" d="M128 682.666667v-256a384 384 0 1 1 768 0V682.666667a42.666667 42.666667 0 0 1-42.666667 42.666666H170.666667a42.666667 42.666667 0 0 1-42.666667-42.666666z m725.333333 128a128 128 0 0 0 128-128v-256c0-259.2-210.133333-469.333333-469.333333-469.333334A469.333333 469.333333 0 0 0 42.666667 426.666667V682.666667a128 128 0 0 0 128 128h682.666666zM371.498667 499.498667a42.666667 42.666667 0 1 1-60.330667-60.330667l170.666667-170.666667a42.666667 42.666667 0 0 1 60.330666 0l170.666667 170.666667a42.666667 42.666667 0 1 1-60.330667 60.330667L512 358.997333 371.498667 499.498667z" horiz-adv-x="1024" />
<glyph glyph-name="printer" unicode="&#59571;" d="M298.666667 554.666667h426.666666V768H298.666667v-213.333333zM213.333333 554.666667V810.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h512a42.666667 42.666667 0 0 0 42.666667-42.666666v-256h42.666666a128 128 0 0 0 128-128v-213.333334a128 128 0 0 0-128-128h-85.333333a42.666667 42.666667 0 0 0 0 85.333334h85.333333a42.666667 42.666667 0 0 1 42.666667 42.666666v213.333334a42.666667 42.666667 0 0 1-42.666667 42.666666H170.666667a42.666667 42.666667 0 0 1-42.666667-42.666666v-213.333334a42.666667 42.666667 0 0 1 42.666667-42.666666h85.333333a42.666667 42.666667 0 0 0 0-85.333334H170.666667a128 128 0 0 0-128 128v213.333334a128 128 0 0 0 128 128h42.666666zM298.666667 0h426.666666v256H298.666667v-256z m-42.666667 341.333333h512a42.666667 42.666667 0 0 0 42.666667-42.666666v-341.333334a42.666667 42.666667 0 0 0-42.666667-42.666666H256a42.666667 42.666667 0 0 0-42.666667 42.666666v341.333334a42.666667 42.666667 0 0 0 42.666667 42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="power" unicode="&#59572;" d="M753.408 582.528a341.333333 341.333333 0 1 0-482.816 0 42.666667 42.666667 0 1 1-60.330667 60.330667c-166.613333-166.656-166.570667-436.778667 0.042667-603.349334 166.613333-166.613333 436.778667-166.613333 603.392 0 166.613333 166.570667 166.656 436.693333 0.042667 603.349334a42.666667 42.666667 0 1 1-60.330667-60.330667zM469.333333 810.666667v-426.666667a42.666667 42.666667 0 0 1 85.333334 0V810.666667a42.666667 42.666667 0 0 1-85.333334 0z" horiz-adv-x="1024" />
<glyph glyph-name="radio" unicode="&#59573;" d="M512 256a128 128 0 1 0 0 256 128 128 0 0 0 0-256z m0 85.333333a42.666667 42.666667 0 1 1 0 85.333334 42.666667 42.666667 0 0 1 0-85.333334zM662.741333 534.741333a213.333333 213.333333 0 0 0 0-301.866666 42.666667 42.666667 0 1 1 60.330667-60.373334 298.666667 298.666667 0 0 1 0 422.613334 42.666667 42.666667 0 1 1-60.330667-60.373334z m-301.482666-301.482666a213.333333 213.333333 0 0 0 0 301.866666 42.666667 42.666667 0 0 1-60.330667 60.373334 298.666667 298.666667 0 0 1 0-422.613334 42.666667 42.666667 0 1 1 60.330667 60.373334z m422.229333 422.229333a384 384 0 0 0 0-542.976 42.666667 42.666667 0 1 1 60.330667-60.330667c183.210667 183.253333 183.210667 480.384 0 663.637334a42.666667 42.666667 0 1 1-60.330667-60.330667zM240.512 112.512a384 384 0 0 0 0 542.976 42.666667 42.666667 0 0 1-60.330667 60.330667c-183.210667-183.253333-183.210667-480.384 0-663.637334a42.666667 42.666667 0 1 1 60.330667 60.330667z" horiz-adv-x="1024" />
<glyph glyph-name="repeat" unicode="&#59574;" d="M695.074022 542.346875a42.644776 42.644776 0 1 1 60.299713-60.299713l170.579103 170.579103a42.644776 42.644776 0 0 1 0 60.299713l-170.579103 170.579103a42.644776 42.644776 0 0 1-60.299713-60.299713L835.503268 682.776122l-140.429246-140.429247zM170.841795 426.907468V512.197019a127.934327 127.934327 0 0 0 127.934327 127.934327h597.026859a42.644776 42.644776 0 0 1 0 85.289551H298.776122a213.223878 213.223878 0 0 1-213.223879-213.223878v-85.289551a42.644776 42.644776 0 0 1 85.289552 0zM328.925978 226.178508a42.644776 42.644776 0 0 1-60.299713 60.299713l-170.579103-170.579103a42.644776 42.644776 0 0 1 0-60.299712l170.579103-170.579103a42.644776 42.644776 0 1 1 60.299713 60.299713L188.496732 85.749262l140.429246 140.429246zM853.158205 341.617916v-85.289551a127.934327 127.934327 0 0 0-127.934327-127.934327H128.197019a42.644776 42.644776 0 0 1 0-85.289552h597.026859a213.223878 213.223878 0 0 1 213.223879 213.223879v85.289551a42.644776 42.644776 0 0 1-85.289552 0z" horiz-adv-x="1024" />
<glyph glyph-name="refresh-ccw" unicode="&#59575;" d="M85.378987 725.333333a42.666667 42.666667 0 1 1-85.333334 0v-256a42.666667 42.666667 0 0 1 42.666667-42.666666h256a42.666667 42.666667 0 0 1 0 85.333333H85.378987V725.333333zM938.71232 42.666667a42.666667 42.666667 0 0 1 85.333333 0v256a42.666667 42.666667 0 0 1-42.666666 42.666666h-256a42.666667 42.666667 0 0 1 0-85.333333h213.333333v-213.333333zM914.52032 526.250667a426.666667 426.666667 0 0 1-704 159.274666L13.485653 500.437333a42.666667 42.666667 0 0 1 58.453334-62.208l197.973333 186.026667a341.973333 341.973333 0 0 0 317.696 92.586667 341.333333 341.333333 0 0 0 246.442667-219.093334 42.666667 42.666667 0 0 1 80.469333 28.501334z m37.632-196.48l-197.973333-186.026667a341.973333 341.973333 0 0 0-317.696-92.586667 341.333333 341.333333 0 0 0-246.442667 219.093334 42.666667 42.666667 0 0 1-80.469333-28.501334 426.666667 426.666667 0 0 1 704-159.274666l197.034666 185.088a42.666667 42.666667 0 0 1-58.453333 62.208z" horiz-adv-x="1024" />
<glyph glyph-name="rewind" unicode="&#59576;" d="M426.666667 595.413333L154.837333 384 426.666667 172.586667v422.826666z m16.469333-543.744l-384 298.666667a42.666667 42.666667 0 0 0 0 67.328l384 298.666667A42.666667 42.666667 0 0 0 512 682.666667v-597.333334a42.666667 42.666667 0 0 0-68.864-33.706666zM896 172.586667v422.826666L624.170667 384 896 172.586667z m16.469333-120.917334l-384 298.666667a42.666667 42.666667 0 0 0 0 67.328l384 298.666667A42.666667 42.666667 0 0 0 981.333333 682.666667v-597.333334a42.666667 42.666667 0 0 0-68.864-33.706666z" horiz-adv-x="1024" />
<glyph glyph-name="rotate-ccw" unicode="&#59577;" d="M128 725.333333a42.666667 42.666667 0 1 1-85.333333 0v-256a42.666667 42.666667 0 0 1 42.666666-42.666666h256a42.666667 42.666667 0 0 1 0 85.333333H128V725.333333zM152.192 242.218667a426.666667 426.666667 0 1 1 100.949333 443.733333l-197.034666-185.173333a42.666667 42.666667 0 1 1 58.453333-62.165334l197.973333 186.026667a341.76 341.76 0 0 0 407.210667 58.069333 341.333333 341.333333 0 1 0-487.082667-412.16 42.666667 42.666667 0 1 1-80.469333-28.330666z" horiz-adv-x="1024" />
<glyph glyph-name="refresh-cw" unicode="&#59578;" d="M725.378987 512a42.666667 42.666667 0 0 1 0-85.333333h256a42.666667 42.666667 0 0 1 42.666666 42.666666V725.333333a42.666667 42.666667 0 0 1-85.333333 0v-213.333333h-213.333333zM85.378987 256h213.333333a42.666667 42.666667 0 0 1 0 85.333333H42.71232a42.666667 42.666667 0 0 1-42.666667-42.666666v-256a42.666667 42.666667 0 0 1 85.333334 0v213.333333zM190.04032 497.749333a341.333333 341.333333 0 0 0 563.2 127.445334l198.912-186.965334a42.666667 42.666667 0 0 1 58.453333 62.208l-197.973333 186.026667A426.026667 426.026667 0 0 1 417.666987 800a426.666667 426.666667 0 0 1-308.053334-273.792 42.666667 42.666667 0 0 1 80.426667-28.501333zM13.485653 267.562667l197.973334-186.026667a426.026667 426.026667 0 0 1 394.965333-113.578667 426.666667 426.666667 0 0 1 308.053333 273.792 42.666667 42.666667 0 0 1-80.426666 28.501334 341.333333 341.333333 0 0 0-563.2-127.445334l-198.912 186.965334a42.666667 42.666667 0 0 1-58.453334-62.208z" horiz-adv-x="1024" />
<glyph glyph-name="rotate-cw" unicode="&#59579;" d="M682.666667 512a42.666667 42.666667 0 0 1 0-85.333333h256a42.666667 42.666667 0 0 1 42.666666 42.666666V725.333333a42.666667 42.666667 0 0 1-85.333333 0v-213.333333h-213.333333zM791.338667 270.208a341.333333 341.333333 0 1 0-80.384 354.986667l198.442666-186.922667a42.666667 42.666667 0 0 1 58.538667 62.122667l-197.546667 186.026666c-133.418667 133.546667-340.48 162.901333-506.88 71.125334a426.666667 426.666667 0 1 1 608.298667-515.754667 42.666667 42.666667 0 1 1-80.469333 28.416z" horiz-adv-x="1024" />
<glyph glyph-name="save" unicode="&#59580;" d="M341.333333 725.333333v-128h298.666667a42.666667 42.666667 0 0 0 0-85.333333H298.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V725.333333H213.333333a42.666667 42.666667 0 0 1-42.666666-42.666666v-597.333334a42.666667 42.666667 0 0 1 42.666666-42.666666h42.666667v298.666666a42.666667 42.666667 0 0 0 42.666667 42.666667h426.666666a42.666667 42.666667 0 0 0 42.666667-42.666667v-298.666666h42.666667a42.666667 42.666667 0 0 1 42.666666 42.666666V537.002667L665.002667 725.333333H341.333333z m341.333334-682.666666v256H341.333333v-256h341.333334z m128-85.333334H213.333333a128 128 0 0 0-128 128V682.666667a128 128 0 0 0 128 128h469.333334a42.666667 42.666667 0 0 0 30.165333-12.501334l213.333333-213.333333A42.666667 42.666667 0 0 0 938.666667 554.666667v-469.333334a128 128 0 0 0-128-128z" horiz-adv-x="1024" />
<glyph glyph-name="search" unicode="&#59581;" d="M732.842667 223.48800000000006l193.322666-193.28a42.666667 42.666667 0 0 0-60.330666-60.373333l-193.322667 193.322666a362.666667 362.666667 0 1 0 60.330667 60.330667zM448 170.66666699999996a277.333333 277.333333 0 1 1 0 554.666666 277.333333 277.333333 0 0 1 0-554.666666z" horiz-adv-x="1024" />
<glyph glyph-name="server" unicode="&#59582;" d="M128 725.418667v-170.837334A42.24 42.24 0 0 1 170.24 512h683.52c23.125333 0 42.24 19.157333 42.24 42.581333V725.418667A42.24 42.24 0 0 1 853.76 768H170.24a42.624 42.624 0 0 1-42.24-42.581333z m-85.333333 0A127.957333 127.957333 0 0 0 170.24 853.333333h683.52A127.573333 127.573333 0 0 0 981.333333 725.418667v-170.837334A127.957333 127.957333 0 0 0 853.76 426.666667H170.24A127.573333 127.573333 0 0 0 42.666667 554.581333V725.418667zM128 213.418667v-170.837334a42.24 42.24 0 0 1 42.24-42.581333h683.52c23.125333 0 42.24 19.157333 42.24 42.581333v170.837334a42.24 42.24 0 0 1-42.24 42.581333H170.24a42.624 42.624 0 0 1-42.24-42.581333z m-85.333333 0A127.957333 127.957333 0 0 0 170.24 341.333333h683.52A127.573333 127.573333 0 0 0 981.333333 213.418667v-170.837334A127.957333 127.957333 0 0 0 853.76-85.333333H170.24A127.573333 127.573333 0 0 0 42.666667 42.581333v170.837334zM298.666667 128m-42.666667 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0ZM298.666667 640m-42.666667 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0Z" horiz-adv-x="1024" />
<glyph glyph-name="scissors" unicode="&#59583;" d="M298.666667 469.333333a170.666667 170.666667 0 1 0 0 341.333334 170.666667 170.666667 0 0 0 0-341.333334z m0 85.333334a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666zM298.666667-42.66666699999996a170.666667 170.666667 0 1 0 0 341.333334 170.666667 170.666667 0 0 0 0-341.333334z m0 85.333334a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666zM494.336 384L358.954667 519.381333a42.666667 42.666667 0 0 0 60.330666 60.330667L554.666667 444.330667l311.168 311.168a42.666667 42.666667 0 0 0 60.330666-60.330667l-506.88-506.88a42.666667 42.666667 0 1 0-60.330666 60.330667L494.336 384z m135.594667-136.021333a42.666667 42.666667 0 0 0 60.245333 60.416l235.946667-235.52a42.666667 42.666667 0 0 0-60.245334-60.416l-235.946666 235.52z" horiz-adv-x="1024" />
<glyph glyph-name="share-" unicode="&#59584;" d="M768 512a170.666667 170.666667 0 1 0 0 341.333333 170.666667 170.666667 0 0 0 0-341.333333z m0 85.333333a85.333333 85.333333 0 1 1 0 170.666667 85.333333 85.333333 0 0 1 0-170.666667zM256 213.33333300000004a170.666667 170.666667 0 1 0 0 341.333334 170.666667 170.666667 0 0 0 0-341.333334z m0 85.333334a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666zM768-85.33333300000004a170.666667 170.666667 0 1 0 0 341.333333 170.666667 170.666667 0 0 0 0-341.333333z m0 85.333333a85.333333 85.333333 0 1 1 0 170.666667 85.333333 85.333333 0 0 1 0-170.666667zM345.045333 282.709333a42.666667 42.666667 0 1 0 42.922667 73.728l291.413333-169.813333a42.666667 42.666667 0 1 0-42.922666-73.728l-291.413334 169.813333z m290.944 372.394667a42.666667 42.666667 0 1 0 43.008-73.728l-290.986666-169.813333a42.666667 42.666667 0 1 0-43.008 73.728l290.986666 169.813333z" horiz-adv-x="1024" />
<glyph glyph-name="share" unicode="&#59585;" d="M128 384v-341.333333a128 128 0 0 1 128-128h512a128 128 0 0 1 128 128v341.333333a42.666667 42.666667 0 0 1-85.333333 0v-341.333333a42.666667 42.666667 0 0 0-42.666667-42.666667H256a42.666667 42.666667 0 0 0-42.666667 42.666667v341.333333a42.666667 42.666667 0 0 1-85.333333 0zM652.501333 609.834667a42.666667 42.666667 0 0 1 60.330667 60.330666l-170.666667 170.666667a42.666667 42.666667 0 0 1-60.330666 0l-170.666667-170.666667a42.666667 42.666667 0 0 1 60.330667-60.330666L512 750.336l140.501333-140.501333zM469.333333 810.666667v-554.666667a42.666667 42.666667 0 0 1 85.333334 0V810.666667a42.666667 42.666667 0 0 1-85.333334 0z" horiz-adv-x="1024" />
<glyph glyph-name="shield" unicode="&#59586;" d="M531.072-80.810667a42.666667 42.666667 0 0 0-38.144 0 738.56 738.56 0 0 0-56.874667 32.64 958.506667 958.506667 0 0 0-122.837333 90.709334C198.229333 143.232 128 257.322667 128 384V725.333333a42.666667 42.666667 0 0 0 32.298667 41.386667l341.333333 85.333333a42.666667 42.666667 0 0 0 20.736 0l341.333333-85.333333A42.666667 42.666667 0 0 0 896 725.333333v-341.333333c0-126.72-70.229333-240.810667-185.216-341.461333a958.506667 958.506667 0 0 0-122.837333-90.709334 738.56 738.56 0 0 0-56.874667-32.64z m11.648 104.96a874.24 874.24 0 0 1 111.829333 82.645334C752.896 192.810667 810.666667 286.677333 810.666667 384V692.053333l-298.666667 74.666667-298.666667-74.666667V384c0-97.28 57.770667-191.189333 156.117334-277.205333A874.24 874.24 0 0 1 512 5.845333c9.429333 5.376 19.754667 11.477333 30.72 18.346667z" horiz-adv-x="1024" />
<glyph glyph-name="settings" unicode="&#59587;" d="M512 213.333333a170.666667 170.666667 0 1 0 0 341.333334 170.666667 170.666667 0 0 0 0-341.333334z m0 85.333334a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666zM272.768 680.234667l-2.56 2.56a42.666667 42.666667 0 1 1-60.416-60.416l2.901333-2.901334c32.298667-33.024 41.258667-82.432 23.637334-122.197333A113.365333 113.365333 0 0 0 131.84 423.253333H128a42.666667 42.666667 0 0 1 0-85.333333h7.424a112.896 112.896 0 0 0 103.253333-68.096 113.237333 113.237333 0 0 0-22.912-125.056l-2.56-2.56a42.666667 42.666667 0 1 1 60.416-60.416l2.901334 2.901333c33.024 32.298667 82.432 41.258667 122.197333 23.637334a113.365333 113.365333 0 0 0 74.026667-104.490667V0a42.666667 42.666667 0 0 1 85.333333 0v7.424a112.896 112.896 0 0 0 68.096 103.253333 113.237333 113.237333 0 0 0 125.056-22.912l2.56-2.56a42.666667 42.666667 0 1 1 60.416 60.416l-2.901333 2.901334a113.066667 113.066667 0 0 0-22.613334 124.714666A112.981333 112.981333 0 0 0 892.16 341.333333H896a42.666667 42.666667 0 0 1 0 85.333334h-7.424a113.066667 113.066667 0 0 0-103.466667 68.522666l-3.456 8.064v4.266667a113.28 113.28 0 0 0 26.581334 115.712l2.56 2.56a42.666667 42.666667 0 1 1-60.416 60.416l-2.901334-2.901333a112.896 112.896 0 0 0-124.288-22.784A113.109333 113.109333 0 0 0 554.666667 764.16V768a42.666667 42.666667 0 0 1-85.333334 0v-7.424a113.066667 113.066667 0 0 0-68.522666-103.466667l-8.064-3.456h-4.266667a113.28 113.28 0 0 0-115.712 26.581334zM888.746667 512H896a128 128 0 0 0 0-256h-3.669333a27.733333 27.733333 0 0 1-25.386667-16.810667 27.733333 27.733333 0 0 1 5.034667-30.677333l2.56-2.56a128 128 0 1 0-181.077334-181.077333l-2.218666 2.218666a27.904 27.904 0 0 1-31.018667 5.376 27.690667 27.690667 0 0 1-16.810667-25.216V0a128 128 0 0 0-256 0 29.781333 29.781333 0 0 1-20.650666 29.226667 27.605333 27.605333 0 0 1-30.250667-5.205334l-2.56-2.56a128 128 0 1 0-181.077333 181.077334l2.218666 2.218666a27.904 27.904 0 0 1 5.376 31.018667 27.690667 27.690667 0 0 1-25.216 16.810667H128a128 128 0 0 0 0 256 29.781333 29.781333 0 0 1 29.226667 20.650666 27.605333 27.605333 0 0 1-5.205334 30.250667l-2.56 2.56a128 128 0 1 0 181.077334 181.077333l2.218666-2.218666a27.733333 27.733333 0 0 1 30.592-5.546667l8.234667 3.626667A25.258667 25.258667 0 0 1 384 760.746667V768a128 128 0 0 0 256 0v-3.669333c0.042667-11.093333 6.656-21.034667 17.237333-25.6a27.605333 27.605333 0 0 1 30.250667 5.248l2.56 2.56a128 128 0 1 0 181.077333-181.077334l-2.218666-2.218666a27.733333 27.733333 0 0 1-5.546667-30.592l3.626667-8.234667c5.12-8.277333 13.184-12.373333 21.76-12.416z" horiz-adv-x="1024" />
<glyph glyph-name="skip-back" unicode="&#59588;" d="M768 636.586667L452.266667 384l315.733333-252.586667V636.586667z m16-627.2l-426.666667 341.333333a42.666667 42.666667 0 0 0 0 66.56l426.666667 341.333333A42.666667 42.666667 0 0 0 853.333333 725.333333v-682.666666a42.666667 42.666667 0 0 0-69.333333-33.28zM256 85.333333V682.666667a42.666667 42.666667 0 1 1-85.333333 0v-597.333334a42.666667 42.666667 0 0 1 85.333333 0z" horiz-adv-x="1024" />
<glyph glyph-name="shuffle" unicode="&#59589;" d="M853.333333 554.666667a42.666667 42.666667 0 0 1 85.333334 0V768a42.666667 42.666667 0 0 1-42.666667 42.666667h-213.333333a42.666667 42.666667 0 0 1 0-85.333334h170.666666v-170.666666zM200.832 12.501333l725.333333 725.333334a42.666667 42.666667 0 1 1-60.330666 60.330666l-725.333334-725.333333a42.666667 42.666667 0 0 1 60.330667-60.330667zM682.666667 42.666667a42.666667 42.666667 0 0 1 0-85.333334h213.333333a42.666667 42.666667 0 0 1 42.666667 42.666667v213.333333a42.666667 42.666667 0 0 1-85.333334 0v-170.666666h-170.666666zM609.834667 225.834667l256-256a42.666667 42.666667 0 0 1 60.330666 60.330666l-256 256a42.666667 42.666667 0 0 1-60.330666-60.330666zM140.501333 695.168l213.333334-213.333333a42.666667 42.666667 0 1 1 60.330666 60.330666l-213.333333 213.333334a42.666667 42.666667 0 0 1-60.330667-60.330667z" horiz-adv-x="1024" />
<glyph glyph-name="sidebar" unicode="&#59590;" d="M85.333333 682.88A127.786667 127.786667 0 0 0 213.12 810.666667h597.76A127.786667 127.786667 0 0 0 938.666667 682.88v-597.76A127.786667 127.786667 0 0 0 810.88-42.66666699999996H213.12A127.786667 127.786667 0 0 0 85.333333 85.12V682.88zM341.333333 725.333333H213.12A42.453333 42.453333 0 0 1 170.666667 682.88v-597.76c0-23.466667 18.986667-42.453333 42.453333-42.453333H341.333333V725.333333z m85.333334 0v-682.666666h384.213333c23.466667 0 42.453333 18.986667 42.453333 42.453333V682.88A42.453333 42.453333 0 0 1 810.88 725.333333H426.666667z" horiz-adv-x="1024" />
<glyph glyph-name="skip-forward" unicode="&#59591;" d="M256 131.413333L571.733333 384 256 636.586667v-505.173334z m-16 627.2l426.666667-341.333333a42.666667 42.666667 0 0 0 0-66.56l-426.666667-341.333333A42.666667 42.666667 0 0 0 170.666667 42.666667V725.333333a42.666667 42.666667 0 0 0 69.333333 33.28zM768 682.666667v-597.333334a42.666667 42.666667 0 0 1 85.333333 0V682.666667a42.666667 42.666667 0 0 1-85.333333 0z" horiz-adv-x="1024" />
<glyph glyph-name="slack" unicode="&#59592;" d="M983.271856 524.026176c103.487213-343.691869 14.332936-507.582171-330.937263-611.495959C308.514752-190.956996 144.539135-101.845377 40.540031 243.339506-62.947182 587.074033 26.207095 750.964335 371.477293 854.920781 716.320916 958.706596 879.614012 870.405471 983.271856 524.026176z m-81.817179-24.52809C811.361935 800.788351 695.632005 863.324318 396.090699 773.14626 95.781557 682.754914 32.477754 566.342464 122.357209 267.952912c90.434003-300.223827 206.889111-363.527629 505.363979-273.690832 300.309142 90.434003 363.612944 206.803796 273.733489 505.236006zM495.866705 626.61758l152.714024-443.638505a42.657549 42.657549 0 0 1 80.708082 27.727406l-152.714024 443.638506a42.657549 42.657549 0 0 1-80.708082-27.727407zM294.523076 557.512352l152.714024-443.638506a42.657549 42.657549 0 0 1 80.708082 27.727407l-152.714024 443.638505a42.657549 42.657549 0 0 1-80.708082-27.727406zM685.308879 601.492284l-443.638506-152.714024a42.657549 42.657549 0 0 1 27.727407-80.708082l443.638505 152.714024a42.657549 42.657549 0 0 1-27.727406 80.708082zM754.414107 400.148655l-443.638505-152.714024a42.657549 42.657549 0 0 1 27.727406-80.708082l443.638506 152.714024a42.657549 42.657549 0 0 1-27.727407 80.708082z" horiz-adv-x="1024" />
<glyph glyph-name="slash" unicode="&#59593;" d="M512-85.33333300000004C252.8-85.33333300000004 42.666667 124.79999999999995 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m239.701333 169.301333L211.968 623.701333a384 384 0 0 1 539.733333-539.733333zM272.298667 684.032l539.733333-539.733333a384 384 0 0 1-539.733333 539.733333z" horiz-adv-x="1024" />
<glyph glyph-name="smartphone" unicode="&#59594;" d="M256 725.76v-683.52c0-23.04 19.285333-42.24 42.922667-42.24h426.154666A42.581333 42.581333 0 0 1 768 42.24V725.76c0 23.04-19.285333 42.24-42.922667 42.24H298.922667A42.581333 42.581333 0 0 1 256 725.76z m-85.333333 0A127.914667 127.914667 0 0 0 298.922667 853.333333h426.154666A128.128 128.128 0 0 0 853.333333 725.76v-683.52A127.914667 127.914667 0 0 0 725.077333-85.333333H298.922667A128.128 128.128 0 0 0 170.666667 42.24V725.76zM512 128m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0Z" horiz-adv-x="1024" />
<glyph glyph-name="square" unicode="&#59595;" d="M170.666667 682.88v-597.76c0-23.466667 18.986667-42.453333 42.453333-42.453333h597.76c23.466667 0 42.453333 18.986667 42.453333 42.453333V682.88A42.453333 42.453333 0 0 1 810.88 725.333333H213.12A42.453333 42.453333 0 0 1 170.666667 682.88z m-85.333334 0A127.786667 127.786667 0 0 0 213.12 810.666667h597.76A127.786667 127.786667 0 0 0 938.666667 682.88v-597.76A127.786667 127.786667 0 0 0 810.88-42.666667H213.12A127.786667 127.786667 0 0 0 85.333333 85.12V682.88z" horiz-adv-x="1024" />
<glyph glyph-name="speaker" unicode="&#59596;" d="M213.333333 725.76v-683.52c0-23.125333 19.114667-42.24 42.410667-42.24h512.512a42.410667 42.410667 0 0 1 42.410667 42.24V725.76a42.538667 42.538667 0 0 1-42.410667 42.24H255.744A42.410667 42.410667 0 0 1 213.333333 725.76z m-85.333333 0A127.744 127.744 0 0 0 255.744 853.333333h512.512A127.872 127.872 0 0 0 896 725.76v-683.52A127.744 127.744 0 0 0 768.256-85.333333H255.744A127.872 127.872 0 0 0 128 42.24V725.76zM512 640m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0ZM512 85.333333a213.333333 213.333333 0 1 0 0 426.666667 213.333333 213.333333 0 0 0 0-426.666667z m0 85.333334a128 128 0 1 1 0 256 128 128 0 0 1 0-256z" horiz-adv-x="1024" />
<glyph glyph-name="star" unicode="&#59597;" d="M418.432 525.056a42.666667 42.666667 0 0 0-32.085333-23.338667l-209.365334-30.549333 151.466667-147.370667c10.069333-9.770667 14.634667-23.893333 12.288-37.717333l-35.754667-208.085333 187.178667 98.304a42.666667 42.666667 0 0 0 39.68 0l187.178667-98.304-35.754667 208.085333a42.581333 42.581333 0 0 0 12.288 37.717333l151.466667 147.370667-209.365334 30.549333a42.666667 42.666667 0 0 0-32.085333 23.338667L512 714.410667 418.432 525.056z m55.296 304.512a42.666667 42.666667 0 0 0 76.544 0l121.898667-246.741333 272.64-39.808a42.624 42.624 0 0 0 23.637333-72.704l-197.248-191.914667 46.506667-271.146667a42.666667 42.666667 0 0 0-61.866667-44.928L512 90.410667l-243.84-128.085334a42.666667 42.666667 0 0 0-61.866667 44.928l46.506667 271.146667-197.248 191.914667a42.624 42.624 0 0 0 23.594667 72.704l272.64 39.808 121.941333 246.741333z" horiz-adv-x="1024" />
<glyph glyph-name="stop-circle" unicode="&#59598;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM426.666667 469.333333v-170.666666h170.666666v170.666666h-170.666666zM384 554.666667h256a42.666667 42.666667 0 0 0 42.666667-42.666667v-256a42.666667 42.666667 0 0 0-42.666667-42.666667H384a42.666667 42.666667 0 0 0-42.666667 42.666667V512a42.666667 42.666667 0 0 0 42.666667 42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="sun" unicode="&#59599;" d="M512 128a256 256 0 1 0 0 512 256 256 0 0 0 0-512z m0 85.333333a170.666667 170.666667 0 1 1 0 341.333334 170.666667 170.666667 0 0 1 0-341.333334zM469.333333 853.333333v-85.333333a42.666667 42.666667 0 0 1 85.333334 0V853.333333a42.666667 42.666667 0 0 1-85.333334 0zM469.333333 0v-85.333333a42.666667 42.666667 0 0 1 85.333334 0v85.333333a42.666667 42.666667 0 0 1-85.333334 0zM149.888 685.781333l60.586667-60.586666a42.666667 42.666667 0 0 1 60.330666 60.330666l-60.586666 60.586667a42.666667 42.666667 0 0 1-60.330667-60.330667zM753.194667 82.474667l60.586666-60.586667a42.666667 42.666667 0 0 1 60.330667 60.330667l-60.586667 60.586666a42.666667 42.666667 0 0 1-60.330666-60.330666zM42.666667 341.333333h85.333333a42.666667 42.666667 0 0 1 0 85.333334H42.666667a42.666667 42.666667 0 0 1 0-85.333334zM896 341.333333h85.333333a42.666667 42.666667 0 0 1 0 85.333334h-85.333333a42.666667 42.666667 0 0 1 0-85.333334zM210.218667 21.888l60.586666 60.586667a42.666667 42.666667 0 0 1-60.330666 60.330666l-60.586667-60.586666a42.666667 42.666667 0 0 1 60.330667-60.330667zM813.525333 625.194667l60.586667 60.586666a42.666667 42.666667 0 1 1-60.330667 60.330667l-60.586666-60.586667a42.666667 42.666667 0 1 1 60.330666-60.330666z" horiz-adv-x="1024" />
<glyph glyph-name="sunrise" unicode="&#59600;" d="M768 128a256 256 0 1 1-512 0 42.666667 42.666667 0 0 1 85.333333 0 170.666667 170.666667 0 1 0 341.333334 0 42.666667 42.666667 0 0 1 85.333333 0zM469.333333 810.666667v-298.666667a42.666667 42.666667 0 0 1 85.333334 0V810.666667a42.666667 42.666667 0 0 1-85.333334 0zM149.888 429.781333l60.586667-60.586666a42.666667 42.666667 0 1 1 60.330666 60.330666l-60.586666 60.586667a42.666667 42.666667 0 1 1-60.330667-60.330667zM42.666667 85.333333h85.333333a42.666667 42.666667 0 0 1 0 85.333334H42.666667a42.666667 42.666667 0 0 1 0-85.333334zM896 85.333333h85.333333a42.666667 42.666667 0 0 1 0 85.333334h-85.333333a42.666667 42.666667 0 0 1 0-85.333334zM813.525333 369.194667l60.586667 60.586666a42.666667 42.666667 0 1 1-60.330667 60.330667l-60.586666-60.586667a42.666667 42.666667 0 0 1 60.330666-60.330666zM981.333333 0H42.666667a42.666667 42.666667 0 0 1 0-85.333333h938.666666a42.666667 42.666667 0 0 1 0 85.333333zM652.501333 609.834667a42.666667 42.666667 0 0 1 60.330667 60.330666l-170.666667 170.666667a42.666667 42.666667 0 0 1-60.330666 0l-170.666667-170.666667a42.666667 42.666667 0 0 1 60.330667-60.330666L512 750.336l140.501333-140.501333z" horiz-adv-x="1024" />
<glyph glyph-name="tablet" unicode="&#59601;" d="M810.666667 42.24V725.76a42.538667 42.538667 0 0 1-42.410667 42.24H255.744A42.410667 42.410667 0 0 1 213.333333 725.76v-683.52c0-23.125333 19.114667-42.24 42.410667-42.24h512.512a42.410667 42.410667 0 0 1 42.410667 42.24z m85.333333 0A127.744 127.744 0 0 0 768.256-85.333333H255.744A127.872 127.872 0 0 0 128 42.24V725.76A127.744 127.744 0 0 0 255.744 853.333333h512.512A127.872 127.872 0 0 0 896 725.76v-683.52zM512 128m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0Z" horiz-adv-x="1024" />
<glyph glyph-name="tag" unicode="&#59602;" d="M841.813333 417.536l-351.146666 351.146667H127.317333V405.333333l351.146667-350.72a42.325333 42.325333 0 0 1 59.904 0l303.36 303.36a42.282667 42.282667 0 0 1 0.085333 59.562667z m59.946667-119.253333l-303.530667-303.488a126.976 126.976 0 0 0-179.626666-0.042667l-363.52 363.093333A42.325333 42.325333 0 0 0 42.666667 387.84V811.093333C42.666667 834.346667 61.610667 853.333333 84.992 853.333333h423.210667c11.221333 0 21.973333-4.48 29.909333-12.373333l363.648-363.648a126.976 126.976 0 0 0 0-179.029333zM298.666667 597.333333m-42.666667 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0Z" horiz-adv-x="1024" />
<glyph glyph-name="sunset" unicode="&#59603;" d="M768 128a256 256 0 1 1-512 0 42.666667 42.666667 0 0 1 85.333333 0 170.666667 170.666667 0 1 0 341.333334 0 42.666667 42.666667 0 0 1 85.333333 0zM554.666667 512V810.666667a42.666667 42.666667 0 0 1-85.333334 0v-298.666667a42.666667 42.666667 0 0 1 85.333334 0zM149.888 429.781333l60.586667-60.586666a42.666667 42.666667 0 1 1 60.330666 60.330666l-60.586666 60.586667a42.666667 42.666667 0 1 1-60.330667-60.330667zM42.666667 85.333333h85.333333a42.666667 42.666667 0 0 1 0 85.333334H42.666667a42.666667 42.666667 0 0 1 0-85.333334zM896 85.333333h85.333333a42.666667 42.666667 0 0 1 0 85.333334h-85.333333a42.666667 42.666667 0 0 1 0-85.333334zM813.525333 369.194667l60.586667 60.586666a42.666667 42.666667 0 1 1-60.330667 60.330667l-60.586666-60.586667a42.666667 42.666667 0 0 1 60.330666-60.330666zM981.333333 0H42.666667a42.666667 42.666667 0 0 1 0-85.333333h938.666666a42.666667 42.666667 0 0 1 0 85.333333zM371.498667 712.832a42.666667 42.666667 0 0 1-60.330667-60.330667l170.666667-170.666666a42.666667 42.666667 0 0 1 60.330666 0l170.666667 170.666666a42.666667 42.666667 0 1 1-60.330667 60.330667L512 572.330667 371.498667 712.832z" horiz-adv-x="1024" />
<glyph glyph-name="target" unicode="&#59604;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM512 85.333333a298.666667 298.666667 0 1 0 0 597.333334 298.666667 298.666667 0 0 0 0-597.333334z m0 85.333334a213.333333 213.333333 0 1 1 0 426.666666 213.333333 213.333333 0 0 1 0-426.666666zM512 256a128 128 0 1 0 0 256 128 128 0 0 0 0-256z m0 85.333333a42.666667 42.666667 0 1 1 0 85.333334 42.666667 42.666667 0 0 1 0-85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="thermometer" unicode="&#59605;" d="M715.216338 38.506413A234.660898 234.660898 0 1 0 341.337529 287.673621V746.670338a149.329662 149.329662 0 0 0 298.659324 0v-459.039382a234.660898 234.660898 0 0 0 75.219485-249.167208zM554.665618 266.255481V746.670338a63.998427 63.998427 0 0 1-127.996854 0v-480.414857a42.665618 42.665618 0 0 0-18.943534-35.455128 149.329662 149.329662 0 1 1 165.883922 0A42.665618 42.665618 0 0 0 554.665618 266.255481z" horiz-adv-x="1024" />
<glyph glyph-name="thumbs-up" unicode="&#59606;" d="M850.005333 554.666667a130.730667 130.730667 0 0 0 99.456-43.989334c25.002667-28.373333 36.138667-66.090667 30.378667-103.253333l-59.733333-383.957333c-9.685333-63.146667-65.109333-109.525333-129.365334-108.8H302.421333c-23.893333 0-43.306667 19.114667-43.306666 42.666666V426.666667c0 5.973333 1.28 11.861333 3.754666 17.322666l173.141334 384c6.954667 15.402667 22.442667 25.344 39.552 25.344 95.658667 0 173.184-76.373333 173.184-170.666666v-128h201.258666z m-58.794666-554.666667a43.093333 43.093333 0 0 1 43.306666 36.352l59.733334 383.914667a42.24 42.24 0 0 1-10.112 34.389333 43.861333 43.861333 0 0 1-33.664 14.677333H605.44c-23.893333 0-43.264 19.114667-43.264 42.666667V682.666667c0 38.101333-25.344 70.357333-60.288 81.322666l-156.16-346.368V0h445.482667z m-532.053334 384h-86.613333c-23.893333 0-43.306667-19.114667-43.306667-42.666667v-298.666666c0-23.552 19.413333-42.666667 43.306667-42.666667h86.613333v384z m43.264-469.333333H172.544C100.821333-85.333333 42.666667-28.032 42.666667 42.666667v298.666666c0 70.698667 58.154667 128 129.877333 128h129.877333c23.893333 0 43.264-19.114667 43.264-42.666666v-469.333334c0-23.552-19.370667-42.666667-43.264-42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="thumbs-down" unicode="&#59607;" d="M173.482667 213.333333a130.005333 130.005333 0 0 0-98.858667 43.733334 127.104 127.104 0 0 0-30.464 103.637333l59.818667 383.914667A128.853333 128.853333 0 0 0 232.832 853.333333H721.92a42.666667 42.666667 0 0 0 42.666667-42.666666v-469.333334a42.666667 42.666667 0 0 0-3.754667-17.578666l-173.44-384a42.666667 42.666667 0 0 0-38.869333-25.088c-95.274667 0-172.757333 76.245333-172.757334 170.666666v128h-202.24z m58.88 554.666667a43.648 43.648 0 0 1-44.074667-36.437333l-59.818667-383.957334a41.728 41.728 0 0 1 10.112-34.048c8.448-9.557333 20.906667-15.061333 34.432-14.933333h245.376a42.666667 42.666667 0 0 0 42.666667-42.666667v-170.666666c0-38.229333 25.856-70.741333 61.568-81.493334l156.586667 346.709334V768H232.362667z m532.181333-384h73.813333A57.088 57.088 0 0 1 896 429.952V721.92c-4.906667 26.794667-29.141333 46.506667-58.325333 46.037333H764.586667v-384z m-42.666667 469.333333h115.029334C909.184 854.528 971.178667 802.133333 980.906667 731.093333L981.333333 725.333333v-298.666666l-0.426666-5.845334A142.122667 142.122667 0 0 0 837.674667 298.666667H721.92a42.666667 42.666667 0 0 0-42.666667 42.666666V810.666667a42.666667 42.666667 0 0 0 42.666667 42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="toggle-left" unicode="&#59608;" d="M85.333333 384c0-141.184 114.602667-256 255.616-256h342.101334A255.786667 255.786667 0 0 1 938.666667 384c0 141.184-114.602667 256-255.616 256H340.906667A255.786667 255.786667 0 0 1 85.333333 384z m-85.333333 0c0 188.501333 152.618667 341.333333 340.949333 341.333333h342.101334C871.253333 725.333333 1024 572.288 1024 384c0-188.501333-152.618667-341.333333-340.949333-341.333333H340.906667C152.746667 42.666667 0 195.712 0 384zM341.333333 213.333333a170.666667 170.666667 0 1 0 0 341.333334 170.666667 170.666667 0 0 0 0-341.333334z m0 85.333334a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="toggle-right" unicode="&#59609;" d="M85.333333 384c0-141.184 114.602667-256 255.616-256h342.101334A255.786667 255.786667 0 0 1 938.666667 384c0 141.184-114.602667 256-255.616 256H340.906667A255.786667 255.786667 0 0 1 85.333333 384z m-85.333333 0c0 188.501333 152.618667 341.333333 340.949333 341.333333h342.101334C871.253333 725.333333 1024 572.288 1024 384c0-188.501333-152.618667-341.333333-340.949333-341.333333H340.906667C152.746667 42.666667 0 195.712 0 384zM682.666667 213.333333a170.666667 170.666667 0 1 0 0 341.333334 170.666667 170.666667 0 0 0 0-341.333334z m0 85.333334a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="trash-" unicode="&#59610;" d="M128 597.333333h768a42.666667 42.666667 0 0 1 0 85.333334H128a42.666667 42.666667 0 1 1 0-85.333334zM768 640v-597.333333a42.666667 42.666667 0 0 0-42.666667-42.666667H298.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V640a42.666667 42.666667 0 1 1-85.333333 0v-597.333333a128 128 0 0 1 128-128h426.666666a128 128 0 0 1 128 128V640a42.666667 42.666667 0 0 1-85.333333 0zM384 640V725.333333a42.666667 42.666667 0 0 0 42.666667 42.666667h170.666666a42.666667 42.666667 0 0 0 42.666667-42.666667v-85.333333a42.666667 42.666667 0 0 1 85.333333 0V725.333333a128 128 0 0 1-128 128h-170.666666a128 128 0 0 1-128-128v-85.333333a42.666667 42.666667 0 1 1 85.333333 0zM384 426.666667v-256a42.666667 42.666667 0 0 1 85.333333 0v256a42.666667 42.666667 0 0 1-85.333333 0zM554.666667 426.666667v-256a42.666667 42.666667 0 0 1 85.333333 0v256a42.666667 42.666667 0 0 1-85.333333 0z" horiz-adv-x="1024" />
<glyph glyph-name="trash" unicode="&#59611;" d="M128 597.333333h768a42.666667 42.666667 0 0 1 0 85.333334H128a42.666667 42.666667 0 1 1 0-85.333334zM768 640v-597.333333a42.666667 42.666667 0 0 0-42.666667-42.666667H298.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V640a42.666667 42.666667 0 1 1-85.333333 0v-597.333333a128 128 0 0 1 128-128h426.666666a128 128 0 0 1 128 128V640a42.666667 42.666667 0 0 1-85.333333 0zM384 640V725.333333a42.666667 42.666667 0 0 0 42.666667 42.666667h170.666666a42.666667 42.666667 0 0 0 42.666667-42.666667v-85.333333a42.666667 42.666667 0 0 1 85.333333 0V725.333333a128 128 0 0 1-128 128h-170.666666a128 128 0 0 1-128-128v-85.333333a42.666667 42.666667 0 1 1 85.333333 0z" horiz-adv-x="1024" />
<glyph glyph-name="trending-up" unicode="&#59612;" d="M392.832 478.165333a42.666667 42.666667 0 0 1-60.330667 0l-320-320a42.666667 42.666667 0 0 1 60.330667-60.330666L362.666667 387.669333l183.168-183.168a42.666667 42.666667 0 0 1 60.330666 0l405.333334 405.333334a42.666667 42.666667 0 1 1-60.330667 60.330666L576 294.997333 392.832 478.165333zM938.666667 384a42.666667 42.666667 0 0 1 85.333333 0V640a42.666667 42.666667 0 0 1-42.666667 42.666667h-256a42.666667 42.666667 0 0 1 0-85.333334h213.333334v-213.333333z" horiz-adv-x="1024" />
<glyph glyph-name="trending-down" unicode="&#59613;" d="M72.832 670.165333A42.666667 42.666667 0 0 1 12.501333 609.834667l320-320a42.666667 42.666667 0 0 1 60.330667 0L576 473.002667l375.168-375.168a42.666667 42.666667 0 0 1 60.330667 60.330666l-405.333334 405.333334a42.666667 42.666667 0 0 1-60.330666 0L362.666667 380.330667 72.832 670.165333zM725.333333 170.666667a42.666667 42.666667 0 0 1 0-85.333334h256a42.666667 42.666667 0 0 1 42.666667 42.666667v256a42.666667 42.666667 0 0 1-85.333333 0v-213.333333h-213.333334z" horiz-adv-x="1024" />
<glyph glyph-name="triangle" unicode="&#59614;" d="M402.517333 753.237333a128.128 128.128 0 0 0 219.136 0L983.466667 149.333333a128 128 0 0 0-109.909334-192H150.144a128 128 0 0 0-109.098667 192.597334l361.472 603.306666zM114.602667 106.666667A42.666667 42.666667 0 0 1 150.613333 42.666667h722.474667a42.666667 42.666667 0 0 1 36.821333 63.402666L548.565333 709.162667a42.666667 42.666667 0 0 1-72.96 0.085333L114.645333 106.666667z" horiz-adv-x="1024" />
<glyph glyph-name="type" unicode="&#59615;" d="M213.333333 682.666667h597.333334v-85.333334a42.666667 42.666667 0 0 1 85.333333 0V725.333333a42.666667 42.666667 0 0 1-42.666667 42.666667H170.666667a42.666667 42.666667 0 0 1-42.666667-42.666667v-128a42.666667 42.666667 0 1 1 85.333333 0V682.666667zM384 0h256a42.666667 42.666667 0 0 1 0 85.333333H384a42.666667 42.666667 0 0 1 0-85.333333zM469.333333 725.333333v-682.666666a42.666667 42.666667 0 0 1 85.333334 0V725.333333a42.666667 42.666667 0 0 1-85.333334 0z" horiz-adv-x="1024" />
<glyph glyph-name="twitter" unicode="&#59616;" d="M956.843947 759.765333c32.213333 22.741333 75.349333-6.698667 66.048-45.056a372.736 372.736 0 0 0-85.12-161.28c0.64-6.869333 0.938667-13.866667 0.981333-20.864C938.75328 25.856 450.390613-234.410667 22.01728 3.925333c-39.253333 21.802667-22.485333 81.792 22.442667 80a453.461333 453.461333 0 0 1 207.957333 41.344c-94.037333 58.026667-154.24 134.869333-183.808 225.792-30.506667 93.866667-26.026667 192.512-0.597333 286.208 7.68 28.330667 15.530667 49.664 21.077333 62.208a42.666667 42.666667 0 0 0 73.898667 7.168A412.032 412.032 0 0 1 469.419947 532.309333a234.112 234.112 0 0 0 150.4 220.288 233.6 233.6 0 0 0 239.274666-44.202666 422.186667 422.186667 0 0 1 97.706667 51.370666z m-97.109334-141.226666a42.666667 42.666667 0 0 0-44.501333 12.885333 148.352 148.352 0 0 1-164.949333 41.344A148.906667 148.906667 0 0 1 554.75328 531.285333v-42.709333a42.666667 42.666667 0 0 0-41.557333-42.709333c-139.093333-3.626667-272.042667 51.2-367.872 148.906666-16.853333-72.832-18.090667-147.925333 4.437333-217.258666 28.885333-88.917333 95.018667-161.066667 208.981333-211.797334 30.592-13.610667 34.346667-55.552 6.656-74.368a538.922667 538.922667 0 0 0-154.88-72.490666C538.198613-67.456 853.419947 150.357333 853.419947 532.437333a149.76 149.76 0 0 1-2.645334 27.562667 42.752 42.752 0 0 0 11.946667 38.442667c9.514667 9.386667 18.304 19.413333 26.368 29.952-9.685333-3.584-19.456-6.826667-29.354667-9.813334z" horiz-adv-x="1024" />
<glyph glyph-name="upload" unicode="&#59617;" d="M554.666667 665.002667V256a42.666667 42.666667 0 0 0-85.333334 0V665.002667L328.832 524.5013329999999a42.666667 42.666667 0 0 0-60.330667 60.330667l213.333334 213.333333a42.666667 42.666667 0 0 0 60.330666 0l213.333334-213.333333a42.666667 42.666667 0 1 0-60.330667-60.330667L554.666667 665.002667zM853.333333 256a42.666667 42.666667 0 0 0 85.333334 0v-170.666667a128 128 0 0 0-128-128H213.333333a128 128 0 0 0-128 128v170.666667a42.666667 42.666667 0 0 0 85.333334 0v-170.666667a42.666667 42.666667 0 0 1 42.666666-42.666666h597.333334a42.666667 42.666667 0 0 1 42.666666 42.666666v170.666667z" horiz-adv-x="1024" />
<glyph glyph-name="umbrella" unicode="&#59618;" d="M554.666667 341.33333300000004v-256a85.333333 85.333333 0 1 1 170.666666 0 42.666667 42.666667 0 0 0 85.333334 0 170.666667 170.666667 0 1 0-341.333334 0v256H42.666667a42.666667 42.666667 0 0 0-42.453334 46.72 514.133333 514.133333 0 0 0 1023.573334 0A42.666667 42.666667 0 0 0 981.333333 341.33333300000004H554.666667zM512 768c-205.098667 0-379.008-144.64-419.84-341.333333h839.68c-40.832 196.693333-214.741333 341.333333-419.84 341.333333z" horiz-adv-x="1024" />
<glyph glyph-name="upload-cloud" unicode="&#59619;" d="M652.517547 183.168a42.666667 42.666667 0 0 1 60.330666 60.330667l-170.666666 170.666666a42.666667 42.666667 0 0 1-60.330667 0l-170.666667-170.666666a42.666667 42.666667 0 0 1 60.330667-60.330667L512.016213 323.669333l140.501334-140.501333zM469.349547 384v-384a42.666667 42.666667 0 0 1 85.333333 0v384a42.666667 42.666667 0 0 1-85.333333 0zM427.57888 808.106667a384 384 0 0 1-331.306667-635.818667 42.666667 42.666667 0 1 1 63.957334 56.490667A298.666667 298.666667 0 1 0 673.168213 501.333333a42.666667 42.666667 0 0 1 41.301334-32h53.76a170.666667 170.666667 0 0 0 81.578666-320.512 42.666667 42.666667 0 1 1 40.832-74.922666A256 256 0 0 1 768.272213 554.666667h-22.229333a384 384 0 0 1-318.464 253.44zM652.517547 183.168a42.666667 42.666667 0 0 1 60.330666 60.330667l-170.666666 170.666666a42.666667 42.666667 0 0 1-60.330667 0l-170.666667-170.666666a42.666667 42.666667 0 0 1 60.330667-60.330667L512.016213 323.669333l140.501334-140.501333z" horiz-adv-x="1024" />
<glyph glyph-name="unlock" unicode="&#59620;" d="M256 469.333333V597.205333c-0.128 131.413333 100.266667 241.621333 232.192 254.805334 131.968 13.226667 252.586667-74.837333 278.954667-203.648a42.666667 42.666667 0 0 0-33.621334-50.261334 43.008 43.008 0 0 0-50.730666 33.28c-17.578667 85.888-97.962667 144.597333-185.941334 135.765334-87.978667-8.789333-154.88-82.218667-154.794666-169.898667V469.333333h468.821333A127.957333 127.957333 0 0 0 938.666667 341.674667v-299.349334A127.701333 127.701333 0 0 0 810.88-85.33333300000004H213.12A127.957333 127.957333 0 0 0 85.333333 42.325333v299.349334A127.701333 127.701333 0 0 0 213.12 469.333333H256z m-85.333333-127.658666v-299.349334c0-23.168 19.157333-42.325333 42.453333-42.325333h597.76c23.466667 0 42.453333 18.944 42.453333 42.325333v299.349334a42.624 42.624 0 0 1-42.453333 42.325333H213.12a42.368 42.368 0 0 1-42.453333-42.325333z" horiz-adv-x="1024" />
<glyph glyph-name="user-check" unicode="&#59621;" d="M725.333333 0v85.333333a213.333333 213.333333 0 0 1-213.333333 213.333334H213.333333a213.333333 213.333333 0 0 1-213.333333-213.333334v-85.333333a42.666667 42.666667 0 0 1 85.333333 0v85.333333a128 128 0 0 0 128 128h298.666667a128 128 0 0 0 128-128v-85.333333a42.666667 42.666667 0 0 1 85.333333 0zM362.666667 384a213.333333 213.333333 0 1 0 0 426.666667 213.333333 213.333333 0 0 0 0-426.666667z m0 85.333333a128 128 0 1 1 0 256 128 128 0 0 1 0-256zM755.498667 456.832a42.666667 42.666667 0 0 1-60.330667-60.330667l85.333333-85.333333a42.666667 42.666667 0 0 1 60.330667 0l170.666667 170.666667a42.666667 42.666667 0 1 1-60.330667 60.330666L810.666667 401.664l-55.168 55.168z" horiz-adv-x="1024" />
<glyph glyph-name="user-minus" unicode="&#59622;" d="M725.333333 0v85.333333a213.333333 213.333333 0 0 1-213.333333 213.333334H213.333333a213.333333 213.333333 0 0 1-213.333333-213.333334v-85.333333a42.666667 42.666667 0 0 1 85.333333 0v85.333333a128 128 0 0 0 128 128h298.666667a128 128 0 0 0 128-128v-85.333333a42.666667 42.666667 0 0 1 85.333333 0zM362.666667 384a213.333333 213.333333 0 1 0 0 426.666667 213.333333 213.333333 0 0 0 0-426.666667z m0 85.333333a128 128 0 1 1 0 256 128 128 0 0 1 0-256zM981.333333 469.333333h-256a42.666667 42.666667 0 0 1 0-85.333333h256a42.666667 42.666667 0 0 1 0 85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="user-plus" unicode="&#59623;" d="M725.333333 0v85.333333a213.333333 213.333333 0 0 1-213.333333 213.333334H213.333333a213.333333 213.333333 0 0 1-213.333333-213.333334v-85.333333a42.666667 42.666667 0 0 1 85.333333 0v85.333333a128 128 0 0 0 128 128h298.666667a128 128 0 0 0 128-128v-85.333333a42.666667 42.666667 0 0 1 85.333333 0zM362.666667 384a213.333333 213.333333 0 1 0 0 426.666667 213.333333 213.333333 0 0 0 0-426.666667z m0 85.333333a128 128 0 1 1 0 256 128 128 0 0 1 0-256zM810.666667 554.666667v-256a42.666667 42.666667 0 0 1 85.333333 0V554.666667a42.666667 42.666667 0 0 1-85.333333 0zM981.333333 469.333333h-256a42.666667 42.666667 0 0 1 0-85.333333h256a42.666667 42.666667 0 0 1 0 85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="user-x" unicode="&#59624;" d="M725.333333 0v85.333333a213.333333 213.333333 0 0 1-213.333333 213.333334H213.333333a213.333333 213.333333 0 0 1-213.333333-213.333334v-85.333333a42.666667 42.666667 0 0 1 85.333333 0v85.333333a128 128 0 0 0 128 128h298.666667a128 128 0 0 0 128-128v-85.333333a42.666667 42.666667 0 0 1 85.333333 0zM362.666667 384a213.333333 213.333333 0 1 0 0 426.666667 213.333333 213.333333 0 0 0 0-426.666667z m0 85.333333a128 128 0 1 1 0 256 128 128 0 0 1 0-256zM737.834667 524.501333l213.333333-213.333333a42.666667 42.666667 0 0 1 60.330667 60.330667l-213.333334 213.333333a42.666667 42.666667 0 0 1-60.330666-60.330667zM951.168 584.832l-213.333333-213.333333a42.666667 42.666667 0 0 1 60.330666-60.330667l213.333334 213.333333a42.666667 42.666667 0 1 1-60.330667 60.330667z" horiz-adv-x="1024" />
<glyph glyph-name="user" unicode="&#59625;" d="M896 0v85.333333a213.333333 213.333333 0 0 1-213.333333 213.333334H341.333333a213.333333 213.333333 0 0 1-213.333333-213.333334v-85.333333a42.666667 42.666667 0 0 1 85.333333 0v85.333333a128 128 0 0 0 128 128h341.333334a128 128 0 0 0 128-128v-85.333333a42.666667 42.666667 0 0 1 85.333333 0zM512 384a213.333333 213.333333 0 1 0 0 426.666667 213.333333 213.333333 0 0 0 0-426.666667z m0 85.333333a128 128 0 1 1 0 256 128 128 0 0 1 0-256z" horiz-adv-x="1024" />
<glyph glyph-name="users" unicode="&#59626;" d="M768 0v85.333333a213.333333 213.333333 0 0 1-213.333333 213.333334H213.333333a213.333333 213.333333 0 0 1-213.333333-213.333334v-85.333333a42.666667 42.666667 0 0 1 85.333333 0v85.333333a128 128 0 0 0 128 128h341.333334a128 128 0 0 0 128-128v-85.333333a42.666667 42.666667 0 0 1 85.333333 0zM384 384A213.333333 213.333333 0 1 0 384 810.666667a213.333333 213.333333 0 0 0 0-426.666667z m0 85.333333a128 128 0 1 1 0 256 128 128 0 0 1 0-256zM1024 0v85.333333a213.333333 213.333333 0 0 1-160 206.421334 42.666667 42.666667 0 1 1-21.333333-82.602667A128 128 0 0 0 938.666667 85.290667V0a42.666667 42.666667 0 0 1 85.333333 0zM672.085333 721.109333a128 128 0 0 0 0-247.978666 42.666667 42.666667 0 0 1 21.162667-82.688 213.333333 213.333333 0 0 1 0 413.354666 42.666667 42.666667 0 0 1-21.162667-82.688z" horiz-adv-x="1024" />
<glyph glyph-name="video-off" unicode="&#59627;" d="M640.197128 213.158348v-42.644794a42.644793 42.644793 0 0 0-42.644793-42.644793H128.459607a42.644793 42.644793 0 0 0-42.644793 42.644793V596.961489a42.644793 42.644793 0 0 0 42.644793 42.644793h85.289587a42.644793 42.644793 0 1 1 0 85.289587H128.459607a127.93438 127.93438 0 0 1-127.93438-127.93438v-426.447935a127.93438 127.93438 0 0 1 127.93438-127.93438h469.092728a127.93438 127.93438 0 0 1 127.93438 127.93438v42.644794a42.644793 42.644793 0 0 1-85.289587 0z m316.168499 418.345423l-255.868761-185.078403 55.139718-4.392414-42.644793 42.644793 12.494924-30.149869V596.961489a127.93438 127.93438 0 0 1-127.93438 127.93438h-142.43361a42.644793 42.644793 0 0 1 0-85.289587H597.552335a42.644793 42.644793 0 0 0 42.644793-42.644793v-142.433611a42.644793 42.644793 0 0 1 12.494925-30.149869l42.644793-42.644793a42.644793 42.644793 0 0 1 55.139718-4.392414L938.710682 513.462983V170.513554a42.644793 42.644793 0 0 1 85.289587 0V596.961489a42.644793 42.644793 0 0 1-67.634642 34.542282zM13.020151 822.68038l938.185456-938.185456a42.644793 42.644793 0 0 1 60.299738 60.299738l-938.185456 938.185456A42.644793 42.644793 0 1 1 13.020151 822.68038z" horiz-adv-x="1024" />
<glyph glyph-name="video" unicode="&#59628;" d="M956.544427 632.064A42.666667 42.666667 0 0 0 1024.000427 597.333333v-426.666666a42.666667 42.666667 0 0 0-67.456-34.730667l-298.666667 213.333333a42.666667 42.666667 0 0 0 0 69.461334l298.666667 213.333333zM756.05376 384L938.667093 253.568V514.432L756.05376 384zM85.33376 597.077333v-426.154666A42.581333 42.581333 0 0 1 127.659093 128h470.016A42.666667 42.666667 0 0 1 640.000427 170.922667V597.077333A42.581333 42.581333 0 0 1 597.675093 640H127.659093A42.666667 42.666667 0 0 1 85.33376 597.077333z m-85.333333 0A128 128 0 0 0 127.659093 725.333333h470.016A127.914667 127.914667 0 0 0 725.33376 597.077333v-426.154666A128 128 0 0 0 597.675093 42.666667H127.659093A127.914667 127.914667 0 0 0 0.000427 170.922667V597.077333z" horiz-adv-x="1024" />
<glyph glyph-name="voicemail" unicode="&#59629;" d="M608.306773 256a234.666667 234.666667 0 1 0 181.034667-85.333333h-554.666667a234.666667 234.666667 0 1 0 181.034667 85.333333h192.597333zM234.674773 256a149.333333 149.333333 0 1 1 0 298.666667 149.333333 149.333333 0 0 1 0-298.666667z m554.666667 0a149.333333 149.333333 0 1 1 0 298.666667 149.333333 149.333333 0 0 1 0-298.666667z" horiz-adv-x="1024" />
<glyph glyph-name="volume-x" unicode="&#59630;" d="M442.666667 715.946667A42.666667 42.666667 0 0 0 512 682.666667v-597.333334a42.666667 42.666667 0 0 0-69.333333-33.28L241.066667 213.333333H85.333333a42.666667 42.666667 0 0 0-42.666666 42.666667V512a42.666667 42.666667 0 0 0 42.666666 42.666667h155.733334l201.6 161.28z m-160-237.226667A42.666667 42.666667 0 0 0 256 469.333333H128v-170.666666h128a42.666667 42.666667 0 0 0 26.666667-9.386667L426.666667 174.08V593.92l-144-115.2zM951.168 542.165333l-256-256a42.666667 42.666667 0 0 1 60.330667-60.330666l256 256a42.666667 42.666667 0 1 1-60.330667 60.330666zM695.168 481.834667l256-256a42.666667 42.666667 0 0 1 60.330667 60.330666l-256 256a42.666667 42.666667 0 0 1-60.330667-60.330666z" horiz-adv-x="1024" />
<glyph glyph-name="volume-" unicode="&#59631;" d="M528 715.946667A42.666667 42.666667 0 0 0 597.333333 682.666667v-597.333334a42.666667 42.666667 0 0 0-69.333333-33.28L326.4 213.333333H170.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V512a42.666667 42.666667 0 0 0 42.666667 42.666667h155.733333l201.6 161.28z m-160-237.226667A42.666667 42.666667 0 0 0 341.333333 469.333333H213.333333v-170.666666h128a42.666667 42.666667 0 0 0 26.666667-9.386667L512 174.08V593.92l-144-115.2zM718.208 504.874667a170.666667 170.666667 0 0 0 0-241.322667 42.666667 42.666667 0 1 1 60.330667-60.330667 256 256 0 0 1 0 361.984 42.666667 42.666667 0 1 1-60.330667-60.330666z" horiz-adv-x="1024" />
<glyph glyph-name="volume-1" unicode="&#59632;" d="M442.666667 715.946667A42.666667 42.666667 0 0 0 512 682.666667v-597.333334a42.666667 42.666667 0 0 0-69.333333-33.28L241.066667 213.333333H85.333333a42.666667 42.666667 0 0 0-42.666666 42.666667V512a42.666667 42.666667 0 0 0 42.666666 42.666667h155.733334l201.6 161.28z m-160-237.226667A42.666667 42.666667 0 0 0 256 469.333333H128v-170.666666h128a42.666667 42.666667 0 0 0 26.666667-9.386667L426.666667 174.08V593.92l-144-115.2zM783.488 655.488a384 384 0 0 0 0-542.976 42.666667 42.666667 0 1 1 60.330667-60.330667c183.210667 183.253333 183.210667 480.384 0 663.637334a42.666667 42.666667 0 1 1-60.330667-60.330667z m-150.613333-150.613333a170.666667 170.666667 0 0 0 0-241.322667 42.666667 42.666667 0 1 1 60.330666-60.330667 256 256 0 0 1 0 361.984 42.666667 42.666667 0 1 1-60.330666-60.330666z" horiz-adv-x="1024" />
<glyph glyph-name="volume" unicode="&#59633;" d="M656 715.946667A42.666667 42.666667 0 0 0 725.333333 682.666667v-597.333334a42.666667 42.666667 0 0 0-69.333333-33.28L454.4 213.333333H298.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V512a42.666667 42.666667 0 0 0 42.666667 42.666667h155.733333l201.6 161.28z m-160-237.226667A42.666667 42.666667 0 0 0 469.333333 469.333333H341.333333v-170.666666h128a42.666667 42.666667 0 0 0 26.666667-9.386667L640 174.08V593.92l-144-115.2z" horiz-adv-x="1024" />
<glyph glyph-name="watch" unicode="&#59634;" d="M512 42.66716399999996a341.332622 341.332622 0 1 0 0 682.665245 341.332622 341.332622 0 0 0 0-682.665245z m0 85.333156a255.999467 255.999467 0 1 1 0 511.998933 255.999467 255.999467 0 0 1 0-511.998933zM554.666578 511.99952v-110.33577l51.498559-51.49856a42.666578 42.666578 0 0 0-60.330541-60.33054l-63.999866 63.999866A42.666578 42.666578 0 0 0 469.333422 383.99978699999997V511.99952a42.666578 42.666578 0 0 0 85.333156 0z m107.263776-352.383266a42.666578 42.666578 0 0 0 84.991823-7.765317l-14.933302-163.370326A127.957067 127.957067 0 0 0 604.159808-127.999147H419.584193a127.999733 127.999733 0 0 0-127.999734 116.437091l-14.933302 163.412993a42.666578 42.666578 0 0 0 84.991823 7.765317l14.933302-163.455659c2.005329-22.058621 20.522624-38.911919 42.837244-38.826586h184.916948a42.666578 42.666578 0 0 1 42.666578 38.869252l14.933302 163.412993zM362.069646 608.383319a42.666578 42.666578 0 1 0-84.991823 7.765317l14.933302 163.370327A127.999733 127.999733 0 0 0 419.413526 895.99872h185.428947a127.999733 127.999733 0 0 0 127.999734-116.437091l14.933302-163.412993a42.666578 42.666578 0 0 0-84.991823-7.765317l-14.933302 163.45566A42.709244 42.709244 0 0 1 605.01314 810.665564H419.413526a42.666578 42.666578 0 0 1-42.410578-38.869252l-14.933302-163.412993z" horiz-adv-x="1024" />
<glyph glyph-name="wifi" unicode="&#59635;" d="M240.64 327.765333a426.666667 426.666667 0 0 0 546.133333 0 42.666667 42.666667 0 0 1 54.613334 65.536 512 512 0 0 1-655.36 0 42.666667 42.666667 0 1 1 54.613333-65.536zM88.405333 480a640 640 0 0 0 846.762667 0 42.666667 42.666667 0 0 1 56.490667 64C717.44 785.877333 306.133333 785.877333 31.914667 544a42.666667 42.666667 0 1 1 56.490666-64z m299.818667-306.133333a213.333333 213.333333 0 0 0 247.125333 0 42.666667 42.666667 0 0 1 49.408 69.546666 298.666667 298.666667 0 0 1-345.941333 0 42.666667 42.666667 0 0 1 49.408-69.546666zM512 42.666667m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0Z" horiz-adv-x="1024" />
<glyph glyph-name="x-square" unicode="&#59636;" d="M170.666667 682.88v-597.76c0-23.466667 18.986667-42.453333 42.453333-42.453333h597.76c23.466667 0 42.453333 18.986667 42.453333 42.453333V682.88A42.453333 42.453333 0 0 1 810.88 725.333333H213.12A42.453333 42.453333 0 0 1 170.666667 682.88z m-85.333334 0A127.786667 127.786667 0 0 0 213.12 810.666667h597.76A127.786667 127.786667 0 0 0 938.666667 682.88v-597.76A127.786667 127.786667 0 0 0 810.88-42.666667H213.12A127.786667 127.786667 0 0 0 85.333333 85.12V682.88zM353.834667 481.834667l256-256a42.666667 42.666667 0 0 1 60.330666 60.330666l-256 256a42.666667 42.666667 0 0 1-60.330666-60.330666zM609.834667 542.165333l-256-256a42.666667 42.666667 0 0 1 60.330666-60.330666l256 256a42.666667 42.666667 0 1 1-60.330666 60.330666z" horiz-adv-x="1024" />
<glyph glyph-name="wind" unicode="&#59637;" d="M439.466667 670.08A42.666667 42.666667 0 1 0 469.461333 597.333333H85.333333a42.666667 42.666667 0 1 1 0-85.333333h384a127.957333 127.957333 0 0 1 64.298667 238.890667 128 128 0 0 1-154.709333-20.650667 42.666667 42.666667 0 0 1 60.501333-60.16z m67.413333-632.32A128 128 0 1 1 597.205333 256H85.333333a42.666667 42.666667 0 0 1 0-85.333333h512a42.709333 42.709333 0 0 0 21.674667-79.616 42.666667 42.666667 0 0 0-51.584 6.869333 42.666667 42.666667 0 1 1-60.501333-60.16z m279.722667 498.218667A64 64 0 1 0 831.914667 426.666667H85.333333a42.666667 42.666667 0 0 1 0-85.333334h746.666667a149.333333 149.333333 0 1 1-105.642667 255.061334 42.666667 42.666667 0 1 1 60.245334-60.416z" horiz-adv-x="1024" />
<glyph glyph-name="x" unicode="&#59638;" d="M737.834667 670.165333l-512-512a42.666667 42.666667 0 0 1 60.330666-60.330666l512 512a42.666667 42.666667 0 1 1-60.330666 60.330666zM225.834667 609.834667l512-512a42.666667 42.666667 0 0 1 60.330666 60.330666l-512 512a42.666667 42.666667 0 0 1-60.330666-60.330666z" horiz-adv-x="1024" />
<glyph glyph-name="x-circle" unicode="&#59639;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768zM609.834667 542.165333l-256-256a42.666667 42.666667 0 0 1 60.330666-60.330666l256 256a42.666667 42.666667 0 1 1-60.330666 60.330666zM353.834667 481.834667l256-256a42.666667 42.666667 0 0 1 60.330666 60.330666l-256 256a42.666667 42.666667 0 0 1-60.330666-60.330666z" horiz-adv-x="1024" />
<glyph glyph-name="zap" unicode="&#59640;" d="M128 256a42.666667 42.666667 0 0 0-32.768 69.973333l426.666667 512c27.264 32.725333 80.384 9.685333 75.093333-32.597333L560.298667 512H896a42.666667 42.666667 0 0 0 32.768-69.973333l-426.666667-512c-27.264-32.725333-80.384-9.685333-75.093333 32.597333l36.693333 293.376H128z m91.093333 85.333333H512a42.666667 42.666667 0 0 0 42.325333-47.957333l-24.618666-196.949333 275.2 330.24H512a42.666667 42.666667 0 0 0-42.325333 47.957333l24.618666 196.949333L219.093333 341.333333z" horiz-adv-x="1024" />
<glyph glyph-name="zoom-in" unicode="&#59641;" d="M469.333333 42.666667a384 384 0 1 0 300.032 144.298666l156.8-156.8a42.666667 42.666667 0 0 0-60.330666-60.330666l-156.8 156.8A382.378667 382.378667 0 0 0 469.333333 42.666667z m0 85.333333a298.666667 298.666667 0 1 1 0 597.333333 298.666667 298.666667 0 0 1 0-597.333333zM426.666667 554.666667v-256a42.666667 42.666667 0 0 1 85.333333 0V554.666667a42.666667 42.666667 0 0 1-85.333333 0zM341.333333 384h256a42.666667 42.666667 0 0 1 0 85.333333H341.333333a42.666667 42.666667 0 0 1 0-85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="zoom-out" unicode="&#59642;" d="M709.034667 126.634667a384 384 0 1 0 60.330666 60.330666l156.8-156.8a42.666667 42.666667 0 0 0-60.330666-60.330666l-156.8 156.8zM469.333333 128a298.666667 298.666667 0 1 1 0 597.333333 298.666667 298.666667 0 0 1 0-597.333333zM341.333333 384h256a42.666667 42.666667 0 0 1 0 85.333333H341.333333a42.666667 42.666667 0 0 1 0-85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="command" unicode="&#59643;" d="M597.333333 213.33333300000004h-170.666666v-85.333333a170.666667 170.666667 0 1 0-170.666667 170.666667h85.333333v170.666666H256a170.666667 170.666667 0 1 0 170.666667 170.666667v-85.333333h170.666666V640a170.666667 170.666667 0 1 0 170.666667-170.666667h-85.333333v-170.666666h85.333333a170.666667 170.666667 0 1 0-170.666667-170.666667v85.333333z m-170.666666 256v-170.666666h170.666666v170.666666h-170.666666zM341.333333 554.666667V640a85.333333 85.333333 0 1 1-85.333333-85.333333h85.333333z m0-341.333334H256a85.333333 85.333333 0 1 1 85.333333-85.333333v85.333333z m341.333334-85.333333a85.333333 85.333333 0 1 1 85.333333 85.333333h-85.333333v-85.333333z m85.333333 426.666667a85.333333 85.333333 0 1 1-85.333333 85.333333v-85.333333h85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="cloud" unicode="&#59644;" d="M768.190293 512a255.914667 255.914667 0 1 0 0-511.829333H384.318293A383.914667 383.914667 0 1 0 745.918293 512h22.186667z m0-85.290667h-53.76a42.666667 42.666667 0 0 0-41.301333 32 298.581333 298.581333 0 1 1-288.853333-373.248h383.914666a170.624 170.624 0 1 1 0 341.248z" horiz-adv-x="1044" />
<glyph glyph-name="hash" unicode="&#59645;" d="M170.666667 469.333333h682.666666a42.666667 42.666667 0 0 1 0 85.333334H170.666667a42.666667 42.666667 0 1 1 0-85.333334zM170.666667 213.33333300000004h682.666666a42.666667 42.666667 0 0 1 0 85.333334H170.666667a42.666667 42.666667 0 0 1 0-85.333334zM384.256 772.6933329999999l-85.333333-768a42.666667 42.666667 0 1 1 84.821333-9.386666l85.333333 768a42.666667 42.666667 0 1 1-84.821333 9.386666zM640.256 772.6933329999999l-85.333333-768a42.666667 42.666667 0 1 1 84.821333-9.386666l85.333333 768a42.666667 42.666667 0 1 1-84.821333 9.386666z" horiz-adv-x="1024" />
<glyph glyph-name="headphones" unicode="&#59646;" d="M85.333333 213.33333300000004v170.666667C85.333333 619.648 276.352 810.666667 512 810.666667s426.666667-191.018667 426.666667-426.666667v-298.666667a128 128 0 0 0-128-128h-42.666667a128 128 0 0 0-128 128v128a128 128 0 0 0 128 128h85.333333v42.666667a341.333333 341.333333 0 0 1-682.666666 0v-42.666667h85.333333a128 128 0 0 0 128-128v-128a128 128 0 0 0-128-128H213.333333a128 128 0 0 0-128 128v128z m768 42.666667h-85.333333a42.666667 42.666667 0 0 1-42.666667-42.666667v-128a42.666667 42.666667 0 0 1 42.666667-42.666666h42.666667a42.666667 42.666667 0 0 1 42.666666 42.666666v170.666667zM170.666667 256v-170.666667a42.666667 42.666667 0 0 1 42.666666-42.666666h42.666667a42.666667 42.666667 0 0 1 42.666667 42.666666v128a42.666667 42.666667 0 0 1-42.666667 42.666667H170.666667z" horiz-adv-x="1024" />
<glyph glyph-name="underline" unicode="&#59647;" d="M213.333333 768a42.666667 42.666667 0 1 0 85.333334 0v-298.666667a213.333333 213.333333 0 0 1 426.666666 0V768a42.666667 42.666667 0 0 0 85.333334 0v-298.666667a298.666667 298.666667 0 0 0-597.333334 0V768zM170.666667-42.666667a42.666667 42.666667 0 0 0 0 85.333334h682.666666a42.666667 42.666667 0 0 0 0-85.333334H170.666667z" horiz-adv-x="1024" />
<glyph glyph-name="italic" unicode="&#59648;" d="M669.568 682.666667H810.666667a42.666667 42.666667 0 0 1 0 85.333333h-384a42.666667 42.666667 0 1 1 0-85.333333h151.765333l-224-597.333334H213.333333a42.666667 42.666667 0 0 1 0-85.333333h384a42.666667 42.666667 0 0 1 0 85.333333h-151.765333l224 597.333334z" horiz-adv-x="1024" />
<glyph glyph-name="bold" unicode="&#59649;" d="M743.936 399.701333A213.333333 213.333333 0 0 0 640 0H256a42.666667 42.666667 0 0 0-42.666667 42.666667V725.333333a42.666667 42.666667 0 0 0 42.666667 42.666667h341.333333a213.333333 213.333333 0 0 0 146.602667-368.298667zM298.666667 682.666667v-256h298.666666a128 128 0 0 1 0 256H298.666667z m0-597.333334h341.333333a128 128 0 0 1 0 256H298.666667v-256z" horiz-adv-x="1024" />
<glyph glyph-name="crop" unicode="&#59650;" d="M302.764169 679.379651L682.710044 682.664978a127.999733 127.999733 0 0 0 127.999734-127.999734v-383.9992h170.666311a42.666578 42.666578 0 0 0 0-85.333155h-170.666311v-170.666311a42.666578 42.666578 0 0 0-85.333156 0v170.666311H341.377422c-70.698519 0-127.999733 57.301214-127.999733 128.383732l3.285326 379.561876-173.567638-1.49333a42.666578 42.666578 0 0 0-0.767998 85.333156l175.060968 1.535996L218.924344 853.715288a42.666578 42.666578 0 0 0 85.333156-0.767998l-1.493331-173.567639z m-0.767998-85.333155L298.710844 213.332622a42.666578 42.666578 0 0 1 42.666578-42.666578h383.9992V554.665244c0 23.551951-19.114627 42.666578-42.282578 42.666578l-381.097873-3.285326z" horiz-adv-x="1024" />
<glyph glyph-name="help-circle" unicode="&#59651;" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768z m0 128a42.666667 42.666667 0 1 0 0 85.333333 42.666667 42.666667 0 0 0 0-85.333333z m-83.925333 369.834667a42.666667 42.666667 0 1 0-80.469334 28.330666A170.666667 170.666667 0 0 0 679.253333 469.333333c0-54.613333-32.341333-97.706667-82.986666-131.498666a323.2 323.2 0 0 0-74.197334-36.992 42.666667 42.666667 0 1 0-26.965333 80.981333 255.488 255.488 0 0 1 53.845333 27.008c29.312 19.584 44.970667 40.448 44.970667 60.586667a85.333333 85.333333 0 0 1-165.845333 28.416z" horiz-adv-x="1024" />
<glyph glyph-name="paperclip" unicode="&#59652;" d="M884.522667 428.586667l-392.106667-392.106667a213.461333 213.461333 0 0 0-301.909333 301.909333l392.106666 392.106667a128.085333 128.085333 0 1 0 181.162667-181.162667l-392.533333-392.106666a42.709333 42.709333 0 1 0-60.416 60.416l362.24 361.813333a42.666667 42.666667 0 0 1-60.288 60.330667l-362.24-361.813334a128.042667 128.042667 0 1 1 181.034666-181.077333l392.533334 392.106667a213.418667 213.418667 0 1 1-301.824 301.824l-392.106667-392.106667a298.794667 298.794667 0 1 1 422.570667-422.570667l392.106666 392.106667a42.666667 42.666667 0 0 1-60.330666 60.330667z" horiz-adv-x="1024" />
<glyph glyph-name="shopping-cart" unicode="&#59653;" d="M341.333333-128a128 128 0 1 0 0 256 128 128 0 0 0 0-256z m0 85.333333a42.666667 42.666667 0 1 1 0 85.333334 42.666667 42.666667 0 0 1 0-85.333334z m512-85.333333a128 128 0 1 0 0 256 128 128 0 0 0 0-256z m0 85.333333a42.666667 42.666667 0 1 1 0 85.333334 42.666667 42.666667 0 0 1 0-85.333334zM278.912 682.666667H981.333333a42.666667 42.666667 0 0 0 41.813334-51.029334l-71.68-357.930666A127.786667 127.786667 0 0 0 824.32 170.666667H373.674667a128 128 0 0 0-128 111.36L180.864 773.546667A42.666667 42.666667 0 0 1 138.666667 810.666667H42.666667a42.666667 42.666667 0 1 0 0 85.333333h96.085333a128 128 0 0 0 126.72-111.36L278.869333 682.666667z m51.413333-389.546667c2.773333-21.376 21.077333-37.290667 43.008-37.12h451.84a42.666667 42.666667 0 0 1 42.666667 34.389333L929.28 597.333333H290.133333l40.192-304.213333z" horiz-adv-x="1024" />
<glyph glyph-name="tv" unicode="&#59654;" d="M409.002667 640L268.501333 780.501333a42.666667 42.666667 0 0 0 60.330667 60.330667L512 657.664l183.168 183.168a42.666667 42.666667 0 0 0 60.330667-60.330667L614.997333 640H853.333333a128 128 0 0 0 128-128v-469.333333a128 128 0 0 0-128-128H170.666667a128 128 0 0 0-128 128V512a128 128 0 0 0 128 128h238.336zM170.666667 554.666667a42.666667 42.666667 0 0 1-42.666667-42.666667v-469.333333a42.666667 42.666667 0 0 1 42.666667-42.666667h682.666666a42.666667 42.666667 0 0 1 42.666667 42.666667V512a42.666667 42.666667 0 0 1-42.666667 42.666667H170.666667z" horiz-adv-x="1024" />
<glyph glyph-name="wifi-off" unicode="&#59655;" d="M669.172142 166.544518a42.497957 42.497957 0 0 0-33.035022 7.033262 213.129173 213.129173 0 0 1-246.888835 0 42.625835 42.625835 0 1 0-49.360716 69.480111 298.167714 298.167714 0 0 0 198.721641 54.006932l-118.542446 118.585072a423.700797 423.700797 0 0 1-178.602247-88.278103 42.625835 42.625835 0 1 0-54.688946 65.38803A508.952466 508.952466 0 0 0 350.92766 484.703748L251.950472 583.766187a635.551195 635.551195 0 0 1-162.233927-104.305417A42.625835 42.625835 0 1 0 33.27994 543.31427 720.802864 720.802864 0 0 0 187.926468 647.790191L13.458927 822.300358A42.625835 42.625835 0 1 0 73.731857 882.530663l217.604886-217.562261 1.321401-1.364026 168.158918-168.158918c2.685428-2.131292 5.1151-4.518338 7.246392-7.203766l543.479392-543.479392a42.625835 42.625835 0 0 0-60.315556-60.27293l-282.055148 282.012522zM512.479573-0.122496a42.625835 42.625835 0 1 0 0 85.251669 42.625835 42.625835 0 0 0 0-85.251669z m182.481199 385.380171a42.625835 42.625835 0 0 0 37.425482 76.641251c38.107496-18.62749 73.742694-41.901195 106.053077-69.352233a42.625835 42.625835 0 1 0-55.15783-64.961772 423.700797 423.700797 0 0 1-88.320729 57.672754z m-234.015833 252.003935a42.625835 42.625835 0 0 0-6.862759 84.995914A724.639189 724.639189 0 0 0 991.679207 543.356896a42.625835 42.625835 0 0 0-56.436605-63.938752A639.38752 639.38752 0 0 1 460.902313 637.26161z" horiz-adv-x="1024" />
<glyph glyph-name="minimize" unicode="&#59533;" d="M298.666667 768v-128a42.666667 42.666667 0 0 0-42.666667-42.666667H128a42.666667 42.666667 0 1 1 0-85.333333h128a128 128 0 0 1 128 128V768a42.666667 42.666667 0 1 1-85.333333 0z m597.333333-170.666667h-128a42.666667 42.666667 0 0 0-42.666667 42.666667V768a42.666667 42.666667 0 0 1-85.333333 0v-128a128 128 0 0 1 128-128h128a42.666667 42.666667 0 0 1 0 85.333333z m-170.666667-597.333333v128a42.666667 42.666667 0 0 0 42.666667 42.666667h128a42.666667 42.666667 0 0 1 0 85.333333h-128a128 128 0 0 1-128-128v-128a42.666667 42.666667 0 0 1 85.333333 0zM128 170.666667h128a42.666667 42.666667 0 0 0 42.666667-42.666667v-128a42.666667 42.666667 0 0 1 85.333333 0v128a128 128 0 0 1-128 128H128a42.666667 42.666667 0 0 1 0-85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="maximize" unicode="&#59656;" d="M341.333333 810.666667H213.333333a128 128 0 0 1-128-128v-128a42.666667 42.666667 0 1 1 85.333334 0V682.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h128a42.666667 42.666667 0 1 1 0 85.333334z m597.333334-256V682.666667a128 128 0 0 1-128 128h-128a42.666667 42.666667 0 0 1 0-85.333334h128a42.666667 42.666667 0 0 0 42.666666-42.666666v-128a42.666667 42.666667 0 0 1 85.333334 0z m-256-597.333334h128a128 128 0 0 1 128 128v128a42.666667 42.666667 0 0 1-85.333334 0v-128a42.666667 42.666667 0 0 0-42.666666-42.666666h-128a42.666667 42.666667 0 0 1 0-85.333334zM85.333333 213.333333v-128a128 128 0 0 1 128-128h128a42.666667 42.666667 0 0 1 0 85.333334H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666666v128a42.666667 42.666667 0 0 1-85.333334 0z" horiz-adv-x="1024" />
<glyph glyph-name="gitlab" unicode="&#59657;" d="M537.088-82.730667a42.666667 42.666667 0 0 0-50.176 0L32.341333 247.637333a78.421333 78.421333 0 0 0-28.16 87.594667l52.053334 161.365333 104.96 322.645334c3.413333 8.832 8.832 16.725333 15.701333 22.912a61.269333 61.269333 0 0 0 83.157333-0.810667 59.733333 59.733333 0 0 0 15.616-25.173333L370.176 526.08h283.648l95.274667 293.12c3.413333 8.874667 8.874667 16.768 15.744 22.954667a61.269333 61.269333 0 0 0 83.157333-0.810667 59.733333 59.733333 0 0 0 15.616-25.173333l103.936-319.957334 54.741333-162.133333a78.506667 78.506667 0 0 0-31.573333-87.125333l-453.632-329.685334zM86.869333 313.514667L512 4.522667l426.794667 310.186666-52.224 154.666667-80.725334 248.490667L725.333333 470.229333a42.666667 42.666667 0 0 0-40.576-29.482666h-345.6A42.666667 42.666667 0 0 0 298.666667 470.186667L217.898667 717.952 137.472 470.314667l-50.602667-156.8z" horiz-adv-x="1025" />
<glyph glyph-name="sliders" unicode="&#59658;" d="M810.666667 170.666667v-170.666667a42.666667 42.666667 0 0 1 85.333333 0v170.666667h85.333333a42.666667 42.666667 0 0 1 0 85.333333h-256a42.666667 42.666667 0 0 1 0-85.333333h85.333334zM469.333333 597.333333V768a42.666667 42.666667 0 0 0 85.333334 0v-170.666667h85.333333a42.666667 42.666667 0 0 0 0-85.333333H384a42.666667 42.666667 0 1 0 0 85.333333h85.333333z m-341.333333-341.333333v-256a42.666667 42.666667 0 0 1 85.333333 0v256h85.333334a42.666667 42.666667 0 0 1 0 85.333333H42.666667a42.666667 42.666667 0 0 1 0-85.333333h85.333333z m85.333333 213.333333a42.666667 42.666667 0 0 0-85.333333 0V768a42.666667 42.666667 0 1 0 85.333333 0v-298.666667z m341.333334-469.333333a42.666667 42.666667 0 0 0-85.333334 0v384a42.666667 42.666667 0 0 0 85.333334 0v-384z m341.333333 384a42.666667 42.666667 0 0 0-85.333333 0V768a42.666667 42.666667 0 0 0 85.333333 0v-384z" horiz-adv-x="1024" />
<glyph glyph-name="star-on" unicode="&#59659;" d="M473.728 829.568a42.666667 42.666667 0 0 0 76.544 0l121.898667-246.741333 272.64-39.808a42.624 42.624 0 0 0 23.637333-72.704l-197.248-191.914667 46.506667-271.146667a42.666667 42.666667 0 0 0-61.866667-44.928L512 90.410667l-243.84-128.085334a42.666667 42.666667 0 0 0-61.866667 44.928l46.506667 271.146667-197.248 191.914667a42.624 42.624 0 0 0 23.594667 72.704l272.64 39.808 121.941333 246.741333z" horiz-adv-x="1024" />
<glyph glyph-name="heart-on" unicode="&#59660;" d="M527.061333 729.472A277.333333 277.333333 0 0 0 1000.618667 533.333333a277.333333 277.333333 0 0 0-81.28-196.138666l-377.173334-377.173334a42.666667 42.666667 0 0 0-60.330666 0l-377.173334 377.173334a277.376 277.376 0 0 0 392.277334 392.277333l15.061333-15.061333 15.061333 15.061333z" horiz-adv-x="1024" />
<glyph glyph-name="archive" unicode="&#59661;" d="M853.333333 512H170.666667v-469.333333h682.666666V512z m85.333334 0v-512a42.666667 42.666667 0 0 0-42.666667-42.666667H128a42.666667 42.666667 0 0 0-42.666667 42.666667V512H42.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V768a42.666667 42.666667 0 0 0 42.666667 42.666667h938.666666a42.666667 42.666667 0 0 0 42.666667-42.666667v-213.333333a42.666667 42.666667 0 0 0-42.666667-42.666667h-42.666666zM85.333333 725.333333v-128h853.333334V725.333333H85.333333z m341.333334-384a42.666667 42.666667 0 0 0 0 85.333334h170.666666a42.666667 42.666667 0 0 0 0-85.333334h-170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-down-circle" unicode="&#59662;" d="M469.333333 316.330667V554.666667a42.666667 42.666667 0 0 0 85.333334 0v-238.336l97.834666 97.834666a42.666667 42.666667 0 0 0 60.330667-60.330666l-170.666667-170.666667a42.666667 42.666667 0 0 0-60.330666 0l-170.666667 170.666667a42.666667 42.666667 0 0 0 60.330667 60.330666L469.333333 316.330667zM512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-up-circle" unicode="&#59663;" d="M554.666667 451.669333V213.333333a42.666667 42.666667 0 0 0-85.333334 0v238.336l-97.834666-97.834666a42.666667 42.666667 0 1 0-60.330667 60.330666l170.666667 170.666667a42.666667 42.666667 0 0 0 60.330666 0l170.666667-170.666667a42.666667 42.666667 0 0 0-60.330667-60.330666L554.666667 451.669333zM512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-left-circle" unicode="&#59664;" d="M444.330667 426.666667H682.666667a42.666667 42.666667 0 0 0 0-85.333334h-238.336l97.834666-97.834666a42.666667 42.666667 0 0 0-60.330666-60.330667l-170.666667 170.666667a42.666667 42.666667 0 0 0 0 60.330666l170.666667 170.666667a42.666667 42.666667 0 0 0 60.330666-60.330667L444.330667 426.666667zM512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-right-circle" unicode="&#59665;" d="M579.669333 341.333333H341.333333a42.666667 42.666667 0 0 0 0 85.333334h238.336l-97.834666 97.834666a42.666667 42.666667 0 1 0 60.330666 60.330667l170.666667-170.666667a42.666667 42.666667 0 0 0 0-60.330666l-170.666667-170.666667a42.666667 42.666667 0 0 0-60.330666 60.330667L579.669333 341.333333zM512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 85.333333a384 384 0 1 1 0 768 384 384 0 0 1 0-768z" horiz-adv-x="1024" />
<glyph glyph-name="bar-chart-line-" unicode="&#59666;" d="M810.666667 42.666667a42.666667 42.666667 0 0 0-85.333334 0V469.333333a42.666667 42.666667 0 0 0 85.333334 0v-426.666666z m-256 0a42.666667 42.666667 0 0 0-85.333334 0V725.333333a42.666667 42.666667 0 0 0 85.333334 0v-682.666666z m-256 0a42.666667 42.666667 0 0 0-85.333334 0v256a42.666667 42.666667 0 0 0 85.333334 0v-256z" horiz-adv-x="1024" />
<glyph glyph-name="bar-chart-line" unicode="&#59667;" d="M554.666667 42.666667a42.666667 42.666667 0 0 0-85.333334 0V469.333333a42.666667 42.666667 0 0 0 85.333334 0v-426.666666z m256 0a42.666667 42.666667 0 0 0-85.333334 0V725.333333a42.666667 42.666667 0 0 0 85.333334 0v-682.666666zM298.666667 42.666667a42.666667 42.666667 0 0 0-85.333334 0v170.666666a42.666667 42.666667 0 0 0 85.333334 0v-170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="book-open" unicode="&#59668;" d="M128 725.333333v-554.666666h256c31.104 0 60.245333-8.32 85.333333-22.826667V597.333333a128 128 0 0 1-128 128H128z m384-768c-21.333333 0-42.666667 14.208-42.666667 42.666667a85.333333 85.333333 0 0 1-85.333333 85.333333H85.333333a42.666667 42.666667 0 0 0-42.666666 42.666667V768a42.666667 42.666667 0 0 0 42.666666 42.666667h256c69.802667 0 131.754667-33.493333 170.666667-85.333334a212.992 212.992 0 0 0 170.666667 85.333334h256a42.666667 42.666667 0 0 0 42.666666-42.666667v-640a42.666667 42.666667 0 0 0-42.666666-42.666667h-298.666667a85.333333 85.333333 0 0 1-85.333333-85.333333c0-28.458667-21.333333-42.666667-42.666667-42.666667s-42.666667 14.208-42.666667 42.666667c0 63.146667 34.304 118.314667 85.333334 147.84V0c0-28.458667-21.333333-42.666667-42.666667-42.666667z m384 768h-213.333333a128 128 0 0 1-128-128v-449.493333A169.898667 169.898667 0 0 0 640 170.666667h256V725.333333z" horiz-adv-x="1024" />
<glyph glyph-name="code" unicode="&#59669;" d="M652.501333 609.834667a42.666667 42.666667 0 1 0 60.330667 60.330666l256-256a42.666667 42.666667 0 0 0 0-60.330666l-256-256a42.666667 42.666667 0 0 0-60.330667 60.330666L878.336 384l-225.834667 225.834667zM145.664 384l225.834667-225.834667a42.666667 42.666667 0 0 0-60.330667-60.330666l-256 256a42.666667 42.666667 0 0 0 0 60.330666l256 256a42.666667 42.666667 0 0 0 60.330667-60.330666L145.664 384z" horiz-adv-x="1024" />
<glyph glyph-name="database" unicode="&#59670;" d="M170.666667 574.805333V384c0-34.688 151.722667-85.333333 341.333333-85.333333s341.333333 50.645333 341.333333 85.333333V574.805333C775.466667 534.357333 651.52 512 512 512c-139.52 0-263.466667 22.357333-341.333333 62.805333zM85.333333 682.666667c0 106.965333 191.146667 170.666667 426.666667 170.666666s426.666667-63.701333 426.666667-170.666666v-597.333334c0-107.178667-190.208-170.666667-426.666667-170.666666S85.333333-21.845333 85.333333 85.333333V682.666667z m768-406.741334C775.637333 235.52 651.946667 213.333333 512 213.333333c-139.946667 0-263.637333 22.229333-341.333333 62.592V85.333333c0-34.688 151.722667-85.333333 341.333333-85.333333s341.333333 50.645333 341.333333 85.333333v190.592zM512 597.333333c188.586667 0 341.333333 50.901333 341.333333 85.333334 0 34.432-152.746667 85.333333-341.333333 85.333333S170.666667 717.098667 170.666667 682.666667c0-34.432 152.746667-85.333333 341.333333-85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="dollar-sign" unicode="&#59671;" d="M554.666667 725.333333h170.666666a42.666667 42.666667 0 0 0 0-85.333333h-170.666666v-213.333333h64a192 192 0 0 0 0-384H554.666667v-128a42.666667 42.666667 0 0 0-85.333334 0v128H256a42.666667 42.666667 0 0 0 0 85.333333h213.333333v213.333333H405.333333a192 192 0 1 0 0 384H469.333333V853.333333a42.666667 42.666667 0 0 0 85.333334 0v-128z m0-384v-213.333333h64a106.666667 106.666667 0 0 1 0 213.333333H554.666667z m-85.333334 85.333334V640H405.333333a106.666667 106.666667 0 1 1 0-213.333333H469.333333z" horiz-adv-x="1024" />
<glyph glyph-name="folder-plus" unicode="&#59672;" d="M554.666667 341.333333h85.333333a42.666667 42.666667 0 0 0 0-85.333333h-85.333333v-85.333333a42.666667 42.666667 0 0 0-85.333334 0v85.333333H384a42.666667 42.666667 0 0 0 0 85.333333h85.333333v85.333334a42.666667 42.666667 0 0 0 85.333334 0v-85.333334z m-62.506667 341.333334H853.333333a128 128 0 0 0 128-128v-469.333334a128 128 0 0 0-128-128H170.666667a128 128 0 0 0-128 128V682.666667a128 128 0 0 0 128 128h213.333333a42.666667 42.666667 0 0 0 35.498667-18.986667L492.16 682.666667z m-130.986667 42.666666H170.666667a42.666667 42.666667 0 0 1-42.666667-42.666666v-597.333334a42.666667 42.666667 0 0 1 42.666667-42.666666h682.666666a42.666667 42.666667 0 0 1 42.666667 42.666666V554.666667a42.666667 42.666667 0 0 1-42.666667 42.666666h-384a42.666667 42.666667 0 0 0-35.498666 18.986667L361.173333 725.333333z" horiz-adv-x="1024" />
<glyph glyph-name="gift" unicode="&#59673;" d="M838.954667 640H938.666667a42.666667 42.666667 0 0 0 42.666666-42.666667v-213.333333a42.666667 42.666667 0 0 0-42.666666-42.666667h-42.666667v-384a42.666667 42.666667 0 0 0-42.666667-42.666666H170.666667a42.666667 42.666667 0 0 0-42.666667 42.666666v384H85.333333a42.666667 42.666667 0 0 0-42.666666 42.666667V597.333333a42.666667 42.666667 0 0 0 42.666666 42.666667h99.712A149.333333 149.333333 0 0 0 320 853.333333c83.626667 0 145.962667-49.834667 189.397333-128.768l2.602667-4.821333 2.602667 4.821333C558.08 803.498667 620.373333 853.333333 704 853.333333a149.333333 149.333333 0 0 0 134.954667-213.333333zM554.666667 554.666667v-128h341.333333V554.666667h-341.333333z m-85.333334 0H128v-128h341.333333V554.666667z m85.333334-554.666667h256v341.333333h-256v-341.333333z m-85.333334 0v341.333333H213.333333v-341.333333h256z m-34.730666 683.434667C404.693333 737.834667 367.018667 768 320 768a64 64 0 0 1 0-128h134.570667a347.904 347.904 0 0 1-19.968 43.434667zM704 640a64 64 0 0 1 0 128c-47.018667 0-84.693333-30.165333-114.602667-84.565333A347.861333 347.861333 0 0 1 569.429333 640H704z" horiz-adv-x="1024" />
<glyph glyph-name="folder-minus" unicode="&#59674;" d="M492.16 682.666667H853.333333a128 128 0 0 0 128-128v-469.333334a128 128 0 0 0-128-128H170.666667a128 128 0 0 0-128 128V682.666667a128 128 0 0 0 128 128h213.333333a42.666667 42.666667 0 0 0 35.498667-18.986667L492.16 682.666667z m-130.986667 42.666666H170.666667a42.666667 42.666667 0 0 1-42.666667-42.666666v-597.333334a42.666667 42.666667 0 0 1 42.666667-42.666666h682.666666a42.666667 42.666667 0 0 1 42.666667 42.666666V554.666667a42.666667 42.666667 0 0 1-42.666667 42.666666h-384a42.666667 42.666667 0 0 0-35.498666 18.986667L361.173333 725.333333zM384 256a42.666667 42.666667 0 0 0 0 85.333333h256a42.666667 42.666667 0 0 0 0-85.333333H384z" horiz-adv-x="1024" />
<glyph glyph-name="git-commit" unicode="&#59675;" d="M721.109333 341.589333a213.418667 213.418667 0 0 0-418.218666-0.042666A43.178667 43.178667 0 0 0 298.666667 341.333333H44.8a42.666667 42.666667 0 0 0 0 85.333334H298.666667c1.408 0 2.816-0.085333 4.224-0.213334a213.418667 213.418667 0 0 0 418.218666 0c1.536 0.128 3.072 0.213333 4.650667 0.213334h253.866667a42.666667 42.666667 0 0 0 0-85.333334h-253.866667c-1.578667 0-3.114667 0.085333-4.650667 0.256zM512 256a128 128 0 1 1 0 256 128 128 0 0 1 0-256z" horiz-adv-x="1024" />
<glyph glyph-name="git-branch" unicode="&#59676;" d="M421.717333 86.997333A170.752 170.752 0 0 0 85.333333 128a170.752 170.752 0 0 0 128 165.290667V768a42.666667 42.666667 0 1 0 85.333334 0v-474.709333a170.965333 170.965333 0 0 0 122.112-120.661334 341.461333 341.461333 0 0 1 302.592 302.592A170.752 170.752 0 0 0 768 810.666667a170.666667 170.666667 0 0 0 41.002667-336.384 426.794667 426.794667 0 0 0-387.285334-387.285334zM768 554.666667a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666zM256 42.666667a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="git-pull-request" unicode="&#59677;" d="M213.333333 474.709333A170.752 170.752 0 0 0 256 810.666667a170.666667 170.666667 0 0 0 42.666667-335.957334V0a42.666667 42.666667 0 0 0-85.333334 0V474.709333z m512-181.418666V554.666667a42.666667 42.666667 0 0 1-42.666666 42.666666h-128a42.666667 42.666667 0 0 0 0 85.333334h128a128 128 0 0 0 128-128v-261.376A170.752 170.752 0 0 0 768-42.666667a170.666667 170.666667 0 0 0-42.666667 335.957334zM768 42.666667a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666zM256 554.666667a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="git-merge" unicode="&#59678;" d="M602.282667 86.997333A426.154667 426.154667 0 0 0 298.666667 255.957333V0a42.666667 42.666667 0 0 0-85.333334 0V474.709333A170.752 170.752 0 0 0 256 810.666667a170.666667 170.666667 0 0 0 44.629333-335.445334 341.461333 341.461333 0 0 1 302.592-302.592A170.752 170.752 0 0 0 938.666667 128a170.666667 170.666667 0 0 0-336.384-41.002667zM768 42.666667a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666zM256 554.666667a85.333333 85.333333 0 1 1 0 170.666666 85.333333 85.333333 0 0 1 0-170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="linkedin" unicode="&#59679;" d="M682.666667 554.666667a298.666667 298.666667 0 0 0 298.666666-298.666667v-298.666667a42.666667 42.666667 0 0 0-42.666666-42.666666h-170.666667a42.666667 42.666667 0 0 0-42.666667 42.666666v298.666667a42.666667 42.666667 0 0 1-85.333333 0v-298.666667a42.666667 42.666667 0 0 0-42.666667-42.666666h-170.666666a42.666667 42.666667 0 0 0-42.666667 42.666666v298.666667a298.666667 298.666667 0 0 0 298.666667 298.666667z m213.333333-554.666667v256a213.333333 213.333333 0 0 1-426.666667 0v-256h85.333334v256a128 128 0 0 0 256 0v-256h85.333333zM85.333333 512h170.666667a42.666667 42.666667 0 0 0 42.666667-42.666667v-512a42.666667 42.666667 0 0 0-42.666667-42.666666H85.333333a42.666667 42.666667 0 0 0-42.666666 42.666666V469.333333a42.666667 42.666667 0 0 0 42.666666 42.666667z m42.666667-85.333333v-426.666667h85.333333V426.666667H128z m42.666667 128a128 128 0 1 0 0 256 128 128 0 0 0 0-256z m0 85.333333a42.666667 42.666667 0 1 1 0 85.333333 42.666667 42.666667 0 0 1 0-85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="hard-drive" unicode="&#59680;" d="M976.426667 403.882667A42.368 42.368 0 0 0 981.333333 384v-256a128 128 0 0 0-128-128H170.666667a128 128 0 0 0-128 128v256a42.666667 42.666667 0 0 0 4.906666 19.882667l146.773334 293.12A128 128 0 0 0 308.906667 768h406.186666c48.597333 0 92.970667-27.562667 114.517334-70.912l146.816-293.205333zM869.589333 426.666667l-116.352 232.32A42.666667 42.666667 0 0 1 715.093333 682.666667H308.906667a42.666667 42.666667 0 0 1-38.144-23.68L154.410667 426.666667h715.178666zM896 341.333333H128v-213.333333a42.666667 42.666667 0 0 1 42.666667-42.666667h682.666666a42.666667 42.666667 0 0 1 42.666667 42.666667v213.333333zM256 170.666667a42.666667 42.666667 0 1 0 0 85.333333 42.666667 42.666667 0 0 0 0-85.333333z m170.666667 0a42.666667 42.666667 0 1 0 0 85.333333 42.666667 42.666667 0 0 0 0-85.333333z" horiz-adv-x="1024" />
<glyph glyph-name="more-vertical-" unicode="&#59681;" d="M512 298.666667a85.333333 85.333333 0 1 0 0 170.666666 85.333333 85.333333 0 0 0 0-170.666666z m0 298.666666a85.333333 85.333333 0 1 0 0 170.666667 85.333333 85.333333 0 0 0 0-170.666667z m0-597.333333a85.333333 85.333333 0 1 0 0 170.666667 85.333333 85.333333 0 0 0 0-170.666667z" horiz-adv-x="1024" />
<glyph glyph-name="more-horizontal-" unicode="&#59682;" d="M512 298.666667a85.333333 85.333333 0 1 0 0 170.666666 85.333333 85.333333 0 0 0 0-170.666666z m298.666667 0a85.333333 85.333333 0 1 0 0 170.666666 85.333333 85.333333 0 0 0 0-170.666666zM213.333333 298.666667a85.333333 85.333333 0 1 0 0 170.666666 85.333333 85.333333 0 0 0 0-170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="rss" unicode="&#59683;" d="M170.666667 384a42.666667 42.666667 0 0 0 0 85.333333c235.648 0 426.666667-191.018667 426.666666-426.666666a42.666667 42.666667 0 0 0-85.333333 0 341.333333 341.333333 0 0 1-341.333333 341.333333z m0 298.666667a42.666667 42.666667 0 1 0 0 85.333333c400.597333 0 725.333333-324.736 725.333333-725.333333a42.666667 42.666667 0 0 0-85.333333 0c0 353.450667-286.549333 640-640 640z m42.666666-682.666667a85.333333 85.333333 0 1 0 0 170.666667 85.333333 85.333333 0 0 0 0-170.666667z" horiz-adv-x="1024" />
<glyph glyph-name="send" unicode="&#59684;" d="M923.690667 850.645333a42.666667 42.666667 0 0 0 54.954666-54.954666l-298.368-852.48c-12.8-36.437333-63.573333-38.528-79.274666-3.2l-164.010667 368.981333-368.981333 164.010667c-35.328 15.701333-33.28 66.517333 3.242666 79.274666l852.437334 298.368z m-147.413334-141.994666L201.002667 507.264l258.901333-115.029333 316.373333 316.416z m60.373334-60.373334l-316.416-316.373333 115.029333-258.901333 201.386667 575.274666z" horiz-adv-x="1024" />
<glyph glyph-name="shield-off" unicode="&#59685;" d="M781.789867 174.592l0.426666-0.426667 229.290667-229.333333a42.666667 42.666667 0 0 0-60.330667-60.330667l-198.528 198.528a908.373333 908.373333 0 0 0-220.714666-163.413333 42.666667 42.666667 0 0 0-38.997334-0.426667 738.56 738.56 0 0 0-56.874666 32.64 958.506667 958.506667 0 0 0-122.837334 90.709334C198.237867 143.232 128.008533 257.322667 128.008533 384V682.666667c0 7.125333 1.792 13.994667 4.992 20.010666L12.509867 823.168A42.666667 42.666667 0 1 0 72.840533 883.498667l158.506667-158.506667 1.322667-1.28 549.12-549.12zM213.341867 622.336V384c0-97.28 57.770667-191.189333 156.117333-277.205333a874.24 874.24 0 0 1 142.506667-100.906667 823.04 823.04 0 0 1 180.352 137.472L213.341867 622.336z m298.666666 142.762667L392.1152 720.341333a42.666667 42.666667 0 0 0-29.866667 79.957334l134.826667 50.346666a42.666667 42.666667 0 0 0 29.909333 0l341.333334-128A42.666667 42.666667 0 0 0 896.008533 682.666667v-298.965334a337.066667 337.066667 0 0 0-15.146666-97.706666 42.666667 42.666667 0 0 0-81.493334 25.301333A251.306667 251.306667 0 0 1 810.6752 384V653.098667l-298.666667 112z" horiz-adv-x="1024" />
<glyph glyph-name="shopping-bag" unicode="&#59686;" d="M929.877333 665.941333A42.794667 42.794667 0 0 0 938.666667 640v-597.333333a128 128 0 0 0-128-128H213.333333a128 128 0 0 0-128 128V640a42.666667 42.666667 0 0 0 8.789334 25.941333L221.866667 836.266667A42.666667 42.666667 0 0 0 256 853.333333h512a42.666667 42.666667 0 0 0 34.133333-17.066666l127.744-170.325334zM810.666667 682.666667l-64 85.333333h-469.333334L213.333333 682.666667h597.333334z m42.666666-85.333334H170.666667v-554.666666a42.666667 42.666667 0 0 1 42.666666-42.666667h597.333334a42.666667 42.666667 0 0 1 42.666666 42.666667V597.333333z m-213.333333-128a42.666667 42.666667 0 0 0 85.333333 0 213.333333 213.333333 0 0 0-426.666666 0 42.666667 42.666667 0 1 0 85.333333 0 128 128 0 0 1 256 0z" horiz-adv-x="1024" />
<glyph glyph-name="terminal" unicode="&#59687;" d="M140.501333 652.501333a42.666667 42.666667 0 0 0 60.330667 60.330667l256-256a42.666667 42.666667 0 0 0 0-60.330667l-256-256a42.666667 42.666667 0 1 0-60.330667 60.330667L366.336 426.666667 140.501333 652.501333zM512 42.666667a42.666667 42.666667 0 0 0 0 85.333333h341.333333a42.666667 42.666667 0 0 0 0-85.333333h-341.333333z" horiz-adv-x="1024" />
<glyph glyph-name="truck" unicode="&#59688;" d="M924.288 170.666667a149.333333 149.333333 0 1 0-269.909333 0H369.621333a149.333333 149.333333 0 1 0-269.909333 0H42.666667a42.666667 42.666667 0 0 0-42.666667 42.666666V768a42.666667 42.666667 0 0 0 42.666667 42.666667h640a42.666667 42.666667 0 0 0 42.666666-42.666667v-170.666667h128a42.666667 42.666667 0 0 0 30.165334-12.501333l128-128A42.666667 42.666667 0 0 0 1024 426.666667v-213.333334a42.666667 42.666667 0 0 0-42.666667-42.666666h-57.045333zM640 554.666667V725.333333H85.333333v-469.333333h554.666667V554.666667z m85.333333-42.666667v-256h213.333334v153.002667L835.669333 512H725.333333zM234.666667 42.666667a64 64 0 1 1 0 128 64 64 0 0 1 0-128z m554.666666 0a64 64 0 1 1 0 128 64 64 0 0 1 0-128z" horiz-adv-x="1024" />
<glyph glyph-name="zap-off" unicode="&#59689;" d="M283.613867 552.064L12.509867 823.168A42.666667 42.666667 0 1 0 72.840533 883.498667L371.208533 585.130667l0.682667-0.682667 340.650667-340.650667 0.682666-0.682666 298.282667-298.24a42.666667 42.666667 0 0 0-60.330667-60.373334l-265.642666 265.642667-183.424-220.16c-27.264-32.682667-80.384-9.642667-75.093334 32.64l36.693334 293.376H128.008533a42.666667 42.666667 0 0 0-32.768 69.973333L283.613867 552.106667z m60.586666-60.586667L219.101867 341.333333h275.2L344.2432 491.477333z m208.810667-208.810666l-23.296-186.24 95.232 114.304-71.936 71.936zM483.805867 658.773333A42.666667 42.666667 0 1 0 418.141867 713.386667l103.68 124.586666c27.264 32.725333 80.384 9.728 75.136-32.554666l-25.173334-202.666667a42.666667 42.666667 0 1 0-84.650666 10.496l7.253333 58.282667-10.666667-12.757334zM668.168533 426.666667a42.666667 42.666667 0 0 0 0 85.333333H896.008533a42.666667 42.666667 0 0 0 32.768-70.016l-103.68-124.16a42.666667 42.666667 0 0 0-65.536 54.698667L804.7872 426.666667H668.168533z" horiz-adv-x="1024" />
<glyph glyph-name="youtube" unicode="&#59690;" d="M1003.093333 632.448l0.64-2.773333A1278.72 1278.72 0 0 0 1024 394.837333a1279.573333 1279.573333 0 0 0-20.906667-234.538666 161.536 161.536 0 0 0-113.152-116.181334c-32.426667-8.661333-95.658667-13.994667-184.618666-17.365333a5295.061333 5295.061333 0 0 0-253.781334-3.242667c-45.269333 0.554667-90.538667 1.621333-132.906666 3.242667-88.917333 3.413333-152.192 8.704-184.832 17.408-54.442667 14.933333-97.109333 57.173333-113.493334 115.498667A1278.464 1278.464 0 0 0 0 394.453333C-0.426667 472.746667 6.4 550.912 20.906667 630.741333a161.536 161.536 0 0 0 113.109333 116.181334c32.426667 8.661333 95.701333 13.994667 184.618667 17.365333a5295.061333 5295.061333 0 0 0 253.738666 3.285333c45.226667-0.512 90.496-1.450667 132.821334-2.944 88.661333-3.072 151.765333-7.936 185.344-16.170666a161.28 161.28 0 0 0 112.554666-116.053334z m-83.072-19.498667a75.392 75.392 0 0 1-51.2 53.034667c-24.064 5.845333-84.48 10.496-166.570666 13.354667a5711.914667 5711.914667 0 0 1-249.6 2.858666c-44.586667-0.554667-89.173333-1.578667-130.688-3.157333-81.792-3.114667-142.08-8.192-165.248-14.378667-26.197333-7.424-46.421333-28.245333-52.394667-51.84A1196.202667 1196.202667 0 0 1 85.333333 394.368c-0.469333-73.6 5.845333-147.072 17.962667-215.466667 7.253333-25.514667 27.392-45.397333 52.778667-52.352 23.765333-6.357333 84.053333-11.434667 165.845333-14.506666a5212.416 5212.416 0 0 1 249.429333-3.2c44.586667 0.554667 89.173333 1.578667 130.688 3.157333 81.792 3.114667 142.08 8.192 165.248 14.378667 26.197333 7.424 46.421333 28.245333 52.394667 51.84 12.885333 71.381333 19.2 143.786667 18.986667 216.746666a1194.666667 1194.666667 0 0 1-18.688 218.026667z m-482.901333-394.88a42.666667 42.666667 0 0 0-63.744 37.077334V534.186667a42.666667 42.666667 0 0 0 63.744 37.12l245.333333-139.52a42.666667 42.666667 0 0 0 0-74.24l-245.333333-139.52z m137.941333 176.597334L458.666667 460.8v-132.266667l116.352 66.133334z" horiz-adv-x="1024" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,15 @@
export default {
// Endpoints
loginEndpoint: '/jwt/login',
registerEndpoint: '/jwt/register',
refreshEndpoint: '/jwt/refresh-token',
logoutEndpoint: '/jwt/logout',
// This will be prefixed in authorization header with token
// e.g. Authorization: Bearer <token>
tokenType: 'Bearer',
// Value of this property will be used as key to store JWT token in storage
storageTokenKeyName: 'accessToken',
storageRefreshTokenKeyName: 'refreshToken',
}

View File

@ -0,0 +1,111 @@
import jwtDefaultConfig from './jwtDefaultConfig'
export default class JwtService {
// Will be used by this service for making API calls
axiosIns = null
// jwtConfig <= Will be used by this service
jwtConfig = { ...jwtDefaultConfig }
// For Refreshing Token
isAlreadyFetchingAccessToken = false
// For Refreshing Token
subscribers = []
constructor(axiosIns, jwtOverrideConfig) {
this.axiosIns = axiosIns
this.jwtConfig = { ...this.jwtConfig, ...jwtOverrideConfig }
// Request Interceptor
this.axiosIns.interceptors.request.use(
config => {
// Get token from localStorage
const accessToken = this.getToken()
// If token is present add it to request's Authorization Header
if (accessToken) {
// eslint-disable-next-line no-param-reassign
config.headers.Authorization = `${this.jwtConfig.tokenType} ${accessToken}`
}
return config
},
error => Promise.reject(error),
)
// Add request/response interceptor
this.axiosIns.interceptors.response.use(
response => response,
error => {
// const { config, response: { status } } = error
const { config, response } = error
const originalRequest = config
// if (status === 401) {
if (response && response.status === 401) {
if (!this.isAlreadyFetchingAccessToken) {
this.isAlreadyFetchingAccessToken = true
this.refreshToken().then(r => {
this.isAlreadyFetchingAccessToken = false
// Update accessToken in localStorage
this.setToken(r.data.accessToken)
this.setRefreshToken(r.data.refreshToken)
this.onAccessTokenFetched(r.data.accessToken)
})
}
const retryOriginalRequest = new Promise(resolve => {
this.addSubscriber(accessToken => {
// Make sure to assign accessToken according to your response.
// Check: https://pixinvent.ticksy.com/ticket/2413870
// Change Authorization header
originalRequest.headers.Authorization = `${this.jwtConfig.tokenType} ${accessToken}`
resolve(this.axiosIns(originalRequest))
})
})
return retryOriginalRequest
}
return Promise.reject(error)
},
)
}
onAccessTokenFetched(accessToken) {
this.subscribers = this.subscribers.filter(callback => callback(accessToken))
}
addSubscriber(callback) {
this.subscribers.push(callback)
}
getToken() {
return localStorage.getItem(this.jwtConfig.storageTokenKeyName)
}
getRefreshToken() {
return localStorage.getItem(this.jwtConfig.storageRefreshTokenKeyName)
}
setToken(value) {
localStorage.setItem(this.jwtConfig.storageTokenKeyName, value)
}
setRefreshToken(value) {
localStorage.setItem(this.jwtConfig.storageRefreshTokenKeyName, value)
}
login(...args) {
return this.axiosIns.post(this.jwtConfig.loginEndpoint, ...args)
}
register(...args) {
return this.axiosIns.post(this.jwtConfig.registerEndpoint, ...args)
}
refreshToken() {
return this.axiosIns.post(this.jwtConfig.refreshEndpoint, {
refreshToken: this.getRefreshToken(),
})
}
}

View File

@ -0,0 +1,9 @@
import JwtService from './jwtService'
export default function useJwt(axiosIns, jwtOverrideConfig) {
const jwt = new JwtService(axiosIns, jwtOverrideConfig)
return {
jwt,
}
}

View File

@ -0,0 +1,23 @@
export const useInputImageRenderer = (inputEl, callback) => {
const inputImageRenderer = () => {
const file = inputEl.value.files[0]
const reader = new FileReader()
reader.addEventListener(
'load',
() => {
callback(reader.result)
},
false,
)
if (file) {
reader.readAsDataURL(file)
}
}
return {
inputImageRenderer,
}
}
export const _ = null

View File

@ -0,0 +1,66 @@
import { ref, nextTick } from '@vue/composition-api'
// ===========================================================
// ! This is coupled with "veeValidate" plugin
// ===========================================================
export default function formValidation(resetFormData, clearFormData = () => {}) {
// ------------------------------------------------
// refFormObserver
// ! This is for veeValidate Observer
// * Used for veeValidate form observer
// ------------------------------------------------
const refFormObserver = ref(null)
// ------------------------------------------------
// resetObserver
// ! This function is coupled with veeValidate
// * It resets form observer
// ------------------------------------------------
const resetObserver = () => {
refFormObserver.value.reset()
}
// ------------------------------------------------
// getValidationState
// ! This function is coupled with veeValidate
// * It returns true/false based on validation
// ------------------------------------------------
// eslint-disable-next-line object-curly-newline
const getValidationState = ({ dirty, validated, required: fieldRequired, changed, valid = null }) => {
const result = dirty || validated ? valid : null
return !fieldRequired && !changed ? null : result
}
// ------------------------------------------------
// resetForm
// ! This function is coupled with veeValidate
// * This uses resetFormData arg to reset form data
// ------------------------------------------------
const resetForm = () => {
resetFormData()
nextTick(() => {
resetObserver()
})
}
// ------------------------------------------------
// clearForm
// ! This function is coupled with veeValidate
// * This uses clearFormData arg to reset form data
// ------------------------------------------------
const clearForm = () => {
clearFormData()
nextTick(() => {
resetObserver()
})
}
return {
refFormObserver,
resetObserver,
getValidationState,
resetForm,
clearForm,
}
}

View File

@ -0,0 +1,20 @@
import { ref, onUnmounted } from '@vue/composition-api'
export const useScrollListener = () => {
const scrolledTo = ref(null)
const scrollHandler = () => {
scrolledTo.value = window.scrollY
}
window.addEventListener('scroll', scrollHandler)
onUnmounted(() => {
window.removeEventListener('scroll', scrollHandler)
})
return {
scrolledTo,
}
}
export const _ = null

View File

@ -0,0 +1,18 @@
import store from '@/store'
import { ref, watch, computed } from '@vue/composition-api'
export const useResponsiveAppLeftSidebarVisibility = () => {
const mqShallShowLeftSidebar = ref(false)
// Close Active Sidebars and other stuff when going in large device
const currentBreakPoint = computed(() => store.getters['app/currentBreakPoint'])
watch(currentBreakPoint, (val, oldVal) => {
// Reset chats & contacts left sidebar
if (oldVal === 'md' && val === 'lg') mqShallShowLeftSidebar.value = false
})
return {
mqShallShowLeftSidebar,
}
}
export const _ = {}

View File

@ -0,0 +1,21 @@
import { onBeforeUnmount } from '@vue/composition-api'
import userAppConfig from '@core/app-config/useAppConfig'
/**
* Collapse vertical menu when route is visited and restore the state on route leave
*/
export const useCollapseMenuOnVisit = () => {
const { isVerticalMenuCollapsed } = userAppConfig()
const wasVerticalMenuCollapsed = isVerticalMenuCollapsed.value
if (!wasVerticalMenuCollapsed.value) {
isVerticalMenuCollapsed.value = true
}
// Restore the original collapse value
onBeforeUnmount(() => {
isVerticalMenuCollapsed.value = wasVerticalMenuCollapsed
})
}
export const _ = null

View File

@ -0,0 +1,128 @@
<template>
<div class="app-auto-suggest">
<input
v-model="searchQuery"
type="text"
v-bind="inputProps"
>
<ul class="auto-suggest-suggestions-list">
<li
v-for="(suggestion_list, grp_name, grp_index) in filteredData"
:key="grp_index"
class="suggestions-groups-list"
>
<!-- Group Header -->
<p class="suggestion-group-title">
<slot
name="group"
:group_name="grp_name"
>
<span>
{{ grp_name }}
</span>
</slot>
</p>
<!-- Suggestion List of each group -->
<ul>
<li
v-for="(suggestion, index) in suggestion_list"
:key="index"
class="suggestion-group-suggestion cursor-pointer"
@click="suggestionSelected(suggestion)"
>
<slot
:name="grp_name"
:suggestion="suggestion"
>
<span>{{ suggestion[data[grp_name].key] }}</span>
</slot>
</li>
<li
v-if="!suggestion_list.length && searchQuery"
class="suggestion-group-suggestion no-results"
>
<slot
name="noResult"
:group_name="grp_name"
>
<p>No Results Found.</p>
</slot>
</li>
</ul>
</li>
</ul>
</div>
</template>
<script>
import useAutoSuggest from './useAutoSuggest'
export default {
props: {
inputProps: {
type: Object,
default: () => {},
},
data: {
type: Object,
required: true,
},
searchLimit: {
type: Number,
default: 4,
},
},
setup(props, { emit }) {
// eslint-disable-next-line no-console
console.warn('This component is still in Development. Please do not use it.')
const { searchQuery, filteredData, resetsearchQuery } = useAutoSuggest(props)
const suggestionSelected = suggestion => {
resetsearchQuery()
emit('suggestion-selected', suggestion)
}
return {
searchQuery, filteredData, suggestionSelected,
}
},
}
</script>
<style scoped>
ul
{
list-style: none;
padding: 0;
margin: 0;
}
p {
margin: 0;
}
.app-auto-suggest {
position: relative;
}
.auto-suggest-suggestions-list {
box-shadow: 0 4px 24px 0 rgba(34, 41, 47, 0.1);
border-radius: 6px;
position: absolute;
top: calc(100% + 1rem);
background-color: white;
width: 100%;
}
.suggestion-group-title {
font-weight: 500;
padding: .75rem 1rem .25rem;
}
.suggestion-group-suggestion {
padding: .75rem 1rem
}
</style>

View File

@ -0,0 +1,55 @@
import { ref, watch } from '@vue/composition-api'
export default function useAutoSuggest(props) {
const filteredData = ref({})
/**
* Filter group against provided query
* Grp Structure:
* {
* key: 'title',
* data: [
* title: 'Admin', img: 'someImage.png',
* title: 'Template', img: 'otherImage.png',
* ]
* }
* @param {Object} grp Group object to perform filter on
* @param {String} query Query string to filter
*/
const filterGrp = (grp, query) => {
const exactEle = grp.data.filter(item => item[grp.key].toLowerCase().startsWith(query.toLowerCase()))
const containEle = grp.data.filter(
// prettier-ignore
item => !item[grp.key].toLowerCase().startsWith(query.toLowerCase()) && item[grp.key].toLowerCase().indexOf(query.toLowerCase()) > -1,
)
return exactEle.concat(containEle).slice(0, props.searchLimit)
}
const searchQuery = ref('')
const resetsearchQuery = () => {
searchQuery.value = ''
}
const handleSearchQueryUpdate = val => {
if (val === '') {
filteredData.value = {}
} else {
const queriedData = {}
const dataGrps = Object.keys(props.data)
dataGrps.forEach((grp, i) => {
queriedData[dataGrps[i]] = filterGrp(props.data[grp], val)
})
filteredData.value = queriedData
}
}
watch(searchQuery, val => handleSearchQueryUpdate(val))
return {
searchQuery,
resetsearchQuery,
filteredData,
}
}

View File

@ -0,0 +1,54 @@
<template>
<div
role="tablist"
class="collapse-icon"
:class="collapseClasses"
>
<slot />
</div>
</template>
<script>
import { v4 as uuidv4 } from 'uuid'
export default {
props: {
accordion: {
type: Boolean,
default: false,
},
hover: {
type: Boolean,
default: false,
},
type: {
type: String,
default: 'default',
},
},
data() {
return {
collapseID: '',
}
},
computed: {
collapseClasses() {
const classes = []
// Collapse Type
const collapseVariants = {
default: 'collapse-default',
border: 'collapse-border',
shadow: 'collapse-shadow',
margin: 'collapse-margin',
}
classes.push(collapseVariants[this.type])
return classes
},
},
created() {
this.collapseID = uuidv4()
},
}
</script>

View File

@ -0,0 +1,87 @@
<template>
<b-card
no-body
:class="{'open': visible}"
@mouseenter="collapseOpen"
@mouseleave="collapseClose"
>
<b-card-header
:class="{'collapsed': !visible}"
:aria-expanded="visible ? 'true' : 'false'"
:aria-controls="collapseItemID"
role="tab"
data-toggle="collapse"
@click="updateVisible(!visible)"
>
<slot name="header">
<span class="lead collapse-title">{{ title }}</span>
</slot>
</b-card-header>
<b-collapse
:id="collapseItemID"
v-model="visible"
:accordion="accordion"
role="tabpanel"
>
<b-card-body>
<slot />
</b-card-body>
</b-collapse>
</b-card>
</template>
<script>
import {
BCard, BCardHeader, BCardBody, BCollapse,
} from 'bootstrap-vue'
import { v4 as uuidv4 } from 'uuid'
export default {
components: {
BCard,
BCardHeader,
BCardBody,
BCollapse,
},
props: {
isVisible: {
type: Boolean,
default: false,
},
title: {
type: String,
required: true,
},
},
data() {
return {
visible: false,
collapseItemID: '',
openOnHover: this.$parent.hover,
}
},
computed: {
accordion() {
return this.$parent.accordion ? `accordion-${this.$parent.collapseID}` : null
},
},
created() {
this.collapseItemID = uuidv4()
this.visible = this.isVisible
},
methods: {
updateVisible(val = true) {
this.visible = val
this.$emit('visible', val)
},
collapseOpen() {
if (this.openOnHover) this.updateVisible(true)
},
collapseClose() {
if (this.openOnHover) this.updateVisible(false)
},
},
}
</script>

View File

@ -0,0 +1,23 @@
<template>
<ul
v-bind="$attrs"
class="app-timeline"
v-on="$listeners"
>
<slot />
</ul>
</template>
<script>
export default {}
</script>
<style lang="scss" scoped>
.app-timeline {
list-style: none;
padding: 0;
margin: 0;
position: relative;
margin-left: 1rem;
}
</style>

View File

@ -0,0 +1,182 @@
<template>
<li
v-bind="$attrs"
class="timeline-item"
:class="[`timeline-variant-${variant}`, fillBorder ? `timeline-item-fill-border-${variant}` : null]"
v-on="$listeners"
>
<div
v-if="!icon"
class="timeline-item-point"
/>
<div
v-else
class="timeline-item-icon d-flex align-items-center justify-content-center rounded-circle"
>
<feather-icon :icon="icon" />
</div>
<slot>
<div class="d-flex flex-sm-row flex-column flex-wrap justify-content-between mb-1 mb-sm-0">
<h6 v-text="title" />
<small
class="timeline-item-time text-nowrap text-muted"
v-text="time"
/>
</div>
<p
class="mb-0"
v-text="subtitle"
/>
</slot>
</li>
</template>
<script>
export default {
props: {
variant: {
type: String,
default: 'primary',
},
title: {
type: String,
default: null,
},
subtitle: {
type: String,
default: null,
},
time: {
type: String,
default: null,
},
icon: {
type: String,
default: null,
},
fillBorder: {
type: Boolean,
default: false,
},
},
}
</script>
<style lang="scss" scoped>
@import '~@core/scss/base/bootstrap-extended/include'; // Bootstrap includes
@import '~@core/scss/base/components/include'; // Components includes
// Color palettes
@import '~@core/scss/base/core/colors/palette-variables.scss';
$timeline-border-color: $border-color;
/* Generate:
* Apply background color to dot
*/
@each $color_name, $color in $colors {
@each $color_type, $color_value in $color {
@if $color_type== 'base' {
.timeline-variant-#{$color_name} {
&.timeline-item-fill-border-#{$color_name} {
border-color: $color_value !important;
&:last-of-type {
&:after {
background: linear-gradient($color_value, $white);
}
}
}
.timeline-item-point {
background-color: $color_value;
&:before {
background-color: rgba($color_value, 0.12);
}
}
.timeline-item-icon {
color: $color_value;
border: 1px solid $color_value;
}
}
}
}
}
.timeline-item {
padding-left: 2.5rem;
position: relative;
&:not(:last-of-type) {
padding-bottom: 2rem;
border-left: 1px solid $timeline-border-color;
}
// This gives shade to last timeline-item but isn't that revolutionary
&:last-of-type {
&:after {
content: '';
position: absolute;
left: 0;
bottom: 0;
width: 1px;
height: 100%;
background: linear-gradient($timeline-border-color, $white);
}
}
.timeline-item-point {
position: absolute;
left: -6px;
width: 12px;
height: 12px;
top: 0;
border-radius: 50%;
z-index: 1;
&:before {
content: '';
z-index: 1;
border-radius: 50%;
width: 20px;
height: 20px;
position: absolute;
top: -4px;
left: -4px;
bottom: 0;
right: 0;
}
}
.timeline-item-icon {
position: absolute;
left: -12px;
top: 0;
width: 24px;
height: 24px;
background-color: $white;
z-index: 1;
}
}
// *===============================================---*
// *--------- Dark Layout ---------------------------------------*
// *===============================================---*
.dark-layout {
.timeline-item {
&:last-of-type {
&:after {
background: linear-gradient($theme-dark-border-color, $theme-dark-card-bg);
}
}
&:not(:last-of-type) {
border-left-color: $theme-dark-border-color;
}
.timeline-item-icon {
background-color: $theme-dark-card-bg;
}
}
}
</style>

View File

@ -0,0 +1,117 @@
<!-- =========================================================================================
File Name: VxTour.vue
Description: Tour Component
----------------------------------------------------------------------------------------
Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
Author: Pixinvent
Author URL: http://www.themeforest.net/user/pixinvent
========================================================================================== -->
<template>
<v-tour
name="vuexyTour"
:steps="steps"
>
<template slot-scope="tour">
<transition name="fade">
<!-- eslint-disable vue/no-use-v-if-with-v-for -->
<v-step
v-for="(step, index) of tour.steps"
v-if="tour.currentStep === index"
:key="index"
:step="step"
:previous-step="tour.previousStep"
:next-step="tour.nextStep"
:stop="tour.stop"
:is-first="tour.isFirst"
:is-last="tour.isLast"
:labels="tour.labels"
>
<div
slot="actions"
class="tour-actions d-flex justify-content-between"
>
<!-- Skip Button -->
<b-button
v-if="tour.currentStep != tour.steps.length - 1"
size="sm"
variant="outline-primary"
class="btn-tour-skip mr-1"
@click="tour.stop"
>
<span class="mr-25 align-middle">Skip</span>
<feather-icon
icon="XIcon"
size="12"
/>
</b-button>
<!-- Previous Button -->
<b-button
v-if="tour.currentStep"
size="sm"
variant="outline-primary mr-1"
@click="tour.previousStep"
>
<feather-icon
icon="ChevronLeftIcon"
size="12"
/>
<span class="ml-25 align-middle">Previous</span>
</b-button>
<!-- Next Button -->
<b-button
v-if="tour.currentStep != tour.steps.length - 1"
size="sm"
variant="primary"
class="btn-tour-next"
@click="tour.nextStep"
>
<span class="mr-25 align-middle">Next</span>
<feather-icon
icon="ChevronRightIcon"
size="12"
/>
</b-button>
<!-- Finish Button -->
<b-button
v-if="tour.currentStep == tour.steps.length - 1"
size="sm"
variant="primary"
class="btn-tour-finish"
@click="tour.stop"
>
<span class="mr-25 align-middle">Finish</span>
<feather-icon
icon="CheckCircleIcon"
size="12"
/>
</b-button>
</div>
</v-step>
<!-- eslint-enable vue/no-use-v-if-with-v-for -->
</transition>
</template>
</v-tour>
</template>
<script>
import { BButton } from 'bootstrap-vue'
export default {
name: 'VxTour',
components: {
BButton,
},
props: {
steps: {
required: true,
type: Array,
},
},
}
</script>

View File

@ -0,0 +1,195 @@
<template>
<b-overlay
v-if="!cardClosed"
variant="white"
:show="showLoading"
spinner-variant="primary"
blur="0"
opacity=".75"
rounded="sm"
>
<b-card
ref="bCard"
v-bind="cardAttrs"
no-body
:aria-expanded="!content_visible ? 'true' : 'false'"
:aria-controls="parentID"
:style="cardStyles"
v-on="$listeners"
>
<div
v-if="showHeader"
class="card-header"
>
<!-- Title & SubTitle -->
<div>
<b-card-title>{{ $attrs.title }}</b-card-title>
<b-card-sub-title v-if="$attrs['sub-title']">
{{ $attrs['sub-title'] }}
</b-card-sub-title>
</div>
<!-- Card Actions -->
<b-card-actions-container
v-if="showActions"
:available-actions="availableActions"
:is-collapsed="!content_visible"
@collapse="triggerCollapse"
@refresh="triggerRefresh"
@close="triggerClose"
/>
</div>
<!-- Collapsible Content -->
<b-collapse
:id="parentID"
v-model="content_visible"
:visible="content_visible"
class="card-content"
>
<!-- Handle no-body -->
<slot v-if="$attrs['no-body'] !== undefined" />
<b-card-body v-else>
<slot />
</b-card-body>
</b-collapse>
</b-card>
</b-overlay>
</template>
<script>
import {
BCard, BCardTitle, BCardSubTitle, BCardBody, BCollapse, BOverlay,
} from 'bootstrap-vue'
import BCardActionsContainer from './BCardActionsContainer.vue'
export default {
components: {
BCardActionsContainer,
BCard,
BCardTitle,
BCardSubTitle,
BCardBody,
BCollapse,
BOverlay,
},
inheritAttrs: false,
props: {
collapsed: {
type: Boolean,
default: false,
},
noActions: {
type: Boolean,
default: false,
},
actionCollapse: {
type: Boolean,
default: false,
},
actionRefresh: {
type: Boolean,
default: false,
},
actionClose: {
type: Boolean,
default: false,
},
},
data() {
return {
parentID: '',
content_visible: !this.collapsed,
showLoading: false,
cardClosed: false,
cardStyles: {},
}
},
computed: {
cardAttrs() {
const cardAttrs = JSON.parse(JSON.stringify(this.$attrs))
delete cardAttrs.title
delete cardAttrs['sub-title']
return cardAttrs
},
showHeader() {
return this.$attrs.title || this.$attrs['sub-title'] || !this.noActions
},
showActions() {
if (this.noActions) return false
return true
},
availableActions() {
const actions = []
const allFalse = (this.actionCollapse || this.actionRefresh || this.actionClose) === false
if (this.actionCollapse || allFalse) actions.push('collapse')
if (this.actionRefresh || allFalse) actions.push('refresh')
if (this.actionClose || allFalse) actions.push('close')
return actions
},
},
created() {
this.parentID = String(Math.floor(Math.random() * 10) + 1)
},
methods: {
removeCard() {
this.$set(this.cardStyles, 'maxHeight', `${this.$refs.bCard.clientHeight}px`)
setTimeout(() => {
this.$set(this.cardStyles, 'maxHeight', '0px')
this.$set(this.cardStyles, 'overflow', 'hidden')
// this.$set(this.cardStyles, 'marginBottom', '0')
}, 10)
},
triggerCollapse() {
this.content_visible = !this.content_visible
this.$emit('collapse')
},
triggerRefresh() {
this.showLoading = true
this.$emit('refresh')
},
triggerClose() {
this.removeCard()
this.$emit('close')
},
},
}
</script>
<style lang="scss" scoped>
@import '~@core/scss/base/bootstrap-extended/include';
@import '~@core/scss/base/components/variables-dark';
.card {
::v-deep .card-header {
.heading-elements {
position: static;
cursor: inherit;
.list-inline {
display: block;
li {
a {
padding: 0;
}
&:not(:last-child) {
margin-right: 1rem;
}
}
}
}
}
}
.dark-layout {
.b-overlay-wrap ::v-deep .b-overlay {
// border: 10px solid red;
.bg-white {
background-color: $theme-dark-body-bg !important;
}
}
}
</style>

View File

@ -0,0 +1,55 @@
<template>
<div class="heading-elements">
<ul class="list-inline mb-0">
<li v-if="availableActions.includes('collapse')">
<a
data-action="collapse"
:class="{ rotate: isCollapsed }"
@click="$emit('collapse')"
>
<feather-icon
icon="ChevronDownIcon"
size="16"
/>
</a>
</li>
<li v-if="availableActions.includes('refresh')">
<a
data-action="reload"
@click="$emit('refresh')"
>
<feather-icon
icon="RotateCwIcon"
size="14"
/>
</a>
</li>
<li v-if="availableActions.includes('close')">
<a
data-action="close"
@click="$emit('close')"
>
<feather-icon
icon="XIcon"
size="14"
/>
</a>
</li>
</ul>
</div>
</template>
<script>
export default {
props: {
isCollapsed: {
type: Boolean,
requried: true,
},
availableActions: {
type: Array,
default: () => [],
},
},
}
</script>

View File

@ -0,0 +1,2 @@
export { default as BCardActions } from './BCardActions.vue'
export { default as BCardActionsContainer } from './BCardActionsContainer.vue'

View File

@ -0,0 +1,166 @@
<template>
<b-card
v-bind="cardAttrs"
no-body
v-on="$listeners"
>
<div class="card-header">
<!-- Title & SubTitle -->
<div>
<b-card-title>{{ $attrs.title }}</b-card-title>
<b-card-sub-title v-if="$attrs['sub-title']">
{{ $attrs['sub-title'] }}
</b-card-sub-title>
</div>
<i
class="code-toggler feather icon-code cursor-pointer"
:aria-expanded="!code_visible ? 'true' : 'false'"
:aria-controls="parentID"
@click="code_visible = !code_visible"
/>
</div>
<template v-if="$attrs['no-body'] !== undefined">
<slot />
<!-- Code Content -->
<b-collapse
:id="parentID"
v-model="code_visible"
class="card-code"
:visible="code_visible"
>
<b-card-body>
<prism :language="codeLanguage">
<slot name="code" />
</prism>
</b-card-body>
</b-collapse>
</template>
<b-card-body v-else>
<!-- Card Content -->
<slot />
<!-- Code Content -->
<b-collapse
:id="parentID"
v-model="code_visible"
class="card-code"
:visible="code_visible"
>
<div class="p-1" />
<prism :language="codeLanguage">
<slot name="code" />
</prism>
</b-collapse>
</b-card-body>
</b-card>
</template>
<script>
import {
BCard, BCardTitle, BCardSubTitle, BCardBody, BCollapse,
} from 'bootstrap-vue'
import 'prismjs'
import 'prismjs/themes/prism-tomorrow.css'
import Prism from 'vue-prism-component'
export default {
components: {
BCard,
BCardTitle,
BCardSubTitle,
BCardBody,
BCollapse,
Prism,
},
inheritAttrs: false,
props: {
codeLanguage: {
default: 'markup',
type: String,
},
},
data() {
return {
parentID: '',
code_visible: false,
}
},
computed: {
cardAttrs() {
const cardAttrs = JSON.parse(JSON.stringify(this.$attrs))
delete cardAttrs.title
delete cardAttrs['sub-title']
return cardAttrs
},
},
created() {
this.parentID = String(Math.floor(Math.random() * 10) + 1)
},
}
</script>
<style lang="scss" scoped>
@import 'bootstrap/scss/functions';
@import '~@core/scss/base/bootstrap-extended/variables';
@import 'bootstrap/scss/variables';
@import '~@core/scss/base/components/variables-dark';
.card-code {
pre[class*='language-'] {
margin: 0;
max-height: 350px;
border-radius: 0.5rem;
}
/* width */
::-webkit-scrollbar {
width: 8px;
height: 8px;
background: #2d2d2d;
border-radius: 100%;
.dark-layout & {
background-color: $theme-dark-body-bg !important;
}
}
/* Track */
::-webkit-scrollbar-track {
background: transparent;
}
/* Handle */
::-webkit-scrollbar-thumb {
border-radius: 0.5rem;
background: rgba(241,241,241,.4);
}
/* Handle on hover */
// ::-webkit-scrollbar-thumb:hover {
// }
::-webkit-scrollbar-corner {
display: none;
}
}
.code-toggler {
border-bottom: 1px solid transparent;
&[aria-expanded='false'] {
border-bottom-color: $primary;
}
}
// HTML
.card {
.card-header .heading-elements {
position: static;
background: red;
}
}
</style>

View File

@ -0,0 +1,3 @@
import BCardCode from './BCardCode.vue'
export default BCardCode

View File

@ -0,0 +1,50 @@
<template>
<e-charts
ref="line"
autoresize
:options="option"
theme="theme-color"
auto-resize
/>
</template>
<script>
import ECharts from 'vue-echarts'
import 'echarts/lib/component/tooltip'
import 'echarts/lib/component/legend'
import 'echarts/lib/chart/bar'
import theme from './theme.json'
ECharts.registerTheme('theme-color', theme)
export default {
components: {
ECharts,
},
props: {
optionData: {
type: Object,
default: null,
},
},
data() {
return {
option: {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
},
legend: {
left: 0,
},
grid: this.optionData.grid,
xAxis: this.optionData.xAxis,
yAxis: this.optionData.yAxis,
series: this.optionData.series,
},
}
},
}
</script>

View File

@ -0,0 +1,46 @@
<template>
<e-charts
ref="line"
autoresize
:options="option"
theme="theme-color"
auto-resize
/>
</template>
<script>
import ECharts from 'vue-echarts'
import 'echarts/lib/component/tooltip'
import 'echarts/lib/component/legend'
import 'echarts/lib/chart/pie'
import theme from './theme.json'
ECharts.registerTheme('theme-color', theme)
export default {
components: {
ECharts,
},
props: {
series: {
type: Array,
default: null,
},
},
data() {
return {
option: {
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b}: {c} ({d}%)',
},
legend: {
left: 10,
bottom: '0',
},
series: this.series,
},
}
},
}
</script>

View File

@ -0,0 +1,72 @@
<template>
<e-charts
ref="line"
autoresize
:options="line"
theme="theme-color"
auto-resize
/>
</template>
<script>
import ECharts from 'vue-echarts'
import 'echarts/lib/component/tooltip'
import 'echarts/lib/component/legend'
import 'echarts/lib/chart/line'
import theme from './theme.json'
ECharts.registerTheme('theme-color', theme)
export default {
components: {
ECharts,
},
props: {
optionData: {
type: Object,
default: null,
},
},
data() {
return {
line: {
// Make gradient line here
visualMap: [{
show: true,
type: 'continuous',
min: 0,
max: 400,
}],
grid: {
width: '96%',
left: '30px',
top: '10px',
show: false,
},
tooltip: {
trigger: 'axis',
},
xAxis: [{
boundaryGap: false,
data: this.optionData.xAxisData,
}],
yAxis: {
type: 'value',
splitLine: { show: false },
},
series: {
type: 'line',
showSymbol: false,
data: this.optionData.series,
},
},
}
},
}
</script>
<style>
.echarts {
width: 100% !important;
}
</style>

View File

@ -0,0 +1,73 @@
<template>
<e-charts
ref="line"
autoresize
:options="option"
theme="theme-color"
auto-resize
/>
</template>
<script>
import ECharts from 'vue-echarts'
import 'echarts/lib/component/tooltip'
import 'echarts/lib/component/legend'
import 'echarts/lib/chart/radar'
import theme from './theme.json'
ECharts.registerTheme('theme-color', theme)
export default {
components: {
ECharts,
},
props: {
optionData: {
type: Object,
default: null,
},
},
data() {
return {
option: {
title: {
text: 'Basic radar chart',
},
tooltip: {},
legend: {
data: ['Point One', 'Point Two'],
bottom: '0',
left: '0',
},
radar: {
name: {
textStyle: {
color: '#626262',
fontWeight: 'bold',
borderRadius: 3,
padding: [3, 5],
},
},
indicator: this.optionData.indicator,
splitArea: {
show: false,
},
splitLine: {
lineStyle: {
color: [
'#eeeeee',
],
},
},
axisLine: {
lineStyle: {
color: '#eeeeee',
},
},
},
series: this.optionData.series,
},
}
},
}
</script>

View File

@ -0,0 +1,66 @@
<template>
<e-charts
ref="line"
:options="option"
theme="theme-color"
auto-resize
/>
</template>
<script>
import ECharts from 'vue-echarts'
import 'echarts/lib/component/tooltip'
import 'echarts/lib/component/legend'
import 'echarts/lib/chart/scatter'
import theme from './theme.json'
ECharts.registerTheme('theme-color', theme)
export default {
components: {
ECharts,
},
props: {
optionData: {
type: Object,
default: null,
},
},
data() {
return {
option: {
grid: {
width: '95%',
left: '30px',
right: '40px',
containLabel: false,
},
legend: {
enable: true,
left: '0',
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985',
},
},
},
xAxis: {
boundaryGap: false,
scale: true,
splitNumber: 10,
min: 0,
},
yAxis: {
splitLine: { show: false },
scale: true,
},
series: this.optionData.series,
},
}
},
}
</script>

View File

@ -0,0 +1,72 @@
<template>
<e-charts
ref="line"
autoresize
:options="option"
theme="theme-color"
auto-resize
/>
</template>
<script>
import ECharts from 'vue-echarts'
import 'echarts/lib/component/tooltip'
import 'echarts/lib/component/legend'
import 'echarts/lib/chart/line'
import theme from './theme.json'
ECharts.registerTheme('theme-color', theme)
export default {
components: {
ECharts,
},
props: {
optionData: {
type: Object,
default: null,
},
},
data() {
return {
option: {
title: {
text: 'Stacked area chart',
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985',
},
},
},
legend: {
left: '0',
},
grid: {
width: '95%',
left: '40px',
right: '4%',
containLabel: false,
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: this.optionData.xAxisData,
},
],
yAxis: [
{
type: 'value',
splitLine: { show: false },
},
],
series: this.optionData.series,
},
}
},
}
</script>

View File

@ -0,0 +1,475 @@
{
"color": [
"#826AF9",
"#9F87FF",
"#D2B0FF",
"#F8D3FF"
],
"backgroundColor": "rgba(0,0,0,0)",
"textStyle": {},
"title": {
"textStyle": {
"color": "#666666"
},
"subtextStyle": {
"color": "#999999"
}
},
"line": {
"itemStyle": {
"normal": {
"borderWidth": "1"
}
},
"lineStyle": {
"normal": {
"width": "1"
}
},
"symbolSize": "10",
"symbol": "emptyCircle",
"smooth": false
},
"radar": {
"itemStyle": {
"normal": {
"borderWidth": "2"
}
},
"lineStyle": {
"normal": {
"width": "3"
}
},
"symbolSize": "10",
"symbol": "emptyCircle",
"smooth": true
},
"bar": {
"itemStyle": {
"normal": {
"barBorderWidth": "0",
"barBorderColor": "#444444"
},
"emphasis": {
"barBorderWidth": "0",
"barBorderColor": "#444444"
}
}
},
"pie": {
"itemStyle": {
"normal": {
"borderWidth": "0",
"borderColor": "#444444"
},
"emphasis": {
"borderWidth": "0",
"borderColor": "#444444"
}
}
},
"scatter": {
"itemStyle": {
"normal": {
"borderWidth": "0",
"borderColor": "#444444"
},
"emphasis": {
"borderWidth": "0",
"borderColor": "#444444"
}
}
},
"boxplot": {
"itemStyle": {
"normal": {
"borderWidth": "0",
"borderColor": "#444444"
},
"emphasis": {
"borderWidth": "0",
"borderColor": "#444444"
}
}
},
"parallel": {
"itemStyle": {
"normal": {
"borderWidth": "0",
"borderColor": "#444444"
},
"emphasis": {
"borderWidth": "0",
"borderColor": "#444444"
}
}
},
"sankey": {
"itemStyle": {
"normal": {
"borderWidth": "0",
"borderColor": "#444444"
},
"emphasis": {
"borderWidth": "0",
"borderColor": "#444444"
}
}
},
"funnel": {
"itemStyle": {
"normal": {
"borderWidth": "0",
"borderColor": "#444444"
},
"emphasis": {
"borderWidth": "0",
"borderColor": "#444444"
}
}
},
"gauge": {
"itemStyle": {
"normal": {
"borderWidth": "0",
"borderColor": "#444444"
},
"emphasis": {
"borderWidth": "0",
"borderColor": "#444444"
}
}
},
"candlestick": {
"itemStyle": {
"normal": {
"color": "#d0648a",
"color0": "#ffffff",
"borderColor": "#d0648a",
"borderColor0": "#22c3aa",
"borderWidth": 1
}
}
},
"graph": {
"itemStyle": {
"normal": {
"borderWidth": "0",
"borderColor": "#444444"
}
},
"lineStyle": {
"normal": {
"width": 1,
"color": "#aaa"
}
},
"symbolSize": "10",
"symbol": "emptyCircle",
"smooth": true,
"color": [
"#4ea397",
"#22c3aa",
"#7bd9a5"
],
"label": {
"normal": {
"textStyle": {
"color": "#ffffff"
}
}
}
},
"map": {
"itemStyle": {
"normal": {
"areaColor": "#eeeeee",
"borderColor": "#999999",
"borderWidth": "0.5"
},
"emphasis": {
"areaColor": "rgba(34,195,170,0.25)",
"borderColor": "#22c3aa",
"borderWidth": "0.5"
}
},
"label": {
"normal": {
"textStyle": {
"color": "#28544e"
}
},
"emphasis": {
"textStyle": {
"color": "rgb(52,158,142)"
}
}
}
},
"geo": {
"itemStyle": {
"normal": {
"areaColor": "#eeeeee",
"borderColor": "#999999",
"borderWidth": "0.5"
},
"emphasis": {
"areaColor": "rgba(34,195,170,0.25)",
"borderColor": "#22c3aa",
"borderWidth": "0.5"
}
},
"label": {
"normal": {
"textStyle": {
"color": "#28544e"
}
},
"emphasis": {
"textStyle": {
"color": "rgb(52,158,142)"
}
}
}
},
"categoryAxis": {
"axisLine": {
"show": true,
"lineStyle": {
"color": "#cccccc"
}
},
"axisTick": {
"show": false,
"lineStyle": {
"color": "#333333"
}
},
"axisLabel": {
"show": true,
"textStyle": {
"color": "#999999"
}
},
"splitLine": {
"show": true,
"lineStyle": {
"color": [
"#eeeeee"
]
}
},
"splitArea": {
"show": false,
"areaStyle": {
"color": [
"rgba(250,250,250,0.3)",
"rgba(200,200,200,0.3)"
]
}
}
},
"valueAxis": {
"axisLine": {
"show": true,
"lineStyle": {
"color": "#cccccc"
}
},
"axisTick": {
"show": false,
"lineStyle": {
"color": "#333333"
}
},
"axisLabel": {
"show": true,
"textStyle": {
"color": "#999999"
}
},
"splitLine": {
"show": true,
"lineStyle": {
"color": [
"#eeeeee"
]
}
},
"splitArea": {
"show": false,
"areaStyle": {
"color": [
"rgba(250,250,250,0.3)",
"rgba(200,200,200,0.3)"
]
}
}
},
"logAxis": {
"axisLine": {
"show": true,
"lineStyle": {
"color": "#cccccc"
}
},
"axisTick": {
"show": false,
"lineStyle": {
"color": "#333333"
}
},
"axisLabel": {
"show": true,
"textStyle": {
"color": "#999999"
}
},
"splitLine": {
"show": true,
"lineStyle": {
"color": [
"#eeeeee"
]
}
},
"splitArea": {
"show": false,
"areaStyle": {
"color": [
"rgba(250,250,250,0.3)",
"rgba(200,200,200,0.3)"
]
}
}
},
"timeAxis": {
"axisLine": {
"show": true,
"lineStyle": {
"color": "#cccccc"
}
},
"axisTick": {
"show": false,
"lineStyle": {
"color": "#333333"
}
},
"axisLabel": {
"show": true,
"textStyle": {
"color": "#999999"
}
},
"splitLine": {
"show": true,
"lineStyle": {
"color": [
"#eeeeee"
]
}
},
"splitArea": {
"show": false,
"areaStyle": {
"color": [
"rgba(250,250,250,0.3)",
"rgba(200,200,200,0.3)"
]
}
}
},
"toolbox": {
"iconStyle": {
"normal": {
"borderColor": "#aaaaaa"
},
"emphasis": {
"borderColor": "#666"
}
}
},
"legend": {
"textStyle": {
"color": "#999999"
}
},
"tooltip": {
"axisPointer": {
"lineStyle": {
"color": "#ccc",
"width": 1
},
"crossStyle": {
"color": "#ccc",
"width": 1
}
}
},
"timeline": {
"lineStyle": {
"color": "#349e8e",
"width": 1
},
"itemStyle": {
"normal": {
"color": "#349e8e",
"borderWidth": "1"
},
"emphasis": {
"color": "#57e8d2"
}
},
"controlStyle": {
"normal": {
"color": "#349e8e",
"borderColor": "#349e8e",
"borderWidth": "0"
}
},
"checkpointStyle": {
"color": "#22c3aa",
"borderColor": "rgba(34,195,170,0.25)"
},
"label": {
"normal": {
"textStyle": {
"color": "#349e8e"
}
}
}
},
"visualMap": {
"color": [
"#d0648a",
"#22c3aa",
"rgba(123,217,165,0.2)"
]
},
"dataZoom": {
"backgroundColor": "#fff",
"dataBackgroundColor": "#dedede",
"fillerColor": "rgba(34,195,170,0.25)",
"handleColor": "#dddddd",
"handleSize": "100%",
"textStyle": {
"color": "#999"
}
},
"markPoint": {
"label": {
"normal": {
"textStyle": {
"color": "#ffffff"
}
},
"emphasis": {
"textStyle": {
"color": "#ffffff"
}
}
}
}
}

View File

@ -0,0 +1,45 @@
<script>
import * as icons from 'vue-feather-icons'
export default {
name: 'FeatherIcon',
functional: true,
props: {
icon: {
required: true,
type: [String, Object],
},
size: {
type: String,
default: '14',
},
badge: {
type: [String, Object, Number],
default: null,
},
badgeClasses: {
type: [String, Object, Array],
default: 'badge-primary',
},
},
render(h, { props, data }) {
// Create Feather Icon
const svg = h(icons[props.icon], { props: { size: props.size }, ...data })
// If no badge is provided => Render just SVG
if (!props.badge) return svg
// Badge
const badgeEl = h('span', { staticClass: 'badge badge-up badge-pill', class: props.badgeClasses }, [props.badge])
// Return span with children
return h('span', { staticClass: 'feather-icon position-relative' }, [svg, badgeEl])
},
}
</script>
<style lang="scss">
svg.feather {
outline: none
}
</style>

View File

@ -0,0 +1,67 @@
<template>
<div
class="btn-scroll-to-top"
:class="{'show': y > 250}"
>
<!-- We have wrapper because ripple effect give position relative to this absolute positioned btn -->
<!-- Hence due to that our btn get lost -->
<b-button
v-ripple.400="'rgba(255, 255, 255, 0.15)'"
variant="primary"
class="btn-icon"
@click="scrollToTop"
>
<feather-icon
icon="ArrowUpIcon"
size="16"
/>
</b-button>
</div>
</template>
<script>
import { useWindowScroll } from '@vueuse/core'
import { BButton } from 'bootstrap-vue'
import Ripple from 'vue-ripple-directive'
export default {
directives: {
Ripple,
},
components: {
BButton,
},
setup() {
const { y } = useWindowScroll()
const scrollToTop = () => {
const rootEle = document.documentElement
rootEle.scrollTo({
top: 0,
behavior: 'smooth',
})
}
return { y, scrollToTop }
},
}
</script>
<style lang="scss" scoped>
.btn-scroll-to-top {
position: fixed;
bottom: 5%;
right: 30px;
z-index: 99;
opacity: 0;
// transform: translateY(100px);
transition: all .5s ease;
&.show {
opacity: 1;
// transform: translateY(0)
}
}
</style>

View File

@ -0,0 +1,51 @@
<template>
<b-card no-body>
<b-card-body class="d-flex justify-content-between align-items-center">
<div class="truncate">
<h2 class="mb-25 font-weight-bolder">
{{ statistic }}
</h2>
<span>{{ statisticTitle }}</span>
</div>
<b-avatar
:variant="`light-${color}`"
size="45"
>
<feather-icon
size="21"
:icon="icon"
/>
</b-avatar>
</b-card-body>
</b-card>
</template>
<script>
import { BCard, BCardBody, BAvatar } from 'bootstrap-vue'
export default {
components: {
BCard,
BCardBody,
BAvatar,
},
props: {
icon: {
type: String,
required: true,
},
statistic: {
type: [Number, String],
required: true,
},
statisticTitle: {
type: String,
default: '',
},
color: {
type: String,
default: 'primary',
},
},
}
</script>

View File

@ -0,0 +1,49 @@
<template>
<b-card class="text-center">
<b-avatar
class="mb-1"
:variant="`light-${color}`"
size="45"
>
<feather-icon
size="21"
:icon="icon"
/>
</b-avatar>
<div class="truncate">
<h2 class="mb-25 font-weight-bolder">
{{ statistic }}
</h2>
<span>{{ statisticTitle }}</span>
</div>
</b-card>
</template>
<script>
import { BCard, BAvatar } from 'bootstrap-vue'
export default {
components: {
BCard,
BAvatar,
},
props: {
icon: {
type: String,
required: true,
},
statistic: {
type: [Number, String],
required: true,
},
statisticTitle: {
type: String,
default: '',
},
color: {
type: String,
default: 'primary',
},
},
}
</script>

View File

@ -0,0 +1,83 @@
<template>
<b-card no-body>
<b-card-body class="pb-0">
<b-avatar
class="mb-1"
:variant="`light-${color}`"
size="45"
>
<feather-icon
size="21"
:icon="icon"
/>
</b-avatar>
<div class="truncate">
<h2 class="mb-25 font-weight-bolder">
{{ statistic }}
</h2>
<span>{{ statisticTitle }}</span>
</div>
</b-card-body>
<vue-apex-charts
type="area"
height="100"
width="100%"
:options="chartOptionsComputed"
:series="chartData"
/>
</b-card>
</template>
<script>
import { BCard, BCardBody, BAvatar } from 'bootstrap-vue'
import VueApexCharts from 'vue-apexcharts'
import { $themeColors } from '@themeConfig'
import { areaChartOptions } from './chartOptions'
export default {
components: {
VueApexCharts,
BCard,
BCardBody,
BAvatar,
},
props: {
icon: {
type: String,
required: true,
},
statistic: {
type: [Number, String],
required: true,
},
statisticTitle: {
type: String,
default: '',
},
color: {
type: String,
default: 'primary',
},
chartData: {
type: Array,
default: () => [],
},
chartOptions: {
type: Object,
default: null,
},
},
computed: {
chartOptionsComputed() {
if (this.chartOptions === null) {
const options = JSON.parse(JSON.stringify(areaChartOptions))
options.theme.monochrome.color = $themeColors[this.color]
return options
}
return this.chartOptions
},
},
}
</script>

View File

@ -0,0 +1,101 @@
<template>
<b-card no-body>
<b-card-body class="d-flex justify-content-between align-items-center pb-0">
<div class="truncate">
<h2 class="font-weight-bolder">
{{ statistic }}
</h2>
<span>{{ statisticTitle }}</span>
</div>
<b-avatar
:variant="`light-${color}`"
size="45"
>
<feather-icon
size="21"
:icon="icon"
/>
</b-avatar>
</b-card-body>
<vue-apex-charts
type="line"
height="100"
width="100%"
:options="chartOptionsComputed"
:series="chartData"
/>
</b-card>
</template>
<script>
import { BCard, BCardBody, BAvatar } from 'bootstrap-vue'
import VueApexCharts from 'vue-apexcharts'
import { $themeColors } from '@themeConfig'
import { lineChartOptions } from './chartOptions'
export default {
components: {
VueApexCharts,
BCard,
BCardBody,
BAvatar,
},
props: {
icon: {
type: String,
required: true,
},
statistic: {
type: [Number, String],
required: true,
},
statisticTitle: {
type: String,
default: '',
},
color: {
type: String,
default: 'primary',
},
chartData: {
type: Array,
default: () => [],
},
chartOptions: {
type: Object,
default: null,
},
},
computed: {
chartOptionsComputed() {
if (this.chartOptions === null) {
const options = JSON.parse(JSON.stringify(lineChartOptions))
options.fill.gradient.gradientToColors = [this.gradientToColor(this.color)]
options.colors = [$themeColors[this.color]]
return options
}
return this.chartOptions
},
},
methods: {
gradientToColor(color) {
const gradientToColors = {
primary: '#A9A2F6',
success: '#55DD92',
warning: '#ffc085',
danger: '#F97794',
info: '#59E0F0',
secondary: '#B4B9BF',
light: '#D0D4DB',
dark: '#919191',
}
return gradientToColors[color]
},
},
}
</script>

View File

@ -0,0 +1,122 @@
import { $themeColors } from '@themeConfig'
export const areaChartOptions = {
grid: {
show: false,
padding: {
left: 0,
right: 0,
},
},
chart: {
toolbar: {
show: false,
},
sparkline: {
enabled: true,
},
},
dataLabels: {
enabled: false,
},
stroke: {
curve: 'smooth',
width: 2.5,
},
fill: {
type: 'gradient',
gradient: {
shadeIntensity: 0.9,
opacityFrom: 0.5,
opacityTo: 0.2,
stops: [0, 80, 100],
},
},
xaxis: {
type: 'numeric',
lines: {
show: false,
},
axisBorder: {
show: false,
},
labels: { show: false },
},
yaxis: [
{
y: 0,
offsetX: 0,
offsetY: 0,
padding: {
left: 0,
right: 0,
},
},
],
tooltip: {
x: { show: false },
},
theme: {
monochrome: {
enabled: true,
color: $themeColors.primary,
shadeTo: 'light',
shadeIntensity: 0.65,
},
},
}
export const lineChartOptions = {
grid: {
show: false,
padding: {
left: 0,
right: 0,
},
},
chart: {
type: 'line',
dropShadow: {
enabled: true,
top: 5,
left: 0,
blur: 4,
opacity: 0.1,
},
toolbar: {
show: false,
},
sparkline: {
enabled: true,
},
},
stroke: {
width: 5,
curve: 'smooth',
},
xaxis: {
type: 'numeric',
},
colors: [$themeColors.primary],
fill: {
type: 'gradient',
gradient: {
shade: 'dark',
gradientToColors: ['#A9A2F6'],
shadeIntensity: 1,
type: 'horizontal',
opacityFrom: 1,
opacityTo: 1,
stops: [0, 100, 100, 100],
},
},
markers: {
size: 0,
hover: {
size: 5,
},
},
tooltip: {
x: { show: false },
},
}

View File

@ -0,0 +1,84 @@
<template>
<div class="toastification">
<div class="d-flex align-items-start">
<b-avatar
:variant="variant"
size="1.8rem"
class="mr-75 flex-shrink-0"
>
<feather-icon
:icon="icon"
size="15"
/>
</b-avatar>
<div class="d-flex flex-grow-1">
<div>
<h5
v-if="title"
class="mb-0 font-weight-bolder toastification-title"
:class="`text-${variant}`"
v-text="title"
/>
<small
v-if="text"
class="d-inline-block text-body"
v-text="text"
/>
</div>
<span
class="cursor-pointer toastification-close-icon ml-auto "
@click="$emit('close-toast')"
>
<feather-icon
v-if="!hideClose"
icon="XIcon"
class="text-body"
/>
</span>
</div>
</div>
</div>
</template>
<script>
import { BAvatar } from 'bootstrap-vue'
export default {
components: {
BAvatar,
},
props: {
variant: {
type: String,
default: 'primary',
},
icon: {
type: String,
default: null,
},
title: {
type: String,
default: null,
},
text: {
type: String,
default: null,
},
hideClose: {
type: Boolean,
default: false,
},
},
}
</script>
<style lang="scss" scoped>
.toastification-close-icon,
.toastification-title {
line-height: 26px;
}
.toastification-title {
color: inherit;
}
</style>

View File

@ -0,0 +1,32 @@
export const heightFade = {
/* eslint-disable no-param-reassign */
inserted(el, binding) {
const height = `${el.offsetHeight}px`
if (binding.modifiers.appear) {
el.style.overflow = 'hidden'
el.style.maxHeight = '0px'
el.style.opacity = 0
// Focus the element
setTimeout(() => {
el.style.maxHeight = height
el.style.opacity = 1
setTimeout(() => {
el.style.overflow = 'unset'
}, 300)
}, 100)
} else {
el.style.maxHeight = height
}
},
unbind(el) {
if (el.style === undefined) return
el.style.overflow = 'hidden'
el.style.maxHeight = '0px'
el.style.opacity = 0
},
/* eslint-enable no-param-reassign */
}
export const temp = 2

View File

@ -0,0 +1,69 @@
<template>
<b-row
v-if="$route.meta.breadcrumb || $route.meta.pageTitle"
class="content-header"
>
<!-- Content Left -->
<b-col
class="content-header-left mb-2"
cols="12"
md="9"
>
<b-row class="breadcrumbs-top">
<b-col cols="12">
<h2 class="content-header-title float-left pr-1 mb-0">
{{ $route.meta.pageTitle }}
</h2>
<div class="breadcrumb-wrapper">
<b-breadcrumb>
<b-breadcrumb-item to="/">
<feather-icon
icon="HomeIcon"
size="16"
class="align-text-top"
/>
</b-breadcrumb-item>
<b-breadcrumb-item
v-for="item in $route.meta.breadcrumb"
:key="item.text"
:active="item.active"
:to="item.to"
>
{{ item.text }}
</b-breadcrumb-item>
</b-breadcrumb>
</div>
</b-col>
</b-row>
</b-col>
<!-- Content Right -->
<b-col
class="content-header-right text-md-right d-md-block d-none mb-1"
md="3"
cols="12"
>
&nbsp;
</b-col>
</b-row>
</template>
<script>
import {
BBreadcrumb, BBreadcrumbItem, BRow, BCol,
} from 'bootstrap-vue'
import Ripple from 'vue-ripple-directive'
export default {
directives: {
Ripple,
},
components: {
BBreadcrumb,
BBreadcrumbItem,
BRow,
BCol,
},
}
</script>

View File

@ -0,0 +1,42 @@
<template>
<p class="clearfix mb-0">
<span class="float-md-left d-block d-md-inline-block mt-25">
Powered By
<b-link
class="ml-25"
href="#"
target="_blank"
>Ping.pub</b-link>
</span>
<span class="float-md-right d-none d-md-block">Buy me a cup of coffee.
<span
v-b-popover.hover.topleft="'Atom: cosmos1ev0vtddkl7jlwfawlk06yzncapw2x9quyxx75u'"
v-ripple.400="'rgba(113, 102, 240, 0.15)'"
title="Thanks for your donation!"
variant="outline-primary"
>
<feather-icon
icon="HeartIcon"
size="21"
class="text-danger stroke-current"
/>
</span>
</span>
</p>
</template>
<script>
import { BLink, VBPopover } from 'bootstrap-vue'
import Ripple from 'vue-ripple-directive'
export default {
components: {
BLink,
},
directives: {
'b-popover': VBPopover,
Ripple,
},
}
</script>

View File

@ -0,0 +1,93 @@
<template>
<svg
viewBox="0 0 139 95"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
height="24"
>
<defs>
<linearGradient
id="linearGradient-1"
x1="100%"
y1="10.5120544%"
x2="50%"
y2="89.4879456%"
>
<stop
stop-color="#000000"
offset="0%"
/>
<stop
stop-color="#FFFFFF"
offset="100%"
/>
</linearGradient>
<linearGradient
id="linearGradient-2"
x1="64.0437835%"
y1="46.3276743%"
x2="37.373316%"
y2="100%"
>
<stop
stop-color="#EEEEEE"
stop-opacity="0"
offset="0%"
/>
<stop
stop-color="#FFFFFF"
offset="100%"
/>
</linearGradient>
</defs>
<g
id="Page-1"
stroke="none"
stroke-width="1"
fill="none"
fill-rule="evenodd"
>
<g
id="Artboard"
transform="translate(-400.000000, -178.000000)"
>
<g
id="Group"
transform="translate(400.000000, 178.000000)"
>
<path
id="Path"
class="text-primary"
d="M-5.68434189e-14,2.84217094e-14 L39.1816085,2.84217094e-14 L69.3453773,32.2519224 L101.428699,2.84217094e-14 L138.784583,2.84217094e-14 L138.784199,29.8015838 C137.958931,37.3510206 135.784352,42.5567762 132.260463,45.4188507 C128.736573,48.2809251 112.33867,64.5239941 83.0667527,94.1480575 L56.2750821,94.1480575 L6.71554594,44.4188507 C2.46876683,39.9813776 0.345377275,35.1089553 0.345377275,29.8015838 C0.345377275,24.4942122 0.230251516,14.560351 -5.68434189e-14,2.84217094e-14 Z"
style="fill:currentColor"
/>
<path
id="Path1"
d="M69.3453773,32.2519224 L101.428699,1.42108547e-14 L138.784583,1.42108547e-14 L138.784199,29.8015838 C137.958931,37.3510206 135.784352,42.5567762 132.260463,45.4188507 C128.736573,48.2809251 112.33867,64.5239941 83.0667527,94.1480575 L56.2750821,94.1480575 L32.8435758,70.5039241 L69.3453773,32.2519224 Z"
fill="url(#linearGradient-1)"
opacity="0.2"
/>
<polygon
id="Path-2"
fill="#000000"
opacity="0.049999997"
points="69.3922914 32.4202615 32.8435758 70.5039241 54.0490008 16.1851325"
/>
<polygon
id="Path-21"
fill="#000000"
opacity="0.099999994"
points="69.3922914 32.4202615 32.8435758 70.5039241 58.3683556 20.7402338"
/>
<polygon
id="Path-3"
fill="url(#linearGradient-2)"
opacity="0.099999994"
points="101.428699 0 83.0667527 94.1480575 130.378721 47.0740288"
/>
</g>
</g>
</g>
</svg>
</template>

View File

@ -0,0 +1,344 @@
<template>
<div
class="customizer d-none d-md-block"
:class="{'open': isCustomizerOpen}"
>
<!-- Toggler -->
<b-link
class="customizer-toggle d-flex align-items-center justify-content-center"
@click="isCustomizerOpen = !isCustomizerOpen"
>
<feather-icon
icon="SettingsIcon"
size="15"
class="spinner"
/>
</b-link>
<!-- /Toggler -->
<!-- Header -->
<div class="customizer-section d-flex justify-content-between align-items-center">
<div>
<h4 class="text-uppercase mb-0">
Theme Customizer
</h4>
<small>Customize &amp; Preview in Real Time</small>
</div>
<feather-icon
icon="XIcon"
size="18"
class="cursor-pointer"
@click="isCustomizerOpen = !isCustomizerOpen"
/>
</div>
<!-- Header -->
<vue-perfect-scrollbar
:settings="perfectScrollbarSettings"
class="ps-customizer-area scroll-area"
>
<!-- Skin, RTL, Router Animation -->
<div class="customizer-section">
<!-- Skin -->
<b-form-group label="Skin">
<b-form-radio-group
id="skin-radio-group"
v-model="skin"
name="skin"
:options="skinOptions"
/>
</b-form-group>
<!-- Skin -->
<b-form-group label="Content Width">
<b-form-radio-group
id="content-width-radio-group"
v-model="contentWidth"
name="content-width"
:options="contentWidthOptions"
/>
</b-form-group>
<!-- RTL -->
<b-form-group
label="RTL"
label-cols="10"
>
<b-form-checkbox
v-model="isRTL"
class="mr-0 mt-50"
name="is-rtl"
switch
inline
/>
</b-form-group>
<!-- Router Transition -->
<b-form-group
label="Router Transition"
label-cols="6"
>
<v-select
v-model="routerTransition"
:dir="$store.state.appConfig.isRTL ? 'rtl' : 'ltr'"
:clearable="false"
label="title"
:options="routerTransitionOptions"
:reduce="option => option.value"
/>
</b-form-group>
</div>
<!-- /Skin, RTL, Router Animation -->
<!-- SECTION: Menu -->
<div class="customizer-section">
<!-- Layout Type -->
<b-form-group
label="Menu Layout"
>
<b-form-radio-group
v-model="layoutType"
name="layout-type"
:options="layoutTypeOptions"
/>
</b-form-group>
<!-- Collapsible -->
<div
v-if="layoutType === 'vertical'"
class="d-flex justify-content-between align-items-center mt-2"
>
<span class="font-weight-bold">Menu Collapsed</span>
<b-form-checkbox
v-model="isVerticalMenuCollapsed"
name="is-vertical-menu-collapsed"
class="mr-0"
switch
inline
/>
</div>
<!-- Menu Visiblity -->
<div class="d-flex justify-content-between align-items-center mt-2">
<span class="font-weight-bold">Menu Hidden</span>
<b-form-checkbox
v-model="isNavMenuHidden"
name="is-menu-visible"
class="mr-0"
switch
inline
/>
</div>
</div>
<!-- SECTION: Navbar -->
<div class="customizer-section">
<!-- Navbar Color -->
<b-form-group
v-show="layoutType === 'vertical'"
label="Navbar Color"
>
<div
v-for="(color, index) in navbarColors"
:key="color"
class="p-1 d-inline-block rounded mr-1 cursor-pointer"
:class="[`bg-${color}`, {'border border-light': !index}, {'mark-active': navbarBackgroundColor === color}]"
@click="navbarBackgroundColor = color"
/>
</b-form-group>
<!-- Navbar Type -->
<b-form-group :label="layoutType === 'vertical' ? 'Navbar Type' : 'Menu Type'">
<b-form-radio-group
v-model="navbarType"
name="navbar-type"
:options="navbarTypes"
/>
</b-form-group>
</div>
<!-- SECTION: Footer -->
<div class="customizer-section">
<!-- Footer Type -->
<b-form-group label="Footer Type">
<b-form-radio-group
v-model="footerType"
name="footer-type"
:options="footerTypes"
/>
</b-form-group>
</div>
</vue-perfect-scrollbar>
</div>
</template>
<script>
import {
BLink, BFormRadioGroup, BFormGroup, BFormCheckbox,
} from 'bootstrap-vue'
import vSelect from 'vue-select'
import VuePerfectScrollbar from 'vue-perfect-scrollbar'
import useAppCustomizer from './useAppCustomizer'
export default {
components: {
// BSV
BLink,
BFormRadioGroup,
BFormCheckbox,
BFormGroup,
// 3rd party
vSelect,
VuePerfectScrollbar,
},
setup() {
const {
// Vertical Menu
isVerticalMenuCollapsed,
// Customizer
isCustomizerOpen,
// Skin
skin,
skinOptions,
// Content Width
contentWidth,
contentWidthOptions,
// RTL
isRTL,
// routerTransition
routerTransition,
routerTransitionOptions,
// Layout Type
layoutType,
layoutTypeOptions,
// NavMenu Hidden
isNavMenuHidden,
// Navbar
navbarColors,
navbarTypes,
navbarBackgroundColor,
navbarType,
// Footer
footerTypes,
footerType,
} = useAppCustomizer()
if (layoutType.value === 'horizontal') {
// Remove semi-dark skin option in horizontal layout
const skinSemiDarkIndex = skinOptions.findIndex(s => s.value === 'semi-dark')
delete skinOptions[skinSemiDarkIndex]
// Remove menu hidden radio in horizontal layout => As we already have switch for it
const menuHiddneIndex = navbarTypes.findIndex(t => t.value === 'hidden')
delete navbarTypes[menuHiddneIndex]
}
// Perfect Scrollbar
const perfectScrollbarSettings = {
maxScrollbarLength: 60,
wheelPropagation: false,
}
return {
// Vertical Menu
isVerticalMenuCollapsed,
// Customizer
isCustomizerOpen,
// Skin
skin,
skinOptions,
// Content Width
contentWidth,
contentWidthOptions,
// RTL
isRTL,
// routerTransition
routerTransition,
routerTransitionOptions,
// Layout Type
layoutType,
layoutTypeOptions,
// NavMenu Hidden
isNavMenuHidden,
// Navbar
navbarColors,
navbarTypes,
navbarBackgroundColor,
navbarType,
// Footer
footerTypes,
footerType,
// Perfect Scrollbar
perfectScrollbarSettings,
}
},
}
</script>
<style lang="scss">
@import '@core/scss/vue/libs/vue-select.scss';
</style>
<style lang="scss" scoped>
@import '~@core/scss/base/bootstrap-extended/include';
@import '~@core/scss/base/components/variables-dark';
.customizer-section {
padding: 1.5rem;
border-bottom: 1px solid #ebe9f1;
.dark-layout & {
border-color: $theme-dark-border-color;
}
#skin-radio-group ::v-deep {
.custom-control-inline {
margin-right: 0.7rem;
}
}
.form-group {
margin-bottom: 1.5rem;;
&:last-of-type {
margin-bottom: 0;
}
::v-deep legend {
font-weight: 500;
}
}
}
.mark-active {
box-shadow: 0 0 0 0.2rem rgba(38,143,255,.5);
}
.ps-customizer-area {
height: calc(100% - 83px)
}
</style>

View File

@ -0,0 +1,109 @@
import { ref } from '@vue/composition-api'
import useAppConfig from '@core/app-config/useAppConfig'
export default function useAppCustomizer() {
// Customizer
const isCustomizerOpen = ref(false)
// Skin
const skinOptions = [
{ text: 'Light', value: 'light' },
{ text: 'Bordered', value: 'bordered' },
{ text: 'Dark', value: 'dark' },
{ text: 'Semi Dark', value: 'semi-dark' },
]
// Content Width Options
const contentWidthOptions = [
{ text: 'Full Width', value: 'full' },
{ text: 'Boxed', value: 'boxed' },
]
// Router Transition
const routerTransitionOptions = [
{ title: 'Zoom Fade', value: 'zoom-fade' },
{ title: 'Fade', value: 'fade' },
{ title: 'Fade Bottom', value: 'fade-bottom' },
{ title: 'Slide Fade', value: 'slide-fade' },
{ title: 'Zoom Out', value: 'zoom-out' },
{ title: 'None', value: 'none' },
]
// Router Transition
const layoutTypeOptions = [
{ text: 'Vertical', value: 'vertical' },
{ text: 'Horizontal', value: 'horizontal' },
]
// Navbar
const navbarColors = ['', 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'dark']
// Navbar Types
const navbarTypes = [
{ text: 'Floating', value: 'floating' },
{ text: 'Sticky', value: 'sticky' },
{ text: 'Static', value: 'static' },
{ text: 'Hidden', value: 'hidden' },
]
// Footer Types
const footerTypes = [
{ text: 'Sticky', value: 'sticky' },
{ text: 'Static', value: 'static' },
{ text: 'Hidden', value: 'hidden' },
]
// eslint-disable-next-line object-curly-newline
const {
isRTL,
skin,
contentWidth,
routerTransition,
layoutType,
isNavMenuHidden,
isVerticalMenuCollapsed,
navbarBackgroundColor,
navbarType,
footerType,
} = useAppConfig()
return {
// Customizer
isCustomizerOpen,
// Vertical Menu
isVerticalMenuCollapsed,
// Skin
skin,
skinOptions,
// Content Width
contentWidth,
contentWidthOptions,
// RTL
isRTL,
// routerTransition
routerTransition,
routerTransitionOptions,
// Layout Type
layoutType,
layoutTypeOptions,
// NavMenu Hidden
isNavMenuHidden,
// Navbar
navbarColors,
navbarTypes,
navbarBackgroundColor,
navbarType,
// Footer
footerTypes,
footerType,
}
}

View File

@ -0,0 +1,72 @@
<template>
<div class="navbar-container d-flex content align-items-center">
<!-- Nav Menu Toggler -->
<ul class="nav navbar-nav d-xl-none">
<li class="nav-item">
<b-link
class="nav-link"
@click="toggleVerticalMenuActive"
>
<feather-icon
icon="MenuIcon"
size="21"
/>
</b-link>
</li>
</ul>
<!-- Left Col -->
<div class="bookmark-wrapper align-items-center flex-grow-1 d-none d-lg-flex">
<bookmarks />
</div>
<!-- Right Col -->
<b-navbar-nav class="nav align-items-center ml-auto">
<dark-Toggler class="d-none d-lg-block" />
<search-bar />
<notification-dropdown />
<template #button-content>
<b-button
v-ripple.400="'rgba(255, 255, 255, 0.15)'"
variant="primary"
class="btn-icon"
>
<feather-icon icon="SettingsIcon" />
</b-button>
</template>
</b-navbar-nav>
</div>
</template>
<script>
import {
BLink, BNavbarNav, BButton,
} from 'bootstrap-vue'
import Bookmarks from './components/Bookmarks.vue'
// import Locale from './components/Locale.vue'
import DarkToggler from './components/DarkToggler.vue'
import SearchBar from './components/SearchBar.vue'
import NotificationDropdown from './components/NotificationDropdown.vue'
export default {
components: {
BLink,
// Navbar Components
BNavbarNav,
Bookmarks,
DarkToggler,
SearchBar,
NotificationDropdown,
BButton,
},
props: {
toggleVerticalMenuActive: {
type: Function,
default: () => {},
},
},
}
</script>

View File

@ -0,0 +1,46 @@
<template>
<div class="navbar-header d-xl-block d-none">
<ul class="nav navbar-nav">
<li class="nav-item">
<b-link
class="navbar-brand"
to="/"
>
<span class="brand-logo">
<b-img
:src="appLogoImage"
alt="logo"
/>
</span>
<h2 class="brand-text mb-0">
{{ appName }}
</h2>
</b-link>
</li>
</ul>
</div>
</template>
<script>
import { BLink, BImg } from 'bootstrap-vue'
import { $themeConfig } from '@themeConfig'
export default {
components: {
BLink,
BImg,
},
setup() {
// App Name
const { appName, appLogoImage } = $themeConfig.app
return {
appName,
appLogoImage,
}
},
}
</script>
<style>
</style>

View File

@ -0,0 +1,61 @@
<template>
<div class="navbar-container d-flex content align-items-center">
<!-- Nav Menu Toggler -->
<ul class="nav navbar-nav d-xl-none">
<li class="nav-item">
<b-link
class="nav-link"
@click="toggleVerticalMenuActive"
>
<feather-icon
icon="MenuIcon"
size="21"
/>
</b-link>
</li>
</ul>
<!-- Left Col -->
<div class="bookmark-wrapper align-items-center flex-grow-1 d-none d-lg-flex">
<!-- Bookmarks Container -->
<bookmarks />
</div>
<b-navbar-nav class="nav align-items-center ml-auto">
<dark-Toggler class="d-none d-lg-block" />
<search-bar />
<notification-dropdown />
</b-navbar-nav>
</div>
</template>
<script>
import {
BLink, BNavbarNav,
} from 'bootstrap-vue'
import Bookmarks from './components/Bookmarks.vue'
import SearchBar from './components/SearchBar.vue'
import DarkToggler from './components/DarkToggler.vue'
import NotificationDropdown from './components/NotificationDropdown.vue'
export default {
components: {
BLink,
// Navbar Components
BNavbarNav,
Bookmarks,
SearchBar,
DarkToggler,
NotificationDropdown,
},
props: {
toggleVerticalMenuActive: {
type: Function,
default: () => {},
},
},
}
</script>

View File

@ -0,0 +1,196 @@
<template>
<b-navbar-nav class="nav">
<b-nav-item
v-for="(bookmark, index) in bookmarks"
:id="`bookmark-${index}`"
:key="index"
:to="bookmark.route"
>
<feather-icon
:icon="bookmark.icon"
size="21"
/>
<b-tooltip
triggers="hover"
:target="`bookmark-${index}`"
:title="bookmark.title"
:delay="{ show: 1000, hide: 50 }"
/>
</b-nav-item>
<b-nav-item-dropdown
link-classes="bookmark-star"
lazy
@hidden="resetsearchQuery"
>
<feather-icon
slot="button-content"
icon="StarIcon"
size="21"
class="text-warning"
/>
<!-- Dropdown Content -->
<li style="min-width:300px">
<div class="p-1">
<b-form-input
id="boomark-search-input"
v-model="searchQuery"
placeholder="Explore Vuexy..."
autofocus
/>
</div>
<vue-perfect-scrollbar
:settings="perfectScrollbarSettings"
class="search-list search-list-bookmark scroll-area"
:class="{'show': filteredData.pages && filteredData.pages.length }"
tagname="ul"
>
<b-dropdown-item
v-for="(suggestion, index) in filteredData.pages || bookmarks"
:key="index"
class="suggestion-group-suggestion cursor-pointer"
link-class="d-flex align-items-center"
:to="suggestion.route"
@mouseenter="currentSelected = index"
>
<feather-icon
:icon="suggestion.icon"
class="mr-75"
size="18"
/>
<span class="align-middle">{{ suggestion.title }}</span>
<feather-icon
icon="StarIcon"
class="ml-auto"
size="16"
:class="{'text-warning': suggestion.isBookmarked}"
@click.stop.prevent="toggleBookmarked(suggestion)"
/>
</b-dropdown-item>
<b-dropdown-item
v-show="!(filteredData.pages && filteredData.pages.length) && searchQuery"
disabled
>
No Results Found.
</b-dropdown-item></vue-perfect-scrollbar>
</li>
</b-nav-item-dropdown>
</b-navbar-nav>
</template>
<script>
import {
BNavbarNav, BNavItem, BTooltip, BNavItemDropdown, BFormInput, BDropdownItem,
} from 'bootstrap-vue'
import VuePerfectScrollbar from 'vue-perfect-scrollbar'
import useAutoSuggest from '@core/components/app-auto-suggest/useAutoSuggest'
import { ref, watch } from '@vue/composition-api'
import router from '@/router'
import store from '@/store'
import searchAndBookmarkData from '../search-and-bookmark-data'
export default {
components: {
BNavbarNav, BNavItem, BTooltip, BNavItemDropdown, BFormInput, VuePerfectScrollbar, BDropdownItem,
},
setup() {
const searchAndBookmarkDataPages = ref(searchAndBookmarkData.pages)
const bookmarks = ref(searchAndBookmarkData.pages.data.filter(page => page.isBookmarked))
const currentSelected = ref(-1)
const perfectScrollbarSettings = {
maxScrollbarLength: 60,
}
const {
searchQuery,
resetsearchQuery,
filteredData,
} = useAutoSuggest({ data: { pages: searchAndBookmarkDataPages.value }, searchLimit: 6 })
watch(searchQuery, val => {
store.commit('app/TOGGLE_OVERLAY', Boolean(val))
})
watch(filteredData, val => {
currentSelected.value = val.pages && !val.pages.length ? -1 : 0
})
const suggestionSelected = () => {
const suggestion = filteredData.value.pages[currentSelected.value]
router.push(suggestion.route).catch(() => {})
resetsearchQuery()
}
const toggleBookmarked = item => {
// Find Index of item/page in bookmarks' array
const pageIndexInBookmarks = bookmarks.value.findIndex(i => i.route === item.route)
// If index is > -1 => Item is bookmarked => Remove item from bookmarks array using index
// Else => Item is not bookmarked => Add item to bookmarks' array
if (pageIndexInBookmarks > -1) {
bookmarks.value[pageIndexInBookmarks].isBookmarked = false
bookmarks.value.splice(pageIndexInBookmarks, 1)
} else {
bookmarks.value.push(item)
bookmarks.value[bookmarks.value.length - 1].isBookmarked = true
}
}
return {
bookmarks,
perfectScrollbarSettings,
currentSelected,
suggestionSelected,
toggleBookmarked,
// AutoSuggest
searchQuery,
resetsearchQuery,
filteredData,
}
},
}
</script>
<style lang="scss" scoped>
@import '~@core/scss/base/bootstrap-extended/include';
ul
{
list-style: none;
padding: 0;
margin: 0;
}
p {
margin: 0;
}
.nav-bookmar-content-overlay {
position: fixed;
opacity: 0;
width: 100%;
height: 100%;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
-webkit-transition: all 0.7s;
transition: all 0.7s;
z-index: -1;
&:not(.show) {
pointer-events: none;
}
&.show {
cursor: pointer;
z-index: 10;
opacity: 1;
}
}
</style>

View File

@ -0,0 +1,177 @@
<template>
<b-nav-item-dropdown
class="dropdown-cart mr-25"
menu-class="dropdown-menu-media"
right
@show="fetchItems"
>
<template #button-content>
<feather-icon
:badge="$store.state['app-ecommerce'].cartItemsCount"
class="text-body"
icon="ShoppingCartIcon"
size="21"
/>
</template>
<!-- Header -->
<li class="dropdown-menu-header">
<div class="dropdown-header d-flex">
<h4 class="notification-title mb-0 mr-auto">
My Cart
</h4>
<b-badge
pill
variant="light-primary"
>
{{ $store.state['app-ecommerce'].cartItemsCount }} Items
</b-badge>
</div>
</li>
<!-- Cart Items -->
<vue-perfect-scrollbar
v-if="items.length"
:settings="perfectScrollbarSettings"
class="scrollable-container media-list scroll-area"
tagname="li"
>
<b-media
v-for="item in items"
:key="item.name"
>
<template #aside>
<b-img
:src="item.image"
:alt="item.name"
rounded
width="62px"
/>
</template>
<feather-icon
icon="XIcon"
class="cart-item-remove cursor-pointer"
@click.stop="removeItemFromCart(item.id)"
/>
<div class="media-heading">
<h6 class="cart-item-title">
<b-link class="text-body">
{{ item.name }}
</b-link>
</h6>
<small class="cart-item-by">By {{ item.brand }}</small>
</div>
<div class="cart-item-qty ml-1">
<b-form-spinbutton
v-model="item.qty"
min="1"
size="sm"
/>
</div>
<h5 class="cart-item-price">
${{ item.price }}
</h5>
</b-media>
</vue-perfect-scrollbar>
<!-- Cart Footer -->
<li
v-if="items.length"
class="dropdown-menu-footer"
>
<div class="d-flex justify-content-between mb-1">
<h6 class="font-weight-bolder mb-0">
Total:
</h6>
<h6 class="text-primary font-weight-bolder mb-0">
${{ totalAmount }}
</h6>
</div>
<b-button
v-ripple.400="'rgba(255, 255, 255, 0.15)'"
variant="primary"
block
:to="{ name: 'apps-e-commerce-checkout' }"
>
Checkout
</b-button>
</li>
<p
v-if="!items.length"
class="m-0 p-1 text-center"
>
Your cart is empty
</p>
</b-nav-item-dropdown>
</template>
<script>
// import {
// BNavItemDropdown, BBadge, BMedia, BLink, BImg, BFormSpinbutton, BButton,
// } from 'bootstrap-vue'
// import VuePerfectScrollbar from 'vue-perfect-scrollbar'
// import Ripple from 'vue-ripple-directive'
// export default {
// components: {
// BNavItemDropdown,
// BBadge,
// BMedia,
// BLink,
// BImg,
// BFormSpinbutton,
// VuePerfectScrollbar,
// BButton,
// },
// directives: {
// Ripple,
// },
// data() {
// return {
// items: [],
// perfectScrollbarSettings: {
// maxScrollbarLength: 60,
// wheelPropagation: false,
// },
// }
// },
// computed: {
// totalAmount() {
// let total = 0
// this.items.forEach(i => { total += i.price })
// return total
// },
// },
// methods: {
// fetchItems() {
// this.$store.dispatch('app-ecommerce/fetchCartProducts')
// .then(response => {
// this.items = response.data.products
// })
// },
// removeItemFromCart(productId) {
// this.$store.dispatch('app-ecommerce/removeProductFromCart', { productId })
// .then(() => {
// const itemIndex = this.items.findIndex(p => p.id === productId)
// this.items.splice(itemIndex, 1)
// // Update count in cart items state
// this.$store.commit('app-ecommerce/UPDATE_CART_ITEMS_COUNT', this.items.length)
// })
// },
// },
// }
</script>
<style lang="scss" scoped>
.dropdown-cart {
.media {
.media-aside {
align-items: center;
}
}
}
</style>

View File

@ -0,0 +1,27 @@
<template>
<b-nav-item @click="skin = isDark ? 'light' : 'dark'">
<feather-icon
size="21"
:icon="`${isDark ? 'Sun' : 'Moon'}Icon`"
/>
</b-nav-item>
</template>
<script>
import useAppConfig from '@core/app-config/useAppConfig'
import { computed } from '@vue/composition-api'
import { BNavItem } from 'bootstrap-vue'
export default {
components: {
BNavItem,
},
setup() {
const { skin } = useAppConfig()
const isDark = computed(() => skin.value === 'dark')
return { skin, isDark }
},
}
</script>

View File

@ -0,0 +1,83 @@
<template>
<b-nav-item-dropdown
id="dropdown-grouped"
variant="link"
class="dropdown-language"
right
>
<template #button-content>
<b-img
:src="currentLocale.img"
height="14px"
width="22px"
:alt="currentLocale.locale"
/>
<span class="ml-50 text-body">{{ currentLocale.name }}</span>
</template>
<b-dropdown-item
v-for="localeObj in locales"
:key="localeObj.locale"
@click="$i18n.locale = localeObj.locale"
>
<b-img
:src="localeObj.img"
height="14px"
width="22px"
:alt="localeObj.locale"
/>
<span class="ml-50">{{ localeObj.name }}</span>
</b-dropdown-item>
</b-nav-item-dropdown>
</template>
<script>
import { BNavItemDropdown, BDropdownItem, BImg } from 'bootstrap-vue'
export default {
components: {
BNavItemDropdown,
BDropdownItem,
BImg,
},
// ! Need to move this computed property to comp function once we get to Vue 3
computed: {
currentLocale() {
return this.locales.find(l => l.locale === this.$i18n.locale)
},
},
setup() {
/* eslint-disable global-require */
const locales = [
{
locale: 'en',
img: require('@/assets/images/flags/en.png'),
name: 'English',
},
{
locale: 'fr',
img: require('@/assets/images/flags/fr.png'),
name: 'French',
},
{
locale: 'de',
img: require('@/assets/images/flags/de.png'),
name: 'German',
},
{
locale: 'pt',
img: require('@/assets/images/flags/pt.png'),
name: 'Portuguese',
},
]
/* eslint-disable global-require */
return {
locales,
}
},
}
</script>
<style>
</style>

View File

@ -0,0 +1,189 @@
<template>
<b-nav-item-dropdown
class="dropdown-notification mr-25"
menu-class="dropdown-menu-media"
right
>
<template #button-content>
<feather-icon
badge="6"
badge-classes="bg-danger"
class="text-body"
icon="BellIcon"
size="21"
/>
</template>
<!-- Header -->
<li class="dropdown-menu-header">
<div class="dropdown-header d-flex">
<h4 class="notification-title mb-0 mr-auto">
Notifications
</h4>
<b-badge
pill
variant="light-primary"
>
6 New
</b-badge>
</div>
</li>
<!-- Notifications -->
<vue-perfect-scrollbar
v-once
:settings="perfectScrollbarSettings"
class="scrollable-container media-list scroll-area"
tagname="li"
>
<!-- Account Notification -->
<b-link
v-for="notification in notifications"
:key="notification.subtitle"
>
<b-media>
<template #aside>
<b-avatar
size="32"
:src="notification.avatar"
:text="notification.avatar"
:variant="notification.type"
/>
</template>
<p class="media-heading">
<span class="font-weight-bolder">
{{ notification.title }}
</span>
</p>
<small class="notification-text">{{ notification.subtitle }}</small>
</b-media>
</b-link>
<!-- System Notification Toggler -->
<div class="media d-flex align-items-center">
<h6 class="font-weight-bolder mr-auto mb-0">
System Notifications
</h6>
<b-form-checkbox
:checked="true"
switch
/>
</div>
<!-- System Notifications -->
<b-link
v-for="notification in systemNotifications"
:key="notification.subtitle"
>
<b-media>
<template #aside>
<b-avatar
size="32"
:variant="notification.type"
>
<feather-icon :icon="notification.icon" />
</b-avatar>
</template>
<p class="media-heading">
<span class="font-weight-bolder">
{{ notification.title }}
</span>
</p>
<small class="notification-text">{{ notification.subtitle }}</small>
</b-media>
</b-link>
</vue-perfect-scrollbar>
<!-- Cart Footer -->
<li class="dropdown-menu-footer"><b-button
v-ripple.400="'rgba(255, 255, 255, 0.15)'"
variant="primary"
block
>Read all notifications</b-button>
</li>
</b-nav-item-dropdown>
</template>
<script>
import {
BNavItemDropdown, BBadge, BMedia, BLink, BAvatar, BButton, BFormCheckbox,
} from 'bootstrap-vue'
import VuePerfectScrollbar from 'vue-perfect-scrollbar'
import Ripple from 'vue-ripple-directive'
export default {
components: {
BNavItemDropdown,
BBadge,
BMedia,
BLink,
BAvatar,
VuePerfectScrollbar,
BButton,
BFormCheckbox,
},
directives: {
Ripple,
},
setup() {
/* eslint-disable global-require */
const notifications = [
{
title: 'Congratulation Sam 🎉',
avatar: require('@/assets/images/avatars/6-small.png'),
subtitle: 'Won the monthly best seller badge',
type: 'light-success',
},
{
title: 'New message received',
avatar: require('@/assets/images/avatars/9-small.png'),
subtitle: 'You have 10 unread messages',
type: 'light-info',
},
{
title: 'Revised Order 👋',
avatar: 'MD',
subtitle: 'MD Inc. order updated',
type: 'light-danger',
},
]
/* eslint-disable global-require */
const systemNotifications = [
{
title: 'Server down',
subtitle: 'USA Server is down due to hight CPU usage',
type: 'light-danger',
icon: 'XIcon',
},
{
title: 'Sales report generated',
subtitle: 'Last month sales report generated',
type: 'light-success',
icon: 'CheckIcon',
},
{
title: 'High memory usage',
subtitle: 'BLR Server using high memory',
type: 'light-warning',
icon: 'AlertTriangleIcon',
},
]
const perfectScrollbarSettings = {
maxScrollbarLength: 60,
wheelPropagation: false,
}
return {
notifications,
systemNotifications,
perfectScrollbarSettings,
}
},
}
</script>
<style>
</style>

View File

@ -0,0 +1,311 @@
<template>
<li class="nav-item nav-search">
<!-- Icon -->
<a
href="javascript:void(0)"
class="nav-link nav-link-search"
@click="showSearchBar = true"
>
<feather-icon
icon="SearchIcon"
size="21"
/>
</a>
<!-- Input -->
<div
class="search-input"
:class="{'open': showSearchBar}"
>
<div class="search-input-icon">
<feather-icon icon="SearchIcon" />
</div>
<!-- <input type="text" placeholder="Explore Vuexy...." class="form-control-input"> -->
<!-- @keyup.esc="escPressed" -->
<!-- @keyup.enter="suggestionSelected" -->
<b-form-input
v-if="showSearchBar"
v-model="searchQuery"
placeholder="Explore Vuexy"
autofocus
autocomplete="off"
@keyup.up="increaseIndex(false)"
@keyup.down="increaseIndex"
@keyup.esc="showSearchBar = false; resetsearchQuery()"
@keyup.enter="suggestionSelected"
@blur.stop="showSearchBar = false; resetsearchQuery()"
/>
<div
class="search-input-close"
@click="showSearchBar = false; resetsearchQuery()"
>
<feather-icon icon="XIcon" />
</div>
<!-- Suggestions List -->
<vue-perfect-scrollbar
:settings="perfectScrollbarSettings"
class="search-list search-list-main scroll-area overflow-hidden"
:class="{'show': searchQuery}"
tagname="ul"
>
<li
v-for="(suggestion_list, grp_name, grp_index) in filteredData"
:key="grp_index"
class="suggestions-groups-list"
>
<!-- Group Header -->
<p class="suggestion-group-title">
<span>
{{ title(grp_name) }}
</span>
</p>
<!-- Suggestion List of each group -->
<ul>
<li
v-for="(suggestion, index) in suggestion_list"
:key="index"
class="suggestion-group-suggestion cursor-pointer"
:class="{'suggestion-current-selected': currentSelected === `${grp_index}.${index}`}"
@mouseenter="currentSelected = `${grp_index}.${index}`"
@mousedown.prevent="suggestionSelected(grp_name, suggestion)"
>
<b-link
v-if="grp_name === 'pages'"
class="p-0"
>
<feather-icon
:icon="suggestion.icon"
class="mr-75"
/>
<span class="align-middle">{{ suggestion.title }}</span>
</b-link>
<template v-else-if="grp_name === 'files'">
<div class="d-flex align-items-center">
<b-img
:src="suggestion.icon"
class="mr-1"
height="32"
/>
<div>
<p>{{ suggestion.file_name }}</p>
<small>by {{ suggestion.from }}</small>
</div>
<small class="ml-auto">{{ suggestion.size }}</small>
</div>
</template>
<template v-else-if="grp_name === 'contacts'">
<div class="d-flex align-items-center">
<b-avatar
:src="suggestion.img"
class="mr-1"
size="32"
/>
<div>
<p>{{ suggestion.name }}</p>
<small>{{ suggestion.email }}</small>
</div>
<small class="ml-auto">{{ suggestion.time }}</small>
</div>
</template>
</li>
<li
v-if="!suggestion_list.length && searchQuery"
class="suggestion-group-suggestion no-results"
>
<p>No Results Found.</p>
</li>
</ul>
</li>
</vue-perfect-scrollbar>
</div>
</li>
</template>
<script>
import {
BFormInput, BLink, BImg, BAvatar,
} from 'bootstrap-vue'
import { ref, watch } from '@vue/composition-api'
import VuePerfectScrollbar from 'vue-perfect-scrollbar'
import useAutoSuggest from '@core/components/app-auto-suggest/useAutoSuggest'
import { title } from '@core/utils/filter'
import router from '@/router'
import store from '@/store'
import searchAndBookmarkData from '../search-and-bookmark-data'
export default {
components: {
BFormInput,
BLink,
BImg,
BAvatar,
VuePerfectScrollbar,
},
setup() {
const showSearchBar = ref(false)
const perfectScrollbarSettings = {
maxScrollbarLength: 60,
}
const suggestionSelected = (grpName, suggestion) => {
// If parameter is not provided => Use current selected
if (!suggestion) {
// If currentSelected value is -1 => No value/item is selected (Prevent Errors)
/* eslint-disable no-use-before-define, no-param-reassign */
if (currentSelected.value !== -1) {
/* eslint-disable no-use-before-define, no-param-reassign */
const [grpIndex, itemIndex] = currentSelected.value.split('.')
grpName = Object.keys(filteredData.value)[grpIndex]
suggestion = filteredData.value[grpName][itemIndex]
/* eslint-enable */
}
}
if (grpName === 'pages') router.push(suggestion.route).catch(() => {})
// eslint-disable-next-line no-use-before-define
resetsearchQuery()
showSearchBar.value = false
}
const {
searchQuery,
resetsearchQuery,
filteredData,
} = useAutoSuggest({ data: searchAndBookmarkData, searchLimit: 4 })
watch(searchQuery, val => {
store.commit('app/TOGGLE_OVERLAY', Boolean(val))
})
const currentSelected = ref(-1)
watch(filteredData, val => {
if (!Object.values(val).some(obj => obj.length)) {
currentSelected.value = -1
} else {
// Auto Select first item if it's not item-404
let grpIndex = null
// eslint-disable-next-line no-restricted-syntax
for (const [index, grpSuggestions] of Object.values(val).entries()) {
if (grpSuggestions.length) {
grpIndex = index
break
}
}
if (grpIndex !== null) currentSelected.value = `${grpIndex}.0`
}
})
const increaseIndex = (val = true) => {
/* eslint-disable no-lonely-if, no-plusplus */
// If there's no matching items
if (!Object.values(filteredData.value).some(grpItems => grpItems.length)) return
const [grpIndex, itemIndex] = currentSelected.value.split('.')
const grpArr = Object.entries(filteredData.value)
const activeGrpTotalItems = grpArr[grpIndex][1].length
if (val) {
// If active item is not of last item in grp
if (activeGrpTotalItems - 1 > itemIndex) {
currentSelected.value = `${grpIndex}.${Number(itemIndex) + 1}`
// If active item grp is not last in grp list
} else if (grpIndex < grpArr.length - 1) {
for (let i = Number(grpIndex) + 1; i < grpArr.length; i++) {
// If navigating group have items => Then move in that group
if (grpArr[i][1].length > 0) {
currentSelected.value = `${Number(i)}.0`
break
}
}
}
} else {
// If active item is not of first item in grp
if (Number(itemIndex)) {
currentSelected.value = `${grpIndex}.${Number(itemIndex) - 1}`
// If active item grp is not first in grp list
} else if (Number(grpIndex)) {
for (let i = Number(grpIndex) - 1; i >= 0; i--) {
// If navigating group have items => Then move in that group
if (grpArr[i][1].length > 0) {
currentSelected.value = `${i}.${grpArr[i][1].length - 1}`
break
}
}
}
}
/* eslint-enable no-lonely-if, no-plusplus */
}
return {
showSearchBar,
perfectScrollbarSettings,
searchAndBookmarkData,
title,
suggestionSelected,
currentSelected,
increaseIndex,
// AutoSuggest
searchQuery,
resetsearchQuery,
filteredData,
}
},
}
</script>
<style lang="scss" scoped>
@import '~@core/scss/base/bootstrap-extended/include';
@import '~@core/scss/base/components/variables-dark';
ul
{
list-style: none;
padding: 0;
margin: 0;
}
p {
margin: 0;
}
/* .app-auto-suggest {
position: relative;
}
.auto-suggest-suggestions-list {
box-shadow: 0 4px 24px 0 rgba(34, 41, 47, 0.1);
border-radius: 6px;
position: absolute;
top: calc(100% + 1rem);
background-color: white;
width: 100%;
} */
.suggestion-group-title {
font-weight: 500;
padding: .75rem 1rem .25rem;
}
.suggestion-group-suggestion {
padding: .75rem 1rem
}
.suggestion-current-selected {
background-color: $body-bg;
.dark-layout & {
background-color: $theme-dark-body-bg;
}
}
</style>

View File

@ -0,0 +1,162 @@
<template>
<b-nav-item-dropdown
right
toggle-class="d-flex align-items-center dropdown-user-link"
class="dropdown-user"
>
<template #button-content>
<div class="d-sm-flex d-none user-nav">
<p class="user-name font-weight-bolder mb-0">
{{ userData.fullName || userData.username }}
</p>
<span class="user-status">{{ userData.role }}</span>
</div>
<b-avatar
size="40"
:src="userData.avatar"
variant="light-primary"
badge
class="badge-minimal"
badge-variant="success"
>
<feather-icon
v-if="!userData.fullName"
icon="UserIcon"
size="22"
/>
</b-avatar>
</template>
<b-dropdown-item
:to="{ name: 'pages-profile'}"
link-class="d-flex align-items-center"
>
<feather-icon
size="16"
icon="UserIcon"
class="mr-50"
/>
<span>Profile</span>
</b-dropdown-item>
<b-dropdown-item
:to="{ name: 'apps-email' }"
link-class="d-flex align-items-center"
>
<feather-icon
size="16"
icon="MailIcon"
class="mr-50"
/>
<span>Inbox</span>
</b-dropdown-item>
<b-dropdown-item
:to="{ name: 'apps-todo' }"
link-class="d-flex align-items-center"
>
<feather-icon
size="16"
icon="CheckSquareIcon"
class="mr-50"
/>
<span>Task</span>
</b-dropdown-item>
<b-dropdown-item
:to="{ name: 'apps-chat' }"
link-class="d-flex align-items-center"
>
<feather-icon
size="16"
icon="MessageSquareIcon"
class="mr-50"
/>
<span>Chat</span>
</b-dropdown-item>
<b-dropdown-divider />
<b-dropdown-item
:to="{ name: 'pages-account-setting' }"
link-class="d-flex align-items-center"
>
<feather-icon
size="16"
icon="SettingsIcon"
class="mr-50"
/>
<span>Settings</span>
</b-dropdown-item>
<b-dropdown-item
:to="{ name: 'pages-pricing' }"
link-class="d-flex align-items-center"
>
<feather-icon
size="16"
icon="CreditCardIcon"
class="mr-50"
/>
<span>Pricing</span>
</b-dropdown-item>
<b-dropdown-item
:to="{ name: 'pages-faq' }"
link-class="d-flex align-items-center"
>
<feather-icon
size="16"
icon="HelpCircleIcon"
class="mr-50"
/>
<span>FAQ</span>
</b-dropdown-item>
<b-dropdown-item
link-class="d-flex align-items-center"
@click="logout"
>
<feather-icon
size="16"
icon="LogOutIcon"
class="mr-50"
/>
<span>Logout</span>
</b-dropdown-item></b-nav-item-dropdown>
</template>
<script>
import {
BNavItemDropdown, BDropdownItem, BDropdownDivider, BAvatar,
} from 'bootstrap-vue'
import { initialAbility } from '@/libs/acl/config'
import useJwt from '@/auth/jwt/useJwt'
import { avatarText } from '@core/utils/filter'
export default {
components: {
BNavItemDropdown,
BDropdownItem,
BDropdownDivider,
BAvatar,
},
data() {
return {
userData: JSON.parse(localStorage.getItem('userData')),
avatarText,
}
},
methods: {
logout() {
// Remove userData from localStorage
// ? You just removed token from localStorage. If you like, you can also make API call to backend to blacklist used token
localStorage.removeItem(useJwt.jwtConfig.storageTokenKeyName)
localStorage.removeItem(useJwt.jwtConfig.storageRefreshTokenKeyName)
// Remove userData from localStorage
localStorage.removeItem('userData')
// Reset ability
this.$ability.update(initialAbility)
// Redirect to login page
this.$router.push({ name: 'auth-login' })
},
},
}
</script>

View File

@ -0,0 +1,295 @@
/* eslint-disable */
// prettier-ignore
export default {
pages: {
key: 'title',
data: [
{ title: 'Access Control', route: { name: 'access-control' }, icon: 'ShieldIcon', isBookmarked: false },
{ title: 'Account Settings', route: { name: 'pages-account-setting' }, icon: 'SettingsIcon', isBookmarked: false },
{ title: 'Advance Card', route: { name: 'card-advance' }, icon: 'CreditCardIcon', isBookmarked: false },
{ title: 'Alerts', route: { name: 'components-alert' }, icon: 'AlertTriangleIcon', isBookmarked: false },
{ title: 'Analytics Cards', route: { name: 'card-analytic' }, icon: 'CreditCardIcon', isBookmarked: false },
{ title: 'Apex Chart', route: { name: 'charts-apex-chart' }, icon: 'PieChartIcon', isBookmarked: false },
{ title: 'Aspect', route: { name: 'components-aspect' }, icon: 'AirplayIcon', isBookmarked: false },
{ title: 'Auto Suggest', route: { name: 'extensions-auto-suggest' }, icon: 'AlignLeftIcon', isBookmarked: false },
{ title: 'Avatar', route: { name: 'components-avatar' }, icon: 'UserIcon', isBookmarked: false },
{ title: 'Badge', route: { name: 'components-badge' }, icon: 'TagIcon', isBookmarked: false },
{ title: 'Basic Card', route: { name: 'card-basic' }, icon: 'CreditCardIcon', isBookmarked: false },
{ title: 'Blog Detail', route: { name: 'pages-blog-detail', params: { id: 1 } }, icon: 'FileTextIcon', isBookmarked: false },
{ title: 'Blog Edit', route: { name: 'pages-blog-edit', params: { id: 1 } }, icon: 'FileTextIcon', isBookmarked: false },
{ title: 'Blog List', route: { name: 'pages-blog-list' }, icon: 'FileTextIcon', isBookmarked: false },
{ title: 'Breadcrumb', route: { name: 'components-breadcrumb' }, icon: 'HomeIcon', isBookmarked: false },
{ title: 'BS Table', route: { name: 'table-bs-table' }, icon: 'GridIcon', isBookmarked: false },
{ title: 'Button Group', route: { name: 'components-button-group' }, icon: 'BoldIcon', isBookmarked: false },
{ title: 'Button Toolbar', route: { name: 'components-button-toolbar' }, icon: 'BoldIcon', isBookmarked: false },
{ title: 'Button', route: { name: 'components-button' }, icon: 'BoldIcon', isBookmarked: false },
{ title: 'Calendar App', route: { name: 'apps-calendar' }, icon: 'CalendarIcon', isBookmarked: true },
{ title: 'Calendar Component', route: { name: 'components-calendar' }, icon: 'CalendarIcon', isBookmarked: false },
{ title: 'Card Actions', route: { name: 'card-action' }, icon: 'CreditCardIcon', isBookmarked: false },
{ title: 'Carousel', route: { name: 'components-carousel' }, icon: 'CopyIcon', isBookmarked: false },
{ title: 'Chartjs', route: { name: 'charts-chartjs' }, icon: 'PieChartIcon', isBookmarked: false },
{ title: 'Chat', route: { name: 'apps-chat' }, icon: 'MessageSquareIcon', isBookmarked: true },
{ title: 'Checkbox', route: { name: 'forms-element-checkbox' }, icon: 'CheckSquareIcon', isBookmarked: false },
{ title: 'Checkout', route: { name: 'apps-e-commerce-checkout' }, icon: 'DollarSignIcon', isBookmarked: false },
{ title: 'Clipboard', route: { name: 'extensions-clipboard' }, icon: 'ClipboardIcon', isBookmarked: false },
{ title: 'Collapse', route: { name: 'components-collapse' }, icon: 'PlusIcon', isBookmarked: false },
{ title: 'Colors', route: { name: 'ui-colors' }, icon: 'DropletIcon', isBookmarked: false },
{ title: 'Coming Soon', route: { name: 'misc-coming-soon' }, icon: 'ClockIcon', isBookmarked: false },
{ title: 'Context Menu', route: { name: 'extensions-context-menu' }, icon: 'MoreVerticalIcon', isBookmarked: false },
{ title: 'Dashboard Analytics', route: { name: 'dashboard-analytics' }, icon: 'ActivityIcon', isBookmarked: false },
{ title: 'Dashboard ECommerce', route: { name: 'dashboard-ecommerce' }, icon: 'ShoppingCartIcon', isBookmarked: false },
{ title: 'Date Time Picker', route: { name: 'extensions-date-time-picker' }, icon: 'ClockIcon', isBookmarked: false },
{ title: 'Drag & Drop', route: { name: 'extensions-drag-and-drop' }, icon: 'CopyIcon', isBookmarked: false },
{ title: 'Dropdown', route: { name: 'components-dropdown' }, icon: 'MoreHorizontalIcon', isBookmarked: false },
{ title: 'Echart', route: { name: 'charts-echart' }, icon: 'PieChartIcon', isBookmarked: false },
{ title: 'Email', route: { name: 'apps-email' }, icon: 'MailIcon', isBookmarked: true },
{ title: 'Embed', route: { name: 'components-embed' }, icon: 'TvIcon', isBookmarked: false },
{ title: 'Error 404', route: { name: 'error-404' }, icon: 'AlertTriangleIcon', isBookmarked: false },
{ title: 'Error', route: { name: 'misc-error' }, icon: 'AlertTriangleIcon', isBookmarked: false },
{ title: 'FAQ', route: { name: 'pages-faq' }, icon: 'HelpCircleIcon', isBookmarked: false },
{ title: 'Feather', route: { name: 'ui-feather' }, icon: 'FeatherIcon', isBookmarked: false },
{ title: 'File Input', route: { name: 'forms-element-file-input' }, icon: 'FileIcon', isBookmarked: false },
{ title: 'Forgot Password V1', route: { name: 'auth-forgot-password-v1' }, icon: 'KeyIcon', isBookmarked: false },
{ title: 'Forgot Password V2', route: { name: 'auth-forgot-password-v2' }, icon: 'KeyIcon', isBookmarked: false },
{ title: 'Form Datepicker', route: { name: 'forms-element-datepicker' }, icon: 'ClockIcon', isBookmarked: false },
{ title: 'Form Layout', route: { name: 'form-layout' }, icon: 'GridIcon', isBookmarked: false },
{ title: 'Form Rating', route: { name: 'forms-element-rating' }, icon: 'StarIcon', isBookmarked: false },
{ title: 'Form Repeater', route: { name: 'form-repeater' }, icon: 'StarIcon', isBookmarked: false },
{ title: 'Form Tag', route: { name: 'forms-element-tag' }, icon: 'TagIcon', isBookmarked: false },
{ title: 'Form Timepicker', route: { name: 'forms-element-timepicker' }, icon: 'ClockIcon', isBookmarked: false },
{ title: 'Form Validation', route: { name: 'form-validation' }, icon: 'CheckCircleIcon', isBookmarked: false },
{ title: 'Form Wizard', route: { name: 'form-wizard' }, icon: 'GitCommitIcon', isBookmarked: false },
{ title: 'Good Table', route: { name: 'table-good-table' }, icon: 'GridIcon', isBookmarked: false },
{ title: 'I18n', route: { name: 'extensions-i18n' }, icon: 'GlobeIcon', isBookmarked: false },
{ title: 'Image', route: { name: 'components-image' }, icon: 'ImageIcon', isBookmarked: false },
{ title: 'Input Group', route: { name: 'forms-element-input-group' }, icon: 'TypeIcon', isBookmarked: false },
{ title: 'Input Mask', route: { name: 'forms-element-input-mask' }, icon: 'TypeIcon', isBookmarked: false },
{ title: 'Input', route: { name: 'forms-element-input' }, icon: 'TypeIcon', isBookmarked: false },
{ title: 'Invoice Add', route: { name: 'apps-invoice-add' }, icon: 'FileTextIcon', isBookmarked: false },
{ title: 'Invoice Edit', route: { name: 'apps-invoice-edit', params: { id: 4987 } }, icon: 'FileTextIcon', isBookmarked: false },
{ title: 'Invoice List', route: { name: 'apps-invoice-list' }, icon: 'FileTextIcon', isBookmarked: false },
{ title: 'Invoice Preview', route: { name: 'apps-invoice-preview', params: { id: 4987 } }, icon: 'FileTextIcon', isBookmarked: false },
{ title: 'Knowledge Base Category', route: { name: 'pages-knowledge-base-category' }, icon: 'InfoIcon', isBookmarked: false, },
{ title: 'Knowledge Base Question', route: { name: 'pages-knowledge-base-question' }, icon: 'InfoIcon', isBookmarked: false, },
{ title: 'Knowledge Base', route: { name: 'pages-knowledge-base' }, icon: 'InfoIcon', isBookmarked: false },
{ title: 'Leaflet', route: { name: 'maps-leaflet' }, icon: 'MapPinIcon', isBookmarked: false },
{ title: 'List Group', route: { name: 'components-list-group' }, icon: 'ListIcon', isBookmarked: false },
{ title: 'Login V1', route: { name: 'auth-login-v1' }, icon: 'LogInIcon', isBookmarked: false },
{ title: 'Login V2', route: { name: 'auth-login-v2' }, icon: 'LogInIcon', isBookmarked: false },
{ title: 'Media Objects', route: { name: 'components-media' }, icon: 'ImageIcon', isBookmarked: false },
{ title: 'Modal', route: { name: 'components-modal' }, icon: 'CopyIcon', isBookmarked: false },
{ title: 'Nav', route: { name: 'components-nav' }, icon: 'CreditCardIcon', isBookmarked: false },
{ title: 'Not Authorized', route: { name: 'misc-not-authorized' }, icon: 'XOctagonIcon', isBookmarked: false },
{ title: 'Overlay', route: { name: 'components-overlay' }, icon: 'CopyIcon', isBookmarked: false },
{ title: 'Pagination Nav', route: { name: 'components-pagination-nav' }, icon: 'HashIcon', isBookmarked: false },
{ title: 'Pagination', route: { name: 'components-pagination' }, icon: 'HashIcon', isBookmarked: false },
{ title: 'Pill Badge', route: { name: 'components-pill-badge' }, icon: 'TagIcon', isBookmarked: false },
{ title: 'Pill', route: { name: 'components-pill' }, icon: 'TagIcon', isBookmarked: false },
{ title: 'Popover', route: { name: 'components-popover' }, icon: 'TagIcon', isBookmarked: false },
{ title: 'Pricing', route: { name: 'pages-pricing' }, icon: 'DollarSignIcon', isBookmarked: false },
{ title: 'Product Details', route: { name: 'apps-e-commerce-product-details', params: { slug: 'apple-watch-series-5-27' } }, icon: 'BoxIcon', isBookmarked: false, },
{ title: 'Profile', route: { name: 'pages-profile' }, icon: 'UserIcon', isBookmarked: false },
{ title: 'Progress', route: { name: 'components-progress' }, icon: 'ChevronsRightIcon', isBookmarked: false },
{ title: 'Quill Editor', route: { name: 'extensions-quill-editor' }, icon: 'TypeIcon', isBookmarked: false },
{ title: 'Radio', route: { name: 'forms-element-radio' }, icon: 'DiscIcon', isBookmarked: false },
{ title: 'Register V1', route: { name: 'auth-register-v1' }, icon: 'UserPlusIcon', isBookmarked: false },
{ title: 'Register V2', route: { name: 'auth-register-v2' }, icon: 'UserPlusIcon', isBookmarked: false },
{ title: 'Reset Password V1', route: { name: 'auth-reset-password-v1' }, icon: 'KeyIcon', isBookmarked: false },
{ title: 'Reset Password V2', route: { name: 'auth-reset-password-v2' }, icon: 'KeyIcon', isBookmarked: false },
{ title: 'Select', route: { name: 'forms-element-select' }, icon: 'AlignCenterIcon', isBookmarked: false },
{ title: 'Shop', route: { name: 'apps-e-commerce-shop' }, icon: 'ArchiveIcon', isBookmarked: false },
{ title: 'Sidebar', route: { name: 'components-sidebar' }, icon: 'SidebarIcon', isBookmarked: false },
{ title: 'Slider', route: { name: 'extensions-slider' }, icon: 'GitCommitIcon', isBookmarked: false },
{ title: 'Spinbutton', route: { name: 'forms-element-spinbutton' }, icon: 'TypeIcon', isBookmarked: false },
{ title: 'Spinner', route: { name: 'components-spinner' }, icon: 'LoaderIcon', isBookmarked: false },
{ title: 'Statistics Cards', route: { name: 'card-statistic' }, icon: 'CreditCardIcon', isBookmarked: false },
{ title: 'Sweet Alert', route: { name: 'extensions-sweet-alert' }, icon: 'BellIcon', isBookmarked: false },
{ title: 'Swiper', route: { name: 'extensions-swiper' }, icon: 'ImageIcon', isBookmarked: false },
{ title: 'Switch', route: { name: 'forms-element-switch' }, icon: 'ToggleRightIcon', isBookmarked: false },
{ title: 'Tab', route: { name: 'components-tab' }, icon: 'CreditCardIcon', isBookmarked: false },
{ title: 'Textarea', route: { name: 'forms-element-textarea' }, icon: 'TypeIcon', isBookmarked: false },
{ title: 'Time', route: { name: 'components-time' }, icon: 'ClockIcon', isBookmarked: false },
{ title: 'Timeline', route: { name: 'components-timeline' }, icon: 'GitCommitIcon', isBookmarked: false },
{ title: 'Toastification', route: { name: 'extensions-toastification' }, icon: 'BellIcon', isBookmarked: false },
{ title: 'Toasts', route: { name: 'components-toasts' }, icon: 'BellIcon', isBookmarked: false },
{ title: 'Todo', route: { name: 'apps-todo' }, icon: 'CheckSquareIcon', isBookmarked: true },
{ title: 'Tooltip', route: { name: 'components-tooltip' }, icon: 'CopyIcon', isBookmarked: false },
{ title: 'Tour', route: { name: 'extensions-tour' }, icon: 'GlobeIcon', isBookmarked: false },
// { title: 'Tree', route: { name: 'extensions-tree' }, icon: 'GitCommitIcon', isBookmarked: false },
{ title: 'Typography', route: { name: 'ui-typography' }, icon: 'TypeIcon', isBookmarked: false },
{ title: 'Under Maintenance', route: { name: 'misc-under-maintenance' }, icon: 'MonitorIcon', isBookmarked: false },
{ title: 'Users Edit', route: { name: 'apps-users-edit', params: { id: 21 } }, icon: 'UserIcon', isBookmarked: false },
{ title: 'Users List', route: { name: 'apps-users-list' }, icon: 'UserIcon', isBookmarked: false },
{ title: 'Users View', route: { name: 'apps-users-view', params: { id: 21 } }, icon: 'UserIcon', isBookmarked: false },
{ title: 'Vue Select', route: { name: 'extensions-vue-select' }, icon: 'AlignCenterIcon', isBookmarked: false },
{ title: 'Wishlist', route: { name: 'apps-e-commerce-wishlist' }, icon: 'HeartIcon', isBookmarked: false },
],
},
files: {
key: 'file_name',
data: [
{
file_name: "Joe's CV",
from: 'Stacy Watson',
icon: require('@/assets/images/icons/doc.png'),
size: '1.7 mb',
},
{
file_name: 'Passport Image',
from: 'Ben Sinitiere',
icon: require('@/assets/images/icons/jpg.png'),
size: ' 52 kb',
},
{
file_name: 'Questions',
from: 'Charleen Patti',
icon: require('@/assets/images/icons/doc.png'),
size: '1.5 gb',
},
{
file_name: 'Parenting Guide',
from: 'Doyle Blatteau',
icon: require('@/assets/images/icons/doc.png'),
size: '2.3 mb',
},
{
file_name: 'Class Notes',
from: 'Gwen Greenlow',
icon: require('@/assets/images/icons/doc.png'),
size: ' 30 kb',
},
{
file_name: 'Class Attendance',
from: 'Tom Alred',
icon: require('@/assets/images/icons/xls.png'),
size: '52 mb',
},
{
file_name: 'Company Salary',
from: 'Nellie Dezan',
icon: require('@/assets/images/icons/xls.png'),
size: '29 mb',
},
{
file_name: 'Company Logo',
from: 'Steve Sheldon',
icon: require('@/assets/images/icons/jpg.png'),
size: '1.3 mb',
},
{
file_name: 'Crime Rates',
from: 'Sherlock Holmes',
icon: require('@/assets/images/icons/xls.png'),
size: '37 kb',
},
{
file_name: 'Ulysses',
from: 'Theresia Wrenne',
icon: require('@/assets/images/icons/pdf.png'),
size: '7.2 mb',
},
{
file_name: 'War and Peace',
from: 'Goldie Highnote',
icon: require('@/assets/images/icons/pdf.png'),
size: '10.5 mb',
},
{
file_name: 'Vedas',
from: 'Ajay Patel',
icon: require('@/assets/images/icons/pdf.png'),
size: '8.3 mb',
},
{
file_name: 'The Trial',
from: 'Sirena Linkert',
icon: require('@/assets/images/icons/pdf.png'),
size: '1.5 mb',
},
],
},
contacts: {
key: 'name',
data: [
{
img: require('@/assets/images/portrait/small/avatar-s-4.jpg'),
name: 'Rena Brant',
email: 'nephrod@preany.co.uk',
time: '21/05/2019',
},
{
img: require('@/assets/images/portrait/small/avatar-s-2.jpg'),
name: 'Mariano Packard',
email: 'seek@sparaxis.org',
time: '14/01/2018',
},
{
img: require('@/assets/images/portrait/small/avatar-s-24.jpg'),
name: 'Risa Montufar',
email: 'vagary@unblist.org',
time: '10/08/2019',
},
{
img: require('@/assets/images/portrait/small/avatar-s-15.jpg'),
name: 'Maragaret Cimo',
email: 'designed@insanely.net',
time: '01/12/2019',
},
{
img: require('@/assets/images/portrait/small/avatar-s-7.jpg'),
name: 'Jona Prattis',
email: 'unwieldable@unblist.org',
time: '21/05/2019',
},
{
img: require('@/assets/images/portrait/small/avatar-s-5.jpg'),
name: 'Edmond Chicon',
email: 'museist@anaphyte.co.uk',
time: '15/11/2019',
},
{
img: require('@/assets/images/portrait/small/avatar-s-25.jpg'),
name: 'Abbey Darden',
email: 'astema@defectively.co.uk',
time: '07/05/2019',
},
{
img: require('@/assets/images/portrait/small/avatar-s-10.jpg'),
name: 'Seema Moallankamp',
email: 'fernando@storkish.co.uk',
time: '13/08/2017',
},
{
img: require('@/assets/images/portrait/small/avatar-s-2.jpg'),
name: 'Charleen Warmington',
email: 'furphy@cannibal.net',
time: '11/08/1891',
},
{
img: require('@/assets/images/portrait/small/avatar-s-25.jpg'),
name: 'Geri Linch',
email: 'insignia@markab.org',
time: '18/01/2015',
},
{
img: require('@/assets/images/portrait/small/avatar-s-23.jpg'),
name: 'Shellie Muster',
email: 'maxillary@equalize.co.uk',
time: '26/07/2019',
},
{
img: require('@/assets/images/portrait/small/avatar-s-20.jpg'),
name: 'Jesenia Vanbramer',
email: 'hypotony@phonetist.net',
time: '12/09/2017',
},
{
img: require('@/assets/images/portrait/small/avatar-s-23.jpg'),
name: 'Mardell Channey',
email: 'peseta@myrica.com',
time: '11/11/2019',
},
],
},
}
/* eslint-enable */

View File

@ -0,0 +1,52 @@
<template>
<div class="cws-container cws-sidebar-right">
<!-- content -->
<div class="cws-content">
<slot />
</div>
<!-- Sidebar -->
<div class="cws-sidebar">
<slot name="sidebar" />
</div>
</div>
</template>
<script>
export default {
}
</script>
<style lang="scss">
@import '~@core/scss/base/bootstrap-extended/include';
$cws-sidebar-width: 260px;
$gap: 2rem;
.cws-container {
position: relative;
.cws-content {
width: calc(100% - #{$cws-sidebar-width} - #{$gap});
@media (max-width: (map-get($grid-breakpoints, lg))) {
width: 100%;
}
}
.cws-sidebar {
width: 260px;
position: absolute;
right: 0;
top: 0;
@media (max-width: (map-get($grid-breakpoints, lg))) {
margin-top: $gap;
position: static;
width: 100%;
}
}
}
</style>

View File

@ -0,0 +1,47 @@
<template>
<div
class="app-content content"
:class="[{'show-overlay': $store.state.app.shallShowOverlay}, $route.meta.contentClass]"
>
<div class="content-overlay" />
<div class="header-navbar-shadow" />
<div
class="content-wrapper"
:class="contentWidth === 'boxed' ? 'container p-0' : null"
>
<slot name="breadcrumb">
<app-breadcrumb />
</slot>
<div class="content-body">
<transition
:name="routerTransition"
mode="out-in"
>
<slot />
</transition>
</div>
</div>
</div>
</template>
<script>
import AppBreadcrumb from '@core/layouts/components/AppBreadcrumb.vue'
import useAppConfig from '@core/app-config/useAppConfig'
export default {
components: {
AppBreadcrumb,
},
setup() {
const { routerTransition, contentWidth } = useAppConfig()
return {
routerTransition, contentWidth,
}
},
}
</script>
<style>
</style>

View File

@ -0,0 +1,55 @@
<template>
<div
class="app-content content"
:class="[{'show-overlay': $store.state.app.shallShowOverlay}, $route.meta.contentClass]"
>
<div class="content-overlay" />
<div class="header-navbar-shadow" />
<transition
:name="routerTransition"
mode="out-in"
>
<div
class="content-area-wrapper"
:class="contentWidth === 'boxed' ? 'container p-0' : null"
>
<slot name="breadcrumb">
<app-breadcrumb />
</slot>
<portal-target
name="content-renderer-sidebar-left"
slim
/>
<div class="content-right">
<div class="content-wrapper">
<div class="content-body">
<slot />
</div>
</div>
</div>
</div>
</transition>
</div>
</template>
<script>
import AppBreadcrumb from '@core/layouts/components/AppBreadcrumb.vue'
import useAppConfig from '@core/app-config/useAppConfig'
export default {
components: {
AppBreadcrumb,
},
setup() {
const { routerTransition, contentWidth } = useAppConfig()
return {
routerTransition, contentWidth,
}
},
}
</script>
<style>
</style>

View File

@ -0,0 +1,55 @@
<template>
<div
class="app-content content"
:class="[{'show-overlay': $store.state.app.shallShowOverlay}, $route.meta.contentClass]"
>
<div class="content-overlay" />
<div class="header-navbar-shadow" />
<transition
:name="routerTransition"
mode="out-in"
>
<div
class="content-wrapper clearfix"
:class="contentWidth === 'boxed' ? 'container p-0' : null"
>
<slot name="breadcrumb">
<app-breadcrumb />
</slot>
<div class="content-detached content-right">
<div class="content-wrapper">
<div class="content-body">
<slot />
</div>
</div>
</div>
<portal-target
name="content-renderer-sidebar-detached-left"
slim
/>
</div>
</transition>
</div>
</template>
<script>
import AppBreadcrumb from '@core/layouts/components/AppBreadcrumb.vue'
import useAppConfig from '@core/app-config/useAppConfig'
export default {
components: {
AppBreadcrumb,
},
setup() {
const { routerTransition, contentWidth } = useAppConfig()
return {
routerTransition, contentWidth,
}
},
}
</script>
<style>
</style>

View File

@ -0,0 +1,16 @@
<template>
<div :class="contentWidth === 'boxed' ? 'container p-0' : null">
<router-view />
</div>
</template>
<script>
import useAppConfig from '@core/app-config/useAppConfig'
export default {
setup() {
const { contentWidth } = useAppConfig()
return { contentWidth }
},
}
</script>

View File

@ -0,0 +1,216 @@
<template>
<div
class="horizontal-layout"
:class="[layoutClasses]"
:data-col="isNavMenuHidden ? '1-column' : null"
style="height:inherit"
>
<!-- NAVBAR -->
<b-navbar
:style="{
backgroundColor: navbarType === 'static' && scrolledTo && skin === 'light' ? 'white' : null,
boxShadow: navbarType === 'static' && scrolledTo ? 'rgba(0, 0, 0, 0.05) 0px 4px 20px 0px' : null,
}"
:toggleable="false"
class="header-navbar navbar-shadow align-items-center navbar-brand-center navbar-fixed"
:class="{'fixed-top': $store.getters['app/currentBreakPoint'] !== 'xl'}"
>
<slot
name="navbar"
:toggleVerticalMenuActive="toggleVerticalMenuActive"
>
<app-navbar-horizontal-layout-brand />
<app-navbar-horizontal-layout :toggle-vertical-menu-active="toggleVerticalMenuActive" />
</slot>
</b-navbar>
<!--/ NAVBAR -->
<div class="horizontal-menu-wrapper">
<div
v-if="!isNavMenuHidden"
class="header-navbar navbar-expand-sm navbar navbar-horizontal navbar-light navbar-shadow menu-border d-none d-xl-block"
:class="[navbarMenuTypeClass]"
>
<horizontal-nav-menu />
</div>
<!-- Vertical Nav Menu -->
<vertical-nav-menu
:is-vertical-menu-active="isVerticalMenuActive"
:toggle-vertical-menu-active="toggleVerticalMenuActive"
class="d-block d-xl-none"
>
<template #header="slotProps">
<slot
name="vertical-menu-header"
v-bind="slotProps"
/>
</template>
</vertical-nav-menu>
<!-- /Vertical Nav Menu -->
</div>
<!-- Vertical Nav Menu Overlay -->
<div
class="sidenav-overlay"
:class="overlayClasses"
@click="isVerticalMenuActive = false"
/>
<!-- /Vertical Nav Menu Overlay -->
<!-- CONTENT -->
<!-- CONTENT TYPE: Left -->
<transition
:name="routerTransition"
mode="out-in"
>
<component
:is="layoutContentRenderer"
:key="layoutContentRenderer === 'layout-content-renderer-left' ? $route.meta.navActiveLink || $route.name : null"
>
<template
v-for="(index, name) in $scopedSlots"
v-slot:[name]="data"
>
<slot
:name="name"
v-bind="data"
/>
</template>
</component>
</transition>
<!--/ Content -->
<!--/ CONTENT -->
<!-- Footer -->
<footer
class="footer footer-light"
:class="[footerTypeClass]"
>
<slot name="footer">
<app-footer />
</slot>
</footer>
<slot name="customizer" />
</div>
</template>
<script>
import AppBreadcrumb from '@core/layouts/components/AppBreadcrumb.vue'
import AppNavbarHorizontalLayout from '@core/layouts/components/app-navbar/AppNavbarHorizontalLayout.vue'
import AppNavbarHorizontalLayoutBrand from '@core/layouts/components/app-navbar/AppNavbarHorizontalLayoutBrand.vue'
import AppFooter from '@core/layouts/components/AppFooter.vue'
import useAppConfig from '@core/app-config/useAppConfig'
import { BNavbar } from 'bootstrap-vue'
import { useScrollListener } from '@core/comp-functions/misc/event-listeners'
import { onUnmounted } from '@vue/composition-api'
// Content Renderer
import LayoutContentRendererDefault from '@core/layouts/components/layout-content-renderer/LayoutContentRendererDefault.vue'
import LayoutContentRendererLeft from '@core/layouts/components/layout-content-renderer/LayoutContentRendererLeft.vue'
import LayoutContentRendererLeftDetached from '@core/layouts/components/layout-content-renderer/LayoutContentRendererLeftDetached.vue'
import useLayoutHorizontal from './useLayoutHorizontal'
import HorizontalNavMenu from './components/horizontal-nav-menu/HorizontalNavMenu.vue'
// Vertical Menu
/* eslint-disable import/order */
import VerticalNavMenu from '@core/layouts/layout-vertical/components/vertical-nav-menu/VerticalNavMenu.vue'
import useVerticalLayout from '@core/layouts/layout-vertical/useVerticalLayout'
import mixinLayoutHorizontal from './mixinLayoutHorizontal'
/* eslint-enable import/order */
export default {
components: {
AppBreadcrumb,
AppNavbarHorizontalLayout,
AppNavbarHorizontalLayoutBrand,
AppFooter,
HorizontalNavMenu,
BNavbar,
// Content Renderer
LayoutContentRendererDefault,
LayoutContentRendererLeft,
LayoutContentRendererLeftDetached,
// Vertical Menu
VerticalNavMenu,
},
mixins: [mixinLayoutHorizontal],
computed: {
layoutContentRenderer() {
const rendererType = this.$route.meta.contentRenderer
if (rendererType === 'sidebar-left') return 'layout-content-renderer-left'
if (rendererType === 'sidebar-left-detached') return 'layout-content-renderer-left-detached'
return 'layout-content-renderer-default'
},
},
setup() {
const {
skin,
navbarType,
footerType,
routerTransition,
isNavMenuHidden,
} = useAppConfig()
// Vertical Menu
const {
isVerticalMenuActive, toggleVerticalMenuActive, overlayClasses, resizeHandler,
} = useVerticalLayout(navbarType, footerType)
// Resize handler
resizeHandler()
window.addEventListener('resize', resizeHandler)
onUnmounted(() => {
window.removeEventListener('resize', resizeHandler)
})
const {
navbarMenuTypeClass,
layoutClasses,
footerTypeClass,
} = useLayoutHorizontal(navbarType, footerType, isVerticalMenuActive)
// Scroll Listener
const { scrolledTo } = useScrollListener()
return {
// skin
skin,
// Layout
layoutClasses,
// Navbar
navbarType,
navbarMenuTypeClass,
// Menu Hidden
isNavMenuHidden,
// Router Transition
routerTransition,
// Footer
footerTypeClass,
// Scroll Listeners
scrolledTo,
// Vertical Menu
isVerticalMenuActive,
toggleVerticalMenuActive,
overlayClasses,
}
},
}
</script>
<style lang="scss">
@import "~@core/scss/base/themes/bordered-layout.scss";
</style>

View File

@ -0,0 +1,25 @@
<template>
<div class="navbar-container main-menu-content">
<horizontal-nav-menu-items :items="navMenuItems" />
</div>
</template>
<script>
import navMenuItems from '@/navigation/horizontal'
import HorizontalNavMenuItems from './components/horizontal-nav-menu-items/HorizontalNavMenuItems.vue'
export default {
components: {
HorizontalNavMenuItems,
},
setup() {
return {
navMenuItems,
}
},
}
</script>
<style lang="scss">
@import "~@core/scss/base/core/menu/menu-types/horizontal-menu.scss";
</style>

View File

@ -0,0 +1,96 @@
<template>
<li
v-if="canViewVerticalNavMenuGroup(item)"
class="dropdown dropdown-submenu"
:class="{
'show': isOpen,
'disabled': item.disabled,
'sidebar-group-active active open': isActive,
'openLeft': openChildDropdownOnLeft
}"
@mouseenter="() => updateGroupOpen(true)"
@mouseleave="() => updateGroupOpen(false)"
>
<b-link
class="dropdown-item"
href="#"
:class="{'dropdown-toggle': item.children}"
@click="() => updateGroupOpen(!isOpen)"
>
<feather-icon :icon="item.icon || 'CircleIcon'" />
<span class="menu-title">{{ t(item.title) }}</span>
</b-link>
<ul
ref="refChildDropdown"
class="dropdown-menu"
>
<component
:is="resolveNavItemComponent(child)"
v-for="child in item.children"
:key="child.header || child.title"
ref="groupChild"
:item="child"
/>
</ul>
</li>
</template>
<script>
import { BLink } from 'bootstrap-vue'
import { resolveHorizontalNavMenuItemComponent as resolveNavItemComponent } from '@core/layouts/utils'
import { useUtils as useI18nUtils } from '@core/libs/i18n'
import { useUtils as useAclUtils } from '@core/libs/acl'
import HorizontalNavMenuLink from '../horizontal-nav-menu-link/HorizontalNavMenuLink.vue'
// Composition Function
import useHorizontalNavMenuGroup from './useHorizontalNavMenuGroup'
import mixinHorizontalNavMenuGroup from './mixinHorizontalNavMenuGroup'
export default {
name: 'HorizontalNavMenuGroup',
components: {
HorizontalNavMenuLink,
BLink,
},
mixins: [mixinHorizontalNavMenuGroup],
props: {
item: {
type: Object,
required: true,
},
},
setup(props) {
const {
refChildDropdown,
isActive,
isOpen,
updateGroupOpen,
updateIsActive,
openChildDropdownOnLeft,
} = useHorizontalNavMenuGroup(props.item)
const { t } = useI18nUtils()
const { canViewVerticalNavMenuGroup } = useAclUtils()
return {
refChildDropdown,
openChildDropdownOnLeft,
resolveNavItemComponent,
isOpen,
isActive,
updateGroupOpen,
updateIsActive,
// ACL
canViewVerticalNavMenuGroup,
// i18n
t,
}
},
}
</script>
<style>
</style>

View File

@ -0,0 +1,10 @@
export default {
watch: {
$route: {
immediate: true,
handler() {
this.updateIsActive()
},
},
},
}

View File

@ -0,0 +1,61 @@
// eslint-disable-next-line object-curly-newline
import { ref, nextTick } from '@vue/composition-api'
// import store from '@/store'
import { isNavGroupActive } from '@core/layouts/utils'
export default function useHorizontalNavMenuGroup(item) {
// ------------------------------------------------
// childDropdown
// ------------------------------------------------
const refChildDropdown = ref(null)
const openChildDropdownOnLeft = ref(false)
// ------------------------------------------------
// isActive
// ------------------------------------------------
const isOpen = ref(false)
const updateGroupOpen = val => {
isOpen.value = val
if (val) {
nextTick(() => {
const childDropdownWidth = refChildDropdown.value.offsetWidth
const windowContentWidth = window.innerWidth - 16
const { left: childDropdownLeft } = refChildDropdown.value.getBoundingClientRect()
const shallDropLeft = childDropdownLeft + childDropdownWidth - windowContentWidth
openChildDropdownOnLeft.value = shallDropLeft > 0
// Add scroll to child dd if don't have much space
const refChildDropdownTop = refChildDropdown.value.getBoundingClientRect().top
const refChildDropdownHeight = refChildDropdown.value.getBoundingClientRect().height
if (window.innerHeight - refChildDropdownTop - refChildDropdownHeight - 28 < 1) {
const maxHeight = window.innerHeight - refChildDropdownTop - 70
refChildDropdown.value.style.maxHeight = `${maxHeight}px`
refChildDropdown.value.style.overflowY = 'auto'
refChildDropdown.value.style.overflowX = 'hidden'
}
})
} else {
openChildDropdownOnLeft.value = false
}
}
// ------------------------------------------------
// isActive
// ------------------------------------------------
const isActive = ref(false)
const updateIsActive = () => {
isActive.value = isNavGroupActive(item.children)
}
return {
isOpen,
isActive,
updateGroupOpen,
updateIsActive,
refChildDropdown,
openChildDropdownOnLeft,
}
}

View File

@ -0,0 +1,80 @@
<template>
<li
v-if="canViewHorizontalNavMenuHeaderGroup(item)"
class="dropdown nav-item"
:class="{
'sidebar-group-active active open': isActive,
'show': isOpen,
}"
@mouseenter="() => updateGroupOpen(true)"
@mouseleave="() => updateGroupOpen(false)"
>
<b-link class="nav-link dropdown-toggle d-flex align-items-center">
<feather-icon
size="14"
:icon="item.icon"
/>
<span>{{ t(item.header) }}</span>
</b-link>
<ul class="dropdown-menu">
<component
:is="resolveHorizontalNavMenuItemComponent(child)"
v-for="child in item.children"
:key="child.title"
:item="child"
/>
</ul>
</li>
</template>
<script>
import { BLink } from 'bootstrap-vue'
import { resolveHorizontalNavMenuItemComponent } from '@core/layouts/utils'
import { useUtils as useAclUtils } from '@core/libs/acl'
import { useUtils as useI18nUtils } from '@core/libs/i18n'
import useHorizontalNavMenuHeaderGroup from './useHorizontalNavMenuHeaderGroup'
import mixinHorizontalNavMenuHeaderGroup from './mixinHorizontalNavMenuHeaderGroup'
import HorizontalNavMenuGroup from '../horizontal-nav-menu-group/HorizontalNavMenuGroup.vue'
import HorizontalNavMenuLink from '../horizontal-nav-menu-link/HorizontalNavMenuLink.vue'
export default {
components: {
BLink,
HorizontalNavMenuGroup,
HorizontalNavMenuLink,
},
mixins: [mixinHorizontalNavMenuHeaderGroup],
props: {
item: {
type: Object,
required: true,
},
},
setup(props) {
const {
isActive,
updateIsActive,
isOpen,
updateGroupOpen,
} = useHorizontalNavMenuHeaderGroup(props.item)
const { t } = useI18nUtils()
const { canViewHorizontalNavMenuHeaderGroup } = useAclUtils()
return {
isOpen,
isActive,
updateGroupOpen,
updateIsActive,
resolveHorizontalNavMenuItemComponent,
// ACL
canViewHorizontalNavMenuHeaderGroup,
// i18n
t,
}
},
}
</script>

View File

@ -0,0 +1,10 @@
export default {
watch: {
$route: {
immediate: true,
handler() {
this.updateIsActive()
},
},
},
}

View File

@ -0,0 +1,30 @@
import { ref } from '@vue/composition-api'
import { isNavGroupActive } from '@core/layouts/utils'
export default function useHorizontalNavMenuHeaderGroup(item) {
// ------------------------------------------------
// isOpen
// ------------------------------------------------
const isOpen = ref(false)
const updateGroupOpen = val => {
// eslint-disable-next-line no-use-before-define
isOpen.value = val
}
// ------------------------------------------------
// isActive
// ------------------------------------------------
const isActive = ref(false)
const updateIsActive = () => {
isActive.value = isNavGroupActive(item.children)
}
return {
isOpen,
isActive,
updateGroupOpen,
updateIsActive,
}
}

View File

@ -0,0 +1,56 @@
<template>
<li
v-if="canViewHorizontalNavMenuHeaderLink(item)"
class="nav-item"
:class="{'sidebar-group-active active': isActive}"
>
<b-link
class="nav-link"
:to="{ name: item.route }"
>
<feather-icon
size="14"
:icon="item.icon"
/>
<span>{{ t(item.title) }}</span>
</b-link>
</li>
</template>
<script>
import { BLink } from 'bootstrap-vue'
import { useUtils as useI18nUtils } from '@core/libs/i18n'
import { useUtils as useAclUtils } from '@core/libs/acl'
import useHorizontalNavMenuHeaderLink from './useHorizontalNavMenuHeaderLink'
import mixinHorizontalNavMenuHeaderLink from './mixinHorizontalNavMenuHeaderLink'
export default {
components: {
BLink,
},
mixins: [mixinHorizontalNavMenuHeaderLink],
props: {
item: {
type: Object,
required: true,
},
},
setup(props) {
const { isActive, updateIsActive } = useHorizontalNavMenuHeaderLink(props.item)
const { t } = useI18nUtils()
const { canViewHorizontalNavMenuHeaderLink } = useAclUtils()
return {
isActive,
updateIsActive,
// ACL
canViewHorizontalNavMenuHeaderLink,
// i18n
t,
}
},
}
</script>

View File

@ -0,0 +1,10 @@
export default {
watch: {
$route: {
immediate: true,
handler() {
this.updateIsActive()
},
},
},
}

View File

@ -0,0 +1,18 @@
import { ref } from '@vue/composition-api'
import { isNavLinkActive } from '@core/layouts/utils'
export default function useHorizontalNavMenuHeaderGroup(item) {
// ------------------------------------------------
// isActive
// ------------------------------------------------
const isActive = ref(false)
const updateIsActive = () => {
isActive.value = isNavLinkActive(item)
}
return {
isActive,
updateIsActive,
}
}

View File

@ -0,0 +1,41 @@
<template>
<ul
id="main-menu-navigation"
class="nav navbar-nav"
>
<component
:is="resolveNavComponent(item)"
v-for="item in items"
:key="item.header || item.title"
:item="item"
/>
</ul>
</template>
<script>
import HorizontalNavMenuHeaderLink from '../horizontal-nav-menu-header-link/HorizontalNavMenuHeaderLink.vue'
import HorizontalNavMenuHeaderGroup from '../horizontal-nav-menu-header-group/HorizontalNavMenuHeaderGroup.vue'
export default {
components: {
HorizontalNavMenuHeaderLink,
HorizontalNavMenuHeaderGroup,
},
props: {
items: {
type: Array,
required: true,
},
},
setup() {
const resolveNavComponent = item => {
if (item.children) return 'horizontal-nav-menu-header-group'
return 'horizontal-nav-menu-header-link'
}
return {
resolveNavComponent,
}
},
}
</script>

View File

@ -0,0 +1,60 @@
<template>
<li
v-if="canViewHorizontalNavMenuLink(item)"
:class="{
'active': isActive,
'disabled': item.disabled
}"
>
<b-link
v-bind="linkProps"
class="dropdown-item"
>
<feather-icon
:icon="item.icon || 'CircleIcon'"
size="24"
/>
<span class="menu-title">{{ t(item.title) }}</span>
</b-link>
</li>
</template>
<script>
import { BLink } from 'bootstrap-vue'
import { useUtils as useI18nUtils } from '@core/libs/i18n'
import { useUtils as useAclUtils } from '@core/libs/acl'
import useHorizontalNavMenuLink from './useHorizontalNavMenuLink'
import mixinHorizontalNavMenuLink from './mixinHorizontalNavMenuLink'
export default {
components: {
BLink,
},
mixins: [mixinHorizontalNavMenuLink],
props: {
item: {
type: Object,
required: true,
},
},
setup(props) {
const { isActive, linkProps, updateIsActive } = useHorizontalNavMenuLink(props.item)
const { t } = useI18nUtils()
const { canViewHorizontalNavMenuLink } = useAclUtils()
return {
isActive,
linkProps,
updateIsActive,
// ACL
canViewHorizontalNavMenuLink,
// i18n
t,
}
},
}
</script>

View File

@ -0,0 +1,10 @@
export default {
watch: {
$route: {
immediate: true,
handler() {
this.updateIsActive()
},
},
},
}

View File

@ -0,0 +1,18 @@
import { ref } from '@vue/composition-api'
import { isNavLinkActive, navLinkProps } from '@core/layouts/utils'
export default function useHorizontalNavMenuLink(item) {
const isActive = ref(false)
const linkProps = navLinkProps(item)
const updateIsActive = () => {
isActive.value = isNavLinkActive(item)
}
return {
isActive,
linkProps,
updateIsActive,
}
}

View File

@ -0,0 +1,11 @@
import { $themeBreakpoints } from '@themeConfig'
export default {
watch: {
$route() {
if (this.$store.state.app.windowWidth < $themeBreakpoints.xl) {
this.isVerticalMenuActive = false
}
},
},
}

View File

@ -0,0 +1,57 @@
import { computed } from '@vue/composition-api'
import store from '@/store'
export default function useLayoutHorizontal(navbarMenuType, footerType, isVerticalMenuActive) {
const currentBreakpoint = computed(() => store.getters['app/currentBreakPoint'])
const layoutClasses = computed(() => {
const classes = []
if (currentBreakpoint.value === 'xl') {
classes.push('horizontal-menu')
} else {
classes.push('vertical-overlay-menu')
// classes.push('vertical-layout')
classes.push(isVerticalMenuActive.value ? 'menu-open' : 'menu-hide')
}
// Navbar
classes.push(`navbar-${navbarMenuType.value}`)
// Footer
if (footerType.value === 'sticky') classes.push('footer-fixed')
if (footerType.value === 'static') classes.push('footer-static')
if (footerType.value === 'hidden') classes.push('footer-hidden')
return classes
})
// const resizeHandler = () => {
// isVerticalMenuActive.value = window.innerWidth >= 1200
// if (window.innerWidth >= 1200) currentBreakpoint.value = 'xl'
// else if (window.innerWidth >= 992) currentBreakpoint.value = 'lg'
// else if (window.innerWidth >= 768) currentBreakpoint.value = 'md'
// else if (window.innerWidth >= 576) currentBreakpoint.value = 'sm'
// else currentBreakpoint.value = 'xs'
// }
const navbarMenuTypeClass = computed(() => {
if (navbarMenuType.value === 'sticky') return 'fixed-top'
if (navbarMenuType.value === 'static') return ''
if (navbarMenuType.value === 'hidden') return 'd-none'
return 'floating-nav'
})
const footerTypeClass = computed(() => {
if (footerType.value === 'static') return 'footer-static'
if (footerType.value === 'hidden') return 'd-none'
return ''
})
return {
layoutClasses,
navbarMenuTypeClass,
footerTypeClass,
}
}

View File

@ -0,0 +1,163 @@
<template>
<div
class="vertical-layout h-100"
:class="[layoutClasses]"
:data-col="isNavMenuHidden ? '1-column' : null"
>
<!-- Navbar -->
<b-navbar
:toggleable="false"
:variant="navbarBackgroundColor"
class="header-navbar navbar navbar-shadow align-items-center"
:class="[navbarTypeClass]"
>
<slot
name="navbar"
:toggleVerticalMenuActive="toggleVerticalMenuActive"
:navbarBackgroundColor="navbarBackgroundColor"
:navbarTypeClass="[...navbarTypeClass, 'header-navbar navbar navbar-shadow align-items-center']"
>
<app-navbar-vertical-layout :toggle-vertical-menu-active="toggleVerticalMenuActive" />
</slot>
</b-navbar>
<!--/ Navbar -->
<!-- Vertical Nav Menu -->
<vertical-nav-menu
v-if="!isNavMenuHidden"
:is-vertical-menu-active="isVerticalMenuActive"
:toggle-vertical-menu-active="toggleVerticalMenuActive"
>
<template #header="slotProps">
<slot
name="vertical-menu-header"
v-bind="slotProps"
/>
</template>
</vertical-nav-menu>
<!-- /Vertical Nav Menu -->
<!-- Vertical Nav Menu Overlay -->
<div
class="sidenav-overlay"
:class="overlayClasses"
@click="isVerticalMenuActive = false"
/>
<!-- /Vertical Nav Menu Overlay -->
<!-- Content -->
<!-- CONTENT TYPE: Left -->
<transition
:name="routerTransition"
mode="out-in"
>
<component
:is="layoutContentRenderer"
:key="layoutContentRenderer === 'layout-content-renderer-left' ? $route.meta.navActiveLink || $route.name : null"
>
<template
v-for="(index, name) in $scopedSlots"
v-slot:[name]="data"
>
<slot
:name="name"
v-bind="data"
/>
</template>
</component>
</transition>
<!--/ Content -->
<!-- Footer -->
<footer
class="footer footer-light"
:class="[footerTypeClass]"
>
<slot name="footer">
<app-footer />
</slot>
</footer>
<!-- /Footer -->
<slot name="customizer" />
</div>
</template>
<script>
import { onUnmounted } from '@vue/composition-api'
import AppNavbarVerticalLayout from '@core/layouts/components/app-navbar/AppNavbarVerticalLayout.vue'
import AppFooter from '@core/layouts/components/AppFooter.vue'
import useAppConfig from '@core/app-config/useAppConfig'
import { BNavbar } from 'bootstrap-vue'
import LayoutContentRendererDefault from '@core/layouts/components/layout-content-renderer/LayoutContentRendererDefault.vue'
import LayoutContentRendererLeft from '@core/layouts/components/layout-content-renderer/LayoutContentRendererLeft.vue'
import LayoutContentRendererLeftDetached from '@core/layouts/components/layout-content-renderer/LayoutContentRendererLeftDetached.vue'
import VerticalNavMenu from './components/vertical-nav-menu/VerticalNavMenu.vue'
import useVerticalLayout from './useVerticalLayout'
import mixinVerticalLayout from './mixinVerticalLayout'
export default {
components: {
// AppBreadcrumb,
AppNavbarVerticalLayout,
AppFooter,
VerticalNavMenu,
BNavbar,
LayoutContentRendererLeftDetached,
LayoutContentRendererLeft,
LayoutContentRendererDefault,
},
mixins: [mixinVerticalLayout],
computed: {
layoutContentRenderer() {
const rendererType = this.$route.meta.contentRenderer
if (rendererType === 'sidebar-left') return 'layout-content-renderer-left'
if (rendererType === 'sidebar-left-detached') return 'layout-content-renderer-left-detached'
return 'layout-content-renderer-default'
},
},
setup() {
const {
routerTransition, navbarBackgroundColor, navbarType, footerType, isNavMenuHidden,
} = useAppConfig()
const {
isVerticalMenuActive,
toggleVerticalMenuActive,
isVerticalMenuCollapsed,
layoutClasses,
overlayClasses,
resizeHandler,
navbarTypeClass,
footerTypeClass,
} = useVerticalLayout(navbarType, footerType)
// Resize handler
resizeHandler()
window.addEventListener('resize', resizeHandler)
onUnmounted(() => {
window.removeEventListener('resize', resizeHandler)
})
return {
isVerticalMenuActive,
toggleVerticalMenuActive,
isVerticalMenuCollapsed,
overlayClasses,
layoutClasses,
navbarTypeClass,
footerTypeClass,
// App Config
routerTransition,
navbarBackgroundColor,
isNavMenuHidden,
}
},
}
</script>
<style lang="scss">
@import "~@core/scss/base/themes/bordered-layout.scss";
</style>

View File

@ -0,0 +1,162 @@
<template>
<div
class="main-menu menu-fixed menu-accordion menu-shadow"
:class="[
{ 'expanded': !isVerticalMenuCollapsed || (isVerticalMenuCollapsed && isMouseHovered) },
skin === 'semi-dark' ? 'menu-dark' : 'menu-light'
]"
@mouseenter="updateMouseHovered(true)"
@mouseleave="updateMouseHovered(false)"
>
<!-- main menu header-->
<div class="navbar-header expanded">
<slot
name="header"
:toggleVerticalMenuActive="toggleVerticalMenuActive"
:toggleCollapsed="toggleCollapsed"
:collapseTogglerIcon="collapseTogglerIcon"
>
<ul class="nav navbar-nav flex-row">
<!-- Logo & Text -->
<li class="nav-item mr-auto">
<b-link
class="navbar-brand"
to="/"
>
<span class="brand-logo">
<b-img
:src="appLogoImage"
alt="logo"
/>
</span>
<h2 class="brand-text">
{{ appName }}
</h2>
</b-link>
</li>
<!-- Toggler Button -->
<li class="nav-item nav-toggle">
<b-link class="nav-link modern-nav-toggle">
<feather-icon
icon="XIcon"
size="20"
class="d-block d-xl-none"
@click="toggleVerticalMenuActive"
/>
<feather-icon
:icon="collapseTogglerIconFeather"
size="20"
class="d-none d-xl-block collapse-toggle-icon"
@click="toggleCollapsed"
/>
</b-link>
</li>
</ul>
</slot>
</div>
<!-- / main menu header-->
<!-- Shadow -->
<div
:class="{'d-block': shallShadowBottom}"
class="shadow-bottom"
/>
<!-- main menu content-->
<vue-perfect-scrollbar
:settings="perfectScrollbarSettings"
class="main-menu-content scroll-area"
tagname="ul"
@ps-scroll-y="evt => { shallShadowBottom = evt.srcElement.scrollTop > 0 }"
>
<vertical-nav-menu-items
:items="navMenuItems"
class="navigation navigation-main"
/>
</vue-perfect-scrollbar>
<!-- /main menu content-->
</div>
</template>
<script>
import navMenuItems from '@/navigation/vertical'
import VuePerfectScrollbar from 'vue-perfect-scrollbar'
import { BLink, BImg } from 'bootstrap-vue'
import { provide, computed, ref } from '@vue/composition-api'
import useAppConfig from '@core/app-config/useAppConfig'
import { $themeConfig } from '@themeConfig'
import VerticalNavMenuItems from './components/vertical-nav-menu-items/VerticalNavMenuItems.vue'
import useVerticalNavMenu from './useVerticalNavMenu'
export default {
components: {
VuePerfectScrollbar,
VerticalNavMenuItems,
BLink,
BImg,
},
props: {
isVerticalMenuActive: {
type: Boolean,
required: true,
},
toggleVerticalMenuActive: {
type: Function,
required: true,
},
},
setup(props) {
const {
isMouseHovered,
isVerticalMenuCollapsed,
collapseTogglerIcon,
toggleCollapsed,
updateMouseHovered,
} = useVerticalNavMenu(props)
const { skin } = useAppConfig()
// Shadow bottom is UI specific and can be removed by user => It's not in `useVerticalNavMenu`
const shallShadowBottom = ref(false)
provide('isMouseHovered', isMouseHovered)
const perfectScrollbarSettings = {
maxScrollbarLength: 60,
wheelPropagation: false,
}
const collapseTogglerIconFeather = computed(() => (collapseTogglerIcon.value === 'unpinned' ? 'CircleIcon' : 'DiscIcon'))
// App Name
const { appName, appLogoImage } = $themeConfig.app
return {
navMenuItems,
perfectScrollbarSettings,
isVerticalMenuCollapsed,
collapseTogglerIcon,
toggleCollapsed,
isMouseHovered,
updateMouseHovered,
collapseTogglerIconFeather,
// Shadow Bottom
shallShadowBottom,
// Skin
skin,
// App Name
appName,
appLogoImage,
}
},
}
</script>
<style lang="scss">
@import "~@core/scss/base/core/menu/menu-types/vertical-menu.scss";
</style>

View File

@ -0,0 +1,100 @@
<template>
<li
v-if="canViewVerticalNavMenuGroup(item)"
class="nav-item has-sub"
:class="{
'open': isOpen,
'disabled': item.disabled,
'sidebar-group-active': isActive,
}"
>
<b-link
class="d-flex align-items-center"
@click="() => updateGroupOpen(!isOpen)"
>
<feather-icon :icon="item.icon || 'CircleIcon'" />
<span class="menu-title text-truncate">{{ t(item.title) }}</span>
<b-badge
v-if="item.tag"
pill
:variant="item.tagVariant || 'primary'"
class="mr-1 ml-auto"
>
{{ item.tag }}
</b-badge>
</b-link>
<b-collapse
v-model="isOpen"
class="menu-content"
tag="ul"
>
<component
:is="resolveNavItemComponent(child)"
v-for="child in item.children"
:key="child.header || child.title"
ref="groupChild"
:item="child"
/>
</b-collapse>
</li>
</template>
<script>
import { BLink, BBadge, BCollapse } from 'bootstrap-vue'
import { resolveVerticalNavMenuItemComponent as resolveNavItemComponent } from '@core/layouts/utils'
import { useUtils as useI18nUtils } from '@core/libs/i18n'
import { useUtils as useAclUtils } from '@core/libs/acl'
import VerticalNavMenuHeader from '../vertical-nav-menu-header'
import VerticalNavMenuLink from '../vertical-nav-menu-link/VerticalNavMenuLink.vue'
// Composition Function
import useVerticalNavMenuGroup from './useVerticalNavMenuGroup'
import mixinVerticalNavMenuGroup from './mixinVerticalNavMenuGroup'
export default {
name: 'VerticalNavMenuGroup',
components: {
VerticalNavMenuHeader,
VerticalNavMenuLink,
BLink,
BBadge,
BCollapse,
},
mixins: [mixinVerticalNavMenuGroup],
props: {
item: {
type: Object,
required: true,
},
},
setup(props) {
const {
isOpen,
isActive,
updateGroupOpen,
updateIsActive,
} = useVerticalNavMenuGroup(props.item)
const { t } = useI18nUtils()
const { canViewVerticalNavMenuGroup } = useAclUtils()
return {
resolveNavItemComponent,
isOpen,
isActive,
updateGroupOpen,
updateIsActive,
// ACL
canViewVerticalNavMenuGroup,
// i18n
t,
}
},
}
</script>
<style>
</style>

View File

@ -0,0 +1,10 @@
export default {
watch: {
$route: {
immediate: true,
handler() {
this.updateIsActive()
},
},
},
}

View File

@ -0,0 +1,103 @@
// eslint-disable-next-line object-curly-newline
import { ref, watch, inject, computed } from '@vue/composition-api'
import store from '@/store'
import { isNavGroupActive } from '@core/layouts/utils'
export default function useVerticalNavMenuGroup(item) {
// ------------------------------------------------
// isVerticalMenuCollapsed
// ------------------------------------------------
const isVerticalMenuCollapsed = computed(() => store.state.verticalMenu.isVerticalMenuCollapsed)
watch(isVerticalMenuCollapsed, val => {
/* eslint-disable no-use-before-define */
// * Handles case if routing is done outside of vertical menu
// i.e. From Customizer Collapse or Using Link
if (!isMouseHovered.value) {
if (val) isOpen.value = false
else if (!val && isActive.value) isOpen.value = true
}
/* eslint-enable */
})
// ------------------------------------------------
// isMouseHovered
// ------------------------------------------------
const isMouseHovered = inject('isMouseHovered')
// Collapse menu when menu is collapsed and show on open
watch(isMouseHovered, val => {
if (isVerticalMenuCollapsed.value) {
// * we have used `val && val && isActive.value` to only open active menu on mouseEnter and close all menu on mouseLeave
// * If we don't use `isActive.value` with `val` it can open other groups which are not active as well
// eslint-disable-next-line no-use-before-define
isOpen.value = val && isActive.value
}
})
// ------------------------------------------------
// openGroups
// ------------------------------------------------
const openGroups = inject('openGroups')
// Collapse other groups if one group is opened
watch(openGroups, currentOpenGroups => {
const clickedGroup = currentOpenGroups[currentOpenGroups.length - 1]
// If current group is not clicked group or current group is not active => Proceed with closing it
// eslint-disable-next-line no-use-before-define
if (clickedGroup !== item.title && !isActive.value) {
// If clicked group is not child of current group
// eslint-disable-next-line no-use-before-define
if (!doesHaveChild(clickedGroup)) isOpen.value = false
}
})
// ------------------------------------------------
// isOpen
// ------------------------------------------------
const isOpen = ref(false)
watch(isOpen, val => {
// if group is opened push it to the array
if (val) openGroups.value.push(item.title)
})
const updateGroupOpen = val => {
// eslint-disable-next-line no-use-before-define
isOpen.value = val
}
// ------------------------------------------------
// isActive
// ------------------------------------------------
const isActive = ref(false)
watch(isActive, val => {
/*
If menu is collapsed and not hovered(optional) then don't open group
*/
if (val) {
if (!isVerticalMenuCollapsed.value) isOpen.value = val
} else {
isOpen.value = val
}
})
const updateIsActive = () => {
isActive.value = isNavGroupActive(item.children)
}
// ------------------------------------------------
// Other Methods
// ------------------------------------------------
const doesHaveChild = title => item.children.some(child => child.title === title)
return {
isOpen,
isActive,
updateGroupOpen,
openGroups,
isMouseHovered,
updateIsActive,
}
}

View File

@ -0,0 +1,22 @@
import { useUtils as useI18nUtils } from '@core/libs/i18n'
import { useUtils as useAclUtils } from '@core/libs/acl'
const { t } = useI18nUtils()
const { canViewVerticalNavMenuHeader } = useAclUtils()
export default {
props: {
item: {
type: Object,
required: true,
},
},
render(h) {
const span = h('span', {}, t(this.item.header))
const icon = h('feather-icon', { props: { icon: 'MoreHorizontalIcon', size: '18' } })
if (canViewVerticalNavMenuHeader(this.item)) {
return h('li', { class: 'navigation-header text-truncate' }, [span, icon])
}
return h()
},
}

View File

@ -0,0 +1,39 @@
<template>
<ul>
<component
:is="resolveNavItemComponent(item)"
v-for="item in items"
:key="item.header || item.title"
:item="item"
/>
</ul>
</template>
<script>
import { resolveVerticalNavMenuItemComponent as resolveNavItemComponent } from '@core/layouts/utils'
import { provide, ref } from '@vue/composition-api'
import VerticalNavMenuHeader from '../vertical-nav-menu-header'
import VerticalNavMenuLink from '../vertical-nav-menu-link/VerticalNavMenuLink.vue'
import VerticalNavMenuGroup from '../vertical-nav-menu-group/VerticalNavMenuGroup.vue'
export default {
components: {
VerticalNavMenuHeader,
VerticalNavMenuLink,
VerticalNavMenuGroup,
},
props: {
items: {
type: Array,
required: true,
},
},
setup() {
provide('openGroups', ref([]))
return {
resolveNavItemComponent,
}
},
}
</script>

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