refactor: migrate from graphql to rest for frontend

pull/7976/head
NGPixel 4 months ago
parent dc4b84dc82
commit fe38f4c7e5
No known key found for this signature in database

@ -33,11 +33,15 @@
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// This can be used to network with other containers or with the host.
"forwardPorts": [3000, 5432, 8000],
"forwardPorts": [3000, 3001, 5432, 8000],
"portsAttributes": {
"3000": {
"label": "Application",
"label": "Application Backend",
"onAutoForward": "silent"
},
"3001": {
"label": "Application Frontend",
"onAutoForward": "silent"
},
"5432": {

@ -0,0 +1,58 @@
/**
* Authentication API Routes
*/
async function routes (app, options) {
app.get('/sites/:siteId/auth/strategies', {
schema: {
summary: 'List all site authentication strategies',
tags: ['Authentication'],
params: {
type: 'object',
properties: {
siteId: {
type: 'string',
format: 'uuid'
}
}
},
querystring: {
type: 'object',
properties: {
visibleOnly: {
type: 'boolean',
default: false
}
}
}
}
}, async (req, reply) => {
return []
})
app.post('/auth/login', {
schema: {
summary: 'Login',
tags: ['Authentication'],
body: {
type: 'object',
required: ['path'],
properties: {
path: {
type: 'string',
minLength: 1,
maxLength: 255
}
},
examples: [
{
path: 'foo/bar'
}
]
}
}
}, async (req, reply) => {
return []
})
}
export default routes

@ -2,6 +2,9 @@
* API Routes
*/
async function routes (app, options) {
app.register(import('./authentication.mjs'))
app.register(import('./locales.mjs'), { prefix: '/locales' })
app.register(import('./pages.mjs'))
app.register(import('./sites.mjs'), { prefix: '/sites' })
app.register(import('./system.mjs'), { prefix: '/system' })
app.register(import('./users.mjs'), { prefix: '/users' })

@ -0,0 +1,24 @@
/**
* Locales API Routes
*/
async function routes (app, options) {
app.get('/', {
schema: {
summary: 'List all locales',
tags: ['Locales']
}
}, async (req, reply) => {
return WIKI.models.locales.getLocales()
})
app.get('/:code/strings', {
schema: {
summary: 'Get locale strings',
tags: ['Locales']
}
}, async (req, reply) => {
return WIKI.models.locales.getStrings(req.params.code)
})
}
export default routes

@ -0,0 +1,92 @@
/**
* Pages API Routes
*/
async function routes (app, options) {
app.get('/sites/:siteId/pages', {
schema: {
summary: 'List all pages',
tags: ['Pages'],
params: {
type: 'object',
properties: {
siteId: {
type: 'string',
format: 'uuid'
}
}
}
}
}, async (req, reply) => {
return []
})
app.get('/sites/:siteId/pages/:pageIdOrHash', {
schema: {
summary: 'List all pages',
tags: ['Pages'],
params: {
type: 'object',
properties: {
siteId: {
type: 'string',
format: 'uuid'
},
pageIdOrHash: {
type: 'string',
oneOf: [
{ format: 'uuid' },
{ pattern: '^[a-f0-9]+$' }
]
}
}
},
querystring: {
type: 'object',
properties: {
withContent: {
type: 'boolean',
default: false
}
}
}
}
}, async (req, reply) => {
return []
})
app.post('/sites/:siteId/pages/userPermissions', {
schema: {
summary: 'Get page user permissions',
tags: ['Pages'],
params: {
type: 'object',
properties: {
siteId: {
type: 'string',
format: 'uuid'
}
}
},
body: {
type: 'object',
required: ['path'],
properties: {
path: {
type: 'string',
minLength: 1,
maxLength: 255
}
},
examples: [
{
path: 'foo/bar'
}
]
}
}
}, async (req, reply) => {
return []
})
}
export default routes

@ -1,3 +1,5 @@
import { validate as uuidValidate } from 'uuid'
/**
* Sites API Routes
*/
@ -11,13 +13,23 @@ async function routes (app, options) {
return { hello: 'world' }
})
app.get('/:siteId', {
app.get('/:siteIdorHostname', {
schema: {
summary: 'Get site info',
tags: ['Sites']
}
}, async (req, reply) => {
return { hello: 'world' }
const site = (uuidValidate(req.params.siteId))
? await WIKI.models.sites.getSiteById({ id: req.params.siteId })
: await WIKI.models.sites.getSiteByHostname({ hostname: req.params.siteId })
return site
? {
...site.config,
id: site.id,
hostname: site.hostname,
isEnabled: site.isEnabled
}
: null
})
/**

@ -10,6 +10,15 @@ async function routes (app, options) {
}, async (request, reply) => {
return { hello: 'world' }
})
app.get('/flags', {
schema: {
summary: 'System Flags',
tags: ['System']
}
}, async (request, reply) => {
return { hello: 'world' }
})
}
export default routes

@ -8,6 +8,7 @@ import { Pool } from 'pg'
import PGPubSub from 'pg-pubsub'
import semver from 'semver'
import { relations } from '../db/relations.mjs'
import { createDeferred } from '../helpers/common.mjs'
// import migrationSource from '../db/migrator-source.mjs'
// const migrateFromLegacy = require('../db/legacy')
@ -93,7 +94,7 @@ export default {
options: `-c search_path=${WIKI.config.db.schema}`
})
const db = drizzle({ client: this.pool })
const db = drizzle({ client: this.pool, relations })
// Connect
await this.connect(db)

@ -0,0 +1,16 @@
import { defineRelations } from 'drizzle-orm'
import * as schema from './schema.mjs'
export const relations = defineRelations(schema,
r => ({
users: {
groups: r.many.groups({
from: r.users.id.through(r.userGroups.userId),
to: r.groups.id.through(r.userGroups.groupId)
})
},
groups: {
members: r.many.users()
}
})
)

@ -1,4 +1,4 @@
import { defineRelations, sql } from 'drizzle-orm'
import { sql } from 'drizzle-orm'
import { bigint, boolean, bytea, customType, index, integer, jsonb, pgEnum, pgTable, primaryKey, text, timestamp, uniqueIndex, uuid, varchar } from 'drizzle-orm/pg-core'
// == CUSTOM TYPES =====================
@ -325,19 +325,3 @@ export const userGroups = pgTable('userGroups', {
index('userGroups_groupId_idx').on(table.groupId),
index('userGroups_composite_idx').on(table.userId, table.groupId)
])
// == RELATIONS ========================
export const relations = defineRelations({ users, groups, userGroups },
r => ({
users: {
groups: r.many.groups({
from: r.users.id.through(r.userGroups.userId),
to: r.groups.id.through(r.userGroups.groupId)
})
},
groups: {
members: r.many.users()
}
})
)

@ -27,6 +27,7 @@ import fastifyView from '@fastify/view'
import gracefulServer from '@gquittet/graceful-server'
import ajvFormats from 'ajv-formats'
import pug from 'pug'
import NodeCache from 'node-cache'
import configSvc from './core/config.mjs'
import dbManager from './core/db.mjs'
@ -111,6 +112,8 @@ async function preBoot () {
}
process.exit(1)
}
WIKI.cache = new NodeCache({ checkperiod: 0 })
}
// ----------------------------------------
@ -118,6 +121,9 @@ async function preBoot () {
// ----------------------------------------
async function postBoot () {
await WIKI.models.locales.refreshFromDisk()
await WIKI.models.locales.reloadCache()
await WIKI.models.sites.reloadCache()
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,81 @@
const localazyMetadata = {
projectUrl: "https://localazy.com/p/wiki",
baseLocale: "en",
languages: [
{
language: "de",
region: "",
script: "",
isRtl: false,
name: "German",
localizedName: "Deutsch",
pluralType: (n) => { return (n===1) ? "one" : "other"; }
},
{
language: "en",
region: "",
script: "",
isRtl: false,
name: "English",
localizedName: "English",
pluralType: (n) => { return (n===1) ? "one" : "other"; }
},
{
language: "fr",
region: "",
script: "",
isRtl: false,
name: "French",
localizedName: "Français",
pluralType: (n) => { return (n===0 || n===1) ? "one" : "other"; }
},
{
language: "pt",
region: "BR",
script: "",
isRtl: false,
name: "Brazilian Portuguese",
localizedName: "Português (Brasil)",
pluralType: (n) => { return (n>=0 && n<=1) ? "one" : "other"; }
},
{
language: "ru",
region: "",
script: "",
isRtl: false,
name: "Russian",
localizedName: "Русский",
pluralType: (n) => { return ((n%10===1) && (n%100!==11)) ? "one" : ((n%10>=2 && n%10<=4) && ((n%100<12 || n%100>14))) ? "few" : "many"; }
},
{
language: "zh",
region: "",
script: "Hans",
isRtl: false,
name: "Simplified Chinese",
localizedName: "简体中文",
pluralType: (n) => { return "other"; }
}
],
files: [
{
cdnHash: "54b977214afbffe2ffeb07d0ccb03558e75e4408",
file: "file.json",
path: "",
library: "",
module: "",
buildType: "",
productFlavors: [],
cdnFiles: {
"de#": "https://delivery.localazy.com/_a7797965569058078203416ae5aa/_e0/54b977214afbffe2ffeb07d0ccb03558e75e4408/de/file.json",
"en#": "https://delivery.localazy.com/_a7797965569058078203416ae5aa/_e0/54b977214afbffe2ffeb07d0ccb03558e75e4408/en/file.json",
"fr#": "https://delivery.localazy.com/_a7797965569058078203416ae5aa/_e0/54b977214afbffe2ffeb07d0ccb03558e75e4408/fr/file.json",
"pt_BR#": "https://delivery.localazy.com/_a7797965569058078203416ae5aa/_e0/54b977214afbffe2ffeb07d0ccb03558e75e4408/pt-BR/file.json",
"ru#": "https://delivery.localazy.com/_a7797965569058078203416ae5aa/_e0/54b977214afbffe2ffeb07d0ccb03558e75e4408/ru/file.json",
"zh#Hans": "https://delivery.localazy.com/_a7797965569058078203416ae5aa/_e0/54b977214afbffe2ffeb07d0ccb03558e75e4408/zh-Hans/file.json"
}
}
]
};
export default localazyMetadata;

@ -1,5 +1,6 @@
import { authentication } from './authentication.mjs'
import { groups } from './groups.mjs'
import { locales } from './locales.mjs'
import { settings } from './settings.mjs'
import { sites } from './sites.mjs'
import { users } from './users.mjs'
@ -7,6 +8,7 @@ import { users } from './users.mjs'
export default {
authentication,
groups,
locales,
settings,
sites,
users

@ -0,0 +1,108 @@
import { find } from 'lodash-es'
import { stat, readFile } from 'node:fs/promises'
import path from 'node:path'
import { DateTime } from 'luxon'
import { locales as localesTable } from '../db/schema.mjs'
import { eq, sql } from 'drizzle-orm'
/**
* Locales model
*/
class Locales {
async refreshFromDisk ({ force = false } = {}) {
try {
const localesMeta = (await import('../locales/metadata.mjs')).default
WIKI.logger.info(`Found ${localesMeta.languages.length} locales: [ OK ]`)
const dbLocales = await WIKI.db.select({
code: localesTable.code,
updatedAt: localesTable.updatedAt
}).from(localesTable).orderBy(localesTable.code)
let localFilesSkipped = 0
for (const lang of localesMeta.languages) {
// -> Build filename
const langFilenameParts = [lang.language]
if (lang.region) {
langFilenameParts.push(lang.region)
}
if (lang.script) {
langFilenameParts.push(lang.script)
}
const langFilename = langFilenameParts.join('-')
// -> Get DB version
const dbLang = find(dbLocales, ['code', langFilename])
// -> Get File version
const flPath = path.join(WIKI.SERVERPATH, `locales/${langFilename}.json`)
try {
const flStat = await stat(flPath)
const flUpdatedAt = DateTime.fromJSDate(flStat.mtime)
// -> Load strings
if (!dbLang || DateTime.fromJSDate(dbLang.updatedAt) < flUpdatedAt || force) {
WIKI.logger.info(`Loading locale ${langFilename} into DB...`)
const flStrings = JSON.parse(await readFile(flPath, 'utf8'))
await WIKI.db.insert(localesTable).values({
code: langFilename,
name: lang.name,
nativeName: lang.localizedName,
language: lang.language,
region: lang.region,
script: lang.script,
isRTL: lang.isRtl,
strings: flStrings
}).onConflictDoUpdate({ target: localesTable.code, set: { strings: flStrings, updatedAt: sql`now()` } })
WIKI.logger.info(`Locale ${langFilename} loaded successfully. [ OK ]`)
} else {
WIKI.logger.info(`Locale ${langFilename} is newer in the DB. Skipping disk version. [ OK ]`)
}
} catch (err) {
localFilesSkipped++
WIKI.logger.warn(`Locale ${langFilename} not found on disk. Missing strings file. [ SKIPPED ]`)
}
}
if (localFilesSkipped > 0) {
WIKI.logger.warn(`${localFilesSkipped} locales were defined in the metadata file but not found on disk. [ SKIPPED ]`)
}
} catch (err) {
WIKI.logger.warn('Failed to load locales from disk: [ FAILED ]')
WIKI.logger.warn(err)
return false
}
}
async getLocales ({ cache = true } = {}) {
if (!WIKI.cache.has('locales') || !cache) {
const locales = await WIKI.db.select({
code: localesTable.code,
isRTL: localesTable.isRTL,
language: localesTable.language,
name: localesTable.name,
nativeName: localesTable.nativeName,
createdAt: localesTable.createdAt,
updatedAt: localesTable.updatedAt,
completeness: localesTable.completeness
}).from(localesTable).orderBy(localesTable.code)
WIKI.cache.set('locales', locales)
for (const locale of locales) {
WIKI.cache.set(`locale:${locale.code}`, locale)
}
}
return WIKI.cache.get('locales')
}
async getStrings (locale) {
const results = await WIKI.db.select({ strings: localesTable.strings }).from(localesTable).where(eq(localesTable.code, locale)).limit(1)
return results.length === 1 ? results[0].strings : []
}
async reloadCache () {
WIKI.logger.info('Reloading locales cache...')
const locales = await WIKI.models.locales.getLocales({ cache: false })
WIKI.logger.info(`Loaded ${locales.length} locales into cache [ OK ]`)
}
}
export const locales = new Locales()

@ -6,6 +6,13 @@ import { eq } from 'drizzle-orm'
* Sites model
*/
class Sites {
async getSiteById ({ id, forceReload = false }) {
if (forceReload) {
await WIKI.models.sites.reloadCache()
}
return WIKI.sites[id]
}
async getSiteByHostname ({ hostname, forceReload = false }) {
if (forceReload) {
await WIKI.models.sites.reloadCache()

@ -30,6 +30,7 @@
"lodash-es": "4.17.23",
"luxon": "3.7.2",
"nanoid": "5.1.6",
"node-cache": "5.1.2",
"pem-jwk": "2.0.0",
"pg": "8.17.2",
"pg-pubsub": "0.8.1",
@ -56,6 +57,7 @@
"resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.5.1.tgz",
"integrity": "sha512-EHaOXW0RYDKS5CFffnixdyRPak5ytiCtU7uXDcP/uiY+A6jFRwNGzzJBiznkCzvi5EYpY+YWinieqHb0oY916A==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure/abort-controller": "^2.1.2",
"@azure/core-auth": "^1.10.0",
@ -73,6 +75,7 @@
"resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
"integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
"license": "MIT",
"peer": true,
"dependencies": {
"tslib": "^2.6.2"
},
@ -85,6 +88,7 @@
"resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz",
"integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure/abort-controller": "^2.1.2",
"@azure/core-util": "^1.13.0",
@ -118,6 +122,7 @@
"resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.2.tgz",
"integrity": "sha512-Tf6ltdKzOJEgxZeWLCjMxrxbodB/ZeCbzzA1A2qHbhzAjzjHoBVSUeSl/baT/oHAxhc4qdqVaDKnc2+iE932gw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure/abort-controller": "^2.1.2"
},
@ -134,6 +139,7 @@
"resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz",
"integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure/abort-controller": "^2.0.0",
"@azure/core-util": "^1.2.0",
@ -149,6 +155,7 @@
"resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz",
"integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==",
"license": "MIT",
"peer": true,
"dependencies": {
"tslib": "^2.6.2"
},
@ -180,6 +187,7 @@
"resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz",
"integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"tslib": "^2.6.2"
},
@ -192,6 +200,7 @@
"resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz",
"integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure/abort-controller": "^2.1.2",
"@typespec/ts-http-runtime": "^0.3.0",
@ -206,6 +215,7 @@
"resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.0.tgz",
"integrity": "sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure/abort-controller": "^2.0.0",
"@azure/core-auth": "^1.9.0",
@ -228,6 +238,7 @@
"resolved": "https://registry.npmjs.org/@azure/keyvault-common/-/keyvault-common-2.0.0.tgz",
"integrity": "sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure/abort-controller": "^2.0.0",
"@azure/core-auth": "^1.3.0",
@ -247,6 +258,7 @@
"resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.10.0.tgz",
"integrity": "sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure-rest/core-client": "^2.3.3",
"@azure/abort-controller": "^2.1.2",
@ -270,6 +282,7 @@
"resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz",
"integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@typespec/ts-http-runtime": "^0.3.0",
"tslib": "^2.6.2"
@ -283,6 +296,7 @@
"resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.28.2.tgz",
"integrity": "sha512-6vYUMvs6kJxJgxaCmHn/F8VxjLHNh7i9wzfwPGf8kyBJ8Gg2yvBXx175Uev8LdrD1F5C4o7qHa2CC4IrhGE1XQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure/msal-common": "15.14.2"
},
@ -295,6 +309,7 @@
"resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.14.2.tgz",
"integrity": "sha512-n8RBJEUmd5QotoqbZfd+eGBkzuFI1KX6jw2b3WcpSyGjwmzoeI/Jb99opIBPHpb8y312NB+B6+FGi2ZVSR8yfA==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=0.8.0"
}
@ -304,6 +319,7 @@
"resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.7.tgz",
"integrity": "sha512-a+Xnrae+uwLnlw68bplS1X4kuJ9F/7K6afuMFyRkNIskhjgDezl5Fhrx+1pmAlDmC0VaaAxjRQMp1OmcqVwkIg==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure/msal-common": "15.14.2",
"jsonwebtoken": "^9.0.0",
@ -318,6 +334,7 @@
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"license": "MIT",
"peer": true,
"bin": {
"uuid": "dist/bin/uuid"
}
@ -1537,7 +1554,8 @@
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.7.0.tgz",
"integrity": "sha512-WBu4ULVVxySLLzK1Ppq+OdfP+adRS4ntmDQT915rzDJ++i95gc2jZkM5B6LWEAwN3lGXpfie3yPABozdD3K3Vg==",
"license": "BSD-3-Clause"
"license": "BSD-3-Clause",
"peer": true
},
"node_modules/@js-temporal/polyfill": {
"version": "0.5.1",
@ -1621,7 +1639,8 @@
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.5.0.tgz",
"integrity": "sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/@tybys/wasm-util": {
"version": "0.10.1",
@ -1672,6 +1691,7 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz",
"integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@ -1681,6 +1701,7 @@
"resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.23.tgz",
"integrity": "sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/node": "*"
}
@ -1730,7 +1751,6 @@
"integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.52.0",
"@typescript-eslint/types": "8.52.0",
@ -1947,6 +1967,7 @@
"resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.3.tgz",
"integrity": "sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==",
"license": "MIT",
"peer": true,
"dependencies": {
"http-proxy-agent": "^7.0.0",
"https-proxy-agent": "^7.0.0",
@ -2249,7 +2270,6 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@ -2272,6 +2292,7 @@
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
"integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">= 14"
}
@ -2677,6 +2698,7 @@
"resolved": "https://registry.npmjs.org/bl/-/bl-6.1.6.tgz",
"integrity": "sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/readable-stream": "^4.0.0",
"buffer": "^6.0.3",
@ -2742,7 +2764,8 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
"license": "BSD-3-Clause"
"license": "BSD-3-Clause",
"peer": true
},
"node_modules/buffer-from": {
"version": "1.1.2",
@ -2755,6 +2778,7 @@
"resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
"integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
"license": "MIT",
"peer": true,
"dependencies": {
"run-applescript": "^7.0.0"
},
@ -2887,6 +2911,15 @@
"node": ">= 6"
}
},
"node_modules/clone": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
"integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
"license": "MIT",
"engines": {
"node": ">=0.8"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@ -2912,6 +2945,7 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
"integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=16"
}
@ -3082,6 +3116,7 @@
"resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
"integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
"license": "MIT",
"peer": true,
"dependencies": {
"bundle-name": "^4.1.0",
"default-browser-id": "^5.0.0"
@ -3098,6 +3133,7 @@
"resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
"integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=18"
},
@ -3128,6 +3164,7 @@
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
"integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@ -3436,6 +3473,7 @@
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
"license": "Apache-2.0",
"peer": true,
"dependencies": {
"safe-buffer": "^5.0.1"
}
@ -3704,7 +3742,6 @@
"integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@ -3967,7 +4004,6 @@
"integrity": "sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@typescript-eslint/types": "^8.35.0",
"comment-parser": "^1.4.1",
@ -4970,6 +5006,7 @@
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
"integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"license": "MIT",
"peer": true,
"dependencies": {
"agent-base": "^7.1.0",
"debug": "^4.3.4"
@ -4983,6 +5020,7 @@
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
"integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"license": "MIT",
"peer": true,
"dependencies": {
"agent-base": "^7.1.2",
"debug": "4"
@ -4996,6 +5034,7 @@
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
"integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
"license": "MIT",
"peer": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
@ -5263,6 +5302,7 @@
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
"integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
"license": "MIT",
"peer": true,
"bin": {
"is-docker": "cli.js"
},
@ -5359,6 +5399,7 @@
"resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
"integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
"license": "MIT",
"peer": true,
"dependencies": {
"is-docker": "^3.0.0"
},
@ -5580,6 +5621,7 @@
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz",
"integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==",
"license": "MIT",
"peer": true,
"dependencies": {
"is-inside-container": "^1.0.0"
},
@ -5636,7 +5678,8 @@
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz",
"integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/js-stringify": {
"version": "1.0.2",
@ -5746,6 +5789,7 @@
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz",
"integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==",
"license": "MIT",
"peer": true,
"dependencies": {
"jws": "^4.0.1",
"lodash.includes": "^4.3.0",
@ -5794,6 +5838,7 @@
"resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz",
"integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==",
"license": "MIT",
"peer": true,
"dependencies": {
"buffer-equal-constant-time": "^1.0.1",
"ecdsa-sig-formatter": "1.0.11",
@ -5805,6 +5850,7 @@
"resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz",
"integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==",
"license": "MIT",
"peer": true,
"dependencies": {
"jwa": "^2.0.1",
"safe-buffer": "^5.0.1"
@ -5897,37 +5943,43 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
"integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/lodash.isboolean": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
"integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/lodash.isinteger": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
"integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/lodash.isnumber": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
"integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/lodash.isstring": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
"integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/lodash.merge": {
"version": "4.6.2",
@ -5940,7 +5992,8 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/loose-envify": {
"version": "1.4.0",
@ -6077,6 +6130,7 @@
"resolved": "https://registry.npmjs.org/mssql/-/mssql-11.0.1.tgz",
"integrity": "sha512-KlGNsugoT90enKlR8/G36H0kTxPthDhmtNUCwEHvgRza5Cjpjoj+P2X6eMpFUDN7pFrJZsKadL4x990G8RBE1w==",
"license": "MIT",
"peer": true,
"dependencies": {
"@tediousjs/connection-string": "^0.5.0",
"commander": "^11.0.0",
@ -6097,6 +6151,7 @@
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"license": "MIT",
"peer": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
@ -6109,6 +6164,7 @@
"resolved": "https://registry.npmjs.org/tedious/-/tedious-18.6.2.tgz",
"integrity": "sha512-g7jC56o3MzLkE3lHkaFe2ZdOVFBahq5bsB60/M4NYUbocw/MCrS89IOEQUFr+ba6pb8ZHczZ/VqCyYeYq0xBAg==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure/core-auth": "^1.7.2",
"@azure/identity": "^4.2.1",
@ -6163,7 +6219,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz",
"integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/natural-compare": {
"version": "1.4.0",
@ -6214,6 +6271,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/node-cache": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz",
"integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==",
"license": "MIT",
"dependencies": {
"clone": "2.x"
},
"engines": {
"node": ">= 8.0.0"
}
},
"node_modules/nodemon": {
"version": "3.1.11",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.11.tgz",
@ -6436,6 +6505,7 @@
"resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz",
"integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
"license": "MIT",
"peer": true,
"dependencies": {
"default-browser": "^5.2.1",
"define-lazy-prop": "^3.0.0",
@ -6619,7 +6689,6 @@
"resolved": "https://registry.npmjs.org/pg/-/pg-8.17.2.tgz",
"integrity": "sha512-vjbKdiBJRqzcYw1fNU5KuHyYvdJ1qpcQg1CeBrHFqV1pWgHeVR6j/+kX0E1AAXfyuLUGY1ICrN2ELKA/z2HWzw==",
"license": "MIT",
"peer": true,
"dependencies": {
"pg-connection-string": "^2.10.1",
"pg-pool": "^3.11.0",
@ -7307,6 +7376,7 @@
"resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz",
"integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=18"
},
@ -7646,7 +7716,8 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
"integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
"license": "BSD-3-Clause"
"license": "BSD-3-Clause",
"peer": true
},
"node_modules/stable-hash": {
"version": "0.0.5",
@ -7868,6 +7939,7 @@
"resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz",
"integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=8.0.0"
}
@ -7877,6 +7949,7 @@
"resolved": "https://registry.npmjs.org/tedious/-/tedious-19.2.1.tgz",
"integrity": "sha512-pk1Q16Yl62iocuQB+RWbg6rFUFkIyzqOFQ6NfysCltRvQqKwfurgj8v/f2X+CKvDhSL4IJ0cCOfCHDg9PWEEYA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@azure/core-auth": "^1.7.2",
"@azure/identity": "^4.2.1",
@ -8181,6 +8254,7 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@ -8243,7 +8317,8 @@
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/unrs-resolver": {
"version": "1.11.1",
@ -8468,6 +8543,7 @@
"resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz",
"integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
"license": "MIT",
"peer": true,
"dependencies": {
"is-wsl": "^3.1.0"
},

@ -59,6 +59,7 @@
"lodash-es": "4.17.23",
"luxon": "3.7.2",
"nanoid": "5.1.6",
"node-cache": "5.1.2",
"pem-jwk": "2.0.0",
"pg": "8.17.2",
"pg-pubsub": "0.8.1",

@ -0,0 +1,9 @@
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

@ -0,0 +1,42 @@
.DS_Store
.thumbs.db
node_modules
# Quasar core related directories
.quasar
/dist
/quasar.config.*.temporary.compiled*
# local .env files
.env.local*
# Cordova related directories and files
/src-cordova/node_modules
/src-cordova/platforms
/src-cordova/plugins
/src-cordova/www
# Capacitor related directories and files
/src-capacitor/www
/src-capacitor/node_modules
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
# Yarn
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

@ -0,0 +1,4 @@
audit = false
fund = false
save-exact = true
save-prefix = ""

@ -0,0 +1,14 @@
{
"recommendations": [
"dbaeumer.vscode-eslint",
"editorconfig.editorconfig",
"johnsoncodehk.volar",
"wayou.vscode-todo-highlight"
],
"unwantedRecommendations": [
"octref.vetur",
"hookyqr.beautify",
"dbaeumer.jshint",
"ms-vscode.vscode-typescript-tslint-plugin"
]
}

@ -0,0 +1,16 @@
{
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": true,
"editor.formatOnSave": true,
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
"editor.codeActionsOnSave": [
"source.fixAll.eslint"
],
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"vue"
],
"i18n-ally.localesPaths": "src/i18n/locales"
}

@ -0,0 +1,73 @@
import js from '@eslint/js'
import neostandard from 'neostandard'
import pluginVue from 'eslint-plugin-vue'
import pluginVuePug from 'eslint-plugin-vue-pug'
import vueParser from 'vue-eslint-parser'
import { FlatCompat } from '@eslint/eslintrc'
const compat = new FlatCompat()
export default [
js.configs.recommended,
...pluginVue.configs['flat/essential'],
...pluginVuePug.configs['flat/recommended'],
...neostandard(),
{
ignores: [
'/dist',
'/.quasar',
'/node_modules'
],
languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
parser: vueParser,
globals: {
__statics: 'readonly',
__QUASAR_SSR__: 'readonly',
__QUASAR_SSR_SERVER__: 'readonly',
__QUASAR_SSR_CLIENT__: 'readonly',
__QUASAR_SSR_PWA__: 'readonly',
process: 'readonly',
Capacitor: 'readonly',
chrome: 'readonly',
APOLLO_CLIENT: 'readonly',
EVENT_BUS: 'readonly'
}
},
rules: {
// allow async-await
'generator-star-spacing': 'off',
// allow paren-less arrow functions
'arrow-parens': 'off',
'one-var': 'off',
'no-void': 'off',
'multiline-ternary': 'off',
'import/first': 'off',
'import/named': 'error',
'import/namespace': 'error',
'import/default': 'error',
'import/export': 'error',
'import/extensions': 'off',
'import/no-unresolved': 'off',
'import/no-extraneous-dependencies': 'off',
'prefer-promise-reject-errors': 'off',
'no-unused-vars': 'off',
'vue/multi-word-component-names': 'off',
// allow debugger during development only
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
// disable bogus rules
'vue/valid-template-root': 'off',
'vue/no-parsing-error': 'off',
'vue-pug/no-parsing-error': 'off',
'vue/valid-v-for': 'off',
'vue/html-quotes': ['warn', 'single'],
'vue/max-attributes-per-line': 'off'
}
}
]

@ -0,0 +1,75 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/_site/favicon" />
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<title>Wiki.js</title>
<!--preload-links-->
<link href="/_assets/fonts/roboto/roboto.css" rel="stylesheet" />
<style type="text/css">
@keyframes initspinner {
to { transform: rotate(360deg); }
}
.init-loading {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(255,255,255,.75);
z-index: 2000000000;
backdrop-filter: blur(10px);
}
.body--dark .init-loading {
background-color: rgba(0,0,0,.75);
}
.init-loading:before {
content: '';
box-sizing: border-box;
position: absolute;
top: 50%;
left: 50%;
width: 50px;
height: 50px;
margin-top: -25px;
margin-left: -25px;
border-radius: 50%;
border-top: 2px solid #1976D2;
border-right: 2px solid transparent;
animation: initspinner .6s linear infinite;
z-index: 2000000000;
}
</style>
<noscript>
<style type="text/css">
.init-loading {
display: none !important;
}
.q-drawer-container {
display: none !important;
}
.scroll.relative-position {
position: static !important;
}
.scroll.relative-position > .absolute {
position: relative !important;
}
</style>
</noscript>
</head>
<body class="wiki-root">
<div class="init-loading"></div>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

@ -0,0 +1,46 @@
{
"compilerOptions": {
"baseUrl": ".",
"jsx": "preserve",
"paths": {
"src/*": [
"src/*"
],
"app/*": [
"*"
],
"components/*": [
"src/components/*"
],
"layouts/*": [
"src/layouts/*"
],
"pages/*": [
"src/pages/*"
],
"assets/*": [
"src/assets/*"
],
"boot/*": [
"src/boot/*"
],
"stores/*": [
"src/stores/*"
],
"vue$": [
"node_modules/vue/dist/vue.runtime.esm-bundler.js"
]
}
},
"exclude": [
"dist",
".quasar",
"node_modules"
],
"vueCompilerOptions": {
"target": 3,
"plugins": [
"@vue/language-plugin-pug"
]
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,99 @@
{
"name": "wiki-ux",
"version": "3.0.0",
"description": "The most powerful and extensible open source Wiki software",
"productName": "Wiki.js",
"author": "Nicolas Giard <nick@requarks.io>",
"private": true,
"type": "module",
"scripts": {
"dev": "vite --force",
"build": "NODE_OPTIONS=--max-old-space-size=8192 vite build --emptyOutDir",
"ncu": "ncu -i",
"ncu-u": "ncu -u"
},
"dependencies": {
"@lezer/common": "1.5.1",
"@mdi/font": "7.4.47",
"@quasar/extras": "1.17.0",
"@simplewebauthn/browser": "13.2.2",
"@tanstack/vue-query": "5.92.9",
"@xterm/xterm": "6.0.0",
"browser-fs-access": "0.38.0",
"clipboard": "2.0.11",
"codemirror": "5.65.11",
"codemirror-asciidoc": "1.0.4",
"dependency-graph": "1.0.0",
"filesize": "11.0.13",
"filesize-parser": "1.5.1",
"fuse.js": "7.1.0",
"highlight.js": "11.11.1",
"js-cookie": "3.0.5",
"jwt-decode": "4.0.0",
"katex": "0.16.33",
"ky": "1.14.3",
"lodash-es": "4.17.23",
"lowlight": "3.3.0",
"luxon": "3.7.2",
"markdown-it": "14.1.1",
"markdown-it-abbr": "2.0.0",
"markdown-it-attrs": "4.3.1",
"markdown-it-decorate": "1.2.2",
"markdown-it-emoji": "3.0.0",
"markdown-it-expand-tabs": "1.0.13",
"markdown-it-footnote": "4.0.0",
"markdown-it-imsize": "2.0.1",
"markdown-it-mark": "4.0.0",
"markdown-it-mdc": "0.2.12",
"markdown-it-multimd-table": "4.2.3",
"markdown-it-sub": "2.0.0",
"markdown-it-sup": "2.0.0",
"markdown-it-task-lists": "2.1.1",
"mitt": "3.0.1",
"monaco-editor": "0.55.1",
"pako": "2.1.0",
"pinia": "3.0.4",
"prosemirror-commands": "1.7.1",
"prosemirror-history": "1.5.0",
"prosemirror-keymap": "1.2.3",
"prosemirror-model": "1.25.4",
"prosemirror-schema-list": "1.5.1",
"prosemirror-state": "1.4.4",
"prosemirror-transform": "1.11.0",
"prosemirror-view": "1.41.6",
"pug": "3.0.3",
"quasar": "2.18.6",
"slugify": "1.6.6",
"socket.io-client": "4.8.3",
"sortablejs": "1.15.7",
"sortablejs-vue3": "1.3.0",
"tabulator-tables": "6.3.1",
"tippy.js": "6.3.7",
"twemoji": "14.0.2",
"typescript": "5.9.3",
"uuid": "13.0.0",
"v-network-graph": "0.9.22",
"vue": "3.5.29",
"vue-i18n": "11.2.8",
"vue-router": "5.0.3",
"vue3-otp-input": "0.5.40",
"vuedraggable": "4.1.0",
"zxcvbn": "4.4.2"
},
"devDependencies": {
"@intlify/unplugin-vue-i18n": "11.0.7",
"@quasar/app-vite": "2.4.1",
"@quasar/vite-plugin": "1.10.0",
"@types/lodash": "4.17.24",
"@vue/language-plugin-pug": "3.2.5",
"autoprefixer": "10.4.27",
"browserlist": "latest",
"npm-check-updates": "19.6.3",
"sass": "1.97.3",
"vite-plugin-vue-devtools": "8.0.6"
},
"engines": {
"node": ">= 18.0",
"npm": ">= 6.13.4"
}
}

@ -0,0 +1,29 @@
import autoprefixer from 'autoprefixer'
/* eslint-disable */
// https://github.com/michael-ciniawsky/postcss-load-config
export default {
plugins: [
// https://github.com/postcss/autoprefixer
autoprefixer({
overrideBrowserslist: [
'last 4 Chrome versions',
'last 4 Firefox versions',
'last 4 Edge versions',
'last 4 Safari versions',
'last 4 Android versions',
'last 4 ChromeAndroid versions',
'last 4 FirefoxAndroid versions',
'last 4 iOS versions'
]
})
// https://github.com/elchininet/postcss-rtlcss
// If you want to support RTL css, then
// 1. yarn/npm install postcss-rtlcss
// 2. optionally set quasar.config.js > framework > lang to an RTL language
// 3. uncomment the following line:
// require('postcss-rtlcss')
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

@ -0,0 +1,40 @@
/* roboto-300 - vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 300;
src: local(''),
url('/_assets/fonts/roboto/roboto-all-300.woff2') format('woff2')
}
/* roboto-regular - vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local(''),
url('/_assets/fonts/roboto/roboto-all-regular.woff2') format('woff2')
}
/* roboto-500 - vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
src: local(''),
url('/_assets/fonts/roboto/roboto-all-500.woff2') format('woff2')
}
/* roboto-700 - vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
src: local(''),
url('/_assets/fonts/roboto/roboto-all-700.woff2') format('woff2')
}
/* roboto-900 - vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 900;
src: local(''),
url('/_assets/fonts/roboto/roboto-all-900.woff2') format('woff2')
}

@ -0,0 +1,39 @@
/* cyrillic-ext */
@font-face {
font-family: 'Rubik';
font-display: swap;
src: url(/_assets/fonts/rubik/rubik-variable-cyrillic-ext.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Rubik';
font-display: swap;
src: url(/_assets/fonts/rubik/rubik-variable-cyrillic.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* hebrew */
@font-face {
font-family: 'Rubik';
font-display: swap;
src: url(/_assets/fonts/rubik/rubik-variable-hebrew.woff2) format('woff2');
unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
}
/* latin-ext */
@font-face {
font-family: 'Rubik';
font-display: swap;
src: url(/_assets/fonts/rubik/rubik-variable-latin-ext.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Rubik';
font-display: swap;
src: url(/_assets/fonts/rubik/rubik-variable-latin.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
body.wiki-root {
font-family: 'Rubik', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="100px" height="100px"><path d="M 18 27 A 1.0001 1.0001 0 0 0 17 28 L 17 75 C 17 80.511334 21.488666 85 27 85 L 72 85 C 77.511334 85 82 80.511334 82 75 L 82 28 A 1.0001 1.0001 0 0 0 81 27 L 18 27 z M 19 29 L 49 29 L 49 36 L 39.5 36 C 38.125015 36 37 37.125015 37 38.5 L 37 40.5 C 37 41.874985 38.125015 43 39.5 43 L 49 43 L 49 78 L 30.5 78 C 26.904219 78 24 75.095781 24 71.5 L 24 32.5 A 0.50005 0.50005 0 0 0 23.492188 31.992188 A 0.50005 0.50005 0 0 0 23 32.5 L 23 71.5 C 23 75.636219 26.363781 79 30.5 79 L 49.419922 79 A 0.50005 0.50005 0 0 0 49.582031 79 L 68.5 79 C 72.636219 79 76 75.636219 76 71.5 L 76 43.5 A 0.50005 0.50005 0 1 0 75 43.5 L 75 71.5 C 75 75.095781 72.095781 78 68.5 78 L 50 78 L 50 43 L 59.5 43 C 60.874985 43 62 41.874985 62 40.5 L 62 38.5 C 62 37.125015 60.874985 36 59.5 36 L 50 36 L 50 29 L 80 29 L 80 75 C 80 79.430666 76.430666 83 72 83 L 27 83 C 22.569334 83 19 79.430666 19 75 L 19 29 z M 75.492188 31.992188 A 0.50005 0.50005 0 0 0 75 32.5 L 75 38.5 A 0.50005 0.50005 0 1 0 76 38.5 L 76 32.5 A 0.50005 0.50005 0 0 0 75.492188 31.992188 z M 39.5 37 L 59.5 37 C 60.335015 37 61 37.664985 61 38.5 L 61 40.5 C 61 41.335015 60.335015 42 59.5 42 L 49.580078 42 A 0.50005 0.50005 0 0 0 49.417969 42 L 39.5 42 C 38.664985 42 38 41.335015 38 40.5 L 38 38.5 C 38 37.664985 38.664985 37 39.5 37 z M 31.492188 60.992188 A 0.50005 0.50005 0 0 0 31.097656 61.195312 L 29.146484 63.146484 A 0.50005 0.50005 0 1 0 29.853516 63.853516 L 31 62.707031 L 31 68.5 A 0.50005 0.50005 0 1 0 32 68.5 L 32 62.707031 L 33.146484 63.853516 A 0.50005 0.50005 0 1 0 33.853516 63.146484 L 31.898438 61.191406 A 0.50005 0.50005 0 0 0 31.492188 60.992188 z M 38.492188 60.992188 A 0.50005 0.50005 0 0 0 38.097656 61.195312 L 36.146484 63.146484 A 0.50005 0.50005 0 1 0 36.853516 63.853516 L 38 62.707031 L 38 68.5 A 0.50005 0.50005 0 1 0 39 68.5 L 39 62.707031 L 40.146484 63.853516 A 0.50005 0.50005 0 1 0 40.853516 63.146484 L 38.898438 61.191406 A 0.50005 0.50005 0 0 0 38.492188 60.992188 z M 28.5 70 A 0.50005 0.50005 0 1 0 28.5 71 L 41.5 71 A 0.50005 0.50005 0 1 0 41.5 70 L 28.5 70 z"/></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#ff9100" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#ffe0b2" d="M38.5 14L29 14 29 4.5zM24.022 24.152L20.878 33h-2.044l3.158-8.359H18v-1.594h6.022V24.152zM27.461 31.406h2.926V33h-5.223v-1.199l2.857-4.584h-2.789v-1.613h5.113v1.17L27.461 31.406z"/></svg>

After

Width:  |  Height:  |  Size: 353 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#FFC107" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#FFF3E0" d="M38.5 14L29 14 29 4.5z"/><path fill="#C47205" d="M17.4 30.963h-2.741L14.126 33H12l3.11-9.953h1.839L20.08 33h-2.146L17.4 30.963zM15.097 29.288h1.859l-.93-3.548L15.097 29.288zM25.761 30.963H23.02L22.486 33H20.36l3.11-9.953h1.839L28.44 33h-2.146L25.761 30.963zM23.457 29.288h1.859l-.93-3.548L23.457 29.288zM35.974 29.685c-.05 1.135-.369 1.994-.957 2.577s-1.417.875-2.488.875c-1.126 0-1.988-.37-2.587-1.11-.6-.741-.899-1.797-.899-3.169v-1.675c0-1.367.31-2.421.93-3.162.62-.74 1.481-1.11 2.584-1.11 1.085 0 1.908.303 2.472.909.563.606.883 1.477.96 2.611h-2.017c-.018-.702-.127-1.186-.324-1.453-.199-.266-.563-.399-1.091-.399-.538 0-.919.188-1.142.563-.223.377-.342.995-.355 1.856v1.88c0 .989.11 1.668.332 2.037.221.369.6.554 1.138.554.528 0 .894-.129 1.094-.386.2-.258.314-.724.342-1.398H35.974z"/></svg>

After

Width:  |  Height:  |  Size: 965 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#FFA000" d="M41 45L9 45 9 3 31 3 41 13z"/><path fill="#FFF3E0" d="M39.5 14L30 14 30 4.5z"/><path fill="#FFF" d="M24.292 30.963h-2.741L21.018 33h-2.126l3.11-9.953h1.839L26.972 33h-2.146L24.292 30.963zM21.988 29.288h1.859l-.93-3.548L21.988 29.288zM30 33h-2v-9.953h2V33z"/></svg>

After

Width:  |  Height:  |  Size: 376 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#ff80ab" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#fce4ec" d="M38.5 14L29 14 29 4.5z"/><path fill="#e91e63" d="M17.217 31.054h-2.741l-.533 2.037h-2.126l3.11-9.953h1.839l3.131 9.953H17.75L17.217 31.054zM14.913 29.379h1.859l-.93-3.548L14.913 29.379zM32.152 29.249l-.793.998v2.844h-2.01v-9.953h2.01v4.341l.636-1.073 1.853-3.268h2.461l-2.851 4.375 2.898 5.578h-2.386L32.152 29.249zM23.396 29.591v3.5h-2.01v-9.953h3.391c2.375 0 3.233 1.879 3.233 3.295 0 2.511-1.926 3.158-3.233 3.158H23.396zM23.396 27.916h1.381c1.187 0 1.203-1.256 1.203-1.47s-.057-1.634-1.203-1.634h-1.381V27.916z"/></svg>

After

Width:  |  Height:  |  Size: 689 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#90caf9" d="M8 3H40V45H8z"/><path fill="#1976d2" d="M22 21H26V23H22zM22 15H26V17H22zM22 18H26V20H22zM22 24H26V26H22zM22 9H26V11H22zM22 3H26V5H22zM22 6H26V8H22zM22 12H26V14H22z"/><path fill="#3f51b5" d="M26,27h-4c0,3-2,6-2,8c0,2.209,1.791,4,4,4s4-1.791,4-4C28,33,26,30,26,27z M24,37c-1.104,0-2-0.895-2-2s0.896-2,2-2s2,0.895,2,2S25.104,37,24,37z"/></svg>

After

Width:  |  Height:  |  Size: 452 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="none" d="M204 0H252V48H204z"/><path fill="#90CAF9" d="M244 45L212 45 212 3 234 3 244 13z"/><path fill="#E1F5FE" d="M242.5 14L233 14 233 4.5z"/><path fill="#1976D2" d="M227 26A4 4 0 1 0 227 34A4 4 0 1 0 227 26Z"/><path fill="#1976D2" d="M234 21L229 19 229 30 231 30 231 22.9 234 24z"/><path fill="#90CAF9" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E1F5FE" d="M38.5 14L29 14 29 4.5z"/><g><path fill="#1976D2" d="M23 26A4 4 0 1 0 23 34A4 4 0 1 0 23 26Z"/><path fill="#1976D2" d="M30 21L25 19 25 30 27 30 27 22.9 30 24z"/></g></svg>

After

Width:  |  Height:  |  Size: 632 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#F44336" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#FFEBEE" d="M38.5 14L29 14 29 4.5zM19.551 30.963H16.81L16.276 33H14.15l3.11-9.953H19.1L22.23 33h-2.146L19.551 30.963zM17.247 29.288h1.859l-.93-3.548L17.247 29.288zM25.874 30.266l1.675-7.219h2.242L26.92 33h-2.092l-2.851-9.953h2.229L25.874 30.266zM32.826 33h-2.01v-9.953h2.01V33z"/></svg>

After

Width:  |  Height:  |  Size: 440 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#fff" d="M25 37L24 37 24 32 23.5 32 23.5 31 25 31zM18.5 37c-.8 0-1.5-.7-1.5-1.5v-3c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5v3C20 36.3 19.3 37 18.5 37zM18.5 32c-.3 0-.5.2-.5.5v3c0 .3.2.5.5.5s.5-.2.5-.5v-3C19 32.2 18.8 32 18.5 32zM12.5 37c-.8 0-1.5-.7-1.5-1.5v-3c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5v3C14 36.3 13.3 37 12.5 37zM12.5 32c-.3 0-.5.2-.5.5v3c0 .3.2.5.5.5s.5-.2.5-.5v-3C13 32.2 12.8 32 12.5 32zM30 37L29 37 29 32 28.5 32 28.5 31 30 31zM34.5 37c-.8 0-1.5-.7-1.5-1.5v-3c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5v3C36 36.3 35.3 37 34.5 37zM34.5 32c-.3 0-.5.2-.5.5v3c0 .3.2.5.5.5s.5-.2.5-.5v-3C35 32.2 34.8 32 34.5 32z"/><path fill="#8ac8fd" d="M41,45H9V3h22l10,10V45z"/><path fill="#dff5ff" d="M39.5,14H30V4.5L39.5,14z"/><path fill="#0072c3" d="M19 29h-1.5v-7H16v-1l3-.5V29zM33.5 40H32v-7h-1.5v-1l3-.5V40zM25 23.6c0-.7-.1-1.2-.3-1.5-.2-.3-.6-.5-1-.5s-.8.2-1 .5c-.2.3-.3.8-.3 1.5v2.3c0 .7.1 1.2.3 1.5s.6.5 1 .5c.4 0 .8-.2 1-.5.2-.3.3-.8.3-1.5V23.6zM26.4 25.7c0 1.1-.2 1.9-.7 2.5-.5.6-1.1.8-2 .8-.8 0-1.5-.3-2-.8-.5-.6-.7-1.4-.7-2.5v-1.9c0-1.1.2-1.9.7-2.5.5-.6 1.1-.9 2-.9.8 0 1.5.3 2 .9.5.6.7 1.4.7 2.5V25.7zM32.2 23.4c0-.7-.1-1.2-.4-1.6s-.6-.5-1-.5c-.4 0-.8.2-1 .5-.2.3-.3.9-.3 1.6v2.4c0 .7.1 1.2.4 1.6.2.3.6.5 1 .5s.8-.2 1-.5.3-.9.3-1.6V23.4zM33.6 25.6c0 1.1-.3 2-.8 2.5s-1.2.9-2 .9c-.9 0-1.5-.3-2.1-.9S28 26.7 28 25.6v-1.9c0-1.1.3-2 .8-2.5s1.2-.9 2-.9c.9 0 1.5.3 2 .9s.8 1.4.8 2.5V25.6zM20.2 34.4c0-.7-.1-1.2-.4-1.6-.2-.3-.6-.5-1-.5s-.8.2-1 .5c-.2.3-.3.9-.3 1.6v2.4c0 .7.1 1.2.4 1.6.2.3.6.5 1 .5s.8-.2 1-.5.3-.9.3-1.6V34.4zM21.6 36.6c0 1.1-.3 2-.8 2.5s-1.2.9-2 .9c-.9 0-1.5-.3-2.1-.9S16 37.7 16 36.6v-1.9c0-1.1.3-2 .8-2.5s1.2-.9 2-.9c.9 0 1.5.3 2 .9s.8 1.4.8 2.5V36.6zM27.6 34.4c0-.7-.1-1.2-.4-1.6-.2-.3-.6-.5-1-.5s-.8.2-1 .5c-.2.3-.3.9-.3 1.6v2.4c0 .7.1 1.2.4 1.6.2.3.6.5 1 .5s.8-.2 1-.5.3-.9.3-1.6V34.4zM29 36.6c0 1.1-.3 2-.8 2.5s-1.2.9-2 .9c-.9 0-1.5-.3-2.1-.9s-.8-1.4-.8-2.5v-1.9c0-1.1.3-2 .8-2.5s1.2-.9 2-.9c.9 0 1.5.3 2 .9s.8 1.4.8 2.5V36.6z"/></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#546E7A" d="M5 22H7V26H5zM41 22H43V26H41z"/><path fill="#FFC107" d="M40,19H8v20c0,2.209,1.791,4,4,4h24c2.209,0,4-1.791,4-4V19z"/><path fill="#FFECB3" d="M36,31H12v-2c0,0,0-1,1-1s21,0,22,0s1,1,1,1V31z"/><path fill="#37474F" d="M10,19v1c0,1.104,0.896,2,2,2h24c1.104,0,2-0.896,2-2v-1H10z"/><path fill="#37474F" d="M28.619 19h-9.238C17.924 19.733 17 20.804 17 22c0 2.209 3.134 4 7 4s7-1.791 7-4C31 20.804 30.076 19.733 28.619 19zM36 38c0 1.104-.896 2-2 2H14c-1.104 0-2-.896-2-2v-7h24V38zM7 23H8V25H7zM40 23H41V25H40z"/><g><path fill="#90CAF9" d="M12 5H36V20H12z"/><path fill="#90CAF9" d="M24 18.57A3 1.715 0 1 0 24 22A3 1.715 0 1 0 24 18.57Z"/></g><g><path fill="#1976D2" d="M16 9H32V11H16zM16 13H28V15H16z"/></g><g><path fill="#B0BEC5" d="M15 33A1 1 0 1 0 15 35 1 1 0 1 0 15 33zM15 36A1 1 0 1 0 15 38 1 1 0 1 0 15 36zM33 33A1 1 0 1 0 33 35 1 1 0 1 0 33 33zM33 36A1 1 0 1 0 33 38 1 1 0 1 0 33 36zM18 33A1 1 0 1 0 18 35 1 1 0 1 0 18 33zM21 33A1 1 0 1 0 21 35 1 1 0 1 0 21 33zM24 33A1 1 0 1 0 24 35 1 1 0 1 0 24 33zM27 33A1 1 0 1 0 27 35 1 1 0 1 0 27 33zM30 33A1 1 0 1 0 30 35 1 1 0 1 0 30 33zM31 37c0 .553-.447 1-1 1H18c-.552 0-1-.447-1-1l0 0c0-.553.448-1 1-1h12C30.553 36 31 36.447 31 37L31 37z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#90caf9" d="M24,4C12.954,4,4,12.955,4,24s8.954,20,20,20s20-8.955,20-20S35.046,4,24,4z M24,27.684c-2.035,0-3.684-1.649-3.684-3.684s1.649-3.684,3.684-3.684s3.684,1.649,3.684,3.684S26.035,27.684,24,27.684z"/><path fill="#cfe8f9" d="M28.022 22.645l10.902-8.699c-1.326-1.963-3.033-3.645-5.008-4.955l-8.759 10.925C26.505 20.3 27.574 21.323 28.022 22.645zM19.934 25.214L8.999 33.927c1.333 2.008 3.057 3.734 5.065 5.068l8.665-10.946C21.385 27.623 20.339 26.565 19.934 25.214z"/><path fill="#1e88e5" d="M24,18c-3.314,0-6,2.688-6,6s2.686,6,6,6c3.313,0,6-2.688,6-6S27.313,18,24,18z M24,26c-1.104,0-2-0.895-2-2s0.896-2,2-2s2,0.895,2,2S25.104,26,24,26z"/></svg>

After

Width:  |  Height:  |  Size: 748 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#90CAF9" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E1F5FE" d="M38.5 14L29 14 29 4.5z"/><path fill="#1976D2" d="M18.3,34.7L11.6,28l6.7-6.7l1.4,1.4L14.4,28l5.3,5.3L18.3,34.7z M36.4,28l-6.7-6.7l-1.4,1.4l5.3,5.3l-5.3,5.3l1.4,1.4L36.4,28z M27.9,16.6L26,16l-5.9,23.4L22,40L27.9,16.6z"/></svg>

After

Width:  |  Height:  |  Size: 390 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#4DB6AC" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E0F2F1" d="M38.5 14L29 14 29 4.5z"/><path fill="#00695C" d="M19.932 29.685c-.05 1.135-.369 1.994-.957 2.577s-1.417.875-2.488.875c-1.125 0-1.988-.37-2.587-1.11C13.3 31.285 13 30.229 13 28.857v-1.675c0-1.367.31-2.421.93-3.162.62-.74 1.481-1.11 2.584-1.11 1.084 0 1.908.303 2.471.909s.883 1.477.96 2.611h-2.017c-.018-.702-.126-1.186-.325-1.453-.198-.266-.562-.399-1.09-.399-.538 0-.918.188-1.142.563-.223.377-.342.995-.355 1.856v1.88c0 .989.11 1.668.332 2.037s.601.554 1.138.554c.529 0 .893-.129 1.094-.386.201-.258.314-.724.342-1.398H19.932zM25.373 30.389c0-.405-.104-.712-.311-.919-.208-.208-.585-.423-1.132-.646-.998-.378-1.716-.821-2.153-1.33-.438-.508-.656-1.108-.656-1.801 0-.839.297-1.512.892-2.02.595-.509 1.35-.763 2.266-.763.611 0 1.155.129 1.634.386.479.258.847.621 1.104 1.091.257.47.386 1.003.386 1.6H25.4c0-.465-.1-.819-.297-1.063-.199-.243-.485-.365-.858-.365-.351 0-.625.104-.82.311-.196.208-.294.487-.294.838 0 .273.109.521.328.742.219.221.606.449 1.162.687.971.351 1.676.781 2.115 1.292.44.511.66 1.16.66 1.948 0 .866-.275 1.543-.827 2.03s-1.302.731-2.249.731c-.643 0-1.228-.132-1.757-.396s-.942-.643-1.241-1.135-.448-1.073-.448-1.743h2.017c0 .574.112.991.335 1.251s.588.39 1.094.39C25.021 31.503 25.373 31.132 25.373 30.389zM32.934 30.389c0-.405-.104-.712-.311-.919-.208-.208-.585-.423-1.132-.646-.998-.378-1.716-.821-2.153-1.33-.438-.508-.656-1.108-.656-1.801 0-.839.297-1.512.893-2.02.594-.509 1.35-.763 2.266-.763.611 0 1.155.129 1.634.386.479.258.847.621 1.104 1.091.257.47.386 1.003.386 1.6h-2.003c0-.465-.1-.819-.297-1.063-.199-.243-.484-.365-.858-.365-.351 0-.624.104-.82.311-.196.208-.294.487-.294.838 0 .273.109.521.328.742.219.221.605.449 1.162.687.971.351 1.676.781 2.115 1.292.44.511.66 1.16.66 1.948 0 .866-.275 1.543-.827 2.03s-1.302.731-2.249.731c-.643 0-1.229-.132-1.757-.396s-.942-.643-1.241-1.135c-.298-.492-.447-1.073-.447-1.743h2.017c0 .574.112.991.335 1.251s.588.39 1.094.39C32.582 31.503 32.934 31.132 32.934 30.389z"/></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#4DB6AC" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E0F2F1" d="M38.5 14L29 14 29 4.5z"/><path fill="#00695C" d="M20.045 29.685c-.05 1.135-.369 1.994-.957 2.577s-1.417.875-2.488.875c-1.125 0-1.988-.37-2.587-1.11-.599-.741-.899-1.797-.899-3.169v-1.675c0-1.367.31-2.421.93-3.162.62-.74 1.481-1.11 2.584-1.11 1.084 0 1.908.303 2.471.909s.883 1.477.96 2.611h-2.017c-.018-.702-.126-1.186-.325-1.453-.198-.266-.562-.399-1.09-.399-.538 0-.918.188-1.142.563-.223.377-.342.995-.355 1.856v1.88c0 .989.11 1.668.332 2.037s.601.554 1.138.554c.529 0 .893-.129 1.094-.386.201-.258.314-.724.342-1.398H20.045zM25.486 30.389c0-.405-.104-.712-.311-.919-.208-.208-.585-.423-1.132-.646-.998-.378-1.716-.821-2.153-1.33-.438-.508-.656-1.108-.656-1.801 0-.839.297-1.512.892-2.02.595-.509 1.35-.763 2.266-.763.611 0 1.155.129 1.634.386.479.258.847.621 1.104 1.091.257.47.386 1.003.386 1.6h-2.003c0-.465-.1-.819-.297-1.063-.199-.243-.485-.365-.858-.365-.351 0-.625.104-.82.311-.196.208-.294.487-.294.838 0 .273.109.521.328.742.219.221.606.449 1.162.687.971.351 1.676.781 2.115 1.292.44.511.66 1.16.66 1.948 0 .866-.275 1.543-.827 2.03s-1.302.731-2.249.731c-.643 0-1.228-.132-1.757-.396s-.942-.643-1.241-1.135-.448-1.073-.448-1.743h2.017c0 .574.112.991.335 1.251s.588.39 1.094.39C25.135 31.503 25.486 31.132 25.486 30.389zM32.083 30.266l1.675-7.219H36L33.129 33h-2.092l-2.851-9.953h2.229L32.083 30.266z"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#64B5F6" d="M42,37c0,2.762-2.238,5-5,5H11c-2.761,0-5-2.238-5-5V11c0-2.762,2.239-5,5-5h26c2.762,0,5,2.238,5,5V37z"/><path fill="#E3F2FD" d="M17 18h-6c-.552 0-1-.448-1-1v-6c0-.552.448-1 1-1h6c.552 0 1 .448 1 1v6C18 17.552 17.552 18 17 18M37 18h-6c-.552 0-1-.448-1-1v-6c0-.552.448-1 1-1h6c.552 0 1 .448 1 1v6C38 17.552 37.552 18 37 18M27 18h-6c-.552 0-1-.448-1-1v-6c0-.552.448-1 1-1h6c.552 0 1 .448 1 1v6C28 17.552 27.552 18 27 18"/><path fill="#E3F2FD" d="M17 18h-6c-.552 0-1-.448-1-1v-6c0-.552.448-1 1-1h6c.552 0 1 .448 1 1v6C18 17.552 17.552 18 17 18M37 28h-6c-.552 0-1-.448-1-1v-6c0-.552.448-1 1-1h6c.552 0 1 .448 1 1v6C38 27.552 37.552 28 37 28M27 28h-6c-.552 0-1-.448-1-1v-6c0-.552.448-1 1-1h6c.552 0 1 .448 1 1v6C28 27.552 27.552 28 27 28M17 28h-6c-.552 0-1-.448-1-1v-6c0-.552.448-1 1-1h6c.552 0 1 .448 1 1v6C18 27.552 17.552 28 17 28M37 38h-6c-.552 0-1-.448-1-1v-6c0-.552.448-1 1-1h6c.552 0 1 .448 1 1v6C38 37.552 37.552 38 37 38M27 38h-6c-.552 0-1-.448-1-1v-6c0-.552.448-1 1-1h6c.552 0 1 .448 1 1v6C28 37.552 27.552 38 27 38M17 38h-6c-.552 0-1-.448-1-1v-6c0-.552.448-1 1-1h6c.552 0 1 .448 1 1v6C18 37.552 17.552 38 17 38"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#FFC107" d="M37,5H11l-5,7v28c0,1.657,1.343,3,3,3h30c1.656,0,3-1.343,3-3v-5V12L37,5z"/><path fill="#0097A7" d="M33,30c0,4.971-4.029,9-9,9c-4.971,0-9-4.029-9-9s4.029-9,9-9C28.971,21,33,25.029,33,30"/><path fill="#EEE" d="M30.631,30c0,3.664-2.969,6.632-6.631,6.632c-3.663,0-6.632-2.968-6.632-6.632c0-3.663,2.969-6.631,6.632-6.631C27.662,23.369,30.631,26.337,30.631,30"/><path d="M25 29.563L25 25 23 25 23 29.609 23 30.438 23.61 31 25.996 33.119 27.352 31.648z"/><path fill="#DB8509" d="M12.029,7l-3.571,5H18c0,3.314,2.687,6,6,6c3.313,0,6-2.686,6-6h9.542l-3.571-5H12.029z"/></svg>

After

Width:  |  Height:  |  Size: 676 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#FF80AB" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#FCE4EC" d="M38.5 14L29 14 29 4.5z"/><path fill="#E91E63" d="M11.707 33v-9.953h2.632c1.162 0 2.088.369 2.779 1.107s1.042 1.75 1.056 3.035v1.613c0 1.308-.345 2.335-1.036 3.079C16.448 32.628 15.497 33 14.284 33H11.707zM13.717 24.722v6.61h.602c.67 0 1.142-.177 1.415-.53.273-.353.417-.962.431-1.828v-1.729c0-.93-.13-1.578-.39-1.944-.26-.367-.702-.56-1.326-.578H13.717zM22.241 23.047l1.88 7.198 1.873-7.198h2.625V33h-2.017v-2.693l.185-4.149L24.798 33h-1.367l-1.989-6.843.185 4.149V33h-2.01v-9.953H22.241zM37 31.872c-.387.419-.862.734-1.426.947-.563.211-1.179.317-1.849.317-1.144 0-2.032-.354-2.666-1.063-.634-.708-.96-1.739-.978-3.093v-1.791c0-1.372.3-2.428.898-3.169.6-.74 1.474-1.11 2.622-1.11 1.08 0 1.895.267 2.444.8.549.533.867 1.369.953 2.509h-1.955c-.055-.634-.188-1.065-.396-1.296-.209-.229-.537-.345-.984-.345-.543 0-.937.198-1.183.595s-.374 1.027-.383 1.894v1.805c0 .907.136 1.566.407 1.979.271.412.717.618 1.336.618.396 0 .718-.08.964-.239l.178-.123v-1.825h-1.408v-1.518H37V31.872z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#BA68C8" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#F3E5F5" d="M38.5 14L29 14 29 4.5z"/><path fill="#4A148C" d="M28,28.9c0,1.3-0.3,2.4-0.9,3.1c-0.6,0.7-1.5,1.1-2.6,1.1c-1.1,0-2-0.4-2.6-1.1c-0.6-0.7-1-1.8-1-3.1v-1.7c0-1.4,0.3-2.4,1-3.2c0.6-0.8,1.5-1.2,2.6-1.2c1.1,0,2,0.4,2.6,1.1c0.6,0.8,1,1.8,1,3.2V28.9z M26,27.3c0-0.9-0.1-1.6-0.4-2c-0.3-0.4-0.7-0.7-1.2-0.7c-0.5,0-0.9,0.2-1.2,0.6c-0.3,0.4-0.4,1.1-0.4,1.9v1.8c0,0.9,0.1,1.5,0.4,1.9c0.3,0.4,0.7,0.6,1.2,0.6c0.5,0,0.9-0.2,1.2-0.6c0.3-0.4,0.4-1,0.4-1.9V27.3z M13,33V23h2.6c1.2,0,2.1,0.4,2.8,1.1c0.7,0.7,1,1.8,1.1,3v1.6c0,1.3-0.3,2.3-1,3.1c-0.7,0.7-1.6,1.1-2.9,1.1H13z M15,24.7v6.6h0.6c0.7,0,1.1-0.2,1.4-0.5c0.3-0.4,0.4-1,0.4-1.8v-1.7c0-0.9-0.1-1.6-0.4-1.9c-0.3-0.4-0.7-0.6-1.3-0.6H15z M35.9,29.8c-0.1,1.1-0.4,2-1,2.6c-0.6,0.6-1.4,0.9-2.5,0.9c-1.1,0-2-0.4-2.6-1.1c-0.6-0.7-0.9-1.8-0.9-3.2v-1.7c0-1.4,0.3-2.4,0.9-3.2c0.6-0.7,1.5-1.1,2.6-1.1c1.1,0,1.9,0.3,2.5,0.9c0.6,0.6,0.9,1.5,1,2.6h-2c0-0.7-0.1-1.2-0.3-1.5c-0.2-0.3-0.6-0.4-1.1-0.4c-0.5,0-0.9,0.2-1.1,0.6c-0.2,0.4-0.3,1-0.4,1.9V29c0,1,0.1,1.7,0.3,2c0.2,0.4,0.6,0.6,1.1,0.6c0.5,0,0.9-0.1,1.1-0.4c0.2-0.3,0.3-0.7,0.3-1.4H35.9z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#90CAF9" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E1F5FE" d="M38.5 14L29 14 29 4.5z"/><path fill="#1976D2" d="M16 21H33V23H16zM16 25H29V27H16zM16 29H33V31H16zM16 33H29V35H16z"/></svg>

After

Width:  |  Height:  |  Size: 288 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#42a5f5" d="M42 38L17 38 17 5 34 5 42 13z"/><path fill="#e1f5fe" d="M40.5 14L33 14 33 6.5z"/><path fill="#1565c0" d="M22 19H38V21H22zM22 23H34V25H22zM22 27H38V29H22zM22 31H34V33H22z"/><g><path fill="#90caf9" d="M31 43L6 43 6 10 23 10 31 18z"/><path fill="#e1f5fe" d="M29.5 19L22 19 22 11.5z"/><path fill="#1976d2" d="M11 24H26V26H11zM11 28H22V30H11zM11 32H26V34H11zM11 36H22V38H11z"/></g></svg>

After

Width:  |  Height:  |  Size: 494 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#FF80AB" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#FCE4EC" d="M38.5 14L29 14 29 4.5z"/><path fill="#E91E63" d="M18.94 28.693H15.81v2.639h3.705V33H13.8v-9.953h5.701v1.675H15.81v2.352h3.131V28.693zM23.787 26.465l1.34-3.418h2.304l-2.338 4.936L27.485 33h-2.331l-1.367-3.479L22.427 33h-2.331l2.393-5.018-2.345-4.936h2.304L23.787 26.465zM33.645 28.693h-3.131v2.639h3.705V33h-5.715v-9.953h5.701v1.675h-3.691v2.352h3.131V28.693z"/></svg>

After

Width:  |  Height:  |  Size: 533 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#3F51B5" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E8EAF6" d="M38.5 14L29 14 29 4.5zM22.567 31.872c-.387.419-.862.734-1.425.947-.563.211-1.179.317-1.849.317-1.144 0-2.033-.354-2.666-1.063-.633-.708-.959-1.739-.978-3.093v-1.791c0-1.372.3-2.428.899-3.169.599-.74 1.473-1.11 2.622-1.11 1.08 0 1.895.267 2.444.8s.867 1.369.954 2.509h-1.955c-.055-.634-.187-1.065-.396-1.296-.209-.229-.538-.345-.984-.345-.542 0-.937.198-1.183.595s-.374 1.027-.383 1.894v1.805c0 .907.136 1.566.407 1.979.271.412.717.618 1.336.618.396 0 .718-.08.964-.239l.178-.123v-1.825h-1.408v-1.518h3.425V31.872zM26.088 33h-2.01v-9.953h2.01V33zM32.91 28.939h-3.125V33h-2.01v-9.953h5.51v1.675h-3.5v2.55h3.125V28.939z"/></svg>

After

Width:  |  Height:  |  Size: 791 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#90CAF9" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E1F5FE" d="M38.5 14L29 14 29 4.5z"/><path fill="#1565C0" d="M21 23L14 33 28 33z"/><path fill="#1976D2" d="M28 26.4L23 33 33 33zM31.5 23A1.5 1.5 0 1 0 31.5 26 1.5 1.5 0 1 0 31.5 23z"/></svg>

After

Width:  |  Height:  |  Size: 344 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#3F51B5" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E8EAF6" d="M38.5 14L29 14 29 4.5zM17.074 23.047h2.01v6.891c0 .966-.269 1.741-.807 2.324s-1.23.875-2.078.875c-.912 0-1.62-.271-2.126-.813s-.759-1.297-.759-2.263h2.017c0 .938.29 1.408.868 1.408.583 0 .875-.542.875-1.627V23.047zM22.673 29.5V33h-2.01v-9.953h3.391c.984 0 1.77.306 2.354.916.586.61.879 1.403.879 2.379s-.289 1.745-.868 2.311S25.038 29.5 24.013 29.5H22.673zM22.673 27.825h1.381c.383 0 .679-.125.889-.376.21-.251.314-.615.314-1.094 0-.497-.106-.892-.321-1.187-.214-.293-.501-.442-.861-.447h-1.401V27.825zM35.395 31.872c-.387.419-.862.734-1.426.947-.563.211-1.179.317-1.849.317-1.144 0-2.032-.354-2.666-1.063-.634-.708-.96-1.739-.978-3.093v-1.791c0-1.372.3-2.428.898-3.169.6-.74 1.474-1.11 2.622-1.11 1.08 0 1.895.267 2.444.8.549.533.867 1.369.953 2.509h-1.955c-.055-.634-.188-1.065-.396-1.296-.209-.229-.537-.345-.984-.345-.543 0-.937.198-1.183.595s-.374 1.027-.383 1.894v1.805c0 .907.136 1.566.407 1.979.271.412.717.618 1.336.618.396 0 .718-.08.964-.239l.178-.123v-1.825H31.97v-1.518h3.425V31.872z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#cfd95b" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#f5f7e1" d="M38.5 14L29 14 29 4.5z"/><path fill="#696e2d" d="M13.008,23H15v6.829c0,0.956-0.267,1.727-0.799,2.304C13.667,32.709,12.981,33,12.141,33c-0.904,0-1.606-0.269-2.107-0.805c-0.501-0.538-0.752-1.285-0.752-2.244h1.999c0,0.931,0.287,1.395,0.86,1.395c0.578,0,0.867-0.537,0.867-1.612C13.008,29.734,13.008,23,13.008,23z M20.398,30.313c0-0.395-0.101-0.697-0.305-0.9c-0.202-0.202-0.571-0.412-1.106-0.629c-0.976-0.371-1.678-0.804-2.106-1.301c-0.428-0.498-0.642-1.086-0.642-1.763c0-0.819,0.29-1.478,0.872-1.975C17.694,23.248,18.433,23,19.329,23c0.597,0,1.13,0.126,1.598,0.378s0.828,0.607,1.079,1.066c0.252,0.458,0.378,0.982,0.378,1.564h-1.959c0-0.455-0.097-0.8-0.291-1.039s-0.474-0.357-0.838-0.357c-0.344,0-0.611,0.099-0.802,0.304c-0.192,0.203-0.287,0.476-0.287,0.819c0,0.267,0.107,0.508,0.321,0.724c0.214,0.216,0.592,0.441,1.136,0.671c0.949,0.343,1.639,0.765,2.068,1.263c0.431,0.5,0.646,1.134,0.646,1.906c0,0.848-0.27,1.509-0.809,1.986c-0.54,0.476-1.274,0.715-2.2,0.715c-0.628,0-1.201-0.13-1.718-0.388c-0.518-0.258-0.922-0.628-1.214-1.11C16.146,31.021,16,30.452,16,29.799h1.972c0,0.561,0.109,0.968,0.327,1.222s0.575,0.382,1.07,0.382C20.055,31.403,20.398,31.041,20.398,30.313z M38,33h-2.01l-2.939-6.527V33h-2.01v-9.953h2.01l2.946,6.535v-6.535H38V33z M30,28.875c0,1.306-0.308,2.32-0.924,3.042C28.461,32.639,27.607,33,26.513,33c-1.09,0-1.945-0.359-2.567-1.073c-0.623-0.714-0.938-1.715-0.947-3.004v-1.664c0-1.337,0.309-2.382,0.927-3.132C24.544,23.374,25.402,23,26.5,23c1.08,0,1.93,0.369,2.553,1.108c0.622,0.737,0.937,1.772,0.947,3.104V28.875z M28.033,27.244c0-0.877-0.125-1.53-0.373-1.959c-0.249-0.427-0.636-0.641-1.16-0.641c-0.52,0-0.905,0.206-1.153,0.617c-0.25,0.412-0.378,1.041-0.387,1.883v1.73c0,0.852,0.127,1.478,0.38,1.883c0.253,0.403,0.644,0.604,1.173,0.604c0.51,0,0.89-0.195,1.14-0.592c0.249-0.393,0.375-1.005,0.38-1.833V27.244z"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#F44336" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#FFEBEE" d="M38.5 14L29 14 29 4.5zM14.425 23.047l1.88 7.198 1.873-7.198h2.625V33h-2.017v-2.693l.185-4.149L16.981 33h-1.367l-1.989-6.843.185 4.149V33H11.8v-9.953H14.425zM29.423 28.919c0 1.335-.315 2.372-.946 3.11-.632.738-1.508 1.107-2.629 1.107-1.117 0-1.994-.366-2.632-1.097-.638-.732-.961-1.756-.971-3.073v-1.702c0-1.367.317-2.435.95-3.203.633-.768 1.513-1.151 2.639-1.151 1.107 0 1.98.377 2.618 1.132.638.754.962 1.813.971 3.175V28.919zM27.406 27.251c0-.897-.127-1.565-.383-2.003s-.652-.656-1.189-.656c-.533 0-.927.211-1.183.632-.255.422-.387 1.063-.396 1.925v1.771c0 .87.13 1.512.39 1.924.26.413.66.619 1.203.619.523 0 .914-.201 1.169-.605.255-.402.386-1.028.39-1.876V27.251zM33.955 30.266l1.675-7.219h2.242L35.001 33h-2.092l-2.851-9.953h2.229L33.955 30.266z"/></svg>

After

Width:  |  Height:  |  Size: 925 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#FFC107" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#FFF3E0" d="M38.5 14L29 14 29 4.5z"/><path fill="#C47205" d="M14.425 23.047l1.88 7.198 1.873-7.198h2.625V33h-2.017v-2.693l.185-4.149L16.981 33h-1.367l-1.989-6.843.185 4.149V33H11.8v-9.953H14.425zM24.426 29.5V33h-2.01v-9.953h3.391c.984 0 1.77.306 2.355.916.585.61.878 1.403.878 2.379s-.29 1.745-.868 2.311S26.791 29.5 25.766 29.5H24.426zM24.426 27.825h1.381c.383 0 .68-.125.889-.376s.314-.615.314-1.094c0-.497-.107-.892-.321-1.187-.214-.293-.501-.442-.861-.447h-1.401V27.825zM31.952 27.142h.937c.355 0 .616-.125.783-.374.166-.25.249-.583.249-1 0-.398-.085-.709-.257-.932-.17-.222-.399-.333-.687-.333-.269 0-.489.106-.659.318-.172.212-.257.479-.257.803h-1.935c0-.52.119-.985.359-1.398.238-.412.574-.734 1.004-.967.432-.232.908-.349 1.433-.349.916 0 1.634.253 2.153.759s.779 1.198.779 2.078c0 .451-.117.869-.352 1.254-.235.386-.544.681-.927.886.47.2.819.501 1.05.902.229.401.345.875.345 1.422 0 .884-.281 1.593-.845 2.126-.563.533-1.302.8-2.218.8-.853 0-1.544-.263-2.075-.79-.53-.525-.796-1.218-.796-2.074h1.935c0 .359.094.661.28.905s.424.366.711.366c.333 0 .596-.124.79-.371.193-.247.29-.577.29-.989 0-.984-.38-1.479-1.142-1.483h-.95V27.142z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#F44336" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#FFEBEE" d="M38.5 14L29 14 29 4.5zM14.425 23.047l1.88 7.198 1.873-7.198h2.625V33h-2.017v-2.693l.185-4.149L16.981 33h-1.367l-1.989-6.843.185 4.149V33H11.8v-9.953H14.425zM24.426 29.5V33h-2.01v-9.953h3.391c.984 0 1.77.306 2.355.916.585.61.878 1.403.878 2.379s-.29 1.745-.868 2.311S26.791 29.5 25.766 29.5H24.426zM24.426 27.825h1.381c.383 0 .68-.125.889-.376s.314-.615.314-1.094c0-.497-.107-.892-.321-1.187-.214-.293-.501-.442-.861-.447h-1.401V27.825zM37.147 31.872c-.388.419-.862.734-1.425.947-.563.211-1.18.317-1.85.317-1.145 0-2.033-.354-2.666-1.063-.633-.708-.959-1.739-.978-3.093v-1.791c0-1.372.3-2.428.899-3.169.599-.74 1.473-1.11 2.621-1.11 1.08 0 1.895.267 2.443.8.55.533.867 1.369.954 2.509h-1.955c-.055-.634-.187-1.065-.396-1.296-.21-.229-.538-.345-.984-.345-.542 0-.937.198-1.183.595s-.373 1.027-.383 1.894v1.805c0 .907.136 1.566.406 1.979.271.412.717.618 1.337.618.396 0 .718-.08.964-.239l.178-.123v-1.825h-1.408v-1.518h3.425V31.872z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#388e3c" d="M17.204 19.122l-4.907 2.715C12.113 21.938 12 22.126 12 22.329v5.433c0 .203.113.39.297.492l4.908 2.717c.183.101.41.101.593 0l4.907-2.717C22.887 28.152 23 27.965 23 27.762v-5.433c0-.203-.113-.39-.297-.492l-4.906-2.715c-.092-.051-.195-.076-.297-.076-.103 0-.205.025-.297.076M42.451 24.013l-.818.452c-.031.017-.049.048-.049.082v.906c0 .034.019.065.049.082l.818.453c.031.017.068.017.099 0l.818-.453c.03-.017.049-.048.049-.082v-.906c0-.034-.019-.065-.05-.082l-.818-.452C42.534 24.004 42.517 24 42.5 24S42.466 24.004 42.451 24.013"/><path fill="#37474f" d="M35.751,13.364l-2.389-1.333c-0.075-0.042-0.167-0.041-0.241,0.003 c-0.074,0.044-0.12,0.123-0.12,0.209L33,20.295l-2.203-1.219C30.705,19.025,30.602,19,30.5,19c-0.102,0-0.205,0.025-0.297,0.076 h0.001l-4.907,2.715C25.113,21.892,25,22.08,25,22.282v5.433c0,0.203,0.113,0.39,0.297,0.492l4.908,2.717 c0.183,0.101,0.41,0.101,0.593,0l4.907-2.717C35.887,28.106,36,27.918,36,27.715V13.788C36,13.612,35.904,13.45,35.751,13.364z M32.866,26.458l-2.23,1.235c-0.083,0.046-0.186,0.046-0.269,0l-2.231-1.235C28.051,26.412,28,26.326,28,26.234v-2.47 c0-0.092,0.051-0.177,0.135-0.224l2.231-1.234h-0.001c0.042-0.023,0.088-0.034,0.135-0.034c0.047,0,0.093,0.012,0.135,0.034 l2.23,1.234C32.949,23.587,33,23.673,33,23.765v2.47C33,26.326,32.949,26.412,32.866,26.458z"/><path fill="#2e7d32" d="M17.204,19.122L12,27.762c0,0.203,0.113,0.39,0.297,0.492l4.908,2.717 c0.183,0.101,0.41,0.101,0.593,0L23,22.329c0-0.203-0.113-0.39-0.297-0.492l-4.906-2.715c-0.092-0.051-0.195-0.076-0.297-0.076 c-0.103,0-0.205,0.025-0.297,0.076"/><path fill="#4caf50" d="M17.204,19.122l-4.907,2.715C12.113,21.938,12,22.126,12,22.329l5.204,8.642 c0.183,0.101,0.41,0.101,0.593,0l4.907-2.717C22.887,28.152,23,27.965,23,27.762l-5.203-8.64c-0.092-0.051-0.195-0.076-0.297-0.076 c-0.103,0-0.205,0.025-0.297,0.076"/><path fill="#37474f" d="M47.703 21.791l-4.906-2.715C42.705 19.025 42.602 19 42.5 19c-.102 0-.205.025-.297.076h.001l-4.907 2.715C37.114 21.892 37 22.084 37 22.294v5.411c0 .209.114.402.297.503l4.908 2.717c.184.102.409.102.593 0l2.263-1.253c.207-.115.206-.412-.002-.526l-4.924-2.687C40.052 26.412 40 26.325 40 26.231v-2.466c0-.092.05-.177.13-.221l2.235-1.236h-.001c.042-.023.088-.034.135-.034.047 0 .093.012.135.034l2.235 1.237c.08.044.13.129.13.221v2.012c0 .086.046.166.121.209.075.042.167.042.242-.001l2.398-1.393c.148-.086.24-.245.24-.417v-1.88C48 22.085 47.886 21.892 47.703 21.791zM10.703 21.791l-4.906-2.715C5.705 19.025 5.602 19 5.5 19c-.102 0-.205.025-.297.076h.001l-4.907 2.715C.114 21.892 0 22.084 0 22.294v7.465c0 .086.046.166.121.209.075.042.167.042.242-.001l2.398-1.393C2.909 28.488 3 28.329 3 28.157v-4.393c0-.092.05-.177.13-.221l2.235-1.236H5.365c.042-.023.088-.034.135-.034.047 0 .093.012.135.034l2.235 1.237C7.95 23.588 8 23.673 8 23.765v4.393c0 .172.091.331.24.417l2.398 1.393c.075.043.167.043.242.001C10.954 29.925 11 29.845 11 29.759v-7.464C11 22.085 10.886 21.892 10.703 21.791z"/></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#ffc107" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#fff3e0" d="M38.5 14L29 14 29 4.5z"/><path fill="#c47205" d="M19.307 28.893c0 1.334-.315 2.373-.947 3.111-.631.738-1.507 1.106-2.628 1.106-1.117 0-1.994-.365-2.632-1.096-.639-.732-.962-1.756-.971-3.072v-1.703c0-1.367.316-2.434.95-3.203.633-.768 1.513-1.152 2.639-1.152 1.107 0 1.979.379 2.618 1.133.638.754.961 1.813.971 3.176V28.893zM17.29 27.225c0-.896-.128-1.564-.383-2.002-.256-.438-.652-.656-1.189-.656-.533 0-.928.211-1.183.631-.256.422-.388 1.064-.397 1.924v1.771c0 .869.13 1.512.39 1.924.26.414.66.619 1.203.619.523 0 .913-.201 1.169-.605.255-.402.385-1.029.39-1.877V27.225zM27.517 31.846c-.388.42-.862.734-1.426.947-.563.211-1.179.316-1.849.316-1.145 0-2.033-.354-2.666-1.063-.634-.707-.96-1.738-.978-3.094v-1.789c0-1.373.3-2.43.899-3.17.6-.74 1.474-1.111 2.622-1.111 1.08 0 1.895.268 2.443.801.55.533.867 1.369.954 2.508h-1.955c-.055-.633-.187-1.064-.396-1.295-.21-.229-.538-.346-.984-.346-.543 0-.937.199-1.183.596-.246.396-.374 1.027-.383 1.893v1.805c0 .908.136 1.566.406 1.98.272.412.717.617 1.337.617.396 0 .718-.078.964-.238L25.5 31.08v-1.826h-1.408v-1.516h3.425V31.846zM35.706 31.846c-.388.42-.862.734-1.426.947-.563.211-1.179.316-1.849.316-1.144 0-2.033-.354-2.666-1.063-.634-.707-.96-1.738-.978-3.094v-1.789c0-1.373.3-2.43.898-3.17.6-.74 1.474-1.111 2.622-1.111 1.08 0 1.895.268 2.443.801.55.533.867 1.369.954 2.508h-1.955c-.055-.633-.188-1.064-.396-1.295-.21-.229-.538-.346-.984-.346-.543 0-.936.199-1.183.596s-.374 1.027-.383 1.893v1.805c0 .908.136 1.566.406 1.98.272.412.717.617 1.337.617.396 0 .718-.078.964-.238l.178-.123v-1.826h-1.408v-1.516h3.425V31.846z"/></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#BA68C8" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#F3E5F5" d="M38.5 14L29 14 29 4.5z"/><path fill="#4A148C" d="M20.807 28.919c0 1.335-.315 2.372-.947 3.11s-1.507 1.107-2.628 1.107c-1.117 0-1.994-.366-2.632-1.097-.638-.732-.961-1.756-.971-3.073v-1.702c0-1.367.317-2.435.95-3.203.633-.768 1.513-1.151 2.639-1.151 1.107 0 1.98.377 2.618 1.132.638.754.961 1.813.971 3.175V28.919zM18.79 27.251c0-.897-.127-1.565-.383-2.003s-.652-.656-1.189-.656c-.533 0-.927.211-1.183.632-.255.422-.387 1.063-.396 1.925v1.771c0 .87.13 1.512.39 1.924.26.413.661.619 1.203.619.524 0 .914-.201 1.169-.605.255-.402.385-1.028.39-1.876V27.251zM28.114 24.722h-2.461V33h-2.017v-8.278h-2.42v-1.675h6.897V24.722zM34.403 28.939h-3.124V33h-2.01v-9.953h5.51v1.675h-3.5v2.55h3.124V28.939z"/></svg>

After

Width:  |  Height:  |  Size: 865 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#FF5722" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#FBE9E7" d="M38.5 14L29 14 29 4.5z"/><path fill="#FFEBEE" d="M15.81 29.5V33H13.8v-9.953h3.391c.984 0 1.77.306 2.355.916s.878 1.403.878 2.379-.29 1.745-.868 2.311S18.175 29.5 17.149 29.5H15.81zM15.81 27.825h1.381c.383 0 .679-.125.889-.376s.314-.615.314-1.094c0-.497-.107-.892-.321-1.187-.214-.293-.501-.442-.861-.447H15.81V27.825zM21.764 33v-9.953h2.632c1.162 0 2.089.369 2.778 1.107.691.738 1.043 1.75 1.057 3.035v1.613c0 1.308-.346 2.335-1.035 3.079C26.504 32.628 25.553 33 24.341 33H21.764zM23.773 24.722v6.61h.602c.67 0 1.142-.177 1.415-.53.273-.353.417-.962.431-1.828v-1.729c0-.93-.13-1.578-.39-1.944-.26-.367-.702-.56-1.326-.578H23.773zM34.807 28.939h-3.124V33h-2.01v-9.953h5.51v1.675h-3.5v2.55h3.124V28.939z"/></svg>

After

Width:  |  Height:  |  Size: 876 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#3F51B5" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E8EAF6" d="M37.5 14L28 14 28 4.5zM14.81 29.5V33H12.8v-9.953h3.391c.984 0 1.77.306 2.355.916s.878 1.403.878 2.379-.29 1.745-.868 2.311S17.175 29.5 16.149 29.5H14.81zM14.81 27.825h1.381c.383 0 .679-.125.889-.376s.314-.615.314-1.094c0-.497-.107-.892-.321-1.187-.214-.293-.501-.442-.861-.447H14.81V27.825zM27.723 33h-2.01l-2.939-6.528V33h-2.01v-9.953h2.01l2.946 6.535v-6.535h2.003V33zM36.104 31.872c-.387.419-.862.734-1.426.947-.563.211-1.179.317-1.849.317-1.144 0-2.032-.354-2.666-1.063-.634-.708-.96-1.739-.978-3.093v-1.791c0-1.372.3-2.428.898-3.169.6-.74 1.474-1.11 2.622-1.11 1.08 0 1.895.267 2.444.8.549.533.867 1.369.953 2.509h-1.955c-.055-.634-.188-1.065-.396-1.296-.209-.229-.537-.345-.984-.345-.543 0-.937.198-1.183.595s-.374 1.027-.383 1.894v1.805c0 .907.136 1.566.407 1.979.271.412.717.618 1.336.618.396 0 .718-.08.964-.239l.178-.123v-1.825h-1.408v-1.518h3.425V31.872z"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#fff" d="M44.083,29.79c-0.183-0.829-0.935-1.796-2.452-1.796c-0.31,0-0.649,0.039-1.035,0.119c-0.708,0.146-1.311,0.217-1.842,0.241c4.133-7.04,6.816-16.819,4.159-20.214c-3.501-4.473-8.214-5.141-10.711-5.141L31.967,3c-0.929,0.015-1.893,0.129-2.863,0.339l-3.583,0.774C25.033,4.052,24.536,4.009,24.018,4l-0.03,0l-0.016,0l-0.152-0.001c-1.593,0-3.046,0.338-4.341,0.973l-1.251-0.493c-1.72-0.678-4.308-1.485-6.868-1.485c-0.144,0-0.287,0.003-0.431,0.008C8.407,3.093,6.241,4.05,4.664,5.769C2.696,7.915,1.8,11.054,2.003,15.1C2.013,15.309,4.461,36,11.4,36h0.025l0.064-0.001c0.901-0.022,1.76-0.384,2.563-1.077c0.613,0.46,1.406,0.732,2.145,0.84c0.488,0.115,1.366,0.278,2.418,0.278c1.284,0,2.442-0.263,3.44-0.738c-0.001,0.88-0.006,1.994-0.016,3.418l-0.001,0.075l0.005,0.075c0.097,1.419,0.342,2.698,0.711,3.701c1.051,2.859,2.866,4.434,5.111,4.434c0.093,0,0.188-0.003,0.284-0.009c1.846-0.114,3.717-1.151,5.004-2.772c1.393-1.755,1.715-3.607,1.839-5.026L35,39.111v-0.088v-4.079l0.103,0.01l0.436,0.038l0.042,0.004l0.042,0.002c0.124,0.006,0.252,0.008,0.381,0.008c1.507,0,3.362-0.391,4.616-0.974C41.819,33.476,44.559,31.948,44.083,29.79z"/><path fill="#0277bd" d="M33,34c0-0.205,0.012-0.376,0.018-0.565C33.008,33.184,33,33,33,33s0.012-0.009,0.032-0.022c0.149-2.673,0.886-3.703,1.675-4.29c-0.11-0.153-0.237-0.318-0.356-0.475c-0.333-0.437-0.748-0.979-1.192-1.674l-0.082-0.158c-0.067-0.164-0.229-0.447-0.435-0.819c-1.183-2.14-3.645-6.592-1.96-9.404c0.738-1.232,2.122-1.942,4.121-2.117C33.986,11.718,30.925,6.115,23.985,6c-0.002,0-0.004,0-0.006,0c-6.041-0.098-8.026,5.392-8.672,8.672c0.89-0.377,1.906-0.606,2.836-0.606c0.014,0,0.029,0,0.043,0c2.29,0.017,3.865,1.239,4.323,3.354c0.335,1.552,0.496,2.91,0.492,4.153c-0.01,2.719-0.558,4.149-1.042,5.411l-0.154,0.408c-0.124,0.334-0.255,0.645-0.379,0.937c-0.126,0.298-0.237,0.563-0.318,0.802c0.484,0.11,0.864,0.265,1.125,0.38l0.151,0.066c0.047,0.02,0.094,0.043,0.137,0.069c0.848,0.516,1.376,1.309,1.489,2.233c0.061,0.498,0.051,3.893,0.03,6.855c0.087,1.285,0.305,2.364,0.593,3.146c0.409,1.114,1.431,3.241,3.394,3.119c1.37-0.085,2.687-0.919,3.561-2.019c0.938-1.181,1.284-2.487,1.414-3.958V34z"/><path fill="#0277bd" d="M15.114 28.917c-1.613-1.683-2.399-3.947-2.104-6.056.285-2.035.124-4.027.037-5.098-.029-.357-.048-.623-.047-.77 0-.008.002-.015.003-.023 0-.004-.002-.007-.002-.011.121-3.021 1.286-7.787 4.493-10.62C15.932 5.724 13.388 4.913 11 5 7.258 5.136 3.636 7.724 4 15c.137 2.73 3.222 19.103 7.44 19 .603-.015 1.229-.402 1.872-1.176 1.017-1.223 2.005-2.332 2.708-3.104C15.705 29.481 15.401 29.217 15.114 28.917zM37.023 14.731c.015.154.002.286-.022.408.031.92-.068 1.813-.169 2.677-.074.636-.15 1.293-.171 1.952-.021.645.07 1.282.166 1.956.225 1.578.459 3.359-.765 5.437.225.296.423.571.581.837 4.61-7.475 6.468-16.361 4.695-18.626C38.655 5.944 34.941 4.952 31.999 5c-.921.015-1.758.139-2.473.294C34.602 7.754 36.863 13.026 37.023 14.731zM41 30.071c-2.665.55-3.947.257-4.569-.126-.1.072-.2.133-.293.19-.372.225-.961.583-1.105 2.782.083.016.156.025.246.044L35.714 33c1.32.06 3.049-.31 4.063-.781C41.962 31.205 43.153 29.627 41 30.071zM22.023 32.119c-.037-.298-.198-.539-.492-.732l-.108-.047C21.062 31.181 20.653 31 20 31h-.004c-.127.01-.253.019-.38.019-.052 0-.103-.007-.155-.009-.474.365-1.148.647-2.816.99-2.98.759-1.221 1.655-.078 1.794 1.106.277 3.735.614 5.481-.809C22.043 32.537 22.035 32.229 22.023 32.119z"/><path fill="#0277bd" d="M20.681 18.501c-.292.302-.753.566-1.262.484-.828-.134-1.463-1.133-1.417-1.508h0c.044-.374.751-.569 1.578-.435.287.047.548.128.768.228-.32-.688-.899-1.085-1.782-1.182-1.565-.174-3.226.644-3.56 1.097.007.11.02.251.033.417.093 1.147.265 3.284-.05 5.537-.208 1.485.393 3.169 1.567 4.395.757.79 1.641 1.29 2.513 1.438.111-.478.309-.944.513-1.425.113-.265.233-.547.346-.852l.162-.427c.443-1.155.9-2.35.909-4.703C21.003 20.66 20.892 19.627 20.681 18.501zM34.847 22.007c-.104-.729-.211-1.484-.185-2.303.023-.742.105-1.442.184-2.119.062-.533.11-1.045.138-1.55-1.289.107-2.145.479-2.551 1.108.168-.057.358-.102.568-.129.892-.116 1.543.141 1.618.637.055.363-.253.705-.388.836-.277.269-.626.442-.981.488-.064.008-.129.012-.192.012-.353 0-.69-.121-.949-.3.112 1.973 1.567 4.612 2.283 5.907.153.277.271.498.369.688C35.154 24.163 35.009 23.143 34.847 22.007z"/></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#FF6D00" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#FFF3E0" d="M38.5 14L29 14 29 4.5z"/><path fill="#FFF" d="M23.4,29.5V33h-2V23h3.4c1,0,1.8,0.3,2.4,0.9c0.6,0.6,0.9,1.4,0.9,2.4c0,1-0.3,1.7-0.9,2.3c-0.6,0.6-1.4,0.8-2.4,0.8H23.4z M23.4,27.8h1.4c0.4,0,0.7-0.1,0.9-0.4c0.2-0.3,0.3-0.6,0.3-1.1c0-0.5-0.1-0.9-0.3-1.2c-0.2-0.3-0.5-0.4-0.9-0.4h-1.4V27.8z M15,29.5V33h-2V23h3.4c1,0,1.8,0.3,2.4,0.9c0.6,0.6,0.9,1.4,0.9,2.4s-0.3,1.7-0.9,2.3c-0.6,0.6-1.4,0.8-2.4,0.8H15z M15,27.8h1.4c0.4,0,0.7-0.1,0.9-0.4c0.2-0.3,0.3-0.6,0.3-1.1c0-0.5-0.1-0.9-0.3-1.2c-0.2-0.3-0.5-0.4-0.9-0.4H15V27.8z M36,24.7h-2.5V33h-2v-8.3h-2.4V23H36V24.7z"/></svg>

After

Width:  |  Height:  |  Size: 727 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#3F51B5" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E8EAF6" d="M38.5 14L29 14 29 4.5zM15.476 29.5V33h-2.01v-9.953h3.391c.984 0 1.77.306 2.355.916s.878 1.403.878 2.379-.29 1.745-.868 2.311S17.841 29.5 16.816 29.5H15.476zM15.476 27.825h1.381c.383 0 .679-.125.889-.376s.314-.615.314-1.094c0-.497-.107-.892-.321-1.187-.214-.293-.501-.442-.861-.447h-1.401V27.825zM25.635 30.389c0-.405-.104-.712-.312-.919-.208-.208-.584-.423-1.131-.646-.998-.378-1.716-.821-2.153-1.33-.438-.508-.656-1.108-.656-1.801 0-.839.297-1.512.892-2.02.595-.509 1.35-.763 2.266-.763.611 0 1.155.129 1.633.386.479.258.848.621 1.104 1.091s.386 1.003.386 1.6h-2.002c0-.465-.1-.819-.298-1.063-.198-.243-.484-.365-.858-.365-.351 0-.625.104-.82.311-.196.208-.294.487-.294.838 0 .273.109.521.328.742.219.221.606.449 1.162.687.971.351 1.676.781 2.116 1.292s.66 1.16.66 1.948c0 .866-.276 1.543-.828 2.03-.551.487-1.301.731-2.249.731-.643 0-1.228-.132-1.757-.396s-.942-.643-1.241-1.135-.448-1.073-.448-1.743h2.017c0 .574.112.991.335 1.251s.588.39 1.094.39C25.283 31.503 25.635 31.132 25.635 30.389zM28.99 33v-9.953h2.633c1.162 0 2.088.369 2.778 1.107s1.042 1.75 1.056 3.035v1.613c0 1.308-.345 2.335-1.035 3.079C33.731 32.628 32.78 33 31.568 33H28.99zM31 24.722v6.61h.602c.67 0 1.143-.177 1.416-.53.273-.353.416-.962.43-1.828v-1.729c0-.93-.129-1.578-.389-1.944-.26-.367-.702-.56-1.326-.578H31z"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#ff9100" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#ffe0b2" d="M38.5 14L29 14 29 4.5zM16.008 29.363H15.01V33H13v-9.953h3.206c1.008 0 1.785.262 2.335.781.549.524.823 1.266.823 2.227 0 1.32-.481 2.246-1.442 2.775l1.743 4.074V33h-2.16L16.008 29.363zM15.01 27.688h1.142c.401 0 .702-.133.902-.398.201-.266.301-.625.301-1.07 0-.998-.39-1.496-1.169-1.496H15.01V27.688zM25.496 30.963h-2.741L22.222 33h-2.126l3.11-9.953h1.839L28.176 33h-2.146L25.496 30.963zM23.192 29.289h1.859l-.93-3.549L23.192 29.289zM32.008 29.363H31.01V33H29v-9.953h3.206c1.008 0 1.785.262 2.335.781.549.524.823 1.266.823 2.227 0 1.32-.48 2.246-1.442 2.775l1.743 4.074V33h-2.16L32.008 29.363zM31.01 27.688h1.142c.401 0 .702-.133.902-.398.201-.266.301-.625.301-1.07 0-.998-.39-1.496-1.169-1.496H31.01V27.688z"/></svg>

After

Width:  |  Height:  |  Size: 881 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#CFD8DC" d="M12,40V20h32v20c0,2.2-1.8,4-4,4H16C13.8,44,12,42.2,12,40z"/><path fill="#78909C" d="M44,16v6H12v-6c0-2.2,1.8-4,4-4h24C42.2,12,44,13.8,44,16z"/><path fill="#37474F" d="M37 13A3 3 0 1 0 37 19 3 3 0 1 0 37 13zM20 13A3 3 0 1 0 20 19 3 3 0 1 0 20 13z"/><path fill="#B0BEC5" d="M37 10c-1.1 0-2 .9-2 2v4c0 1.1.9 2 2 2s2-.9 2-2v-4C39 10.9 38.1 10 37 10zM20 10c-1.1 0-2 .9-2 2v4c0 1.1.9 2 2 2s2-.9 2-2v-4C22 10.9 21.1 10 20 10z"/><path fill="#90A4AE" d="M32 34H36V38H32zM26 34H30V38H26zM20 34H24V38H20zM32 28H36V32H32zM26 28H30V32H26zM20 28H24V32H20z"/><path fill="#F44336" d="M16 3A12 12 0 1 0 16 27A12 12 0 1 0 16 3Z"/><path fill="#EEE" d="M16 6A9 9 0 1 0 16 24A9 9 0 1 0 16 6Z"/><g><path d="M15 8H17V15H15z"/><path d="M16.9 14.2H18.799999999999997V19.6H16.9z" transform="rotate(134.999 17.9 16.9)"/><path d="M16 13.5A1.5 1.5 0 1 0 16 16.5A1.5 1.5 0 1 0 16 13.5Z"/></g></svg>

After

Width:  |  Height:  |  Size: 980 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#ff9100" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#ffe0b2" d="M38.5 14L29 14 29 4.5zM19.897 24.723h-2.461V33H15.42v-8.277H13v-1.676h6.897V24.723zM24.983 30.963h-2.741L21.709 33h-2.126l3.11-9.953h1.839L27.663 33h-2.146L24.983 30.963zM22.68 29.289h1.859l-.93-3.549L22.68 29.289zM31.608 29.363h-.998V33H28.6v-9.953h3.206c1.007 0 1.785.262 2.334.781.55.524.824 1.266.824 2.227 0 1.32-.481 2.246-1.442 2.775l1.743 4.074V33h-2.16L31.608 29.363zM30.609 27.688h1.142c.4 0 .701-.133.902-.398.2-.266.301-.625.301-1.07 0-.998-.39-1.496-1.169-1.496h-1.176V27.688z"/></svg>

After

Width:  |  Height:  |  Size: 664 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#3F51B5" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E8EAF6" d="M38.5 14L29 14 29 4.5zM22.246 24.722h-2.461V33h-2.017v-8.278h-2.42v-1.675h6.897V24.722zM25.5 33h-2.01v-9.953h2.01V33zM32.322 28.939h-3.124V33h-2.01v-9.953h5.51v1.675h-3.5v2.55h3.124V28.939z"/></svg>

After

Width:  |  Height:  |  Size: 364 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#BA68C8" d="M41 45L9 45 9 3 31 3 41 13z"/><path fill="#F3E5F5" d="M39.5 14L30 14 30 4.5z"/><path fill="#4A148C" d="M21.246 24.722h-2.461V33h-2.017v-8.278h-2.42v-1.675h6.897V24.722zM28.957 24.722h-2.461V33h-2.017v-8.278h-2.42v-1.675h6.897V24.722zM35.246 28.939h-3.124V33h-2.01v-9.953h5.51v1.675h-3.5v2.55h3.124V28.939z"/></svg>

After

Width:  |  Height:  |  Size: 426 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#BA68C8" d="M41 45L9 45 9 3 31 3 41 13z"/><path fill="#F3E5F5" d="M39.5 14L30 14 30 4.5z"/><path fill="#4A148C" d="M21.246 24.722h-2.461V33h-2.017v-8.278h-2.42v-1.675h6.897V24.722zM25.519 26.465l1.34-3.418h2.304l-2.338 4.936L29.217 33h-2.331l-1.367-3.479L24.158 33h-2.331l2.393-5.018-2.345-4.936h2.304L25.519 26.465zM36.682 24.722h-2.461V33h-2.017v-8.278h-2.42v-1.675h6.897V24.722z"/></svg>

After

Width:  |  Height:  |  Size: 490 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#90CAF9" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E1F5FE" d="M38.5 14L29 14 29 4.5z"/><path fill="#1976D2" d="M30 28L20 22 20 34z"/></svg>

After

Width:  |  Height:  |  Size: 243 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#FFC107" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#FFF3E0" d="M38.5 14L29 14 29 4.5z"/><path fill="#C47205" d="M18.267 29.302l.943-6.255h1.989L19.429 33h-2.017l-1.162-5.865L15.102 33h-2.023l-1.777-9.953h2.003l.937 6.248 1.169-6.248h1.688L18.267 29.302zM26.743 30.963h-2.741L23.469 33h-2.126l3.11-9.953h1.839L29.423 33h-2.146L26.743 30.963zM24.439 29.288h1.859l-.93-3.548L24.439 29.288zM33.066 30.266l1.675-7.219h2.242L34.112 33h-2.092l-2.851-9.953h2.229L33.066 30.266z"/></svg>

After

Width:  |  Height:  |  Size: 581 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#BA68C8" d="M41 45L9 45 9 3 31 3 41 13z"/><path fill="#F3E5F5" d="M39.5 14L30 14 30 4.5z"/><path fill="#4A148C" d="M16.807,29.302l0.919-6.255h1.939L17.94,33h-1.966l-1.133-5.865L13.722,33H11.75l-1.732-9.953h1.952l0.913,6.248l1.139-6.248h1.646L16.807,29.302z M26.971,28.897c0,1.301-0.309,2.313-0.924,3.032c-0.615,0.721-1.47,1.08-2.563,1.08c-1.089,0-1.944-0.357-2.566-1.069c-0.623-0.714-0.938-1.712-0.947-2.996v-1.661c0-1.333,0.309-2.373,0.927-3.123c0.618-0.749,1.476-1.123,2.573-1.123c1.08,0,1.931,0.367,2.553,1.104c0.623,0.734,0.938,1.768,0.947,3.097V28.897z M25.004,27.271c0-0.875-0.125-1.526-0.374-1.954c-0.249-0.426-0.636-0.639-1.16-0.639c-0.52,0-0.904,0.205-1.154,0.615c-0.249,0.412-0.377,1.037-0.386,1.877v1.728c0,0.848,0.126,1.474,0.38,1.875c0.253,0.403,0.644,0.604,1.173,0.604c0.511,0,0.891-0.196,1.141-0.591c0.249-0.392,0.375-1.003,0.38-1.829V27.271z M32.952,28.939h-2.988V33h-1.923v-9.953h5.271v1.675h-3.348v2.55h2.988V28.939z M38.9,28.939h-2.982V33H34v-9.953h5.26v1.675h-3.342v2.55H38.9V28.939z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#1976D2" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E3F2FD" d="M38.5 14L29 14 29 4.5z"/><path fill="#FAFAFA" d="M26.696,30.228l1.468-8.024h3.059L28.507,35h-3.199l-1.714-7.295L21.915,35h-3.19L16,22.203h3.067l1.468,8.024l1.758-8.024h2.619L26.696,30.228z"/></svg>

After

Width:  |  Height:  |  Size: 363 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#388E3C" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#E8F5E9" d="M38.5 14L29 14 29 4.5z"/><path fill="#FFF" d="M23.739,26.457l2.092-4.254h3.524l-3.577,6.346L29.452,35h-3.56l-2.153-4.333L21.586,35h-3.551l3.665-6.451l-3.568-6.346h3.516L23.739,26.457z"/></svg>

After

Width:  |  Height:  |  Size: 358 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#4db6ac" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#e0f2f1" d="M38.5 14L29 14 29 4.5z"/><path fill="#00695c" d="M14.892 26.465l1.34-3.418h2.304l-2.338 4.936L18.59 33h-2.331l-1.367-3.479L13.532 33h-2.331l2.393-5.018-2.345-4.936h2.304L14.892 26.465zM22.934 23.047l1.88 7.198 1.873-7.198h2.625V33h-2.017v-2.693l.185-4.149L25.491 33h-1.367l-1.989-6.843.185 4.149V33h-2.01v-9.953H22.934zM33.635 31.332h3.527V33h-5.537v-9.953h2.01V31.332z"/></svg>

After

Width:  |  Height:  |  Size: 544 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#ff9100" d="M40 45L8 45 8 3 30 3 40 13z"/><path fill="#ffe0b2" d="M38.5 14L29 14 29 4.5zM17.393 31.331h4.102V33h-6.453v-1.211l4.06-7.066H15v-1.676h6.419v1.184L17.393 31.331zM24.83 33h-2.01v-9.953h2.01V33zM28.528 29.5V33h-2.01v-9.953h3.391c.984 0 1.769.305 2.354.916.586.611.879 1.404.879 2.379s-.29 1.744-.868 2.31c-.579.566-1.381.848-2.406.848H28.528zM28.528 27.824h1.381c.383 0 .679-.125.889-.375.209-.25.315-.615.315-1.094 0-.496-.107-.891-.321-1.188-.215-.293-.502-.441-.861-.445h-1.401V27.824z"/></svg>

After

Width:  |  Height:  |  Size: 607 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#33c481" d="M24,30.571c-8.837,0-16,4.921-16,10.286V42c0,1.105,0.895,2,2,2h28c1.105,0,2-0.895,2-2v-1.143 C40,35.492,32.837,30.571,24,30.571z"/><path fill="#21a366" d="M30,32.6c0-0.37,0-0.788,0-1.232c-1.854-0.506-3.876-0.796-6-0.796s-4.146,0.29-6,0.796 c0,0.445,0,0.863,0,1.232c0,2.277,6,8.4,6,8.4S30,34.876,30,32.6z"/><path fill="#d6a121" d="M29,32c0,1.897-5,7-5,7s-5-5.103-5-7c0-2.637,0-8.035,0-8.035h10C29,23.965,29,29.363,29,32z"/><path fill="#fff" d="M29,32c0,1.897-5,7-5,7s-5-5.103-5-7c0,0,2,2,5,2S29,32,29,32z"/><linearGradient id="DVu_EwlVcyi3M2~gQlPREa" x1="32.917" x2="34.251" y1="20" y2="20" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c48f0c"/><stop offset=".251" stop-color="#d19b16"/><stop offset=".619" stop-color="#dca51f"/><stop offset="1" stop-color="#e0a922"/></linearGradient><path fill="url(#DVu_EwlVcyi3M2~gQlPREa)" d="M32.916,18h-0.527v4h0.703c0.515,0,0.954-0.312,1.041-0.74l0.344-1.703 C34.642,18.743,33.897,18,32.916,18z"/><linearGradient id="DVu_EwlVcyi3M2~gQlPREb" x1="200.917" x2="202.251" y1="20" y2="20" gradientTransform="matrix(-1 0 0 1 216 0)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c48f0c"/><stop offset=".251" stop-color="#d19b16"/><stop offset=".619" stop-color="#dca51f"/><stop offset="1" stop-color="#e0a922"/></linearGradient><path fill="url(#DVu_EwlVcyi3M2~gQlPREb)" d="M15.084,18h0.527v4h-0.703c-0.515,0-0.954-0.312-1.041-0.74l-0.344-1.703 C13.358,18.743,14.103,18,15.084,18z"/><radialGradient id="DVu_EwlVcyi3M2~gQlPREc" cx="-30.778" cy="-.539" r="12.224" gradientTransform="translate(51.135 19.175) scale(.8816)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffcf54"/><stop offset=".261" stop-color="#fdcb4d"/><stop offset=".639" stop-color="#f7c13a"/><stop offset="1" stop-color="#f0b421"/></radialGradient><path fill="url(#DVu_EwlVcyi3M2~gQlPREc)" d="M24,6.4c-4.441,0-9,0.675-9,10.275c0,0.768,0,5.877,0,6.698C15,26.8,20.4,31,24,31 s9-4.2,9-7.627c0-0.821,0-5.929,0-6.698C33,7.075,28.441,6.4,24,6.4z"/><radialGradient id="DVu_EwlVcyi3M2~gQlPREd" cx="-40.48" cy="-14.192" r="28.915" gradientTransform="translate(51.135 19.175) scale(.8816)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c26715"/><stop offset=".508" stop-color="#b85515"/><stop offset="1" stop-color="#ad3f16"/></radialGradient><path fill="url(#DVu_EwlVcyi3M2~gQlPREd)" d="M24,5.545c-4.354,0-5,1.636-5,1.636c-1.77,0.261-5,2.854-5,5.818c0,1.654,0.265,2.876,1,7 c0.545-6.545,2.249-9,4-9c1.267,0,2.273,1,5,1c2.303,0,2.875-1,5-1c3,0,4,7.968,4,9c0.601-3.01,1-5.555,1-7 C34,9.57,30.209,5.545,24,5.545z"/><radialGradient id="DVu_EwlVcyi3M2~gQlPREe" cx="-53.966" cy="-12.256" r="33.398" gradientTransform="matrix(.8431 0 0 .8816 68.067 19.175)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c26715"/><stop offset=".508" stop-color="#b85515"/><stop offset="1" stop-color="#ad3f16"/></radialGradient><path fill="url(#DVu_EwlVcyi3M2~gQlPREe)" d="M24.219,5c-4.164,0-5.216,2.182-5.216,2.182c-0.042,1.159,0.522,2.182,0.522,2.182 S20.285,11,24.625,11C27.245,11,31,9.365,31,5C31,5,30.157,5,24.219,5z"/><rect width="2" height="5" x="23" y="39" fill="#21a366"/></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><linearGradient id="3pqdDc9GpRiC~~RXNJCBxa" x1="20.035" x2="4.818" y1="13.721" y2="29.585" gradientTransform="translate(0 14)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e5a505"/><stop offset=".01" stop-color="#e9a804"/><stop offset=".06" stop-color="#f4b102"/><stop offset=".129" stop-color="#fbb600"/><stop offset=".323" stop-color="#fdb700"/></linearGradient><path fill="url(#3pqdDc9GpRiC~~RXNJCBxa)" d="M12,41.5c0-1.381,1.119-2.5,2.5-2.5c0.156,0,0.307,0.019,0.454,0.046l1.186-1.186 C16.058,37.586,16,37.301,16,37c0-1.657,1.343-3,3-3c0.301,0,0.586,0.058,0.86,0.14L24,30l-6-6L4.586,37.414 C4.211,37.789,4,38.298,4,38.828v1.343c0,0.53,0.211,1.039,0.586,1.414l1.828,1.828C6.789,43.789,7.298,44,7.828,44h1.343 c0.53,0,1.039-0.211,1.414-0.586l1.46-1.46C12.019,41.807,12,41.656,12,41.5z"/><linearGradient id="3pqdDc9GpRiC~~RXNJCBxb" x1="21.64" x2="36.971" y1="-6.927" y2="15.362" gradientTransform="translate(0 14)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fede00"/><stop offset="1" stop-color="#ffd000"/></linearGradient><path fill="url(#3pqdDc9GpRiC~~RXNJCBxb)" d="M29.5,5C22.044,5,16,11.044,16,18.5S22.044,32,29.5,32S43,25.956,43,18.5S36.956,5,29.5,5z M33,19c-2.209,0-4-1.791-4-4s1.791-4,4-4s4,1.791,4,4S35.209,19,33,19z"/><path d="M39.86,27.16c-0.12,0.15-0.25,0.3-0.38,0.44c-2.47,2.7-6.03,4.4-9.98,4.4 h-0.11c-0.2,0-0.39-0.01-0.59-0.02c1.96-3,5.35-4.98,9.2-4.98C38.63,27,39.25,27.05,39.86,27.16z" opacity=".05"/><path d="M39.48,27.6c-2.47,2.7-6.03,4.4-9.98,4.4h-0.11 c1.9-2.72,5.05-4.5,8.61-4.5C38.5,27.5,39,27.54,39.48,27.6z" opacity=".07"/><linearGradient id="3pqdDc9GpRiC~~RXNJCBxc" x1="33.304" x2="42.696" y1="88.831" y2="71.169" gradientTransform="matrix(1 0 0 -1 0 118)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#21ad64"/><stop offset="1" stop-color="#088242"/></linearGradient><circle cx="38" cy="38" r="10" fill="url(#3pqdDc9GpRiC~~RXNJCBxc)"/><path fill="#fff" d="M38.5,43h-1c-0.276,0-0.5-0.224-0.5-0.5v-9c0-0.276,0.224-0.5,0.5-0.5h1c0.276,0,0.5,0.224,0.5,0.5v9 C39,42.776,38.776,43,38.5,43z"/><path fill="#fff" d="M33,38.5v-1c0-0.276,0.224-0.5,0.5-0.5h9c0.276,0,0.5,0.224,0.5,0.5v1c0,0.276-0.224,0.5-0.5,0.5h-9 C33.224,39,33,38.776,33,38.5z"/></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><linearGradient id="iucqluk~4TSJfp3H4setfa" x1="30.123" x2="41.07" y1="36.377" y2="25.43" gradientUnits="userSpaceOnUse"><stop offset=".365" stop-color="#199ae0"/><stop offset=".699" stop-color="#1898de"/><stop offset=".819" stop-color="#1691d8"/><stop offset=".905" stop-color="#1186cc"/><stop offset=".974" stop-color="#0a75bc"/><stop offset="1" stop-color="#076cb3"/></linearGradient><path fill="url(#iucqluk~4TSJfp3H4setfa)" d="M45.516,25.667L33.668,37.516c-0.645,0.645-1.69,0.645-2.335,0l-2.349-2.349 c-0.645-0.645-0.645-1.69,0-2.335l11.849-11.849c0.645-0.645,1.69-0.645,2.335,0l2.349,2.349 C46.161,23.977,46.161,25.023,45.516,25.667z"/><linearGradient id="iucqluk~4TSJfp3H4setfb" x1="19.812" x2="38.111" y1="15.281" y2="33.58" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1ea2e4"/><stop offset="1" stop-color="#32bdef"/></linearGradient><path fill="url(#iucqluk~4TSJfp3H4setfb)" d="M45.516,23.332L32.667,10.484c-0.645-0.645-1.69-0.645-2.335,0l-2.349,2.349 c-0.645,0.645-0.645,1.69,0,2.335L32.816,20H15.5c-0.828,0-1.5,0.672-1.5,1.5v5c0,0.828,0.672,1.5,1.5,1.5h25.316l0,0h2.368 l2.333-2.333C46.161,25.023,46.161,23.977,45.516,23.332z"/><linearGradient id="iucqluk~4TSJfp3H4setfc" x1="145.334" x2="155.403" y1="-109.48" y2="-109.48" gradientTransform="rotate(-90 147.24 26.76)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1ea2e4"/><stop offset="1" stop-color="#32bdef"/></linearGradient><path fill="url(#iucqluk~4TSJfp3H4setfc)" d="M12,21v6c0,0.552-0.448,1-1,1h0c-0.552,0-1-0.448-1-1v-6c0-0.552,0.448-1,1-1h0 C11.552,20,12,20.448,12,21z"/><linearGradient id="iucqluk~4TSJfp3H4setfd" x1="145.334" x2="155.403" y1="-113.48" y2="-113.48" gradientTransform="rotate(-90 147.24 26.76)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1ea2e4"/><stop offset="1" stop-color="#32bdef"/></linearGradient><path fill="url(#iucqluk~4TSJfp3H4setfd)" d="M8,21v6c0,0.552-0.448,1-1,1h0c-0.552,0-1-0.448-1-1v-6c0-0.552,0.448-1,1-1h0 C7.552,20,8,20.448,8,21z"/><linearGradient id="iucqluk~4TSJfp3H4setfe" x1="145.334" x2="155.403" y1="-117.48" y2="-117.48" gradientTransform="rotate(-90 147.24 26.76)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1ea2e4"/><stop offset="1" stop-color="#32bdef"/></linearGradient><path fill="url(#iucqluk~4TSJfp3H4setfe)" d="M4,21v6c0,0.552-0.448,1-1,1h0c-0.552,0-1-0.448-1-1v-6c0-0.552,0.448-1,1-1h0 C3.552,20,4,20.448,4,21z"/></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><linearGradient id="OhW_8EWeW2cETtZ_QU~4ka" x1="24" x2="24" y1="6.121" y2="42.039" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#33bef0"/><stop offset="1" stop-color="#0a85d9"/></linearGradient><path fill="url(#OhW_8EWeW2cETtZ_QU~4ka)" d="M40,42H8c-1.1,0-2-0.9-2-2V8c0-1.1,0.9-2,2-2h32c1.1,0,2,0.9,2,2v32C42,41.1,41.1,42,40,42z"/><path d="M37.02,20.243V19.5c0-0.827-0.673-1.5-1.5-1.5h-2.927c-0.827,0-1.5,0.673-1.5,1.5v0.529 C30.513,18.94,29.296,18,26.809,18H23.78c-0.827,0-1.5,0.673-1.5,1.5v7.729l-2.929-8.234C19.139,18.4,18.571,18,17.939,18h-1.969 c-0.627,0-1.193,0.396-1.409,0.987l-3.336,9.164c-0.154,0.422-0.093,0.893,0.165,1.261C11.647,29.78,12.069,30,12.519,30h1.537 c0.658,0,1.233-0.421,1.43-1.047l0.373-1.177h2.094l0.378,1.183C18.53,29.581,19.104,30,19.759,30h1.557 c0.446,0,0.866-0.218,1.124-0.582c0.029-0.041,0.046-0.087,0.07-0.13C22.775,29.714,23.243,30,23.78,30h1.252 c0.827,0,1.5-0.673,1.5-1.5v-1.945h0.074c1.449,0,2.643-0.395,3.549-1.172c0.95-0.816,1.433-1.892,1.433-3.196 c0-0.281-0.021-0.597-0.078-0.925c0.122,0.13,0.259,0.246,0.42,0.326v4.823c-0.495,0.245-0.837,0.756-0.837,1.345V28.5 c0,0.827,0.673,1.5,1.5,1.5h2.927c0.827,0,1.5-0.673,1.5-1.5v-0.743c0-0.589-0.342-1.1-0.837-1.345v-4.823 C36.678,21.343,37.02,20.833,37.02,20.243z M27.217,22.271c0,0.33,0,0.553-0.685,0.574v-1.114 C27.217,21.751,27.217,21.961,27.217,22.271z" opacity=".05"/><path d="M18.881,19.164c-0.142-0.397-0.521-0.664-0.941-0.664h-1.969c-0.418,0-0.796,0.264-0.939,0.658 l-3.336,9.165c-0.098,0.269-0.059,0.568,0.104,0.803c0.164,0.234,0.433,0.374,0.719,0.374h1.537c0.438,0,0.822-0.281,0.953-0.698 l0.483-1.526h2.825l0.488,1.53c0.134,0.416,0.517,0.695,0.953,0.695h1.557c0.284,0,0.552-0.139,0.716-0.371 c0.164-0.232,0.205-0.531,0.109-0.799L18.881,19.164z M17.481,24.546h-1.188l0.596-1.856L17.481,24.546z" opacity=".07"/><path d="M26.809,18.5H23.78c-0.552,0-1,0.449-1,1v9c0,0.551,0.448,1,1,1h1.252c0.552,0,1-0.449,1-1v-2.445 h0.574c1.326,0,2.41-0.354,3.224-1.052c0.835-0.717,1.258-1.665,1.258-2.816C31.088,20.505,30.346,18.5,26.809,18.5z M27.717,22.271 c0,0.559-0.157,1.076-1.299,1.076h-0.386v-2.117h0.386C27.56,21.229,27.717,21.73,27.717,22.271z" opacity=".07"/><path d="M36.52,20.243V19.5c0-0.551-0.448-1-1-1h-2.927c-0.552,0-1,0.449-1,1v0.743 c0,0.496,0.363,0.909,0.837,0.987v5.54c-0.474,0.078-0.837,0.491-0.837,0.987V28.5c0,0.551,0.448,1,1,1h2.927c0.552,0,1-0.449,1-1 v-0.743c0-0.496-0.363-0.909-0.837-0.987v-5.54C36.156,21.152,36.52,20.739,36.52,20.243z M36.019,19.5L36.019,19.5L36.019,19.5 L36.019,19.5z" opacity=".07"/><path fill="#fff" d="M21.315,29h-1.557c-0.217,0-0.41-0.141-0.476-0.348l-0.6-1.877h-3.556l-0.594,1.875 C14.466,28.859,14.273,29,14.055,29h-1.537c-0.261,0-0.443-0.26-0.354-0.505l3.337-9.166c0.072-0.198,0.26-0.329,0.47-0.329h1.968 c0.212,0,0.4,0.133,0.471,0.332l3.26,9.165C21.757,28.743,21.575,29,21.315,29z M18.166,25.046l-1.074-3.361 c-0.079-0.251-0.135-0.551-0.167-0.9h-0.056c-0.023,0.293-0.081,0.583-0.174,0.872l-1.088,3.389H18.166z"/><path fill="#fff" d="M25.532,25.555V28.5c0,0.276-0.224,0.5-0.5,0.5H23.78c-0.276,0-0.5-0.224-0.5-0.5v-9 c0-0.276,0.224-0.5,0.5-0.5h3.029c2.52,0,3.78,1.062,3.78,3.187c0,1.004-0.361,1.817-1.084,2.437s-1.689,0.931-2.897,0.931H25.532z M25.532,20.729v3.117h0.886c1.199,0,1.799-0.525,1.799-1.576c0-1.027-0.6-1.541-1.799-1.541H25.532z"/><path fill="#fff" d="M36.019,19.5v0.743c0,0.276-0.224,0.5-0.5,0.5h-0.337v6.513h0.337c0.276,0,0.5,0.224,0.5,0.5V28.5 c0,0.276-0.224,0.5-0.5,0.5h-2.926c-0.276,0-0.5-0.224-0.5-0.5v-0.743c0-0.276,0.224-0.5,0.5-0.5h0.337v-6.513h-0.337 c-0.276,0-0.5-0.224-0.5-0.5V19.5c0-0.276,0.224-0.5,0.5-0.5h2.926C35.795,19,36.019,19.224,36.019,19.5z"/></svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><linearGradient id="ldLw80Wb5w9tTRcKjgX8Ga" x1="2.252" x2="34.131" y1="12.996" y2="42.423" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0077d2"/><stop offset="1" stop-color="#0b59a2"/></linearGradient><path fill="url(#ldLw80Wb5w9tTRcKjgX8Ga)" d="M23.008,22.387L6.256,31.181c-1.523,0.8-1.523,2.98,0,3.779l16.752,8.795 c0.621,0.326,1.363,0.326,1.984,0l16.752-8.795c1.523-0.8,1.523-2.98,0-3.779l-16.752-8.795 C24.371,22.06,23.629,22.06,23.008,22.387z"/><path d="M25.457,35.569L37.78,29.1l-12.787-6.713c-0.621-0.326-1.363-0.326-1.984,0L10.22,29.1l12.322,6.469 c0.447,0.235,0.952,0.36,1.458,0.36S25.011,35.805,25.457,35.569z" opacity=".05"/><path d="M25.225,35.127l12.017-6.309l-12.25-6.431c-0.621-0.326-1.363-0.326-1.984,0l-12.25,6.431 l12.017,6.309c0.376,0.198,0.8,0.303,1.225,0.303S24.849,35.325,25.225,35.127z" opacity=".07"/><linearGradient id="ldLw80Wb5w9tTRcKjgX8Gb" x1="6.773" x2="38.652" y1="8.098" y2="37.525" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2aa4f4"/><stop offset="1" stop-color="#007ad9"/></linearGradient><path fill="url(#ldLw80Wb5w9tTRcKjgX8Gb)" d="M23.008,13.316L6.256,22.11c-1.523,0.8-1.523,2.98,0,3.779l16.752,8.795 c0.621,0.326,1.363,0.326,1.984,0l16.752-8.795c1.523-0.8,1.523-2.98,0-3.779l-16.752-8.795 C24.371,12.989,23.629,12.989,23.008,13.316z"/><path d="M25.457,26.498l12.322-6.469l-12.787-6.713c-0.621-0.326-1.363-0.326-1.984,0l-12.787,6.713 l12.321,6.469c0.447,0.235,0.952,0.36,1.458,0.36S25.011,26.733,25.457,26.498z" opacity=".05"/><path d="M25.225,26.056l12.017-6.309l-12.25-6.431c-0.621-0.326-1.363-0.326-1.984,0l-12.25,6.431 l12.017,6.309c0.376,0.198,0.8,0.303,1.225,0.303S24.849,26.254,25.225,26.056z" opacity=".07"/><linearGradient id="ldLw80Wb5w9tTRcKjgX8Gc" x1="11.294" x2="43.173" y1="3.201" y2="32.627" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#75daff"/><stop offset="1" stop-color="#1ea2e4"/></linearGradient><path fill="url(#ldLw80Wb5w9tTRcKjgX8Gc)" d="M23.008,4.245L6.256,13.039c-1.523,0.8-1.523,2.98,0,3.779l16.752,8.795 c0.621,0.326,1.363,0.326,1.984,0l16.752-8.795c1.523-0.8,1.523-2.98,0-3.779L24.992,4.245C24.371,3.918,23.629,3.918,23.008,4.245z"/></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px"><path fill="#50e6ff" d="M44,8v33h-8V8c0-0.552,0.448-1,1-1h6C43.552,7,44,7.448,44,8z"/><path fill="#35c1f1" d="M36,15v26h-8V15H36z"/><path fill="#199be2" d="M28,13v28h-8V13c0-0.552,0.448-1,1-1h6C27.552,12,28,12.448,28,13z"/><path fill="#0078d4" d="M20,20v21h-8V20H20z"/><path fill="#0d62ab" d="M12,17v24H4V17c0-0.552,0.448-1,1-1h6C11.552,16,12,16.448,12,17z"/></svg>

After

Width:  |  Height:  |  Size: 453 B

@ -0,0 +1,31 @@
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48" width="96px" height="96px">
<defs>
<linearGradient id="p0leOTPLvuNkjL_fSa~qVa" x1="24" x2="24" y1="9.109" y2="13.568" data-name="Безымянный градиент 6" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#0077d2"/>
<stop offset="1" stop-color="#0b59a2"/>
</linearGradient>
<linearGradient id="p0leOTPLvuNkjL_fSa~qVb" x1="4.5" x2="4.5" y1="26.717" y2="41.786" xlink:href="#p0leOTPLvuNkjL_fSa~qVa"/>
<linearGradient id="p0leOTPLvuNkjL_fSa~qVc" x1="43.5" x2="43.5" y1="26.717" y2="41.786" xlink:href="#p0leOTPLvuNkjL_fSa~qVa"/>
<linearGradient id="p0leOTPLvuNkjL_fSa~qVd" x1="16" x2="16" y1="25.054" y2="43.495" xlink:href="#p0leOTPLvuNkjL_fSa~qVa"/>
<linearGradient id="p0leOTPLvuNkjL_fSa~qVe" x1="32" x2="32" y1="25.054" y2="43.495" xlink:href="#p0leOTPLvuNkjL_fSa~qVa"/>
</defs>
<rect width="2" height="6" x="23" y="8" fill="url(#p0leOTPLvuNkjL_fSa~qVa)"/>
<path fill="url(#p0leOTPLvuNkjL_fSa~qVb)" d="M6,27H8a0,0,0,0,1,0,0V37a0,0,0,0,1,0,0H6a5,5,0,0,1-5-5v0A5,5,0,0,1,6,27Z"/>
<path fill="url(#p0leOTPLvuNkjL_fSa~qVc)" d="M40,27h2a5,5,0,0,1,5,5v0a5,5,0,0,1-5,5H40a0,0,0,0,1,0,0V27A0,0,0,0,1,40,27Z"/>
<path fill="#199be2" d="M24,13h0A18,18,0,0,1,42,31v8a2,2,0,0,1-2,2H8a2,2,0,0,1-2-2V31A18,18,0,0,1,24,13Z"/>
<circle cx="16" cy="31" r="6" fill="url(#p0leOTPLvuNkjL_fSa~qVd)"/>
<circle cx="32" cy="31" r="6" fill="url(#p0leOTPLvuNkjL_fSa~qVe)"/>
<circle cx="32" cy="31" r="4" fill="#50e6ff"/>
<circle cx="32" cy="31" r="2" fill="url(#p0leOTPLvuNkjL_fSa~qVe)"/>
<circle cx="16" cy="31" r="4" fill="#50e6ff"/>
<circle cx="16" cy="31" r="2" fill="url(#p0leOTPLvuNkjL_fSa~qVd)"/>
<circle cx="24" cy="8" r="2" fill="#199be2"/>
<circle cx="24" cy="8" r="3" fill="#02C39A">
<animate attributeName="opacity" dur="1.5s" values="0;1;0;0" repeatCount="indefinite" begin="0.1" />
</circle>
<circle cx="24" cy="8" r="3" fill="#f99d4d">
<animate attributeName="opacity" dur="1.5s" values="0;0;1;0" repeatCount="indefinite" begin="0.1" />
</circle>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Loading…
Cancel
Save