Browse Source

init clone

feature/flight-practice
지대한 2 years ago
commit
e9e335d0d1
  1. 5
      .env
  2. 3
      .env.development
  3. 3
      .env.production
  4. 81
      .eslintrc.js
  5. 29
      .gitignore
  6. 11
      .prettierrc.js
  7. BIN
      README.md
  8. 38
      config-overrides.js
  9. 25576
      package-lock.json
  10. 151
      package.json
  11. BIN
      public/favicon.ico
  12. 53
      public/index.html
  13. 15
      public/manifest.json
  14. 181
      src/@core/assets/data/locales/de.json
  15. 179
      src/@core/assets/data/locales/en.json
  16. 180
      src/@core/assets/data/locales/fr.json
  17. 181
      src/@core/assets/data/locales/pt.json
  18. BIN
      src/@core/assets/fonts/feather/fonts/feather.eot
  19. 849
      src/@core/assets/fonts/feather/fonts/feather.svg
  20. BIN
      src/@core/assets/fonts/feather/fonts/feather.ttf
  21. BIN
      src/@core/assets/fonts/feather/fonts/feather.woff
  22. 568
      src/@core/assets/fonts/feather/iconfont.css
  23. 15
      src/@core/auth/jwt/jwtDefaultConfig.js
  24. 108
      src/@core/auth/jwt/jwtService.js
  25. 11
      src/@core/auth/jwt/useJwt.js
  26. 120
      src/@core/components/app-collapse/index.js
  27. 85
      src/@core/components/autocomplete/autocomplete.scss
  28. 354
      src/@core/components/autocomplete/index.js
  29. 65
      src/@core/components/avatar-group/index.js
  30. 155
      src/@core/components/avatar/index.js
  31. 92
      src/@core/components/breadcrumbs/index.js
  32. 132
      src/@core/components/card-actions/index.js
  33. 51
      src/@core/components/card-snippet/index.js
  34. 357
      src/@core/components/customizer/index.js
  35. 30
      src/@core/components/extensions-header/index.js
  36. 98
      src/@core/components/input-password-toggle/index.js
  37. 205
      src/@core/components/number-input/index.js
  38. 153
      src/@core/components/number-input/number-input.scss
  39. 33
      src/@core/components/repeater/index.js
  40. 75
      src/@core/components/ripple-button/index.js
  41. 36
      src/@core/components/ripple-button/ripple-button.scss
  42. 89
      src/@core/components/sidebar/index.js
  43. 17
      src/@core/components/spinner/Fallback-spinner.js
  44. 13
      src/@core/components/spinner/Loading-spinner.js
  45. 52
      src/@core/components/statistics-card/index.js
  46. 76
      src/@core/components/timeline/index.js
  47. 45
      src/@core/components/ui-loader/index.js
  48. 35
      src/@core/components/ui-loader/ui-loader.scss
  49. 104
      src/@core/components/widgets/stats/ChartOptions.js
  50. 32
      src/@core/components/widgets/stats/StatsHorizontal.js
  51. 28
      src/@core/components/widgets/stats/StatsVertical.js
  52. 51
      src/@core/components/widgets/stats/StatsWithAreaChart.js
  53. 45
      src/@core/components/widgets/stats/StatsWithLineChart.js
  54. 35
      src/@core/components/widgets/stats/TinyChartStats.js
  55. 121
      src/@core/components/wizard/index.js
  56. 35
      src/@core/layouts/BlankLayout.js
  57. 122
      src/@core/layouts/HeaderLayout.js
  58. 202
      src/@core/layouts/HorizontalLayout.js
  59. 224
      src/@core/layouts/VerticalLayout.js
  60. 22
      src/@core/layouts/components/footer/index.js
  61. 89
      src/@core/layouts/components/layout-wrapper/index.js
  62. 117
      src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuGroup.js
  63. 23
      src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuItems.js
  64. 101
      src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuLink.js
  65. 52
      src/@core/layouts/components/menu/horizontal-menu/index.js
  66. 65
      src/@core/layouts/components/menu/vertical-menu/VerticalMenuHeader.js
  67. 142
      src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuGroup.js
  68. 27
      src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuItems.js
  69. 129
      src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuLink.js
  70. 13
      src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuSectionHeader.js
  71. 131
      src/@core/layouts/components/menu/vertical-menu/index.js
  72. 117
      src/@core/layouts/components/navbar/NavbarUser.js
  73. 103
      src/@core/layouts/components/navbar/UserDropdown.js
  74. 18
      src/@core/layouts/components/navbar/index.js
  75. 159
      src/@core/layouts/utils.js
  76. 47
      src/@core/scss/base/bootstrap-extended.scss
  77. 56
      src/@core/scss/base/bootstrap-extended/_alert.scss
  78. 90
      src/@core/scss/base/bootstrap-extended/_badge.scss
  79. 76
      src/@core/scss/base/bootstrap-extended/_breadcrumb.scss
  80. 59
      src/@core/scss/base/bootstrap-extended/_button-group.scss
  81. 67
      src/@core/scss/base/bootstrap-extended/_buttons.scss
  82. 514
      src/@core/scss/base/bootstrap-extended/_card.scss
  83. 14
      src/@core/scss/base/bootstrap-extended/_code.scss
  84. 140
      src/@core/scss/base/bootstrap-extended/_collapse.scss
  85. 255
      src/@core/scss/base/bootstrap-extended/_dropdown.scss
  86. 570
      src/@core/scss/base/bootstrap-extended/_forms.scss
  87. 10
      src/@core/scss/base/bootstrap-extended/_functions.scss
  88. 106
      src/@core/scss/base/bootstrap-extended/_helper.scss
  89. 24
      src/@core/scss/base/bootstrap-extended/_include.scss
  90. 101
      src/@core/scss/base/bootstrap-extended/_list-group.scss
  91. 22
      src/@core/scss/base/bootstrap-extended/_media.scss
  92. 13
      src/@core/scss/base/bootstrap-extended/_mixins.scss
  93. 175
      src/@core/scss/base/bootstrap-extended/_modal.scss
  94. 272
      src/@core/scss/base/bootstrap-extended/_nav.scss
  95. 682
      src/@core/scss/base/bootstrap-extended/_navbar.scss
  96. 307
      src/@core/scss/base/bootstrap-extended/_pagination.scss
  97. 45
      src/@core/scss/base/bootstrap-extended/_popover.scss
  98. 20
      src/@core/scss/base/bootstrap-extended/_progress.scss
  99. 15
      src/@core/scss/base/bootstrap-extended/_reboot.scss
  100. 122
      src/@core/scss/base/bootstrap-extended/_tables.scss
  101. Some files were not shown because too many files have changed in this diff Show More

5
.env

@ -0,0 +1,5 @@
SKIP_PREFLIGHT_CHECK=true
REACT_APP_BASENAME= ""
REACT_APP_HOST = http://control-api.palnet.co.kr/
REACT_APP_WS_HOST = ws://control-websocket.palnet.co.kr/ws
REACT_APP_IMAGE_HOST = https://palnet-file.s3.ap-northeast-2.amazonaws.com/

3
.env.development

@ -0,0 +1,3 @@
REACT_APP_HOST = http://localhost:8080/
REACT_APP_WS_HOST = ws://localhost:8081/ws
REACT_APP_IMAGE_HOST = https://palnet-file.s3.ap-northeast-2.amazonaws.com/

3
.env.production

@ -0,0 +1,3 @@
REACT_APP_HOST = http://control-api.palntour.com/
REACT_APP_WS_HOST = ws://control-websocket.palntour.com/ws
REACT_APP_IMAGE_HOST = https://palnet-file.s3.ap-northeast-2.amazonaws.com/

81
.eslintrc.js

@ -0,0 +1,81 @@
module.exports = {
env: {
node: true,
es6: true,
browser: true
},
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures: {
jsx: true,
modules: true,
experimentalObjectRestSpread: true
}
},
rules: {
// 'no-console': 'off',
// 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
// // Best Practices
// eqeqeq: 'error',
// 'no-invalid-this': 'error',
// 'no-return-assign': 'error',
// 'no-unused-expressions': ['error', { allowTernary: true }],
// 'no-useless-concat': 'error',
// 'no-useless-return': 'error',
// // Variable
// // 'init-declarations': 'error',
// 'no-use-before-define': 'error',
// // Stylistic Issues
// 'array-bracket-newline': ['error', { multiline: true, minItems: null }],
// 'array-bracket-spacing': 'error',
// 'brace-style': ['error', '1tbs', { allowSingleLine: true }],
// 'block-spacing': 'error',
// 'comma-dangle': 'error',
// 'comma-spacing': 'error',
// 'comma-style': 'error',
// 'computed-property-spacing': 'error',
// 'func-call-spacing': 'error',
// 'implicit-arrow-linebreak': ['error', 'beside'],
// // indent: ['error', 4],
// 'keyword-spacing': 'error',
// 'multiline-ternary': ['error', 'never'],
// // 'no-lonely-if': 'error',
// 'no-mixed-operators': 'error',
// 'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 1 }],
// 'no-tabs': 'error',
// 'no-unneeded-ternary': 'error',
// 'no-whitespace-before-property': 'error',
// 'nonblock-statement-body-position': 'error',
// 'object-property-newline': [
// 'error',
// { allowAllPropertiesOnSameLine: true }
// ],
// 'quote-props': ['error', 'as-needed'],
// // quotes: ['error', 'prefer-single'],
// semi: ['error', 'never'],
// 'semi-spacing': 'error',
// 'space-before-blocks': 'error',
// // 'space-before-function-paren': 'error',
// 'space-in-parens': 'error',
// 'space-infix-ops': 'error',
// 'space-unary-ops': 'error',
// // ES6
// 'arrow-spacing': 'error',
// 'no-confusing-arrow': 'error',
// 'no-duplicate-imports': 'error',
// 'no-var': 'error',
// 'object-shorthand': 'error',
// 'prefer-const': 'error',
// 'prefer-template': 'error'
}
// 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',
// camelcase: ['error', { properties: 'never', ignoreDestructuring: true, ignoreImports: true }]
// }
};

29
.gitignore vendored

@ -0,0 +1,29 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.docz
.eslintcache
.vscode
/react-shell-scripts

11
.prettierrc.js

@ -0,0 +1,11 @@
module.exports = {
singleQuote: true, //인용부호 작은 따옴표 사용
semi: true, //모든 문법 끝에 세미콜론 추가
useTabs: false,
tabWidth: 2, //탭 공백 넓이
trailingComma: 'none', //후행 쉼표 제거
printWidth: 80, //줄바꿈 넓이
bracketSpacing: true, // 브라켓 간격
arrowParens: 'avoid', //arrow function 매개변수 하나일때 괄호 제거
jsxSingleQuote: true //jsx 인용부호 작은 따옴표 사용
};

BIN
README.md

Binary file not shown.

38
config-overrides.js

@ -0,0 +1,38 @@
const SassRuleRewire = require('react-app-rewire-sass-rule')
const path = require('path')
const rewireAliases = require('react-app-rewire-aliases')
module.exports = function override(config, env) {
require('react-app-rewire-postcss')(config, {
plugins: loader => [require('postcss-rtl')()]
})
config = rewireAliases.aliasesOptions({
'@src': path.resolve(__dirname, 'src'),
'@assets': path.resolve(__dirname, 'src/@core/assets'),
'@components': path.resolve(__dirname, 'src/@core/components'),
'@layouts': path.resolve(__dirname, 'src/@core/layouts'),
'@store': path.resolve(__dirname, 'src/redux'),
'@styles': path.resolve(__dirname, 'src/@core/scss'),
'@configs': path.resolve(__dirname, 'src/configs'),
'@utils': path.resolve(__dirname, 'src/utility/Utils'),
'@hooks': path.resolve(__dirname, 'src/utility/hooks')
})(config, env)
config = new SassRuleRewire()
.withRuleOptions({
test: /\.s[ac]ss$/i,
use: [
{
loader: 'sass-loader',
options: {
sassOptions: {
includePaths: ['node_modules', 'src/assets']
}
}
}
]
})
.rewire(config, env)
return config
}

25576
package-lock.json generated

File diff suppressed because it is too large Load Diff

151
package.json

@ -0,0 +1,151 @@
{
"name": "control-web",
"version": "1.0.0",
"private": true,
"dependencies": {
"@casl/ability": "5.2.2",
"@casl/react": "2.1.1",
"@fullcalendar/core": "5.7.2",
"@fullcalendar/daygrid": "5.7.2",
"@fullcalendar/interaction": "5.7.2",
"@fullcalendar/list": "5.7.2",
"@fullcalendar/react": "5.7.0",
"@fullcalendar/timegrid": "5.7.2",
"@fullcalendar/timeline": "5.7.2",
"@hookform/resolvers": "1.3.4",
"@stomp/stompjs": "^6.1.0",
"@types/googlemaps": "^3.43.3",
"@types/history": "^4.7.8",
"@types/jest": "^26.0.23",
"@types/node": "^15.12.2",
"@types/react": "^17.0.11",
"@types/react-dom": "^17.0.7",
"@types/react-redux": "^7.1.16",
"@types/redux-debounced": "^0.2.19",
"@types/sockjs-client": "^1.5.0",
"@types/stompjs": "^2.3.4",
"@uppy/react": "1.10.8",
"animate.css": "4.1.1",
"apexcharts": "3.23.0",
"availity-reactstrap-validation-safe": "2.6.1",
"axios": "0.21.1",
"axios-mock-adapter": "1.19.0",
"babel-plugin-react-intl": "5.1.18",
"bootstrap": "4.5.2",
"bs-stepper": "1.7.0",
"chart.js": "^2.9.4",
"chroma-js": "2.1.0",
"classnames": "2.2.6",
"cleave.js": "1.6.0",
"connected-react-router": "^6.9.1",
"draft-js": "0.11.7",
"draftjs-to-html": "0.9.1",
"eslint-config-airbnb-base": "^14.2.1",
"file-saver": "2.0.2",
"flatpickr": "4.6.3",
"history": "5.0.0",
"html-to-draftjs": "1.5.0",
"http-proxy-middleware": "^2.0.1",
"intl-messageformat": "7.8.4",
"jquery": "3.5.1",
"js-cookie": "^3.0.0",
"jsonwebtoken": "8.5.1",
"jwt-decode": "^3.1.2",
"leaflet": "1.6.0",
"moment": "2.29.1",
"nouislider": "14.6.2",
"nouislider-react": "3.3.8",
"postcss-rtl": "1.5.0",
"prismjs": "1.19.0",
"prop-types": "15.7.2",
"react": "17.0.1",
"react-apexcharts": "1.3.6",
"react-chartjs-2": "^2.9.0",
"react-contexify": "5.0.0",
"react-copy-to-clipboard": "5.0.2",
"react-country-flag": "2.0.1",
"react-csv": "^2.0.3",
"react-data-table-component": "6.11.2",
"react-datepicker": "^4.2.1",
"react-dom": "17.0.1",
"react-draft-wysiwyg": "1.14.5",
"react-export-excel": "^0.5.3",
"react-feather": "~2.0.3",
"react-flatpickr": "3.9.1",
"react-google-maps": "^9.4.5",
"react-hook-form": "6.15.1",
"react-icons": "^4.2.0",
"react-indiana-drag-scroll": "^2.0.1",
"react-intl": "3.11.0",
"react-leaflet": "3.1.0",
"react-paginate": "7.0.0",
"react-perfect-scrollbar": "1.5.5",
"react-player": "2.6.2",
"react-rating": "2.0.5",
"react-redux": "7.2.2",
"react-router-dom": "5.2.0",
"react-scripts": "4.0.2",
"react-scroll-up": "1.3.7",
"react-select": "4.0.2",
"react-shepherd": "3.3.0",
"react-slidedown": "2.4.5",
"react-sortablejs": "6.0.0",
"react-toastify": "7.0.3",
"reactstrap": "8.6.0",
"recharts": "2.0.4",
"redux": "4.0.5",
"redux-debounced": "0.5.0",
"redux-saga": "^1.1.3",
"redux-thunk": "2.3.0",
"sass": "1.26.8",
"screenfull": "5.0.2",
"sortablejs": "1.12.0",
"styled-components": "5.1.1",
"sweetalert2": "10.14.0",
"sweetalert2-react-content": "3.0.1",
"swiper": "6.0.4",
"typesafe-actions": "^5.1.0",
"uppy": "1.21.2",
"webpack": "4.43.0",
"wnumb": "1.2.0",
"xlsx": "0.16.2",
"yarn": "1.21.1",
"yup": "0.32.8"
},
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-app-rewired eject"
},
"eslintConfig": {
"extends": "react-app"
},
"devDependencies": {
"@types/sortablejs": "^1.10.6",
"@typescript-eslint/eslint-plugin": "^4.28.1",
"@typescript-eslint/parser": "^4.28.1",
"eslint": "^7.29.0",
"eslint-config-airbnb": "^18.2.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.23.4",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-react": "^7.24.0",
"eslint-plugin-react-hooks": "^1.7.0",
"node-sass": "^4.13.1",
"prettier": "^2.3.1",
"react-app-rewire-aliases": "^0.2.0",
"react-app-rewire-postcss": "^3.0.2",
"react-app-rewire-sass-rule": "^2.1.1",
"react-app-rewired": "^2.1.6",
"sass-loader": "^8.0.2",
"typescript": "^4.3.5"
},
"browserslist": [
">0.2%",
"not dead",
"not op_mini all"
],
"homepage": ""
}

BIN
public/favicon.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

53
public/index.html

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8" />
<!-- <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" /> -->
<meta
name="viewport"
content="width=device-width,initial-scale=1.0,maximum-scale=1"
/>
<meta name="theme-color" content="#000000" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<script
type="text/javascript"
src="https://openapi.map.naver.com/openapi/v3/maps.js?ncpClientId=5md90yszqj&submodules=geocoder""
></script>
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;1,400;1,500;1,600"
/>
<link
rel="stylesheet"
href="https://unpkg.com/leaflet@1.5.1/dist/leaflet.css"
crossorigin=""
/>
<title>Dron Control System</title>
</head>
<body>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>

15
public/manifest.json

@ -0,0 +1,15 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

181
src/@core/assets/data/locales/de.json

@ -0,0 +1,181 @@
{
"Dashboards": "Instrumententafel",
"Analytics": "Analytics",
"eCommerce": "eCommerce",
"Apps": "Apps",
"Email": "Email",
"Chat": "Plaudern",
"Todo": "Machen",
"Calendar": "Kalandar",
"Ecommerce": "E-Commerce",
"Shop": "Geschäft",
"Wish List": "Wunschzettel",
"Details": "Einzelheiten",
"Checkout": "Auschecken",
"User": "Benutzerin",
"List": "Liste",
"View": "Aussicht",
"Edit": "Bearbeiten",
"Starter Kit": "Starter Kit",
"1 Column": "1 Spalte",
"2 Columns": "2 Spalten",
"Fixed Navbar": "Feste Navigationsleiste",
"Floating Navbar": "Schwimmende Navigationsleiste",
"Fixed Layout": "Festes Layout",
"Static Layout": "Statisches Layout",
"Dark Layout": "Dunkles Layout",
"Light Layout": "Helles Layout",
"Content": "Inhalt",
"Grid": "Gitter",
"Typography": "Typografie",
"Text Utilities": "Textdienstprogramme",
"Syntax Highlighter": "Syntax Textmarker",
"Helper Classes": "Hilfsklassen",
"Colors": "Farben",
"Icons": "Icons",
"Feather": "Feder",
"UI Elements": "UI-Elemente",
"Card": "Karte",
"Basic": "Basic",
"Advance": "Voraus",
"Statistics": "Statistiken",
"Actions": "Kartenaktionen",
"Table": "Tabelle",
"Reactstrap Tables": "Reactstrap Tabelles",
"React Tables": "React Tabelles",
"DataTable": "Datentabelle",
"Advanced": "Fortgeschrittene",
"Mail Template": "Mail-Vorlage",
"Page Layouts": "Seitenlayouts",
"Collapsed Menu": "Reduziertes Menü",
"Layout Boxed": "Layout Boxed",
"Without Menu": "Ohne Menü",
"Layout Empty": "Layout leer",
"Layout Blank": "Layout leer",
"Components": "Komponenten",
"Alerts": "Warnungen",
"Buttons": "Tasten",
"Breadcrumbs": "Semmelbrösel",
"Carousel": "Karussell",
"Collapse": "Zusammenbruch",
"Dropdowns": "Dropdowns",
"List Group": "Listengruppe",
"Modals": "Modals",
"Pagination": "Seitennummerierung",
"Navs Component": "Navs-Komponente",
"Navbar": "Navbar",
"Tabs Component": "Registerkarten-Komponente",
"Pills Component": "Pillenkomponente",
"Tooltips": "Tooltips",
"Popovers": "Popovers",
"Badges": "Abzeichen",
"Pill Badges": "Pillenabzeichen",
"Progress": "Fortschritt",
"Media Objects": "Medienobjekte",
"Spinner": "Spinner",
"Toasts": "Toast",
"Timeline": "Zeitleiste",
"Extra Components": "Zusätzliche Komponenten",
"Avatar": "Benutzerbild",
"Chips": "Chips",
"Divider": "Teiler",
"Wizard": "Magier",
"Forms & Tables": "Formulare und Tabellen",
"Form Elements": "Formularelemente",
"Select": "Wählen",
"Switch": "Schalter",
"Checkbox": "Kontrollkästchen",
"Radio": "Radio",
"Input": "Eingang",
"Input Groups": "Eingabegruppen",
"Number Input": "Zahleneingabe",
"Textarea": "Textarea",
"Date & Time Picker": "Datums- und Uhrzeitauswahl",
"Input Mask": "Eingabemaske",
"Form Layout": "Formularlayout",
"Form Wizard": "Formzauberer",
"Form Validation": "Formularvalidierung",
"Formik": "Formik",
"Pages": "Seiten",
"Authentication": "Authentifizierung",
"Login v1": "Einloggen v1",
"Login v2": "Einloggen v2",
"Register v1": "Registrieren v1",
"Register v2": "Registrieren v2",
"Forgot Password v1": "Passwort vergessen v1",
"Forgot Password v2": "Passwort vergessen v2",
"Reset Password v1": "Passwort zurücksetzen v1",
"Reset Password v2": "Passwort zurücksetzen v2",
"Coming Soon": "Demnächst",
"Error": "Error",
"Not Authorized": "Nicht berechtigt",
"Maintenance": "Instandhaltung",
"Profile": "Profil",
"Account Settings": "Account Einstellungen",
"Tree": "Baum",
"Miscellaneous": "Sonstiges",
"FAQ": "FAQ",
"Knowledge Base": "Wissensbasis",
"Search": "Suche",
"Invoice": "Rechnung",
"Charts & Maps": "Karten & Pläne",
"Charts": "Diagramme",
"Apex": "Apex",
"ChartJS": "ChartJS",
"Recharts": "Recharts",
"Leaflet Maps": "Leaflet Maps",
"Extensions": "Erweiterungen",
"Sweet Alert": "Süßer Alarm",
"Toastr": "Toastr",
"Sliders": "Schieberegler",
"File Uploader": "Datei-Uploader",
"Editor": "Editor",
"Drag & Drop": "Ziehen und loslassen",
"Tour": "Tour",
"Auto Complete": "Automatisch vervollständigen",
"Clipboard": "Zwischenablage",
"React Player": "Reagieren Player",
"Context Menu": "Kontextmenü",
"Swiper": "Swiper",
"I18n": "I18n",
"React Paginate": "Paginieren reagieren",
"Export": "Export",
"Import": "Importieren",
"Export Selected": "Ausgewählte exportieren",
"Access Control": "Zugangskontrolle",
"Others": "Andere",
"Menu Levels": "Menüebenen",
"Second Level": "zweites Level",
"Second Level 2.1": "zweites Level 2.1",
"Second Level 2.2": "zweites Level 2.2",
"Third Level": "Drittes Level",
"Third Level 3.1": "Drittes Level 3.1",
"Third Level 3.2": "Drittes Level 2.2",
"Disabled Menu": "Deaktiviertes Menü",
"Documentation": "Dokumentation",
"Raise Support": "Unterstützung erhöhen",
"Change Log": "Änderungsprotokoll",
"text": "Kuchen Sesam Snaps Cupcake Lebkuchen dänisch Ich liebe Lebkuchen. Apfelkuchen Jujubes Chupa Chups Muffin Halvah Lutscher. Schokoladenkuchen-Haferkuchen-Tiramisumarzipanzuckerpflaume. Donut süße Torte Haferkuchen Dragée Obstkuchen Zuckerwatte Zitronentropfen.",
"Pricing": "Preisgestaltung",
"Blog": "Blog",
"Detail": "Einzelheiten",
"Form Repeater": "Form Repeater",
"Preview": "Vorschau",
"Add": "Hinzufügen",
"Ratings": "Bewertungen",
"show": "show",
"entries": "einträge",
"search": "suche",
"Prev": "Zurück",
"Next": "Nächster",
"BlockUI": "BlockUI",
"Reactstrap": "Reactstrap",
"Welcome": "Herzlich willkommen",
"Reset Password": "Passwort zurücksetzen",
"Verify Email": "E-Mail bestätigen",
"Deactivate Account": "Benutzerkonto deaktivieren",
"Promotional": "Werbung",
"Apps & Pages": "Apps & Seiten",
"User Interface": "Benutzeroberfläche",
"Misc": "Sonstiges"
}

179
src/@core/assets/data/locales/en.json

@ -0,0 +1,179 @@
{
"Dashboards": "Dashboards",
"Analytics": "Analytics",
"Apps": "Apps",
"eCommerce": "eCommerce",
"Email": "Email",
"Chat": "Chat",
"Todo": "Todo",
"Calendar": "Calendar",
"Ecommerce": "Ecommerce",
"Shop": "Shop",
"Wish List": "Wish List",
"Details": "Details",
"Checkout": "Checkout",
"User": "User",
"List": "List",
"View": "View",
"Edit": "Edit",
"Starter Kit": "Starter Kit",
"1 Column": "1 Column",
"2 Columns": "2 Columns",
"Fixed Navbar": "Fixed Navbar",
"Floating Navbar": "Floating Navbar",
"Fixed Layout": "Fixed Layout",
"Static Layout": "Static Layout",
"Dark Layout": "Dark Layout",
"Light Layout": "Light Layout",
"UI Elements": "UI Elements",
"Content": "Content",
"Grid": "Grid",
"Typography": "Typography",
"Text Utilities": "Text Utilities",
"Syntax Highlighter": "Syntax Highlighter",
"Colors": "Colors",
"Icons": "Icons",
"Feather": "Feather",
"Card": "Card",
"Basic": "Basic",
"Advance": "Advance",
"Statistics": "Statistics",
"Actions": "Actions",
"Table": "Table",
"Reactstrap Tables": "Reactstrap Tables",
"React Tables": "React Tables",
"DataTable": "DataTable",
"Advanced": "Advanced",
"Mail Template": "Mail Template",
"Page Layouts": "Page Layouts",
"Collapsed Menu": "Collapsed Menu",
"Layout Boxed": "Layout Boxed",
"Without Menu": "Without Menu",
"Layout Empty": "Layout Empty",
"Layout Blank": "Layout Blank",
"Components": "Components",
"Alerts": "Alerts",
"Buttons": "Buttons",
"Breadcrumbs": "Breadcrumbs",
"Carousel": "Carousel",
"Collapse": "Collapse",
"Dropdowns": "Dropdowns",
"List Group": "List Group",
"Modals": "Modals",
"Pagination": "Pagination",
"Navs Component": "Navs Component",
"Navbar": "Navbar",
"Tabs Component": "Tabs Component",
"Pills Component": "Pills Component",
"Tooltips": "Tooltips",
"Popovers": "Popovers",
"Badges": "Badges",
"Pill Badges": "Pill Badges",
"Progress": "Progress",
"Media Objects": "Media Objects",
"Spinner": "Spinner",
"Toasts": "Toasts",
"Timeline": "Timeline",
"Extra Components": "Extra Components",
"Avatar": "Avatar",
"Chips": "Chips",
"Divider": "Divider",
"Wizard": "Wizard",
"Forms & Tables": "Forms & Tables",
"Form Elements": "Form Elements",
"Select": "Select",
"Switch": "Switch",
"Checkbox": "Checkbox",
"Radio": "Radio",
"Input": "Input",
"Input Groups": "Input Groups",
"Number Input": "Number Input",
"Textarea": "Textarea",
"Date & Time Picker": "Date & Time Picker",
"Input Mask": "Input Mask",
"Form Layout": "Form Layout",
"Form Wizard": "Form Wizard",
"Formik": "Formik",
"Form Validation": "Form Validation",
"Pages": "Pages",
"Authentication": "Authentication",
"Login v1": "Login v1",
"Login v2": "Login v2",
"Register v1": "Register v1",
"Register v2": "Register v2",
"Forgot Password v1": "Forgot Password v1",
"Forgot Password v2": "Forgot Password v2",
"Reset Password v1": "Reset Password v1",
"Reset Password v2": "Reset Password v2",
"Miscellaneous": "Miscellaneous",
"Coming Soon": "Coming Soon",
"Error": "Error",
"Not Authorized": "Not Authorized",
"Maintenance": "Maintenance",
"Extensions": "Extensions",
"Profile": "Profile",
"Account Settings": "Account Settings",
"FAQ": "FAQ",
"Knowledge Base": "Knowledge Base",
"Search": "Search",
"Invoice": "Invoice",
"Charts & Maps": "Charts & Maps",
"Charts": "Charts",
"Apex": "Apex",
"ChartJS": "ChartJS",
"Recharts": "Recharts",
"Leaflet Maps": "Leaflet Maps",
"Sweet Alert": "Sweet Alert",
"Toastr": "Toastr",
"Sliders": "Sliders",
"File Uploader": "File Uploader",
"Editor": "Editor",
"Drag & Drop": "Drag & Drop",
"Tour": "Tour",
"Auto Complete": "Auto Complete",
"Clipboard": "Clipboard",
"React Player": "React Player",
"Swiper": "Swiper",
"Context Menu": "Context Menu",
"Tree": "Tree",
"I18n": "I18n",
"React Paginate": "React Paginate",
"Export": "Export",
"Import": "Import",
"Export Selected": "Export Selected",
"Access Control": "Access Control",
"Others": "Others",
"Menu Levels": "Menu Levels",
"Second Level": "Second Level",
"Second Level 2.1": "Second Level 2.1",
"Second Level 2.2": "Second Level 2.2",
"Third Level 3.1": "Third Level 3.1",
"Third Level 3.2": "Third Level 3.2",
"Disabled Menu": "Disabled Menu",
"Documentation": "Documentation",
"Raise Support": "Raise Support",
"Change Log": "Change Log",
"text": "Cake sesame snaps cupcake gingerbread danish I love gingerbread. Apple pie pie jujubes chupa chups muffin halvah lollipop. Chocolate cake oat cake tiramisu marzipan sugar plum. Donut sweet pie oat cake dragée fruitcake cotton candy lemon drops.",
"Pricing": "Pricing",
"Blog": "Blog",
"Detail": "Detail",
"Form Repeater": "Form Repeater",
"Preview": "Preview",
"Add": "Add",
"Ratings": "Ratings",
"show": "show",
"entries": "entries",
"search": "search",
"Prev": "Prev",
"Next": "Next",
"BlockUI": "BlockUI",
"Reactstrap": "Reactstrap",
"Welcome": "Welcome",
"Reset Password": "Reset Password",
"Verify Email": "Verify Email",
"Deactivate Account": "Deactivate Account",
"Promotional": "Promotional",
"Apps & Pages": "Apps & Pages",
"User Interface": "User Interface",
"Misc": "Misc"
}

180
src/@core/assets/data/locales/fr.json

@ -0,0 +1,180 @@
{
"Dashboards": "Tableau de bord",
"Analytics": "Analytique",
"Apps": "applications",
"eCommerce": "commerce électronique",
"Email": "Email",
"Chat": "Bavarder",
"Todo": "Faire",
"Calendar": "Calandre",
"Ecommerce": "Commerce électronique",
"Shop": "Boutique",
"Wish List": "Liste de souhaits",
"Details": "Détails",
"User": "Utilisatrice",
"List": "liste",
"View": "Vue",
"Edit": "modifier",
"Checkout": "Check-out",
"Starter Kit": "Kit de démarrage",
"1 Column": "1 colonne",
"2 Columns": "2 colonnes",
"Fixed Navbar": "Barre de navigation fixe",
"Floating Navbar": "Barre de navigation flottante",
"Fixed Layout": "Mise en page fixe",
"Static Layout": "Disposition statique",
"Dark Layout": "Mise en page sombre",
"Light Layout": "Mise en lumière",
"UI Elements": "Éléments d'interface utilisateur",
"Content": "Contenu",
"Grid": "la grille",
"Typography": "Typographie",
"Text Utilities": "Utilitaires de texte",
"Syntax Highlighter": "Surligneur de syntaxe",
"Colors": "Couleurs",
"Icons": "Les icônes",
"Feather": "Plume",
"Card": "Carte",
"Basic": "De base",
"Advance": "Avance",
"Statistics": "Statistiques",
"Actions": "Actions de carte",
"Table": "Table",
"Reactstrap Tables": "Tables de réactstrap",
"React Tables": "Tables de réaction",
"DataTable": "DataTable",
"Advanced": "Avancé",
"Mail Template": "Modèle de courrier",
"Page Layouts": "Mises en page",
"Collapsed Menu": "Menu réduit",
"Layout Boxed": "Disposition encadrée",
"Without Menu": "Sans menu",
"Layout Empty": "Disposition vide",
"Layout Blank": "Mise en page vierge",
"Components": "Composants",
"Alerts": "Les alertes",
"Buttons": "Boutons",
"Breadcrumbs": "Chapelure",
"Carousel": "Carrousel",
"Collapse": "Effondrer",
"Dropdowns": "Des listes déroulantes",
"List Group": "Groupe de liste",
"Modals": "Modaux",
"Pagination": "Pagination",
"Navs Component": "Composante navs",
"Navbar": "Barre de navigation",
"Tabs Component": "Composant Onglets",
"Pills Component": "Composant pilules",
"Tooltips": "Info-bulles",
"Popovers": "popovers",
"Badges": "Insignes",
"Pill Badges": "Insignes de pilule",
"Progress": "Le progrès",
"Media Objects": "Objets multimédia",
"Spinner": "Fileur",
"Toasts": "Toasts",
"Timeline": "Chronologie",
"Extra Components": "Composants Extra",
"Avatar": "Avatar",
"Chips": "chips",
"Divider": "Diviseur",
"Wizard": "sorcier",
"Form Elements": "Éléments de formulaire",
"Forms & Tables": "Formulaires et tableaux",
"Select": "Sélectionner",
"Switch": "Commutateur",
"Checkbox": "Case à cocher",
"Radio": "Radio",
"Input": "Contribution",
"Input Groups": "Groupes d'entrée",
"Number Input": "Nombre d'entrée",
"Textarea": "Textarea",
"Date & Time Picker": "Sélecteur de date et heure",
"Input Mask": "Masque de saisie",
"Form Layout": "Disposition du formulaire",
"Form Wizard": "Assistant de formulaire",
"Form Validation": "Validation de formulaire",
"Formik": "Formik",
"Pages": "Des pages",
"Authentication": "Authentification",
"Login v1": "S'identifier v1",
"Login v2": "S'identifier v2",
"Register v1": "S'inscrire v1",
"Register v2": "S'inscrire v2",
"Forgot Password v1": "Mot de passe oublié v1",
"Forgot Password v2": "Mot de passe oublié v2",
"Reset Password v1": "réinitialiser le mot de passe v1",
"Reset Password v2": "réinitialiser le mot de passe v2",
"Coming Soon": "Arrive bientôt",
"Error": "Erreur",
"Not Authorized": "Pas autorisé",
"Maintenance": "Entretien",
"Profile": "Profil",
"Account Settings": "Paramètres du compte",
"FAQ": "FAQ",
"Knowledge Base": "Base de connaissances",
"Search": "Chercher",
"Invoice": "Facture d'achat",
"Charts & Maps": "Graphiques et cartes",
"Charts": "Graphiques",
"Apex": "Sommet",
"ChartJS": "ChartJS",
"Recharts": "Recharts",
"Leaflet Maps": "Leaflet Maps",
"Extensions": "Les extensions",
"Sweet Alert": "Douce alerte",
"Toastr": "Toastr",
"Sliders": "Curseurs",
"File Uploader": "Chargeur de fichiers",
"Editor": "éditeur",
"Swiper": "Swiper",
"Tree": "Arbre",
"Drag & Drop": "Drag & Drop",
"Tour": "Tour",
"Auto Complete": "+Terminé automatiquement",
"Clipboard": "Presse-papiers",
"React Player": "Réagir multimédia",
"Context Menu": "Menu contextuel",
"Miscellaneous": "Divers",
"I18n": "I18n",
"React Paginate": "Réagir Paginer",
"Export": "Exportation",
"Import": "Importation",
"Export Selected": "Exporter la sélection",
"Access Control": "Contrôle d'accès",
"Others": "Autres",
"Menu Levels": "Niveaux de menu",
"Second Level": "Deuxième niveau",
"Second Level 2.1": "Deuxième niveau 2.1",
"Second Level 2.2": "Deuxième niveau 2.2",
"Third Level": "Troisième niveau",
"Third Level 3.1": "Troisième niveau 3.1",
"Third Level 3.2": "Troisième niveau 3.2",
"Disabled Menu": "Menu désactivé",
"Documentation": "Documentation",
"Raise Support": "Augmenter le soutien",
"Change Log": "Changer le journal",
"text": "Gâteau au sésame s'enclenche petit pain au pain d'épices danois J'adore le pain d'épices. Tarte aux pommes jujubes chupa chups muffin halvah lollipop. Gateau au chocolat gateau d 'avoine tiramisu prune sucre. Donut tarte sucrée gâteau à l'avoine dragée gouttes de fruits gâteau au citron en barbe à papa.",
"Pricing": "Tarification",
"Blog": "Blog",
"Detail": "Détails",
"Form Repeater": "Répétiteur de formulaire",
"Preview": "Aperçu",
"Add": "Ajouter",
"Ratings": "Évaluations",
"show": "spectacle",
"entries": "entrées",
"search": "chercher",
"Prev": "Précédente",
"Next": "Prochain",
"BlockUI": "BlockUI",
"Reactstrap": "Reactstrap",
"Welcome": "Welcome",
"Reset Password": "Réinitialiser le mot de passe",
"Verify Email": "Vérifier l'e-mail",
"Deactivate Account": "Désactiver le compte",
"Promotional": "Promotionnel",
"Apps & Pages": "Applications et pages",
"User Interface": "Interface utilisateur",
"Misc": "Divers"
}

181
src/@core/assets/data/locales/pt.json

@ -0,0 +1,181 @@
{
"Dashboards": "painel de controle",
"Analytics": "Analytics",
"eCommerce": "comércio eletrônico",
"Apps": "Apps",
"Email": "O email",
"Chat": "Bate-papo",
"Todo": "Façam",
"Calendar": "Calendário",
"Ecommerce": "Comércio eletrônico",
"Shop": "fazer compras",
"Wish List": "Lista de Desejos",
"Details": "Detalhes",
"Checkout": "Confira",
"User": "Do utilizador",
"List": "Lista",
"View": "Visão",
"Edit": "Editar",
"Starter Kit": "Kit iniciante",
"1 Column": "1 coluna",
"2 Columns": "2 colunas",
"Fixed Navbar": "Navbar fixa",
"Floating Navbar": "Navbar flutuante",
"Fixed Layout": "Layout fixo",
"Static Layout": "Layout estático",
"Dark Layout": "Layout escuro",
"Light Layout": "Layout de luz",
"Content": "Conteúdo",
"Grid": "Grade",
"Typography": "Tipografia",
"Text Utilities": "Utilitários de texto",
"Syntax Highlighter": "Marcador de sintaxe",
"Helper Classes": "Classes Auxiliares",
"Colors": "Cores",
"Icons": "Ícones",
"Feather": "Pena",
"UI Elements": "Elementos da interface do usuário",
"Card": "Cartão",
"Basic": "Basic",
"Advance": "Avançar",
"Statistics": "Estatisticas",
"Actions": "Ações do Cartão",
"Table": "Tabela",
"Reactstrap Tables": "Mesa Reactstrap",
"React Tables": "Mesa React",
"DataTable": "Tabela de dados",
"Advanced": "Avançado",
"Mail Template": "Modelo de Correio",
"Page Layouts": "Layouts de página",
"Collapsed Menu": "Menu recolhido",
"Layout Boxed": "Layout em caixa",
"Without Menu": "Sem Menu",
"Layout Empty": "Layout vazio",
"Layout Blank": "Layout em branco",
"Components": "Componentes",
"Alerts": "Alertas",
"Buttons": "Botões",
"Breadcrumbs": "Pão ralado",
"Carousel": "Carrossel",
"Collapse": "Colapso",
"Dropdowns": "Dropdowns",
"List Group": "Grupo de listas",
"Modals": "Modais",
"Pagination": "Paginação",
"Navs Component": "Componente Navs",
"Navbar": "Navbar",
"Tabs Component": "Componente de guias",
"Pills Component": "Componente de comprimidos",
"Tooltips": "Dicas de ferramentas",
"Popovers": "Popovers",
"Badges": "Distintivos",
"Pill Badges": "Emblemas de pílula",
"Progress": "Progresso",
"Media Objects": "Objetos de Mídia",
"Spinner": "Girador",
"Toasts": "Torradas",
"Timeline": "Linha do tempo",
"Extra Components": "Componentes extras",
"Avatar": "Avatar",
"Chips": "Salgadinhos",
"Divider": "Divisor",
"Wizard": "Mago",
"Form Elements": "Elementos do formulário",
"Forms & Tables": "Formulários e tabelas",
"Select": "Selecione",
"Switch": "Interruptor",
"Checkbox": "Caixa de seleção",
"Radio": "Rádio",
"Input": "Entrada",
"Input Groups": "Grupos de entrada",
"Number Input": "Entrada numérica",
"Textarea": "Textarea",
"Date & Time Picker": "Selecionador de data e hora",
"Input Mask": "Máscara de entrada",
"Form Layout": "Layout do formulário",
"Form Wizard": "Assistente de Formulário",
"Form Validation": "Validação de Formulário",
"Formik": "Formik",
"Pages": "Páginas",
"Authentication": "Autenticação",
"Login v1": "Conecte-se v1",
"Login v2": "Conecte-se v2",
"Register v1": "Registro v1",
"Register v2": "Registro v2",
"Forgot Password v1": "Esqueceu a senha v1",
"Forgot Password v2": "Esqueceu a senha v2",
"Reset Password v1": "Redefinir senha v1",
"Reset Password v2": "Redefinir senha v2",
"Coming Soon": "Em breve",
"Error": "Erro",
"Not Authorized": "Não autorizado",
"Maintenance": "Manutenção",
"Profile": "Perfil",
"FAQ": "Perguntas frequentes",
"Knowledge Base": "Base de Conhecimento",
"Search": "Procurar",
"Account Settings": "Configurações da conta",
"Invoice": "Fatura",
"Swiper": "Swiper",
"Miscellaneous": "Diversas",
"Charts & Maps": "Gráficos e Mapas",
"Charts": "Gráficos",
"Apex": "Ápice",
"ChartJS": "ChartJS",
"Recharts": "Recharts",
"Leaflet Maps": "Leaflet Maps",
"Extensions": "Extensões",
"Sweet Alert": "Alerta Doce",
"Toastr": "Toastr",
"Sliders": "Sliders",
"File Uploader": "Uploader de arquivos",
"Editor": "Editor",
"Tree": "árvore",
"Drag & Drop": "Arraste e solte",
"Tour": "Tour",
"Auto Complete": "Autocompletar",
"Clipboard": "Prancheta",
"React Player": "Reagir de mídia",
"Context Menu": "Menu contextual",
"I18n": "I18n",
"React Paginate": "React Paginate",
"Export": "Exportação",
"Import": "Importar",
"Export Selected": "Exportar selecionado",
"Access Control": "Controle de acesso",
"Others": "Outras",
"Menu Levels": "Níveis de Menu",
"Second Level": "Segundo nível",
"Second Level 2.1": "Segundo nível 2.1",
"Second Level 2.2": "Segundo nível 2.2",
"Third Level": "Terceiro nivel",
"Third Level 3.1": "Terceiro nivel 3.1",
"Third Level 3.2": "Terceiro nivel 3.2",
"Disabled Menu": "Menu desativado",
"Documentation": "Documentação",
"Raise Support": "Levantar Suporte",
"Change Log": "Log de alterações",
"text": "O sésamo do bolo agarra dinamarquês do pão-de-espécie do queque eu amo o pão-de-espécie. Torta de torta de maçã jujuba chupa chups muffin halvah pirulito. Ameixa do açúcar do maçapão do tiramisu do bolo da aveia do bolo de chocolate. Bolo de aveia de torta doce donut dragée fruitcake algodão doce gotas de limão.",
"Pricing": "Preços",
"Blog": "Blog",
"Detail": "Detalhes",
"Form Repeater": "Repetidor de formulários",
"Preview": "Pré-visualização",
"Add": "Adicionar",
"Ratings": "Avaliações",
"show": "mostrar",
"entries": "entradas",
"search": "procurar",
"Prev": "Anterior",
"Next": "Próximo",
"BlockUI": "BlockUI",
"Reactstrap": "Reactstrap",
"Welcome": "Bem-vinda",
"Reset Password": "Redefinir senha",
"Verify Email": "Verificar e-mail",
"Deactivate Account": "Desativar conta",
"Promotional": "Promocional",
"Apps & Pages": "Aplicativos e páginas",
"User Interface": "Interface de usuário",
"Misc": "Misc"
}

BIN
src/@core/assets/fonts/feather/fonts/feather.eot

Binary file not shown.

849
src/@core/assets/fonts/feather/fonts/feather.svg

@ -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.202041zM256.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: 209 KiB

BIN
src/@core/assets/fonts/feather/fonts/feather.ttf

Binary file not shown.

BIN
src/@core/assets/fonts/feather/fonts/feather.woff

Binary file not shown.

568
src/@core/assets/fonts/feather/iconfont.css

@ -0,0 +1,568 @@
@font-face {
font-family: "feather";
src: url('fonts/feather.eot?t=1525787366991'); /* IE9*/
src: url('fonts/feather.eot?t=1525787366991#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('fonts/feather.woff?t=1525787366991') format('woff'), /* chrome, firefox */
url('fonts/feather.ttf?t=1525787366991') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
url('fonts/feather.svg?t=1525787366991#feather') format('svg'); /* iOS 4.1- */
}
.feather {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'feather' !important;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-alert-octagon:before { content: "\e81b"; }
.icon-alert-circle:before { content: "\e81c"; }
.icon-activity:before { content: "\e81d"; }
.icon-alert-triangle:before { content: "\e81e"; }
.icon-align-center:before { content: "\e81f"; }
.icon-airplay:before { content: "\e820"; }
.icon-align-justify:before { content: "\e821"; }
.icon-align-left:before { content: "\e822"; }
.icon-align-right:before { content: "\e823"; }
.icon-arrow-down-left:before { content: "\e824"; }
.icon-arrow-down-right:before { content: "\e825"; }
.icon-anchor:before { content: "\e826"; }
.icon-aperture:before { content: "\e827"; }
.icon-arrow-left:before { content: "\e828"; }
.icon-arrow-right:before { content: "\e829"; }
.icon-arrow-down:before { content: "\e82a"; }
.icon-arrow-up-left:before { content: "\e82b"; }
.icon-arrow-up-right:before { content: "\e82c"; }
.icon-arrow-up:before { content: "\e82d"; }
.icon-award:before { content: "\e82e"; }
.icon-bar-chart:before { content: "\e82f"; }
.icon-at-sign:before { content: "\e830"; }
.icon-bar-chart-2:before { content: "\e831"; }
.icon-battery-charging:before { content: "\e832"; }
.icon-bell-off:before { content: "\e833"; }
.icon-battery:before { content: "\e834"; }
.icon-bluetooth:before { content: "\e835"; }
.icon-bell:before { content: "\e836"; }
.icon-book:before { content: "\e837"; }
.icon-briefcase:before { content: "\e838"; }
.icon-camera-off:before { content: "\e839"; }
.icon-calendar:before { content: "\e83a"; }
.icon-bookmark:before { content: "\e83b"; }
.icon-box:before { content: "\e83c"; }
.icon-camera:before { content: "\e83d"; }
.icon-check-circle:before { content: "\e83e"; }
.icon-check:before { content: "\e83f"; }
.icon-check-square:before { content: "\e840"; }
.icon-cast:before { content: "\e841"; }
.icon-chevron-down:before { content: "\e842"; }
.icon-chevron-left:before { content: "\e843"; }
.icon-chevron-right:before { content: "\e844"; }
.icon-chevron-up:before { content: "\e845"; }
.icon-chevrons-down:before { content: "\e846"; }
.icon-chevrons-right:before { content: "\e847"; }
.icon-chevrons-up:before { content: "\e848"; }
.icon-chevrons-left:before { content: "\e849"; }
.icon-circle:before { content: "\e84a"; }
.icon-clipboard:before { content: "\e84b"; }
.icon-chrome:before { content: "\e84c"; }
.icon-clock:before { content: "\e84d"; }
.icon-cloud-lightning:before { content: "\e84e"; }
.icon-cloud-drizzle:before { content: "\e84f"; }
.icon-cloud-rain:before { content: "\e850"; }
.icon-cloud-off:before { content: "\e851"; }
.icon-codepen:before { content: "\e852"; }
.icon-cloud-snow:before { content: "\e853"; }
.icon-compass:before { content: "\e854"; }
.icon-copy:before { content: "\e855"; }
.icon-corner-down-right:before { content: "\e856"; }
.icon-corner-down-left:before { content: "\e857"; }
.icon-corner-left-down:before { content: "\e858"; }
.icon-corner-left-up:before { content: "\e859"; }
.icon-corner-up-left:before { content: "\e85a"; }
.icon-corner-up-right:before { content: "\e85b"; }
.icon-corner-right-down:before { content: "\e85c"; }
.icon-corner-right-up:before { content: "\e85d"; }
.icon-cpu:before { content: "\e85e"; }
.icon-credit-card:before { content: "\e85f"; }
.icon-crosshair:before { content: "\e860"; }
.icon-disc:before { content: "\e861"; }
.icon-delete:before { content: "\e862"; }
.icon-download-cloud:before { content: "\e863"; }
.icon-download:before { content: "\e864"; }
.icon-droplet:before { content: "\e865"; }
.icon-edit-2:before { content: "\e866"; }
.icon-edit:before { content: "\e867"; }
.icon-edit-1:before { content: "\e868"; }
.icon-external-link:before { content: "\e869"; }
.icon-eye:before { content: "\e86a"; }
.icon-feather:before { content: "\e86b"; }
.icon-facebook:before { content: "\e86c"; }
.icon-file-minus:before { content: "\e86d"; }
.icon-eye-off:before { content: "\e86e"; }
.icon-fast-forward:before { content: "\e86f"; }
.icon-file-text:before { content: "\e870"; }
.icon-film:before { content: "\e871"; }
.icon-file:before { content: "\e872"; }
.icon-file-plus:before { content: "\e873"; }
.icon-folder:before { content: "\e874"; }
.icon-filter:before { content: "\e875"; }
.icon-flag:before { content: "\e876"; }
.icon-globe:before { content: "\e877"; }
.icon-grid:before { content: "\e878"; }
.icon-heart:before { content: "\e879"; }
.icon-home:before { content: "\e87a"; }
.icon-github:before { content: "\e87b"; }
.icon-image:before { content: "\e87c"; }
.icon-inbox:before { content: "\e87d"; }
.icon-layers:before { content: "\e87e"; }
.icon-info:before { content: "\e87f"; }
.icon-instagram:before { content: "\e880"; }
.icon-layout:before { content: "\e881"; }
.icon-link-2:before { content: "\e882"; }
.icon-life-buoy:before { content: "\e883"; }
.icon-link:before { content: "\e884"; }
.icon-log-in:before { content: "\e885"; }
.icon-list:before { content: "\e886"; }
.icon-lock:before { content: "\e887"; }
.icon-log-out:before { content: "\e888"; }
.icon-loader:before { content: "\e889"; }
.icon-mail:before { content: "\e88a"; }
.icon-maximize-2:before { content: "\e88b"; }
.icon-map:before { content: "\e88c"; }
.icon-map-pin:before { content: "\e88e"; }
.icon-menu:before { content: "\e88f"; }
.icon-message-circle:before { content: "\e890"; }
.icon-message-square:before { content: "\e891"; }
.icon-minimize-2:before { content: "\e892"; }
.icon-mic-off:before { content: "\e893"; }
.icon-minus-circle:before { content: "\e894"; }
.icon-mic:before { content: "\e895"; }
.icon-minus-square:before { content: "\e896"; }
.icon-minus:before { content: "\e897"; }
.icon-moon:before { content: "\e898"; }
.icon-monitor:before { content: "\e899"; }
.icon-more-vertical:before { content: "\e89a"; }
.icon-more-horizontal:before { content: "\e89b"; }
.icon-move:before { content: "\e89c"; }
.icon-music:before { content: "\e89d"; }
.icon-navigation-2:before { content: "\e89e"; }
.icon-navigation:before { content: "\e89f"; }
.icon-octagon:before { content: "\e8a0"; }
.icon-package:before { content: "\e8a1"; }
.icon-pause-circle:before { content: "\e8a2"; }
.icon-pause:before { content: "\e8a3"; }
.icon-percent:before { content: "\e8a4"; }
.icon-phone-call:before { content: "\e8a5"; }
.icon-phone-forwarded:before { content: "\e8a6"; }
.icon-phone-missed:before { content: "\e8a7"; }
.icon-phone-off:before { content: "\e8a8"; }
.icon-phone-incoming:before { content: "\e8a9"; }
.icon-phone:before { content: "\e8aa"; }
.icon-phone-outgoing:before { content: "\e8ab"; }
.icon-pie-chart:before { content: "\e8ac"; }
.icon-play-circle:before { content: "\e8ad"; }
.icon-play:before { content: "\e8ae"; }
.icon-plus-square:before { content: "\e8af"; }
.icon-plus-circle:before { content: "\e8b0"; }
.icon-plus:before { content: "\e8b1"; }
.icon-pocket:before { content: "\e8b2"; }
.icon-printer:before { content: "\e8b3"; }
.icon-power:before { content: "\e8b4"; }
.icon-radio:before { content: "\e8b5"; }
.icon-repeat:before { content: "\e8b6"; }
.icon-refresh-ccw:before { content: "\e8b7"; }
.icon-rewind:before { content: "\e8b8"; }
.icon-rotate-ccw:before { content: "\e8b9"; }
.icon-refresh-cw:before { content: "\e8ba"; }
.icon-rotate-cw:before { content: "\e8bb"; }
.icon-save:before { content: "\e8bc"; }
.icon-search:before { content: "\e8bd"; }
.icon-server:before { content: "\e8be"; }
.icon-scissors:before { content: "\e8bf"; }
.icon-share-2:before { content: "\e8c0"; }
.icon-share:before { content: "\e8c1"; }
.icon-shield:before { content: "\e8c2"; }
.icon-settings:before { content: "\e8c3"; }
.icon-skip-back:before { content: "\e8c4"; }
.icon-shuffle:before { content: "\e8c5"; }
.icon-sidebar:before { content: "\e8c6"; }
.icon-skip-forward:before { content: "\e8c7"; }
.icon-slack:before { content: "\e8c8"; }
.icon-slash:before { content: "\e8c9"; }
.icon-smartphone:before { content: "\e8ca"; }
.icon-square:before { content: "\e8cb"; }
.icon-speaker:before { content: "\e8cc"; }
.icon-star:before { content: "\e8cd"; }
.icon-stop-circle:before { content: "\e8ce"; }
.icon-sun:before { content: "\e8cf"; }
.icon-sunrise:before { content: "\e8d0"; }
.icon-tablet:before { content: "\e8d1"; }
.icon-tag:before { content: "\e8d2"; }
.icon-sunset:before { content: "\e8d3"; }
.icon-target:before { content: "\e8d4"; }
.icon-thermometer:before { content: "\e8d5"; }
.icon-thumbs-up:before { content: "\e8d6"; }
.icon-thumbs-down:before { content: "\e8d7"; }
.icon-toggle-left:before { content: "\e8d8"; }
.icon-toggle-right:before { content: "\e8d9"; }
.icon-trash-2:before { content: "\e8da"; }
.icon-trash:before { content: "\e8db"; }
.icon-trending-up:before { content: "\e8dc"; }
.icon-trending-down:before { content: "\e8dd"; }
.icon-triangle:before { content: "\e8de"; }
.icon-type:before { content: "\e8df"; }
.icon-twitter:before { content: "\e8e0"; }
.icon-upload:before { content: "\e8e1"; }
.icon-umbrella:before { content: "\e8e2"; }
.icon-upload-cloud:before { content: "\e8e3"; }
.icon-unlock:before { content: "\e8e4"; }
.icon-user-check:before { content: "\e8e5"; }
.icon-user-minus:before { content: "\e8e6"; }
.icon-user-plus:before { content: "\e8e7"; }
.icon-user-x:before { content: "\e8e8"; }
.icon-user:before { content: "\e8e9"; }
.icon-users:before { content: "\e8ea"; }
.icon-video-off:before { content: "\e8eb"; }
.icon-video:before { content: "\e8ec"; }
.icon-voicemail:before { content: "\e8ed"; }
.icon-volume-x:before { content: "\e8ee"; }
.icon-volume-2:before { content: "\e8ef"; }
.icon-volume-1:before { content: "\e8f0"; }
.icon-volume:before { content: "\e8f1"; }
.icon-watch:before { content: "\e8f2"; }
.icon-wifi:before { content: "\e8f3"; }
.icon-x-square:before { content: "\e8f4"; }
.icon-wind:before { content: "\e8f5"; }
.icon-x:before { content: "\e8f6"; }
.icon-x-circle:before { content: "\e8f7"; }
.icon-zap:before { content: "\e8f8"; }
.icon-zoom-in:before { content: "\e8f9"; }
.icon-zoom-out:before { content: "\e8fa"; }
.icon-command:before { content: "\e8fb"; }
.icon-cloud:before { content: "\e8fc"; }
.icon-hash:before { content: "\e8fd"; }
.icon-headphones:before { content: "\e8fe"; }
.icon-underline:before { content: "\e8ff"; }
.icon-italic:before { content: "\e900"; }
.icon-bold:before { content: "\e901"; }
.icon-crop:before { content: "\e902"; }
.icon-help-circle:before { content: "\e903"; }
.icon-paperclip:before { content: "\e904"; }
.icon-shopping-cart:before { content: "\e905"; }
.icon-tv:before { content: "\e906"; }
.icon-wifi-off:before { content: "\e907"; }
.icon-minimize:before { content: "\e88d"; }
.icon-maximize:before { content: "\e908"; }
.icon-gitlab:before { content: "\e909"; }
.icon-sliders:before { content: "\e90a"; }
.icon-star-on:before { content: "\e90b"; }
.icon-heart-on:before { content: "\e90c"; }
.icon-archive:before { content: "\e90d"; }
.icon-arrow-down-circle:before { content: "\e90e"; }
.icon-arrow-up-circle:before { content: "\e90f"; }
.icon-arrow-left-circle:before { content: "\e910"; }
.icon-arrow-right-circle:before { content: "\e911"; }
.icon-bar-chart-line-:before { content: "\e912"; }
.icon-bar-chart-line:before { content: "\e913"; }
.icon-book-open:before { content: "\e914"; }
.icon-code:before { content: "\e915"; }
.icon-database:before { content: "\e916"; }
.icon-dollar-sign:before { content: "\e917"; }
.icon-folder-plus:before { content: "\e918"; }
.icon-gift:before { content: "\e919"; }
.icon-folder-minus:before { content: "\e91a"; }
.icon-git-commit:before { content: "\e91b"; }
.icon-git-branch:before { content: "\e91c"; }
.icon-git-pull-request:before { content: "\e91d"; }
.icon-git-merge:before { content: "\e91e"; }
.icon-linkedin:before { content: "\e91f"; }
.icon-hard-drive:before { content: "\e920"; }
.icon-more-vertical-:before { content: "\e921"; }
.icon-more-horizontal-:before { content: "\e922"; }
.icon-rss:before { content: "\e923"; }
.icon-send:before { content: "\e924"; }
.icon-shield-off:before { content: "\e925"; }
.icon-shopping-bag:before { content: "\e926"; }
.icon-terminal:before { content: "\e927"; }
.icon-truck:before { content: "\e928"; }
.icon-zap-off:before { content: "\e929"; }
.icon-youtube:before { content: "\e92a"; }

15
src/@core/auth/jwt/jwtDefaultConfig.js

@ -0,0 +1,15 @@
// ** Auth Endpoints
export default {
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'
}

108
src/@core/auth/jwt/jwtService.js

@ -0,0 +1,108 @@
import axios from 'axios'
import jwtDefaultConfig from './jwtDefaultConfig'
export default class JwtService {
// ** jwtConfig <= Will be used by this service
jwtConfig = { ...jwtDefaultConfig }
// ** For Refreshing Token
isAlreadyFetchingAccessToken = false
// ** For Refreshing Token
subscribers = []
constructor(jwtOverrideConfig) {
this.jwtConfig = { ...this.jwtConfig, ...jwtOverrideConfig }
// ** Request Interceptor
axios.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
axios.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.axios(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 axios.post(this.jwtConfig.loginEndpoint, ...args)
}
register(...args) {
return axios.post(this.jwtConfig.registerEndpoint, ...args)
}
refreshToken() {
return axios.post(this.jwtConfig.refreshEndpoint, {
refreshToken: this.getRefreshToken()
})
}
}

11
src/@core/auth/jwt/useJwt.js

@ -0,0 +1,11 @@
// ** JWT Service Import
import JwtService from './jwtService'
// ** Export Service as useJwt
export default function useJwt(jwtOverrideConfig) {
const jwt = new JwtService(jwtOverrideConfig)
return {
jwt
}
}

120
src/@core/components/app-collapse/index.js

@ -0,0 +1,120 @@
// ** React Imports
import { useState } from 'react'
// ** Third Party Components
import Proptypes from 'prop-types'
import classnames from 'classnames'
import { ChevronUp } from 'react-feather'
import { Collapse, Card, CardHeader, CardBody, CardTitle } from 'reactstrap'
const AppCollapse = props => {
// ** Props
const { data, type, accordion, active, toggle, titleKey, contentKey, className } = props
/**
** If accordion is true then return only one active index else return an Array
*/
const defaultActive = () => {
if (accordion) {
return active
} else {
return [...active]
}
}
// ** State
const [openCollapse, setOpenCollapse] = useState(defaultActive())
// ** Function to handle Collapse Toggle
const handleCollapseToggle = id => {
if (accordion) {
if (id === openCollapse) {
setOpenCollapse(null)
} else {
setOpenCollapse(id)
}
} else {
const arr = openCollapse,
index = arr.indexOf(id)
if (arr.includes(id)) {
arr.splice(index, 1)
setOpenCollapse([...arr])
} else {
arr.push(id)
setOpenCollapse([...arr])
}
}
}
// ** Function to render collapse
const renderData = () => {
return data.map((item, index) => {
const title = titleKey ? item[titleKey] : item.title,
content = contentKey ? item[contentKey] : item.content
return (
<Card
className={classnames('app-collapse', {
[item.className]: item.className,
open: accordion ? openCollapse === index : openCollapse.includes(index) && type === 'shadow'
})}
key={index}
>
<CardHeader
className={classnames('align-items-center', {
collapsed: accordion ? openCollapse !== index : !openCollapse.includes(index)
})}
/*eslint-disable */
{...(toggle === 'hover'
? {
onMouseEnter: () => handleCollapseToggle(index)
}
: {
onClick: () => handleCollapseToggle(index)
})}
/*eslint-enable */
>
<CardTitle className='collapse-title'>{title}</CardTitle>
<ChevronUp size={14} />
</CardHeader>
<Collapse isOpen={accordion ? openCollapse === index : openCollapse.includes(index)}>
<CardBody>{content}</CardBody>
</Collapse>
</Card>
)
})
}
return (
<div
className={classnames('collapse-icon', {
[className]: className,
'collapse-default': !type,
'collapse-shadow': type === 'shadow',
'collapse-border': type === 'border',
'collapse-margin': type === 'margin'
})}
>
{renderData()}
</div>
)
}
export default AppCollapse
// ** PropTypes
AppCollapse.propTypes = {
data: Proptypes.array.isRequired,
accordion: Proptypes.bool,
type: Proptypes.oneOf(['shadow', 'border', 'margin']),
active: Proptypes.oneOfType([Proptypes.array, Proptypes.number]),
titleKey: Proptypes.string,
contentKey: Proptypes.string,
className: Proptypes.string
}
// ** Default Props
AppCollapse.defaultProps = {
active: [],
toggle: 'click'
}

85
src/@core/components/autocomplete/autocomplete.scss

@ -0,0 +1,85 @@
// Component: Autocomplete
// ========================================================================
@import '../../scss/base/bootstrap-extended/include';
@import '../../scss/base/components/include';
$autocomplete-active-color: #f1f1f1;
.autocomplete-container {
position: relative;
.autocomplete-search {
height: 100%;
width: 100%;
background-color: $white;
&:focus {
box-shadow: none;
}
}
.suggestions-list {
z-index: 998;
list-style: none;
padding-left: 0;
border-radius: 0.5rem;
max-height: 450px;
height: auto;
width: 100%;
position: absolute;
margin-top: 0.5rem;
list-style-type: none;
background-color: $white;
box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.11), 0 5px 15px 0 rgba(0, 0, 0, 0.08);
.suggestion-item {
padding: 0.9rem 1rem;
color: $body-color;
line-height: 1 !important;
a {
color: $body-color;
}
&.suggestion-title {
font-size: 0.85rem;
color: $text-muted;
text-transform: uppercase;
letter-spacing: 0.6px;
margin-top: 0.75rem;
margin-bottom: 0;
}
&.active,
&:hover:not(.suggestion-title-wrapper):not(.no-result) {
background-color: $autocomplete-active-color;
color: $body-color;
}
&:hover:not(.suggestion-title-wrapper):not(.no-result) {
cursor: pointer;
}
}
&.open-up {
top: auto;
bottom: 100%;
margin-top: 0;
margin-bottom: 0.5rem;
}
}
}
// Dark
.dark-layout {
.autocomplete-container {
.suggestions-list {
background-color: $theme-dark-card-bg;
.suggestion-item {
color: $theme-dark-body-color !important;
&.suggestion-title-wrapper {
color: $theme-dark-text-muted-color;
}
&:not(.suggestion-title-wrapper) {
&.active,
&:hover {
background-color: $theme-dark-body-bg !important;
}
}
}
}
}
}

354
src/@core/components/autocomplete/index.js

@ -0,0 +1,354 @@
// ** React Imports
import { Fragment, useEffect, useState, useRef } from 'react'
import ReactDOM from 'react-dom'
import { useHistory } from 'react-router-dom'
// ** Third Party Components
import PropTypes from 'prop-types'
import classnames from 'classnames'
import { AlertCircle } from 'react-feather'
import PerfectScrollbar from 'react-perfect-scrollbar'
// ** Custom Hooks
import { useOnClickOutside } from '@hooks/useOnClickOutside'
// ** Styles
import '@styles/base/bootstrap-extended/_include.scss'
import './autocomplete.scss'
const Autocomplete = props => {
// ** Refs
const container = useRef(null)
const inputElRef = useRef(null)
const suggestionsListRef = useRef(null)
// ** States
const [focused, setFocused] = useState(false)
const [activeSuggestion, setActiveSuggestion] = useState(0)
const [showSuggestions, setShowSuggestions] = useState(false)
const [userInput, setUserInput] = useState(props.value ? props.value : '')
// ** Vars
const history = useHistory()
let filteredData = []
// ** Suggestion Item Click Event
const onSuggestionItemClick = (url, e) => {
setActiveSuggestion(0)
setShowSuggestions(false)
setUserInput(filteredData[activeSuggestion][props.filterKey])
if (url !== undefined && url !== null) {
history.push(url)
}
if (props.onSuggestionClick) {
props.onSuggestionClick(url, e)
}
}
// ** Suggestion Hover Event
const onSuggestionItemHover = index => {
setActiveSuggestion(index)
}
// ** Input On Change Event
const onChange = e => {
const userInput = e.currentTarget.value
setActiveSuggestion(0)
setShowSuggestions(true)
setUserInput(userInput)
if (e.target.value < 1) {
setShowSuggestions(false)
}
}
// ** Input Click Event
const onInputClick = e => {
e.stopPropagation()
}
// ** Input's Keydown Event
const onKeyDown = e => {
const filterKey = props.filterKey
const suggestionList = ReactDOM.findDOMNode(suggestionsListRef.current)
// ** User pressed the up arrow
if (e.keyCode === 38 && activeSuggestion !== 0) {
setActiveSuggestion(activeSuggestion - 1)
if (e.target.value.length > -1 && suggestionList !== null && activeSuggestion <= filteredData.length / 2) {
suggestionList.scrollTop = 0
}
} else if (e.keyCode === 40 && activeSuggestion < filteredData.length - 1) {
// ** User pressed the down arrow
setActiveSuggestion(activeSuggestion + 1)
if (e.target.value.length > -1 && suggestionList !== null && activeSuggestion >= filteredData.length / 2) {
suggestionList.scrollTop = suggestionList.scrollHeight
}
} else if (e.keyCode === 27) {
// ** User Pressed ESC
setShowSuggestions(false)
setUserInput('')
} else if (e.keyCode === 13 && showSuggestions) {
// ** User Pressed ENTER
onSuggestionItemClick(filteredData[activeSuggestion].link, e)
setUserInput(filteredData[activeSuggestion][filterKey])
setShowSuggestions(false)
} else {
return
}
// ** Custom Keydown Event
if (props.onKeyDown !== undefined && props.onKeyDown !== null) {
props.onKeyDown(e, userInput)
}
}
// ** Function To Render Grouped Suggestions
const renderGroupedSuggestion = arr => {
const { filterKey, customRender } = props
const renderSuggestion = (item, i) => {
if (!customRender) {
const suggestionURL = item.link !== undefined && item.link !== null ? item.link : null
return (
<li
className={classnames('suggestion-item', {
active: filteredData.indexOf(item) === activeSuggestion
})}
key={item[filterKey]}
onClick={e => onSuggestionItemClick(suggestionURL, e)}
onMouseEnter={() => {
onSuggestionItemHover(filteredData.indexOf(item))
}}
>
{item[filterKey]}
</li>
)
} else if (customRender) {
return customRender(
item,
i,
filteredData,
activeSuggestion,
onSuggestionItemClick,
onSuggestionItemHover,
userInput
)
} else {
return null
}
}
return arr.map((item, i) => {
return renderSuggestion(item, i)
})
}
// ** Function To Render Ungrouped Suggestions
const renderUngroupedSuggestions = () => {
const { filterKey, suggestions, customRender, suggestionLimit } = props
filteredData = []
const sortSingleData = suggestions
.filter(i => {
const startCondition = i[filterKey].toLowerCase().startsWith(userInput.toLowerCase()),
includeCondition = i[filterKey].toLowerCase().includes(userInput.toLowerCase())
if (startCondition) {
return startCondition
} else if (!startCondition && includeCondition) {
return includeCondition
} else {
return null
}
})
.slice(0, suggestionLimit)
filteredData.push(...sortSingleData)
if (sortSingleData.length) {
return sortSingleData.map((suggestion, index) => {
const suggestionURL = suggestion.link !== undefined && suggestion.link !== null ? suggestion.link : null
if (!customRender) {
return (
<li
className={classnames('suggestion-item', {
active: filteredData.indexOf(suggestion) === activeSuggestion
})}
key={suggestion[filterKey]}
onClick={e => onSuggestionItemClick(suggestionURL, e)}
onMouseEnter={() => onSuggestionItemHover(filteredData.indexOf(suggestion))}
>
{suggestion[filterKey]}
</li>
)
} else if (customRender) {
return customRender(
suggestion,
index,
filteredData,
activeSuggestion,
onSuggestionItemClick,
onSuggestionItemHover,
userInput
)
} else {
return null
}
})
} else {
return (
<li className='suggestion-item no-result'>
<AlertCircle size={15} /> <span className='align-middle ml-50'>No Result</span>
</li>
)
}
}
// ** Function To Render Suggestions
const renderSuggestions = () => {
const { filterKey, grouped, filterHeaderKey, suggestions } = props
// ** Checks if suggestions are grouped or not.
if (grouped === undefined || grouped === null || !grouped) {
return renderUngroupedSuggestions()
} else {
filteredData = []
return suggestions.map(suggestion => {
const sortData = suggestion.data
.filter(i => {
const startCondition = i[filterKey].toLowerCase().startsWith(userInput.toLowerCase()),
includeCondition = i[filterKey].toLowerCase().includes(userInput.toLowerCase())
if (startCondition) {
return startCondition
} else if (!startCondition && includeCondition) {
return includeCondition
} else {
return null
}
})
.slice(0, suggestion.searchLimit)
filteredData.push(...sortData)
return (
<Fragment key={suggestion[filterHeaderKey]}>
<li className='suggestion-item suggestion-title-wrapper'>
<h6 className='suggestion-title'>{suggestion[filterHeaderKey]}</h6>
</li>
{sortData.length ? (
renderGroupedSuggestion(sortData)
) : (
<li className='suggestion-item no-result'>
<AlertCircle size={15} /> <span className='align-middle ml-50'>No Result</span>
</li>
)}
</Fragment>
)
})
}
}
//** ComponentDidMount
useEffect(() => {
if (props.defaultSuggestions && focused) {
setShowSuggestions(true)
}
}, [focused, props.defaultSuggestions])
//** ComponentDidUpdate
useEffect(() => {
const textInput = ReactDOM.findDOMNode(inputElRef.current)
// ** For searchbar focus
if (textInput !== null && props.autoFocus) {
inputElRef.current.focus()
}
// ** If user has passed default suggestions & focus then show default suggestions
if (props.defaultSuggestions && focused) {
setShowSuggestions(true)
}
// ** Function to run on user passed Clear Input
if (props.clearInput) {
props.clearInput(userInput, setUserInput)
}
// ** Function on Suggestions Shown
if (props.onSuggestionsShown && showSuggestions) {
props.onSuggestionsShown(userInput)
}
}, [setShowSuggestions, focused, userInput, showSuggestions, props])
// ** On External Click Close The Search & Call Passed Function
useOnClickOutside(container, () => {
setShowSuggestions(false)
if (props.externalClick) {
props.externalClick()
}
})
let suggestionsListComponent
if (showSuggestions) {
suggestionsListComponent = (
<PerfectScrollbar
className={classnames('suggestions-list', {
[props.wrapperClass]: props.wrapperClass
})}
ref={suggestionsListRef}
component='ul'
options={{ wheelPropagation: false }}
>
{renderSuggestions()}
</PerfectScrollbar>
)
}
return (
<div className='autocomplete-container' ref={container}>
<input
type='text'
onChange={e => {
onChange(e)
if (props.onChange) {
props.onChange(e)
}
}}
onKeyDown={e => onKeyDown(e)}
value={userInput}
className={`autocomplete-search ${props.className ? props.className : ''}`}
placeholder={props.placeholder}
onClick={onInputClick}
ref={inputElRef}
onFocus={e => setFocused(true)}
autoFocus={props.autoFocus}
onBlur={e => {
if (props.onBlur) props.onBlur(e)
setFocused(false)
}}
/>
{suggestionsListComponent}
</div>
)
}
export default Autocomplete
// ** PropTypes
Autocomplete.propTypes = {
suggestions: PropTypes.array.isRequired,
filterKey: PropTypes.string.isRequired,
defaultValue: PropTypes.string,
wrapperClass: PropTypes.string,
filterHeaderKey: PropTypes.string,
placeholder: PropTypes.string,
suggestionLimit: PropTypes.number,
grouped: PropTypes.bool,
autoFocus: PropTypes.bool,
onKeyDown: PropTypes.func,
onChange: PropTypes.func,
onSuggestionsShown: PropTypes.func,
onSuggestionItemClick: PropTypes.func,
clearInput: PropTypes.func,
externalClick: PropTypes.func
}

65
src/@core/components/avatar-group/index.js

@ -0,0 +1,65 @@
// ** React Imports
import { Fragment } from 'react'
// ** Third Party Components
import Proptypes from 'prop-types'
import classnames from 'classnames'
import { UncontrolledTooltip } from 'reactstrap'
// ** Custom Components
import Avatar from '@components/avatar'
const AvatarGroup = props => {
// ** Props
const { data, tag, className } = props
// ** Conditional Tag
const Tag = tag ? tag : 'div'
// ** Render Data
const renderData = () => {
return data.map((item, i) => {
const ItemTag = item.tag ? item.tag : 'div'
return (
<Fragment key={i}>
{item.title ? (
<UncontrolledTooltip placement={item.placement} target={item.title.split(' ').join('-')}>
{item.title}
</UncontrolledTooltip>
) : null}
{!item.meta ? (
<Avatar
tag={ItemTag}
className={classnames('pull-up', {
[item.className]: item.className
})}
{...(item.title ? { id: item.title.split(' ').join('-') } : {})}
title={undefined}
meta={undefined}
{...item}
/>
) : null}
{item.meta ? <ItemTag className='d-flex align-items-center pl-1'>{item.meta}</ItemTag> : null}
</Fragment>
)
})
}
return (
<Tag
className={classnames('avatar-group', {
[className]: className
})}
>
{renderData()}
</Tag>
)
}
export default AvatarGroup
// ** PropTypes
AvatarGroup.propTypes = {
data: Proptypes.array.isRequired,
tag: Proptypes.oneOfType([Proptypes.func, Proptypes.string])
}

155
src/@core/components/avatar/index.js

@ -0,0 +1,155 @@
// ** React Imports
import { forwardRef } from 'react'
// ** Third Party Components
import Proptypes from 'prop-types'
import { Badge } from 'reactstrap'
import classnames from 'classnames'
const Avatar = forwardRef((props, ref) => {
// ** Props
const {
color,
className,
imgClassName,
initials,
size,
badgeUp,
content,
icon,
badgeColor,
badgeText,
img,
imgHeight,
imgWidth,
status,
tag: Tag,
contentStyles,
...rest
} = props
// ** Function to extract initials from content
const getInitials = str => {
const results = []
const wordArray = str.split(' ')
wordArray.forEach(e => {
results.push(e[0])
})
return results.join('')
}
return (
<Tag
className={classnames('avatar', {
[className]: className,
[`bg-${color}`]: color,
[`avatar-${size}`]: size
})}
ref={ref}
{...rest}
>
{img === false || img === undefined ? (
<span
className={classnames('avatar-content', {
'position-relative': badgeUp
})}
style={contentStyles}
>
{initials ? getInitials(content) : content}
{icon ? icon : null}
{badgeUp ? (
<Badge color={badgeColor ? badgeColor : 'primary'} className='badge-sm badge-up' pill>
{badgeText ? badgeText : '0'}
</Badge>
) : null}
</span>
) : (
<img
className={classnames({
[imgClassName]: imgClassName
})}
src={img}
alt='avatarImg'
height={imgHeight && !size ? imgHeight : 32}
width={imgWidth && !size ? imgWidth : 32}
/>
)}
{status ? (
<span
className={classnames({
[`avatar-status-${status}`]: status,
[`avatar-status-${size}`]: size
})}
></span>
) : null}
</Tag>
)
})
export default Avatar
// ** PropTypes
Avatar.propTypes = {
imgClassName: Proptypes.string,
className: Proptypes.string,
src: Proptypes.string,
tag: Proptypes.oneOfType([Proptypes.func, Proptypes.string]),
badgeUp: Proptypes.bool,
content: Proptypes.string,
icon: Proptypes.node,
contentStyles: Proptypes.object,
badgeText: Proptypes.string,
imgHeight: Proptypes.oneOfType([Proptypes.string, Proptypes.number]),
imgWidth: Proptypes.oneOfType([Proptypes.string, Proptypes.number]),
size: Proptypes.oneOf(['sm', 'lg', 'xl']),
status: Proptypes.oneOf(['online', 'offline', 'away', 'busy']),
badgeColor: Proptypes.oneOf([
'primary',
'secondary',
'success',
'danger',
'info',
'warning',
'dark',
'light-primary',
'light-secondary',
'light-success',
'light-danger',
'light-info',
'light-warning',
'light-dark'
]),
color: Proptypes.oneOf([
'primary',
'secondary',
'success',
'danger',
'info',
'warning',
'dark',
'light-primary',
'light-secondary',
'light-success',
'light-danger',
'light-info',
'light-warning',
'light-dark'
]),
initials(props) {
if (props['initials'] && props['content'] === undefined) {
return new Error('content prop is required with initials prop.')
}
if (props['initials'] && typeof props['content'] !== 'string') {
return new Error('content prop must be a string.')
}
if (typeof props['initials'] !== 'boolean' && props['initials'] !== undefined) {
return new Error('initials must be a boolean!')
}
}
}
// ** Default Props
Avatar.defaultProps = {
tag: 'div'
}

92
src/@core/components/breadcrumbs/index.js

@ -0,0 +1,92 @@
// ** React Imports
import { Link } from 'react-router-dom'
// ** Third Party Components
import Proptypes from 'prop-types'
import { Grid, CheckSquare, MessageSquare, Mail, Calendar } from 'react-feather'
import {
Breadcrumb,
BreadcrumbItem,
UncontrolledButtonDropdown,
DropdownMenu,
DropdownItem,
DropdownToggle
} from 'reactstrap'
const BreadCrumbs = props => {
// ** Props
const { breadCrumbTitle, breadCrumbParent, breadCrumbParent2, breadCrumbParent3, breadCrumbActive } = props
return (
<div className='content-header row'>
<div className='content-header-left col-md-9 col-12 mb-2'>
<div className='row breadcrumbs-top'>
<div className='col-12'>
{breadCrumbTitle ? <h2 className='content-header-title float-left mb-0'>{breadCrumbTitle}</h2> : ''}
<div className='breadcrumb-wrapper vs-breadcrumbs d-sm-block d-none col-12'>
<Breadcrumb>
<BreadcrumbItem tag='li'>
<Link to='/'>Home</Link>
</BreadcrumbItem>
<BreadcrumbItem tag='li' className='text-primary'>
{breadCrumbParent}
</BreadcrumbItem>
{breadCrumbParent2 ? (
<BreadcrumbItem tag='li' className='text-primary'>
{breadCrumbParent2}
</BreadcrumbItem>
) : (
''
)}
{breadCrumbParent3 ? (
<BreadcrumbItem tag='li' className='text-primary'>
{breadCrumbParent3}
</BreadcrumbItem>
) : (
''
)}
<BreadcrumbItem tag='li' active>
{breadCrumbActive}
</BreadcrumbItem>
</Breadcrumb>
</div>
</div>
</div>
</div>
<div className='content-header-right text-md-right col-md-3 col-12 d-md-block d-none'>
<div className='form-group breadcrum-right dropdown'>
<UncontrolledButtonDropdown>
<DropdownToggle color='primary' size='sm' className='btn-icon btn-round dropdown-toggle'>
<Grid size={14} />
</DropdownToggle>
<DropdownMenu tag='ul' right>
<DropdownItem tag={Link} to='/apps/chat'>
<CheckSquare className='mr-1' size={14} />
<span className='align-middle'>Todo</span>
</DropdownItem>
<DropdownItem tag={Link} to='/apps/chat'>
<MessageSquare className='mr-1' size={14} />
<span className='align-middle'>Chat</span>
</DropdownItem>
<DropdownItem tag={Link} to='/apps/email'>
<Mail className='mr-1' size={14} />
<span className='align-middle'>Email</span>
</DropdownItem>
<DropdownItem tag={Link} to='/apps/calendar'>
<Calendar className='mr-1' size={14} />
<span className='align-middle'>Calendar</span>
</DropdownItem>
</DropdownMenu>
</UncontrolledButtonDropdown>
</div>
</div>
</div>
)
}
export default BreadCrumbs
// ** PropTypes
BreadCrumbs.propTypes = {
breadCrumbTitle: Proptypes.string.isRequired,
breadCrumbActive: Proptypes.string.isRequired
}

132
src/@core/components/card-actions/index.js

@ -0,0 +1,132 @@
// ** React Imports
import { Fragment, useState, useEffect } from 'react'
// ** Third Party Components
import PropTypes from 'prop-types'
import classnames from 'classnames'
import UiLoader from '@components/ui-loader'
import { ChevronDown, RotateCw, X } from 'react-feather'
import { Card, CardHeader, CardTitle, Collapse, Spinner } from 'reactstrap'
const CardActions = props => {
// ** Props
const { title, actions, children, collapseIcon, reloadIcon, removeIcon, endReload } = props
// ** States
const [reload, setReload] = useState(false)
const [collapse, setCollapse] = useState(true)
const [visibility, setVisibility] = useState(true)
/**
** If custom icon is defined then consider that else default icons
*/
const Icons = {
collapse: collapseIcon ? collapseIcon : ChevronDown,
remove: removeIcon ? removeIcon : X,
reload: reloadIcon ? reloadIcon : RotateCw
}
// ** Action to call
const callAction = action => {
switch (action) {
case 'collapse':
return setCollapse(!collapse)
case 'remove':
return setVisibility(false)
case 'reload':
return setReload(true)
default:
}
}
// ** Renders card actions
const renderIcons = () => {
/**
** IF: user passes array of actions then loop through them & render all of the actions
** ELSE: render single action
*/
if (Array.isArray(actions)) {
return actions.map((action, i) => {
const Tag = Icons[action]
return (
<Tag
key={i}
className={classnames('cursor-pointer', {
'mr-50': i < actions.length - 1
})}
size={15}
onClick={() => callAction(action)}
/>
)
})
} else {
const Tag = Icons[actions]
return <Tag className='cursor-pointer' size={15} onClick={() => callAction(actions)} />
}
}
// ** Ends reload
const removeReload = () => {
setReload(false)
}
// ** If user passes endReload function call it.
useEffect(() => {
if (reload) {
endReload(removeReload)
}
})
// ** If user passes collapse action then return <Collapse> as Wrapper else return <Fragment>
const CollapseWrapper = actions === 'collapse' || actions.includes('collapse') ? Collapse : Fragment
// ** If user passes reload action then return <BlockUi> as Wrapper else return <Fragment>
const BlockUiWrapper = actions === 'reload' || actions.includes('reload') ? UiLoader : Fragment
return (
<BlockUiWrapper
/*eslint-disable */
{...(actions === 'reload' || actions.includes('reload')
? {
blocking: reload
}
: {})}
/*eslint-enable */
>
<Card
className={classnames('card-action', {
'd-none': !visibility
})}
>
<CardHeader>
<CardTitle tag='h4'>{title}</CardTitle>
<div className='action-icons'>{renderIcons()}</div>
</CardHeader>
<CollapseWrapper {...(actions === 'collapse' || actions.includes('collapse') ? { isOpen: collapse } : {})}>
{children}
</CollapseWrapper>
</Card>
</BlockUiWrapper>
)
}
export default CardActions
// ** PropTypes
CardActions.propTypes = {
title: PropTypes.string.isRequired,
collapseIcon: PropTypes.any,
removeIcon: PropTypes.any,
reloadIcon: PropTypes.any,
actions: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]).isRequired,
endReload(props) {
// ** User passes reload action and doesn't pass endReload then return Error
if (
(props['actions'] === 'reload' && props['endReload'] === undefined) ||
(props['actions'].includes('reload') && props['endReload'] === undefined)
) {
return new Error('Please provide a function to end reload!')
}
}
}

51
src/@core/components/card-snippet/index.js

@ -0,0 +1,51 @@
// ** React Imports
import { Fragment, useState } from 'react'
// ** Third Party Components
import PropTypes from 'prop-types'
import { Code } from 'react-feather'
import { Card, CardHeader, CardBody, CardTitle, Collapse } from 'reactstrap'
const CardSnippet = props => {
// ** Props
const { title, children, noBody, code, iconCode } = props
// ** State
const [isOpen, setIsOpen] = useState(false)
// ** If user passes custom icon then render that else render default icon
const IconCode = iconCode ? iconCode : <Code size={15} />
// ** To toggle collapse
const toggle = () => setIsOpen(!isOpen)
// ** If user passes noBody then return <Fragment> else return <CardBody>
const Wrapper = noBody ? Fragment : CardBody
return (
<Card className='card-snippet'>
<CardHeader>
<CardTitle tag='h4'>{title}</CardTitle>
<div className='views cursor-pointer' onClick={toggle}>
{IconCode}
</div>
</CardHeader>
<Wrapper>{children}</Wrapper>
<Collapse isOpen={isOpen}>
<CardBody>{code}</CardBody>
</Collapse>
</Card>
)
}
export default CardSnippet
// ** PropTypes
CardSnippet.propTypes = {
className: PropTypes.string,
title: PropTypes.string.isRequired,
children: PropTypes.any,
code: PropTypes.node,
iconCode: PropTypes.node,
noBody: PropTypes.bool
}

357
src/@core/components/customizer/index.js

@ -0,0 +1,357 @@
// ** React Imports
import { useState } from 'react'
// ** Third Party Components
import Select from 'react-select'
import classnames from 'classnames'
import { Settings, X } from 'react-feather'
import { CustomInput, FormGroup } from 'reactstrap'
import PerfectScrollbar from 'react-perfect-scrollbar'
import { selectThemeColors } from '@utils'
// ** Styles
import '@styles/react/libs/react-select/_react-select.scss'
const Customizer = props => {
// ** Props
const {
skin,
setSkin,
isRtl,
setIsRtl,
layout,
setLayout,
navbarType,
setNavbarType,
footerType,
setFooterType,
navbarColor,
setNavbarColor,
isHidden,
setIsHidden,
contentWidth,
setContentWidth,
menuCollapsed,
setMenuCollapsed,
transition,
setTransition
} = props
// ** State
const [openCustomizer, setOpenCustomizer] = useState(false)
// ** Toggles Customizer
const handleToggle = e => {
e.preventDefault()
setOpenCustomizer(!openCustomizer)
}
// ** Render Layout Skin Options
const renderSkinsRadio = () => {
const skinsArr = [
{
name: 'light',
label: 'Light',
checked: skin === 'light'
},
{
name: 'bordered',
label: 'Bordered',
checked: skin === 'bordered'
},
{
name: 'dark',
label: 'Dark',
checked: skin === 'dark'
},
{
name: 'semi-dark',
label: 'Semi Dark',
checked: skin === 'semi-dark'
}
]
return skinsArr.map((radio, index) => {
const marginCondition = index !== skinsArr.length - 1
if (layout === 'HorizontalLayout' && radio.name === 'semi-dark') {
return null
}
return (
<CustomInput
key={index}
type='radio'
id={radio.name}
label={radio.label}
checked={radio.checked}
onChange={() => setSkin(radio.name)}
className={classnames({ 'mr-1': marginCondition })}
/>
)
})
}
// ** Render Navbar Colors Options
const renderNavbarColors = () => {
const colorsArr = ['white', 'primary', 'secondary', 'success', 'danger', 'info', 'warning', 'dark']
return colorsArr.map(color => (
<li
key={color}
className={classnames(`color-box bg-${color}`, {
selected: navbarColor === color,
border: color === 'white'
})}
onClick={() => setNavbarColor(color)}
></li>
))
}
// ** Render Navbar Type Options
const renderNavbarTypeRadio = () => {
const navbarTypeArr = [
{
name: 'floating',
label: 'Floating',
checked: navbarType === 'floating'
},
{
name: 'sticky',
label: 'Sticky',
checked: navbarType === 'sticky'
},
{
name: 'static',
label: 'Static',
checked: navbarType === 'static'
},
{
name: 'hidden',
label: 'Hidden',
checked: navbarType === 'hidden'
}
]
return navbarTypeArr.map((radio, index) => {
const marginCondition = index !== navbarTypeArr.length - 1
if (layout === 'HorizontalLayout' && radio.name === 'hidden') {
return null
}
return (
<CustomInput
key={index}
type='radio'
id={radio.name}
label={radio.label}
checked={radio.checked}
onChange={() => setNavbarType(radio.name)}
className={classnames({ 'mr-1': marginCondition })}
/>
)
})
}
// ** Render Footer Type Options
const renderFooterTypeRadio = () => {
const footerTypeArr = [
{
name: 'sticky',
label: 'Sticky',
checked: footerType === 'sticky'
},
{
name: 'static',
label: 'Static',
checked: footerType === 'static'
},
{
name: 'hidden',
label: 'Hidden',
checked: footerType === 'hidden'
}
]
return footerTypeArr.map((radio, index) => {
const marginCondition = index !== footerTypeArr.length - 1
return (
<CustomInput
key={index}
type='radio'
id={`footer-${radio.name}`}
label={radio.label}
checked={radio.checked}
onChange={() => setFooterType(radio.name)}
className={classnames({ 'mr-1': marginCondition })}
/>
)
})
}
// ** Router Transition Options
const transitionOptions = [
{ value: 'fadeIn', label: 'Fade' },
{ value: 'fadeInLeft', label: 'Fade In Left' },
{ value: 'zoomIn', label: 'Zoom In' },
{ value: 'none', label: 'None' }
]
// ** Get Current Transition
const transitionValue = transitionOptions.find(i => i.value === transition)
return (
<div
className={classnames('customizer d-none d-md-block', {
open: openCustomizer
})}
>
<a href='/' className='customizer-toggle d-flex align-items-center justify-content-center' onClick={handleToggle}>
<Settings size={14} className='spinner' />
</a>
<PerfectScrollbar className='customizer-content'>
<div className='customizer-header px-2 pt-1 pb-0 position-relative'>
<h4 className='mb-0'>Theme Customizer</h4>
<p className='m-0'>Customize & Preview in Real Time</p>
<a href='/' className='customizer-close' onClick={handleToggle}>
<X />
</a>
</div>
<hr />
<div className='px-2'>
<FormGroup className='mb-2'>
<p className='font-weight-bold'>Skin</p>
<div className='d-flex'>{renderSkinsRadio()}</div>
</FormGroup>
<FormGroup className='mb-2'>
<p className='font-weight-bold'>Content Width</p>
<div className='d-flex'>
<CustomInput
type='radio'
id='full-width'
className='mr-1'
label='Full Width'
checked={contentWidth === 'full'}
onChange={() => setContentWidth('full')}
/>
<CustomInput
type='radio'
id='boxes'
label='Boxed'
checked={contentWidth === 'boxed'}
onChange={() => setContentWidth('boxed')}
/>
</div>
</FormGroup>
<FormGroup className='mb-2'>
<div className='d-flex'>
<p className='font-weight-bold mr-auto mb-0'>RTL</p>
<CustomInput type='switch' id='rtl' name='RTL' checked={isRtl} onChange={() => setIsRtl(!isRtl)} />
</div>
</FormGroup>
<FormGroup className='mb-2'>
<div className='d-flex justify-content-between align-items-center'>
<p className='font-weight-bold mb-0'>Router Transition</p>
<Select
theme={selectThemeColors}
className='react-select'
classNamePrefix='select'
defaultValue={transitionOptions[0]}
value={transitionValue}
options={transitionOptions}
isClearable={false}
onChange={({ value }) => setTransition(value)}
/>
</div>
</FormGroup>
</div>
<hr />
<div className='px-2'>
<p className='font-weight-bold'>Menu Layout</p>
<FormGroup className='mb-2'>
<div className='d-flex align-items-center'>
<CustomInput
type='radio'
id='vertical-layout'
label='Vertical'
checked={layout === 'VerticalLayout'}
onChange={() => setLayout('vertical')}
className='mr-1'
/>
<CustomInput
type='radio'
id='horizontal-layout'
label='Horizontal'
checked={layout === 'HorizontalLayout'}
onChange={() => setLayout('horizontal')}
/>
</div>
</FormGroup>
{layout !== 'HorizontalLayout' ? (
<FormGroup className='mb-2'>
<div className='d-flex align-items-center'>
<p className='font-weight-bold mr-auto mb-0'>Menu Collapsed</p>
<CustomInput
type='switch'
id='menu-collapsed'
name='menu-collapsed'
checked={menuCollapsed}
onChange={() => setMenuCollapsed(!menuCollapsed)}
/>
</div>
</FormGroup>
) : null}
<FormGroup className='mb-2'>
<div className='d-flex align-items-center'>
<p className='font-weight-bold mr-auto mb-0'>Menu Hidden</p>
<CustomInput
type='switch'
id='menu-hidden'
name='menu-hidden'
checked={isHidden}
onChange={() => setIsHidden(!isHidden)}
/>
</div>
</FormGroup>
</div>
<hr />
<div className='px-2'>
{layout !== 'HorizontalLayout' ? (
<FormGroup className='mb-2'>
<p className='font-weight-bold'>Navbar Color</p>
<ul className='list-inline unstyled-list'>{renderNavbarColors()}</ul>
</FormGroup>
) : null}
<FormGroup className='mb-2'>
<p className='font-weight-bold'>{layout === 'HorizontalLayout' ? 'Menu' : 'Navbar'} Type</p>
<div className='d-flex'>{renderNavbarTypeRadio()}</div>
</FormGroup>
</div>
<hr />
<div className='px-2'>
<FormGroup className='mb-2'>
<p className='font-weight-bold'>Footer Type</p>
<div className='d-flex'>{renderFooterTypeRadio()}</div>
</FormGroup>
</div>
</PerfectScrollbar>
</div>
)
}
export default Customizer

30
src/@core/components/extensions-header/index.js

@ -0,0 +1,30 @@
// ** React Imports
import Proptypes from 'prop-types'
import { Row, Col } from 'reactstrap'
const ExtensionsHeader = props => {
return (
<Row className='mb-2'>
<Col sm='12' className='ml-50'>
<p className='font-medium-5 mt-1 extension-title' data-tour='extension-title'>
{props.title}
</p>
{props.link ? (
<a href={props.link} target='_blank' rel='noopener noreferrer'>
{props.subTitle}
</a>
) : (
<p className='text-primary'>{props.subTitle}</p>
)}
</Col>
</Row>
)
}
export default ExtensionsHeader
// ** PropTypes
ExtensionsHeader.propTypes = {
title: Proptypes.string.isRequired,
subTitle: Proptypes.string.isRequired,
link: Proptypes.string
}

98
src/@core/components/input-password-toggle/index.js

@ -0,0 +1,98 @@
// ** React Imports
import { Fragment, useState } from 'react'
// ** Third Party Components
import PropTypes from 'prop-types'
import classnames from 'classnames'
import { Eye, EyeOff } from 'react-feather'
import { InputGroup, InputGroupAddon, Input, InputGroupText, Label, inputClassName } from 'reactstrap'
const InputPasswordToggle = props => {
// ** Props
const {
label,
hideIcon,
showIcon,
visible,
className,
htmlFor,
placeholder,
iconSize,
inputClassName,
...rest
} = props
// ** State
const [inputVisibility, setInputVisibility] = useState(visible)
// ** Renders Icon Based On Visibility
const renderIcon = () => {
const size = iconSize ? iconSize : 14
if (inputVisibility === false) {
return hideIcon ? hideIcon : <Eye size={size} />
} else {
return showIcon ? showIcon : <EyeOff size={size} />
}
}
return (
<Fragment>
{label ? <Label for={htmlFor}>{label}</Label> : null}
<InputGroup
className={classnames({
[className]: className
})}
>
<Input
type={inputVisibility === false ? 'password' : 'text'}
placeholder={placeholder ? placeholder : '············'}
className={classnames({
[inputClassName]: inputClassName
})}
/*eslint-disable */
{...(label && htmlFor
? {
id: htmlFor
}
: {})}
{...rest}
/*eslint-enable */
/>
<InputGroupAddon addonType='append' onClick={() => setInputVisibility(!inputVisibility)}>
<InputGroupText className='cursor-pointer'>{renderIcon()}</InputGroupText>
</InputGroupAddon>
</InputGroup>
</Fragment>
)
}
export default InputPasswordToggle
// ** PropTypes
InputPasswordToggle.propTypes = {
hideIcon: PropTypes.node,
showIcon: PropTypes.node,
visible: PropTypes.bool,
className: PropTypes.string,
placeholder: PropTypes.string,
iconSize: PropTypes.number,
inputClassName: PropTypes.string,
label(props, propName, componentName) {
// ** If label is defined and htmlFor is undefined throw error
if (props[propName] && props['htmlFor'] === 'undefined') {
throw new Error('htmlFor prop is required when label prop is present')
}
},
htmlFor(props, propName, componentName) {
// ** If htmlFor is defined and label is undefined throw error
if (props[propName] && props['label'] === 'undefined') {
throw new Error('label prop is required when htmlFor prop is present')
}
}
}
// ** Default Props
InputPasswordToggle.defaultProps = {
visible: false
}

205
src/@core/components/number-input/index.js

@ -0,0 +1,205 @@
// ** React Imports
import PropTypes from 'prop-types'
import classnames from 'classnames'
import { Plus, Minus } from 'react-feather'
import { useState, useEffect } from 'react'
import { InputGroup, InputGroupAddon, Input, Button } from 'reactstrap'
// ** Styles
import './number-input.scss'
// ** Keycode Vars
const KEYCODE_UP = 38
const KEYCODE_DOWN = 40
const NumberInput = props => {
// ** Props
const {
min,
max,
step,
size,
wrap,
value,
style,
upIcon,
disabled,
readonly,
onChange,
downIcon,
vertical,
className,
onDecrement,
onIncrement,
inputClassName,
...rest
} = props
// ** State
const [count, setCount] = useState(value || min)
// ** Handle btn down click
const handleDecrement = () => {
if (!disabled && !readonly) {
// ** If count is equals or smaller than min then return and do nothing
if (!wrap && count <= min) {
return
}
// ** Returns the decreased count based on wrap & and min prop
const countCondition = () => {
if (count - step < min) {
if (wrap) {
return max
} else {
return min
}
} else {
return count - step
}
}
setCount(countCondition())
if (onDecrement) {
onIncrement(count)
}
}
}
// ** Handle btn up click
const handleIncrement = () => {
if (!disabled && !readonly) {
// ** If count is equals or larger than min then return and do nothing
if (!wrap && count >= max) {
return
}
// ** Returns the Increased count based on wrap & and max prop
const countCondition = () => {
if (count + step > max) {
if (wrap) {
return min
} else {
return max
}
} else {
return count + step
}
}
setCount(countCondition())
if (onIncrement) {
onIncrement(count)
}
}
}
// ** Handle input change
const handleInputChange = e => {
setCount(Number(e.target.value))
}
// ** Handle Arrow Up & Down
const handleKeyDown = e => {
e.preventDefault()
if (!readonly) {
if (e.keyCode === KEYCODE_UP) {
handleIncrement()
}
if (e.keyCode === KEYCODE_DOWN) {
handleDecrement()
}
}
}
// ** UseEffect based on user passed onChange
useEffect(() => {
if (onChange) {
onChange(count)
}
}, [count])
return (
<InputGroup
className={classnames('number-input', {
disabled,
readonly,
[className]: className,
'vertical-number-input': vertical,
[`vertical-number-input-${size}`]: vertical && size
})}
{...(style ? { style } : {})}
>
<InputGroupAddon addonType='prepend' onClick={handleDecrement}>
<Button
className='btn-icon'
color='transparent'
{...(size ? { size } : {})}
disabled={(!wrap && count <= min) || disabled || readonly}
>
{downIcon}
</Button>
</InputGroupAddon>
<Input
{...rest}
type='number'
value={count}
disabled={disabled}
readOnly={readonly}
onKeyDown={handleKeyDown}
onChange={handleInputChange}
className={classnames({
[inputClassName]: inputClassName
})}
{...(size ? { bsSize: size } : {})}
/>
<InputGroupAddon addonType='append' onClick={handleIncrement}>
<Button
className='btn-icon'
color='transparent'
{...(size ? { size } : {})}
disabled={(!wrap && count >= max) || disabled || readonly}
>
{upIcon}
</Button>
</InputGroupAddon>
</InputGroup>
)
}
export default NumberInput
// ** Default Props
NumberInput.defaultProps = {
min: 1,
step: 1,
wrap: false,
max: Infinity,
disabled: false,
readonly: false,
downIcon: <Minus size={14} />,
upIcon: <Plus size={14} />
}
// ** PropTypes
NumberInput.propTypes = {
wrap: PropTypes.bool,
min: PropTypes.number,
max: PropTypes.number,
step: PropTypes.number,
value: PropTypes.number,
style: PropTypes.object,
vertical: PropTypes.bool,
disabled: PropTypes.bool,
readonly: PropTypes.bool,
onChange: PropTypes.func,
upIcon: PropTypes.element,
downIcon: PropTypes.element,
className: PropTypes.string,
onDecrement: PropTypes.func,
onIncrement: PropTypes.func,
inputClassName: PropTypes.string,
size: PropTypes.oneOf(['sm', 'lg'])
}

153
src/@core/components/number-input/number-input.scss

@ -0,0 +1,153 @@
// Component: Number Input
// ========================================================================
@import '../../scss/base/bootstrap-extended/include';
@import '../../scss/base/components/include';
.number-input {
border-radius: $border-radius;
text-align: center;
border: 1px solid $custom-control-border-color;
overflow: hidden;
.form-control {
text-align: center;
padding: 0 0.25rem;
border-color: $custom-control-border-color;
::-webkit-outer-spin-button,
::-webkit-inner-spin-button {
margin: 0;
-webkit-appearance: none;
}
-moz-appearance: textfield;
}
&:focus,
&:active,
&:focus-within {
outline: 0;
box-shadow: none;
border-color: $primary;
.form-control {
box-shadow: none;
border-color: $custom-control-border-color !important;
}
}
&:not(.vertical-number-input) {
.form-control {
border-top: 0;
border-bottom: 0;
}
}
&.disabled,
&.readonly {
&:focus,
&:active,
&:focus-within {
outline: 0;
box-shadow: none;
border-color: $custom-control-border-color;
}
.btn {
background-color: $input-disabled-bg;
opacity: 1;
}
}
&.vertical-number-input {
display: inline-flex;
flex-direction: column;
width: auto;
max-width: 3rem;
.input-group-prepend,
.input-group-append {
margin-right: 0;
margin-left: 0;
.btn {
width: 100%;
}
}
.input-group-prepend .btn {
border-bottom-left-radius: 0;
border-top-right-radius: $btn-border-radius;
}
.input-group-append .btn {
border-bottom-left-radius: $btn-border-radius;
border-top-right-radius: 0;
}
.form-control {
border-left: 0;
border-right: 0;
width: 100%;
padding-left: 0.5rem;
padding-right: 0.5rem;
font-size: 0.85rem;
}
&-sm {
max-width: 2.5rem;
.form-control {
padding-left: 0.25rem;
padding-right: 0.25rem;
font-size: 0.75rem;
}
}
&-lg {
max-width: 3.5rem;
.form-control {
font-size: 1rem;
}
}
}
}
.dark-layout {
.number-input {
border-color: $theme-dark-input-border-color;
.input-group-prepend,
.input-group-append {
button:not(.disabled) {
svg {
stroke: $theme-dark-body-color;
}
}
}
&:focus,
&:active,
&:focus-within {
border-color: $primary !important;
.form-control {
border-color: $theme-dark-input-border-color !important;
}
}
&:not(.disabled),
&:not(.readonly) {
&:focus,
&:active,
&:focus-within {
border-color: $theme-dark-input-border-color;
}
}
&.disabled,
&.readonly {
.btn {
background-color: $theme-dark-input-disabled-border-color;
}
}
}
}

33
src/@core/components/repeater/index.js

@ -0,0 +1,33 @@
// ** Third Party Components
import PropTypes from 'prop-types'
const Repeater = props => {
// ** Props
const { count, tag, component, children, ...rest } = props
// ** Custom Tag
const Tag = tag
// ** Default Items
const items = []
// ** Loop passed count times and push it in items Array
for (let i = 0; i < count; i++) {
items.push(children(i))
}
return <Tag {...rest}>{items}</Tag>
}
// ** PropTypes
Repeater.propTypes = {
count: PropTypes.number.isRequired,
tag: PropTypes.string.isRequired
}
// ** Default Props
Repeater.defaultProps = {
tag: 'div'
}
export default Repeater

75
src/@core/components/ripple-button/index.js

@ -0,0 +1,75 @@
// ** React Imports
import { useState, useEffect } from 'react'
// ** Third Party Components
import { Button } from 'reactstrap'
import classnames from 'classnames'
// ** Styles
import './ripple-button.scss'
const RippleButton = ({ className, children, onClick, ...rest }) => {
// ** States
const [mounted, setMounted] = useState(false)
const [isRippling, setIsRippling] = useState(false)
const [coords, setCoords] = useState({ x: -1, y: -1 })
// ** Toggle mounted on mount & unmount
useEffect(() => {
setMounted(true)
return () => setMounted(false)
}, [])
// ** Check for coords and set ripple
useEffect(() => {
if (mounted) {
if (coords.x !== -1 && coords.y !== -1) {
setIsRippling(true)
setTimeout(() => setIsRippling(false), 500)
} else {
setIsRippling(false)
}
}
}, [coords])
// ** Reset Coords on ripple end
useEffect(() => {
if (mounted) {
if (!isRippling) setCoords({ x: -1, y: -1 })
}
}, [isRippling])
return (
<Button
className={classnames('waves-effect', {
[className]: className
})}
onClick={e => {
const rect = e.target.getBoundingClientRect()
setCoords({ x: e.clientX - rect.left, y: e.clientY - rect.top })
if (onClick) {
onClick(e)
}
}}
{...rest}
>
{children}
{isRippling ? (
<span
className='waves-ripple'
style={{
left: coords.x,
top: coords.y
}}
></span>
) : null}
</Button>
)
}
// ** PropTypes
RippleButton.propTypes = {
...Button.propTypes
}
Button.Ripple = RippleButton

36
src/@core/components/ripple-button/ripple-button.scss

@ -0,0 +1,36 @@
// Component: Ripple Button
// ========================================================================
@import '../../scss/base/bootstrap-extended/include';
@import '../../scss/base/components/include';
.waves-effect {
position: relative;
overflow: hidden;
.waves-ripple {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
opacity: 0;
width: 0;
height: 0;
border-radius: 50%;
background: rgba($color: $white, $alpha: 0.5);
animation: ripple-effect 0.4s ease;
}
}
@keyframes ripple-effect {
0% {
opacity: 0;
}
25% {
opacity: 1;
}
100% {
width: 200%;
padding-bottom: 200%;
opacity: 0;
}
}

89
src/@core/components/sidebar/index.js

@ -0,0 +1,89 @@
// ** Third Party Components
import { X } from 'react-feather'
import Proptypes from 'prop-types'
import classnames from 'classnames'
import { Modal, ModalHeader, ModalBody } from 'reactstrap'
const Sidebar = props => {
// ** Props
const {
width,
open,
toggleSidebar,
size,
bodyClassName,
contentClassName,
wrapperClassName,
headerClassName,
className,
title,
children,
closeBtn,
...rest
} = props
// ** If user passes custom close btn render that else default close btn
const renderCloseBtn = closeBtn ? closeBtn : <X className='cursor-pointer' size={15} onClick={toggleSidebar} />
return (
<Modal
isOpen={open}
toggle={toggleSidebar}
contentClassName={classnames({
[contentClassName]: contentClassName
})}
modalClassName={classnames('modal-slide-in', {
[wrapperClassName]: wrapperClassName
})}
className={classnames({
[className]: className,
'sidebar-lg': size === 'lg',
'sidebar-sm': size === 'sm'
})}
/*eslint-disable */
{...(width !== undefined
? {
style: { width: String(width) + 'px' }
}
: {})}
/*eslint-enable */
{...rest}
>
<ModalHeader
className={classnames({
[headerClassName]: headerClassName
})}
toggle={toggleSidebar}
close={renderCloseBtn}
tag='div'
>
<h5 className='modal-title'>
<span className='align-middle'>{title}</span>
</h5>
</ModalHeader>
<ModalBody
className={classnames('flex-grow-1', {
[bodyClassName]: bodyClassName
})}
>
{children}
</ModalBody>
</Modal>
)
}
export default Sidebar
// ** PropTypes
Sidebar.propTypes = {
title: Proptypes.string.isRequired,
open: Proptypes.bool.isRequired,
toggleSidebar: Proptypes.func.isRequired,
size: Proptypes.oneOf(['sm', 'lg']),
className: Proptypes.string,
bodyClassName: Proptypes.string,
contentClassName: Proptypes.string,
wrapperClassName: Proptypes.string,
children: Proptypes.any.isRequired,
width: Proptypes.oneOfType([Proptypes.number, Proptypes.string])
}

17
src/@core/components/spinner/Fallback-spinner.js

@ -0,0 +1,17 @@
// ** Logo
import logo from '@src/assets/images/logo/logo.png'
const SpinnerComponent = () => {
return (
<div className='fallback-spinner vh-100'>
<img className='fallback-logo' src={logo} alt='logo' />
<div className='loading'>
<div className='effect-1 effects'></div>
<div className='effect-2 effects'></div>
<div className='effect-3 effects'></div>
</div>
</div>
)
}
export default SpinnerComponent

13
src/@core/components/spinner/Loading-spinner.js

@ -0,0 +1,13 @@
const ComponentSpinner = () => {
return (
<div className='fallback-spinner'>
<div className='loading component-loader'>
<div className='effect-1 effects'></div>
<div className='effect-2 effects'></div>
<div className='effect-3 effects'></div>
</div>
</div>
)
}
export default ComponentSpinner

52
src/@core/components/statistics-card/index.js

@ -0,0 +1,52 @@
// ** Third Party Components
import Proptypes from 'prop-types'
import classnames from 'classnames'
import Chart from 'react-apexcharts'
import { Card, CardBody } from 'reactstrap'
const StatisticsCards = props => {
// ** Props
const { className, hideChart, iconRight, iconBg, icon, stat, statTitle, options, series, type, height } = props
return (
<Card>
<CardBody
className={classnames('stats-card-body d-flex pt-2', {
[className]: className,
'flex-column align-items-start': !iconRight && !hideChart,
'justify-content-between flex-row-reverse align-items-center': iconRight,
'justify-content-center flex-column text-center': hideChart && !iconRight,
'pb-0': !hideChart,
'pb-2': hideChart
})}
>
<div className='icon-section'>
<div className={`avatar avatar-stats p-50 m-0 ${iconBg ? `bg-light-${iconBg}` : 'bg-light-primary'}`}>
<div className='avatar-content'>{icon}</div>
</div>
</div>
<div className='title-section'>
<h2 className='font-weight-bold mt-1 mb-25'>{stat}</h2>
<p className='mb-0'>{statTitle}</p>
</div>
</CardBody>
{!hideChart && <Chart options={options} series={series} type={type} height={height ? height : 100} />}
</Card>
)
}
export default StatisticsCards
// ** PropTypes
StatisticsCards.propTypes = {
className: Proptypes.string,
hideChart: Proptypes.bool,
iconRight: Proptypes.bool,
iconBg: Proptypes.string,
icon: Proptypes.node.isRequired,
stat: Proptypes.string.isRequired,
statTitle: Proptypes.string.isRequired,
options: Proptypes.object,
series: Proptypes.array,
type: Proptypes.string,
height: Proptypes.string
}

76
src/@core/components/timeline/index.js

@ -0,0 +1,76 @@
// ** Third Party Components
import Proptypes from 'prop-types'
import classnames from 'classnames'
const Timeline = props => {
// ** Props
const { data, tag, className } = props
// ** Custom Tagg
const Tag = tag ? tag : 'ul'
return (
<Tag
className={classnames('timeline', {
[className]: className
})}
>
{data.map((item, i) => {
const ItemTag = item.tag ? item.tag : 'li'
return (
<ItemTag
key={i}
className={classnames('timeline-item', {
[item.className]: className
})}
>
<span
className={classnames('timeline-point', {
[`timeline-point-${item.color}`]: item.color,
'timeline-point-indicator': !item.icon
})}
>
{item.icon ? item.icon : null}
</span>
<div className='timeline-event'>
<div
className={classnames('d-flex justify-content-between flex-sm-row flex-column', {
'mb-sm-0 mb-1': item.meta
})}
>
<h6>{item.title}</h6>
{item.meta ? (
<span
className={classnames('timeline-event-time', {
[item.metaClassName]: item.metaClassName
})}
>
{item.meta}
</span>
) : null}
</div>
<p
className={classnames({
'mb-0': i === data.length - 1 && !item.customContent
})}
>
{item.content}
</p>
{item.customContent ? item.customContent : null}
</div>
</ItemTag>
)
})}
</Tag>
)
}
export default Timeline
// ** PropTypes
Timeline.propTypes = {
data: Proptypes.array.isRequired,
className: Proptypes.string,
tag: Proptypes.string
}

45
src/@core/components/ui-loader/index.js

@ -0,0 +1,45 @@
// ** Third Party Components
import { Fragment } from 'react'
import Proptypes from 'prop-types'
import classnames from 'classnames'
import { Spinner } from 'reactstrap'
import './ui-loader.scss'
const UILoader = props => {
const { children, blocking, loader, className, tag, overlayColor } = props
const Tag = tag
return (
<Tag className={classnames('ui-loader', { [className]: className, show: blocking })}>
{children}
{blocking ? (
<Fragment>
<div
className='overlay' /*eslint-disable */
{...(blocking && overlayColor ? { style: { backgroundColor: overlayColor } } : {})}
/*eslint-enable */
></div>
<div className='loader'>{loader}</div>
</Fragment>
) : null}
</Tag>
)
}
export default UILoader
UILoader.defaultProps = {
tag: 'div',
blocking: false,
loader: <Spinner color='primary' />
}
UILoader.propTypes = {
tag: Proptypes.string,
loader: Proptypes.any,
className: Proptypes.string,
overlayColor: Proptypes.string,
blocking: Proptypes.bool.isRequired
}

35
src/@core/components/ui-loader/ui-loader.scss

@ -0,0 +1,35 @@
// Component: UI Loader
// ========================================================================
@import '../../scss/base/bootstrap-extended/include';
@import '../../scss/base/components/include';
.ui-loader {
position: relative;
&.show {
// background-color: rgba($color: $black, $alpha: 0.3);
.overlay {
content: '';
position: absolute;
width: 100%;
height: 100%;
top: 0;
background-color: rgba($color: $black, $alpha: 0.3);
}
> :first-child,
code {
background-color: initial;
}
}
.loader {
position: absolute;
top: 50%;
left: 50%;
height: 50%;
margin-top: -1rem;
margin-left: -1rem;
}
}

104
src/@core/components/widgets/stats/ChartOptions.js

@ -0,0 +1,104 @@
// ** Area Chart Common Options
export const areaChartOptions = {
chart: {
toolbar: {
show: false
},
sparkline: {
enabled: true
}
},
grid: {
show: false
},
colors: ['#7367F0'],
dataLabels: {
enabled: false
},
stroke: {
curve: 'smooth',
width: 2.5
},
fill: {
type: 'gradient',
gradient: {
shadeIntensity: 0.9,
opacityFrom: 0.7,
opacityTo: 0.5,
stops: [0, 80, 100]
}
},
xaxis: {
labels: {
show: false
},
axisBorder: {
show: false
}
},
yaxis: {
labels: {
show: false
}
},
tooltip: {
x: { show: false }
}
}
// ** Line Chart Common Options
export const lineChartOptions = {
chart: {
toolbar: {
show: false
},
sparkline: {
enabled: true
},
dropShadow: {
enabled: true,
top: 5,
left: 0,
blur: 4,
opacity: 0.1
}
},
grid: {
show: false
},
colors: ['#7367F0'],
dataLabels: {
enabled: false
},
stroke: {
curve: 'smooth',
width: 5
},
fill: {
type: 'gradient',
gradient: {
shadeIntensity: 1,
gradientToColors: ['#A9A2F6'],
opacityFrom: 1,
opacityTo: 1,
stops: [0, 100, 100, 100]
}
},
xaxis: {
labels: {
show: false
},
axisBorder: {
show: false
}
},
yaxis: {
labels: {
show: false
}
},
tooltip: {
x: { show: false }
}
}

32
src/@core/components/widgets/stats/StatsHorizontal.js

@ -0,0 +1,32 @@
// ** Third Party Components
import PropTypes from 'prop-types'
import { Card, CardBody } from 'reactstrap'
const StatsHorizontal = ({ icon, color, stats, statTitle, className, ...rest }) => {
return (
<Card>
<CardBody className={className}>
<div className='d-flex justify-content-between align-items-center'>
<div>
<h2 className='font-weight-bolder mb-0'>{stats}</h2>
<p className='card-text'>{statTitle}</p>
</div>
<div className={`avatar avatar-stats p-50 m-0 ${color ? `bg-light-${color}` : 'bg-light-primary'}`}>
<div className='avatar-content'>{icon}</div>
</div>
</div>
</CardBody>
</Card>
)
}
export default StatsHorizontal
// ** PropTypes
StatsHorizontal.propTypes = {
icon: PropTypes.element.isRequired,
color: PropTypes.string.isRequired,
stats: PropTypes.string.isRequired,
statTitle: PropTypes.string.isRequired,
className: PropTypes.string
}

28
src/@core/components/widgets/stats/StatsVertical.js

@ -0,0 +1,28 @@
// ** Third Party Components
import PropTypes from 'prop-types'
import { Card, CardBody } from 'reactstrap'
const StatsVertical = ({ icon, color, stats, statTitle, className, ...rest }) => {
return (
<Card className='text-center'>
<CardBody className={className}>
<div className={`avatar p-50 m-0 mb-1 ${color ? `bg-light-${color}` : 'bg-light-primary'}`}>
<div className='avatar-content'>{icon}</div>
</div>
<h2 className='font-weight-bolder'>{stats}</h2>
<p className='card-text line-ellipsis'>{statTitle}</p>
</CardBody>
</Card>
)
}
export default StatsVertical
// ** PropTypes
StatsVertical.propTypes = {
icon: PropTypes.element.isRequired,
color: PropTypes.string.isRequired,
stats: PropTypes.string.isRequired,
statTitle: PropTypes.string.isRequired,
className: PropTypes.string
}

51
src/@core/components/widgets/stats/StatsWithAreaChart.js vendored

@ -0,0 +1,51 @@
// ** Custom Components
import Avatar from '@components/avatar'
// ** Third Party Components
import PropTypes from 'prop-types'
import classnames from 'classnames'
import Chart from 'react-apexcharts'
import { Card, CardBody } from 'reactstrap'
// ** Default Options
import { areaChartOptions } from './ChartOptions'
const StatsWithAreaChart = props => {
// ** Props
const { icon, color, stats, statTitle, series, options, type, height, className, ...rest } = props
return (
<Card {...rest}>
<CardBody
className={classnames('pb-0', {
[className]: className
})}
>
<Avatar className='avatar-stats p-50 m-0' color={`light-${color}`} icon={icon} />
<h2 className='font-weight-bolder mt-1'>{stats}</h2>
<p className='card-text'>{statTitle}</p>
</CardBody>
<Chart options={options} series={series} type={type} height={height ? height : 100} />
</Card>
)
}
export default StatsWithAreaChart
// ** PropTypes
StatsWithAreaChart.propTypes = {
icon: PropTypes.element.isRequired,
color: PropTypes.string.isRequired,
stats: PropTypes.string.isRequired,
statTitle: PropTypes.string.isRequired,
options: PropTypes.object,
series: PropTypes.array.isRequired,
type: PropTypes.string,
height: PropTypes.string,
className: PropTypes.string
}
// ** Default Props
StatsWithAreaChart.defaultProps = {
options: areaChartOptions,
color: 'primary'
}

45
src/@core/components/widgets/stats/StatsWithLineChart.js vendored

@ -0,0 +1,45 @@
// ** Custom Components
import Avatar from '@components/avatar'
// ** Third Party Components
import PropTypes from 'prop-types'
import Chart from 'react-apexcharts'
import { Card, CardHeader, CardText } from 'reactstrap'
// ** Default Options
import { lineChartOptions } from './ChartOptions'
const StatsWithLineChart = ({ icon, color, stats, statTitle, series, options, type, height, ...rest }) => {
return (
<Card {...rest}>
<CardHeader className='align-items-start pb-0'>
<div>
<h2 className='font-weight-bolder'>{stats}</h2>
<CardText>{statTitle}</CardText>
</div>
<Avatar className='avatar-stats p-50 m-0' color={`light-${color}`} icon={icon} />
</CardHeader>
<Chart options={options} series={series} type={type} height={height ? height : 100} />
</Card>
)
}
export default StatsWithLineChart
// ** PropTypes
StatsWithLineChart.propTypes = {
icon: PropTypes.element.isRequired,
color: PropTypes.string.isRequired,
stats: PropTypes.string.isRequired,
statTitle: PropTypes.string.isRequired,
options: PropTypes.object,
series: PropTypes.array.isRequired,
type: PropTypes.string,
height: PropTypes.string
}
// ** Default Props
StatsWithLineChart.defaultProps = {
options: lineChartOptions,
color: 'primary'
}

35
src/@core/components/widgets/stats/TinyChartStats.js

@ -0,0 +1,35 @@
// ** Third Party Components
import PropTypes from 'prop-types'
import Chart from 'react-apexcharts'
import { Card, CardBody } from 'reactstrap'
const TinyChartStats = props => {
// ** Props
const { title, stats, options, series, type, height } = props
return (
<Card className='card-tiny-line-stats'>
<CardBody className='pb-50'>
<h6>{title}</h6>
<h2 className='font-weight-bolder mb-1'>{stats}</h2>
<Chart options={options} series={series} type={type} height={height} />
</CardBody>
</Card>
)
}
export default TinyChartStats
// ** PropTypes
TinyChartStats.propTypes = {
title: PropTypes.string.isRequired,
stats: PropTypes.string.isRequired,
options: PropTypes.object.isRequired,
series: PropTypes.array.isRequired,
type: PropTypes.string.isRequired
}
// ** Default Props
TinyChartStats.defaultProps = {
height: 100
}

121
src/@core/components/wizard/index.js

@ -0,0 +1,121 @@
// ** React Imports
import { useEffect, useState, Fragment, forwardRef } from 'react'
// ** Third Party Components
import Stepper from 'bs-stepper'
import classnames from 'classnames'
import { PropTypes } from 'prop-types'
import { ChevronRight } from 'react-feather'
// ** Styles
import 'bs-stepper/dist/css/bs-stepper.min.css'
import '../../../@core/scss/base/plugins/forms/form-wizard.scss'
const Wizard = forwardRef((props, ref) => {
// ** Props
const { type, className, steps, separator, options, instance } = props
// ** State
const [activeIndex, setActiveIndex] = useState(0)
// ** Vars
let stepper = null
// ** Step change listener on mount
useEffect(() => {
stepper = new Stepper(ref.current, options)
ref.current.addEventListener('shown.bs-stepper', function (event) {
setActiveIndex(event.detail.indexStep)
})
if (instance) {
instance(stepper)
}
}, [])
// ** Renders Wizard Header
const renderHeader = () => {
return steps.map((step, index) => {
return (
<Fragment key={step.id}>
{index !== 0 && index !== steps.length ? <div className='line'>{separator}</div> : null}
<div
className={classnames('step', {
crossed: activeIndex > index,
active: index === activeIndex
})}
data-target={`#${step.id}`}
>
<button type='button' className='step-trigger'>
<span className='bs-stepper-box'>{step.icon ? step.icon : index + 1}</span>
<span className='bs-stepper-label'>
<span className='bs-stepper-title'>{step.title}</span>
{step.subtitle ? <span className='bs-stepper-subtitle'>{step.subtitle}</span> : null}
</span>
</button>
</div>
</Fragment>
)
})
}
// ** Renders Wizard Content
const renderContent = () => {
return steps.map((step, index) => {
return (
<div
className={classnames('content', {
'active dstepper-block': activeIndex === index
})}
id={step.id}
key={step.id}
>
{step.content}
</div>
)
})
}
return (
<div
ref={ref}
className={classnames('bs-stepper', {
[className]: className,
vertical: type === 'vertical',
'vertical wizard-modern': type === 'modern-vertical',
'wizard-modern': type === 'modern-horizontal'
})}
>
<div className='bs-stepper-header'>{renderHeader()}</div>
<div className='bs-stepper-content'>{renderContent()}</div>
</div>
)
})
export default Wizard
// ** Default Props
Wizard.defaultProps = {
type: 'horizontal',
separator: <ChevronRight size={17} />,
options: {}
}
// ** PropTypes
Wizard.propTypes = {
type: PropTypes.string,
instance: PropTypes.func,
options: PropTypes.object,
className: PropTypes.string,
separator: PropTypes.element,
steps: PropTypes.arrayOf(
PropTypes.shape({
id: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
subtitle: PropTypes.string,
icon: PropTypes.any,
content: PropTypes.any.isRequired
})
).isRequired
}

35
src/@core/layouts/BlankLayout.js

@ -0,0 +1,35 @@
// ** React Imports
import { useEffect, useState } from 'react'
// ** Custom Hooks
import { useSkin } from '@hooks/useSkin'
const BlankLayout = ({ children, ...rest }) => {
// ** Hooks
const [skin, setSkin] = useSkin()
// ** States
const [isMounted, setIsMounted] = useState(false)
//** ComponentDidMount
useEffect(() => {
setIsMounted(true)
return () => setIsMounted(false)
}, [])
if (!isMounted) {
return null
}
return (
<div className='blank-page'>
<div className='app-content content'>
<div className='content-wrapper'>
<div className='content-body'>{children}</div>
</div>
</div>
</div>
)
}
export default BlankLayout

122
src/@core/layouts/HeaderLayout.js

@ -0,0 +1,122 @@
// ** React Imports
import { useState, useEffect } from 'react';
import { useLocation } from 'react-router-dom';
// ** Store & Actions
import { useSelector, useDispatch } from 'react-redux';
import {
handleMenuCollapsed,
handleContentWidth,
handleMenuHidden
} from '@store/actions/layout';
// ** Third Party Components
import classnames from 'classnames';
import { ArrowUp } from 'react-feather';
import ScrollToTop from 'react-scroll-up';
import { Navbar, Button } from 'reactstrap';
// ** Configs
import themeConfig from '@configs/themeConfig';
// ** Custom Components
import Customizer from '@components/customizer';
import FooterComponent from './components/footer';
import NavbarComponent from './components/navbar';
import SidebarComponent from './components/menu/vertical-menu';
// ** Custom Hooks
import { useRTL } from '@hooks/useRTL';
import { useSkin } from '@hooks/useSkin';
import { useNavbarType } from '@hooks/useNavbarType';
import { useFooterType } from '@hooks/useFooterType';
import { useNavbarColor } from '@hooks/useNavbarColor';
// ** Styles
import '@styles/base/core/menu/menu-types/vertical-menu.scss';
import '@styles/base/core/menu/menu-types/vertical-overlay-menu.scss';
const HeaderLayout = props => {
// ** Props
const { children, navbar, footer, menu, routerProps, currentActiveItem } =
props;
// ** Hooks
const [skin, setSkin] = useSkin();
const [navbarColor, setNavbarColor] = useNavbarColor();
// ** States
const [isMounted, setIsMounted] = useState(false);
const [menuVisibility, setMenuVisibility] = useState(false);
const [windowWidth, setWindowWidth] = useState(window.innerWidth);
// ** Store Vars
const layoutStore = useSelector(state => state.layout);
// ** Update Window Width
const handleWindowWidth = () => {
setWindowWidth(window.innerWidth);
};
// ** Vars
const location = useLocation();
//** This function will detect the Route Change and will hide the menu on menu item click
useEffect(() => {
if (menuVisibility && windowWidth < 1200) {
setMenuVisibility(false);
}
}, [location]);
//** Sets Window Size & Layout Props
useEffect(() => {
if (window !== undefined) {
window.addEventListener('resize', handleWindowWidth);
}
}, [windowWidth]);
//** ComponentDidMount
useEffect(() => {
setIsMounted(true);
return () => setIsMounted(false);
}, []);
const bgColorCondition =
navbarColor !== '' && navbarColor !== 'light' && navbarColor !== 'white';
if (!isMounted) {
return null;
}
return (
<div className='blank-page'>
<div className='app-content content'>
<div className='content-wrapper'>
<Navbar
expand='lg'
light={skin !== 'dark'}
dark={skin === 'dark' || bgColorCondition}
color={bgColorCondition ? navbarColor : undefined}
className={classnames(
'header-navbar navbar align-items-center floating-nav2 navbar-shadow'
)}
>
<div className='navbar-container d-flex content'>
{navbar ? (
navbar
) : (
<NavbarComponent
setMenuVisibility={setMenuVisibility}
skin={skin}
setSkin={setSkin}
/>
)}
</div>
</Navbar>
<div className='content-body'>{children}</div>
</div>
</div>
</div>
);
};
export default HeaderLayout;

202
src/@core/layouts/HorizontalLayout.js

@ -0,0 +1,202 @@
// ** React Imports
import { useState, useEffect } from 'react'
import { Link } from 'react-router-dom'
// ** Store & Actions
import { useSelector, useDispatch } from 'react-redux'
import { handleMenuHidden, handleContentWidth } from '@store/actions/layout'
// ** Third Party Components
import classnames from 'classnames'
import { ArrowUp } from 'react-feather'
import ScrollToTop from 'react-scroll-up'
import { Navbar, NavItem, Button } from 'reactstrap'
// ** Configs
import themeConfig from '@configs/themeConfig'
// ** Custom Components
import Customizer from '@components/customizer'
import NavbarComponent from './components/navbar'
import FooterComponent from './components/footer'
import MenuComponent from './components/menu/horizontal-menu'
// ** Custom Hooks
import { useRTL } from '@hooks/useRTL'
import { useSkin } from '@hooks/useSkin'
import { useNavbarType } from '@hooks/useNavbarType'
import { useFooterType } from '@hooks/useFooterType'
import { useNavbarColor } from '@hooks/useNavbarColor'
// ** Styles
import '@styles/base/core/menu/menu-types/horizontal-menu.scss'
const HorizontalLayout = props => {
// ** Props
const { children, navbar, footer, menu, currentActiveItem, routerProps } = props
// ** Hooks
const [skin, setSkin] = useSkin()
const [isRtl, setIsRtl] = useRTL()
const [navbarType, setNavbarType] = useNavbarType()
const [footerType, setFooterType] = useFooterType()
const [navbarColor, setNavbarColor] = useNavbarColor()
// ** States
const [isMounted, setIsMounted] = useState(false)
const [navbarScrolled, setNavbarScrolled] = useState(false)
// ** Store Vars
const dispatch = useDispatch()
const layoutStore = useSelector(state => state.layout)
// ** Vars
const contentWidth = layoutStore.contentWidth
const isHidden = layoutStore.menuHidden
// ** Handles Content Width
const setContentWidth = val => dispatch(handleContentWidth(val))
// ** Handles Content Width
const setIsHidden = val => dispatch(handleMenuHidden(val))
// ** UseEffect Cleanup
const cleanup = () => {
setIsMounted(false)
setNavbarScrolled(false)
}
//** ComponentDidMount
useEffect(() => {
setIsMounted(true)
window.addEventListener('scroll', function () {
if (window.pageYOffset > 65 && navbarScrolled === false) {
setNavbarScrolled(true)
}
if (window.pageYOffset < 65) {
setNavbarScrolled(false)
}
})
return () => cleanup()
}, [])
// ** Vars
const footerClasses = {
static: 'footer-static',
sticky: 'footer-fixed',
hidden: 'footer-hidden'
}
const navbarWrapperClasses = {
floating: 'navbar-floating',
sticky: 'navbar-sticky',
static: 'navbar-static'
}
const navbarClasses = {
floating: 'floating-nav',
sticky: 'fixed-top'
}
const bgColorCondition = navbarColor !== '' && navbarColor !== 'light' && navbarColor !== 'white'
if (!isMounted) {
return null
}
return (
<div
className={classnames(
`wrapper horizontal-layout horizontal-menu ${navbarWrapperClasses[navbarType] || 'navbar-floating'} ${
footerClasses[footerType] || 'footer-static'
} menu-expanded`
)}
{...(isHidden ? { 'data-col': '1-column' } : {})}
>
<Navbar
expand='lg'
className={classnames('header-navbar navbar-fixed align-items-center navbar-shadow navbar-brand-center', {
'navbar-scrolled': navbarScrolled
})}
>
{!navbar && (
<div className='navbar-header d-xl-block d-none'>
<ul className='nav navbar-nav'>
<NavItem>
<Link to='/' className='navbar-brand'>
<span className='brand-logo'>
<img src={themeConfig.app.appLogoImage} alt='logo' />
</span>
<h2 className='brand-text mb-0'>{themeConfig.app.appName}</h2>
</Link>
</NavItem>
</ul>
</div>
)}
<div className='navbar-container d-flex content'>
{navbar ? navbar : <NavbarComponent skin={skin} setSkin={setSkin} />}
</div>
</Navbar>
{!isHidden ? (
<div className='horizontal-menu-wrapper'>
<Navbar
tag='div'
expand='sm'
light={skin !== 'dark'}
dark={skin === 'dark' || bgColorCondition}
className={classnames(`header-navbar navbar-horizontal navbar-shadow menu-border`, {
[navbarClasses[navbarType]]: navbarType !== 'static',
'floating-nav': (!navbarClasses[navbarType] && navbarType !== 'static') || navbarType === 'floating'
})}
>
{menu ? menu : <MenuComponent routerProps={routerProps} currentActiveItem={currentActiveItem} />}
</Navbar>
</div>
) : null}
{children}
{themeConfig.layout.customizer === true ? (
<Customizer
skin={skin}
setSkin={setSkin}
footerType={footerType}
setFooterType={setFooterType}
navbarType={navbarType}
setNavbarType={setNavbarType}
navbarColor={navbarColor}
setNavbarColor={setNavbarColor}
isRtl={isRtl}
setIsRtl={setIsRtl}
layout={props.layout}
setLayout={props.setLayout}
isHidden={isHidden}
setIsHidden={setIsHidden}
contentWidth={contentWidth}
setContentWidth={setContentWidth}
transition={props.transition}
setTransition={props.setTransition}
themeConfig={themeConfig}
/>
) : null}
<footer
className={classnames(`footer footer-light ${footerClasses[footerType] || 'footer-static'}`, {
'd-none': footerType === 'hidden'
})}
>
{footer ? footer : <FooterComponent footerType={footerType} footerClasses={footerClasses} />}
</footer>
{themeConfig.layout.scrollTop === true ? (
<div className='scroll-to-top'>
<ScrollToTop showUnder={300} style={{ bottom: '5%' }}>
<Button className='btn-icon' color='primary'>
<ArrowUp size={14} />
</Button>
</ScrollToTop>
</div>
) : null}
</div>
)
}
export default HorizontalLayout

224
src/@core/layouts/VerticalLayout.js

@ -0,0 +1,224 @@
// ** React Imports
import { useState, useEffect } from 'react'
import { useLocation } from 'react-router-dom'
// ** Store & Actions
import { useSelector, useDispatch } from 'react-redux'
import { handleMenuCollapsed, handleContentWidth, handleMenuHidden } from '@store/actions/layout'
// ** Third Party Components
import classnames from 'classnames'
import { ArrowUp } from 'react-feather'
import ScrollToTop from 'react-scroll-up'
import { Navbar, Button } from 'reactstrap'
// ** Configs
import themeConfig from '@configs/themeConfig'
// ** Custom Components
import Customizer from '@components/customizer'
import FooterComponent from './components/footer'
import NavbarComponent from './components/navbar'
import SidebarComponent from './components/menu/vertical-menu'
// ** Custom Hooks
import { useRTL } from '@hooks/useRTL'
import { useSkin } from '@hooks/useSkin'
import { useNavbarType } from '@hooks/useNavbarType'
import { useFooterType } from '@hooks/useFooterType'
import { useNavbarColor } from '@hooks/useNavbarColor'
// ** Styles
import '@styles/base/core/menu/menu-types/vertical-menu.scss'
import '@styles/base/core/menu/menu-types/vertical-overlay-menu.scss'
const VerticalLayout = props => {
// ** Props
const { children, navbar, footer, menu, routerProps, currentActiveItem } = props
// ** Hooks
const [skin, setSkin] = useSkin()
const [isRtl, setIsRtl] = useRTL()
const [navbarType, setNavbarType] = useNavbarType()
const [footerType, setFooterType] = useFooterType()
const [navbarColor, setNavbarColor] = useNavbarColor()
// ** States
const [isMounted, setIsMounted] = useState(false)
const [menuVisibility, setMenuVisibility] = useState(false)
const [windowWidth, setWindowWidth] = useState(window.innerWidth)
// ** Store Vars
const dispatch = useDispatch()
const layoutStore = useSelector(state => state.layout)
// ** Update Window Width
const handleWindowWidth = () => {
setWindowWidth(window.innerWidth)
}
// ** Vars
const location = useLocation()
const contentWidth = layoutStore.contentWidth
const menuCollapsed = layoutStore.menuCollapsed
const isHidden = layoutStore.menuHidden
// ** Toggles Menu Collapsed
const setMenuCollapsed = val => dispatch(handleMenuCollapsed(val))
// ** Handles Content Width
const setContentWidth = val => dispatch(handleContentWidth(val))
// ** Handles Content Width
const setIsHidden = val => dispatch(handleMenuHidden(val))
//** This function will detect the Route Change and will hide the menu on menu item click
useEffect(() => {
if (menuVisibility && windowWidth < 1200) {
setMenuVisibility(false)
}
}, [location])
//** Sets Window Size & Layout Props
useEffect(() => {
if (window !== undefined) {
window.addEventListener('resize', handleWindowWidth)
}
}, [windowWidth])
//** ComponentDidMount
useEffect(() => {
setIsMounted(true)
return () => setIsMounted(false)
}, [])
// ** Vars
const footerClasses = {
static: 'footer-static',
sticky: 'footer-fixed',
hidden: 'footer-hidden'
}
const navbarWrapperClasses = {
floating: 'navbar-floating',
sticky: 'navbar-sticky',
static: 'navbar-static',
hidden: 'navbar-hidden'
}
const navbarClasses = {
floating: 'floating-nav',
sticky: 'fixed-top',
static: 'navbar-static-top',
hidden: 'd-none'
}
const bgColorCondition = navbarColor !== '' && navbarColor !== 'light' && navbarColor !== 'white'
if (!isMounted) {
return null
}
return (
<div
className={classnames(
`wrapper vertical-layout ${navbarWrapperClasses[navbarType] || 'navbar-floating'} ${
footerClasses[footerType] || 'footer-static'
}`,
{
// Modern Menu
'vertical-menu-modern': windowWidth >= 1200,
'menu-collapsed': menuCollapsed && windowWidth >= 1200,
'menu-expanded': !menuCollapsed && windowWidth > 1200,
// Overlay Menu
'vertical-overlay-menu': windowWidth < 1200,
'menu-hide': !menuVisibility && windowWidth < 1200,
'menu-open': menuVisibility && windowWidth < 1200
}
)}
{...(isHidden ? { 'data-col': '1-column' } : {})}
>
{!isHidden ? (
<SidebarComponent
skin={skin}
menu={menu}
menuCollapsed={menuCollapsed}
menuVisibility={menuVisibility}
setMenuCollapsed={setMenuCollapsed}
setMenuVisibility={setMenuVisibility}
routerProps={routerProps}
currentActiveItem={currentActiveItem}
/>
) : null}
<Navbar
expand='lg'
light={skin !== 'dark'}
dark={skin === 'dark' || bgColorCondition}
color={bgColorCondition ? navbarColor : undefined}
className={classnames(
`header-navbar navbar align-items-center ${navbarClasses[navbarType] || 'floating-nav'} navbar-shadow`
)}
>
<div className='navbar-container d-flex content'>
{navbar ? navbar : <NavbarComponent setMenuVisibility={setMenuVisibility} skin={skin} setSkin={setSkin} />}
</div>
</Navbar>
{children}
{/* Vertical Nav Menu Overlay */}
<div
className={classnames('sidenav-overlay', {
show: menuVisibility
})}
onClick={() => setMenuVisibility(false)}
></div>
{/* Vertical Nav Menu Overlay */}
{themeConfig.layout.customizer === true ? (
<Customizer
skin={skin}
setSkin={setSkin}
footerType={footerType}
setFooterType={setFooterType}
navbarType={navbarType}
setNavbarType={setNavbarType}
navbarColor={navbarColor}
setNavbarColor={setNavbarColor}
isRtl={isRtl}
setIsRtl={setIsRtl}
layout={props.layout}
setLayout={props.setLayout}
isHidden={isHidden}
setIsHidden={setIsHidden}
contentWidth={contentWidth}
setContentWidth={setContentWidth}
menuCollapsed={menuCollapsed}
setMenuCollapsed={setMenuCollapsed}
transition={props.transition}
setTransition={props.setTransition}
themeConfig={themeConfig}
/>
) : null}
<footer
className={classnames(`footer footer-light ${footerClasses[footerType] || 'footer-static'}`, {
'd-none': footerType === 'hidden'
})}
>
{footer ? footer : <FooterComponent footerType={footerType} footerClasses={footerClasses} />}
</footer>
{themeConfig.layout.scrollTop === true ? (
<div className='scroll-to-top'>
<ScrollToTop showUnder={300} style={{ bottom: '5%' }}>
<Button className='btn-icon' color='primary'>
<ArrowUp size={14} />
</Button>
</ScrollToTop>
</div>
) : null}
</div>
)
}
export default VerticalLayout

22
src/@core/layouts/components/footer/index.js

@ -0,0 +1,22 @@
// ** Icons Import
import { Heart } from 'react-feather'
const Footer = () => {
return (
<p className='clearfix mb-0'>
<span className='float-md-left d-block d-md-inline-block mt-25'>
COPYRIGHT © {new Date().getFullYear()}{' '}
<a href='https://1.envato.market/pixinvent_portfolio' target='_blank' rel='noopener noreferrer'>
Pixinvent
</a>
<span className='d-none d-sm-inline-block'>, All rights Reserved</span>
</span>
<span className='float-md-right d-none d-md-block'>
Hand-crafted & Made with
<Heart size={14} />
</span>
</p>
)
}
export default Footer

89
src/@core/layouts/components/layout-wrapper/index.js

@ -0,0 +1,89 @@
// ** React Imports
import { Fragment, useEffect } from 'react'
// ** Third Party Components
import classnames from 'classnames'
// ** Store & Actions
import { useSelector, useDispatch } from 'react-redux'
import { handleContentWidth, handleMenuCollapsed, handleMenuHidden } from '@store/actions/layout'
// ** Styles
import 'animate.css/animate.css'
const LayoutWrapper = props => {
// ** Props
const { layout, children, appLayout, wrapperClass, transition, routeMeta } = props
// ** Store Vars
const dispatch = useDispatch()
const store = useSelector(state => state)
const navbarStore = store.navbar
const contentWidth = store.layout.contentWidth
//** Vars
const Tag = layout === 'HorizontalLayout' && !appLayout ? 'div' : Fragment
// ** Clean Up Function
const cleanUp = () => {
if (routeMeta) {
if (routeMeta.contentWidth) {
dispatch(handleContentWidth('full'))
}
if (routeMeta.menuCollapsed) {
dispatch(handleMenuCollapsed(!routeMeta.menuCollapsed))
}
if (routeMeta.menuHidden) {
dispatch(handleMenuHidden(!routeMeta.menuHidden))
}
}
}
// ** ComponentDidMount
useEffect(() => {
if (routeMeta) {
if (routeMeta.contentWidth) {
dispatch(handleContentWidth(routeMeta.contentWidth))
}
if (routeMeta.menuCollapsed) {
dispatch(handleMenuCollapsed(routeMeta.menuCollapsed))
}
if (routeMeta.menuHidden) {
dispatch(handleMenuHidden(routeMeta.menuHidden))
}
}
return () => cleanUp()
}, [])
return (
<div
className={classnames('app-content content overflow-hidden', {
[wrapperClass]: wrapperClass,
'show-overlay': navbarStore.query.length
})}
>
<div className='content-overlay'></div>
<div className='header-navbar-shadow' />
<div
className={classnames({
'content-wrapper': !appLayout,
'content-area-wrapper': appLayout,
'container p-0': contentWidth === 'boxed',
[`animate__animated animate__${transition}`]: transition !== 'none' && transition.length
})}
>
<Tag
/*eslint-disable */
{...(layout === 'HorizontalLayout' && !appLayout
? { className: classnames({ 'content-body': !appLayout }) }
: {})}
/*eslint-enable */
>
{children}
</Tag>
</div>
</div>
)
}
export default LayoutWrapper

117
src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuGroup.js

@ -0,0 +1,117 @@
// ** React Imports
import { Link, useLocation } from 'react-router-dom'
// ** Third Party Components
import classnames from 'classnames'
import { Dropdown, DropdownMenu, DropdownToggle } from 'reactstrap'
// ** Utils
import { isNavGroupActive } from '@layouts/utils'
// ** Horizontal Menu Items Component
import HorizontalNavMenuItems from './HorizontalNavMenuItems'
const HorizontalNavMenuGroup = props => {
// ** Props
const {
item,
submenu,
groupActive,
onMouseEnter,
onMouseLeave,
openDropdown,
setGroupActive,
activeItem,
setActiveItem,
routerProps,
setOpenDropdown,
currentActiveItem
} = props
// ** URL Var
const currentURL = useLocation().pathname
// ** Dropdown menu modifiers
const menuModifiers = {
setMaxHeight: {
enabled: true,
fn: data => {
const pageHeight = window.innerHeight,
ddTop = data.instance.reference.getBoundingClientRect().top,
ddHeight = data.popper.height
let maxHeight, stylesObj
// ** Calculate and set height
if (pageHeight - ddTop - ddHeight - 28 < 1) {
maxHeight = pageHeight - ddTop - 25
stylesObj = {
maxHeight,
overflowY: 'auto'
}
}
const ddRef = data.instance.popper.getBoundingClientRect()
// ** If there is not space left to open sub menu open it to the right
if (ddRef.left + ddRef.width - (window.innerWidth - 16) >= 0) {
data.instance.popper.closest('.dropdown').classList.add('openLeft')
}
return {
...data,
styles: {
...stylesObj
}
}
}
}
}
return (
<Dropdown
tag='li'
className={classnames({
'nav-item': submenu === false,
'dropdown-submenu': submenu === true,
'sidebar-group-active active':
isNavGroupActive(item.children, currentURL, routerProps) || groupActive.includes(item.id)
})}
isOpen={openDropdown.includes(item.id)}
toggle={() => onMouseEnter(item.id)}
onMouseEnter={() => onMouseEnter(item.id)}
onMouseLeave={() => onMouseLeave(item.id)}
>
<DropdownToggle
to='/'
tag={Link}
className={classnames('dropdown-toggle d-flex align-items-center', {
'dropdown-item': submenu === true,
'nav-link': submenu === false
})}
onClick={e => e.preventDefault()}
>
{item.icon}
<span>{item.title}</span>
</DropdownToggle>
<DropdownMenu tag='ul' modifiers={menuModifiers}>
<HorizontalNavMenuItems
submenu={true}
parentItem={item}
items={item.children}
activeItem={activeItem}
groupActive={groupActive}
routerProps={routerProps}
openDropdown={openDropdown}
onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave}
setActiveItem={setActiveItem}
setGroupActive={setGroupActive}
isChild={true}
setOpenDropdown={setOpenDropdown}
currentActiveItem={currentActiveItem}
/>
</DropdownMenu>
</Dropdown>
)
}
export default HorizontalNavMenuGroup

23
src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuItems.js

@ -0,0 +1,23 @@
// ** Menu Components Imports
import HorizontalNavMenuLink from './HorizontalNavMenuLink';
import HorizontalNavMenuGroup from './HorizontalNavMenuGroup';
import { resolveHorizontalNavMenuItemComponent as resolveNavItemComponent } from '@layouts/utils';
const HorizontalNavMenuItems = props => {
// ** Components Object
const Components = {
HorizontalNavMenuGroup,
HorizontalNavMenuLink
};
// ** Render Nav Items
const RenderNavItems = props.items.map((item, index) => {
const TagName = Components[resolveNavItemComponent(item)];
return <TagName item={item} index={index} key={item.id} {...props} />;
});
return RenderNavItems;
};
export default HorizontalNavMenuItems;

101
src/@core/layouts/components/menu/horizontal-menu/HorizontalNavMenuLink.js

@ -0,0 +1,101 @@
// ** React Imports
import { useEffect } from 'react';
import { NavLink, useLocation } from 'react-router-dom';
// ** Horizontal menu items array
import navigation from '@src/navigation/horizontal';
// ** Third Party Components
import classnames from 'classnames';
// 추후 서버 통신을 통한 메뉴 구성 필요.
import basis from '@src/navigation/basis';
// ** Utils
import { isNavLinkActive, search, getAllParents } from '@layouts/utils';
const HorizontalNavMenuLink = ({
item,
setOpenDropdown,
setGroupActive,
activeItem,
setActiveItem,
routerProps,
currentActiveItem,
isChild
}) => {
// ** Conditional Link Tag, if item has newTab or externalLink props use <a> tag else use NavLink
const LinkTag = item.externalLink ? 'a' : NavLink;
// ** URL Vars
const location = useLocation();
const currentURL = location.pathname;
const navLinkActive = isNavLinkActive(item.navLink, currentURL, routerProps);
// ** Get parents of current items
const searchParents = (basis, currentURL) => {
const parents = search(basis, currentURL, routerProps); // Search for parent object
const allParents = getAllParents(parents, 'id'); // Parents Object to Parents Array
allParents.pop();
return allParents;
};
// ** Remove all items from OpenDropdown array
const resetOpenDropdowns = () => setOpenDropdown([]);
// ** On mount update active group array
useEffect(() => {
if (currentActiveItem !== null) {
setActiveItem(currentActiveItem);
const arr = searchParents(basis, currentURL);
setGroupActive([...arr]);
}
}, [location]);
return (
<li
className={classnames('nav-item', {
active: item.navLink === activeItem,
disabled: item.disabled
})}
onClick={resetOpenDropdowns}
>
<LinkTag
className={classnames('d-flex align-items-center', {
'dropdown-item': isChild,
'nav-link': !isChild
})}
tag={LinkTag}
target={item.newTab ? '_blank' : undefined}
/*eslint-disable */
{...(item.externalLink === true
? {
href: item.navLink || '/'
}
: {
to: item.navLink || '/',
isActive: (match, location) => {
if (!match) {
return false;
}
if (
match.url &&
match.url !== '' &&
match.url === item.navLink
) {
currentActiveItem = item.navLink;
}
}
})}
/*eslint-enable */
>
{item.icon}
<span>{item.title}</span>
</LinkTag>
</li>
);
};
export default HorizontalNavMenuLink;

52
src/@core/layouts/components/menu/horizontal-menu/index.js

@ -0,0 +1,52 @@
// ** React Imports
import { useState } from 'react'
// ** Horizontal Menu Array
import navigation from '@src/navigation/horizontal'
// ** Horizontal Menu Components
import HorizontalNavMenuItems from './HorizontalNavMenuItems'
const HorizontalMenu = ({ currentActiveItem, routerProps }) => {
// ** States
const [activeItem, setActiveItem] = useState(null)
const [groupActive, setGroupActive] = useState([])
const [openDropdown, setOpenDropdown] = useState([])
// ** On mouse enter push the ID to openDropdown array
const onMouseEnter = id => {
const arr = openDropdown
arr.push(id)
setOpenDropdown([...arr])
}
// ** On mouse leave remove the ID to openDropdown array
const onMouseLeave = id => {
const arr = openDropdown
arr.splice(arr.indexOf(id), 1)
setOpenDropdown([...arr])
}
return (
<div className='navbar-container main-menu-content'>
<ul className='nav navbar-nav' id='main-menu-navigation'>
<HorizontalNavMenuItems
submenu={false}
items={navigation}
activeItem={activeItem}
groupActive={groupActive}
routerProps={routerProps}
onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave}
openDropdown={openDropdown}
setActiveItem={setActiveItem}
setGroupActive={setGroupActive}
setOpenDropdown={setOpenDropdown}
currentActiveItem={currentActiveItem}
/>
</ul>
</div>
)
}
export default HorizontalMenu

65
src/@core/layouts/components/menu/vertical-menu/VerticalMenuHeader.js

@ -0,0 +1,65 @@
// ** React Imports
import { useEffect } from 'react'
import { NavLink } from 'react-router-dom'
// ** Third Party Components
import { Disc, X, Circle } from 'react-feather'
// ** Config
import themeConfig from '@configs/themeConfig'
const VerticalMenuHeader = props => {
// ** Props
const { menuCollapsed, setMenuCollapsed, setMenuVisibility, setGroupOpen, menuHover } = props
// ** Reset open group
useEffect(() => {
if (!menuHover && menuCollapsed) setGroupOpen([])
}, [menuHover, menuCollapsed])
// ** Menu toggler component
const Toggler = () => {
if (!menuCollapsed) {
return (
<Disc
size={20}
data-tour='toggle-icon'
className='text-primary toggle-icon d-none d-xl-block'
onClick={() => setMenuCollapsed(true)}
/>
)
} else {
return (
<Circle
size={20}
data-tour='toggle-icon'
className='text-primary toggle-icon d-none d-xl-block'
onClick={() => setMenuCollapsed(false)}
/>
)
}
}
return (
<div className='navbar-header'>
<ul className='nav navbar-nav flex-row'>
<li className='nav-item mr-auto'>
<NavLink to='/' className='navbar-brand'>
<span className='brand-logo'>
<img src={themeConfig.app.appLogoImage} alt='logo' />
</span>
<h2 className='brand-text mb-0'>{themeConfig.app.appName}</h2>
</NavLink>
</li>
<li className='nav-item nav-toggle'>
<div className='nav-link modern-nav-toggle cursor-pointer'>
<Toggler />
<X onClick={() => setMenuVisibility(false)} className='toggle-icon icon-x d-block d-xl-none' size={20} />
</div>
</li>
</ul>
</div>
)
}
export default VerticalMenuHeader

142
src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuGroup.js

@ -0,0 +1,142 @@
// ** React Imports
import { Link, useLocation } from 'react-router-dom'
// ** Third Party Components
import classnames from 'classnames'
import { Collapse, Badge } from 'reactstrap'
// ** Vertical Menu Items Component
import VerticalNavMenuItems from './VerticalNavMenuItems'
// ** Utils
import { isNavGroupActive, getAllParents } from '@layouts/utils'
const VerticalNavMenuGroup = ({
item,
groupActive,
setGroupActive,
activeItem,
setActiveItem,
groupOpen,
setGroupOpen,
parentItem,
menuCollapsed,
menuHover,
routerProps,
currentActiveItem
}) => {
// ** Current Val
const currentURL = useLocation().pathname
// ** Toggles Open Group
const toggleOpenGroup = (item, parentItem) => {
let openArr = groupOpen
let allParents
if (parentItem) {
allParents = getAllParents(parentItem, 'id')
allParents.pop()
}
// ** If user clicked on menu group inside already opened group i.g. when user click on blog group inside pages group
if (groupOpen && allParents && groupOpen[0] === allParents[0]) {
groupOpen.includes(item) ? openArr.splice(openArr.indexOf(item), 1) : openArr.push(item)
} else {
openArr = []
if (!groupOpen.includes(item)) {
openArr.push(item)
}
}
// ** Set Open Group
setGroupOpen([...openArr])
}
// ** Toggle Active Group
const toggleActiveGroup = (item, parentItem) => {
let activeArr = groupActive
let allParents
if (parentItem) {
allParents = getAllParents(parentItem, 'id')
activeArr = allParents
} else {
activeArr.includes(item) ? activeArr.splice(activeArr.indexOf(item), 1) : activeArr.push(item)
}
// ** Set open group removing any activegroup item present in opengroup state
const openArr = groupOpen.filter(val => !activeArr.includes(val))
setGroupOpen([...openArr])
// ** Set Active Group
setGroupActive([...activeArr])
}
// ** On Group Item Click
const onCollapseClick = (e, item) => {
if ((groupActive && groupActive.includes(item.id)) || isNavGroupActive(item.children, currentURL, routerProps)) {
toggleActiveGroup(item.id)
} else {
toggleOpenGroup(item.id, parentItem)
}
e.preventDefault()
}
// ** Returns condition to add open class
const openClassCondition = id => {
if ((menuCollapsed && menuHover) || menuCollapsed === false) {
if (groupActive.includes(id) || groupOpen.includes(item.id)) {
return true
}
} else if (groupActive.includes(id) && menuCollapsed && menuHover === false) {
return false
} else {
return null
}
}
return (
<li
className={classnames('nav-item has-sub', {
open: openClassCondition(item.id),
'menu-collapsed-open': groupActive.includes(item.id),
'sidebar-group-active': groupActive.includes(item.id) || groupOpen.includes(item.id)
})}
>
<Link className='d-flex align-items-center' to='/' onClick={e => onCollapseClick(e, item)}>
{item.icon}
<span className='menu-title text-truncate'>{item.title}</span>
{item.badge && item.badgeText ? (
<Badge className='ml-auto mr-1' color={item.badge} pill>
{item.badgeText}
</Badge>
) : null}
</Link>
{/* Render Child Recursively Through VerticalNavMenuItems Component */}
<ul className='menu-content'>
<Collapse isOpen={(groupActive && groupActive.includes(item.id)) || (groupOpen && groupOpen.includes(item.id))}>
<VerticalNavMenuItems
items={item.children}
groupActive={groupActive}
setGroupActive={setGroupActive}
groupOpen={groupOpen}
setGroupOpen={setGroupOpen}
toggleActiveGroup={toggleActiveGroup}
parentItem={item}
menuCollapsed={menuCollapsed}
menuHover={menuHover}
routerProps={routerProps}
currentActiveItem={currentActiveItem}
activeItem={activeItem}
setActiveItem={setActiveItem}
/>
</Collapse>
</ul>
</li>
)
}
export default VerticalNavMenuGroup

27
src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuItems.js

@ -0,0 +1,27 @@
// ** Vertical Menu Components
import VerticalNavMenuLink from './VerticalNavMenuLink'
import VerticalNavMenuGroup from './VerticalNavMenuGroup'
import VerticalNavMenuSectionHeader from './VerticalNavMenuSectionHeader'
// ** Utils
import { resolveVerticalNavMenuItemComponent as resolveNavItemComponent } from '@layouts/utils'
const VerticalMenuNavItems = props => {
// ** Components Object
const Components = {
VerticalNavMenuSectionHeader,
VerticalNavMenuGroup,
VerticalNavMenuLink
}
// ** Render Nav Menu Items
const RenderNavItems = props.items.map((item, index) => {
const TagName = Components[resolveNavItemComponent(item)]
return <TagName key={item.id || item.header} item={item} {...props} />
})
return RenderNavItems
}
export default VerticalMenuNavItems

129
src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuLink.js

@ -0,0 +1,129 @@
// ** React Imports
// ** Utils
import { getAllParents, search } from '@layouts/utils';
import analysis from '@src/navigation/analysis';
//추후 서버 통신으로 데이터 받아와야 함.
import basis from '@src/navigation/basis';
import statics from '@src/navigation/statics';
import system from '@src/navigation/system';
import classnames from 'classnames';
import { useEffect } from 'react';
import { matchPath, NavLink, useLocation } from 'react-router-dom';
// ** Third Party Components
import { Badge } from 'reactstrap';
const VerticalNavMenuLink = ({
item,
groupActive,
setGroupActive,
activeItem,
setActiveItem,
groupOpen,
setGroupOpen,
toggleActiveGroup,
parentItem,
routerProps,
currentActiveItem
}) => {
// ** Conditional Link Tag, if item has newTab or externalLink props use <a> tag else use NavLink
const LinkTag = item.externalLink ? 'a' : NavLink;
// ** URL Vars
const location = useLocation();
const currentURL = location.pathname;
const naviData = [...basis, ...statics, ...system, ...analysis];
// console.log(naviData);
// ** To match path
const match = matchPath(currentURL, {
path: `${item.navLink}/:param`,
exact: true,
strict: false
});
// ** Search for current item parents
const searchParents = (naviData, currentURL) => {
const parents = search(naviData, currentURL, routerProps); // Search for parent object
const allParents = getAllParents(parents, 'id'); // Parents Object to Parents Array
return allParents;
};
// ** URL Vars
const resetActiveGroup = navLink => {
const parents = search(naviData, navLink, match);
toggleActiveGroup(item.id, parents);
};
// ** Reset Active & Open Group Arrays
const resetActiveAndOpenGroups = () => {
setGroupActive([]);
setGroupOpen([]);
};
// ** Checks url & updates active item
useEffect(() => {
if (currentActiveItem !== null) {
setActiveItem(currentActiveItem);
const arr = searchParents(naviData, currentURL);
setGroupActive([...arr]);
}
}, [location]);
return (
<li
className={classnames({
'nav-item': !item.children,
disabled: item.disabled,
active: item.navLink === activeItem
})}
>
<LinkTag
className='d-flex align-items-center'
target={item.newTab ? '_blank' : undefined}
/*eslint-disable */
{...(item.externalLink === true
? {
href: item.navLink || '/'
}
: {
to: item.navLink || '/',
isActive: (match, location) => {
if (!match) {
return false;
}
if (
match.url &&
match.url !== '' &&
match.url === item.navLink
) {
currentActiveItem = item.navLink;
}
}
})}
/*eslint-enable */
onClick={e => {
if (!item.navLink.length) {
e.preventDefault();
}
parentItem
? resetActiveGroup(item.navLink)
: resetActiveAndOpenGroups();
}}
>
{item.icon}
<span className='menu-item text-truncate'>{item.title}</span>
{item.badge && item.badgeText ? (
<Badge className='ml-auto mr-1' color={item.badge} pill>
{item.badgeText}
</Badge>
) : null}
</LinkTag>
</li>
);
};
export default VerticalNavMenuLink;

13
src/@core/layouts/components/menu/vertical-menu/VerticalNavMenuSectionHeader.js

@ -0,0 +1,13 @@
// ** Third Party Components
import { MoreHorizontal } from 'react-feather'
const VerticalNavMenuSectionHeader = ({ item, index }) => {
return (
<li className='navigation-header'>
<span>{item.header}</span>
<MoreHorizontal className='feather-more-horizontal' />
</li>
)
}
export default VerticalNavMenuSectionHeader

131
src/@core/layouts/components/menu/vertical-menu/index.js

@ -0,0 +1,131 @@
// ** React Imports
import { Fragment, useState, useRef, useEffect } from 'react';
// ** Vertical Menu Items Array
import navigation from '@src/navigation/vertical';
//추후 서버 통신으로 데이터 받아와야 함.
import basis from '@src/navigation/basis';
import statics from '@src/navigation/statics';
import system from '@src/navigation/system';
import analysis from '@src/navigation/analysis';
// ** Third Party Components
import classnames from 'classnames';
import PerfectScrollbar from 'react-perfect-scrollbar';
// ** Vertical Menu Components
import VerticalMenuHeader from './VerticalMenuHeader';
import VerticalNavMenuItems from './VerticalNavMenuItems';
import { useSelector } from 'react-redux';
const Sidebar = props => {
const { topMenuCd } = useSelector(state => state.menuState);
useEffect(() => {
console.log('>>>>>>>>>>>>>>', topMenuCd);
navData();
}, [topMenuCd]);
const navData = () => {
if (topMenuCd === 'basis') {
return basis;
} else if (topMenuCd === 'system') {
return system;
} else if (topMenuCd === 'statics') {
return statics;
} else if (topMenuCd === 'analysis') {
return analysis;
}
};
// ** Props
const { menuCollapsed, routerProps, menu, currentActiveItem, skin } = props;
// ** States
const [groupOpen, setGroupOpen] = useState([]);
const [groupActive, setGroupActive] = useState([]);
const [activeItem, setActiveItem] = useState(null);
// ** Menu Hover State
const [menuHover, setMenuHover] = useState(false);
// ** Ref
const shadowRef = useRef(null);
// ** Function to handle Mouse Enter
const onMouseEnter = () => {
if (menuCollapsed) {
setMenuHover(true);
}
};
// ** Scroll Menu
const scrollMenu = container => {
if (shadowRef && container.scrollTop > 0) {
if (!shadowRef.current.classList.contains('d-block')) {
shadowRef.current.classList.add('d-block');
}
} else {
if (shadowRef.current.classList.contains('d-block')) {
shadowRef.current.classList.remove('d-block');
}
}
};
return (
<Fragment>
<div
className={classnames(
'main-menu menu-fixed menu-accordion menu-shadow',
{
expanded: menuHover || menuCollapsed === false,
'menu-light': skin !== 'semi-dark' && skin !== 'dark',
'menu-dark': skin === 'semi-dark' || skin === 'dark'
}
)}
onMouseEnter={onMouseEnter}
onMouseLeave={() => setMenuHover(false)}
>
{menu ? (
menu
) : (
<Fragment>
{/* Vertical Menu Header */}
<VerticalMenuHeader
setGroupOpen={setGroupOpen}
menuHover={menuHover}
{...props}
/>
{/* Vertical Menu Header Shadow */}
<div className='shadow-bottom' ref={shadowRef}></div>
{/* Perfect Scrollbar */}
<PerfectScrollbar
className='main-menu-content pal-main-menu-content'
options={{ wheelPropagation: false }}
onScrollY={container => scrollMenu(container)}
>
<ul className='navigation navigation-main pal-navigation-main'>
<VerticalNavMenuItems
items={navData()}
groupActive={groupActive}
setGroupActive={setGroupActive}
activeItem={activeItem}
setActiveItem={setActiveItem}
groupOpen={groupOpen}
setGroupOpen={setGroupOpen}
routerProps={routerProps}
menuCollapsed={menuCollapsed}
menuHover={menuHover}
currentActiveItem={currentActiveItem}
/>
</ul>
</PerfectScrollbar>
</Fragment>
)}
</div>
</Fragment>
);
};
export default Sidebar;

117
src/@core/layouts/components/navbar/NavbarUser.js

@ -0,0 +1,117 @@
// ** Dropdowns Imports
import { Fragment } from 'react';
// ** Third Party Components
import { Menu, Moon, Sun } from 'react-feather';
import { useDispatch, useSelector } from 'react-redux';
import { Nav, NavItem, NavLink } from 'reactstrap';
import * as Actions from '../../../../modules/menu/actions/menuAction';
import UserDropdown from './UserDropdown';
const NavbarUser = props => {
// ** Props
const { skin, setSkin, setMenuVisibility } = props;
const dispatch = useDispatch();
const { topMenuCd } = useSelector(state => state.menuState);
// ** Function to toggle Theme (Light/Dark)
const ThemeToggler = () => {
if (skin === 'dark') {
return <Sun className='ficon' onClick={() => setSkin('light')} />;
} else {
return <Moon className='ficon' onClick={() => setSkin('dark')} />;
}
};
const handlerTopMenu = type => {
dispatch(Actions.dispatchTopMenu(type));
};
return (
<Fragment>
<ul className='navbar-nav d-xl-none d-flex align-items-center'>
<NavItem className='mobile-menu mr-auto'>
<NavLink
className='nav-menu-main menu-toggle hidden-xs is-active'
onClick={() => setMenuVisibility(true)}
>
<Menu className='ficon' />
</NavLink>
</NavItem>
</ul>
<Nav tabs className='header-main-menu'>
<NavItem>
<NavLink
onClick={e => handlerTopMenu('basis')}
active={topMenuCd === 'basis'}
// onClick={() => {
// toggle('1')
// }}
>
기초 정보 관리
</NavLink>
</NavItem>
{/* <NavItem>
<NavLink
onClick={e => handlerTopMenu('system')}
active={topMenuCd === 'system'}
// onClick={() => {
// toggle('1')
// }}
>
시스템 관리
</NavLink>
</NavItem> */}
{/* <NavItem>
<NavLink
onClick={e => handlerTopMenu('statics')}
active={topMenuCd === 'statics'}
>
통계
</NavLink>
</NavItem> */}
<NavItem>
<NavLink
onClick={e => handlerTopMenu('analysis')}
active={topMenuCd === 'analysis'}
// onClick={() => {
// toggle('3')
// }}
>
비행 이력 시스템
</NavLink>
</NavItem>
<NavItem>
<NavLink
onClick={() => window.open('/control', '_blank')}
// active={active === '2'}
// onClick={() => {
// toggle('2')
// }}
>
드론 관제 시스템
</NavLink>
</NavItem>
</Nav>
{/* <div className='bookmark-wrapper d-flex align-items-center'>
<NavItem className='d-none d-lg-block'>
<NavLink className='nav-link-style'>
<ThemeToggler />
</NavLink>
</NavItem>
</div> */}
{/* <div className='bookmark-wrapper d-flex align-items-center'>
<NavItem className='d-none d-lg-block'>
<NavLink className='nav-link-style'>
<ThemeToggler />
</NavLink>
</NavItem>
</div> */}
<ul className='nav navbar-nav align-items-center ml-auto'>
<UserDropdown />
</ul>
</Fragment>
);
};
export default NavbarUser;

103
src/@core/layouts/components/navbar/UserDropdown.js

@ -0,0 +1,103 @@
// ** React Imports
// ** Custom Components
import Avatar from '@components/avatar';
// ** Default Avatar Image
import defaultAvatar from '@src/assets/images/portrait/small/avatar-s-11.jpg';
// ** Utils
import { isUserLoggedIn } from '@utils';
import { useEffect, useState } from 'react';
import { Power, User } from 'react-feather';
// ** Store & Actions
import { useDispatch, useSelector } from 'react-redux';
import { Link, useHistory } from 'react-router-dom';
// import { handleLogout } from '@store/actions/auth';
// ** Third Party Components
import {
DropdownItem,
DropdownMenu,
DropdownToggle,
UncontrolledDropdown
} from 'reactstrap';
import * as Actions from '../../../../modules/account/login/actions/authAction';
const UserDropdown = () => {
// ** Store Vars
const dispatch = useDispatch();
const history = useHistory();
const { isLogin, user } = useSelector(state => state.authState);
const handelrLogout = async () => {
dispatch(Actions.logout.request());
};
// useEffect(() => {
// console.log('[ISLOGIN :::::: ] ', isLogin);
// if (isLogin === undefined) {
// return;
// }
// if (!isLogin) {
// history.push('/account/login');
// // window.location.href = '/';
// }
// }, [isLogin]);
// ** State
const [userData, setUserData] = useState(null);
//** ComponentDidMount
useEffect(() => {
if (isUserLoggedIn() !== null) {
setUserData(JSON.parse(localStorage.getItem('userData')));
}
}, []);
//** Vars
const userAvatar = (userData && userData.avatar) || defaultAvatar;
return (
<UncontrolledDropdown tag='li' className='dropdown-user nav-item'>
<DropdownToggle
href='/'
tag='a'
className='nav-link dropdown-user-link'
onClick={e => e.preventDefault()}
>
<div className='user-nav d-sm-flex d-none'>
<span className='user-name font-weight-bold'>{user?.memberName}</span>
<span className='user-status'>{user?.authId}</span>
</div>
<Avatar img={userAvatar} imgHeight='40' imgWidth='40' status='online' />
</DropdownToggle>
<DropdownMenu right>
<DropdownItem tag={Link} to='#' onClick={e => e.preventDefault()}>
<User size={14} className='mr-75' />
<span className='align-middle'>Profile</span>
</DropdownItem>
{/* <DropdownItem tag={Link} to='#' onClick={e => e.preventDefault()}>
<Mail size={14} className='mr-75' />
<span className='align-middle'>Inbox</span>
</DropdownItem>
<DropdownItem tag={Link} to='#' onClick={e => e.preventDefault()}>
<CheckSquare size={14} className='mr-75' />
<span className='align-middle'>Tasks</span>
</DropdownItem>
<DropdownItem tag={Link} to='#' onClick={e => e.preventDefault()}>
<MessageSquare size={14} className='mr-75' />
<span className='align-middle'>Chats</span>
</DropdownItem> */}
<DropdownItem
tag={Link}
// to='/login'
to='#'
onClick={handelrLogout}
>
<Power size={14} className='mr-75' />
<span className='align-middle'>Logout</span>
</DropdownItem>
</DropdownMenu>
</UncontrolledDropdown>
);
};
export default UserDropdown;

18
src/@core/layouts/components/navbar/index.js

@ -0,0 +1,18 @@
// ** React Imports
import { Fragment } from 'react'
// ** Custom Components
import NavbarUser from './NavbarUser'
const ThemeNavbar = props => {
// ** Props
const { skin, setSkin, setMenuVisibility } = props
return (
<Fragment>
<NavbarUser skin={skin} setSkin={setSkin} setMenuVisibility={setMenuVisibility} />
</Fragment>
)
}
export default ThemeNavbar

159
src/@core/layouts/utils.js

@ -0,0 +1,159 @@
// ** React Imports
import { useContext } from 'react'
import { AbilityContext } from '@src/utility/context/Can'
/**
* Return which component to render based on it's data/context
* @param {Object} item nav menu item
*/
export const resolveVerticalNavMenuItemComponent = item => {
if (item.header) return 'VerticalNavMenuSectionHeader'
if (item.children) return 'VerticalNavMenuGroup'
return 'VerticalNavMenuLink'
}
/**
* Return which component to render based on it's data/context
* @param {Object} item nav menu item
*/
export const resolveHorizontalNavMenuItemComponent = item => {
if (item.children) return 'HorizontalNavMenuGroup'
return 'HorizontalNavMenuLink'
}
/**
* Check if nav-link is active
* @param {Object} link nav-link object
*/
// export const isNavLinkActive = (link, currentURL, match) => {
// // return currentURL === link || (URLParams && Object.keys(URLParams).length && currentURLFilter === item.navLink)
// const getFirstObjProp = obj => obj[Object.keys(obj)[0]]
// return (
// currentURL === link ||
// (match !== null && match !== undefined && match.url === `${link}/${getFirstObjProp(match.params)}`)
// )
// }
export const isNavLinkActive = (link, currentURL, routerProps) => {
return (
currentURL === link ||
(routerProps && routerProps.meta && routerProps.meta.navLink && routerProps.meta.navLink === link)
)
// return currentURL === link
}
/**
* Check if nav group is
* @param {Array} children Group children
*/
// export const isNavGroupActive = (children, currentURL, match) => {
// return children.some(child => {
// // If child have children => It's group => Go deeper(recursive)
// if (child.children) {
// return isNavGroupActive(child.children, currentURL, match)
// }
// // else it's link => Check for matched Route
// return isNavLinkActive(child.navLink, currentURL, match)
// })
// }
export const isNavGroupActive = (children, currentURL, routerProps) => {
return children.some(child => {
// If child have children => It's group => Go deeper(recursive)
if (child.children) {
return isNavGroupActive(child.children, currentURL, routerProps)
}
// else it's link => Check for matched Route
return isNavLinkActive(child.navLink, currentURL, routerProps)
})
}
/**
* Search for parent object
* @param {Array} navigation Group children
* @param {string} currentURL current URL
*/
// export const search = (navigation, currentURL, match) => {
// let result
// navigation.some(child => {
// let children
// // If child have children => It's group => Go deeper(recursive)
// if (child.children && (children = search(child.children, currentURL, match))) {
// return (result = {
// id: child.id,
// children
// })
// }
// // else it's link => Check for matched Route
// if (isNavLinkActive(child.navLink, currentURL, match)) {
// return (result = {
// id: child.id
// })
// }
// })
// return result
// }
export const search = (navigation, currentURL, routerProps) => {
let result
navigation.some(child => {
let children
// If child have children => It's group => Go deeper(recursive)
if (child.children && (children = search(child.children, currentURL, routerProps))) {
return (result = {
id: child.id,
children
})
}
// else it's link => Check for matched Route
if (isNavLinkActive(child.navLink, currentURL, routerProps)) {
return (result = {
id: child.id
})
}
})
return result
}
/**
* Loop through nested object
* @param {object} obj nested object
*/
export const getAllParents = (obj, match) => {
const res = []
const recurse = (obj, current) => {
for (const key in obj) {
const value = obj[key]
if (value !== undefined) {
if (value && typeof value === 'object') {
recurse(value, key)
} else {
if (key === match) {
res.push(value)
}
}
}
}
}
recurse(obj)
return res
}
export const canViewMenuGroup = item => {
const ability = useContext(AbilityContext)
// ! This same logic is used in canViewHorizontalNavMenuGroup and canViewHorizontalNavMenuHeaderGroup. So make sure to update logic in them as well
const hasAnyVisibleChild = item.children && item.children.some(i => ability.can(i.action, i.resource))
// ** If resource and action is defined in item => Return based on children visibility (Hide group if no child is visible)
// ** Else check for ability using provided resource and action along with checking if has any visible child
if (!(item.action && item.resource)) {
return hasAnyVisibleChild
}
return ability.can(item.action, item.resource) && hasAnyVisibleChild
}
export const canViewMenuItem = item => {
const ability = useContext(AbilityContext)
return ability.can(item.action, item.resource)
}

47
src/@core/scss/base/bootstrap-extended.scss vendored

@ -0,0 +1,47 @@
// ================================================================================================
// File Name: bootstrap-extended.scss
// Description: List of modified Bootstrap files. This is an actual copy of bootstrap.scss
// excluding files that have not been modified.
// ----------------------------------------------------------------------------------------------
// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
// Author: PIXINVENT
// Author URL: http://www.themeforest.net/user/pixinvent
// ================================================================================================
@import 'bootstrap-extended/include'; // Bootstrap includes
@import 'components/include'; // Components includes
// Custom template mixins
@import 'core/mixins/alert'; // Template custom mixins
// Core CSS
@import 'bootstrap-extended/reboot';
@import 'bootstrap-extended/helper';
@import 'bootstrap-extended/type';
@import 'bootstrap-extended/code';
@import 'bootstrap-extended/tables';
@import 'bootstrap-extended/forms';
@import 'bootstrap-extended/buttons';
@import 'bootstrap-extended/button-group';
// Components
@import 'bootstrap-extended/dropdown';
@import 'bootstrap-extended/navbar';
@import 'bootstrap-extended/card';
@import 'bootstrap-extended/breadcrumb';
@import 'bootstrap-extended/badge';
@import 'bootstrap-extended/nav';
@import 'bootstrap-extended/alert';
@import 'bootstrap-extended/media';
@import 'bootstrap-extended/progress';
@import 'bootstrap-extended/list-group';
@import 'bootstrap-extended/toast';
@import 'bootstrap-extended/collapse';
@import 'bootstrap-extended/pagination';
// Components w/ JavaScript
@import 'bootstrap-extended/modal';
@import 'bootstrap-extended/popover';
// Utility classes
@import 'bootstrap-extended/utilities';

56
src/@core/scss/base/bootstrap-extended/_alert.scss vendored

@ -0,0 +1,56 @@
// Alerts
.alert {
font-weight: 500;
border: none;
padding: 0;
// close
&.alert-dismissible {
.close {
padding: 0.5rem $alert-padding-x 0.5rem $alert-padding-x;
background-color: transparent !important;
box-shadow: none !important;
}
.alert-body {
padding: $alert-padding-y ($alert-padding-x * 2) $alert-padding-y $alert-padding-x;
}
}
.close:focus {
outline: 0;
}
.alert-link:hover {
text-decoration: underline;
}
// For Alert Content
p {
font-weight: 500;
padding: 2px 0;
margin-bottom: 0;
vertical-align: middle;
}
// For alert heading
.alert-heading {
font-weight: 600;
font-size: $font-size-base;
padding: $alert-padding-y $alert-padding-x;
margin-bottom: 0;
}
.alert-body {
padding: $alert-padding-y $alert-padding-x;
i,
svg {
position: relative;
top: -2px;
}
}
// For dark alert
&.alert-dark {
.alert-heading {
@include alert-heading-bs($dark);
}
}
}

90
src/@core/scss/base/bootstrap-extended/_badge.scss vendored

@ -0,0 +1,90 @@
// Badge
.badge {
color: $white;
&[class*='badge-'] {
[class*='icon-'] {
line-height: 1;
}
a {
color: $white;
}
// badge dropdown alignment
.dropdown-toggle,
&.dropdown-toggle {
span,
i,
svg {
vertical-align: text-top;
}
i,
svg {
padding-left: 0.2rem;
}
&::after {
position: relative;
top: 0;
left: 0;
font-size: 1rem;
}
}
.dropdown-menu {
a {
color: $dropdown-color;
}
}
}
i,
svg {
height: 12px;
width: 11px;
font-size: 12px;
stroke-width: 3;
vertical-align: top;
}
// square badge
&.badge-square {
border-radius: 0;
}
// badge-up
// to align badge over any element
&.badge-up {
position: absolute;
top: -11px;
right: -9px;
min-width: 1.429rem;
min-height: 1.429rem;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.786rem;
line-height: 0.786;
padding-left: 0.25rem;
padding-right: 0.25rem;
&.badge-sm {
top: -0.5rem;
right: -0.5rem;
}
}
}
// For fullscreen search
.badge-icon {
i,
svg {
font-size: 100%;
margin-right: 5px;
}
}
// badge dropup pointer
.dropup {
.badge {
cursor: pointer;
}
}

76
src/@core/scss/base/bootstrap-extended/_breadcrumb.scss vendored

@ -0,0 +1,76 @@
.breadcrumb {
&:not([class*='breadcrumb-']) {
.breadcrumb-item + .breadcrumb-item {
&:before {
content: ' ';
background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $body-color), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
color: $body-color;
margin-right: $breadcrumb-item-padding;
background-size: 14px;
}
}
}
.breadcrumb-item + .breadcrumb-item {
&:before {
height: 20px;
}
}
}
/* Component Specific */
.breadcrumb-slash {
&.breadcrumb {
.breadcrumb-item + .breadcrumb-item:before {
content: '/';
}
}
}
.breadcrumb-dots {
&.breadcrumb {
.breadcrumb-item + .breadcrumb-item:before {
content: '.';
position: relative;
top: -4px;
}
}
}
.breadcrumb-dashes {
&.breadcrumb {
.breadcrumb-item + .breadcrumb-item:before {
content: '-';
}
}
}
.breadcrumb-pipes {
&.breadcrumb {
.breadcrumb-item + .breadcrumb-item:before {
content: '|';
}
}
}
.breadcrumb-chevron {
&.breadcrumb {
.breadcrumb-item + .breadcrumb-item:before {
content: ' ';
background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $body-color), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
color: $body-color;
margin-right: $breadcrumb-item-padding;
background-size: 14px;
}
}
}
@media (max-width: 648px) {
.content-header .breadcrumb {
display: none;
}
.breadcrumbs-top {
.content-header-title {
display: contents !important;
}
}
}

59
src/@core/scss/base/bootstrap-extended/_button-group.scss vendored

@ -0,0 +1,59 @@
//
// Split button dropdowns
//
.dropdown-toggle-split {
padding-right: $btn-padding-x / 1.9;
padding-left: $btn-padding-x / 1.9;
}
.btn-lg + .dropdown-toggle-split,
.btn-group-lg > .btn + .dropdown-toggle-split {
padding-right: $input-btn-padding-x-lg / 1.75;
padding-left: $input-btn-padding-x-lg / 1.75;
}
.btn-sm + .dropdown-toggle-split,
.btn-group-sm > .btn + .dropdown-toggle-split {
padding-right: $input-btn-padding-x-sm / 1.9;
padding-left: $input-btn-padding-x-sm / 1.9;
}
// button group border
.btn-group {
[class*='btn-']:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']) {
border-left-color: rgba($black, 0.08) !important;
border-right-color: rgba($black, 0.08) !important;
}
}
// remove first btn group border left
.btn-group
> .btn:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']):first-child,
.btn-group
> .btn:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']):first-of-type {
border-left-color: transparent !important;
}
// remove last btn group border right
.btn-group
> .btn:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']):last-child,
.btn-group
> .btn:not([class*='btn-outline-']):not([class*='btn-flat-']):not([class*='btn-gradient-']):not([class*='btn-relief-']):last-of-type {
border-right-color: transparent !important;
}
// toggle button
.btn-group-toggle {
[class*='btn-outline-'] {
&:not(:last-child) {
border-right-width: 0 !important;
}
}
:not([class*='btn-outline-']) {
&.active,
&:active {
box-shadow: inset $box-shadow;
}
}
}

67
src/@core/scss/base/bootstrap-extended/_buttons.scss vendored

@ -0,0 +1,67 @@
// var for box shadow of gradient buttons
// Buttons
.btn {
box-shadow: none;
font-weight: 500;
// gradient button on hover transition
&[class*='bg-gradient-'] {
transition: all 0.2s ease;
&:hover {
transform: translateY(-2px);
}
}
// Icon button padding
&.btn-icon {
padding: 0.715rem 0.736rem;
}
&.btn-sm {
&.btn-icon {
padding: 0.5rem;
line-height: 0.5;
}
}
&.btn-lg {
&.btn-icon {
padding: 1rem;
line-height: 0.75;
}
}
&:focus,
&.focus,
&:active,
&.active {
outline: none;
box-shadow: none;
}
&:not(:disabled):not(.disabled):active:focus,
&:not(:disabled):not(.disabled).active:focus {
box-shadow: none !important;
}
// feather icons inside btn
.feather {
vertical-align: bottom;
}
}
// For Waves Input Padding
.btn.waves-input-wrapper {
padding: 0;
}
@include media-breakpoint-down(sm) {
.btn-sm-block {
display: block;
width: 100%;
}
}
// Remove cursor-pointer from button if button is disabled
// * setting it to inherit will auto adept cursor
.waves-effect {
cursor: inherit;
}

514
src/@core/scss/base/bootstrap-extended/_card.scss vendored

@ -0,0 +1,514 @@
.card {
border: none;
margin-bottom: $content-padding;
box-shadow: $box-shadow;
transition: all 0.3s ease-in-out, background 0s, color 0s, border-color 0s;
.card {
box-shadow: none !important;
}
.card-title {
font-weight: 500;
font-size: 1.285rem;
margin-bottom: 1.53rem; // Considering sub-title minus margin
}
.card-bordered {
border: $card-border-width solid $card-border-color;
}
.card-img {
object-fit: cover;
}
.card-img-overlay {
border-radius: $card-border-radius;
}
//fullscreen card
&.card-fullscreen {
display: block;
z-index: 9999;
position: fixed;
width: 100% !important;
height: 100% !important;
top: 0;
right: 0;
left: 0;
bottom: 0;
overflow: auto;
}
.card-body[class*='border-bottom-'] {
border-bottom-width: 2px !important;
}
.card-img-overlay {
&.bg-overlay {
background: rgba($black, 0.45);
}
.text-muted {
color: $gray-800 !important;
}
}
&.card-minimal {
border: none;
box-shadow: none;
}
.card-header {
position: relative;
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: space-between;
border-bottom: none;
padding: 1.5rem;
background-color: transparent;
.card-title {
margin-bottom: 0;
}
.heading-elements {
position: relative;
top: -1px;
li:not(:first-child) a {
margin-left: 0.75rem;
}
a {
&.btn {
padding-top: 6px;
padding-bottom: 6px;
}
i,
svg {
height: 1rem;
width: 1rem;
font-size: 1rem;
}
&[data-action='collapse'] {
i,
svg {
transition: all 0.25s ease-out;
display: inline-block;
}
&.rotate {
i,
svg {
transform: rotate(-180deg);
}
}
}
}
}
& + .card-content > .card-body:first-of-type,
& + .card-body {
padding-top: 0px;
}
}
.card-footer {
border-top: 1px solid $gray-300;
background-color: transparent;
}
}
// Card Column
.card-columns {
.card {
margin-bottom: $spacer * 2.2;
}
}
.card-group,
.card-deck {
margin-bottom: 0.75rem;
}
.card-head-inverse {
.heading-elements {
i,
svg {
color: $white;
}
}
color: $white;
}
.card-transparent {
background-color: transparent;
}
.text-white {
.card-img-overlay {
.text-muted {
color: $white !important;
}
}
code {
background-color: rgba($white, 1);
}
.heading-elements {
i,
svg {
color: $white;
}
}
}
// overlay-img-card
.overlay-img-card {
.card-img-overlay,
img {
max-height: 34.64rem;
}
}
// IE Specific CSS
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
// img-fluid class
.card-body,
.card-content {
min-height: 1px;
}
}
//--------------- Advance Cards ---------------
//---------------------------------------------
// Congratulations Card
.card-congratulations {
background: linear-gradient(118deg, rgba($primary, 1), rgba($primary, 0.7));
color: $white;
// image on left
.congratulations-img-left {
width: 200px;
position: absolute;
top: 0;
left: 0;
@include media-breakpoint-down(xs) {
width: 140px;
}
}
// image on right
.congratulations-img-right {
width: 175px;
position: absolute;
top: 0;
right: 0;
@include media-breakpoint-down(xs) {
width: 140px;
}
}
.avatar {
margin-bottom: 2rem;
}
}
// congratulation medal card
.congratulation-medal {
position: absolute;
top: 0;
right: 37px;
}
// Deposits Card
.card-deposits {
.deposits-divider {
margin-top: 1.8rem;
margin-bottom: 1.4rem;
}
}
// Employee Task Card
.card-employee-task {
.employee-task {
&:not(:last-child) {
margin-bottom: 1.5rem;
}
}
}
// Developer Meetup Card
.card-developer-meetup {
.meetup-img-wrapper {
background-color: rgba($primary, 0.1);
}
.meetup-header {
margin-bottom: 2rem;
.meetup-day {
text-align: center;
border-right: 1px solid $custom-control-border-color;
padding-right: 1.3rem;
margin-right: 1.3rem;
}
}
.media {
.avatar .avatar-content {
width: 34px;
height: 34px;
}
& + .media {
margin-top: 1.2rem;
}
}
.avatar-group {
margin-top: 2rem;
}
}
// Profile Card
.card-profile {
text-align: center;
.card-body {
position: relative;
padding: 5rem 2.3rem $card-spacer-y 2.3rem;
.profile-image-wrapper {
display: flex;
justify-content: center;
.profile-image {
position: absolute;
top: -4rem;
padding: 0.5rem;
border-radius: 50%;
background-color: $white;
box-shadow: 0 0 8px 0 rgba($black, 0.14);
margin-bottom: 1.15rem;
img {
width: 100px;
height: 100px;
}
}
}
.profile-badge {
margin-top: 0.8rem;
margin-bottom: 0.8rem;
}
}
}
// Apply Job Card
.card-apply-job {
.apply-job-package {
padding: 1.2rem;
margin-bottom: 1.15rem;
display: flex;
align-items: center;
justify-content: space-between;
sup {
top: -0.8rem;
}
}
}
// Transaction Card
.card-transaction {
.transaction-item {
display: flex;
align-items: center;
justify-content: space-between;
&:not(:last-child) {
margin-bottom: 1.2rem;
}
.avatar {
margin-right: 1.2rem;
.avatar-content {
width: 42px;
height: 42px;
}
}
.transaction-title {
margin-bottom: 0.2rem;
margin-top: 0.2rem;
}
}
}
// User Timeline Card
.card-user-timeline {
.user-timeline-title-icon {
width: 1.714rem;
height: 1.714rem;
margin-right: 1.3rem;
}
.timeline {
.timeline-item {
&:last-child {
.timeline-event {
min-height: auto;
}
}
&:not(:last-child) {
padding-bottom: 2.3rem;
}
}
}
}
// Business Card
.business-card {
.business-items {
&:not(:last-child) {
margin-bottom: 1.3rem;
}
.business-item {
border: 1px solid $border-color;
border-radius: $border-radius;
padding: 1rem 1rem 1rem 1.3rem;
&:not(:last-child) {
margin-bottom: 0.85rem;
}
}
}
}
// States Card
.card-browser-states {
.browser-states {
margin-top: 2.14rem;
display: flex;
justify-content: space-between;
align-items: center;
}
}
// App Design Card
.card-app-design {
.design-group {
margin-bottom: 2rem;
.avatar:not(:last-child) {
margin-right: 0.6rem;
}
}
.design-planning-wrapper {
display: flex;
align-items: center;
flex-wrap: wrap;
&:not(:last-child) {
margin-bottom: 1.3rem;
}
.design-planning {
padding: 0.5rem;
margin-bottom: 0.7rem;
text-align: center;
background-color: $body-bg;
border-radius: $border-radius;
min-width: 6.4rem;
&:not(:last-child) {
margin-right: 0.7rem;
}
}
}
}
//--------------- Statistics Card ---------------
//------------------------------------------------
.card-statistics {
.card-header {
padding-left: 2.4rem;
}
.statistics-body {
padding: 2rem 2.4rem 2.8rem !important;
.avatar .avatar-content {
width: 48px;
height: 48px;
.avatar-icon {
width: 24px;
height: 24px;
}
}
}
}
//--------------- Analytics Card ---------------
//----------------------------------------------
// Chart-dropdown Button
.chart-dropdown {
.btn {
font-size: 1rem;
font-weight: $font-weight-normal;
&:after {
display: none;
}
}
}
// Revenue Report & Budget Card
.card-revenue-budget {
.revenue-report-wrapper {
padding: 1.286rem 1.5rem;
@include media-breakpoint-up(md) {
border-right: 1px solid $border-color;
}
#revenue-report-chart {
.apexcharts-series {
&[seriesName='Earning'] {
transform: scaleY(0.965);
}
&[seriesName='Expense'] {
transform: scaleY(1.035);
}
}
}
}
.budget-wrapper {
padding: 2rem 3rem;
text-align: center;
@include media-breakpoint-down(sm) {
padding-top: 0;
}
.budget-dropdown {
margin-bottom: 2rem;
}
#budget-chart {
margin-top: 2rem;
margin-bottom: 2rem;
}
}
}
// Earnings Card
.earnings-card {
.apexcharts-canvas .apexcharts-pie {
.apexcharts-datalabel-label {
font-size: 0.8rem;
fill: $body-color !important;
}
.apexcharts-datalabel-value {
fill: $headings-color;
font-size: 1.286rem;
font-weight: 500;
}
}
}
// IE Specific CSS
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
// make icon center in avatar-content
#dashboard-analytics,
#statistics-card {
.avatar {
.avatar-content {
padding: 0 !important;
}
}
}
}

14
src/@core/scss/base/bootstrap-extended/_code.scss vendored

@ -0,0 +1,14 @@
// Inline code
code {
padding: 0.1rem 0.4rem;
font-size: 90%;
color: $code-color;
background-color: $kbd-bg;
@include border-radius($border-radius/2);
}
pre {
background-color: #f7f7f9;
code {
background-color: transparent !important;
}
}

140
src/@core/scss/base/bootstrap-extended/_collapse.scss vendored

@ -0,0 +1,140 @@
// For Collapse And Accordion
// For collapse-title
[class*='collapse-'] {
.collapse-title {
font-weight: 500;
font-size: 1.1rem;
}
.card {
margin-bottom: 0;
&:last-of-type {
margin-bottom: 0;
}
&:not(:last-of-type) {
border-bottom: 1px solid $border-color;
}
.card-header {
cursor: pointer;
padding: 1rem 2.8rem 1rem 1rem;
}
.card-body {
padding: 1rem;
line-height: 1.5;
padding-top: 0.42rem;
}
}
}
// For collapse title
.collapse-title {
color: inherit;
&:hover {
color: inherit;
}
}
// To add a border below collapse/accordion heading
.collapse-default {
.card:first-child {
border-top: 0;
}
.card:last-child {
border-bottom: 0;
}
.card {
border-radius: 0;
}
}
// For Collapse with border
.collapse-border {
.card {
border: 1px solid $border-color;
&:not(:last-of-type) {
border-bottom: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
&:not(:first-of-type) {
border-top-left-radius: 0;
border-top-right-radius: 0;
}
}
}
// For Collapse with shadow
.collapse-shadow {
box-shadow: 0 0px 4px 0 rgba($black, 0.1);
padding: 0.15rem 0.75rem;
border-radius: $border-radius;
.card {
border-radius: 0;
transition: border 0.5s ease-in-out, all 0.3s ease-in-out;
&.open {
border-radius: 0.571rem;
margin: 10px 0;
border: 0;
box-shadow: 0px 0px 8px 0px rgba($black, 0.1) !important;
}
}
.card:first-child {
border-top-left-radius: 0.571rem;
border-top-right-radius: 0.571rem;
}
.card:last-child {
border-bottom-left-radius: 0.571rem;
border-bottom-right-radius: 0.571rem;
}
}
// For Collapse with margin
.collapse-margin {
.card {
margin-top: 0.71rem;
margin-bottom: 0.71rem;
box-shadow: 0 2px 15px 0 rgba($black, 0.05) !important;
border-radius: 0.358rem;
border-bottom: 0 solid transparent !important;
}
.card-header {
border-radius: 0.358rem;
}
}
// Collapse Icon & Animation
.collapse-icon {
.card-header {
position: relative;
}
[data-toggle='collapse'] {
&:after {
position: absolute;
top: 58%;
right: 1rem;
margin-top: -8px;
background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $body-color), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
background-size: 14px;
width: 14px;
height: 11px;
content: '';
transition: all 300ms linear 0s;
}
&:disabled {
&:before {
background-image: url(str-replace(str-replace($chevron-up, 'currentColor', $body-color), '#', '%23'));
}
}
}
[aria-expanded='false'] {
&:after {
transform: rotate(-180deg);
}
}
}

255
src/@core/scss/base/bootstrap-extended/_dropdown.scss vendored

@ -0,0 +1,255 @@
// The dropdown menu
.dropdown {
[class*='btn-outline-'].dropdown-toggle.dropdown-toggle-split {
border-left: 0 !important;
}
// If don't won't dropdown/up arrow
&.no-arrow {
.dropdown-toggle {
&:after {
display: none;
}
i,
svg {
margin-right: 0;
}
}
}
}
// dropdown menu
.dropdown-menu {
// border: 1px solid rgba($black, 0.05); // border opacity has been reduced to make it look same as vue's dropdown border [component page, list view page]
border-radius: $dropdown-border-radius;
transform: scale(1, 0);
box-shadow: $dropdown-box-shadow; // this according to vue version
.dropdown-item {
width: auto;
cursor: pointer;
}
// Dropdown Header
.dropdown-header {
font-weight: 500;
line-height: 1;
}
}
.show {
> .dropdown-menu {
transform: scale(1, 1);
opacity: 1;
display: block;
}
.dropdown-toggle {
&:focus {
box-shadow: none;
}
}
// For DD box shadow on show
.btn {
&.dropdown-toggle {
&:focus {
box-shadow: none;
}
}
}
}
.dropdown-toggle {
// changed icon caret
&::after {
border: none !important;
content: ' ';
background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $white), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
background-size: 16px;
color: $body-color;
width: 14px;
height: 11px;
position: relative;
top: 1px;
right: 0px;
left: 0.714rem;
padding: 0;
margin: 0;
vertical-align: 0;
}
// arrow size according to toggle sizes
&.btn-lg {
&::after {
background-size: 18px;
}
}
&.btn-sm {
&::after {
background-size: 14px;
}
}
&.dropdown-toggle-split {
&:after {
left: 0;
}
}
// hide default arrow to show custom icon DD
&.nav-hide-arrow {
&::after {
display: none;
}
}
// Prevent the focus on the dropdown toggle when closing dropdowns
&:focus {
outline: 0;
}
}
// DropUp
.dropup {
position: relative;
.dropdown-toggle {
// changed icon dropup caret
&::after {
background-image: url(str-replace(str-replace($chevron-up, 'currentColor', $white), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
background-size: 16px;
width: 14px;
height: 11px;
content: '';
vertical-align: 0.05rem;
}
}
.dropdown-menu {
min-width: 8rem;
}
}
// DropLeft
.dropleft {
.dropdown-toggle {
// changed icon dropup caret
&::before {
border: none !important;
background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $white), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
background-size: 16px;
width: 14px;
height: 11px;
content: '';
position: relative;
left: 0;
}
}
.dropdown-menu {
min-width: 8rem;
}
}
// DropRight
.dropright {
.dropdown-toggle {
// changed icon dropup caret
&::after {
border: none !important;
background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $white), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
background-size: 16px;
width: 14px;
height: 11px;
content: '';
}
}
.dropdown-menu {
min-width: 8rem;
}
}
// Dropdown ::before position
.dropdown-menu {
// Dropdown margin according to dropdown position
&[x-placement='bottom-start'],
&[x-placement='bottom-end'] {
margin-top: $dropdown_spacing;
}
&[x-placement='top-start'],
&[x-placement='top-end'] {
margin-bottom: $dropdown_spacing;
}
&[x-placement='right-start'] {
margin-left: $dropdown_spacing;
}
&[x-placement='left-start'] {
margin-right: $dropdown_spacing;
}
}
// Dropdown icon
.dropdown,
.dropup {
&.dropdown-icon-wrapper {
.dropdown-toggle {
&:after {
display: none;
}
}
.dropdown-menu {
min-width: auto;
.dropdown-item {
padding: 0.5rem 1.1rem;
cursor: pointer;
i,
svg {
height: 1.3rem;
width: 1.3rem;
font-size: 1.3rem;
}
}
}
}
}
// Dropdown menu animation for Horizontal menu
.horizontal-menu-wrapper .dropdown-menu,
.header-navbar .dropdown-menu {
animation-duration: 0.3s;
animation-fill-mode: both;
animation-name: slideIn;
}
// Hidden dropdown toggle arrow
.dropdown-toggle.hide-arrow,
.dropdown-toggle-hide-arrow > .dropdown-toggle {
&::before,
&::after {
display: none;
}
}
@keyframes slideIn {
0% {
transform: translateY(1rem);
opacity: 0;
}
100% {
transform: translateY(0rem);
opacity: 1;
}
0% {
transform: translateY(1rem);
opacity: 0;
}
}

570
src/@core/scss/base/bootstrap-extended/_forms.scss vendored

@ -0,0 +1,570 @@
//
// Labels
//
label {
color: $headings-color;
font-size: $small-font-size;
}
// placeholder specific scss
.form-control {
&::placeholder {
transition: all 0.2s ease;
}
&:focus {
&::placeholder {
transform: translate(5px);
transition: all 0.2s ease;
}
&:valid,
&.is-valid {
box-shadow: $input-focus-box-shadow;
}
}
}
.form-control-plaintext {
&:focus {
outline: none;
}
}
.custom-file-label {
line-height: 1.75;
height: $custom-file-height !important;
&:after {
height: 2.56rem;
line-height: 1.75;
}
}
.valid-tooltip,
.invalid-tooltip {
top: 102%;
left: 5px;
}
/***************
* Form Group
***************/
// input group !important for overriding the dark style
.input-group {
&:not(.bootstrap-touchspin):focus-within {
box-shadow: $input-focus-box-shadow;
border-radius: $input-border-radius;
.form-control,
.input-group-text {
border-color: $primary;
box-shadow: none;
&.is-valid {
border-color: $success;
}
&.is-invalid {
border-color: $danger;
}
}
}
&.is-valid {
.input-group-text {
border-color: $success !important;
}
&:not(.bootstrap-touchspin):focus-within {
.input-group-text {
border-color: $success;
}
}
}
&.is-invalid {
.input-group-text {
border-color: $danger !important;
}
&:not(.bootstrap-touchspin):focus-within {
.input-group-text {
border-color: $danger;
}
}
}
&.disabled {
.input-group-text {
background-color: $input-disabled-bg;
}
}
&.round {
.form-control,
.input-group-text,
&:focus-within {
@include border-radius(1.5rem);
}
}
&.square {
.form-control,
.input-group-text,
&:focus-within {
@include border-radius(0);
}
}
&.round,
&.square {
.input-group-prepend {
.input-group-text {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
}
.input-group-append {
.input-group-text {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
}
.form-control {
&:not(:first-child) {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
&:not(:last-child) {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
}
}
&.square {
.form-control,
.input-group-text {
@include border-radius(0);
}
}
}
.input-group-text {
@include transition($input-transition);
}
.input-group-prepend {
.input-group-text {
border-right: 0;
}
}
.input-group-append {
.input-group-text {
border-left: 0;
}
&:not(:last-child) .input-group-text {
border-right: 0;
}
}
// input group merge
.input-group-merge {
.form-control {
&:not(:first-child) {
padding-left: 0;
border-left: 0;
}
&:not(:last-child) {
padding-right: 0;
border-right: 0;
}
&.is-valid {
~ .input-group-append {
.input-group-text {
border-color: $success;
}
}
}
}
.input-group-prepend {
~ .form-control.is-valid {
.input-group-text & {
border-color: $success;
}
}
}
}
// Text area line height
textarea {
&.form-control {
line-height: 1.6rem;
padding: 0.8rem 1rem !important;
}
&.form-control-sm {
padding: 0.4rem 0.857rem !important;
}
&.form-control-lg {
padding: 1rem 1.143rem !important;
}
}
// Used for Card - Check it and remove if not used
.form-actions {
border-top: 1px solid darken($body-bg, 10%);
padding: 20px 0;
margin-top: 20px;
&.filled {
background-color: $body-bg;
}
&.center {
text-align: center;
}
&.right {
text-align: right;
}
&.top {
border-top: 0;
border-bottom: 1px solid darken($body-bg, 10%);
margin-top: 0;
margin-bottom: 20px;
}
@include media-breakpoint-down(sm) {
.buttons-group {
float: left !important;
margin-bottom: 10px;
}
}
}
// Form-horizontal layout
.form-horizontal {
.form-group {
@include media-breakpoint-up(sm) {
.label-control {
text-align: right;
}
}
}
}
// Select Inputs Specific SCSS
select.form-control {
&:not([multiple='multiple']) {
background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $input-border-color), '#', '%23'));
background-position: calc(100% - 12px) 13px, calc(100% - 20px) 13px, 100% 0;
background-size: 18px 14px, 18px 14px;
background-repeat: no-repeat;
-webkit-appearance: none;
-moz-appearance: none;
padding-right: 1.5rem;
}
&.form-control-lg {
background-position: calc(100% - 12px) 16px, calc(100% - 20px) 16px, 100% 0;
}
&.form-control-sm {
background-position: calc(100% - 12px) 8px, calc(100% - 20px) 8px, 100% 0;
}
}
// For customs-select remove double arrow
.custom-select {
-moz-appearance: none; // For firefox
-webkit-appearance: none; // for chrome
}
// Custom Checkbox
.custom-checkbox {
.custom-control-label::before,
.custom-control-label::after {
top: 0.07rem;
}
.custom-control-label::after {
background-size: 57%;
}
}
// Custom Radio
.custom-radio {
.custom-control-label::before {
top: 0.1rem;
}
}
// Custom checkbox and radio in common
.custom-checkbox,
.custom-radio {
&.custom-control {
padding-left: 1.8rem;
.input-group & {
padding-left: 1.3rem;
}
}
.custom-control-input {
width: 1.285rem;
height: 1.285rem;
}
.custom-control-label {
font-size: $font-size-base;
position: static;
// vertical-align: middle;
&::before,
&::after {
width: 18px;
height: 18px;
left: 0;
}
}
.custom-control-input:checked ~ .custom-control-label::before {
box-shadow: 0 2px 4px 0 rgba($custom-control-indicator-checked-bg, 0.4) !important;
}
.custom-control-input:disabled ~ .custom-control-label::before {
border: none;
box-shadow: none !important;
}
.custom-control-input:focus ~ .custom-control-label::before {
border-color: none;
box-shadow: 0 2px 4px 0 rgba($custom-control-indicator-checked-bg, 0.4) !important;
}
}
// Custom-checkbox when not disabled and active
.custom-control-input:not(:disabled) {
&:active ~ .custom-control-label {
&::before {
background-color: $primary;
border-color: $primary;
}
}
}
/* Floating label Group */
.form-label-group {
position: relative;
margin-bottom: $form-group-margin-bottom;
// Form-Control-Large in Floating Label Group
.form-control-lg {
~ label {
font-size: $input-font-size;
padding: 1rem;
}
}
// Form-label
> label {
position: absolute;
top: 0;
left: 0;
display: block;
transition: all 0.25s ease-in-out;
padding: 0.6rem;
pointer-events: none;
cursor: text;
color: rgba($black, 0.4);
font-size: 0.7rem;
opacity: 0;
}
// form-input
> input,
textarea {
// from-input on focus change label color
&:focus,
&:not(:active) {
&:not(:placeholder-shown) ~ label {
color: rgba($primary, 1) !important;
transition: all 0.25s ease-in-out;
opacity: 1;
}
}
&:not(:focus) {
&:not(:placeholder-shown) ~ label {
color: rgba($black, 0.4) !important;
}
}
// form-label after entering text in input box
&:not(:placeholder-shown) ~ label {
padding: 0.25rem 0;
top: -20px;
left: 3px;
}
&.form-control-lg:not(:placeholder-shown) ~ label {
top: -23px;
}
&.form-control-sm:not(:placeholder-shown) ~ label {
top: -18px;
}
}
}
/* Switches */
.custom-switch {
padding-left: 0;
line-height: 1.7rem;
.custom-control-label {
padding-left: 3.5rem;
line-height: 1.7rem;
/* For bg color of switch*/
&::before {
border: none;
background-color: $switch-bg-color;
height: 1.7rem;
box-shadow: none !important;
transition: opacity 0.25s ease, background-color 0.1s ease;
cursor: pointer;
user-select: none;
top: 0;
left: 0;
}
/*For Switch handle*/
&:after {
position: absolute;
top: 4px;
left: 4px;
box-shadow: -1px 2px 3px 0 rgba($black, 0.2);
background-color: $switch-indicator-color;
transition: all 0.15s ease-out;
cursor: pointer;
user-select: none;
}
/*For Switch text*/
.switch-text-left,
.switch-text-right,
.switch-icon-left,
.switch-icon-right {
position: absolute;
cursor: pointer;
user-select: none;
line-height: 1.8;
i,
svg {
height: 13px;
width: 13px;
font-size: 13px;
}
}
.switch-text-left,
.switch-icon-left {
left: 6px;
color: $white;
opacity: 0;
transform: translateX(8px);
transition: opacity 0.1s ease, transform 0.15s ease;
}
.switch-text-right,
.switch-icon-right {
right: 13px;
opacity: 1;
transform: translateX(0px);
transition: opacity 0.08s ease, transform 0.15s ease;
}
&:focus {
outline: 0;
}
}
/*For Switch label*/
.switch-label {
padding-left: 1rem;
}
// after its checked
.custom-control-input:checked ~ .custom-control-label::before {
box-shadow: none;
}
/*For Switch Handle Animation*/
.custom-control-input:checked ~ .custom-control-label::after {
transform: translateX(1.4rem);
}
.custom-control-input:checked ~ .custom-control-label {
.switch-text-left,
.switch-icon-left {
transform: translateX(0);
opacity: 1;
}
.switch-text-right,
.switch-icon-right {
transform: translateX(-8px);
opacity: 0;
}
}
.custom-control-input:not(:checked) ~ .custom-control-label {
.switch-text-left {
opacity: 0;
}
.switch-text-right {
opacity: 1;
}
}
.custom-control-input:checked ~ .custom-control-label {
.switch-text-right {
opacity: 0;
}
.switch-text-left {
opacity: 1;
}
}
}
/* Textarea with Counter */
.textarea-counter-value {
background-color: $primary;
color: $white;
padding: 1px 6px;
font-size: 0.6rem;
border-radius: 0 0 5px 5px;
margin-right: 1rem;
}
.btn.disabled-max-min {
background-color: rgba($black, 0.5) !important;
cursor: default;
}
/* Number Type Input Box Scss for - Remove arrow on hover */
input[type='number']::-webkit-inner-spin-button,
input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none;
}
// IE Specific CSS
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
// floating Label Group
.form-label-group {
label {
display: none;
}
}
// Bootstrap Select
select.form-control {
&:not([multiple='multiple']) {
background: none;
}
}
}
// Date & Time Picker - Form Control Bg color
.picker__input {
&.form-control {
background-color: $white;
}
}

10
src/@core/scss/base/bootstrap-extended/_functions.scss vendored

@ -0,0 +1,10 @@
@function str-replace($string, $search, $replace: '') {
$index: str-index($string, $search);
@if $index {
@return str-slice($string, 1, $index - 1) + $replace +
str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
}
@return $string;
}

106
src/@core/scss/base/bootstrap-extended/_helper.scss vendored

@ -0,0 +1,106 @@
// ================================================================================================
// File Name: helper.scss
// Description: Helper classes provides template related customization.
// ----------------------------------------------------------------------------------------------
// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
// Author: PIXINVENT
// Author URL: http://www.themeforest.net/user/pixinvent
// ================================================================================================
// Content helpers
// -------------------------
// typography page icon with list
.list-style-icons {
padding-left: 10px;
margin-left: 0;
list-style: none;
> li svg,
> li i {
margin-right: 6px;
}
}
//Pull the element
.pull-up {
transition: all 0.25s ease;
&:hover {
transform: translateY(-4px) scale(1.02);
box-shadow: 0px 14px 24px rgba(62, 57, 107, 0.2);
z-index: 30;
}
}
// Spinner classes
.spinner {
display: inline-block;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.spinner-reverse {
display: inline-block;
animation: spin-reverse 1s linear infinite;
}
@keyframes spin-reverse {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(-360deg);
}
}
// Bullets used in application pages
.bullet {
width: 1rem;
height: 1rem;
border-radius: 50%;
display: inline-block;
&.bullet-xs {
width: 0.5rem;
height: 0.5rem;
}
&.bullet-sm {
width: 0.714rem;
height: 0.714rem;
}
&.bullet-lg {
width: 1.25rem;
height: 1.25rem;
}
}
// Section Label - used in pages and apps
.section-label {
font-size: 0.85rem;
color: $text-muted;
text-transform: uppercase;
letter-spacing: 0.6px;
}
// Used for table cell fit
.cell-fit {
width: 0.1%;
white-space: nowrap;
}
// Card match height
.match-height {
> [class*='col'] {
display: flex;
flex-flow: column;
> .card {
flex: 1 1 auto;
}
}
}

24
src/@core/scss/base/bootstrap-extended/_include.scss vendored

@ -0,0 +1,24 @@
// ================================================================================================
// File Name: include.scss
// Description: Common components file to include all theme specific custom components.
// ----------------------------------------------------------------------------------------------
// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
// Author: PIXINVENT
// Author URL: http://www.themeforest.net/user/pixinvent
// ================================================================================================
// Variables
// ------------------------------
// Functions
@import 'bootstrap/scss/functions'; // Bootstrap core function
@import 'functions'; // Bootstrap extended function
// Variables
@import 'scss/variables/variables'; // Bootstrap custom variable override (for user purpose)
@import 'variables'; // Bootstrap extended variable override
@import 'bootstrap/scss/variables'; // Bootstrap core variable
// Mixins
@import 'bootstrap/scss/mixins'; // Bootstrap core mixins
@import 'mixins'; // Bootstrap extended mixins

101
src/@core/scss/base/bootstrap-extended/_list-group.scss vendored

@ -0,0 +1,101 @@
/* ===============================================================================================
File Name: list-group.scss
Description: Contain list item, list group related extended SCSS.
----------------------------------------------------------------------------------------------
Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
Author: PIXINVENT
Author URL: http://www.themeforest.net/user/pixinvent
================================================================================================*/
// Inline list style with pipeline separator
ul.list-inline {
li {
display: inline-block;
}
// used in search page
&.list-inline-pipe {
> li + li:before {
content: ' | ';
padding-right: 2px;
}
}
}
// bootstrap list group
.list-group {
.list-group-item {
line-height: 1.5;
&.active {
&:hover {
background-color: $primary;
}
&:focus {
// color: $body-color;
outline: 0;
&:hover {
color: $white;
}
}
small {
color: $white !important;
}
}
&:hover {
background-color: $body-bg;
}
i,
svg {
position: relative;
}
&:not(.active):focus:active {
color: inherit;
}
}
.list-group-item-action {
&.active {
background-color: $primary;
color: $white;
&:focus {
background-color: $primary;
}
}
&:focus {
background-color: $body-bg;
outline: 0;
}
}
// List group with circle for pages like knowledge base
&.list-group-circle {
border: none;
.list-group-item {
border: none;
position: relative;
padding-left: 1.5rem;
&:after {
content: ' ';
background-image: url(str-replace(str-replace($circle, 'currentColor', $body-color), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
color: $body-color;
background-size: 10px;
position: absolute;
height: 10px;
width: 10px;
top: 1.15rem;
left: 0;
}
&:hover {
background-color: transparent;
}
}
}
}
// for drag and drop border radius on selected
.list-group-item.gu-mirror {
border-radius: 0;
}

22
src/@core/scss/base/bootstrap-extended/_media.scss vendored

@ -0,0 +1,22 @@
.media-list {
.media {
padding: 1.25rem;
width: 100%;
margin-top: 0;
.media-left {
margin-right: 1rem;
}
.media-right {
margin-left: 1rem;
}
}
a.media {
color: $gray-600 !important;
}
}
.media-bordered {
.media:not(:first-child) {
border-top: 1px solid $border-color;
}
}

13
src/@core/scss/base/bootstrap-extended/_mixins.scss vendored

@ -0,0 +1,13 @@
// ===============================================================================================
// File Name: mixins.scss
// Description: Extended mixins file with new mixins features.
// ----------------------------------------------------------------------------------------------
// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
// Author: PIXINVENT
// Author URL: http://www.themeforest.net/user/pixinvent
// ================================================================================================
@import 'mixins/_type'; //(NEW)
// Components
@import 'mixins/_navs';

175
src/@core/scss/base/bootstrap-extended/_modal.scss vendored

@ -0,0 +1,175 @@
// Modals
.modal {
// Modal Header
.modal-header {
background-color: $body-bg;
border-bottom: none;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
// close button
.close {
padding: 0.2rem 0.62rem;
box-shadow: 0 5px 20px 0 rgba($black, 0.1);
border-radius: $border-radius;
background: $white;
opacity: 1;
transition: all 0.23s ease 0.1s;
position: relative;
transform: translate(8px, -2px);
// For hover effect of close btn
&:hover,
&:focus,
&:active {
opacity: 1;
outline: none;
transform: translate(5px, 3px);
box-shadow: none;
}
}
}
// Modal Content
.modal-content {
border: none;
// overflow: unset; updated to "visible" as close icon is not visible in IE
overflow: visible;
box-shadow: 0 5px 20px 0 rgba($black, 0.1);
}
.modal-footer {
padding: $modal-inner-padding;
}
// modal sticky for apps
&.modal-sticky {
bottom: 0;
right: 0;
top: auto;
left: auto;
height: auto;
position: fixed;
.modal-header {
display: flex;
align-items: center;
justify-content: space-between;
}
.modal-dialog {
margin-right: #{$content-padding} !important;
box-shadow: 0px 0px 24px 0 rgba($black, 0.25);
border-radius: $border-radius;
}
.modal-actions {
background: transparent;
box-shadow: none;
line-height: 0;
}
}
}
// Modal XS
.modal-xs {
max-width: 300px;
}
// Modal XL
@media (min-width: 1200px) {
.modal-xl {
margin-left: 3%;
margin-right: 3%;
}
}
// Slide In Modal //
.modal-slide-in,
.modal-slide-in .modal {
padding: 0 !important;
overflow: hidden !important;
}
.modal-slide-in {
.modal-dialog {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: auto;
margin: 0;
max-width: none;
width: ($modal-slide-in-width-sm - 5);
.modal-content {
padding-bottom: ($modal-title-line-height * $close-font-size) + $modal-header-padding-y;
padding-top: ($modal-title-line-height * $close-font-size) + $modal-header-padding-y;
overflow: auto;
border-radius: 0;
height: 100%;
}
.modal-body {
padding-bottom: 0;
padding-top: 0;
margin: auto 0;
flex-grow: 0;
}
@media (min-width: (map-get($grid-breakpoints, sm))) {
width: $modal-slide-in-width;
}
&.sidebar-sm {
width: $modal-slide-in-width-sm;
}
&.sidebar-lg {
@media (min-width: (map-get($grid-breakpoints, sm))) {
width: $modal-slide-in-width-lg;
}
}
}
.close {
top: $modal-header-padding-y / 2;
z-index: 10;
transform: none;
position: absolute;
top: 1.5rem;
right: $modal-header-padding-x;
margin: 0;
padding: 0 !important;
line-height: 0.5;
transform: translate(0, -50%);
}
}
// Slide from Right
.modal-slide-in.fade .modal-dialog,
.modal-slide-in .modal.fade .modal-dialog {
transform: translateX(100%);
transition: transform 0.1s ease-out;
}
.modal-slide-in.show .modal-dialog,
.modal-slide-in .modal.show .modal-dialog {
transform: translateX(0) !important;
transition: transform 0.1s ease-out;
}
// To remove Max-width of XS Modal in Small Screen
@media (max-width: 576px) {
.modal {
padding-right: 1rem;
padding-left: 1rem;
.modal-xs,
.modal-sm {
max-width: unset;
}
&.modal-sticky .modal-dialog {
margin-right: 0.2rem !important;
margin-left: 0.2rem;
margin-bottom: 3rem;
}
}
}

272
src/@core/scss/base/bootstrap-extended/_nav.scss vendored

@ -0,0 +1,272 @@
// Component nav and nav/pill tabs
.nav {
border-radius: 0.25rem;
// for component navs
// to wrap border around nav component
&.wrap-border {
border: 1px solid $nav-component-border-color;
li.nav-header {
margin: 0 0.5rem;
}
li.nav-item,
div {
padding: 2px 0.714rem;
}
}
&.nav-left {
.nav-item .nav-link {
justify-content: flex-start;
}
}
&.nav-right {
.nav-item .nav-link {
justify-content: flex-end;
}
}
// Square Border
&.square-border {
border-radius: 0;
.nav-item {
.nav-link.active {
border-radius: 0;
}
}
}
// for main menu toggle lock
.modern-nav-toggle {
padding: 0;
margin: 1.571rem 0;
}
// Dropdown without background need arrow color changes
.dropdown.show {
.dropdown-toggle {
&::after {
background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $white), '#', '%23'));
}
}
}
.dropdown-toggle {
&:not(.active) {
&::after {
background-image: url(str-replace(str-replace($chevron-down, 'currentColor', $body-color), '#', '%23'));
}
}
}
}
.nav-pills,
.nav-tabs {
// if icon added inside nav-link
.nav-link {
display: flex;
align-items: center;
justify-content: center;
i,
svg {
margin-right: 0.5rem;
}
}
}
// nav pills
.nav-pills {
margin-bottom: 1rem;
// nav item of nav pill
.nav-link {
padding: $btn-padding-y $btn-padding-x;
font-size: $btn-font-size;
line-height: $btn-font-size;
border: 1px solid transparent;
color: $headings-color;
&.active {
border-color: $nav-pills-link-active-bg;
box-shadow: 0 4px 18px -4px rgba($nav-pills-link-active-bg, 0.65);
}
&.disabled {
color: $nav-link-disabled-color;
}
&.dropdown-toggle::after {
top: 1px;
left: 1px;
}
}
&.dropdown {
&.show {
.nav-link {
color: $white;
}
.dropdown-item {
&.active {
&:hover {
color: $primary;
}
}
}
}
}
// Justified Pills
&.nav-justified {
@include nav-justified;
@include nav-tabs-justified;
.nav-link {
display: block;
&.active {
border: none;
&:hover,
&:focus {
border: none;
}
}
}
}
}
// Basic Nav Tabs
.nav-tabs {
margin-bottom: 1rem;
position: relative;
// Basic nav item
.nav-item {
position: relative;
}
.nav-link {
color: $body-color;
border: none;
min-width: auto;
font-weight: 450;
padding: 0.61rem 1.2rem;
border-radius: 0;
position: relative;
overflow: hidden;
&:after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 3px;
background: linear-gradient(30deg, rgba($primary, 1), rgba($primary, 0.5)) !important;
transition: transform 0.3s;
transform: translate3d(0, 150%, 0);
}
&.active {
position: relative;
color: $primary;
&:after {
transform: translate3d(0, 0, 0);
// box-shadow: 0 0 8px 0 rgba($primary, 0.5) !important;
}
}
&.dropdown-toggle {
&::after {
top: 1px;
left: 1px;
}
}
}
// Justified Tabs
&.nav-justified {
@include nav-justified;
@include nav-tabs-justified;
.nav-item {
a.nav-link {
display: block;
border-radius: 0;
&.active {
border: none;
}
&:hover {
border-color: transparent;
}
}
}
}
}
// Nav Tabs Vertical
.nav-vertical {
overflow: hidden;
.nav.nav-tabs {
// nav item styles for vertical nav tabs
.nav-item {
.nav-link {
margin-bottom: 0;
&:after {
transform: rotate(90deg) translate3d(0, 150%, 0);
left: 70%;
}
&.active {
&:after {
left: auto;
right: -1.4rem;
transform: rotate(90deg) translate3d(0, 225%, 0);
top: 1.25rem;
width: 2.14rem;
}
}
}
}
// vertical nav left tabs
&.nav-left {
float: left;
display: table;
margin-right: 1rem;
~ .tab-content {
.tab-pane {
display: none;
overflow-y: auto;
padding-left: 1rem;
&.active {
display: block;
}
}
}
}
// vertical right nav tabs
&.nav-right {
float: right;
display: table;
margin-left: 1rem;
.nav-item {
.nav-link {
&.active {
&:after {
left: -0.9rem;
transform: rotate(90deg) translate3d(0, 10%, 0);
}
}
}
}
~ .tab-content {
.tab-pane {
display: none;
overflow-y: auto;
padding-right: 1rem;
&.active {
display: block;
}
}
}
}
}
}

682
src/@core/scss/base/bootstrap-extended/_navbar.scss vendored

@ -0,0 +1,682 @@
/* ===============================================================================================
File Name: navbar.scss
Description: Contain header navigation bar, vertical main navigation bar and
horiznotal main navigation bar related SCSS.
----------------------------------------------------------------------------------------------
Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
Author: PIXINVENT
Author URL: http://www.themeforest.net/user/pixinvent
================================================================================================*/
@function set-navbar-text-color($color) {
@if (lightness($color) > 50) {
@return $white; // Lighter backgorund, return dark color
} @else {
@return $black; // Darker background, return light color
}
}
.header-navbar {
padding: 0px;
min-height: $navbar-height;
font-family: $font-family-monospace;
transition: 300ms ease all, background 0s;
z-index: 997;
&.fixed-top {
left: $menu-expanded-width;
}
// Apply navbar color as per background
&[class*='bg-'] {
.navbar-nav {
.nav-item {
> a {
color: set-navbar-text-color($theme-dark-body-color) !important;
i,
svg,
span {
color: set-navbar-text-color($theme-dark-body-color) !important;
}
}
.dropdown-menu {
i,
svg {
color: inherit !important;
}
}
}
.search-input {
.input,
.search-list .auto-suggestion span {
color: $body-color !important;
}
}
}
}
//* Navbar modifiers
//*------------------------
// floating nav
&.floating-nav {
position: fixed;
right: 0;
margin: #{$floating-nav-margin} #{$content-padding} 0;
width: calc(
100vw - (100vw - 100%) - calc(#{$content-padding} * 2) - #{$menu-expanded-width}
);
border-radius: $card-border-radius;
z-index: 12;
}
&.floating-nav2 {
position: fixed;
right: 0;
margin: #{$floating-nav-margin} #{$content-padding} 0;
width: calc(100vw - (100vw - 100%) - calc(#{$content-padding} * 2));
border-radius: $card-border-radius;
z-index: 12;
}
// static nav
&.navbar-static-top {
top: 0;
right: 0;
left: $menu-expanded-width;
width: calc(100vw - (100vw - 100%) - #{$sidebar-width});
background: transparent;
box-shadow: none !important; // remove this if removing "menu-shadow" class
}
// add border to navbar
&.navbar-border {
border-bottom: 1px solid $border-color;
}
// add shadow to navbar
&.navbar-shadow {
box-shadow: $box-shadow;
}
&.navbar-dark.navbar-border {
border-bottom: 1px solid $theme-dark-border-color;
}
// Hide navbar dropdown arrow
&:not(.navbar-horizontal) {
.nav-link {
&.dropdown-toggle::after {
display: none;
}
}
}
//* Navbar modifiers
//*------------------------
.navbar-container {
padding: 0.8rem 1rem;
// Added more horizontal padding above small screen
@include media-breakpoint-up(sm) {
padding: 0.8rem 1.4rem;
}
flex-basis: 100%;
transition: 300ms ease all;
margin-left: 0;
// Navbar bookmark primary color on hover
.bookmark-wrapper {
// for bookmark z-index
.bookmark-input {
z-index: 1;
}
}
// Language dd style
.dropdown-language {
.selected-language {
font-weight: 500;
}
.nav-link {
.flag-icon {
margin-right: 0.4rem;
}
}
.dropdown-menu .dropdown-item {
.flag-icon {
margin-right: 0.4rem;
}
}
}
ul.navbar-nav {
li {
line-height: 1.5;
&.dropdown {
.dropdown-menu {
.vertical-layout & {
top: 41px !important; // Apply navbar dd position on vertical layouts only (Not for horizontal layout due to hover out issue)
}
}
}
&.dropdown-language {
.dropdown-menu.dropdown-menu-right {
right: -2px;
}
}
// Cart & Notification badge
&.dropdown-cart,
&.dropdown-notification {
.badge {
&.badge-up {
right: -3px;
}
}
.dropdown-menu.dropdown-menu-right {
right: -2px;
padding: 0;
left: inherit;
&::before {
background: $primary;
border-color: $primary;
}
}
.dropdown-menu-header {
border-top-left-radius: $dropdown-border-radius;
border-top-right-radius: $dropdown-border-radius;
.dropdown-header {
padding: 1.22rem 1.28rem;
}
}
.notification-text {
margin-bottom: 0.5rem;
font-size: smaller;
color: $text-muted;
}
.dropdown-menu-footer {
padding: 1.28rem;
}
}
&.dropdown-notification {
.media-body {
.media-heading {
color: $body-color;
margin-bottom: 0;
line-height: 1.2;
}
}
}
// Cart dropdown
&.dropdown-cart {
.media {
position: relative;
img {
background: $body-bg;
}
&:hover {
.cart-item-remove {
visibility: visible;
}
}
}
.media-heading {
width: 8rem;
h6.cart-item-title {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.cart-item-by {
color: $text-muted;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
overflow: hidden;
}
}
.media-body {
display: flex;
align-items: center;
justify-content: space-between;
}
.cart-item-price {
margin-bottom: 0;
width: 5rem;
text-align: right;
}
.cart-item-remove {
position: absolute;
top: 10px;
right: 17px;
width: 14px;
height: 14px;
cursor: pointer;
@include media-breakpoint-up(md) {
visibility: hidden;
}
}
}
> a.nav-link {
color: $body-color;
padding: 0 0.5rem;
position: relative;
}
&.dropdown-user {
line-height: 1 !important; // Set due to custom 2 line component in navbar
.dropdown-menu {
width: 12rem;
margin-top: 10px;
i,
svg {
height: 16px;
width: 16px;
font-size: 16px;
vertical-align: top;
}
}
}
// Logged in user dropdown styles
a.dropdown-user-link {
display: flex;
align-items: center;
.user-name {
display: inline-block;
margin-bottom: 0.435rem;
margin-left: 0.2rem;
}
.user-status {
font-size: smaller;
}
img {
box-shadow: 0 4px 8px 0 rgba($black, 0.12),
0 2px 4px 0 rgba($black, 0.08);
}
}
// navbar toggle menu size (display below lg)
a.menu-toggle {
i,
svg {
height: 1.6rem;
width: 1.6rem;
font-size: 1.6rem;
}
}
a.dropdown-user-link {
.user-nav {
display: flex;
flex-direction: column;
align-items: flex-end;
float: left;
margin-right: $spacer - 0.2;
}
}
div.input-group {
padding: 0.7rem 1rem;
}
i,
svg {
&.ficon {
height: 1.5rem;
width: 1.5rem;
font-size: 1.5rem;
color: $body-color;
&:hover {
color: $primary;
}
}
}
.media-list {
max-height: 25rem;
}
.scrollable-container {
position: relative;
}
}
}
//Navbar notification css
.dropdown-menu-media {
width: 30rem;
.dropdown-menu-header {
border-bottom: 1px solid $border-color;
}
.media-list {
.media {
padding: 0.9rem 1.28rem;
border: none;
border-bottom: 1px solid $border-color;
&:hover {
background: $body-bg;
}
.media-meta {
color: $body-color;
}
}
a:last-of-type {
.media {
border-bottom: none;
}
}
}
.dropdown-menu-footer {
border-top: 1px solid $border-color;
}
}
}
}
// Navbar shadow on scroll
.header-navbar-shadow {
display: none;
}
// Floating Navbar
.navbar-floating {
// Floating nav should have same padding across all screen
.navbar-container {
padding: 0.8rem 1rem;
}
.header-navbar-shadow {
display: block;
background: linear-gradient(
180deg,
hsla(0, 0%, 97.3%, 0.95) 44%,
hsla(0, 0%, 97.3%, 0.46) 73%,
hsla(0, 0%, 100%, 0)
);
padding-top: 2.2rem;
background-repeat: repeat;
width: 100%;
height: 102px;
position: fixed;
top: 0;
left: 0;
z-index: 11;
}
}
// Navbar colors
.navbar-light {
background: $white;
&.navbar-horizontal {
background: $white;
}
.navbar-nav {
.active {
&.nav-link {
background-color: rgba($black, 0.03);
}
}
.disabled {
&.nav-link {
color: $nav-link-disabled-color;
}
}
}
}
.navbar-dark {
background: $gray-600;
.navbar-brand {
color: $white !important;
}
&.navbar-horizontal {
background: $gray-600;
}
.nav-search {
.form-control,
.btn-secondary {
color: $white;
background: $gray-600;
}
}
.navbar-nav {
li {
line-height: 1;
}
.active {
&.nav-link {
background-color: rgba($white, 0.05);
}
}
.disabled {
&.nav-link {
color: $gray-300;
}
}
}
}
// Media queries for device support
// =========================================
@include media-breakpoint-down(sm) {
.header-navbar {
// generic navbar dropdown specific
.navbar-nav {
.show {
position: static;
}
.open-navbar-container {
padding-top: 0.625rem;
}
}
.navbar-container {
.show {
.dropdown-menu {
right: 0;
left: 0 !important;
float: none;
width: auto !important;
margin-top: 0;
overflow: hidden;
}
}
.dropdown-user {
.dropdown-menu-right {
right: 0 !important;
}
}
ul.navbar-nav {
li {
.dropdown-toggle::after {
margin-right: 0;
margin-left: -2px;
}
}
}
}
}
// dark navbar
.navbar-dark {
.navbar-header {
.navbar-nav {
.nav-link {
color: $white;
}
}
}
.navbar-container {
.navbar-nav {
.nav-link {
color: $gray-600;
}
}
}
}
// light navbar
.navbar-light {
.navbar-header {
.navbar-nav {
.nav-link {
color: $gray-600;
}
}
}
.navbar-container {
.navbar-nav {
.nav-link {
color: $gray-600;
}
}
}
}
}
// For Medium and down: iPad support for navbr
// navbar static top
@include media-breakpoint-down(lg) {
.header-navbar {
// floating nav width
&.floating-nav {
width: calc(100vw - (100vw - 100%) - calc(#{$content-padding} * 2));
}
&.navbar-static-top {
left: 0;
width: 100%;
}
}
}
//For responsive sub nav
@mixin responsive_sub_nav {
.header-navbar {
.navbar-nav {
margin: 0;
flex-flow: row wrap;
.dropdown-menu {
position: absolute;
}
.nav-item {
float: left;
}
}
}
}
@include media-breakpoint-down(md) {
@include responsive_sub_nav;
}
@media (max-width: 767px) {
@include responsive_sub_nav;
}
@include media-breakpoint-down(xs) {
.header-navbar {
&.floating-nav {
width: calc(
100vw - (100vw - 100%) - calc(#{$content-padding} + 0.4rem)
) !important; // SM screen calc as per updated spacings
margin-left: 1rem;
margin-right: 1.2rem;
}
.navbar-container ul.navbar-nav li .selected-language {
display: none;
}
}
}
/* ----------- iPhone 5, 5S iPhone 6----------- */
// Set dropdown height as per the screen size
@mixin extend_mobile_specific($menu_height) {
.header-navbar {
.navbar-container {
.show {
.dropdown-menu {
max-height: $menu_height;
}
}
}
}
}
/* Landscape */
@media only screen and (min-device-width: 26.78em) and (max-device-width: 47.64em) and (-webkit-min-device-pixel-ratio: 2) and (orientation: landscape) {
@include extend_mobile_specific(180px);
}
/* ----------- iPhone 6+ ----------- */
/* Landscape */
@media only screen and (min-device-width: 29.57em) and (max-device-width: 52.57em) and (-webkit-min-device-pixel-ratio: 3) and (orientation: landscape) {
@include extend_mobile_specific(280px);
}
// for width of navbar in fixed-top
@media (max-width: 1201px) {
.header-navbar {
&.fixed-top {
left: 0;
}
}
.horizontal-layout {
.header-navbar {
.navbar-container {
padding-left: 0.8rem;
padding-right: 0.8rem;
}
}
}
}
@media (max-width: 1199px) {
.header-navbar {
.navbar-container {
ul.navbar-nav li a.dropdown-user-link .user-name {
margin-bottom: 0;
}
}
}
}

307
src/@core/scss/base/bootstrap-extended/_pagination.scss vendored

@ -0,0 +1,307 @@
// Pagination
// default look for page item, first and last item
.page-item {
border-radius: 5rem;
&:not(.prev-item),
&:not(.next-item),
&:not(.first),
&:not(.last),
&:not(.active) {
.page-link {
line-height: 1.3;
}
}
.page-link {
display: flex;
align-items: center;
justify-content: center;
}
&.previous,
&.prev,
&.next,
&.first,
&.last {
.page-link {
width: auto;
}
}
&.prev-item,
&.next-item {
.page-link {
transition: all 0.2s ease-out;
}
}
// prev and next item separated styles
&.prev-item {
margin-right: 0.3571rem;
.page-link {
border-radius: 50%;
&:before {
background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $pagination-color), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
background-size: 14px;
color: $body-color;
width: 8px;
height: 18px;
content: '';
}
&:hover {
background: $pagination-hover-bg;
color: $pagination-hover-color;
}
&:active,
&:hover {
background-color: $primary !important;
&:before {
background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $white), '#', '%23')) !important;
}
}
}
&.disabled {
.page-link {
&:before {
background-image: url(str-replace(
str-replace($chevron-left, 'currentColor', $pagination-disabled-color),
'#',
'%23'
));
}
}
}
& ~ .page-item:nth-child(2) {
border-top-left-radius: 5rem;
border-bottom-left-radius: 5rem;
.page-link {
border-top-left-radius: 5rem !important;
border-bottom-left-radius: 5rem !important;
}
}
& ~ .page-item:nth-last-child(2) {
border-top-right-radius: 5rem;
border-bottom-right-radius: 5rem;
.page-link {
border-top-right-radius: 5rem !important;
border-bottom-right-radius: 5rem !important;
}
}
}
&.next-item {
margin-left: 0.3571rem;
.page-link {
border-radius: 50%;
&:after {
background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $pagination-color), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
background-size: 14px;
width: 8px;
height: 18px;
content: '';
}
&:hover {
background: $pagination-hover-bg;
color: $pagination-hover-color;
}
&:active,
&:hover {
background-color: $primary !important;
&:after {
background-image: url(str-replace(
str-replace($chevron-right, 'currentColor', $white),
'#',
'%23'
)) !important;
}
}
}
&.disabled {
.page-link {
&:after {
background-image: url(str-replace(
str-replace($chevron-right, 'currentColor', $pagination-disabled-color),
'#',
'%23'
));
}
}
}
}
// prev and next style
&.prev,
&.previous {
.page-link {
&:before {
background-image: url(str-replace(str-replace($chevron-left, 'currentColor', $pagination-color), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
background-size: 14px;
color: $body-color;
width: 12px;
height: 18px;
content: '';
}
// &:active,
&:hover {
&:before {
background-image: url(str-replace(
str-replace($chevron-left, 'currentColor', $pagination-active-color),
'#',
'%23'
)) !important;
}
}
}
&.disabled {
.page-link {
&:before {
background-image: url(str-replace(
str-replace($chevron-left, 'currentColor', $pagination-disabled-color),
'#',
'%23'
));
}
}
}
}
&.next {
.page-link {
&:after {
background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $pagination-color), '#', '%23'));
background-repeat: no-repeat;
background-position: center;
background-size: 14px;
color: $body-color;
width: 12px;
height: 18px;
content: '';
}
// &:active,
&:hover {
&:after {
background-image: url(str-replace(
str-replace($chevron-right, 'currentColor', $primary),
'#',
'%23'
)) !important;
}
}
}
&.disabled {
.page-link {
&:after {
background-image: url(str-replace(
str-replace($chevron-right, 'currentColor', $pagination-disabled-color),
'#',
'%23'
));
}
}
}
}
&.disabled {
.page-link {
color: $pagination-disabled-color;
}
}
// page link customization
.page-link {
border: none;
margin: 0;
margin-left: 0;
font-size: 1rem;
min-width: 2.286rem;
&:focus {
box-shadow: none;
}
&:hover {
color: $primary;
}
}
// for active page item
&.active {
background-color: $pagination-bg;
border-radius: 0;
.page-link {
z-index: 3;
border-radius: 5rem;
background-color: $primary;
color: $white !important;
font-weight: 600;
}
}
// if you don't want separated look
&:first-child:not(.prev-item) {
&.active {
border-top-left-radius: 1.428rem;
border-bottom-left-radius: 1.428rem;
.page-link {
border-radius: 5rem;
}
}
.page-link {
border-top-left-radius: 1.428rem;
border-bottom-left-radius: 1.428rem;
}
}
&:last-child:not(.next-item) {
&.active {
border-top-right-radius: 1.428rem;
border-bottom-right-radius: 1.428rem;
.page-link {
border-radius: 5rem;
}
}
.page-link {
border-top-right-radius: 1.428rem;
border-bottom-right-radius: 1.428rem;
}
}
}
// For Pagination Font sizes
.pagination {
// For Pagination lg
&.pagination-lg {
.page-item {
.page-link {
font-size: $pagination-font-size-lg;
min-width: 2.6rem;
}
}
}
// For Pagination sm
&.pagination-sm {
.page-item {
.page-link {
font-size: $pagination-font-size-sm;
min-width: 2rem;
}
}
}
}

45
src/@core/scss/base/bootstrap-extended/_popover.scss vendored

@ -0,0 +1,45 @@
// Popovers
.popover {
box-shadow: $popover-box-shadow;
// popover header style
.popover-header {
@include font-size(1.07rem);
border: 1px solid $popover-header-bg;
}
// popover body style
.popover-body {
border: 1px solid $popover-border-color;
border-top-color: $popover-bg;
border-bottom-left-radius: $popover-border-radius;
border-bottom-right-radius: $popover-border-radius;
}
// popover bottom arrow color like header
&.bs-popover-bottom {
.arrow:after {
border-bottom-color: $popover-header-bg;
}
}
}
// To set arrow border as we have added border to popover-body and popover-header
.bs-popover-top {
> .arrow {
&::after {
bottom: $popover-border-width + 1px;
}
}
}
.bs-popover-right {
> .arrow {
&::after {
left: $popover-border-width + 1px;
}
}
}
.bs-popover-left {
> .arrow {
&::after {
right: $popover-border-width + 1px;
}
}
}

20
src/@core/scss/base/bootstrap-extended/_progress.scss vendored

@ -0,0 +1,20 @@
/*=========================================================================================
File Name: progress.scss
Description: Extended bootstrap progress bar scss.
----------------------------------------------------------------------------------------
Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
Author: PIXINVENT
Author URL: http://www.themeforest.net/user/pixinvent
----------------------------------------------------------------------------------------
==========================================================================================*/
.progress {
// border radius to set for stacked bars
.progress-bar + .progress-bar:not(:last-child) {
border-radius: 0;
}
.progress-bar:last-child {
border-top-right-radius: $progress-border-radius;
border-bottom-right-radius: $progress-border-radius;
}
}

15
src/@core/scss/base/bootstrap-extended/_reboot.scss vendored

@ -0,0 +1,15 @@
a {
&:focus {
outline: none;
}
}
a:not([href]) {
color: inherit;
text-decoration: none;
@include hover() {
color: inherit;
text-decoration: none;
}
}

122
src/@core/scss/base/bootstrap-extended/_tables.scss vendored

@ -0,0 +1,122 @@
// ================================================================================================
// File Name: tables.scss
// Description: Tables pages custom scss
// ----------------------------------------------------------------------------------------------
// Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
// Author: PIXINVENT
// Author URL: http://www.themeforest.net/user/pixinvent
// ================================================================================================
// table-white-space
.table-white-space {
th,
td {
white-space: nowrap;
}
}
// table th, td padding
.table {
thead,
tfoot {
th {
vertical-align: top;
text-transform: uppercase;
font-size: $table-th-font-size;
letter-spacing: 0.5px;
}
}
th,
td {
padding: $table-cell-padding 2rem;
vertical-align: middle;
}
&.table-sm {
th,
td {
padding: $table-cell-padding-sm 0.5rem;
&:first-child {
padding-left: 0.75rem;
}
}
}
}
// if we are not using table-light class then also header color should apply
.table:not(.table-dark):not(.table-light) {
thead:not(.thead-dark) th,
tfoot:not(.thead-dark) th {
background-color: $table-head-bg;
}
}
// table inside card, don't need margin bottom
.table-hover {
tbody {
tr {
cursor: pointer;
}
}
}
// Table - hover animation
.table-hover-animation {
background-color: $body-bg;
thead {
th {
border-bottom: 0;
}
}
th,
td {
border: 0;
}
tbody {
tr {
transition: all 0.25s ease;
background-color: $white;
&:hover {
transform: translateY(-4px);
}
}
}
}
// table border radius
.card .table {
margin-bottom: 0;
border-bottom-left-radius: $border-radius;
border-bottom-right-radius: $border-radius;
tbody {
tr:last-child {
td:first-child {
border-bottom-left-radius: $border-radius;
}
td:last-child {
border-bottom-right-radius: $border-radius;
}
}
}
}
// Contexual table inside card radius
.card {
table {
tr[class*='table-']:last-child {
td:first-child {
border-bottom-left-radius: $border-radius;
}
td:last-child {
border-bottom-right-radius: $border-radius;
}
}
}
}
// IE Specific CSS
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
.table-hover-animation {
tr {
&:hover {
border-bottom-color: $table-border-color;
}
}
}
}

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

Loading…
Cancel
Save