Merge branch 'master' into gh-3125

pull/4000/head
Rich Harris 6 years ago committed by GitHub
commit 923c89b740
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,5 +1,6 @@
**/_actual.js
**/expected.js
_output
test/*/samples/*/output.js
node_modules

@ -36,7 +36,8 @@ module.exports = {
}
],
'@typescript-eslint/no-object-literal-type-assertion': 'off',
'@typescript-eslint/no-unused-vars': 'off'
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/prefer-interface': 'off'
},
globals: {
globalThis: false

@ -23,3 +23,9 @@ jobs:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
- run: 'npm i && npm run lint'
Unit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
- run: 'npm i && npm run test:unit'

4
.gitignore vendored

@ -23,6 +23,7 @@ node_modules
/test/sourcemaps/samples/*/output.css.map
/yarn-error.log
_actual*.*
_output
/types
/site/cypress/screenshots/
@ -32,5 +33,8 @@ _actual*.*
/site/static/svelte-app.json
/site/static/contributors.jpg
/site/static/workers
/site/static/organisations
/site/scripts/svelte-app
/site/scripts/community
/site/src/routes/_contributors.js
/site/src/routes/_components/WhosUsingSvelte.svelte

@ -2,11 +2,103 @@
## Unreleased
* Disallow attribute/prop names from matching two-way-bound names or `{shorthand}` attribute/prop names ([#4325](https://github.com/sveltejs/svelte/issues/4325))
## 3.18.1
* Fix code generation error with adjacent inline and block comments ([#4312](https://github.com/sveltejs/svelte/issues/4312))
* Fix detection of unused CSS selectors that begin with a `:global()` but contain a scoped portion ([#4314](https://github.com/sveltejs/svelte/issues/4314))
## 3.18.0
* Fix infinite loop when instantiating another component during `onMount` ([#3218](https://github.com/sveltejs/svelte/issues/3218))
* Make autosubscribing to a nullish store a no-op ([#2181](https://github.com/sveltejs/svelte/issues/2181))
## 3.17.3
* Fix updating a `<slot>` inside an `{#if}` or other block ([#4292](https://github.com/sveltejs/svelte/issues/4292))
* Fix using RxJS observables in `derived` stores ([#4298](https://github.com/sveltejs/svelte/issues/4298))
* Add dev mode check to disallow duplicate keys in a keyed `{#each}` ([#4301](https://github.com/sveltejs/svelte/issues/4301))
* Fix hydration of `<title>` when starting from SSR-generated code with `hydratable: true` ([#4310](https://github.com/sveltejs/svelte/issues/4310))
## 3.17.2
* Fix removing attributes during hydration ([#1733](https://github.com/sveltejs/svelte/issues/1733))
* Disallow two-way binding to a variable declared by an `{#await}` block ([#4012](https://github.com/sveltejs/svelte/issues/4012))
* Allow access to `let:` variables in sibling attributes on slot root ([#4173](https://github.com/sveltejs/svelte/issues/4173))
* Fix `~=` and class selector matching against values separated by any whitespace characters ([#4242](https://github.com/sveltejs/svelte/issues/4242))
* Fix code generation for `await`ed expressions that need parentheses ([#4267](https://github.com/sveltejs/svelte/issues/4267))
* Preserve JavaScript comments from the original component source where possible ([#4268](https://github.com/sveltejs/svelte/issues/4268))
* Add some more known globals ([#4276](https://github.com/sveltejs/svelte/pull/4276))
* Correctly apply event modifiers to `<svelte:body>` events ([#4278](https://github.com/sveltejs/svelte/issues/4278))
## 3.17.1
* Only attach SSR mode markers to a component's `<head>` elements when compiling with `hydratable: true` ([#4258](https://github.com/sveltejs/svelte/issues/4258))
## 3.17.0
* Remove old `<head>` elements during hydration so they aren't duplicated ([#1607](https://github.com/sveltejs/svelte/issues/1607))
* Prevent text input cursor jumping in Safari with one-way binding ([#3449](https://github.com/sveltejs/svelte/issues/3449))
* Expose compiler version in dev events ([#4047](https://github.com/sveltejs/svelte/issues/4047))
* Don't run actions before their element is in the document ([#4166](https://github.com/sveltejs/svelte/issues/4166))
* Fix reactive assignments with destructuring and stores where the destructured value should be undefined ([#4170](https://github.com/sveltejs/svelte/issues/4170))
* Fix hydrating `{:else}` in `{#each}` ([#4202](https://github.com/sveltejs/svelte/issues/4202))
* Do not automatically declare variables in reactive declarations when assigning to a member expression ([#4212](https://github.com/sveltejs/svelte/issues/4212))
* Fix stringifying of attributes in SSR mode when there are spread attributes ([#4240](https://github.com/sveltejs/svelte/issues/4240))
* Only render one `<title>` in SSR mode when multiple components provide one ([#4250](https://github.com/sveltejs/svelte/pull/4250))
## 3.16.7
* Also apply actions in the order they're given along with other directives ([#2446](https://github.com/sveltejs/svelte/issues/2446), [#4156](https://github.com/sveltejs/svelte/pull/4156))
* Check whether a dynamic event handler is a function before calling it ([#4090](https://github.com/sveltejs/svelte/issues/4090))
* Correctly mark event handlers as dynamic when they involve an expression used in a `bind:` elsewhere ([#4155](https://github.com/sveltejs/svelte/pull/4155))
## 3.16.6
* Fix CSS specificity bug when encapsulating styles ([#1277](https://github.com/sveltejs/svelte/issues/1277))
* Apply directives in the order they're given ([#2446](https://github.com/sveltejs/svelte/issues/2446))
* Fix destructuring in `let:` directives ([#2751](https://github.com/sveltejs/svelte/issues/2751))
* Preserve whitespace around `<tspan>`s in `<svg>`s ([#3998](https://github.com/sveltejs/svelte/issues/3998))
## 3.16.5
* Better fix for cascading invalidations and fix some regressions ([#4098](https://github.com/sveltejs/svelte/issues/4098), [#4114](https://github.com/sveltejs/svelte/issues/4114), [#4120](https://github.com/sveltejs/svelte/issues/4120))
## 3.16.4
* Fix slots with props not propagating through to inner slots ([#4061](https://github.com/sveltejs/svelte/issues/4061))
* Fix noting autosubscribed stores as `referenced` in `vars` for tooling ([#4081](https://github.com/sveltejs/svelte/issues/4081))
* Fix cascading invalidations in certain situations ([#4094](https://github.com/sveltejs/svelte/issues/4094))
## 3.16.3
* Fix bitmask overflow when using slotted components ([#4077](https://github.com/sveltejs/svelte/issues/4077))
* Remove unnecessary `$$invalidate` calls from init block ([#4018](https://github.com/sveltejs/svelte/issues/4018))
## 3.16.2
* Handle slot updates when parent component has a bitmask overflow ([#4078](https://github.com/sveltejs/svelte/pull/4078))
## 3.16.1
* Fix unused export warning for props used as stores ([#4021](https://github.com/sveltejs/svelte/issues/4021))
* Fix `{:then}` without resolved value containing `{#each}` ([#4022](https://github.com/sveltejs/svelte/issues/4022))
* Fix incorrect code generated with `loopGuardTimeout` ([#4034](https://github.com/sveltejs/svelte/issues/4034))
* Fix handling of bitmask overflow and globals ([#4037](https://github.com/sveltejs/svelte/issues/4037))
* Fix `{:then}` containing `{#if}` ([#4044](https://github.com/sveltejs/svelte/issues/4044))
* Fix bare `import`s in `format: 'cjs'` output mode ([#4055](https://github.com/sveltejs/svelte/issues/4050))
* Warn when using a known global as a component name ([#4070](https://github.com/sveltejs/svelte/issues/4070))
## 3.16.0
* Use bitmasks to track changes ([#3945](https://github.com/sveltejs/svelte/pull/3945))
* Fix heisenbug with component styles ([#3977](https://github.com/sveltejs/svelte/issues/3977))
* Do not warn about missing expected props for `export function foo() {}` ([#3954](https://github.com/sveltejs/svelte/issues/3954))
* Fix `context="module"` exports with the same name as an instance variable ([#3983](https://github.com/sveltejs/svelte/issues/3983))
* Fix binding to contextual values from `{#each}` blocks referring to global variables ([#3992](https://github.com/sveltejs/svelte/issues/3992))
* Use `requestAnimationFrame` callback argument for smoother transitions ([#4014](https://github.com/sveltejs/svelte/pull/4014))
* Fix `listen_dev` argument order ([#4016](https://github.com/sveltejs/svelte/pull/4016))
## 3.15.0

@ -2,7 +2,7 @@
Svelte is a new way to build web applications. It's a compiler that takes your declarative components and converts them into efficient JavaScript that surgically updates the DOM.
The [Open Source Guides](https://opensource.guide/) website has a collection of resources for individuals, communities, and companies who want to learn how to run and contribute to an open source project. Contributors and people new to open source alike will find the following guides especially useful:
The [Open Source Guides](https://opensource.guide/) website has a collection of resources for individuals, communities, and companies. These resources help people who want to learn how to run and contribute to open source projects. Contributors and people new to open source alike will find the following guides especially useful:
* [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)
* [Building Welcoming Communities](https://opensource.guide/building-community/)
@ -30,7 +30,7 @@ One great way you can contribute to the project without writing any code is to h
## Bugs
We use [GitHub issues](https://github.com/sveltejs/svelte/issues) for our public bugs. If you would like to report a problem, take a look around and see if someone already opened an issue about it. If you a are certain this is a new, unreported bug, you can submit a [bug report](#reporting-new-issues).
We use [GitHub issues](https://github.com/sveltejs/svelte/issues) for our public bugs. If you would like to report a problem, take a look around and see if someone already opened an issue about it. If you are certain this is a new unreported bug, you can submit a [bug report](#reporting-new-issues).
If you have questions about using Svelte, contact us on Discord at [svelte.dev/chat](https://svelte.dev/chat), and we will do our best to answer your questions.
@ -64,7 +64,7 @@ Working on your first Pull Request? You can learn how from this free video serie
If you would like to request a new feature or enhancement but are not yet thinking about opening a pull request, you can also file an issue with [feature template](https://github.com/sveltejs/svelte/issues/new?template=feature_request.md).
If you're only fixing a bug, it's fine to submit a pull request right away but we still recommend to file an issue detailing what you're fixing. This is helpful in case we don't accept that specific fix but want to keep track of the issue.
If you're only fixing a bug, it's fine to submit a pull request right away but we still recommend that you file an issue detailing what you're fixing. This is helpful in case we don't accept that specific fix but want to keep track of the issue.
### Sending a pull request

@ -1,4 +1,4 @@
Copyright (c) 2016-19 [these people](https://github.com/sveltejs/svelte/graphs/contributors)
Copyright (c) 2016-20 [these people](https://github.com/sveltejs/svelte/graphs/contributors)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

@ -7,12 +7,8 @@
<img src="https://img.shields.io/npm/v/svelte.svg" alt="npm version">
</a>
<a href="https://packagephobia.now.sh/result?p=svelte">
<img src="https://packagephobia.now.sh/badge?p=svelte" alt="install size">
</a>
<a href="https://travis-ci.org/sveltejs/svelte">
<img src="https://api.travis-ci.org/sveltejs/svelte.svg?branch=master"
<a href="https://github.com/sveltejs/svelte/actions">
<img src="https://github.com/sveltejs/svelte/workflows/CI/badge.svg?branch=master"
alt="build status">
</a>

206
package-lock.json generated

@ -1,6 +1,6 @@
{
"name": "svelte",
"version": "3.15.0",
"version": "3.18.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -30,16 +30,113 @@
"integrity": "sha512-KioOCsSvSvXx6xUNLiJz+P+VMb7NRcePjoefOr74Y5P6lEKsiOn35eZyZzgpK4XCNJdXTDR7+zykj0lwxRvZ2g==",
"dev": true
},
"@rollup/plugin-commonjs": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.0.tgz",
"integrity": "sha512-jnm//T5ZWOZ6zmJ61fReSCBOif+Ax8dHVoVggA+d2NA7T4qCWgQ3KYr+zN2faGEYLpe1wa03IzvhR+sqVLxUWg==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.0.0",
"estree-walker": "^0.6.1",
"is-reference": "^1.1.2",
"magic-string": "^0.25.2",
"resolve": "^1.11.0"
},
"dependencies": {
"estree-walker": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
"integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
"dev": true
}
}
},
"@rollup/plugin-json": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.0.1.tgz",
"integrity": "sha512-soxllkhOGgchswBAAaTe7X9G80U2tjjHvXv0sBrriLJcC/89PkP59iTrKPOfbz3SjX088mKDmMhAscuyLz8ZSg==",
"dev": true,
"requires": {
"rollup-pluginutils": "^2.5.0"
}
},
"@rollup/plugin-node-resolve": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-6.0.0.tgz",
"integrity": "sha512-GqWz1CfXOsqpeVMcoM315+O7zMxpRsmhWyhJoxLFHVSp9S64/u02i7len/FnbTNbmgYs+sZyilasijH8UiuboQ==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.0.0",
"@types/resolve": "0.0.8",
"builtin-modules": "^3.1.0",
"is-module": "^1.0.0",
"resolve": "^1.11.1"
}
},
"@rollup/plugin-replace": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.2.1.tgz",
"integrity": "sha512-dgq5ijT8fK18KTb1inenZ61ivTayV7pvbz2+ivT+VN20BOgJVM1fqoBETqGHKgFVm/J9BhR82mQyAtxfpPv1lQ==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.0.tgz",
"integrity": "sha512-rzWAMqXAHC1w3eKpK6LxRqiF4f3qVFaa1sGii6Bp3rluKcwHNOpPt+hWRCmAH6SDEPtbPiLFf0pfNQyHs6Btlg==",
"dev": true,
"requires": {
"magic-string": "^0.25.2",
"rollup-pluginutils": "^2.6.0"
}
},
"@rollup/plugin-sucrase": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-sucrase/-/plugin-sucrase-3.0.0.tgz",
"integrity": "sha512-sUQkoAXdw+bnd/cNZHGy5yQKW6OYYU7QlYBGhReI95uZljxO8t1LlbqCO2viIMV/u9pcCjgi8N9PcApcrJCA8Q==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.0.1",
"sucrase": "^3.10.1"
}
},
"@rollup/plugin-typescript": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-2.0.1.tgz",
"integrity": "sha512-UA/bN/DlHN19xdOllXmp7G7pM2ac9dQMg0q2T1rg4Bogzb7oHXj2WGafpiNpEm54PivcJdzGRJvRnI6zCISW3w==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.0.0",
"resolve": "^1.12.2"
},
"dependencies": {
"resolve": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz",
"integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
}
}
}
},
"@rollup/plugin-virtual": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-2.0.0.tgz",
"integrity": "sha512-yUyQjcflsN1DGcUHj3I0NYL6Y6xrna6qjdaGjM93LjFLq8NFowhR0655ICeV9bNDbk+LI4pz7Q6xqeDdj1RdlA==",
"dev": true
},
"@rollup/pluginutils": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.1.tgz",
"integrity": "sha512-PmNurkecagFimv7ZdKCVOfQuqKDPkrcpLFxRBcQ00LYr4HAjJwhCFxBiY2Xoletll2htTIiXBg6g0Yg21h2M3w==",
"dev": true,
"requires": {
"estree-walker": "^0.6.1"
},
"dependencies": {
"estree-walker": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
"integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
"dev": true
}
}
},
"@types/eslint-visitor-keys": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
@ -500,9 +597,9 @@
"dev": true
},
"code-red": {
"version": "0.0.26",
"resolved": "https://registry.npmjs.org/code-red/-/code-red-0.0.26.tgz",
"integrity": "sha512-W4t68vk3xJjmkbuAKfEtaj7E+K82BtV+A4VjBlxHA6gDoSLc+sTB643JdJMSk27vpp5iEqHFuGnHieQGy/GmUQ==",
"version": "0.0.32",
"resolved": "https://registry.npmjs.org/code-red/-/code-red-0.0.32.tgz",
"integrity": "sha512-mE+EZc2vJ4HxiejW5S2CvcVDKtopFEmrqAd9DTBDLCNjLgxekPP8wLi/ZiwDTwZwwW3dzeetaubLaMlIvkhVNw==",
"dev": true,
"requires": {
"acorn": "^7.1.0",
@ -1496,9 +1593,9 @@
"dev": true
},
"handlebars": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz",
"integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==",
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz",
"integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==",
"dev": true,
"requires": {
"neo-async": "^2.6.0",
@ -3058,85 +3155,14 @@
}
},
"rollup": {
"version": "1.21.4",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-1.21.4.tgz",
"integrity": "sha512-Pl512XVCmVzgcBz5h/3Li4oTaoDcmpuFZ+kdhS/wLreALz//WuDAMfomD3QEYl84NkDu6Z6wV9twlcREb4qQsw==",
"dev": true,
"requires": {
"@types/estree": "0.0.39",
"@types/node": "^12.7.5",
"acorn": "^7.0.0"
},
"dependencies": {
"@types/node": {
"version": "12.7.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz",
"integrity": "sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w==",
"dev": true
}
}
},
"rollup-plugin-commonjs": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz",
"integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==",
"dev": true,
"requires": {
"estree-walker": "^0.6.1",
"is-reference": "^1.1.2",
"magic-string": "^0.25.2",
"resolve": "^1.11.0",
"rollup-pluginutils": "^2.8.1"
},
"dependencies": {
"estree-walker": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
"integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
"dev": true
}
}
},
"rollup-plugin-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz",
"integrity": "sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow==",
"dev": true,
"requires": {
"rollup-pluginutils": "^2.5.0"
}
},
"rollup-plugin-node-resolve": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz",
"integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==",
"version": "1.27.14",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-1.27.14.tgz",
"integrity": "sha512-DuDjEyn8Y79ALYXMt+nH/EI58L5pEw5HU9K38xXdRnxQhvzUTI/nxAawhkAHUQeudANQ//8iyrhVRHJBuR6DSQ==",
"dev": true,
"requires": {
"@types/resolve": "0.0.8",
"builtin-modules": "^3.1.0",
"is-module": "^1.0.0",
"resolve": "^1.11.1",
"rollup-pluginutils": "^2.8.1"
}
},
"rollup-plugin-sucrase": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-sucrase/-/rollup-plugin-sucrase-2.1.0.tgz",
"integrity": "sha512-chdA3OruR1FH/IIKrzZCpGKLXAx3DOHoK24RIPtlVccK0wbTpHE0HpGEQYCxte1XaB17NgRe/frFyKR7g45qxQ==",
"dev": true,
"requires": {
"rollup-pluginutils": "^2.3.0",
"sucrase": "3.x"
}
},
"rollup-plugin-typescript": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/rollup-plugin-typescript/-/rollup-plugin-typescript-1.0.1.tgz",
"integrity": "sha512-rwJDNn9jv/NsKZuyBb/h0jsclP4CJ58qbvZt2Q9zDIGILF2LtdtvCqMOL+Gq9IVq5MTrTlHZNrn8h7VjQgd8tw==",
"dev": true,
"requires": {
"resolve": "^1.10.0",
"rollup-pluginutils": "^2.5.0"
"@types/estree": "*",
"@types/node": "*",
"acorn": "^7.1.0"
}
},
"rollup-plugin-virtual": {
@ -3146,9 +3172,9 @@
"dev": true
},
"rollup-pluginutils": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz",
"integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==",
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
"integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
"dev": true,
"requires": {
"estree-walker": "^0.6.1"

@ -1,6 +1,6 @@
{
"name": "svelte",
"version": "3.15.0",
"version": "3.18.1",
"description": "Cybernetically enhanced web apps",
"module": "index.mjs",
"main": "index",
@ -56,7 +56,13 @@
},
"homepage": "https://github.com/sveltejs/svelte#README",
"devDependencies": {
"@rollup/plugin-replace": "^2.2.1",
"@rollup/plugin-commonjs": "^11.0.0",
"@rollup/plugin-json": "^4.0.1",
"@rollup/plugin-node-resolve": "^6.0.0",
"@rollup/plugin-replace": "^2.3.0",
"@rollup/plugin-sucrase": "^3.0.0",
"@rollup/plugin-typescript": "^2.0.1",
"@rollup/plugin-virtual": "^2.0.0",
"@types/mocha": "^5.2.7",
"@types/node": "^8.10.53",
"@typescript-eslint/eslint-plugin": "^1.13.0",
@ -64,7 +70,7 @@
"acorn": "^7.1.0",
"agadoo": "^1.1.0",
"c8": "^5.0.1",
"code-red": "0.0.26",
"code-red": "0.0.32",
"codecov": "^3.5.0",
"css-tree": "1.0.0-alpha22",
"eslint": "^6.3.0",
@ -79,13 +85,7 @@
"mocha": "^6.2.0",
"periscopic": "^2.0.1",
"puppeteer": "^1.19.0",
"rollup": "^1.21.4",
"rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-json": "^4.0.0",
"rollup-plugin-node-resolve": "^5.2.0",
"rollup-plugin-sucrase": "^2.1.0",
"rollup-plugin-typescript": "^1.0.1",
"rollup-plugin-virtual": "^1.0.1",
"rollup": "^1.27.14",
"source-map": "^0.7.3",
"source-map-support": "^0.5.13",
"tiny-glob": "^0.2.6",

@ -1,10 +1,10 @@
import fs from 'fs';
import replace from '@rollup/plugin-replace';
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import json from 'rollup-plugin-json';
import sucrase from 'rollup-plugin-sucrase';
import typescript from 'rollup-plugin-typescript';
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
import sucrase from '@rollup/plugin-sucrase';
import typescript from '@rollup/plugin-typescript';
import pkg from './package.json';
const is_publish = !!process.env.PUBLISH;
@ -60,6 +60,9 @@ export default [
],
external,
plugins: [
replace({
__VERSION__: pkg.version
}),
ts_plugin,
{
writeBundle(bundle) {

@ -1,3 +1,6 @@
# IMPORTANT: Don't use this Dockerfile in your own Sapper projects without also looking at the .dockerignore file.
# Without an appropriate .dockerignore, this Dockerfile will copy a large number of unneeded files into your image.
FROM mhart/alpine-node:12
# install dependencies

@ -14,9 +14,9 @@ sapper:
docker:
@echo "\n~> building docker image"
@gcloud builds submit -t $(IMAGE)
@gcloud builds submit --project $(PROJECT) -t $(IMAGE)
deploy: sapper docker
@echo "\n~> deploying $(SERVICE) to Cloud Run servers"
@gcloud beta run deploy $(SERVICE) --allow-unauthenticated --platform managed --region us-central1 --image $(IMAGE) --memory=512Mi
@gcloud run deploy $(SERVICE) --project $(PROJECT) --allow-unauthenticated --platform managed --region us-central1 --image $(IMAGE) --memory=512Mi

@ -53,7 +53,7 @@ What happens if we use the new model as a starting point?
The same 'hello world' app that took 204kb with React and Next weighs just 7kb with Sapper. That number is likely to fall further in the future as we explore the space of optimisation possibilities, such as not shipping any JavaScript *at all* for pages that aren't interactive, beyond the tiny Sapper runtime that handles client-side routing.
What about a more 'real world' example? Conveniently, the [RealWorld](https://github.com/gothinkster/realworld) project, which challenges frameworks to develop an implementation of a Medium clone, gives us a way to find out. The [Sapper implementation](http://svelte-realworld.now.sh/) takes 39.6kb (11.8kb zipped) to render an interactive homepage.
What about a more 'real world' example? Conveniently, the [RealWorld](https://github.com/gothinkster/realworld) project, which challenges frameworks to develop an implementation of a Medium clone, gives us a way to find out. The [Sapper implementation](https://github.com/sveltejs/realworld) takes 39.6kb (11.8kb zipped) to render an interactive homepage.
<aside><p>Code-splitting isn't free — if the reference implementation used code-splitting, it would be larger still</p></aside>

@ -60,7 +60,7 @@ To treat `*.svelte` files as HTML, add the following lines to your `settings.jso
## JetBrains WebStorm
To treat `*.svelte` files as HTML in WebStorm, you need to create a new file type association. Please refer to the [JetBrains website](https://www.jetbrains.com/help/webstorm/creating-and-registering-file-types.html) to see how.
The [Svelte Framework Integration](https://plugins.jetbrains.com/plugin/12375-svelte/) can be used to add support for Svelte to WebStorm, or other Jetbrains IDEs. Consult the [WebStorm plugin installation guide](https://www.jetbrains.com/help/webstorm/managing-plugins.html) on the JetBrains website for more details.
## Sublime Text 3

@ -159,6 +159,6 @@ In Vue, meanwhile, we have a default export with a `data` function that returns
## Death to boilerplate
These are just some of the ways that Svelte helps you build user interfaces with a minimum of fuss. There are plenty of others — for example, [reactive declarations](https://svelte.dev/tutorial/reactive-declarations) essentially do the work of React's `useMemo`, `useCallback` and `useEffect` without the boilerplate (or indeed the garbage collection overhead of creating inline functions and arrays on each state change).
These are just some of the ways that Svelte helps you build user interfaces with a minimum of fuss. There are plenty of others — for example, [reactive declarations](tutorial/reactive-declarations) essentially do the work of React's `useMemo`, `useCallback` and `useEffect` without the boilerplate (or indeed the garbage collection overhead of creating inline functions and arrays on each state change).
How? By choosing a different set of constraints. Because [Svelte is a compiler](blog/frameworks-without-the-framework), we're not bound to the peculiarities of JavaScript: we can *design* a component authoring experience, rather than having to fit it around the semantics of the language. Paradoxically, this results in *more* idiomatic code — for example using variables naturally rather than via proxies or hooks — while delivering significantly more performant apps.

@ -2,8 +2,8 @@
title: Before we begin
---
> Temporary note: This document is a work-in-progress. Please forgive any missing or misleading parts, and don't be shy about asking for help in the [Discord chatroom](chat). The [tutorial](tutorial) is more complete; start there.
This page contains detailed API reference documentation. It's intended to be a resource for people who already have some familiarity with Svelte.
If that's not you (yet), you may prefer to visit the [interactive tutorial](tutorial) or the [examples](examples) before consulting this reference.
Don't be shy about asking for help in the [Discord chatroom](chat).

@ -147,24 +147,7 @@ If a statement consists entirely of an assignment to an undeclared variable, Sve
---
A *store* is any object that allows reactive access to a value via a simple *store contract*.
The [`svelte/store` module](docs#svelte_store) contains minimal store implementations which fulfil this contract. You can use these as the basis for your own stores, or you can implement your stores from scratch.
A store must contain a `.subscribe` method, which must accept as its argument a subscription function. This subscription function must be immediately and synchronously called with the store's current value upon calling `.subscribe`. All of a store's active subscription functions must later be synchronously called whenever the store's value changes. The `.subscribe` method must also return an unsubscription function. Calling an unsubscription function must stop its subscription, and its corresponding subscription function must not be called again by the store.
A store may optionally contain a `.set` method, which must accept as its argument a new value for the store, and which synchronously calls all of the store's active subscription functions. Such a store is called a *writable store*.
```js
const unsubscribe = store.subscribe(value => {
console.log(value);
}); // logs `value`
// later...
unsubscribe();
```
---
A *store* is an object that allows reactive access to a value via a simple *store contract*. The [`svelte/store` module](docs#svelte_store) contains minimal store implementations which fulfil this contract.
Any time you have a reference to a store, you can access its value inside a component by prefixing it with the `$` character. This causes Svelte to declare the prefixed variable, and set up a store subscription that will be unsubscribed when appropriate.
@ -189,6 +172,20 @@ Local variables (that do not represent store values) must *not* have a `$` prefi
</script>
```
##### Store contract
```js
store = { subscribe: (subscription: (value: any) => void) => () => void, set?: (value: any) => void }
```
You can create your own stores without relying on [`svelte/store`](docs#svelte_store), by implementing the *store contract*:
1. A store must contain a `.subscribe` method, which must accept as its argument a subscription function. This subscription function must be immediately and synchronously called with the store's current value upon calling `.subscribe`. All of a store's active subscription functions must later be synchronously called whenever the store's value changes.
2. The `.subscribe` method must return an unsubscribe function. Calling an unsubscribe function must stop its subscription, and its corresponding subscription function must not be called again by the store.
3. A store may *optionally* contain a `.set` method, which must accept as its argument a new value for the store, and which synchronously calls all of the store's active subscription functions. Such a store is called a *writable store*.
For interoperability with RxJS Observables, the `.subscribe` method is also allowed to return an object with an `.unsubscribe` method, rather than return the unsubscription function directly. Note however that unless `.subscribe` synchronously calls the subscription (which is not required by the Observable spec), Svelte will see the value of the store as `undefined` until it does.
### &lt;script context="module"&gt;
@ -200,7 +197,7 @@ You can `export` bindings from this block, and they will become exports of the c
You cannot `export default`, since the default export is the component itself.
> Variables defined in `module` scripts are not reactive — reassigning them will not trigger a rerender even though the variable itself will update. For values shared between multiple components, consider using a [store](https://svelte.dev/docs#svelte_store).
> Variables defined in `module` scripts are not reactive — reassigning them will not trigger a rerender even though the variable itself will update. For values shared between multiple components, consider using a [store](docs#svelte_store).
```html
<script context="module">
@ -256,3 +253,15 @@ To apply styles to a selector globally, use the `:global(...)` modifier.
}
</style>
```
---
If you want to make @keyframes that are accessible globally, you need to prepend your keyframe names with `-global-`.
The `-global-` part will be removed when compiled, and the keyframe then be referenced using just `my-animation-name` elsewhere in your code.
```html
<style>
@keyframes -global-my-animation-name {...}
</style>
```

@ -205,6 +205,8 @@ Iterating over lists of values can be done with an each block.
</ul>
```
You can use each blocks to iterate over any array or array-like value — that is, any object with a `length` property.
---
An each block can also specify an *index*, equivalent to the second argument in an `array.map(...)` callback:
@ -1016,7 +1018,7 @@ DOMRect {
top: number,
width: number,
x: number,
y:number
y: number
}
```
@ -1202,14 +1204,16 @@ The content is exposed in the child component using the `<slot>` element, which
```html
<!-- App.svelte -->
<Widget></Widget>
<Widget>
<p>this is some child content</p>
<p>this is some child content that will overwrite the default slot content</p>
</Widget>
<!-- Widget.svelte -->
<div>
<slot>
this will be rendered if someone does <Widget/>
this fallback content will be rendered when no content is provided, like in the first example
</slot>
</div>
```

@ -214,7 +214,11 @@ Events dispatched from child components can be listened to in their parent. Any
### `svelte/store`
The `svelte/store` module exports functions for creating [stores](docs#4_Prefix_stores_with_$_to_access_their_values).
The `svelte/store` module exports functions for creating [readable](docs#readable), [writable](docs#writable) and [derived](docs#derived) stores.
Keep in mind that you don't *have* to use these functions to enjoy the [reactive `$store` syntax](docs#4_Prefix_stores_with_$_to_access_their_values) in your components. Any object that correctly implements `.subscribe`, unsubscribe, and (optionally) `.set` is a valid store, and will work both with the special syntax, and with Svelte's built-in [`derived` stores](docs#derived).
This makes it possible to wrap almost any other reactive state handling library for use in Svelte. Read more about the [store contract](docs#Store_contract) to see what a correct implementation looks like.
#### `writable`
@ -489,7 +493,7 @@ A `spring` store gradually changes to its target value based on its `stiffness`
---
As with [`tweened`](#tweened) stores, `set` and `update` return a Promise that resolves if the spring settles. The `store.stiffness` and `store.damping` properties can be changed while the spring is in motion, and will take immediate effect.
As with [`tweened`](docs#tweened) stores, `set` and `update` return a Promise that resolves if the spring settles. The `store.stiffness` and `store.damping` properties can be changed while the spring is in motion, and will take immediate effect.
Both `set` and `update` can take a second argument — an object with `hard` or `soft` properties. `{ hard: true }` sets the target value immediately; `{ soft: n }` preserves existing momentum for `n` seconds before settling. `{ soft: true }` is equivalent to `{ soft: 0.5 }`.
@ -883,7 +887,7 @@ Existing children of `target` are left where they are.
---
The `hydrate` option instructs Svelte to upgrade existing DOM (usually from server-side rendering) rather than creating new elements. It will only work if the component was compiled with the [`hydratable: true` option](docs#svelte_compile).
The `hydrate` option instructs Svelte to upgrade existing DOM (usually from server-side rendering) rather than creating new elements. It will only work if the component was compiled with the [`hydratable: true` option](docs#svelte_compile). Hydration of `<head>` elements only works properly if the server-side rendering code was also compiled with `hydratable: true`, which adds a marker to each element in the `<head>` so that the component knows which elements it's responsible for removing during hydration.
Whereas children of `target` are normally left alone, `hydrate: true` will cause any children to be removed. For that reason, the `anchor` option cannot be used alongside `hydrate: true`.

@ -68,7 +68,7 @@ The following options can be passed to the compiler. None are required:
| `generate` | `"dom"` | If `"dom"`, Svelte emits a JavaScript class for mounting to the DOM. If `"ssr"`, Svelte emits an object with a `render` method suitable for server-side rendering. If `false`, no JavaScript or CSS is returned; just metadata.
| `dev` | `false` | If `true`, causes extra code to be added to components that will perform runtime checks and provide debugging information during development.
| `immutable` | `false` | If `true`, tells the compiler that you promise not to mutate any objects. This allows it to be less conservative about checking whether values have changed.
| `hydratable` | `false` | If `true`, enables the `hydrate: true` runtime option, which allows a component to upgrade existing DOM rather than creating new DOM from scratch.
| `hydratable` | `false` | If `true` when generating DOM code, enables the `hydrate: true` runtime option, which allows a component to upgrade existing DOM rather than creating new DOM from scratch. When generating SSR code, this adds markers to `<head>` elements so that hydration knows which to replace.
| `legacy` | `false` | If `true`, generates code that will work in IE9 and IE10, which don't support things like `element.dataset`.
| `accessors` | `false` | If `true`, getters and setters will be created for the component's props. If `false`, they will only be created for readonly exported values (i.e. those declared with `const`, `class` and `function`). If compiling with `customElement: true` this option defaults to `true`.
| `customElement` | `false` | If `true`, tells the compiler to generate a custom element constructor instead of a regular Svelte component.
@ -76,7 +76,7 @@ The following options can be passed to the compiler. None are required:
| `css` | `true` | If `true`, styles will be included in the JavaScript class and injected at runtime. It's recommended that you set this to `false` and use the CSS that is statically generated, as it will result in smaller JavaScript bundles and better performance.
| `loopGuardTimeout` | 0 | A `number` that tells Svelte to break the loop if it blocks the thread for more than `loopGuardTimeout` ms. This is useful to prevent infinite loops. **Only available when `dev: true`**
| `preserveComments` | `false` | If `true`, your HTML comments will be preserved during server-side rendering. By default, they are stripped out.
| `preserveWhitespace` | `false` | If `true`, whitespace inside and between elements is kept as you typed it, rather than optimised by Svelte.
| `preserveWhitespace` | `false` | If `true`, whitespace inside and between elements is kept as you typed it, rather than removed or collapsed to a single space where possible.
| `outputFilename` | `null` | A `string` used for your JavaScript sourcemap.
| `cssOutputFilename` | `null` | A `string` used for your CSS sourcemap.
| `sveltePath` | `"svelte"` | The location of the `svelte` package. Any imports from `svelte` or `svelte/[module]` will be modified accordingly.

@ -11,7 +11,7 @@ let count = 0;
$: doubled = count * 2;
```
> Don't worry if this looks a little alien. It's valid (if unconventional) JavaScript, which Svelte interprets to mean 're-run this code whenever any of the referenced values change'. Once you get used to it, there's no going back.
> Don't worry if this looks a little alien. It's [valid](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label) (if unconventional) JavaScript, which Svelte interprets to mean 're-run this code whenever any of the referenced values change'. Once you get used to it, there's no going back.
Let's use `doubled` in our markup:
@ -19,4 +19,4 @@ Let's use `doubled` in our markup:
<p>{count} doubled is {doubled}</p>
```
Of course, you could just write `{count * 2}` in the markup instead — you don't have to use reactive values. Reactive values become particularly valuable when you need to reference them multiple times, or you have values that depend on *other* reactive values.
Of course, you could just write `{count * 2}` in the markup instead — you don't have to use reactive values. Reactive values become particularly valuable when you need to reference them multiple times, or you have values that depend on *other* reactive values.

@ -23,7 +23,9 @@ import { pannable } from './pannable.js';
on:panstart={handlePanStart}
on:panmove={handlePanMove}
on:panend={handlePanEnd}
style="transform: translate({$coords.x}px,{$coords.y}px)"
style="transform:
translate({$coords.x}px,{$coords.y}px)
rotate({$coords.x * 0.2}deg)"
></div>
```

@ -7,7 +7,7 @@
"copy-workers": "rm -rf static/workers && cp -r node_modules/@sveltejs/svelte-repl/workers static",
"migrate": "node-pg-migrate -r dotenv/config",
"sapper": "npm run copy-workers && sapper build --legacy",
"update": "node scripts/update_template.js && node scripts/get-contributors.js",
"update": "node scripts/update_template.js && node scripts/get-contributors.js && node scripts/update_whos_using.js",
"start": "node __sapper__/build",
"test": "mocha -r esm test/**",
"deploy": "make deploy"

@ -0,0 +1,12 @@
const sh = require('shelljs');
sh.cd(__dirname + '/../');
// fetch community repo
sh.rm('-rf','scripts/community');
sh.exec('npx degit sveltejs/community scripts/community');
// copy over relevant files
sh.cp('scripts/community/whos-using-svelte/WhosUsingSvelte.svelte', 'src/routes/_components/WhosUsingSvelte.svelte');
sh.rm('-rf', 'static/organisations');
sh.cp('-r', 'scripts/community/whos-using-svelte/organisations', 'static');

@ -0,0 +1,26 @@
<script>
import contributors from '../_contributors.js';
</script>
<style>
.contributor {
width: 2.4em;
height: 2.4em;
border-radius: 50%;
text-indent: -9999px;
display: inline-block;
background: no-repeat url(/contributors.jpg);
background-size: auto 102%;
margin: 0 0.5em 0.5em 0;
border: 2px solid var(--second);
}
</style>
{#each contributors as contributor, i}
<a
class="contributor"
style="background-position: {(100 * i) / (contributors.length - 1)}% 0"
href="https://github.com/{contributor}">
{contributor}
</a>
{/each}

@ -1,90 +0,0 @@
<!--
Instructions for adding new logos:
* Fork this repo, and clone your fork
* Create a branch called e.g. `add-myorganisation-logo`
* Add the logo to the `static/organisations` directory (preferably SVG)
* Add a new <a> tag in this component, in alphabetical order
* Create a pull request. Thanks!
-->
<style>
.logos {
margin: 1em 0 0 0;
display: flex;
flex-wrap: wrap;
}
a {
height: 40px;
margin: 0 0.5em 0.5em 0;
display: flex;
align-items: center;
border: 2px solid var(--second);
padding: 5px 10px;
border-radius: 20px;
color: var(--text);
}
.add-yourself {
color: var(--prime);
}
picture,
img {
height: 100%;
}
@media (min-width: 540px) {
a {
height: 60px;
padding: 10px 20px;
border-radius: 30px;
}
}
</style>
<div class="logos">
<a target="_blank" rel="noopener" href="https://bekchy.com"><img src="organisations/bekchy.png" alt="Bekchy logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://beyonk.com"><img src="organisations/beyonk.svg" alt="Beyonk logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://buydotstar.com"><img src="organisations/buydotstar.svg" alt="buy.* logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://chess.com" style="background-color: rgb(49,46,43);"><img src="organisations/chess.svg" alt="Chess.com logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://comigosaude.com.br"><img src="organisations/comigo.svg" alt="Comigo logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://datawrapper.de"><img src="organisations/datawrapper.svg" alt="Datawrapper logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://db.nomics.world" style="background-color: rgb(15,39,47);"><picture><source type="image/webp" srcset="organisations/dbnomics.webp"><img src="organisations/dbnomics.jpg" alt="DBNomics logo" loading="lazy"></picture></a>
<a target="_blank" rel="noopener" href="https://deck.nl"><img src="organisations/deck.svg" alt="Deck logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://dextra.com.br/pt/"><img src="organisations/dextra.png" alt="Dextra logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://www.entriwise.com/"><img src="organisations/entriwise.png" alt="Entriwise logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://www.entur.org/about-entur/" style="background-color: rgb(25, 25, 84);"><img src="organisations/entur.svg" alt="Entur logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://from-now-on.com"><img src="organisations/from-now-on.png" alt="From-Now-On logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://fusioncharts.com"><img src="organisations/fusioncharts.svg" alt="FusionCharts logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://godaddy.com"><img src="organisations/godaddy.svg" alt="GoDaddy logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://www.grainger.com"><img src="organisations/grainger.svg" alt="Grainger logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="http://healthtree.org/"><img src="organisations/healthtree.png" alt="HealthTree logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://itslearning.com"><img src="organisations/itslearning.svg" alt="itslearning logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://jacoux.com"><img src="organisations/jacoux.png" alt="Jacoux logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://jingmnt.co.za"><img src="organisations/jingmnt.png" alt="Jingmnt logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://www.mentorcv.com"><img src="organisations/mentorcv.png" alt="Mentor CV logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://www.metrovias.com.ar/"><img src="organisations/metrovias.svg" alt="Metrovias logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="http://mustlab.ru"><img src="organisations/mustlab.png" alt="Mustlab logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://www.nesta.org.uk"><img src="organisations/nesta.svg" alt="Nesta logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://www.nonkositelecoms.com"><img src="organisations/nonkosi.svg" alt="Nonkosi Telecoms logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://www.nzz.ch"><img src="organisations/nzz.svg" alt="Neue Zürcher Zeitung logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://nytimes.com"><img src="organisations/nyt.svg" alt="The New York Times logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://oberonspace.xyz"><img src="organisations/oberonspace.svg" alt="OberonSPACE logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://ofof.nl"><img src="organisations/ofof.png" alt="Ofof logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://openstate.eu"><img src="organisations/open-state-foundation.svg" alt="Open State Foundation logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://panascais.net"><img src="organisations/panascais.svg" alt="Panascais logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://pankod.com"><img src="organisations/pankod.svg" alt="Pankod logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://razorpay.com"><img src="organisations/razorpay.svg" alt="Razorpay logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://sp.nl"><img src="organisations/socialist-party.svg" alt="Socialist Party logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://sqltribe.com"><img src="organisations/sqltribe.svg" alt="SQL Tribe logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://www.stone.co"><img src="organisations/stone.svg" alt="Stone Payments logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://www.strixengine.com"><img src="organisations/strixcloud.svg" alt="Strix Cloud logo" loading="lazy"><span>Strix Cloud</span></a>
<a target="_blank" rel="noopener" href="https://sucuri.net" style="background-color: rgb(93, 93, 93);"><img src="organisations/sucuri.png" alt="Sucuri logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://thunderdome.dev"><img src="organisations/thunderdome.svg" alt="Thunderdome logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://m.tokopedia.com"><img src="organisations/tokopedia.svg" alt="Tokopedia logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://webdesq.net"><img src="organisations/webdesq.svg" alt="Webdesq logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://zevvle.com/"><img src="organisations/zevvle.svg" alt="Zevvle logo" loading="lazy"></a>
<a target="_blank" rel="noopener" href="https://github.com/sveltejs/svelte/blob/master/site/src/routes/_components/WhosUsingSvelte.svelte" class="add-yourself"><span>+ your company?</span></a>
</div>

@ -11,7 +11,7 @@
<svelte:head>
<title>Blog • Svelte</title>
<link rel="alternate" type="application/rss+xml" title="Svelte blog" href="blog/rss.xml">
<link rel="alternate" type="application/rss+xml" title="Svelte blog" href="https://svelte.dev/blog/rss.xml">
<meta name="twitter:title" content="Svelte blog">
<meta name="twitter:description" content="Articles about Svelte and UI development">

@ -29,34 +29,48 @@
font-weight: 700;
}
div {
display: flex;
flex-direction: row;
padding: 0.2rem 3rem;
margin: 0 -3rem;
}
div.active {
background: rgba(0, 0, 0, 0.15) calc(100% - 3rem) 47% no-repeat
url(/icons/arrow-right.svg);
background-size: 1em 1em;
color: white;
}
div.active.loading {
background: rgba(0, 0, 0, 0.1) calc(100% - 3rem) 47% no-repeat
url(/icons/loading.svg);
background-size: 1em 1em;
color: white;
}
a {
display: flex;
flex: 1 1 auto;
position: relative;
color: var(--sidebar-text);
border-bottom: none;
padding: 0.2rem 3rem;
margin: 0 -3rem;
font-size: 1.6rem;
align-items: center;
justify-content: start;
padding: 0;
}
a:hover {
color: white;
}
a.active {
background: rgba(0, 0, 0, 0.15) calc(100% - 3rem) 50% no-repeat
url(/icons/arrow-right.svg);
background-size: 1em 1em;
color: white;
}
a.active.loading {
background: rgba(0, 0, 0, 0.1) calc(100% - 3rem) 50% no-repeat
url(/icons/loading.svg);
background-size: 1em 1em;
color: white;
.repl-link {
flex: 0 1 auto;
font-size: 1.2rem;
font-weight: 700;
margin-right: 2.5rem;
}
.thumbnail {
@ -72,27 +86,31 @@
<ul class="examples-toc">
{#each sections as section}
<li>
<span class="section-title">
{section.title}
</span>
<li>
<span class="section-title">{section.title}</span>
{#each section.examples as example}
<a
href="examples#{example.slug}"
class="row"
class:active="{example.slug === active_section}"
class:loading="{isLoading}"
>
<img
class="thumbnail"
alt="{example.title} thumbnail"
src="examples/thumbnails/{example.slug}.jpg"
/>
{#each section.examples as example}
<div
class="row"
class:active={example.slug === active_section}
class:loading={isLoading}>
<a
href="examples#{example.slug}"
class="row"
class:active={example.slug === active_section}
class:loading={isLoading}>
<img
class="thumbnail"
alt="{example.title} thumbnail"
src="examples/thumbnails/{example.slug}.jpg" />
<span>{example.title}</span>
</a>
{/each}
</li>
<span>{example.title}</span>
</a>
{#if example.slug === active_section}
<a href="repl/{example.slug}" class="repl-link">REPL</a>
{/if}
</div>
{/each}
</li>
{/each}
</ul>

@ -1,9 +1,9 @@
<script>
import { Blurb, Hero, Section } from '@sveltejs/site-kit';
import Contributors from './_components/Contributors.svelte';
import Example from './_components/Example.svelte';
import WhosUsingSvelte from './_components/WhosUsingSvelte.svelte';
// import Lazy from '../components/Lazy.svelte';
import contributors from './_contributors.js';
// TODO this causes a Sapper CSS bug...
// function loadReplWidget() {
@ -24,18 +24,6 @@
color: white;
overflow: hidden;
}
.contributor {
width: 2.4em;
height: 2.4em;
border-radius: 50%;
text-indent: -9999px;
display: inline-block;
background: no-repeat url(/contributors.jpg);
background-size: auto 102%;
margin: 0 0.5em 0.5em 0;
border: 2px solid var(--second);
}
</style>
<svelte:head>
@ -85,7 +73,8 @@
<div style="grid-area: start; display: flex; flex-direction: column; min-width: 0" slot="how">
<pre class="language-bash" style="margin: 0 0 1em 0; min-width: 0; min-height: 0">
npx degit sveltejs/template my-svelte-project
npx degit <a href="https://github.com/sveltejs/template" style="user-select: initial;">sveltejs/template</a> my-svelte-project
<span class="token comment"># or download and extract <a href="https://github.com/sveltejs/template/archive/master.zip">this .zip file</a></span>
cd my-svelte-project
npm install
@ -127,11 +116,5 @@ npm run dev
<p>Svelte is free and open source software, made possible by the work of dozens of volunteers. <a href="https://github.com/sveltejs/svelte">Join us!</a></p>
{#each contributors as contributor, i}
<a
class="contributor"
style="background-position: {100 * i / (contributors.length - 1)}% 0"
href="https://github.com/{contributor}"
>{contributor}</a>
{/each}
<Contributors/>
</Section>

@ -73,6 +73,18 @@ export async function get(req, res) {
});
}
if (process.env.NODE_ENV === 'development') {
// In dev, proxy requests to load particular REPLs to the real server.
// This avoids needing to connect to the real database server.
req.pipe(
require('https').request({ host: 'svelte.dev', path: req.url })
).once('response', res_proxy => {
res_proxy.pipe(res);
res.writeHead(res_proxy.statusCode, res_proxy.headers);
}).once('error', () => res.end());
return;
}
const [row] = await query(`
select g.*, u.uid as owner from gists g
left join users u on g.user_id = u.id

@ -15,6 +15,7 @@
<meta name='twitter:site' content='@sveltejs'>
<meta name='twitter:creator' content='@sveltejs'>
<meta name='twitter:image' content='https://svelte.dev/images/twitter-card.png'>
<meta name='og:image' content='https://svelte.dev/images/twitter-card.png'>
<!-- Sapper generates a <style> tag containing critical CSS
for the current page. CSS for the rest of the app is

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

@ -1 +0,0 @@
<svg enable-background="new 0 0 263.2 127" viewBox="0 0 263.2 127" xmlns="http://www.w3.org/2000/svg"><path d="m263.2 28.5v-5.9h-22.5v-22.6h-5.9v22.5h-206.3v-22.5h-5.9v22.5h-22.6v5.9h22.5v70.1h-22.5v5.9h22.5v22.6h5.9v-22.5h206.4v22.5h5.9v-22.5h22.5v-5.9h-22.5v-70.1zm-28.4 70h-206.3v-70h206.4v70zm-183.9-46.3h9.3c1.7-.1 3.4.4 4.7 1.5 1.1 1.1 1.7 2.7 1.6 4.3 0 1-.2 2-.6 2.8s-1.1 1.4-1.9 1.9c.7.1 1.5.4 2.1.7s1 .7 1.4 1.2.6 1 .8 1.6.2 1.3.2 1.9c0 1-.2 1.9-.6 2.8-.4.8-.9 1.5-1.6 2.1s-1.5 1-2.4 1.2c-1.1.3-2.1.4-3.2.4h-9.7zm5.9 8.9h1.7c1.8 0 2.8-.7 2.8-2.2s-.9-2.2-2.8-2.2h-1.7zm0 9.1h1.9c1.1.1 2.2-.1 3.2-.6 1-.7 1.3-2.1.5-3.1-.1-.2-.3-.4-.5-.5-1-.5-2.1-.6-3.2-.6h-1.9zm36.2-13h-9.9v3.8h9.6v5h-9.6v3.9h9.9v5h-15.8v-22.7h15.8zm15.2 8.5-8.2-13.5h7l4.2 7.3 4.2-7.3h7l-8.4 13.5v9h-5.8zm17.8-2.2c0-1.6.3-3.2.9-4.7 1.2-2.9 3.6-5.2 6.5-6.3 3.2-1.2 6.8-1.2 10.1 0 1.5.6 2.9 1.4 4 2.5s2 2.4 2.5 3.8c1.2 3 1.2 6.4 0 9.4-.6 1.4-1.5 2.7-2.6 3.8s-2.5 2-4 2.5c-3.2 1.2-6.8 1.2-10.1 0-1.5-.6-2.8-1.4-3.9-2.5s-2-2.4-2.6-3.8c-.5-1.5-.8-3.1-.8-4.7zm6.1 0c0 .9.2 1.7.5 2.5.6 1.5 1.9 2.7 3.4 3.3 2.4 1 5.1.4 6.9-1.3.6-.6 1.1-1.2 1.4-2 .7-1.6.7-3.4 0-5-.3-.8-.8-1.4-1.4-2-1.9-1.7-4.5-2.2-6.9-1.3-1.5.6-2.7 1.8-3.4 3.4-.3.7-.5 1.5-.5 2.4zm26.5 11.3v-22.6h5.9l10.8 13.8v-13.8h5.8v22.5h-5.8l-10.8-13.7v13.8zm38.1-13.3 7.1-9.3h7.2l-8.9 10.7 9.8 11.9h-7.6l-7.6-9.8v9.8h-5.9v-22.6h5.9z"/></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 257 60" xmlns="http://www.w3.org/2000/svg">
<style>
.logo {
font-size: 60px;
text-align: center;
font-family: "Times New Roman", Times, serif;
}
</style>
<text x="65" y="46" class="logo">buy.*</text>
</svg>

Before

Width:  |  Height:  |  Size: 411 B

@ -1 +0,0 @@
<svg viewBox="0 0 109 31" xmlns="http://www.w3.org/2000/svg"><path d="m19.2 25.6c-1.5-.4-2.9-1.3-4-2.4-1.9-2.1-2.9-4.9-2.7-7.7-.1-2.1.5-4.2 1.5-6l-1-.5a4.96 4.96 0 1 0 -6.9-1.2c.3.5.7.9 1.2 1.2-.7.4-2.5 1.4-3 1.7-.1.1-.1.3-.1.3 0 .7.2 1.4.5 2 1 .2 2 .3 2.9.3-.2 2.3-.5 4.7-.9 7-.4 1.3-4.6 1.5-5.3 3.1-.1.3-.2.6-.2.9 0 .4.1.8.4 1.2.1.1-1.5.5-1.5 2-.1.5.2 1.1.6 1.5.9.6 1.9 1.1 3 1.4 2.1.5 4.2.7 6.3.7s4.3-.2 6.4-.7c1.1-.2 2.1-.7 3-1.4.4-.4.7-1 .7-1.6 0-.7-.3-1.4-.9-1.8z" fill="#4e7838"/><path d="m8.4 27.9c-1.4-.2-5.9-.9-7-2.5-.4.2-.7.4-1 .8 0 1.7 5.5 2.5 8 2.2.9-.1.5-.4 0-.5zm1.7-13c-.4-.2-2.6-1-2.6-1-.2 2.1-.5 4.2-.8 6.2-.4 1.3-4.6 1.5-5.3 3.1-.3.8 1.3 1.8 5.1 1.8 3.6 0 4-4.9 4.6-8.7.1-.7-.6-1.2-1-1.4zm1.9-4.2c-.7-.6-1.5-1.2-2.3-1.7 2.3-.6 3.9-2.7 3.8-5 0-3-1.9-4-3.3-4h-.1c-2.7.1-4.9 2.4-4.8 5.2.1 1.5.8 2.9 2 3.8-.7.4-2.5 1.4-3 1.7-.1.1-.1.3-.1.3 0 .7.2 1.4.5 2 1.7.3 3.4.4 5.1.4h1.8c.3 0 .5-1.9.5-2.3 0-.1 0-.3-.1-.4z" fill="#6c9d40"/><path d="m9.3 1.2c2.2.3-1 2.8-2 2.7s0-3 2-2.7zm13.1 22.9c-2.2.1-4.3-.7-5.9-2.2a9 9 0 0 1 -2.2-6.3c-.1-2.3.7-4.5 2.2-6.3 1.5-1.6 3.7-2.4 5.9-2.3.6 0 1.2 0 1.8.1l1.5.3c.4.1.9.3 1.3.5s.8.4 1.1.5v3.9h-.4l-.8-.6c-.3-.3-.7-.5-1-.7-.4-.2-.8-.4-1.3-.6a4.15 4.15 0 0 0 -3.1 0c-.5.2-1 .6-1.4 1-.5.5-.8 1.1-1.1 1.7-.3.8-.4 1.7-.4 2.5 0 .9.1 1.8.4 2.6.2.6.6 1.2 1.1 1.7a4.2 4.2 0 0 0 3 1.2c.5 0 1.1-.1 1.6-.3.4-.2.9-.4 1.2-.6.4-.2.7-.4 1-.7l.7-.6h.4v3.9l-1 .5c-.4.2-.8.3-1.2.5-.5.2-1 .3-1.5.4-.6-.1-1.2-.1-1.9-.1zm19.3-.3h-3.9v-6.2c0-.5 0-1-.1-1.5 0-.4-.1-.7-.2-1.1a.9.9 0 0 0 -.6-.6c-.3-.1-.7-.2-1-.2s-.7.1-1 .2c-.4.1-.7.3-1 .6v8.8h-3.9v-16.9h4v5.8c.6-.5 1.2-.9 1.8-1.3.6-.3 1.3-.5 2-.4 1.1-.1 2.2.4 2.9 1.2.7 1 1.1 2.2 1 3.5zm9.1.3c-1.9.1-3.9-.5-5.4-1.7-1.3-1.2-2-3-1.9-4.8-.1-1.8.5-3.5 1.8-4.9 1.3-1.3 3.1-1.9 4.9-1.8 1.6-.1 3.1.4 4.3 1.5 1 1.2 1.5 2.8 1.4 4.4v1.4h-8.5c0 .5.1 1 .4 1.5.2.4.5.7.8.9.4.2.7.4 1.2.5s1 .2 1.5.1c.4 0 .9-.1 1.3-.1.4-.1.8-.2 1.2-.4.3-.1.6-.3.9-.5.2-.1.4-.3.7-.4h.4v3.2l-.9.4-1.1.3-1.3.3c-.6.1-1.2.1-1.7.1zm1.3-8.2c0-.7-.2-1.4-.6-1.9s-1-.7-1.7-.6c-.7 0-1.3.2-1.8.7-.4.5-.7 1.2-.7 1.9zm9.9 8.2c-.9 0-1.7-.1-2.6-.3-.7-.2-1.4-.4-2-.7v-3.3h.3l.6.5c.3.2.6.4 1 .5.4.2.8.3 1.2.4.5.1 1 .2 1.5.2s1-.1 1.4-.2.6-.4.6-.8c0-.3-.1-.5-.3-.7-.3-.2-.7-.3-1.1-.4-.3-.1-.7-.1-1.1-.2l-1.2-.3c-.8-.2-1.6-.7-2.2-1.3-.5-.7-.8-1.5-.7-2.3 0-.5.1-1.1.4-1.6s.7-1 1.1-1.3c.5-.4 1.2-.7 1.8-.9a9.86 9.86 0 0 1 4.8 0c.6.1 1.3.3 1.8.6v3h-.3c-.2-.1-.4-.3-.6-.4-.3-.2-.6-.3-.8-.4-.4-.2-.7-.3-1.1-.4s-.8-.1-1.2-.1c-.5 0-1 .1-1.4.3-.3.1-.6.4-.6.8 0 .3.1.5.3.7.4.2.8.4 1.2.5.3.1.7.2 1.1.2l1.2.3c.8.2 1.5.7 2 1.3s.8 1.4.7 2.2c0 .6-.1 1.1-.4 1.7-.3.5-.7 1-1.2 1.3-.6.4-1.2.7-1.9.9-.6.1-1.4.2-2.3.2zm11.9 0c-.9 0-1.7-.1-2.6-.3-.7-.2-1.4-.4-2-.7v-3.3h.3l.6.5c.3.2.6.4 1 .5.4.2.8.3 1.2.4.5.1 1 .2 1.5.2s1-.1 1.4-.2.6-.4.6-.8c0-.3-.1-.5-.3-.7-.3-.2-.7-.3-1.1-.4-.3-.1-.7-.1-1.1-.2l-1.2-.3c-.8-.2-1.6-.7-2.2-1.3-.5-.7-.8-1.5-.7-2.3 0-.5.1-1.1.4-1.6s.7-1 1.1-1.3c.5-.4 1.2-.7 1.8-.9a9.86 9.86 0 0 1 4.8 0c.6.1 1.3.3 1.8.6v3h-.3c-.2-.1-.4-.3-.6-.4-.3-.2-.6-.3-.8-.4-.4-.2-.7-.3-1.1-.4s-.8-.1-1.2-.1c-.5 0-1 .1-1.4.3-.3.1-.6.4-.6.8 0 .3.1.5.3.7.4.2.8.4 1.2.5.3.1.7.2 1.1.2l1.2.3c.8.2 1.5.7 2 1.3s.7 1.4.7 2.2c0 .6-.1 1.1-.4 1.7-.3.5-.7 1-1.2 1.3-.6.4-1.2.7-1.9.9-.6.1-1.4.2-2.3.2zm7.7-.4h-.6c-.3 0-.5-.2-.5-.5v-1c0-.3.2-.5.5-.5h.6c.3 0 .5.2.5.5v1c.1.3-.2.5-.5.5zm5 .2c-.5 0-1-.1-1.5-.2-.4-.2-.8-.4-1.2-.8-.3-.4-.6-.8-.8-1.3a5.66 5.66 0 0 1 0-3.6c.2-.5.4-.9.7-1.3.3-.3.7-.6 1.2-.7.5-.2 1-.3 1.5-.3.4 0 .8.1 1.2.2s.7.2 1.1.4v1.5h-.1c-.1-.1-.2-.2-.4-.3s-.4-.2-.5-.3c-.2-.1-.4-.2-.7-.2-.2-.1-.5-.1-.7-.1-.6 0-1.3.3-1.7.8-.5.6-.7 1.4-.6 2.2 0 .8.2 1.5.6 2.2.4.5 1 .8 1.7.8.4 0 .9-.1 1.2-.3.4-.2.7-.4 1-.7h.1v1.5l-.5.2c-.2.1-.4.1-.5.2l-.6.1zm10.2-4.1c.1 1.1-.3 2.2-1 3-.6.7-1.6 1.1-2.5 1.1-1 0-1.9-.4-2.6-1.1-.7-.9-1-1.9-.9-3-.1-1.1.3-2.2 1-3a3.6 3.6 0 0 1 5-.1l.1.1c.6.9 1 2 .9 3zm-1.4 0c.1-.8-.1-1.6-.6-2.2-.7-.9-2.1-1-2.9-.2l-.2.2c-.4.7-.6 1.5-.6 2.2-.1.8.1 1.6.6 2.2.7.9 2 1 2.9.3l.3-.3c.4-.6.6-1.4.5-2.2zm11.5 4.1v-5.6c0-.3-.1-.5-.2-.7s-.2-.3-.4-.4-.5-.2-.7-.1c-.3 0-.6.1-.9.2-.4.2-.7.5-1 .8v6h-1.4v-5.7c0-.3-.1-.5-.2-.7s-.2-.3-.4-.4-.5-.1-.8-.1-.6.1-.9.3-.7.4-.9.7v6h-1.4v-8h1.4v.9c.3-.3.7-.6 1.1-.9.3-.2.7-.3 1.2-.3.4 0 .9.1 1.3.3s.7.6.8 1.1c.3-.4.8-.7 1.2-1 .4-.2.8-.4 1.3-.4.3 0 .6.1.9.2s.5.3.7.5c.2.3.4.6.5.9.1.4.2.9.2 1.4v5.1z" fill="#fff"/></svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

@ -1 +0,0 @@
<svg viewBox="0 0 102.292 25" xmlns="http://www.w3.org/2000/svg"><g fill="#00c6fb"><path d="m4.417 17.624a7.686 7.686 0 0 1 -3.282-3.224 10.388 10.388 0 0 1 -1.135-5 10.464 10.464 0 0 1 1.135-5.015 7.765 7.765 0 0 1 3.265-3.254 10.574 10.574 0 0 1 5.033-1.131 11.666 11.666 0 0 1 4.443.833 6.686 6.686 0 0 1 3.024 2.211 1.423 1.423 0 0 1 .312.859 1.467 1.467 0 0 1 -.7 1.172 1.25 1.25 0 0 1 -.775.235 1.913 1.913 0 0 1 -.775-.17 1.716 1.716 0 0 1 -.646-.481 5.181 5.181 0 0 0 -2.044-1.474 7.835 7.835 0 0 0 -2.841-.455 5.6 5.6 0 0 0 -4.394 1.759 7.094 7.094 0 0 0 -1.576 4.911 6.966 6.966 0 0 0 1.59 4.869 5.7 5.7 0 0 0 4.431 1.741 7.044 7.044 0 0 0 5.195-1.926 2.267 2.267 0 0 1 1.472-.755 1.329 1.329 0 0 1 .854.312 1.512 1.512 0 0 1 .594 1.145 1.493 1.493 0 0 1 -.336.912 7.233 7.233 0 0 1 -3.166 2.24 12.536 12.536 0 0 1 -4.613.807 10.8 10.8 0 0 1 -5.066-1.12z" transform="translate(.006 .005)"/><path d="m34.231 21.208a6.43 6.43 0 0 1 -2.731-2.331 6.249 6.249 0 0 1 -.982-3.489 6.258 6.258 0 0 1 .985-3.489 6.44 6.44 0 0 1 2.726-2.329 10.127 10.127 0 0 1 7.986 0 6.436 6.436 0 0 1 2.727 2.33 6.252 6.252 0 0 1 .982 3.489 6.249 6.249 0 0 1 -.982 3.489 6.428 6.428 0 0 1 -2.726 2.331 10.133 10.133 0 0 1 -7.985 0zm7.133-2.929a3.7 3.7 0 0 0 1.15-2.891 3.7 3.7 0 0 0 -1.15-2.89 4.5 4.5 0 0 0 -3.14-1.041 4.5 4.5 0 0 0 -3.14 1.043 3.7 3.7 0 0 0 -1.15 2.89 3.7 3.7 0 0 0 1.15 2.891 4.5 4.5 0 0 0 3.139 1.041 4.5 4.5 0 0 0 3.14-1.044z" transform="translate(-11.447 -3.278)"/><path d="m58.384 21.61a1.5 1.5 0 0 1 -.437-1.146v-10.154a1.5 1.5 0 0 1 .437-1.145 1.732 1.732 0 0 1 1.24-.417 1.79 1.79 0 0 1 1.24.417 1.458 1.458 0 0 1 .465 1.145v.625a4.518 4.518 0 0 1 1.5-1.615 3.608 3.608 0 0 1 1.965-.572 3.462 3.462 0 0 1 1.964.586 3.594 3.594 0 0 1 1.318 1.6 5.355 5.355 0 0 1 4.16-2.187 3.9 3.9 0 0 1 3.23 1.458 6.361 6.361 0 0 1 1.163 4.062v6.2a1.458 1.458 0 0 1 -.466 1.146 1.79 1.79 0 0 1 -1.24.416 1.732 1.732 0 0 1 -1.24-.416 1.5 1.5 0 0 1 -.437-1.146v-6.4a3.449 3.449 0 0 0 -.452-1.937 1.508 1.508 0 0 0 -1.33-.664 2.172 2.172 0 0 0 -1.318.416 3.916 3.916 0 0 0 -1.06 1.318v7.261a1.46 1.46 0 0 1 -.466 1.146 1.791 1.791 0 0 1 -1.243.416 1.733 1.733 0 0 1 -1.241-.416 1.5 1.5 0 0 1 -.437-1.146v-5.856q0-3.151-1.783-3.15a2.2 2.2 0 0 0 -1.9.963 4.515 4.515 0 0 0 -.687 2.656v5.389a1.458 1.458 0 0 1 -.465 1.146 1.79 1.79 0 0 1 -1.24.416 1.732 1.732 0 0 1 -1.24-.416z" transform="translate(-21.734 -3.277)"/><path d="m92.026 3.318a1.8 1.8 0 0 1 -.581-1.392 1.8 1.8 0 0 1 .581-1.394 2.187 2.187 0 0 1 1.538-.532 2.284 2.284 0 0 1 1.562.534 1.767 1.767 0 0 1 .607 1.393 1.763 1.763 0 0 1 -.607 1.392 2.281 2.281 0 0 1 -1.562.534 2.183 2.183 0 0 1 -1.538-.534zm.323 15.01a1.5 1.5 0 0 1 -.437-1.146v-10.154a1.5 1.5 0 0 1 .437-1.145 1.733 1.733 0 0 1 1.24-.417 1.791 1.791 0 0 1 1.24.417 1.461 1.461 0 0 1 .471 1.145v10.154a1.46 1.46 0 0 1 -.466 1.146 1.791 1.791 0 0 1 -1.24.416 1.733 1.733 0 0 1 -1.24-.416z" transform="translate(-34.303 .005)"/><path d="m105.688 27.678a6.424 6.424 0 0 1 -2.649-1.64 1.268 1.268 0 0 1 -.362-.885 1.51 1.51 0 0 1 .62-1.172 1.3 1.3 0 0 1 .827-.312 2.364 2.364 0 0 1 1.5.755 4.374 4.374 0 0 0 1.562.9 6.163 6.163 0 0 0 2.029.326 4.007 4.007 0 0 0 3.124-1.223 4.679 4.679 0 0 0 1.062-3.384l-.023-1.043a5.411 5.411 0 0 1 -2.054 1.537 7.456 7.456 0 0 1 -2.882.494 6.765 6.765 0 0 1 -4.962-1.757 6.553 6.553 0 0 1 -1.786-4.882 6.464 6.464 0 0 1 1.821-4.881 7.016 7.016 0 0 1 5.079-1.758 6.344 6.344 0 0 1 2.584.547 7.206 7.206 0 0 1 2.223 1.537v-.521a1.46 1.46 0 0 1 .464-1.145 2.062 2.062 0 0 1 2.468-.013 1.473 1.473 0 0 1 .452 1.158v10.723a7.663 7.663 0 0 1 -.892 3.723 6.436 6.436 0 0 1 -2.559 2.578 7.909 7.909 0 0 1 -3.94.937 11.035 11.035 0 0 1 -3.707-.6zm6.577-9.4a3.722 3.722 0 0 0 1.138-2.891 3.721 3.721 0 0 0 -1.138-2.89 4.493 4.493 0 0 0 -3.152-1.041 4.023 4.023 0 0 0 -2.947 1.041 3.866 3.866 0 0 0 -1.059 2.89 3.868 3.868 0 0 0 1.059 2.891 4.025 4.025 0 0 0 2.947 1.041 4.5 4.5 0 0 0 3.152-1.041z" transform="translate(-38.143 -3.279)"/><path d="m132.955 21.209a6.43 6.43 0 0 1 -2.726-2.331 6.249 6.249 0 0 1 -.982-3.489 6.257 6.257 0 0 1 .982-3.489 6.44 6.44 0 0 1 2.726-2.329 10.127 10.127 0 0 1 7.986 0 6.436 6.436 0 0 1 2.726 2.329 6.257 6.257 0 0 1 .982 3.489 6.249 6.249 0 0 1 -.982 3.489 6.429 6.429 0 0 1 -2.726 2.331 10.134 10.134 0 0 1 -7.986 0zm7.134-2.929a3.7 3.7 0 0 0 1.15-2.891 3.7 3.7 0 0 0 -1.15-2.889 5.255 5.255 0 0 0 -6.279 0 3.7 3.7 0 0 0 -1.15 2.89 3.7 3.7 0 0 0 1.148 2.89 5.255 5.255 0 0 0 6.281 0z" transform="translate(-48.482 -3.279)"/><path d="m157.635 26.619a1.847 1.847 0 0 1 -.594-1.38 1.949 1.949 0 0 1 .594-1.445 2.048 2.048 0 0 1 1.5-.586 2.016 2.016 0 0 1 2.067 2.031 1.865 1.865 0 0 1 -.581 1.38 2.028 2.028 0 0 1 -1.486.572 2.073 2.073 0 0 1 -1.5-.572z" transform="translate(-58.91 -8.703)"/></g></svg>

Before

Width:  |  Height:  |  Size: 4.7 KiB

@ -1 +0,0 @@
<svg viewBox="2.80001831 3.70000458 320.40002441 89.69999695" xmlns="http://www.w3.org/2000/svg"><path d="m33.2 64v-35.5h9.9c2.9 0 5.5.7 7.8 2s4.1 3.2 5.4 5.7 1.9 5.3 1.9 8.4v3.3c0 3.2-.6 6-1.9 8.4-1.3 2.5-3.1 4.4-5.4 5.7s-5 2-8 2zm3-33v30.5h6.8c3.7 0 6.7-1.2 9-3.7s3.4-5.8 3.4-10.1v-3.1c0-4.1-1.1-7.4-3.3-9.8-2.2-2.5-5.2-3.7-8.8-3.7h-7.1z"/><path d="m81 64c-.3-.8-.5-2.1-.6-3.7-1 1.3-2.3 2.4-3.9 3.1s-3.3 1.1-5 1.1c-2.5 0-4.6-.7-6.2-2.1s-2.4-3.2-2.4-5.4c0-2.6 1.1-4.6 3.2-6.1s5.1-2.2 8.9-2.2h5.3v-3c0-1.9-.6-3.4-1.7-4.5-1.2-1.1-2.9-1.6-5.1-1.6-2 0-3.7.5-5.1 1.6-1.3 1-2 2.3-2 3.8h-2.9c0-2.1 1-3.9 2.9-5.5s4.4-2.3 7.2-2.3c2.9 0 5.3.7 7 2.2s2.6 3.5 2.6 6.2v12.4c0 2.6.3 4.5.8 5.7v.3zm-9.2-2.1c2 0 3.7-.5 5.2-1.4s2.7-2.2 3.4-3.8v-5.8h-5.2c-2.9 0-5.2.6-6.8 1.6s-2.5 2.5-2.5 4.3c0 1.5.5 2.7 1.6 3.7s2.5 1.4 4.3 1.4z"/><path d="m94.6 30.9v6.8h5.5v2.3h-5.5v17.6c0 1.5.3 2.6.8 3.3s1.4 1.1 2.6 1.1c.5 0 1.3-.1 2.4-.2l.1 2.4c-.8.3-1.8.4-3.1.4-2 0-3.5-.6-4.4-1.7-.9-1.2-1.4-2.9-1.4-5.1v-17.8h-4.9v-2.4h4.9v-6.8h3z"/><path d="m121.8 64c-.3-.8-.5-2.1-.6-3.7-1 1.3-2.3 2.4-3.9 3.1s-3.3 1.1-5 1.1c-2.5 0-4.6-.7-6.2-2.1s-2.4-3.2-2.4-5.4c0-2.6 1.1-4.6 3.2-6.1s5.1-2.2 8.9-2.2h5.3v-3c0-1.9-.6-3.4-1.7-4.5-1.2-1.1-2.9-1.6-5.1-1.6-2 0-3.7.5-5.1 1.6-1.3 1-2 2.3-2 3.8h-2.9c0-2.1 1-3.9 2.9-5.5s4.4-2.3 7.2-2.3c2.9 0 5.3.7 7 2.2s2.6 3.5 2.6 6.2v12.4c0 2.6.3 4.5.8 5.7v.3zm-9.2-2.1c2 0 3.7-.5 5.2-1.4s2.7-2.2 3.4-3.8v-5.8h-5.2c-2.9 0-5.2.6-6.8 1.6s-2.5 2.5-2.5 4.3c0 1.5.5 2.7 1.6 3.7s2.6 1.4 4.3 1.4z"/><path d="m137.2 58 .4 2.3.6-2.4 6.3-20.2h2.5l6.3 20 .7 2.8.6-2.6 5.4-20.3h3l-7.6 26.4h-2.5l-6.8-20.9-.3-1.4-.3 1.5-6.7 20.8h-2.5l-7.7-26.4h3z"/><path d="m179.8 40.1c-.6-.1-1.3-.2-2-.2-1.8 0-3.4.5-4.6 1.5-1.3 1-2.2 2.5-2.7 4.4v18.2h-2.9v-26.4h2.9v4.2c1.5-3.1 4-4.7 7.4-4.7.8 0 1.5.1 1.9.3z"/><path d="m199.1 64c-.3-.8-.5-2.1-.6-3.7-1 1.3-2.3 2.4-3.9 3.1s-3.3 1.1-5 1.1c-2.5 0-4.6-.7-6.2-2.1s-2.4-3.2-2.4-5.4c0-2.6 1.1-4.6 3.2-6.1s5.1-2.2 8.9-2.2h5.3v-3c0-1.9-.6-3.4-1.7-4.5-1.2-1.1-2.9-1.6-5.1-1.6-2 0-3.7.5-5.1 1.6-1.3 1-2 2.3-2 3.8h-2.9c0-2.1 1-3.9 2.9-5.5s4.4-2.3 7.2-2.3c2.9 0 5.3.7 7 2.2s2.6 3.5 2.6 6.2v12.4c0 2.6.3 4.5.8 5.7v.3zm-9.2-2.1c2 0 3.7-.5 5.2-1.4s2.7-2.2 3.4-3.8v-5.8h-5.2c-2.9 0-5.2.6-6.8 1.6s-2.5 2.5-2.5 4.3c0 1.5.5 2.7 1.6 3.7 1.2.9 2.6 1.4 4.3 1.4z"/><path d="m229.5 51.1c0 4.1-.9 7.4-2.7 9.8s-4.3 3.6-7.3 3.6c-3.6 0-6.4-1.3-8.3-3.8v13.5h-2.9v-36.6h2.7l.1 3.7c1.9-2.8 4.7-4.2 8.3-4.2 3.2 0 5.6 1.2 7.4 3.6s2.7 5.7 2.7 10zm-3-.5c0-3.4-.7-6-2.1-8s-3.3-2.9-5.8-2.9c-1.8 0-3.3.4-4.6 1.3s-2.3 2.1-3 3.8v12.7c.7 1.5 1.7 2.7 3 3.5s2.8 1.2 4.6 1.2c2.5 0 4.4-1 5.8-2.9 1.5-2.2 2.1-5 2.1-8.7z"/><path d="m256.2 51.1c0 4.1-.9 7.4-2.7 9.8s-4.3 3.6-7.3 3.6c-3.6 0-6.4-1.3-8.3-3.8v13.5h-2.9v-36.6h2.7l.1 3.7c1.9-2.8 4.7-4.2 8.3-4.2 3.2 0 5.6 1.2 7.4 3.6s2.7 5.7 2.7 10zm-3-.5c0-3.4-.7-6-2.1-8s-3.3-2.9-5.8-2.9c-1.8 0-3.3.4-4.6 1.3s-2.3 2.1-3 3.8v12.7c.7 1.5 1.7 2.7 3 3.5s2.8 1.2 4.6 1.2c2.5 0 4.4-1 5.8-2.9 1.5-2.2 2.1-5 2.1-8.7z"/><path d="m271.9 64.5c-2.2 0-4.3-.6-6.1-1.7s-3.2-2.6-4.2-4.6-1.5-4.2-1.5-6.7v-1c0-2.5.5-4.8 1.5-6.9 1-2 2.4-3.6 4.1-4.8s3.7-1.7 5.7-1.7c3.2 0 5.7 1.1 7.6 3.3s2.8 5.2 2.8 9v1.6h-18.8v.6c0 3 .9 5.5 2.6 7.5s3.9 3 6.5 3c1.6 0 2.9-.3 4.1-.9s2.3-1.5 3.3-2.7l1.8 1.4c-2.2 3.1-5.3 4.6-9.4 4.6zm-.6-24.9c-2.2 0-4 .8-5.6 2.4-1.5 1.6-2.4 3.8-2.7 6.5h15.8v-.3c-.1-2.5-.8-4.6-2.2-6.2-1.3-1.6-3-2.4-5.3-2.4z"/><path d="m298.7 40.1c-.6-.1-1.3-.2-2-.2-1.8 0-3.4.5-4.6 1.5-1.3 1-2.2 2.5-2.7 4.4v18.2h-2.9v-26.4h2.9v4.2c1.5-3.1 4-4.7 7.4-4.7.8 0 1.5.1 1.9.3z"/><path d="m323.2 93.4h-320.4v-89.7h2.7v87h317.7z"/></svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

@ -1 +0,0 @@
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1" viewBox="0 0 1909 925" xmlns="http://www.w3.org/2000/svg"><path d="m1675 494 168-182h-197l-123 137v-345h-177v413l-106 102c-5 6-38 27-45 31-8 5-17 9-27 13-11 3-23 4-36 4s-25-2-36-8c-11-5-21-12-29-22-9-9-15-21-21-34-5-14-7-29-7-45 0-33 9-59 28-79 19-19 40-28 65-28 28 0 49 5 63 15 14 11 25 21 32 30l104-119c-21-24-48-44-81-59s-74-23-123-23a273 273 0 0 0 -190 76c-11 10-21 22-29 35a228 228 0 0 1 21 47l7 20c8 31 12 66 12 105v34h-333c1 8 3 17 7 26 3 9 10 18 20 26 9 8 22 14 37 19a276 276 0 0 0 197-27l5 11c6 15 14 29 22 43l4 5a254 254 0 0 0 115 89 324 324 0 0 0 230-6c17-8 32-17 46-27l48-51v86h177v-152l35-37 109 189h203zm-889-14c-4-9-9-18-16-25-8-8-17-14-28-20-11-5-24-8-39-8a90 90 0 0 0 -66 28 81 81 0 0 0 -21 51h175c0-8-2-17-5-26m-374 99c0 28-6 50-19 65-13 16-32 23-58 23-30 0-51-9-66-27-14-17-21-41-21-71 0-40 10-69 30-89s45-29 77-29c20 0 39 3 57 9zm0-266a311 311 0 0 0 -77-12c-40 0-76 7-109 20a251 251 0 0 0 -138 138 339 339 0 0 0 2 225 195 195 0 0 0 193 135 180 180 0 0 0 136-63l9 50h162v-7c-27-11-51-26-71-45-48-46-72-110-72-193 0-33 5-65 16-97a239 239 0 0 1 127-145v-215h-178z" fill="#030404" fill-rule="nonzero"/></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="523" height="158"><rect id="backgroundrect" width="100%" height="100%" x="0" y="0" fill="none" stroke="none"/><style>.st0{fill:#fff}</style><g class="currentLayer"><path class="st0" d="M21.1 18.7v27.6h53.3V65H21.1v26.7h60.1v18.7H0V0h81.2v18.7H21.1z" id="svg_1"/><path d="M195.9 156.4H0v-18.7h195.9v18.7z" id="svg_2" fill="#ff5959"/><path class="st0" d="M193.7 110.2l-72.4-65.5v65.5h-21.1V0h2.3l72.4 66.7V0H196v110.2h-2.3z" id="svg_3"/><path class="st0" d="M299.8 64.9h-31.5v91.5h-21.1V64.9h-31.5V46.2h84.2v18.7z" id="svg_4"/><path class="st0" d="M363.1 158.4c-7.1 0-13.6-1.1-19.4-3.3-5.8-2.2-10.8-5.3-14.9-9.3-4.1-4-7.3-8.9-9.6-14.6-2.3-5.7-3.4-12.1-3.4-19.1V46.3h21.1V112c0 5.5.9 10.1 2.7 13.7 1.8 3.6 4 6.5 6.7 8.6 2.7 2.1 5.5 3.6 8.6 4.4 3.1.8 5.8 1.2 8.2 1.2 2.4 0 5.1-.4 8.2-1.2 3.1-.8 5.9-2.3 8.6-4.4 2.7-2.1 4.9-5 6.7-8.6 1.8-3.6 2.7-8.2 2.7-13.7V46.2h21.1V112c0 7-1.1 13.4-3.3 19.1-2.2 5.7-5.4 10.6-9.5 14.6s-9.1 7.1-14.9 9.3c-5.8 2.3-12.4 3.4-19.6 3.4z" id="svg_5"/><path class="st0" d="M451.2 121.4v35.1h-21.1V46.2h50.1c5.6 0 10.8.9 15.5 2.8 4.7 1.9 8.7 4.5 12 7.8 3.3 3.4 5.9 7.4 7.8 12 1.9 4.7 2.8 9.8 2.8 15.3 0 4.1-.6 8.1-1.7 12-1.1 3.9-2.6 7.4-4.6 10.5-2 3.1-4.4 5.8-7.2 8.1-2.9 2.3-6 3.8-9.4 4.7l27.4 37h-25.1l-25.5-35.1h-21zm0-18.4h24c4.4 0 8-.6 10.9-1.7 2.9-1.1 5.1-2.6 6.8-4.4 1.7-1.8 2.8-3.8 3.4-6.1.6-2.3.9-4.5.9-6.9 0-2.7-.4-5.2-1.3-7.5s-2.2-4.3-3.9-6c-1.8-1.7-4-3.1-6.8-4.1-2.8-1-6.1-1.5-10-1.5h-24V103z" id="svg_6"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="735px" height="115px" viewBox="0 0 735 115" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 51.1 (57501) - http://www.bohemiancoding.com/sketch -->
<title>logo colour</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-3" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="concept-one-rough-test-copy" transform="translate(-23.000000, -11.000000)" fill="#373C8B">
<g id="logo-colour">
<path d="M185.446,92 L185.446,24.638 L226.131,24.638 L226.131,34.732 L197.394,34.732 L197.394,53.787 L221.805,53.787 L221.805,63.881 L197.394,63.881 L197.394,92 L185.446,92 Z M234.268,73.151 L234.268,41.427 L246.113,41.427 L246.113,71.606 C246.113,79.949 248.482,83.039 253.941,83.039 C258.37,83.039 261.357,80.979 265.168,76.035 L265.168,41.427 L277.013,41.427 L277.013,92 L267.331,92 L266.404,84.584 L266.095,84.584 C261.666,89.837 256.722,93.236 249.821,93.236 C239.006,93.236 234.268,85.923 234.268,73.151 Z M287.004,86.232 L292.566,78.61 C297.098,82.112 301.424,84.275 306.574,84.275 C312.033,84.275 314.608,81.7 314.608,78.198 C314.608,73.975 309.149,72.121 303.793,70.061 C297.098,67.589 289.579,63.778 289.579,55.332 C289.579,46.474 296.686,40.191 308.016,40.191 C315.02,40.191 320.685,43.075 324.805,46.268 L319.346,53.478 C315.844,50.903 312.239,49.152 308.222,49.152 C303.175,49.152 300.806,51.521 300.806,54.714 C300.806,58.628 305.853,60.276 311.312,62.233 C318.213,64.808 325.835,68.104 325.835,77.58 C325.835,86.232 318.934,93.236 306.162,93.236 C299.261,93.236 291.948,90.249 287.004,86.232 Z M342.418,32.569 C338.195,32.569 335.105,29.788 335.105,25.874 C335.105,21.857 338.195,19.076 342.418,19.076 C346.641,19.076 349.731,21.857 349.731,25.874 C349.731,29.788 346.641,32.569 342.418,32.569 Z M336.444,92 L336.444,41.427 L348.289,41.427 L348.289,92 L336.444,92 Z M360.134,66.765 C360.134,49.873 371.567,40.191 384.133,40.191 C396.802,40.191 408.235,49.873 408.235,66.765 C408.235,83.554 396.802,93.236 384.133,93.236 C371.567,93.236 360.134,83.554 360.134,66.765 Z M372.288,66.765 C372.288,76.859 376.717,83.554 384.133,83.554 C391.549,83.554 396.081,76.859 396.081,66.765 C396.081,56.568 391.549,49.873 384.133,49.873 C376.717,49.873 372.288,56.568 372.288,66.765 Z M419.977,92 L419.977,41.427 L429.762,41.427 L430.586,48.225 L430.998,48.225 C435.53,43.796 440.68,40.191 447.581,40.191 C458.396,40.191 463.134,47.504 463.134,60.276 L463.134,92 L451.289,92 L451.289,61.821 C451.289,53.478 448.92,50.388 443.358,50.388 C438.929,50.388 436.045,52.551 431.822,56.671 L431.822,92 L419.977,92 Z M474.979,58.525 C474.979,36.483 488.781,23.402 506.085,23.402 C514.325,23.402 521.02,27.419 525.243,31.951 L518.651,39.367 C515.149,35.968 511.338,33.805 506.188,33.805 C495.167,33.805 487.236,43.075 487.236,58.216 C487.236,73.563 494.549,82.833 505.776,82.833 C511.75,82.833 516.179,80.361 519.99,76.138 L526.582,83.451 C521.123,89.734 514.119,93.236 505.57,93.236 C488.472,93.236 474.979,80.876 474.979,58.525 Z M536.676,92 L536.676,19.282 L548.521,19.282 L548.521,38.028 L548.109,47.813 C552.332,43.796 557.379,40.191 564.28,40.191 C575.095,40.191 579.833,47.504 579.833,60.276 L579.833,92 L567.988,92 L567.988,61.821 C567.988,53.478 565.619,50.388 560.057,50.388 C555.628,50.388 552.744,52.551 548.521,56.671 L548.521,92 L536.676,92 Z M591.987,78.404 C591.987,67.589 601.051,61.924 621.754,59.658 C621.651,54.302 619.385,49.77 612.587,49.77 C607.54,49.77 602.802,52.036 598.373,54.714 L594.047,46.783 C599.609,43.281 606.716,40.191 614.75,40.191 C627.419,40.191 633.599,47.916 633.599,62.027 L633.599,92 L623.917,92 L622.99,86.438 L622.681,86.438 C618.149,90.249 612.999,93.236 607.025,93.236 C598.167,93.236 591.987,87.262 591.987,78.404 Z M603.523,77.477 C603.523,82.009 606.51,83.966 610.733,83.966 C614.853,83.966 618.046,81.906 621.754,78.404 L621.754,67.074 C608.055,68.825 603.523,72.43 603.523,77.477 Z M648.019,92 L648.019,41.427 L657.804,41.427 L658.628,50.388 L659.04,50.388 C662.645,43.796 668.001,40.191 673.357,40.191 C675.932,40.191 677.58,40.5 679.125,41.221 L677.065,51.521 C675.314,51.006 673.975,50.697 671.812,50.697 C667.795,50.697 662.954,53.478 659.864,61.1 L659.864,92 L648.019,92 Z M688.189,74.902 L688.189,50.8 L680.979,50.8 L680.979,41.942 L688.807,41.427 L690.249,27.625 L700.137,27.625 L700.137,41.427 L713.012,41.427 L713.012,50.8 L700.137,50.8 L700.137,74.902 C700.137,80.876 702.403,83.76 707.244,83.76 C708.995,83.76 711.055,83.245 712.497,82.627 L714.557,91.382 C711.776,92.309 708.274,93.236 704.257,93.236 C692.515,93.236 688.189,85.82 688.189,74.902 Z M718.574,86.232 L724.136,78.61 C728.668,82.112 732.994,84.275 738.144,84.275 C743.603,84.275 746.178,81.7 746.178,78.198 C746.178,73.975 740.719,72.121 735.363,70.061 C728.668,67.589 721.149,63.778 721.149,55.332 C721.149,46.474 728.256,40.191 739.586,40.191 C746.59,40.191 752.255,43.075 756.375,46.268 L750.916,53.478 C747.414,50.903 743.809,49.152 739.792,49.152 C734.745,49.152 732.376,51.521 732.376,54.714 C732.376,58.628 737.423,60.276 742.882,62.233 C749.783,64.808 757.405,68.104 757.405,77.58 C757.405,86.232 750.504,93.236 737.732,93.236 C730.831,93.236 723.518,90.249 718.574,86.232 Z" id="FusionCharts"></path>
<rect id="Rectangle-2-Copy-4" x="23.4041667" y="22.8571429" width="23.4041667" height="68.5714286"></rect>
<rect id="Rectangle-2-Copy-5" x="57.0833333" y="56.5714286" width="23.975" height="34.8571429"></rect>
<rect id="Rectangle-2-Copy-6" x="91.9041667" y="11.4285714" width="22.2625" height="80"></rect>
<rect id="Rectangle-2-Copy-7" x="91.9041667" y="101.714286" width="22.2625" height="23.4285714"></rect>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.9 KiB

@ -1 +0,0 @@
<svg viewBox="0 0 122 29" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><g fill-rule="nonzero"><path d="M91.431 1.26l-.55 3.392h1.185l-1.481 9.084H89.38l-.582 3.58h12.676l.912-5.608h-4.08l-.315 2.028H94.83l.47-2.865h3.483l.624-3.863h-3.49l.375-2.356h2.98l-.26 1.634h3.965l.813-5.027M68.414 1.26l-.543 3.392h1.182l-.744 4.585-4.152-7.978h-5.365l-.54 3.393h1.19l-1.48 9.084h-1.184l-.572 3.58h6.71l.573-3.58h-1.19l.865-5.413 4.539 8.994h3.583l2.051-12.665h1.191l.548-3.393M37.499 1.26l-.545 3.392h1.191l-4.632 9.084h-1.175l-.587 3.58h6.703l.589-3.58H37.84l.597-1.326h4.15l.168 1.326h-1.187l-.577 3.58 6.891-.002.582-3.578H47.27L45.155 1.259H37.5zm4.36 3.99l.333 3.78H40.23M27.38 7.89c-.772.71-1.974.433-3.023.48l.571-3.515c1.19.027 2.826-.335 3.267 1.024.104.775-.168 1.507-.815 2.011zm1.064 2.971c.794-.187 1.481-.669 2.128-1.234 1.462-1.34 2.274-3.287 1.688-5.296-.561-1.884-2.542-2.943-4.38-3.069h-7.957l-.54 3.391h1.184l-1.471 9.084h-1.198l-.577 3.58h6.491l.587-3.58h-.904l.342-2.142 3.19 5.723h3.993l.586-3.58h-1.492M55.496 17.31l.574-3.578H54.88l1.48-9.084h1.185l.54-3.392h-6.885l-.55 3.392h1.184l-1.465 9.084h-1.194l-.576 3.585M112.25 7.886c-.772.711-1.973.435-3.024.482l.572-3.518c1.19.03 2.827-.333 3.267 1.027.103.774-.17 1.506-.815 2.01zm1.063 2.973c.795-.189 1.482-.67 2.128-1.235 1.463-1.34 2.275-3.288 1.689-5.296-.562-1.885-2.543-2.943-4.38-3.07h-7.959l-.538 3.393h1.184l-1.472 9.084h-1.198l-.576 3.58h6.491l.586-3.58h-.904l.343-2.143 3.19 5.723h3.993l.586-3.58h-1.494"/><path d="M25.076 20.897l-1.157 7.157h90.227l1.163-7.157H25.076zM8.546 20.897H6.942l-1.157 7.157H7.39l1.157-7.157zM13.74 20.897h-2.258l-1.156 7.157h2.258l1.156-7.157zM3.35 20.897h-.949l-1.156 7.157h.95l1.156-7.157zM24.13 20.897h-3.565l-1.156 7.157h3.566l1.155-7.157zM18.935 20.897h-2.912l-1.156 7.157h2.912l1.156-7.157z" fill="#ed1b2d"/><path d="M120.652 15.57a1.605 1.605 0 0 1-1.621 1.615 1.61 1.61 0 0 1-1.614-1.62c0-.89.707-1.62 1.625-1.62.922 0 1.614.735 1.61 1.624zm.16.005a1.764 1.764 0 0 0-1.781-1.79c-.956 0-1.774.754-1.774 1.78 0 1.056.848 1.78 1.77 1.78 1.006 0 1.779-.785 1.784-1.77zm-2.494-1.13v2.224h.325v-1.034h.159c.32.006.498.045.562.376.011.054.046.304.057.354.02.105.04.205.089.304h.374c-.101-.199-.114-.319-.165-.644-.045-.269-.12-.4-.359-.49.274-.044.5-.225.5-.535a.535.535 0 0 0-.34-.505c-.134-.05-.26-.05-.518-.05h-.684zm.33.25h.304c.268 0 .378 0 .473.084a.321.321 0 0 1 .106.246c0 .356-.37.35-.509.35h-.375M15.144 1.24h3.308l-.878 5.45h-3.76c-.21-.879-1.108-1.707-1.986-1.896-1.61-.356-3.259.209-4.283 1.506-1.127 1.574-1.629 4.22-.564 5.938.732 1.153 2.141 1.58 3.458 1.37 1.024-.187 2.057-1.098 2.496-2.062l-4.191-.003.524-3.262h8.83l-1.465 9.04H13.23l.21-1.023c-.402.535-1.48 1.445-4.138 1.445-3.356 0-7.024-2.848-7.024-7.873 0-4.136 3.119-9.155 8.654-9.136 1.41.006 2.992.361 4.013 1.34M86.611 1.24h3.308l-.878 5.45H85.28c-.208-.879-1.107-1.707-1.985-1.896-1.61-.356-3.258.209-4.282 1.506-1.128 1.574-1.63 4.22-.565 5.938.732 1.153 2.141 1.58 3.458 1.37 1.025-.187 2.057-1.098 2.496-2.062l-4.191-.003.524-3.262h8.83l-1.465 9.04h-3.402l.208-1.023c-.4.535-1.478 1.445-4.137 1.445-3.356 0-7.024-2.848-7.024-7.873 0-4.136 3.12-9.155 8.654-9.136 1.41.006 2.993.361 4.013 1.34"/></g></svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

@ -1 +0,0 @@
<svg height="33" viewBox="0 0 110 33" width="110" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><g fill="#5a3650"><path d="m54.33 22.08c-.26-.21-.64-.18-.88.14-.65.87-1.74 1.74-3.09 1.73-2.17-.02-2.99-1.5-2.99-2.95 0-.01 0-.1-.01-.27l5.33-2.84.04-.02c1.15-.62 1.77-1.68 1.78-3.05.01-1.79-1.35-3.67-4.04-3.69h-.45c-2.69.02-4.07 1.9-4.05 3.69v6.29c.02 2.35 1.66 4.11 4.38 4.13 1.94.02 3.38-1.12 4.09-2.25.18-.29.21-.67-.11-.91zm-6.98-7.28c0-.78.52-2.38 2.68-2.42h.46c2.15.04 2.7 1.64 2.7 2.43 0 .93-.46 1.41-.91 1.69l-4.92 2.63c-.01-1.82-.01-4.33-.01-4.33z"/><path d="m64.84 14.4c0-1.62-1.64-3.27-4.13-3.27-.31 0-.76.05-1.17.16-.61.15-1.34.51-1.79.96-.27.27-.27.67-.01.9.26.24.62.24.99-.05.54-.43 1.16-.72 1.98-.71 2.19.02 2.74 1.63 2.73 2.42v.16s-4.5 2.42-5.47 2.95c-.98.53-1.72 1.55-1.73 3.07-.02 2.23 1.4 3.95 3.82 4.2.31.03.76.03.95 0 2.31-.24 3.84-1.97 3.84-3.92 0-1.96-.01-5.41-.01-6.87zm-1.39 6.6c.01 1.39-.81 2.85-2.92 2.91-2.1-.06-2.87-1.52-2.88-2.91-.02-1.35.92-1.8 1.51-2.13.6-.32 4.29-2.3 4.29-2.3z"/><path d="m73.73 12.4c-.13.34-.51.51-.84.38-.39-.16-.81-.26-1.25-.25-2.17.01-3.01 1.54-3 2.95l-.01 9.76h-1.37v-9.83h.01c.02-2.36 1.64-4.15 4.36-4.17.64-.01 1.23.12 1.75.33.32.14.47.5.35.83z"/><path d="m83.85 25.08v-10.26c.02-1.79-1.35-3.67-4.04-3.69-.08-.01-.37-.01-.44 0-2.7.02-4.06 1.9-4.05 3.69v10.26h1.36v-10.29c0-.78.54-2.36 2.69-2.4h.47c2.16.04 2.7 1.63 2.69 2.42v10.27z"/><path d="m98.95 25.08v-10.26c.02-1.79-1.35-3.67-4.04-3.69-.08-.01-.37-.01-.44 0-2.69.02-4.06 1.9-4.05 3.69v10.26h1.36v-10.29c0-.78.54-2.36 2.69-2.4h.47c2.16.04 2.7 1.63 2.69 2.42v10.27z"/><path d="m88.05 7.53c-.01-.52-.41-.91-.92-.9-.52 0-.91.4-.91.92.01.52.4.9.92.9s.91-.4.91-.92z"/><path d="m87.21 11.15c-.59 0-.69.4-.69.53v.95 12.45h1.37v-12.36-1.04c0-.11-.09-.53-.68-.53z"/><path d="m105.86 11.13c-.08-.01-.37-.01-.44 0-2.7.02-4.06 1.9-4.05 3.69v6.74c-.01 1.78 1.35 3.67 4.05 3.69h.43c1.13-.01 2-.35 2.66-.87v1.2.25c.01 1.34-.92 1.79-1.67 2.2-.4.22-3.25 1.74-3.46 1.86-.2.11-.42.51-.21.91.21.39.64.42.86.31s4.11-2.2 4.11-2.2l.03-.01c1.02-.59 1.75-1.55 1.77-3.06l.01-.77v-10.08c.02-1.96-1.4-3.84-4.09-3.86zm2.72 10.44c0 .78-.53 2.38-2.69 2.42 0 0-.39.01-.47.01-2.15-.04-2.7-1.63-2.69-2.42v-6.79c0-.78.54-2.37 2.69-2.41h.47c2.16.04 2.7 1.64 2.69 2.43z"/><path d="m39.86 20.87v-13.89c0-.06-.02-.11-.03-.16h-1.32c-.02.05-.04.1-.04.16v13.97l.01.13c.02 2.36 1.64 4.14 4.36 4.17.65 0 1.23-.13 1.76-.34.31-.14.47-.5.34-.83s-.5-.5-.84-.38c-.4.14-.83.23-1.27.23-2.07.01-2.98-1.52-2.97-2.93z"/></g><path d="m9.05.18c-4.94 0-8.99 4.04-8.99 8.99v14.67c0 4.94 4.05 8.99 8.99 8.99h14.68c4.95 0 9-4.05 9-8.99v-23.66z" fill="#ee7203"/><g fill="#fff" transform="translate(5.984991 6.6)"><path d="m17.28 18.64c-1.94.01-3.38-1.12-4.09-2.25-.18-.29-.22-.67.1-.91.27-.21.65-.18.89.14.65.87 1.74 1.74 3.09 1.73 2.17-.02 3-1.55 2.99-2.95-.02-2.52-3.04-2.55-3.04-2.55-2.57-.13-4.08-1.52-4.1-3.63-.01-1.79 1.35-3.67 4.04-3.69 1.18-.01 2.32.48 2.97 1.12.27.26.27.67.01.9-.26.24-.61.24-.99-.05-.54-.43-1.16-.72-1.98-.72-2.19.02-2.74 1.64-2.73 2.43.02 2.19 2.74 2.38 2.74 2.38 2.35.13 4.44 1.13 4.46 3.8.02 2.4-1.61 4.23-4.36 4.25z"/><path d="m10.54 17.09c-.39.17-.81.26-1.25.26-2.17-.02-3.01-1.55-3-2.95v-8.5h4.11.02c.34 0 .62-.29.62-.63 0-.35-.28-.63-.62-.63h-.02-4.11v-4.26c0-.06-.02-.11-.04-.16h-1.31c-.01.05-.03.1-.03.16v14.09.02c.02 2.36 1.65 4.13 4.37 4.15.64.01 1.23-.13 1.75-.33.32-.15.47-.51.35-.83-.13-.34-.51-.51-.84-.39z"/><path d="m1.99.93c0-.52-.4-.91-.92-.91-.52.01-.91.41-.9.93 0 .51.4.9.92.9.52-.01.91-.4.9-.92z"/><path d="m1.1 4.55c-.57 0-.66.37-.66.53v.95 12.45h1.32v-12.36-1.04c0-.13-.08-.53-.66-.53z"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 187.09 22.97"><defs><style>.cls-1{fill:#606463;}.cls-1,.cls-2,.cls-3{fill-rule:evenodd;}.cls-2{fill:#fff;}.cls-3{fill:#fcc14f;}</style></defs><title>Asset 1</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><polygon class="cls-1" points="187.09 0 0 0 0 22.97 187.09 22.97 187.09 0 187.09 0"/><path class="cls-2" d="M147.91,10.73a6.74,6.74,0,0,0-1.44-4.25,12.93,12.93,0,0,0-4.1-3.38,14.42,14.42,0,0,0-5.69,3.24,5.79,5.79,0,0,0-2.09,4.39,6.13,6.13,0,0,0,2.09,4.39,16,16,0,0,0,5.62,3.24,13.57,13.57,0,0,0,4.18-3.46,6.69,6.69,0,0,0,1.44-4.18Z"/><path class="cls-2" d="M153.53,4.75a18.74,18.74,0,0,1,6.12,4.61,9.65,9.65,0,0,1,2.16,5.91,9.3,9.3,0,0,1-.5,3.1,15.6,15.6,0,0,0,5.62-3.24,6.11,6.11,0,0,0,2.16-4.39c0-2.52-1.73-4.68-5-6.48A25.83,25.83,0,0,0,151.8,1.58l-5.69.5H146a21.19,21.19,0,0,1,7.49,2.66Z"/><path class="cls-2" d="M144.82,2.38l-1.51.36a16.1,16.1,0,0,1,6,4.46,9.08,9.08,0,0,1,2.23,6,9.5,9.5,0,0,1-2.74,6.48l3,.14,3-.14a8.43,8.43,0,0,0,2.09-5.47,9.55,9.55,0,0,0-3.31-6.91,21.9,21.9,0,0,0-8.79-4.9Z"/><polygon class="cls-3" points="35.93 5.62 36.01 5.62 33.05 18.22 36.29 18.22 39.61 2.95 34.49 2.95 28.45 13.97 28.45 13.97 27.36 2.95 22.32 2.95 19.08 18.22 21.96 18.22 24.77 5.62 24.84 5.62 26.07 18.22 28.95 18.22 35.93 5.62 35.93 5.62"/><path class="cls-3" d="M45.58,8.86a1.67,1.67,0,0,1,1.87,1.87l-.07.79h-5A6,6,0,0,1,43.5,9.58a3.08,3.08,0,0,1,2.09-.72ZM50.26,11A4.18,4.18,0,0,0,49,7.78,5.16,5.16,0,0,0,45.66,6.7,6,6,0,0,0,41,8.79a7.26,7.26,0,0,0-1.87,4.82,4.63,4.63,0,0,0,1.51,3.74,6.05,6.05,0,0,0,4,1.22,10.6,10.6,0,0,0,3.6-.72l.36-2.3a7.77,7.77,0,0,1-3.46.79c-2.09,0-3.1-.94-3.1-2.81H50A10.83,10.83,0,0,0,50.26,11Z"/><path class="cls-3" d="M56.39,9.15H59L59.48,7H56.82l.72-3.38L54.37,4.68,53.86,7H51.78l-.5,2.16h2.16L52.57,13a9.61,9.61,0,0,0-.36,2.59c0,2,1.15,3,3.38,3l1.58-.36.5-2.23-1.44.29c-.72,0-1.08-.36-1.08-1.15L55.31,14l1.08-4.9Z"/><path class="cls-3" d="M66.61,9.51l1.08.14.65-2.88L67.19,6.7a3.11,3.11,0,0,0-1.94.72,4.23,4.23,0,0,0-1.37,1.66H63.8l.36-2.16H61.43l-2.3,11.31h3l1-5a6,6,0,0,1,1.08-2.45,2.85,2.85,0,0,1,2.45-1.22Z"/><path class="cls-3" d="M74.6,9c1.51,0,2.3.86,2.3,2.66a5.32,5.32,0,0,1-.86,3,3,3,0,0,1-2.59,1.58c-1.51,0-2.3-.94-2.3-2.66a5.73,5.73,0,0,1,.86-3.1A3,3,0,0,1,74.6,9Zm3.89-1a5.26,5.26,0,0,0-3.74-1.3,6.52,6.52,0,0,0-6.63,6.7,5.26,5.26,0,0,0,1.3,3.74,5.22,5.22,0,0,0,3.82,1.44,6.68,6.68,0,0,0,4.82-1.94,6.79,6.79,0,0,0,1.87-5A4.73,4.73,0,0,0,78.49,8Z"/><polygon class="cls-3" points="92.46 6.99 89.3 6.99 84.9 15.27 84.83 15.27 83.68 6.99 80.65 6.99 82.6 18.22 85.84 18.22 92.46 6.99 92.46 6.99"/><polygon class="cls-3" points="91.89 18.22 94.84 18.22 97.29 6.91 94.33 6.91 91.89 18.22 91.89 18.22"/><path class="cls-3" d="M105.07,13a7.53,7.53,0,0,1-1,2.38,2.84,2.84,0,0,1-2.3.94,2.09,2.09,0,0,1-1-.22,1,1,0,0,1-.5-.94c0-1.44,1.22-2.16,3.82-2.16Zm.36-1.73h-1.08a13.64,13.64,0,0,0-4.46.58,3.37,3.37,0,0,0-2.45,3.38,2.88,2.88,0,0,0,1,2.45,3.93,3.93,0,0,0,2.52.86,4.68,4.68,0,0,0,3.6-2.09h.07l-.29,1.73h2.45l.79-4.25a30.31,30.31,0,0,0,.58-3.82,3.25,3.25,0,0,0-1.3-2.74,5.64,5.64,0,0,0-3.1-.72,10.51,10.51,0,0,0-3.82.72l-.43,2.38a7.94,7.94,0,0,1,3.67-.94c1.51,0,2.3.5,2.3,1.44l-.07,1Z"/><path class="cls-3" d="M117.74,9.36l.65-2.16a11.13,11.13,0,0,0-3.24-.5,6.83,6.83,0,0,0-3.31.79,3.14,3.14,0,0,0-1.51,2.81A3.26,3.26,0,0,0,112.19,13l1.3.94a1.48,1.48,0,0,1,.65,1.15c0,.86-.72,1.22-2,1.22a5.41,5.41,0,0,1-2.81-.86l-.65,2.38a7.22,7.22,0,0,0,3.46.72,6.79,6.79,0,0,0,3.46-.86,3.31,3.31,0,0,0,1.66-3q0-1.51-1.94-2.81l-1.3-.94a1.25,1.25,0,0,1-.65-.94c0-.79.65-1.15,1.94-1.15a8.72,8.72,0,0,1,2.45.5Z"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

@ -1 +0,0 @@
<svg height="100.535998" viewBox="96.11001587 84.3999939 519.52990723 209.08999634" width="186.709338" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h700.16v377.01h-700.16z" fill="none"/><path d="m118.94 208.92h.26c6.8-6.64 12.34-8.47 20.57-8.47 17.31 0 24.21 10.92 24.21 26.72v39.77h-22.83v-31.36c0-6.15 1-16.94-10.29-16.94-9.28 0-11.92 6.9-11.92 14.93v33.37h-22.83v-64.36h22.83z"/><path d="m241.72 239.39h-46.72a13.8 13.8 0 0 0 14 13.5 15.68 15.68 0 0 0 13.18-6.89h19.18c-3.49 15.18-17.81 23.11-31.88 23.11-20.45 0-35.72-12.05-35.72-34.25 0-21.46 14.07-34.38 34.16-34.38 21.41 0 33.8 14.6 33.8 36.56zm-20.05-13.17c-1.11-6.15-6.64-11-12.66-11a13.32 13.32 0 0 0 -13.28 11z"/><path d="m293.68 221a28.36 28.36 0 0 0 -11.86-4.51c-2.62-.3-7.24.31-7.61 3.55-.49 4.36 8.11 5.34 11.24 6 11.62 2.06 21.35 8.82 19.87 22.34-1.84 16.84-18 22.06-32.88 20.37a49.89 49.89 0 0 1 -25-10.29l10-14.9c4.24 3.77 11.6 7.89 17.21 8.53 2.87.33 7.26-.56 7.66-4.05.57-5-8.22-5.94-15.37-7.82s-16.74-8.35-15.44-19.81c1.79-15.71 16.8-21.07 30.76-19.48a51.2 51.2 0 0 1 20.6 6.51z"/><path d="m343.58 267.08h-22.83v-45.55l-10.17-.13v-18.82l10.17.14v-19.32h22.83v19.32l10.16-.14v18.82l-10.16.13z"/><path d="m430.42 266.94h-21.82v-4.86h-.24c-4.65 4.86-11.11 7-18.3 7-18.23 0-31.35-14.12-31.35-34.38s12.88-34.25 31.11-34.25a30.74 30.74 0 0 1 18.78 6.26v-4.13h21.82zm-51.83-32.11c0 8.5 5.64 15 15.36 15s15.37-6.54 15.37-15c0-8.24-5.65-15.17-15.37-15.17s-15.36 6.93-15.36 15.17z"/><path d="m472.24 269.59a11.95 11.95 0 1 1 -11.95 12 11.95 11.95 0 0 1 11.95-12z" fill="#9b00c3"/><path d="m600.7 150.1a14.94 14.94 0 1 1 -14.94 14.9 14.93 14.93 0 0 1 14.94-14.9z" fill="#ff0041"/><circle cx="564.85" cy="105.31" fill="#ffb819" r="20.91"/><path d="m484.19 209.85a59.75 59.75 0 0 0 59.75 59.74v-119.49a59.75 59.75 0 0 0 -59.75 59.75z" fill="#ff5a00"/><path d="m585.76 251.67a41.82 41.82 0 0 0 -41.82-41.82v83.64a41.82 41.82 0 0 0 41.82-41.82z"/></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.0 KiB

@ -1 +0,0 @@
<svg viewBox="0 -5 185 30" xmlns="http://www.w3.org/2000/svg"><path d="m13.8 2.9c0-2-1.9-2.5-3.4-2.5v.3c.9 0 1.6.3 1.6 1 0 .4-.3 1-1.2 1-.7 0-2.2-.4-3.3-.8-1.3-.5-2.5-.9-3.5-.9-2 0-3.4 1.5-3.4 3.2 0 1.5 1.1 2 1.5 2.2l.1-.2c-.2-.2-.5-.4-.5-1 0-.4.4-1.1 1.4-1.1.9 0 2.1.4 3.7.9 1.4.4 2.9.7 3.7.8v3.1l-1.5 1.3v.1l1.5 1.3v4.3c-.8.5-1.7.6-2.5.6-1.5 0-2.8-.4-3.9-1.6l4.1-2v-6.9l-5 2.2c.4-1.3 1.5-2.2 2.6-2.8l-.1-.3c-3 .8-5.7 3.6-5.7 7 0 4 3.3 7 7 7 4 0 6.6-3.2 6.6-6.5h-.2c-.6 1.3-1.5 2.5-2.6 3.1v-4.1l1.6-1.3v-.1l-1.6-1.3v-3.1c1.5 0 3-1 3-2.9zm-8.7 11-1.2.6c-.7-.9-1.1-2.1-1.1-3.8 0-.7 0-1.5.2-2.1l2.1-.9zm10.6 2.3-1.3 1 .2.2.6-.5 2.2 2 3-2-.1-.2-.8.5-1-1v-6.8l.8-.6 1.7 1.4v6.1c0 3.8-.8 4.4-2.5 5v.3c2.8.1 5.4-.8 5.4-5.7v-6.6l.9-.7-.2-.2-.8.6-2.5-2.1-2.8 2.1v-8.2h-.2l-3.5 2.4v.2c.4.2 1 .4 1 1.5zm18.3-1.1-2.5 1.9-2.5-2v-1.2l4.7-3.2v-.1l-2.4-3.6-5.2 2.8v6.6l-1 .8.2.2.9-.7 3.4 2.5 4.5-3.6zm-5-1.7v-4.9l.2-.1 2.2 3.5zm24.1-11.4c0-.3-.1-.6-.2-.9h-.2c-.3.8-.7 1.2-1.7 1.2-.9 0-1.5-.5-1.9-.9l-2.9 3.3.2.2 1-.9c.6.5 1.1.9 2.5 1v8.3l-5.9-10.1c-.5-.8-1.2-1.9-2.6-1.9-1.6 0-3 1.4-2.8 3.6h.3c.1-.6.4-1.3 1.1-1.3.5 0 1 .5 1.3 1v3.3c-1.8 0-3 .8-3 2.3 0 .8.4 2 1.6 2.3v-.2c-.2-.2-.3-.4-.3-.7 0-.5.4-.9 1.1-.9h.5v4.2c-2.1 0-3.8 1.2-3.8 3.2 0 1.9 1.6 2.8 3.4 2.7v-.2c-1.1-.1-1.6-.6-1.6-1.3 0-.9.6-1.3 1.4-1.3s1.5.5 2 1.1l2.9-3.2-.2-.2-.7.8c-1.1-1-1.7-1.3-3-1.5v-10l8 14h.6v-14c1.5-.1 2.9-1.3 2.9-3zm7.3 13.1-2.5 1.9-2.5-2v-1.2l4.7-3.2v-.1l-2.4-3.6-5.2 2.8v6.6l-1 .8.2.2.9-.7 3.4 2.5 4.5-3.6zm-5-1.7v-4.9l.2-.1 2.2 3.5zm21.3-5.4-.7.5-1.9-1.6-2.2 2 .9.9v7.5l-2.4-1.5v-6.2l.8-.5-2.3-2.2-2.2 2 .9.9v7.2l-.3.2-2.1-1.5v-6c0-1.4-.7-1.8-1.5-2.3-.7-.5-1.1-.8-1.1-1.5 0-.6.6-.9.9-1.1v-.2c-.8 0-2.9.8-2.9 2.7 0 1 .5 1.4 1 1.9s1 .9 1 1.8v5.8l-1.1.8.2.2 1-.8 2.3 2 2.5-1.7 2.8 1.7 5.3-3.1v-6.7l1.3-1zm18.6-5.5-1 .9-2.2-2-3.3 2.4v-2.2h-.3l.1 16.2c-.3 0-1.2-.2-1.9-.4l-.2-13.5c0-1-.7-2.4-2.5-2.4s-3 1.4-3 2.8h.3c.1-.6.4-1.1 1-1.1s1.1.4 1.1 1.7v3.9c-1.8.1-2.9 1.1-2.9 2.4 0 .8.4 2 1.6 2v-.2c-.4-.2-.5-.5-.5-.7 0-.6.5-.8 1.3-.8h.4v6.2c-1.5.5-2.1 1.6-2.1 2.8 0 1.7 1.3 2.9 3.3 2.9 1.4 0 2.6-.2 3.8-.5 1-.2 2.3-.5 2.9-.5.8 0 1.1.4 1.1.9 0 .7-.3 1-.7 1.1v.2c1.6-.3 2.6-1.3 2.6-2.8s-1.5-2.4-3.1-2.4c-.8 0-2.5.3-3.7.5-1.4.3-2.8.5-3.2.5-.7 0-1.5-.3-1.5-1.3 0-.8.7-1.5 2.4-1.5.9 0 2 .1 3.1.4 1.2.3 2.3.6 3.3.6 1.5 0 2.8-.5 2.8-2.6v-12.3l1.2-1zm-4.1 6.1c-.3.3-.7.6-1.2.6s-1-.3-1.2-.6v-4.4l1-.7 1.4 1.3zm0 3c-.2-.2-.7-.5-1.2-.5s-1 .3-1.2.5v-2.6c.2.2.7.5 1.2.5s1-.3 1.2-.5zm0 4.7c0 .8-.5 1.6-1.6 1.6h-.8v-5.9c.2-.2.7-.5 1.2-.5s.9.3 1.2.5zm13.7-7.1-3.2-2.3-4.9 2.8v6.5l-1 .8.1.2.8-.6 3.2 2.4 5-3zm-5.4 6.3v-7.2l2.5 1.8v7.1zm14.9-8.4h-.2c-.3.2-.6.4-.9.4-.4 0-.9-.2-1.1-.5h-.2l-1.7 1.9-1.7-1.9-3 2 .1.2.8-.5 1 1.1v6.3l-1.3 1 .2.2.6-.5 2.4 2 3.1-2.1-.1-.2-.9.5-1.2-1v-7c.5.5 1.1 1 1.8 1 1.4.1 2.2-1.3 2.3-2.9zm12 9.6-3.4 2.3-4.6-7 3.3-5.1h.2c.4.4 1 .8 1.7.8s1.2-.4 1.5-.8h.2c-.1 2-1.5 3.2-2.5 3.2s-1.5-.5-2.1-.8l-.3.5 5 7.4 1-.6zm-11-.5-1.3 1 .2.2.6-.5 2.2 2 3-2-.2-.2-.8.5-1-1v-15.4h-.1l-3.6 2.4v.2c.4.2 1 .3 1 1.5zm27.6-13.3c0-2-1.9-2.5-3.4-2.5v.3c.9 0 1.6.3 1.6 1 0 .4-.3 1-1.2 1-.7 0-2.2-.4-3.3-.8-1.3-.4-2.5-.8-3.5-.8-2 0-3.4 1.5-3.4 3.2 0 1.5 1.1 2 1.5 2.2l.1-.2c-.3-.2-.6-.4-.6-1 0-.4.4-1.1 1.4-1.1.9 0 2.1.4 3.7.9 1.4.4 2.9.7 3.7.8v3.1l-1.5 1.3v.1l1.5 1.3v4.3c-.8.5-1.7.6-2.5.6-1.5 0-2.8-.4-3.9-1.6l4.1-2v-7l-5 2.2c.5-1.3 1.6-2.2 2.6-2.9l-.1-.2c-3 .8-5.7 3.5-5.7 6.9 0 4 3.3 7 7 7 4 0 6.6-3.2 6.6-6.5h-.2c-.6 1.3-1.5 2.5-2.6 3.1v-4.1l1.6-1.3v-.1l-1.5-1.3v-3c1.5 0 3-1 3-2.9zm-8.7 11-1.2.6c-.7-.9-1.1-2.1-1.1-3.8 0-.7.1-1.5.3-2.1l2.1-.9zm12.2-12h-.1l-2 1.7v.1l1.7 1.9h.2l2-1.7v-.1zm3 14.8-.8.5-1-1v-6.9l1-.7-.2-.2-.7.6-1.8-2.1-2.9 2 .2.3.7-.5.9 1.1v6.5l-1.3 1 .1.2.7-.5 2.2 2 3-2zm16.7-.1-.7.5-1.1-1v-6.8l1-.8-.2-.2-.8.7-2.3-2.1-3 2.1-2.3-2.1-2.8 2.1-1.8-2.1-2.9 2 .1.3.7-.5 1 1.1v6.5l-.8.8 2.3 1.9 2.2-2-.9-.9v-6.8l.9-.6 1.5 1.4v6l-.8.8 2.3 1.9 2.2-2-.9-.9v-6.6l.8-.5 1.6 1.4v6l-.7.7 2.3 2.1 3.1-2.1zm8.7-1.5-2.5 1.9-2.5-2v-1.2l4.7-3.2v-.1l-2.4-3.6-5.2 2.8v6.8l3.5 2.5 4.5-3.6zm-5-1.7v-4.9l.2-.1 2.2 3.5zm14.1-.9-1.9-1.5c1.3-1.1 1.8-2.6 1.8-3.6v-.6h-.2c-.2.5-.6 1-1.4 1s-1.3-.4-1.8-1l-4.5 2.5v3.6l1.7 1.3c-1.7 1.5-2 2.5-2 3.3 0 1 .5 1.7 1.3 2l.1-.2c-.2-.2-.4-.3-.4-.8 0-.3.4-.8 1.2-.8 1 0 1.6.7 1.9 1l4.3-2.6v-3.6zm-1.1-3c-.7 1.2-2.2 2.4-3.1 3l-1.1-.9v-3.5c.4 1 1.5 1.8 2.6 1.8.7 0 1.1-.1 1.6-.4zm-1.7 8c-.5-1.1-1.7-1.9-2.9-1.9-.3 0-1.1 0-1.9.5.5-.8 1.8-2.2 3.5-3.2l1.2 1z"/></svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.7 KiB

@ -1,9 +0,0 @@
<svg width="197" height="36" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient x1="0%" y1="49.167%" x2="100%" y2="50.833%" id="a">
<stop stop-color="#594666" offset="0%"/>
<stop stop-color="#341D44" offset="100%"/>
</linearGradient>
</defs>
<path d="M17.3 2.021c1.298 1.356 1.948 3.557 1.922 6.678 0 3.096-.624 5.374-1.897 6.832-1.274 1.458-3.272 2.175-5.97 2.175h-4.27V24H.491V0h10.315c3.047 0 5.195.665 6.494 2.021zm-4.97 9.135v-3.94c0-.64-.125-1.05-.375-1.28-.25-.205-.7-.333-1.349-.333H7.11v7.164h3.497c.649 0 1.099-.102 1.348-.332.25-.256.375-.665.375-1.28zM25.452 0h10.232l6.229 24h-6.604L30.73 6.455h-.326L25.827 24h-6.604l6.23-24zm159.162 11.145c1.251 1.124 1.877 2.883 1.877 5.254 0 2.664-.746 4.595-2.19 5.792-1.47 1.198-3.83 1.809-7.104 1.809-3.203 0-6.165-.415-8.91-1.222l.915-5.328a24.544 24.544 0 0 0 7.272 1.1c1.252 0 2.312-.073 3.203-.22v-3.153l-3.3-.293c-1.95-.171-3.49-.513-4.598-1.002-1.108-.489-1.903-1.222-2.408-2.15-.506-.93-.747-2.2-.747-3.789 0-1.98.265-3.544.819-4.692.53-1.15 1.42-1.98 2.649-2.493C173.32.244 174.982 0 177.1 0c2.818 0 5.538.318 8.212.978l-.795 5.18a51.023 51.023 0 0 0-3.203-.537 21.435 21.435 0 0 0-2.841-.17c-1.228 0-2.24.072-3.034.195v3.152l2.961.245c2.89.269 4.96.953 6.213 2.102zM58.772 12.64h.025V0h6.597v24h-6.497l-6.072-9.979c-.35-.614-.575-1.1-.725-1.51-.125-.409-.2-.792-.2-1.15h-.225V24H45.08V0h6.52l6.021 9.979c.282.473.525.97.725 1.484.125.41.2.793.2 1.177h.225zm50.362-1.471c1.252 1.124 1.878 2.884 1.902 5.23 0 2.664-.722 4.595-2.191 5.792C107.376 23.39 105.016 24 101.74 24c-3.202 0-6.164-.415-8.909-1.222l.915-5.328a24.251 24.251 0 0 0 7.248 1.1c1.276 0 2.336-.073 3.227-.22v-3.153l-3.3-.293c-1.95-.171-3.49-.513-4.599-1.002-1.107-.489-1.926-1.222-2.407-2.15-.506-.93-.747-2.2-.747-3.789 0-1.98.29-3.544.819-4.692.53-1.15 1.42-1.98 2.649-2.493C97.864.244 99.527 0 101.645 0c2.793 0 5.514.318 8.187.978l-.794 5.205a51.06 51.06 0 0 0-3.203-.537 21.343 21.343 0 0 0-2.842-.171c-1.227 0-2.24.073-3.034.195v3.153l2.962.244c2.89.269 4.96.954 6.213 2.102zm18.05 7.112c.898-.136 1.785-.34 2.653-.61l.458 5.376c-.944.35-1.922.596-2.919.733-1.061.147-2.268.22-3.668.22-2.484 0-4.39-.367-5.766-1.1-1.375-.733-2.317-1.93-2.895-3.64-.555-1.688-.845-4.107-.845-7.236 0-3.177.314-5.596.917-7.307.603-1.71 1.64-2.933 3.088-3.641C119.655.366 121.707 0 124.36 0c.99 0 2.075.098 3.233.269 1.159.17 2.027.39 2.582.635l-.796 5.132c-.724-.22-1.544-.39-2.485-.512-.941-.123-1.714-.196-2.341-.196-1.35 0-2.292.195-2.799.562-.506.367-.748 1.05-.748 2.053v10.216c1.206.244 2.268.367 3.21.367.988 0 1.978-.074 2.967-.245zM157.997 0h6.596v24h-6.596V0zM85.146 0l6.367 24h-6.75l-4.68-17.545h-.358L75.046 24h-6.75l6.367-24h10.483zm63.72 0l6.23 24h-6.604l-4.579-17.545h-.325L139.011 24h-6.604l6.227-24h10.232z" transform="translate(4.509 6)" fill="url(#a)" fill-rule="evenodd"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="800px" height="160px" viewBox="0 0 800 160" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 49.3 (51167) - http://www.bohemiancoding.com/sketch -->
<title>Dark</title>
<desc>Created with Sketch.</desc>
<defs>
<polygon id="path-1" points="0.321905678 0.275424046 91.2854215 0.275424046 91.2854215 120.758046 0.321905678 120.758046"></polygon>
<polygon id="path-3" points="0.000265185374 0.245106383 217.001549 0.245106383 217.001549 160 0.000265185374 160"></polygon>
</defs>
<g id="Dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Logo">
<path d="M275.066842,101.866245 L298.520492,101.866245 C310.08215,101.866245 318.670431,93.9910625 318.670431,83.3267532 C318.670431,72.8265103 310.08215,64.951328 299.015612,64.951328 L275.066842,64.951328 L275.066842,101.866245 Z M275.066842,120.405359 L275.066842,156 L252.439024,156 L252.439024,46.4122137 L304.466487,46.4122137 C325.111926,46.4122137 341.463415,61.6703793 341.463415,83.3267532 C341.463415,105.147193 325.442259,120.405359 303.970608,120.405359 L275.066842,120.405359 Z" id="Fill-1" fill="#2C3E50"></path>
<path d="M412.210747,116.169033 C412.210747,103.600873 402.12157,93.5132706 389.551448,93.5132706 C376.981707,93.5132706 366.727134,103.600873 366.727134,116.169033 C366.727134,128.737573 376.981707,138.990166 389.551448,138.990166 C402.12157,138.990166 412.210747,128.737573 412.210747,116.169033 M385.581936,73.5038168 C397.325456,73.5038168 409.564405,79.4571558 413.86471,89.0486465 L414.360899,89.0486465 L415.187881,75.6536337 L435.365854,75.6536337 L435.365854,156 L415.187881,156 L414.360899,143.45517 L413.86471,143.45517 C409.398629,153.377402 396.663491,159 385.581936,159 C365.07279,159 343.902439,141.801465 343.902439,116.169033 C343.902439,90.5369813 365.238567,73.5038168 385.581936,73.5038168 Z" id="Fill-3" fill="#2C3E50"></path>
<path d="M442.682927,75.6460779 L462.812052,75.6460779 L464.131994,88.9940123 L464.46198,88.9940123 C469.411765,79.4362321 479.971306,73.5038168 490.860832,73.5038168 C512.804499,73.5038168 526.829268,90.3123268 526.829268,111.899348 L526.829268,156 L504.059879,156 L504.059879,114.206777 C504.059879,103.001104 495.810238,93.7729023 484.756098,93.7729023 C474.196557,93.7729023 465.451937,103.165893 465.451937,114.701145 L465.451937,156 L442.682927,156 L442.682927,75.6460779 Z" id="Fill-5" fill="#2C3E50"></path>
<polygon id="Fill-7" fill="#2C3E50" points="534.146341 38.0839695 557.050183 38.0839695 557.050183 107.0289 557.382123 107.0289 588.086549 75.7649175 616.632984 75.7649175 579.621704 112.788055 617.914429 156 589.206787 156 557.382123 118.547209 557.050183 118.547209 557.050183 156 534.146341 156"></polygon>
<path d="M680.792588,117.169033 C680.792588,104.766624 670.354166,94.5132706 657.92702,94.5132706 C645.499874,94.5132706 635.061071,104.766624 635.061071,117.169033 C635.061071,129.737573 645.499874,139.990166 657.92702,139.990166 C670.354166,139.990166 680.792588,129.737573 680.792588,117.169033 M612.195122,117.169033 C612.195122,93.686418 632.741337,74.5038168 657.92702,74.5038168 C683.112322,74.5038168 703.658537,93.686418 703.658537,117.169033 C703.658537,140.652028 683.112322,160 657.92702,160 C632.741337,160 612.195122,140.652028 612.195122,117.169033" id="Fill-9" fill="#2C3E50"></path>
<g id="Group-13" transform="translate(708.536585, 37.862595)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-12"></g>
<path d="M68.5035169,78.1861569 C68.5035169,65.6940195 58.4330533,55.6674355 45.8862463,55.6674355 C33.3398188,55.6674355 23.1042658,65.6940195 23.1042658,78.1861569 C23.1042658,90.6786721 33.3398188,100.869248 45.8862463,100.869248 C58.4330533,100.869248 68.5035169,90.6786721 68.5035169,78.1861569 Z M91.2854974,0.275424046 L91.2854974,118.137405 L71.3027701,118.137405 L70.3195021,105.307245 L69.9893229,105.307245 C65.5319047,115.169458 52.6549185,120.758046 41.5942971,120.758046 C20.6275428,120.758046 0.321905678,103.663542 0.321905678,78.1861569 C0.321905678,52.7091492 20.6275428,35.7790156 41.0986489,35.7790156 C52.6549185,35.7790156 64.0460986,41.8607141 68.1733377,51.2298172 L68.5035169,51.2298172 L68.5035169,0.275424046 L91.2854974,0.275424046 Z" id="Fill-11" fill="#2C3E50" mask="url(#mask-2)"></path>
</g>
<g id="Group-16">
<mask id="mask-4" fill="white">
<use xlink:href="#path-3"></use>
</mask>
<g id="Clip-15"></g>
<path d="M182.173146,72.3045674 C179.882324,72.7406903 176.517879,72.4520851 172.983716,68.9373806 C169.314687,65.3250875 168.638464,63.1758676 168.732794,61.9972388 C168.784695,61.348539 169.590479,61.0701466 170.049629,61.5319905 C175.829533,67.3460804 179.87058,69.6632435 182.307255,70.5770969 C183.159257,70.8959622 183.066821,72.1343546 182.173146,72.3045674 M208.714793,77.9684917 C202.438992,73.3954421 181.685963,52.03374 159.689215,34.322156 C153.250514,28.1619669 145.345717,21.3685863 135.155401,15.1705721 C77.8814213,-19.6647943 18.2991925,17.3969551 18.2991925,17.3969551 C87.7360886,-8.66299764 129.308821,27.0866005 129.308821,27.0866005 C75.6527276,7.74437825 14.4218035,29.2055603 0.000265185374,46.0547329 C6.59466777,42.4590827 32.1161082,28.8768605 77.4082548,30.8399811 C107.795468,32.6922742 125.986806,45.028539 136.685142,57.3368132 C136.950706,57.7177116 137.28143,58.1092009 137.685269,58.5131726 C137.686785,58.5150638 137.688679,58.5169551 137.690194,58.5188463 C137.66216,58.5286809 123.69712,63.5155366 106.920356,56.5572388 C106.920356,56.5572388 117.255009,72.0348747 130.948045,72.8091537 C128.986052,80.5042837 127.100584,89.4154894 125.537885,101.514969 C121.14149,137.54069 172.870822,156.693787 181.428733,159.607073 L182.620173,160.000076 C182.620173,160.000076 163.760189,141.684804 165.568375,98.8630544 C153.16717,92.9298156 152.650438,83.1274515 151.875339,80.0318487 C151.875339,80.0318487 158.334497,90.3505248 164.018177,90.8660804 C169.702236,91.6399811 175.263173,89.971896 177.453226,89.5766241 C180.489977,89.028539 188.304232,90.3505248 188.820965,96.5413522 C189.079331,104.538326 186.754034,117.178326 198.380519,122.853598 C198.380519,122.853598 195.279744,106.602061 203.547466,106.344095 C207.939694,106.85965 211.298077,106.602061 211.815189,103.764426 C212.590288,100.410856 214.140107,96.2837636 215.94905,92.1559149 C217.757235,88.0284444 218.273968,84.9332199 208.714793,77.9684917" id="Fill-14" fill="#2C3E50" mask="url(#mask-4)"></path>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.7 KiB

@ -1 +0,0 @@
<svg fill="#072654" height="67" viewBox="0 0 1896 401" width="316" xmlns="http://www.w3.org/2000/svg"><path d="m122.63 105.7-15.75 57.97 90.15-58.3-58.96 219.98 59.88.05 87.1-324.92" fill="#3395ff"/><path d="m25.6 232.92-24.8 92.48h122.73l50.22-188.13zm426.32-81.42c-3 11.15-8.78 19.34-17.4 24.57-8.6 5.22-20.67 7.84-36.25 7.84h-49.5l17.38-64.8h49.5c15.56 0 26.25 2.6 32.05 7.9s7.2 13.4 4.22 24.6m51.25-1.4c6.3-23.4 3.7-41.4-7.82-54-11.5-12.5-31.68-18.8-60.48-18.8h-110.47l-66.5 248.1h53.67l26.8-100h35.2c7.9 0 14.12 1.3 18.66 3.8 4.55 2.6 7.22 7.1 8.04 13.6l9.58 82.6h57.5l-9.32-77c-1.9-17.2-9.77-27.3-23.6-30.3 17.63-5.1 32.4-13.6 44.3-25.4a92.6 92.6 0 0 0 24.44-42.5m130.46 86.4c-4.5 16.8-11.4 29.5-20.73 38.4-9.34 8.9-20.5 13.3-33.52 13.3-13.26 0-22.25-4.3-27-13-4.76-8.7-4.92-21.3-.5-37.8s11.47-29.4 21.17-38.7 21.04-13.95 34.06-13.95c13 0 21.9 4.5 26.4 13.43 4.6 8.97 4.7 21.8.2 38.5zm23.52-87.8-6.72 25.1c-2.9-9-8.53-16.2-16.85-21.6-8.34-5.3-18.66-8-30.97-8-15.1 0-29.6 3.9-43.5 11.7s-26.1 18.8-36.5 33-18 30.3-22.9 48.4c-4.8 18.2-5.8 34.1-2.9 47.9 3 13.9 9.3 24.5 19 31.9 9.8 7.5 22.3 11.2 37.6 11.2a82.4 82.4 0 0 0 35.2-7.7 82.11 82.11 0 0 0 28.4-21.2l-7 26.16h51.9l47.39-176.77h-52zm238.65 0h-150.93l-10.55 39.4h87.82l-116.1 100.3-9.92 37h155.8l10.55-39.4h-94.1l117.88-101.8m142.4 52c-4.67 17.4-11.6 30.48-20.75 39-9.15 8.6-20.23 12.9-33.24 12.9-27.2 0-36.14-17.3-26.86-51.9 4.6-17.2 11.56-30.13 20.86-38.84 9.3-8.74 20.57-13.1 33.82-13.1 13 0 21.78 4.33 26.3 13.05 4.52 8.7 4.48 21.67-.13 38.87m30.38-80.83c-11.95-7.44-27.2-11.16-45.8-11.16-18.83 0-36.26 3.7-52.3 11.1a113.09 113.09 0 0 0 -41 32.06c-11.3 13.9-19.43 30.2-24.42 48.8-4.9 18.53-5.5 34.8-1.7 48.73 3.8 13.9 11.8 24.6 23.8 32 12.1 7.46 27.5 11.17 46.4 11.17 18.6 0 35.9-3.74 51.8-11.18 15.9-7.48 29.5-18.1 40.8-32.1 11.3-13.94 19.4-30.2 24.4-48.8s5.6-34.84 1.8-48.8c-3.8-13.9-11.7-24.6-23.6-32.05m185.1 40.8 13.3-48.1c-4.5-2.3-10.4-3.5-17.8-3.5-11.9 0-23.3 2.94-34.3 8.9-9.46 5.06-17.5 12.2-24.3 21.14l6.9-25.9-15.07.06h-37l-47.7 176.7h52.63l24.75-92.37c3.6-13.43 10.08-24 19.43-31.5 9.3-7.53 20.9-11.3 34.9-11.3 8.6 0 16.6 1.97 24.2 5.9m146.5 41.1c-4.5 16.5-11.3 29.1-20.6 37.8-9.3 8.74-20.5 13.1-33.5 13.1s-21.9-4.4-26.6-13.2c-4.8-8.85-4.9-21.6-.4-38.36 4.5-16.75 11.4-29.6 20.9-38.5 9.5-8.97 20.7-13.45 33.7-13.45 12.8 0 21.4 4.6 26 13.9s4.7 22.2.28 38.7m36.8-81.4c-9.75-7.8-22.2-11.7-37.3-11.7-13.23 0-25.84 3-37.8 9.06-11.95 6.05-21.65 14.3-29.1 24.74l.18-1.2 8.83-28.1h-51.4l-13.1 48.9-.4 1.7-54 201.44h52.7l27.2-101.4c2.7 9.02 8.2 16.1 16.6 21.22 8.4 5.1 18.77 7.63 31.1 7.63 15.3 0 29.9-3.7 43.75-11.1 13.9-7.42 25.9-18.1 36.1-31.9s17.77-29.8 22.6-47.9c4.9-18.13 5.9-34.3 3.1-48.45-2.85-14.17-9.16-25.14-18.9-32.9m174.65 80.65c-4.5 16.7-11.4 29.5-20.7 38.3-9.3 8.86-20.5 13.27-33.5 13.27-13.3 0-22.3-4.3-27-13-4.8-8.7-4.9-21.3-.5-37.8s11.42-29.4 21.12-38.7 21.05-13.94 34.07-13.94c13 0 21.8 4.5 26.4 13.4 4.6 8.93 4.63 21.76.15 38.5zm23.5-87.85-6.73 25.1c-2.9-9.05-8.5-16.25-16.8-21.6-8.4-5.34-18.7-8-31-8-15.1 0-29.68 3.9-43.6 11.7-13.9 7.8-26.1 18.74-36.5 32.9s-18 30.3-22.9 48.4c-4.85 18.17-5.8 34.1-2.9 47.96 2.93 13.8 9.24 24.46 19 31.9 9.74 7.4 22.3 11.14 37.6 11.14 12.3 0 24.05-2.56 35.2-7.7a82.3 82.3 0 0 0 28.33-21.23l-7 26.18h51.9l47.38-176.7h-51.9zm269.87.06.03-.05h-31.9c-1.02 0-1.92.05-2.85.07h-16.55l-8.5 11.8-2.1 2.8-.9 1.4-67.25 93.68-13.9-109.7h-55.08l27.9 166.7-61.6 85.3h54.9l14.9-21.13c.42-.62.8-1.14 1.3-1.8l17.4-24.7.5-.7 77.93-110.5 65.7-93 .1-.06h-.03z"/></svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

@ -1 +0,0 @@
<svg height="76.6" viewBox="0 0 136.5 76.599998" width="136.5" xmlns="http://www.w3.org/2000/svg"><g fill="#ec1b23" transform="translate(-20.6 -7)"><path d="m36.4 57.2v5.2c0 4.2 1.4 7.9 6.8 7.9 4 0 5.7-3.6 5.7-7.3 0-6.1-5.1-8.5-9.5-11.2-5.3-3-9.7-5.8-12.9-9.5-3.1-3.7-5-8.2-5-14.6 0-13.7 8.3-20.7 21.5-20.7 14.9 0 22.5 9.9 21.7 23.7h-15.8c-.2-4.3 0-10.1-5.6-10.5-3.5-.3-5.5 1.7-5.9 4.9-.5 4.4 1.8 6.6 5.2 9 6.4 4.1 12 6.6 16 10.3s6.3 8.6 6.3 17.4c0 14-7.8 21.8-22 21.8-15.7 0-22.3-8.8-22.3-18.4v-7.8h15.8z"/><path d="m72.8 81.6v-73h20.3c6.6 0 16.2.6 20.9 6 4 4.5 4.8 9.9 4.8 15.9 0 7.9-1.8 16.7-9.6 20.3-5.9 2.9-12.8 2-19.3 2.3v28.4h-17.1zm17.1-41.5c3.2-.1 6.9.3 9.6-1.8 1.8-1.9 2.1-4.9 2.1-7.4 0-2.8-.3-7.1-3.2-8.5-1.7-.6-4-.6-6.7-.6h-1.8z"/><path d="m152.1 54.5c-2.2-2.2-4.8-3.3-7.7-3.3-2.5 0-4.2.8-5.3 1.4-.2.1-.2.3-.2.5l.7 2c.1.2.2.3.4.3h4.3c.2 0 .3.1.4.3s0 .3-.1.4l-3.4 2.5c-.1.1-.2.3-.1.4l1.3 4.1c.1.2 0 .3-.1.4s-.3.1-.4 0l-3.9-2.5c-.1-.1-.3-.1-.4 0l-3.5 2.5c-.1.1-.3.1-.4 0s-.2-.3-.1-.4l1.3-4.1c.1-.2 0-.3-.1-.4l-3.4-2.5c-.1-.1-.2-.3-.1-.4.1-.2.2-.3.4-.3h4.3c.2 0 .3-.1.4-.3l.7-2c.1-.2 0-.4-.2-.5-1.1-.6-2.8-1.4-5.3-1.4-2.9 0-5.6 1.1-7.7 3.3-2.9 2.9-4.6 7.3-4.6 11.9 0 9.4 8.5 17 18.9 17s18.9-7.6 18.9-17c-.4-4.6-2.1-9.1-5-11.9z"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

@ -1,106 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 1333.3333 266.66666"
height="266.66666"
width="1333.3333"
xml:space="preserve"
id="svg3713"
version="1.1"
sodipodi:docname="logo.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="1506"
id="namedview36"
showgrid="false"
inkscape:zoom="2.7532502"
inkscape:cx="599.11011"
inkscape:cy="133.33333"
inkscape:window-x="-11"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg3713" /><metadata
id="metadata3719"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs3717"><clipPath
id="clipPath3729"
clipPathUnits="userSpaceOnUse"><path
id="path3727"
d="M 0,200 H 1000 V 0 H 0 Z" /></clipPath></defs><g
transform="matrix(1.3333333,0,0,-1.3333333,0,266.66667)"
id="g3721"
style="fill:#00a0e3;fill-opacity:1"><g
id="g3723"
style="fill:#00a0e3;fill-opacity:1"><g
clip-path="url(#clipPath3729)"
id="g3725"
style="fill:#00a0e3;fill-opacity:1"><g
transform="translate(46.9448,138.832)"
id="g3731"
style="fill:#00a0e3;fill-opacity:1"><path
id="path3733"
style="fill:#00a0e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,-15.33 17.382,-19.257 37.947,-21.872 24.117,-3.178 44.677,-10.657 44.677,-35.707 0,-20.002 -15.513,-38.696 -47.667,-38.696 -19.817,0 -36.265,4.489 -50.475,14.396 -1.869,1.12 -1.869,2.053 -0.75,4.11 l 3.553,5.98 c 1.308,2.058 2.058,2.433 4.3,1.125 11.967,-8.225 27.479,-12.527 41.502,-12.527 17.2,0 35.144,5.61 35.144,25.049 0,15.518 -14.02,20.565 -38.509,23.93 -20.377,2.808 -44.119,8.975 -44.119,33.837 0,14.393 10.844,39.072 47.109,39.072 19.255,0 31.779,-5.61 45.989,-14.21 2.058,-1.12 1.68,-2.245 0.933,-4.11 L 76.081,14.58 C 74.961,12.522 73.836,11.777 71.971,13.272 60.006,21.31 47.667,25.612 34.582,25.612 6.167,25.612 0,9.72 0,0" /></g><g
transform="translate(215.9419,55.2656)"
id="g3735"
style="fill:#00a0e3;fill-opacity:1"><path
id="path3737"
style="fill:#00a0e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 29.537,0 51.967,26.737 51.967,54.777 0,28.227 -22.43,54.584 -51.967,54.772 -29.165,0 -51.969,-26.545 -51.969,-54.772 C -51.969,26.737 -29.165,0 0,0 m 0,122.633 c 36.827,0 66.922,-30.654 66.922,-67.856 0,-25.799 -13.458,-43.182 -29.35,-55.335 l 16.45,-22.616 c 1.312,-1.871 0.937,-2.996 -0.745,-4.115 l -7.293,-5.235 c -1.682,-1.121 -2.799,-0.746 -3.924,0.937 L 25.607,-7.1 C 17.575,-10.652 11.027,-13.084 0,-13.084 c -36.829,0 -66.924,30.664 -66.924,67.861 0,37.202 30.095,67.856 66.924,67.856" /></g><g
transform="translate(389.8018,57.5156)"
id="g3739"
style="fill:#00a0e3;fill-opacity:1"><path
id="path3741"
style="fill:#00a0e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 2.245,0 2.805,-0.75 2.805,-2.994 v -6.918 c 0,-2.245 -0.56,-2.99 -2.805,-2.99 h -76.084 c -2.245,0 -2.992,0.745 -2.992,2.99 v 124.878 c 0,2.24 0.747,2.99 2.992,2.99 h 8.788 c 2.239,0 2.989,-0.75 2.989,-2.99 V 0 Z" /></g><g
transform="translate(555.251,175.4717)"
id="g3743"
style="fill:#00a0e3;fill-opacity:1"><path
id="path3745"
style="fill:#00a0e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 2.428,0 2.803,-0.75 2.803,-2.99 v -7.48 c 0,-2.245 -0.563,-2.99 -2.803,-2.99 h -44.868 v -114.408 c 0,-2.245 -0.563,-2.99 -2.803,-2.99 h -8.975 c -2.43,0 -2.992,0.745 -2.992,2.99 V -13.46 h -44.677 c -2.428,0 -2.99,0.745 -2.99,2.99 v 7.48 c 0,2.24 0.75,2.99 2.99,2.99 z" /></g><g
transform="translate(624.9873,108.5479)"
id="g3747"
style="fill:#00a0e3;fill-opacity:1"><path
id="path3749"
style="fill:#00a0e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 22.242,0 31.962,10.652 31.962,27.664 31.962,46.358 19.252,54.209 0,54.209 H -31.779 V 0 Z m 17.007,-11.032 35.144,-49.35 c 1.495,-2.432 0,-3.553 -2.24,-3.553 h -8.787 c -2.245,0 -3.74,1.121 -5.052,2.991 L 1.678,-12.715 h -33.457 v -48.229 c 0,-2.428 -0.755,-2.991 -2.995,-2.991 h -8.788 c -2.24,0 -2.99,0.375 -2.99,2.991 V 63.934 c 0,2.24 0.75,2.99 2.99,2.99 H 0.933 c 21.309,0 45.421,-8.976 45.421,-39.26 0,-22.242 -11.959,-34.024 -29.347,-38.696" /></g><g
transform="translate(704.0635,172.4814)"
id="g3751"
style="fill:#00a0e3;fill-opacity:1"><path
id="path3753"
style="fill:#00a0e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,2.24 0.75,2.99 2.995,2.99 h 8.97 c 2.245,0 2.807,-0.75 2.807,-2.99 v -124.878 c 0,-2.245 -0.562,-2.99 -2.807,-2.99 h -8.97 c -2.245,0 -2.995,0.745 -2.995,2.99 z" /></g><g
transform="translate(807.8193,57.3232)"
id="g3755"
style="fill:#00a0e3;fill-opacity:1"><path
id="path3757"
style="fill:#00a0e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 22.617,0 31.962,9.162 31.962,24.862 0,12.715 -13.085,23.185 -30.284,23.185 H -37.015 V 0 Z m -0.192,60.382 c 16.08,0 27.482,8.042 27.482,20.189 0,17.2 -12.527,24.863 -31.78,24.863 H -37.015 V 60.382 Z M -48.797,-12.71 c -2.24,0 -2.99,0.563 -2.99,2.99 v 124.878 c 0,2.24 0.75,2.99 2.99,2.99 h 45.244 c 21.31,0 45.797,-8.788 45.797,-36.269 0,-16.45 -13.272,-24.112 -21.309,-27.108 V 54.589 C 28.222,52.345 47.104,44.119 47.104,23.367 47.104,-2.989 25.795,-12.71 1.12,-12.71 Z" /></g><g
transform="translate(967.2793,57.5156)"
id="g3759"
style="fill:#00a0e3;fill-opacity:1"><path
id="path3761"
style="fill:#00a0e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -71.409 v 59.553 h 68.044 c 2.245,0 2.995,0.75 2.995,2.99 v 6.917 c 0,2.245 -0.75,2.99 -2.995,2.99 H -58.482 -71.409 -86.176 V -9.912 c 0,-2.245 0.744,-2.99 2.989,-2.99 H 0 c 2.245,0 2.808,0.745 2.808,2.99 v 6.918 C 2.808,-0.75 2.245,0 0,0" /></g><g
transform="translate(967.2793,175.4717)"
id="g3763"
style="fill:#00a0e3;fill-opacity:1"><path
id="path3765"
style="fill:#00a0e3;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -83.187 c -2.245,0 -2.989,-0.75 -2.989,-2.99 v -9.907 H -71.409 -58.482 0 c 2.058,0 2.808,0.745 2.808,2.99 V -2.99 C 2.808,-0.75 2.058,0 0,0" /></g></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 7.2 KiB

@ -1 +0,0 @@
<svg enable-background="new 0 0 1563.3 590.7" viewBox="0 0 1563.3 700.7" xmlns="http://www.w3.org/2000/svg"><g fill="#0db14b"><path d="m1380.1 270.4-114.7-114.7c-8.8-8.8-8.8-23.1 0-31.9l114.7-114.7c6.3-6.3 17-1.8 17 7v247.2c0 8.9-10.7 13.3-17 7.1z"/><path d="m1431.5 6c-5.7-.4-10.6 4.2-10.6 9.9v53.6c0 4.9 3.5 9.2 8.3 9.8 29.8 4 52.8 29.5 52.8 60.3s-23 56.3-52.8 60.3c-4.8.7-8.3 5-8.3 9.8v53.6c0 5.8 4.9 10.4 10.6 9.9 69.3-5.4 123.9-63.2 123.9-133.6-.1-70.4-54.6-128.2-123.9-133.6z"/><path d="m19.1 549c-7.4-4-13.1-12.5-13.1-23.8 0-15.3 11.9-27.8 27.8-27.8 5.7 0 10.8 1.7 14.8 4 29 19.3 59 28.9 86.3 28.9 29.5 0 46.6-12.5 46.6-32.3v-1.1c0-23.2-31.8-31.2-67-41.9-44.3-12.5-93.7-30.6-93.7-87.8v-1.2c0-56.6 47.1-91.2 106.7-91.2 31.8 0 65.3 9.1 94.2 24.4 9.6 5.1 16.5 14.2 16.5 26.1 0 15.9-12.5 27.8-28.4 27.8-5.7 0-9.1-1.1-13.6-3.4-24.4-12.5-49.4-20.4-70.4-20.4-26.7 0-42 12.5-42 29.5v1.1c0 22.1 32.4 31.2 67.6 42.5 43.7 13.6 93.1 33.4 93.1 87.2v1.1c0 62.9-48.8 94-111.3 94-38.1-.1-79.5-11.9-114.1-35.7"/><path d="m432.4 431.1v-1.1c0-85.5 68.1-156.4 160.1-156.4s159.5 69.7 159.5 155.2v1.1c0 85-68.1 155.8-160.7 155.8-91.4.1-158.9-69.6-158.9-154.6m250.9 0v-1.1c0-52.7-38-96.3-92-96.3-55.1 0-90.3 43.1-90.3 95.2v1.1c0 52.1 38 95.7 91.4 95.7 55.7 0 90.9-43 90.9-94.6"/><path d="m847.9 547.5v-144.1c0-33.7 24.8-63.3 58.4-67 39.7-4.4 73.3 26.5 73.3 65.3v145.9c0 18.9 15.4 34.3 34.3 34.3 19 0 34.3-15.3 34.3-34.3v-139.1c0-74.1-60.2-134.3-134.5-134.3s-134.5 60.1-134.5 134.3v139.1c0 18.9 15.4 34.3 34.3 34.3 19-.1 34.4-15.4 34.4-34.4z"/><path d="m402.3 342.2c17.2 0 31.2-13.9 31.2-31.2 0-17.2-14-31.2-31.2-31.2h-52.8v-50.7c0-18.9-15.4-34.3-34.3-34.3-19 0-34.3 15.3-34.3 34.3v81.9 166.2.8 3.5h.2c1.7 55.1 44.2 100 102.5 103.9 1.5.2 3.1.4 4.7.4h13.4c17.6 0 31.9-14.3 31.9-31.9s-14.3-31.9-31.9-31.9h-9.3c-24.5 0-42-19.6-42.8-43.3v-136.5z"/><path d="m1190.2 424.4c0 16.3 13.2 29.5 29.5 29.5h76.7 18.4 17c16.3 0 29.5-13.2 29.5-29.5 0-85.5-57.2-150.8-136.8-150.8-90.4 0-152.4 70.8-152.4 156.4v1.1c0 85 66.4 154.7 156.3 154.7 38.7 0 73-12.8 99.7-34 15.2-12.1 15.9-34.9 1.4-47.7-11.9-10.5-29.6-10.2-41.5.3-15 13.3-34.8 21.3-58.5 21.3-52.5 0-89.9-43.6-89.9-95.7v-1.1c0-52.1 29.6-95.2 83.7-95.2 35.8 0 60.9 25.6 70.7 61.3h-74.5c-16.1 0-29.3 13.2-29.3 29.4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

@ -1,244 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="77.812546"
height="65.824883"
version="1.1"
viewBox="0 0 20.587969 17.416218"
id="svg3851"
sodipodi:docname="strix-logo-web.svg"
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
<metadata
id="metadata3855">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1373"
id="namedview3853"
showgrid="false"
inkscape:zoom="12.474013"
inkscape:cx="9.5353719"
inkscape:cy="29.397461"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="g3849"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<defs
id="defs3783">
<linearGradient
id="SVGID_1_"
x1="675.27002"
x2="707.73999"
y1="88.300003"
y2="88.300003"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.26458,0,0,0.26458,-179.34646,261.28646)">
<stop
stop-color="#565756"
offset="0"
id="stop3778"
style="stop-color:#ff4081;stop-opacity:0.94117647" />
<stop
stop-color="#131313"
offset="1"
id="stop3780" />
</linearGradient>
<linearGradient
id="2"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.71308228,0,0,0.71691205,-280.60594,-94.816757)"
x1="396.64001"
y1="546.10999"
x2="394.41"
y2="538.60999">
<stop
stop-color="#b7d7e1"
id="stop5184" />
<stop
offset="1"
stop-color="#fff"
id="stop5186" />
</linearGradient>
<linearGradient
id="1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.45111156,0,0,0.45353436,-179.31551,50.009071)"
x1="393.82999"
y1="549.46002"
x2="390.45001"
y2="542.88">
<stop
stop-color="#c3e6ee"
id="stop5179" />
<stop
offset="1"
stop-color="#fff"
id="stop5181" />
</linearGradient>
<linearGradient
id="0"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.59937345,0,0,0.60259335,245.86106,-30.678204)"
x1="393.82999"
y1="549.46002"
x2="395.79001"
y2="542.83002">
<stop
stop-color="#c8e1e8"
id="stop5174" />
<stop
offset="1"
stop-color="#fff"
id="stop5176" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_1_"
id="linearGradient5276"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.26458,0,0,0.26458,-179.34646,261.28646)"
x1="675.27002"
y1="88.300003"
x2="707.73999"
y2="88.300003" />
</defs>
<g
transform="translate(5.7515037,-283.32597)"
id="g3849">
<path
id="path5191"
d="m -1.1904367,292.97168 c -0.299931,-0.23541 -0.6770741,-0.37577 -1.0861321,-0.37577 -0.96362,0 -1.7477619,0.77728 -1.7724709,1.7457 -0.994505,0.37715 -1.702464,1.34763 -1.702464,2.48489 0,1.34386 0.987985,2.45401 2.2693799,2.62937 v 0.024 H 5.595054 v -0.004 c 1.265609,-0.0741 2.2693798,-1.13555 2.2693798,-2.4341 0,-1.25223 -0.9334208,-2.2838 -2.1352008,-2.42278 0.0048,-0.0762 0.0076,-0.1534 0.0076,-0.23095 0,-1.94063 -1.6194168,-3.51372 -3.6166637,-3.51372 -1.47837401,0 -2.74878801,0.86205 -3.310556,2.09677"
inkscape:connector-curvature="0"
style="fill:url(#2);stroke-width:0.34316954" />
<g
id="g5271"
transform="translate(0.795721,0.02191)">
<polygon
transform="matrix(0.26458,0,0,0.26458,-179.32,261.26)"
class="st9"
points="671.3,126.2 671.8,120.3 674.2,125.4 673.7,131.3 "
id="polygon3805"
style="fill:#567b03" />
<polygon
transform="matrix(0.26458,0,0,0.26458,-179.32,261.26)"
class="st10"
points="671.3,126.2 671.8,120.3 674.2,125.4 673.7,131.3 "
id="polygon3807"
style="fill:#231815" />
<g
transform="matrix(0.26458,0,0,0.26458,-179.32,261.26)"
class="st11"
id="g3813"
style="enable-background:new">
<path
class="st9"
d="m 670.8,127.3 -2.4,-5.1 c 0.3,-1.9 6.9,-37.6 6.8,-37.9 l 2.4,5.1 c 0.2,0.4 -6.4,36.1 -6.8,37.9"
id="path3809"
inkscape:connector-curvature="0"
style="fill:#567b03" />
<path
class="st10"
d="m 670.8,127.3 -2.4,-5.1 c 0.3,-1.9 6.9,-37.6 6.8,-37.9 l 2.4,5.1 c 0.2,0.4 -6.4,36.1 -6.8,37.9"
id="path3811"
inkscape:connector-curvature="0"
style="fill:#580024;fill-opacity:0.94117647" />
</g>
<path
sodipodi:nodetypes="ccccccccccc"
class="st12"
d="m 9.695952,294.54416 -0.899572,-0.44978 0.13229,1.56102 c -1.45519,0.13229 -5.000562,0.52916 -5.000562,1.95789 0,-1.42873 -3.545372,-1.58748 -5.000562,-1.61394 l 0.13229,-1.56102 -0.899572,0.52916 c 0.079374,-0.5027 1.82185242,-9.98946 1.79539442,-10.06883 0.52916,0.92603 2.72892358,1.12603 3.97244958,1.07311 1.243526,-0.0529 3.43954,-0.34395 3.9687,-1.29644 0,0.0794 1.71977,9.39259 1.799144,9.86883 z"
id="path3815"
inkscape:connector-curvature="0"
style="fill:#ff4081;fill-opacity:1;stroke-width:0.26458001" />
<path
class="st13"
d="m -0.040592,284.93991 -0.634992,-1.34936 c 0.52916,0.92603 2.725174,1.08478 3.9687,1.03187 1.243526,-0.0529 3.43954,-0.34396 3.9687,-1.29645 l 0.634992,1.34936 c -0.52916,0.97895 -2.725174,1.26999 -3.9687,1.29644 -1.243526,0.0529 -3.43954,-0.10583 -3.9687,-1.03186 z"
id="path3817"
inkscape:connector-curvature="0"
style="fill:url(#linearGradient5276);stroke-width:0.26458001" />
<path
class="st6"
d="m 5.727252,286.8978 c -1.005404,0 -1.825602,0.8202 -1.825602,1.8256 0,-1.0054 -0.820198,-1.8256 -1.799144,-1.8256 -0.978946,0 -1.799144,0.8202 -1.799144,1.8256 0,1.00541 0.820198,1.82561 1.799144,1.82561 0.502702,0 0.952488,-0.21167 1.296442,-0.52916 l 0.52916,1.69331 0.52916,-1.69331 c 0.317496,0.34395 0.79374,0.52916 1.296442,0.52916 1.005404,0 1.825602,-0.8202 1.825602,-1.82561 -0.026458,-1.03186 -0.846656,-1.8256 -1.85206,-1.8256 z"
id="path3829"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke-width:0.26458001" />
<g
transform="matrix(0.26458,0,0,0.26458,-179.32,261.26)"
id="g3835"
style="fill:#231815">
<circle
class="st10"
cx="699.40002"
cy="103.7"
r="4.0999999"
id="circle3831" />
<circle
class="st10"
cx="685.70001"
cy="103.7"
r="4.0999999"
id="circle3833" />
</g>
<g
transform="matrix(0.26458,0,0,0.26458,-179.32,261.26)"
id="g3841"
style="fill:#ffffff">
<path
class="st6"
d="m 699.7,122.7 -3.3,3.3 -3.3,-3.3 c -0.2,-0.2 -0.6,-0.2 -0.8,0 l -3.3,3.3 -3.3,-3.3 c -0.2,-0.2 -0.6,-0.2 -0.8,0 -0.2,0.2 -0.2,0.6 0,0.8 l 3.7,3.7 c 0.2,0.2 0.6,0.2 0.8,0 l 3.3,-3.3 3.3,3.3 c 0.1,0.1 0.3,0.2 0.4,0.2 0.2,0 0.3,-0.1 0.4,-0.2 l 3.7,-3.7 c 0.2,-0.2 0.2,-0.6 0,-0.8 -0.2,-0.2 -0.6,-0.2 -0.8,0 z"
id="path3837"
inkscape:connector-curvature="0" />
<path
class="st6"
d="m 704.2,116.4 c -0.2,-0.2 -0.6,-0.2 -0.8,0 l -3.3,3.3 -3.3,-3.3 c -0.2,-0.2 -0.6,-0.2 -0.8,0 l -3.3,3.3 -3.3,-3.3 c -0.2,-0.2 -0.6,-0.2 -0.8,0 l -3.3,3.3 -3.3,-3.3 c -0.2,-0.2 -0.6,-0.2 -0.8,0 -0.2,0.2 -0.2,0.6 0,0.8 l 3.7,3.7 c 0.2,0.2 0.6,0.2 0.8,0 l 3.3,-3.3 3.3,3.3 c 0.1,0.1 0.3,0.2 0.4,0.2 0.2,0 0.3,-0.1 0.4,-0.2 l 3.3,-3.3 3.3,3.3 c 0.2,0.2 0.6,0.2 0.8,0 l 3.7,-3.7 c 0.2,-0.2 0.2,-0.5 0,-0.8 z"
id="path3839"
inkscape:connector-curvature="0" />
</g>
<circle
class="st16"
cx="5.7272587"
cy="288.69696"
r="1.5874799"
id="circle3843"
style="fill:none;stroke-width:0.26458001" />
</g>
<path
id="path5193"
d="m -2.5511142,295.33257 c -0.189742,-0.14893 -0.428331,-0.23772 -0.68711,-0.23772 -0.6096081,0 -1.105673,0.49172 -1.121304,1.10437 -0.629146,0.23859 -1.077017,0.85253 -1.077017,1.57199 0,0.85015 0.625021,1.55246 1.4356599,1.6634 v 0.0152 h 5.7424231 v -0.003 c 0.800652,-0.0469 1.435659,-0.71837 1.435659,-1.53986 0,-0.79219 -0.590502,-1.44478 -1.350775,-1.53271 0.003,-0.0482 0.0048,-0.097 0.0048,-0.1461 0,-1.22768 -1.024479,-2.22285 -2.28798204,-2.22285 -0.93525196,0 -1.73894386,0.54534 -2.09433096,1.32646"
inkscape:connector-curvature="0"
style="fill:url(#1);stroke-width:0.21709661" />
<path
id="path5195"
d="m 11.002773,295.27147 c 0.252287,-0.1981 0.570045,-0.31578 0.912918,-0.31578 0.809914,0 1.468852,0.6533 1.489735,1.46744 0.836159,0.3172 1.431037,1.13163 1.431037,2.08885 0,1.1288 -0.830233,2.06288 -1.907391,2.20991 v 0.0203 H 5.298379 v -0.004 c -1.063895,-0.0624 -1.907391,-0.9544 -1.907391,-2.04595 0,-1.05261 0.784516,-1.91953 1.794793,-2.03608 -0.0042,-0.0641 -0.0065,-0.12896 -0.0065,-0.19415 0,-1.63112 1.361052,-2.95351 3.040143,-2.95351 1.2428086,0 2.311219,0.72441 2.782776,1.76234"
inkscape:connector-curvature="0"
style="fill:url(#0);stroke-width:0.28220019" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

@ -1 +0,0 @@
<svg height="60.298889mm" viewBox="0 0 274.77133 60.298889" width="274.77133mm" xmlns="http://www.w3.org/2000/svg"><g stroke="#646464"><g stroke-width="1.8" transform="matrix(.45367544 0 0 .45367544 -18.95927 -52.123469)"><path d="m178.30147 211.4295s-41.87399-81.14294-120.817617-67.37697m-5.94379 67.68201s45.783-83.2982 122.198207-66.72283m-58.28473-25.96854v124.35097m45.89507-84.33553a46.124953 39.331358 0 0 1 -46.12495 39.33136 46.124953 39.331358 0 0 1 -46.124947-39.33136 46.124953 39.331358 0 0 1 46.124947-39.33135 46.124953 39.331358 0 0 1 46.12495 39.33135zm26.30592 22.47508a72.482072 61.806418 0 0 1 -72.48207 61.80641 72.482072 61.806418 0 0 1 -72.482077-61.80641 72.482072 61.806418 0 0 1 72.482077-61.80643 72.482072 61.806418 0 0 1 72.48207 61.80643z" fill="none"/><g fill="#ffdd57"><circle cx="115.33445" cy="198.46136" r="3.950355"/><circle cx="154.28223" cy="179.61028" r="3.950355"/><circle cx="178.06921" cy="211.14809" r="3.950355"/><circle cx="115.79539" cy="242.95314" r="3.950355"/><circle cx="52.719795" cy="211.14809" r="3.950355"/><circle cx="157.48947" cy="142.72708" r="3.950355"/><circle cx="115.2609" cy="151.54697" r="3.950355"/><circle cx="115.2609" cy="119.7419" r="3.950355"/><circle cx="73.834099" cy="142.19254" r="3.950355"/><circle cx="76.506798" cy="178.80847" r="3.950355"/></g></g><g fill="#ffdd57" stroke-width="3.250985" transform="matrix(.22880747 0 0 .22880747 51.447657 -156.935141)"><path d="m99.216 745.60469-7.296 25.92h18.624v113.28h28.416v-113.28h18.624l-6.912-25.92z" stroke-width="3.250985"/><path d="m237.135 745.60469h-28.416v59.52h-15.168v-59.52h-28.416v139.2h28.416v-55.68h15.168v55.68h28.416z" stroke-width="3.250985"/><path d="m-814.90625 747.83984v.0137h-15.81836v97.19726c0 12.68484 4.7555 17.75977 17.91602 17.75977h23.62695c13.16052 0 17.91601-5.07493 17.91602-17.75977v-97.19726h-16.49805v-.0137l-11.50586 40.55664h19.56055l-29.33985 55.51563 7.76758-41.70899h-16.9707l14.60742-54.36328z" stroke-width="2.684779" transform="matrix(1.2108945 0 0 1.2108945 1254.6805 -159.96715)"/><g stroke-width="3.250985"><path d="m332.385 884.80469h25.728v-58.176l14.976 58.176h28.608v-139.2h-28.608v55.872l-14.208-55.872h-26.496z"/><path d="m454.281 769.98869c1.92 0 2.496.96 2.496 2.688v84.864c0 2.112-.384 2.88-2.688 2.88h-13.056v-90.432zm30.144-7.488c0-10.176-5.568-16.896-16.512-16.896h-54.528v139.2h49.344c15.936 0 21.696-6.144 21.696-21.504z"/><path d="m495.885 884.80469h52.992l4.8-25.92h-29.184v-30.336h23.04v-24h-23.04v-33.024h30.336l-4.8-25.92h-54.144z"/><path d="m605.982 769.98869c1.92 0 2.688 1.152 2.688 2.88v42.24c0 2.112-.576 2.88-2.688 2.88h-13.632v-48zm30.144-6.336c0-10.944-5.76-18.048-18.816-18.048h-52.8v139.2h27.84v-44.352h3.648l13.44 44.352h28.8l-14.592-44.352c8.064 0 12.48-6.144 12.48-12.288z"/><path d="m689.031 769.98869c1.92 0 2.496.96 2.496 2.688v84.864c0 2.112-.384 2.88-2.688 2.88h-13.056v-90.432zm30.144-7.488c0-10.176-5.568-16.896-16.512-16.896h-54.528v139.2h49.344c15.936 0 21.696-6.144 21.696-21.504z"/><path d="m772.107 769.98869c1.92 0 2.496.96 2.496 2.688v84.864c0 2.112-.384 2.88-2.688 2.88h-10.56c-2.304 0-2.688-.768-2.688-2.88v-84.864c0-1.728.576-2.688 2.496-2.688zm30.72-6.336c0-10.944-5.76-18.048-18.816-18.048h-34.56c-13.056 0-18.816 7.104-18.816 18.048v101.376c0 10.56 4.416 19.776 19.968 19.776h32.256c15.552 0 19.968-9.216 19.968-19.776z"/><path d="m858.804 874.82069 17.664-55.68v65.664h27.072v-139.2h-29.568l-15.168 58.752-15.168-58.752h-29.376v139.2h27.072v-65.664z"/><path d="m915.135 884.80469h52.992l4.8-25.92h-29.184v-30.336h23.04v-24h-23.04v-33.024h30.336l-4.8-25.92h-54.144z"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.5 KiB

@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2219.27 506.75"><path d="M431.45,2755.61L543.53,2584c9.12-13.74,13.75-30,13.75-47.54a95.29,95.29,0,0,0-24.77-64.64c-16.92-18.56-39.14-30.17-64.25-30.17h-232L120,2627.61H290.57l-109.84,168.6a83.29,83.29,0,0,0-13.82,46.68c0,23.67,8.53,45.24,25.35,63.64,23.17,25.35,51.13,32.36,67.2,32.36l250.4,0.5,108.49-183.77H431.45Zm53.15,129-3.41,5.41-217-1.38-2.25.08a44.72,44.72,0,0,1-44.67-44.67,48.4,48.4,0,0,1,6.43-23.43l0.57-.9,150.94-228.06,5.46-8.77,1.83-3.3H208.41l54.79-84H468.26c11.5,0,20.45,3,28.17,11.49,8.1,8.88,12,18.2,12,29.46,0,7.92-1.8,14.24-5.5,19.81L346.8,2792.24l-5.46,7.92-1.83,2.45h194l-10.24,17.61C506.76,2848.2,492.66,2871.85,484.6,2884.64Z" transform="translate(-119.96 -2432.63)" fill="#da291c"/><path d="M784.72,2832.35a20.51,20.51,0,0,1-4.81-13.36,16.91,16.91,0,0,1,2.14-8.55l146.42-235.13H792.73a7.31,7.31,0,0,1-7.48-7.48v-24.58a7.31,7.31,0,0,1,7.48-7.48H965.87a16,16,0,0,1,12.56,5.88,19.26,19.26,0,0,1,5.08,12.83,16.87,16.87,0,0,1-2.67,9.08L834.41,2798.68H978.7a7.31,7.31,0,0,1,7.48,7.48v24.58a7.31,7.31,0,0,1-7.48,7.48H797A15.16,15.16,0,0,1,784.72,2832.35Z" transform="translate(-119.96 -2432.63)" fill="#da291c"/><path d="M1097.33,2822.73a113.59,113.59,0,0,1-42.22-42.48,115.42,115.42,0,0,1-15.5-58.51v-76.42a115.46,115.46,0,0,1,15.5-58.51,115.81,115.81,0,0,1,200.93,0,115.54,115.54,0,0,1,15.5,58.51v36.34a19.16,19.16,0,0,1-19.24,19.24h-171v23.51a73.34,73.34,0,0,0,9.89,37.41,72.54,72.54,0,0,0,27,27,73.34,73.34,0,0,0,37.41,9.89h77.49a7.31,7.31,0,0,1,7.48,7.48v24.58a7.31,7.31,0,0,1-7.48,7.48h-77.49A114,114,0,0,1,1097.33,2822.73Zm132.53-160.31v-19.77a74.58,74.58,0,0,0-111.69-64.39,73.77,73.77,0,0,0-36.87,64.39v19.77h148.56Z" transform="translate(-119.96 -2432.63)" fill="#da291c"/><path d="M1426.23,2836.35a9.37,9.37,0,0,1-4-5.08l-100.46-283.76a9.09,9.09,0,0,1-.53-3.74,7.69,7.69,0,0,1,2.4-5.61,8.32,8.32,0,0,1,6.15-2.41h24.58a11.31,11.31,0,0,1,6.15,1.87,9.47,9.47,0,0,1,4,5.08l84.43,243.68,82.83-243.68a9.39,9.39,0,0,1,4-5.08,11.29,11.29,0,0,1,6.15-1.87h23.51a8.2,8.2,0,0,1,7.21,3.47q2.41,3.48.8,8.28L1473,2831.28a9.44,9.44,0,0,1-4,5.08,11.24,11.24,0,0,1-6.15,1.87h-30.46A11.22,11.22,0,0,1,1426.23,2836.35Z" transform="translate(-119.96 -2432.63)" fill="#da291c"/><path d="M1724.42,2836.35a9.37,9.37,0,0,1-4-5.08l-100.46-283.76a9.09,9.09,0,0,1-.53-3.74,7.69,7.69,0,0,1,2.4-5.61,8.32,8.32,0,0,1,6.15-2.41h24.58a11.31,11.31,0,0,1,6.15,1.87,9.47,9.47,0,0,1,4,5.08l84.43,243.68L1830,2542.71a9.39,9.39,0,0,1,4-5.08,11.29,11.29,0,0,1,6.15-1.87h23.51a8.2,8.2,0,0,1,7.21,3.47q2.41,3.48.8,8.28l-100.46,283.76a9.44,9.44,0,0,1-4,5.08,11.24,11.24,0,0,1-6.15,1.87h-30.46A11.22,11.22,0,0,1,1724.42,2836.35Z" transform="translate(-119.96 -2432.63)" fill="#da291c"/><path d="M1956.35,2832.61a18.55,18.55,0,0,1-5.61-13.63V2472.17H1901a7.31,7.31,0,0,1-7.48-7.48v-24.58a7.31,7.31,0,0,1,7.48-7.48h72.14a19.16,19.16,0,0,1,19.24,19.24v346.81h56.64a7.31,7.31,0,0,1,7.48,7.48v24.58a7.31,7.31,0,0,1-7.48,7.48H1970A18.55,18.55,0,0,1,1956.35,2832.61Z" transform="translate(-119.96 -2432.63)" fill="#da291c"/><path d="M2165,2822.73a113.59,113.59,0,0,1-42.22-42.48,115.42,115.42,0,0,1-15.5-58.51v-76.42a115.46,115.46,0,0,1,15.5-58.51,115.81,115.81,0,0,1,200.93,0,115.55,115.55,0,0,1,15.5,58.51v36.34a19.16,19.16,0,0,1-19.24,19.24H2149v23.51a73.34,73.34,0,0,0,9.89,37.41,72.54,72.54,0,0,0,27,27,73.34,73.34,0,0,0,37.41,9.89h77.49a7.31,7.31,0,0,1,7.48,7.48v24.58a7.31,7.31,0,0,1-7.48,7.48h-77.49A114,114,0,0,1,2165,2822.73Zm132.53-160.31v-19.77a74.58,74.58,0,0,0-111.69-64.39,73.77,73.77,0,0,0-36.87,64.39v19.77h148.56Z" transform="translate(-119.96 -2432.63)" fill="#da291c"/></svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

@ -14,7 +14,7 @@ import Stylesheet from './css/Stylesheet';
import { test } from '../config';
import Fragment from './nodes/Fragment';
import internal_exports from './internal_exports';
import { Ast, CompileOptions, Var, Warning } from '../interfaces';
import { Ast, CompileOptions, Var, Warning, CssResult } from '../interfaces';
import error from '../utils/error';
import get_code_frame from '../utils/get_code_frame';
import flatten_reference from './utils/flatten_reference';
@ -203,7 +203,10 @@ export default class Component {
const subscribable_name = name.slice(1);
const variable = this.var_lookup.get(subscribable_name);
if (variable) variable.subscribable = true;
if (variable) {
variable.referenced = true;
variable.subscribable = true;
}
} else {
this.used_names.add(name);
}
@ -223,7 +226,7 @@ export default class Component {
return alias;
}
generate(result?: Node[]) {
generate(result?: { js: Node[]; css: CssResult }) {
let js = null;
let css = null;
@ -233,7 +236,7 @@ export default class Component {
const banner = `${this.file ? `${this.file} ` : ``}generated by Svelte v${'__VERSION__'}`;
const program: any = { type: 'Program', body: result };
const program: any = { type: 'Program', body: result.js };
walk(program, {
enter: (node, parent, key) => {
@ -307,7 +310,7 @@ export default class Component {
css = compile_options.customElement
? { code: null, map: null }
: this.stylesheet.render(compile_options.cssOutputFilename, true);
: result.css;
js = print(program, {
sourceMapSource: compile_options.filename
@ -344,7 +347,7 @@ export default class Component {
};
}
get_unique_name(name: string): Identifier {
get_unique_name(name: string, scope?: Scope): Identifier {
if (test) name = `${name}$`;
let alias = name;
for (
@ -352,7 +355,8 @@ export default class Component {
reserved.has(alias) ||
this.var_lookup.has(alias) ||
this.used_names.has(alias) ||
this.globally_used_names.has(alias);
this.globally_used_names.has(alias) ||
(scope && scope.has(alias));
alias = `${name}_${i++}`
);
this.used_names.add(alias);
@ -465,10 +469,10 @@ export default class Component {
extract_names(declarator.id).forEach(name => {
const variable = this.var_lookup.get(name);
variable.export_name = name;
if (variable.writable && !(variable.referenced || variable.referenced_from_script)) {
if (variable.writable && !(variable.referenced || variable.referenced_from_script || variable.subscribable)) {
this.warn(declarator, {
code: `unused-export-let`,
message: `${this.name.name} has unused export property '${name}'. If it is for external reference only, please consider using \`export const '${name}'\``
message: `${this.name.name} has unused export property '${name}'. If it is for external reference only, please consider using \`export const ${name}\``
});
}
});
@ -488,10 +492,10 @@ export default class Component {
if (variable) {
variable.export_name = specifier.exported.name;
if (variable.writable && !(variable.referenced || variable.referenced_from_script)) {
if (variable.writable && !(variable.referenced || variable.referenced_from_script || variable.subscribable)) {
this.warn(specifier, {
code: `unused-export-let`,
message: `${this.name.name} has unused export property '${specifier.exported.name}'. If it is for external reference only, please consider using \`export const '${specifier.exported.name}'\``
message: `${this.name.name} has unused export property '${specifier.exported.name}'. If it is for external reference only, please consider using \`export const ${specifier.exported.name}\``
});
}
}
@ -599,6 +603,7 @@ export default class Component {
const { expression } = node.body;
if (expression.type !== 'AssignmentExpression') return;
if (expression.left.type === 'MemberExpression') return;
extract_names(expression.left).forEach(name => {
if (!this.var_lookup.has(name) && name[0] !== '$') {
@ -707,8 +712,7 @@ export default class Component {
const remove = (parent, prop, index) => {
to_remove.unshift([parent, prop, index]);
};
const to_insert = new Map();
let scope_updated = false;
walk(content, {
enter(node, parent, prop, index) {
@ -735,37 +739,21 @@ export default class Component {
}
component.warn_on_undefined_store_value_references(node, parent, scope);
},
leave(node) {
// do it on leave, to prevent infinite loop
if (component.compile_options.dev && component.compile_options.loopGuardTimeout > 0) {
const to_insert_for_loop_protect = component.loop_protect(node, prop, index, component.compile_options.loopGuardTimeout);
if (to_insert_for_loop_protect) {
if (!Array.isArray(parent[prop])) {
parent[prop] = {
type: 'BlockStatement',
body: [to_insert_for_loop_protect.node, node],
};
} else {
// can't insert directly, will screw up the index in the for-loop of estree-walker
if (!to_insert.has(parent)) {
to_insert.set(parent, []);
}
to_insert.get(parent).push(to_insert_for_loop_protect);
}
const to_replace_for_loop_protect = component.loop_protect(node, scope, component.compile_options.loopGuardTimeout);
if (to_replace_for_loop_protect) {
this.replace(to_replace_for_loop_protect);
scope_updated = true;
}
}
},
leave(node) {
if (map.has(node)) {
scope = scope.parent;
}
if (to_insert.has(node)) {
const nodes_to_insert = to_insert.get(node);
for (const { index, prop, node: node_to_insert } of nodes_to_insert.reverse()) {
node[prop].splice(index, 0, node_to_insert);
}
to_insert.delete(node);
}
},
});
@ -778,6 +766,12 @@ export default class Component {
}
}
}
if (scope_updated) {
const { scope, map } = create_scopes(script.content);
this.instance_scope = scope;
this.instance_scope_map = map;
}
}
track_references_and_mutations() {
@ -863,15 +857,12 @@ export default class Component {
}
}
loop_protect(node, prop, index, timeout) {
loop_protect(node, scope: Scope, timeout: number): Node | null {
if (node.type === 'WhileStatement' ||
node.type === 'ForStatement' ||
node.type === 'DoWhileStatement') {
const guard = this.get_unique_name('guard');
this.add_var({
name: guard.name,
internal: true,
});
const guard = this.get_unique_name('guard', scope);
this.used_names.add(guard.name);
const before = b`const ${guard} = @loop_guard(${timeout})`;
const inside = b`${guard}();`;
@ -884,7 +875,14 @@ export default class Component {
};
}
node.body.body.push(inside[0]);
return { index, prop, node: before[0] };
return {
type: 'BlockStatement',
body: [
before[0],
node,
],
};
}
return null;
}
@ -1303,7 +1301,7 @@ export default class Component {
if (this.var_lookup.has(name) && !this.var_lookup.get(name).global) return;
if (template_scope && template_scope.names.has(name)) return;
if (globals.has(name)) return;
if (globals.has(name) && node.type !== 'InlineComponent') return;
let message = `'${name}' is not defined`;
if (!this.ast.instance)

@ -41,6 +41,32 @@ function edit_source(source, sveltePath) {
: source;
}
function get_internal_globals(
globals: Array<{ name: string; alias: Identifier }>,
helpers: Array<{ name: string; alias: Identifier }>
) {
return globals.length > 0 && {
type: 'VariableDeclaration',
kind: 'const',
declarations: [{
type: 'VariableDeclarator',
id: {
type: 'ObjectPattern',
properties: globals.map(g => ({
type: 'Property',
method: false,
shorthand: false,
computed: false,
key: { type: 'Identifier', name: g.name },
value: g.alias,
kind: 'init'
}))
},
init: helpers.find(({ name }) => name === 'globals').alias
}]
};
}
function esm(
program: any,
name: Identifier,
@ -62,26 +88,7 @@ function esm(
source: { type: 'Literal', value: internal_path }
};
const internal_globals = globals.length > 0 && {
type: 'VariableDeclaration',
kind: 'const',
declarations: [{
type: 'VariableDeclarator',
id: {
type: 'ObjectPattern',
properties: globals.map(g => ({
type: 'Property',
method: false,
shorthand: false,
computed: false,
key: { type: 'Identifier', name: g.name },
value: g.alias,
kind: 'init'
}))
},
init: helpers.find(({ name }) => name === 'globals').alias
}]
};
const internal_globals = get_internal_globals(globals, helpers);
// edit user imports
imports.forEach(node => {
@ -143,49 +150,36 @@ function cjs(
}]
};
const internal_globals = globals.length > 0 && {
type: 'VariableDeclaration',
kind: 'const',
declarations: [{
type: 'VariableDeclarator',
id: {
type: 'ObjectPattern',
properties: globals.map(g => ({
type: 'Property',
method: false,
shorthand: false,
computed: false,
key: { type: 'Identifier', name: g.name },
value: g.alias,
kind: 'init'
}))
},
init: helpers.find(({ name }) => name === 'globals').alias
}]
};
const user_requires = imports.map(node => ({
type: 'VariableDeclaration',
kind: 'const',
declarations: [{
type: 'VariableDeclarator',
id: node.specifiers[0].type === 'ImportNamespaceSpecifier'
? { type: 'Identifier', name: node.specifiers[0].local.name }
: {
type: 'ObjectPattern',
properties: node.specifiers.map(s => ({
type: 'Property',
method: false,
shorthand: false,
computed: false,
key: s.type === 'ImportSpecifier' ? s.imported : { type: 'Identifier', name: 'default' },
value: s.local,
kind: 'init'
}))
},
init: x`require("${edit_source(node.source.value, sveltePath)}")`
}]
}));
const internal_globals = get_internal_globals(globals, helpers);
const user_requires = imports.map(node => {
const init = x`require("${edit_source(node.source.value, sveltePath)}")`;
if (node.specifiers.length === 0) {
return b`${init};`;
}
return {
type: 'VariableDeclaration',
kind: 'const',
declarations: [{
type: 'VariableDeclarator',
id: node.specifiers[0].type === 'ImportNamespaceSpecifier'
? { type: 'Identifier', name: node.specifiers[0].local.name }
: {
type: 'ObjectPattern',
properties: node.specifiers.map(s => ({
type: 'Property',
method: false,
shorthand: false,
computed: false,
key: s.type === 'ImportSpecifier' ? s.imported : { type: 'Identifier', name: 'default' },
value: s.local,
kind: 'init'
}))
},
init
}]
};
});
const exports = module_exports.map(x => b`exports.${{ type: 'Identifier', name: x.as }} = ${{ type: 'Identifier', name: x.name }};`);

@ -32,7 +32,7 @@ export default class Selector {
}
this.local_blocks = this.blocks.slice(0, i);
this.used = this.blocks[0].global;
this.used = this.local_blocks.length === 0;
}
apply(node: Element, stack: Element[]) {
@ -63,9 +63,13 @@ export default class Selector {
});
}
transform(code: MagicString, attr: string) {
transform(code: MagicString, attr: string, max_amount_class_specificity_increased: number) {
const amount_class_specificity_to_increase = max_amount_class_specificity_increased - this.blocks.filter(block => block.should_encapsulate).length;
attr = attr.repeat(amount_class_specificity_to_increase + 1);
function encapsulate_block(block: Block) {
let i = block.selectors.length;
while (i--) {
const selector = block.selectors[i];
if (selector.type === 'PseudoElementSelector' || selector.type === 'PseudoClassSelector') {
@ -131,6 +135,16 @@ export default class Selector {
}
}
}
get_amount_class_specificity_increased() {
let count = 0;
for (const block of this.blocks) {
if (block.should_encapsulate) {
count ++;
}
}
return count;
}
}
function apply_selector(blocks: Block[], node: Element, stack: Element[], to_encapsulate: any[]): boolean {
@ -157,7 +171,7 @@ function apply_selector(blocks: Block[], node: Element, stack: Element[], to_enc
if (ancestor_block.global) {
continue;
}
for (const stack_node of stack) {
if (block_might_apply_to_node(ancestor_block, stack_node) !== BlockAppliesToNode.NotPossible) {
to_encapsulate.push({ node: stack_node, block: ancestor_block });
@ -242,7 +256,7 @@ function test_attribute(operator, expected_value, case_insensitive, value) {
}
switch (operator) {
case '=': return value === expected_value;
case '~=': return ` ${value} `.includes(` ${expected_value} `);
case '~=': return value.split(/\s/).includes(expected_value);
case '|=': return `${value}-`.startsWith(`${expected_value}-`);
case '^=': return value.startsWith(expected_value);
case '$=': return value.endsWith(expected_value);
@ -281,7 +295,7 @@ function attribute_matches(node: CssNode, name: string, expected_value: string,
// impossible to find out all combinations
if (current_possible_values.has(UNKNOWN)) return true;
if (prev_values.length > 0) {
const start_with_space = [];
const remaining = [];

@ -5,6 +5,7 @@ import Element from '../nodes/Element';
import { Ast, TemplateNode } from '../../interfaces';
import Component from '../Component';
import { CssNode } from './interfaces';
import hash from "../utils/hash";
function remove_css_prefix(name: string): string {
return name.replace(/^-((webkit)|(moz)|(o)|(ms))-/, '');
@ -37,15 +38,6 @@ function minify_declarations(
return c;
}
// https://github.com/darkskyapp/string-hash/blob/master/index.js
function hash(str: string): string {
let hash = 5381;
let i = str.length;
while (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);
return (hash >>> 0).toString(36);
}
class Rule {
selectors: Selector[];
declarations: Declaration[];
@ -95,12 +87,12 @@ class Rule {
code.remove(c, this.node.block.end - 1);
}
transform(code: MagicString, id: string, keyframes: Map<string, string>) {
transform(code: MagicString, id: string, keyframes: Map<string, string>, max_amount_class_specificity_increased: number) {
if (this.parent && this.parent.node.type === 'Atrule' && is_keyframes_node(this.parent.node)) return true;
const attr = `.${id}`;
this.selectors.forEach(selector => selector.transform(code, attr));
this.selectors.forEach(selector => selector.transform(code, attr, max_amount_class_specificity_increased));
this.declarations.forEach(declaration => declaration.transform(code, keyframes));
}
@ -115,6 +107,10 @@ class Rule {
if (!selector.used) handler(selector);
});
}
get_max_amount_class_specificity_increased() {
return Math.max(...this.selectors.map(selector => selector.get_amount_class_specificity_increased()));
}
}
class Declaration {
@ -239,7 +235,7 @@ class Atrule {
}
}
transform(code: MagicString, id: string, keyframes: Map<string, string>) {
transform(code: MagicString, id: string, keyframes: Map<string, string>, max_amount_class_specificity_increased: number) {
if (is_keyframes_node(this.node)) {
this.node.expression.children.forEach(({ type, name, start, end }: CssNode) => {
if (type === 'Identifier') {
@ -258,7 +254,7 @@ class Atrule {
}
this.children.forEach(child => {
child.transform(code, id, keyframes);
child.transform(code, id, keyframes, max_amount_class_specificity_increased);
});
}
@ -275,6 +271,10 @@ class Atrule {
child.warn_on_unused_selector(handler);
});
}
get_max_amount_class_specificity_increased() {
return Math.max(...this.children.map(rule => rule.get_max_amount_class_specificity_increased()));
}
}
export default class Stylesheet {
@ -397,8 +397,9 @@ export default class Stylesheet {
});
if (should_transform_selectors) {
const max = Math.max(...this.children.map(rule => rule.get_max_amount_class_specificity_increased()));
this.children.forEach((child: (Atrule|Rule)) => {
child.transform(code, this.id, this.keyframes);
child.transform(code, this.id, this.keyframes, max);
});
}

@ -33,7 +33,7 @@ function validate_options(options: CompileOptions, warnings: Warning[]) {
const { name, filename, loopGuardTimeout, dev } = options;
Object.keys(options).forEach(key => {
if (valid_options.indexOf(key) === -1) {
if (!valid_options.includes(key)) {
const match = fuzzymatch(key, valid_options);
let message = `Unrecognized option '${key}'`;
if (match) message += ` (did you mean '${match}'?)`;
@ -90,11 +90,11 @@ export default function compile(source: string, options: CompileOptions = {}) {
);
stats.stop('create component');
const js = options.generate === false
const result = options.generate === false
? null
: options.generate === 'ssr'
? render_ssr(component, options)
: render_dom(component, options);
return component.generate(js);
return component.generate(result);
}

@ -50,6 +50,13 @@ export default class Binding extends Node {
message: 'Cannot bind to a variable declared with the let: directive'
});
} else if (this.is_contextual) {
if (scope.is_await(name)) {
component.error(this, {
code: 'invalid-binding',
message: 'Cannot bind to a variable declared with {#await ... then} or {:catch} blocks'
});
}
scope.dependencies_for_name.get(name).forEach(name => {
const variable = component.var_lookup.get(name);
if (variable) {

@ -151,6 +151,11 @@ export default class Element extends Node {
}
}
const has_let = info.attributes.some(node => node.type === 'Let');
if (has_let) {
scope = scope.child();
}
// Binding relies on Attribute, defer its evaluation
const order = ['Binding']; // everything else is -1
info.attributes.sort((a, b) => order.indexOf(a.type) - order.indexOf(b.type));
@ -181,9 +186,16 @@ export default class Element extends Node {
this.handlers.push(new EventHandler(component, this, scope, node));
break;
case 'Let':
this.lets.push(new Let(component, this, scope, node));
case 'Let': {
const l = new Let(component, this, scope, node);
this.lets.push(l);
const dependencies = new Set([l.name.name]);
l.names.forEach(name => {
scope.add(name, dependencies, this);
});
break;
}
case 'Transition':
{
@ -202,20 +214,7 @@ export default class Element extends Node {
}
});
if (this.lets.length > 0) {
this.scope = scope.child();
this.lets.forEach(l => {
const dependencies = new Set([l.name.name]);
l.names.forEach(name => {
this.scope.add(name, dependencies, this);
});
});
} else {
this.scope = scope;
}
this.scope = scope;
this.children = map_children(component, this, this.scope, info.children);
this.validate();

@ -12,7 +12,6 @@ export default class EventHandler extends Node {
handler_name: Identifier;
uses_context = false;
can_make_passive = false;
reassigned?: boolean;
constructor(component: Component, parent, template_scope, info) {
super(component, parent, template_scope, info);
@ -41,14 +40,30 @@ export default class EventHandler extends Node {
if (node && (node.type === 'FunctionExpression' || node.type === 'FunctionDeclaration' || node.type === 'ArrowFunctionExpression') && node.params.length === 0) {
this.can_make_passive = true;
}
this.reassigned = component.var_lookup.get(info.expression.name).reassigned;
}
} else if (this.expression.dynamic_dependencies().length > 0) {
this.reassigned = true;
}
} else {
this.handler_name = component.get_unique_name(`${sanitize(this.name)}_handler`);
}
}
get reassigned(): boolean {
if (!this.expression) {
return false;
}
const node = this.expression.node;
if (node.type === 'Identifier') {
return (
this.component.node_for_declaration.get(node.name) &&
this.component.var_lookup.get(node.name).reassigned
);
}
if (/FunctionExpression/.test(node.type)) {
return false;
}
return this.expression.dynamic_dependencies().length > 0;
}
}

@ -1,9 +1,11 @@
import Node from './shared/Node';
import map_children from './shared/map_children';
import hash from '../utils/hash';
export default class Head extends Node {
type: 'Head';
children: any[]; // TODO
id: string;
constructor(component, parent, scope, info) {
super(component, parent, scope, info);
@ -18,5 +20,9 @@ export default class Head extends Node {
this.children = map_children(component, parent, scope, info.children.filter(child => {
return (child.type !== 'Text' || /\S/.test(child.data));
}));
if (this.children.length > 0) {
this.id = `svelte-${hash(this.component.source.slice(this.start, this.end))}`;
}
}
}

@ -42,4 +42,9 @@ export default class TemplateScope {
const owner = this.get_owner(name);
return owner && (owner.type === 'Element' || owner.type === 'InlineComponent');
}
is_await(name: string) {
const owner = this.get_owner(name);
return owner && (owner.type === 'ThenBlock' || owner.type === 'CatchBlock');
}
}

@ -160,6 +160,9 @@ export default class Block {
});
this.has_update_method = true;
if (this.parent) {
this.parent.add_dependencies(dependencies);
}
}
add_element(
@ -450,7 +453,7 @@ export default class Block {
this.add_variable(dispose);
if (this.event_listeners.length === 1) {
this.chunks.hydrate.push(
this.chunks.mount.push(
b`${dispose} = ${this.event_listeners[0]};`
);
@ -458,7 +461,7 @@ export default class Block {
b`${dispose}();`
);
} else {
this.chunks.hydrate.push(b`
this.chunks.mount.push(b`
${dispose} = [
${this.event_listeners}
];

@ -15,6 +15,11 @@ interface ContextMember {
priority: number;
}
type BitMasks = Array<{
n: number;
names: string[];
}>;
export default class Renderer {
component: Component; // TODO Maybe Renderer shouldn't know about Component?
options: CompileOptions;
@ -81,8 +86,6 @@ export default class Renderer {
null
);
this.context_overflow = this.context.length > 31;
// TODO messy
this.blocks.forEach(block => {
if (block instanceof Block) {
@ -94,6 +97,8 @@ export default class Renderer {
this.fragment.render(this.block, null, x`#nodes` as Identifier);
this.context_overflow = this.context.length > 31;
this.context.forEach(member => {
const { variable } = member;
if (variable) {
@ -199,65 +204,53 @@ export default class Renderer {
? x`$$self.$$.dirty`
: x`#dirty`) as Identifier | MemberExpression;
const get_bitmask = () => names.reduce((bitmask, name) => {
const member = renderer.context_lookup.get(name);
if (!member) return bitmask;
const get_bitmask = () => {
const bitmask: BitMasks = [];
names.forEach((name) => {
const member = renderer.context_lookup.get(name);
if (member.index.value === -1) {
throw new Error(`unset index`);
}
if (!member) return;
const value = member.index.value as number;
const i = (value / 31) | 0;
const n = 1 << (value % 31);
if (member.index.value === -1) {
throw new Error(`unset index`);
}
if (!bitmask[i]) bitmask[i] = { n: 0, names: [] };
const value = member.index.value as number;
const i = (value / 31) | 0;
const n = 1 << (value % 31);
bitmask[i].n |= n;
bitmask[i].names.push(name);
if (!bitmask[i]) bitmask[i] = { n: 0, names: [] };
bitmask[i].n |= n;
bitmask[i].names.push(name);
});
return bitmask;
}, Array((this.context.length / 31) | 0).fill(null));
let operator;
let left;
let right;
};
return {
get type() {
// we make the type a getter, even though it's always
// a BinaryExpression, because it gives us an opportunity
// to lazily create the node. TODO would be better if
// context was determined before rendering, so that
// this indirection was unnecessary
// Using a ParenthesizedExpression allows us to create
// the expression lazily. TODO would be better if
// context was determined before rendering, so that
// this indirection was unnecessary
type: 'ParenthesizedExpression',
get expression() {
const bitmask = get_bitmask();
if (!bitmask.length) {
return x`${dirty} & /*${names.join(', ')}*/ 0` as BinaryExpression;
}
if (renderer.context_overflow) {
const expression = bitmask
return bitmask
.map((b, i) => ({ b, i }))
.filter(({ b }) => b)
.map(({ b, i }) => x`${dirty}[${i}] & /*${b.names.join(', ')}*/ ${b.n}`)
.reduce((lhs, rhs) => x`${lhs} | ${rhs}`);
({ operator, left, right } = expression);
} else {
({ operator, left, right } = x`${dirty} & /*${names.join(', ')}*/ ${bitmask[0] ? bitmask[0].n : 0}` as BinaryExpression); // TODO the `: 0` case should never apply
}
return 'BinaryExpression';
},
get operator() {
return operator;
},
get left() {
return left;
},
get right() {
return right;
return x`${dirty} & /*${names.join(', ')}*/ ${bitmask[0].n}` as BinaryExpression;
}
} as Expression;
} as any;
}
reference(node: string | Identifier | MemberExpression) {

@ -1,9 +1,9 @@
import { b, x, p } from 'code-red';
import Component from '../Component';
import Renderer from './Renderer';
import { CompileOptions } from '../../interfaces';
import { CompileOptions, CssResult } from '../../interfaces';
import { walk } from 'estree-walker';
import { extract_names } from '../utils/scope';
import { extract_names, Scope } from '../utils/scope';
import { invalidate } from './invalidate';
import Block from './Block';
import { ClassDeclaration, FunctionExpression, Node, Statement, ObjectExpression, Expression } from 'estree';
@ -11,7 +11,7 @@ import { ClassDeclaration, FunctionExpression, Node, Statement, ObjectExpression
export default function dom(
component: Component,
options: CompileOptions
) {
): { js: Node[]; css: CssResult } {
const { name } = component;
const renderer = new Renderer(component, options);
@ -75,7 +75,6 @@ export default function dom(
const props = component.vars.filter(variable => !variable.module && variable.export_name);
const writable_props = props.filter(variable => variable.writable);
/* eslint-disable @typescript-eslint/indent,indent */
const set = (uses_props || writable_props.length > 0 || component.slots.size > 0)
? x`
${$$props} => {
@ -88,7 +87,6 @@ export default function dom(
}
`
: null;
/* eslint-enable @typescript-eslint/indent,indent */
const accessors = [];
@ -193,11 +191,18 @@ export default function dom(
if (component.ast.instance) {
let scope = component.instance_scope;
const map = component.instance_scope_map;
let execution_context: Node | null = null;
walk(component.ast.instance.content, {
enter: (node) => {
enter(node) {
if (map.has(node)) {
scope = map.get(node);
scope = map.get(node) as Scope;
if (!execution_context && !scope.block) {
execution_context = node;
}
} else if (!execution_context && node.type === 'LabeledStatement' && node.label.name === '$') {
execution_context = node;
}
},
@ -206,6 +211,10 @@ export default function dom(
scope = scope.parent;
}
if (execution_context === node) {
execution_context = null;
}
if (node.type === 'AssignmentExpression' || node.type === 'UpdateExpression') {
const assignee = node.type === 'AssignmentExpression' ? node.left : node.argument;
@ -215,7 +224,7 @@ export default function dom(
// onto the initial function call
const names = new Set(extract_names(assignee));
this.replace(invalidate(renderer, scope, node, names));
this.replace(invalidate(renderer, scope, node, names, execution_context === null));
}
}
});
@ -500,7 +509,7 @@ export default function dom(
body.push(declaration);
}
return flatten(body, []);
return { js: flatten(body, []), css };
}
function flatten(nodes: any[], target: any[]) {

@ -1,42 +1,50 @@
import { nodes_match } from '../../utils/nodes_match';
import { Scope } from '../utils/scope';
import { x } from 'code-red';
import { Node } from 'estree';
import { Node, Expression } from 'estree';
import Renderer from './Renderer';
import { Var } from '../../interfaces';
export function invalidate(renderer: Renderer, scope: Scope, node: Node, names: Set<string>) {
export function invalidate(renderer: Renderer, scope: Scope, node: Node, names: Set<string>, main_execution_context: boolean = false) {
const { component } = renderer;
const [head, ...tail] = Array.from(names).filter(name => {
const owner = scope.find_owner(name);
if (owner && owner !== component.instance_scope) return false;
const [head, ...tail] = Array.from(names)
.filter(name => {
const owner = scope.find_owner(name);
return !owner || owner === component.instance_scope;
})
.map(name => component.var_lookup.get(name))
.filter(variable => {
return variable && (
!variable.hoistable &&
!variable.global &&
!variable.module &&
(
variable.referenced ||
variable.subscribable ||
variable.is_reactive_dependency ||
variable.export_name ||
variable.name[0] === '$'
)
);
}) as Var[];
const variable = component.var_lookup.get(name);
function get_invalidated(variable: Var, node?: Expression) {
if (main_execution_context && !variable.subscribable && variable.name[0] !== '$') {
return node || x`${variable.name}`;
}
return variable && (
!variable.hoistable &&
!variable.global &&
!variable.module &&
(
variable.referenced ||
variable.subscribable ||
variable.is_reactive_dependency ||
variable.export_name ||
variable.name[0] === '$'
)
);
});
return renderer.invalidate(variable.name);
}
if (head) {
component.has_reactive_assignments = true;
if (node.type === 'AssignmentExpression' && node.operator === '=' && nodes_match(node.left, node.right) && tail.length === 0) {
return renderer.invalidate(head);
return get_invalidated(head, node);
} else {
const is_store_value = head[0] === '$';
const variable = component.var_lookup.get(head);
const extra_args = tail.map(name => renderer.invalidate(name));
const is_store_value = head.name[0] === '$';
const extra_args = tail.map(variable => get_invalidated(variable));
const pass_value = (
extra_args.length > 0 ||
@ -47,16 +55,18 @@ export function invalidate(renderer: Renderer, scope: Scope, node: Node, names:
if (pass_value) {
extra_args.unshift({
type: 'Identifier',
name: head
name: head.name
});
}
let invalidate = is_store_value
? x`@set_store_value(${head.slice(1)}, ${node}, ${extra_args})`
: x`$$invalidate(${renderer.context_lookup.get(head).index}, ${node}, ${extra_args})`;
? x`@set_store_value(${head.name.slice(1)}, ${node}, ${extra_args})`
: !main_execution_context
? x`$$invalidate(${renderer.context_lookup.get(head.name).index}, ${node}, ${extra_args})`
: node;
if (variable.subscribable && variable.reassigned) {
const subscribe = `$$subscribe_${head}`;
if (head.subscribable && head.reassigned) {
const subscribe = `$$subscribe_${head.name}`;
invalidate = x`${subscribe}(${invalidate})}`;
}

@ -71,6 +71,8 @@ export default class AwaitBlockWrapper extends Wrapper {
this.not_static_content();
block.add_dependencies(this.node.expression.dependencies);
if (this.node.value) block.renderer.add_to_context(this.node.value, true);
if (this.node.error) block.renderer.add_to_context(this.node.error, true);
let is_dynamic = false;
let has_intros = false;
@ -118,9 +120,6 @@ export default class AwaitBlockWrapper extends Wrapper {
if (has_outros) {
block.add_outro();
}
if (this.node.value) block.renderer.add_to_context(this.node.value, true);
if (this.node.error) block.renderer.add_to_context(this.node.error, true);
}
render(
@ -206,7 +205,7 @@ export default class AwaitBlockWrapper extends Wrapper {
} else {
const #child_ctx = #ctx.slice();
#child_ctx[${value_index}] = ${info}.resolved;
${this.node.value && x`#child_ctx[${value_index}] = ${info}.resolved;`}
${info}.block.p(#child_ctx, #dirty);
}
`);
@ -220,7 +219,7 @@ export default class AwaitBlockWrapper extends Wrapper {
block.chunks.update.push(b`
{
const #child_ctx = #ctx.slice();
#child_ctx[${value_index}] = ${info}.resolved;
${this.node.value && x`#child_ctx[${value_index}] = ${info}.resolved;`}
${info}.block.p(#child_ctx, #dirty);
}
`);

@ -1,26 +1,23 @@
import Block from '../Block';
import Wrapper from './shared/Wrapper';
import { b } from 'code-red';
import { x } from 'code-red';
import Body from '../../nodes/Body';
import { Identifier } from 'estree';
import EventHandler from './Element/EventHandler';
import add_event_handlers from './shared/add_event_handlers';
import { TemplateNode } from '../../../interfaces';
import Renderer from '../Renderer';
export default class BodyWrapper extends Wrapper {
node: Body;
handlers: EventHandler[];
render(block: Block, _parent_node: Identifier, _parent_nodes: Identifier) {
this.node.handlers
.map(handler => new EventHandler(handler, this))
.forEach(handler => {
const snippet = handler.get_snippet(block);
block.chunks.init.push(b`
@_document.body.addEventListener("${handler.node.name}", ${snippet});
`);
constructor(renderer: Renderer, block: Block, parent: Wrapper, node: TemplateNode) {
super(renderer, block, parent, node);
this.handlers = this.node.handlers.map(handler => new EventHandler(handler, this));
}
block.chunks.destroy.push(b`
@_document.body.removeEventListener("${handler.node.name}", ${snippet});
`);
});
render(block: Block, _parent_node: Identifier, _parent_nodes: Identifier) {
add_event_handlers(block, x`@_document.body`, this.handlers);
}
}

@ -264,10 +264,23 @@ export default class EachBlockWrapper extends Wrapper {
block.chunks.init.push(b`
if (!${this.vars.data_length}) {
${each_block_else} = ${this.else.block.name}(#ctx);
}
`);
block.chunks.create.push(b`
if (${each_block_else}) {
${each_block_else}.c();
}
`);
if (this.renderer.options.hydratable) {
block.chunks.claim.push(b`
if (${each_block_else}) {
${each_block_else}.l(${parent_nodes});
}
`);
}
block.chunks.mount.push(b`
if (${each_block_else}) {
${each_block_else}.m(${initial_mount_node}, ${initial_anchor_node});
@ -361,6 +374,7 @@ export default class EachBlockWrapper extends Wrapper {
block.chunks.init.push(b`
const ${get_key} = #ctx => ${this.node.key.manipulate(block)};
${this.renderer.options.dev && b`@validate_each_keys(#ctx, ${this.vars.each_block_value}, ${this.vars.get_each_context}, ${get_key});`}
for (let #i = 0; #i < ${data_length}; #i += 1) {
let child_ctx = ${this.vars.get_each_context}(#ctx, ${this.vars.each_block_value}, #i);
let key = ${get_key}(child_ctx);
@ -403,6 +417,7 @@ export default class EachBlockWrapper extends Wrapper {
${this.block.has_outros && b`@group_outros();`}
${this.node.has_animation && b`for (let #i = 0; #i < ${view_length}; #i += 1) ${iterations}[#i].r();`}
${this.renderer.options.dev && b`@validate_each_keys(#ctx, ${this.vars.each_block_value}, ${this.vars.get_each_context}, ${get_key});`}
${iterations} = @update_keyed_each(${iterations}, #dirty, ${get_key}, ${dynamic ? 1 : 0}, #ctx, ${this.vars.each_block_value}, ${lookup}, ${update_mount_node}, ${destroy}, ${create_each_block}, ${update_anchor_node}, ${this.vars.get_each_context});
${this.node.has_animation && b`for (let #i = 0; #i < ${view_length}; #i += 1) ${iterations}[#i].a();`}
${this.block.has_outros && b`@check_outros();`}

@ -76,6 +76,8 @@ export default class AttributeWrapper {
const is_select_value_attribute =
name === 'value' && element.node.name === 'select';
const is_input_value = name === 'value' && element.node.name === 'input';
const should_cache = is_src || this.node.should_cache() || is_select_value_attribute; // TODO is this necessary?
const last = should_cache && block.get_unique_name(
@ -147,6 +149,14 @@ export default class AttributeWrapper {
: x`${condition} && (${last} !== (${last} = ${value}))`;
}
if (is_input_value) {
const type = element.node.get_static_attribute_value('type');
if (type === null || type === "" || type === "text" || type === "email" || type === "password") {
condition = x`${condition} && ${element.var}.${property_name} !== ${should_cache ? last : value}`;
}
}
if (block.has_outros) {
condition = x`!#current || ${condition}`;
}

@ -2,6 +2,7 @@ import EventHandler from '../../../nodes/EventHandler';
import Wrapper from '../shared/Wrapper';
import Block from '../../Block';
import { b, x, p } from 'code-red';
import { Expression } from 'estree';
const TRUE = x`true`;
const FALSE = x`false`;
@ -30,12 +31,12 @@ export default class EventHandlerWrapper {
if (this.node.reassigned) {
block.maintain_context = true;
return x`function () { ${snippet}.apply(this, arguments); }`;
return x`function () { if (@is_function(${snippet})) ${snippet}.apply(this, arguments); }`;
}
return snippet;
}
render(block: Block, target: string) {
render(block: Block, target: string | Expression) {
let snippet = this.get_snippet(block);
if (this.node.modifiers.has('preventDefault')) snippet = x`@prevent_default(${snippet})`;
@ -54,8 +55,8 @@ export default class EventHandlerWrapper {
}
if (block.renderer.options.dev) {
args.push(this.node.modifiers.has('stopPropagation') ? TRUE : FALSE);
args.push(this.node.modifiers.has('preventDefault') ? TRUE : FALSE);
args.push(this.node.modifiers.has('stopPropagation') ? TRUE : FALSE);
}
block.event_listeners.push(

@ -87,14 +87,12 @@ function optimize_style(value: Array<Text|Expression>) {
const remaining_data = chunk.data.slice(offset);
if (remaining_data) {
/* eslint-disable @typescript-eslint/no-object-literal-type-assertion */
chunks[0] = {
start: chunk.start + offset,
end: chunk.end,
type: 'Text',
data: remaining_data
} as Text;
/* eslint-enable @typescript-eslint/no-object-literal-type-assertion */
} else {
chunks.shift();
}

@ -16,8 +16,8 @@ import { dimensions } from '../../../../utils/patterns';
import Binding from './Binding';
import InlineComponentWrapper from '../InlineComponent';
import add_to_set from '../../../utils/add_to_set';
import add_event_handlers from '../shared/add_event_handlers';
import add_actions from '../shared/add_actions';
import { add_event_handler } from '../shared/add_event_handlers';
import { add_action } from '../shared/add_actions';
import create_debugging_comment from '../shared/create_debugging_comment';
import { get_slot_definition } from '../shared/get_slot_definition';
import bind_this from '../shared/bind_this';
@ -25,6 +25,7 @@ import { is_head } from '../shared/is_head';
import { Identifier } from 'estree';
import EventHandler from './EventHandler';
import { extract_names } from 'periscopic';
import Action from '../../../nodes/Action';
const events = [
{
@ -377,11 +378,9 @@ export default class ElementWrapper extends Wrapper {
}
this.add_attributes(block);
this.add_bindings(block);
this.add_event_handlers(block);
this.add_directives_in_order(block);
this.add_transitions(block);
this.add_animation(block);
this.add_actions(block);
this.add_classes(block);
this.add_manual_style_scoping(block);
@ -436,20 +435,15 @@ export default class ElementWrapper extends Wrapper {
return x`@claim_element(${nodes}, "${name}", { ${attributes} }, ${svg})`;
}
add_bindings(block: Block) {
const { renderer } = this;
if (this.bindings.length === 0) return;
renderer.component.has_reactive_assignments = true;
const lock = this.bindings.some(binding => binding.needs_lock) ?
block.get_unique_name(`${this.var.name}_updating`) :
null;
add_directives_in_order (block: Block) {
interface BindingGroup {
events: string[];
bindings: Binding[];
}
if (lock) block.add_variable(lock, x`false`);
type OrderedAttribute = EventHandler | BindingGroup | Binding | Action;
const groups = events
const bindingGroups = events
.map(event => ({
events: event.event_names,
bindings: this.bindings
@ -458,7 +452,55 @@ export default class ElementWrapper extends Wrapper {
}))
.filter(group => group.bindings.length);
groups.forEach(group => {
const this_binding = this.bindings.find(b => b.node.name === 'this');
function getOrder (item: OrderedAttribute) {
if (item instanceof EventHandler) {
return item.node.start;
} else if (item instanceof Binding) {
return item.node.start;
} else if (item instanceof Action) {
return item.start;
} else {
return item.bindings[0].node.start;
}
}
([
...bindingGroups,
...this.event_handlers,
this_binding,
...this.node.actions
] as OrderedAttribute[])
.filter(Boolean)
.sort((a, b) => getOrder(a) - getOrder(b))
.forEach(item => {
if (item instanceof EventHandler) {
add_event_handler(block, this.var, item);
} else if (item instanceof Binding) {
this.add_this_binding(block, item);
} else if (item instanceof Action) {
add_action(block, this.var, item);
} else {
this.add_bindings(block, item);
}
});
}
add_bindings(block: Block, bindingGroup) {
const { renderer } = this;
if (bindingGroup.bindings.length === 0) return;
renderer.component.has_reactive_assignments = true;
const lock = bindingGroup.bindings.some(binding => binding.needs_lock) ?
block.get_unique_name(`${this.var.name}_updating`) :
null;
if (lock) block.add_variable(lock, x`false`);
[bindingGroup].forEach(group => {
const handler = renderer.component.get_unique_name(`${this.var.name}_${group.events.join('_')}_handler`);
renderer.add_to_context(handler.name);
@ -586,13 +628,15 @@ export default class ElementWrapper extends Wrapper {
if (lock) {
block.chunks.update.push(b`${lock} = false;`);
}
}
const this_binding = this.bindings.find(b => b.node.name === 'this');
if (this_binding) {
const binding_callback = bind_this(renderer.component, block, this_binding.node, this.var);
add_this_binding(block: Block, this_binding: Binding) {
const { renderer } = this;
renderer.component.has_reactive_assignments = true;
block.chunks.mount.push(binding_callback);
}
const binding_callback = bind_this(renderer.component, block, this_binding.node, this.var);
block.chunks.mount.push(binding_callback);
}
add_attributes(block: Block) {
@ -667,10 +711,6 @@ export default class ElementWrapper extends Wrapper {
`);
}
add_event_handlers(block: Block) {
add_event_handlers(block, this.var, this.event_handlers);
}
add_transitions(
block: Block
) {
@ -832,10 +872,6 @@ export default class ElementWrapper extends Wrapper {
`);
}
add_actions(block: Block) {
add_actions(block, this.var, this.node.actions);
}
add_classes(block: Block) {
const has_spread = this.node.attributes.some(attr => attr.is_spread);
this.node.classes.forEach(class_directive => {

@ -3,11 +3,12 @@ import Renderer from '../Renderer';
import Block from '../Block';
import Head from '../../nodes/Head';
import FragmentWrapper from './Fragment';
import { x } from 'code-red';
import { x, b } from 'code-red';
import { Identifier } from 'estree';
export default class HeadWrapper extends Wrapper {
fragment: FragmentWrapper;
node: Head;
constructor(
renderer: Renderer,
@ -32,6 +33,18 @@ export default class HeadWrapper extends Wrapper {
}
render(block: Block, _parent_node: Identifier, _parent_nodes: Identifier) {
this.fragment.render(block, x`@_document.head` as unknown as Identifier, x`#nodes` as unknown as Identifier);
let nodes;
if (this.renderer.options.hydratable && this.fragment.nodes.length) {
nodes = block.get_unique_name('head_nodes');
block.chunks.claim.push(b`const ${nodes} = @query_selector_all('[data-svelte="${this.node.id}"]', @_document.head);`);
}
this.fragment.render(block, x`@_document.head` as unknown as Identifier, nodes);
if (nodes && this.renderer.options.hydratable) {
block.chunks.claim.push(
b`${nodes}.forEach(@detach);`
);
}
}
}

@ -263,7 +263,6 @@ export default class IfBlockWrapper extends Wrapper {
? x`${current_block_type}(#ctx)`
: x`${current_block_type} && ${current_block_type}(#ctx)`;
/* eslint-disable @typescript-eslint/indent,indent */
if (this.needs_update) {
block.chunks.init.push(b`
function ${select_block_type}(#ctx, #dirty) {
@ -287,7 +286,6 @@ export default class IfBlockWrapper extends Wrapper {
}
`);
}
/* eslint-enable @typescript-eslint/indent,indent */
block.chunks.init.push(b`
let ${current_block_type} = ${select_block_type}(#ctx, -1);
@ -375,7 +373,6 @@ export default class IfBlockWrapper extends Wrapper {
block.add_variable(current_block_type_index);
block.add_variable(name);
/* eslint-disable @typescript-eslint/indent,indent */
block.chunks.init.push(b`
const ${if_block_creators} = [
${this.branches.map(branch => branch.block.name)}
@ -407,7 +404,6 @@ export default class IfBlockWrapper extends Wrapper {
}
`}
`);
/* eslint-enable @typescript-eslint/indent,indent */
if (has_else) {
block.chunks.init.push(b`

@ -182,11 +182,9 @@ export default class InlineComponentWrapper extends Wrapper {
});
});
const non_let_dependencies = Array.from(fragment_dependencies).filter(name => !this.node.scope.is_let(name));
const dynamic_attributes = this.node.attributes.filter(a => a.get_dependencies().length > 0);
if (!uses_spread && (dynamic_attributes.length > 0 || this.node.bindings.length > 0 || non_let_dependencies.length > 0)) {
if (!uses_spread && (dynamic_attributes.length > 0 || this.node.bindings.length > 0 || fragment_dependencies.size > 0)) {
updates.push(b`const ${name_changes} = {};`);
}
@ -266,9 +264,9 @@ export default class InlineComponentWrapper extends Wrapper {
}
}
if (non_let_dependencies.length > 0) {
if (fragment_dependencies.size > 0) {
updates.push(b`
if (${renderer.dirty(non_let_dependencies)}) {
if (${renderer.dirty(Array.from(fragment_dependencies))}) {
${name_changes}.$$scope = { dirty: #dirty, ctx: #ctx };
}`);
}

@ -6,39 +6,10 @@ import FragmentWrapper from './Fragment';
import { b, p, x } from 'code-red';
import { sanitize } from '../../../utils/names';
import add_to_set from '../../utils/add_to_set';
import get_slot_data from '../../utils/get_slot_data';
import Expression from '../../nodes/shared/Expression';
import is_dynamic from './shared/is_dynamic';
import { Identifier, ObjectExpression } from 'estree';
import Attribute from '../../nodes/Attribute';
import { string_literal } from '../../utils/stringify';
function get_slot_data(block: Block, values: Map<string, Attribute>) {
return {
type: 'ObjectExpression',
properties: Array.from(values.values())
.filter(attribute => attribute.name !== 'name')
.map(attribute => {
const value = get_value(block, attribute);
return p`${attribute.name}: ${value}`;
})
};
}
// TODO fairly sure this is duplicated at least once
function get_value(block: Block, attribute: Attribute) {
if (attribute.is_true) return x`true`;
if (attribute.chunks.length === 0) return x`""`;
let value = attribute.chunks
.map(chunk => chunk.type === 'Text' ? string_literal(chunk.data) : chunk.manipulate(block))
.reduce((lhs, rhs) => x`${lhs} + ${rhs}`);
if (attribute.chunks.length > 1 && attribute.chunks[0].type !== 'Text') {
value = x`"" + ${value}`;
}
return value;
}
export default class SlotWrapper extends Wrapper {
node: Slot;
@ -125,7 +96,7 @@ export default class SlotWrapper extends Wrapper {
renderer.blocks.push(b`
const ${get_slot_changes_fn} = #dirty => ${changes};
const ${get_slot_context_fn} = #ctx => ${get_slot_data(block, this.node.values)};
const ${get_slot_context_fn} = #ctx => ${get_slot_data(this.node.values, block)};
`);
} else {
get_slot_changes_fn = 'null';

@ -27,6 +27,11 @@ function should_skip(node: Text) {
if (parent_element.type === 'Head') return true;
if (parent_element.type === 'InlineComponent') return parent_element.children.length === 1 && node === parent_element.children[0];
// svg namespace exclusions
if (/svg$/.test(parent_element.namespace)) {
if (node.prev && node.prev.type === "Element" && node.prev.name === "tspan") return false;
}
return parent_element.namespace || elements_without_text.has(parent_element.name);
}

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

Loading…
Cancel
Save