diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000..5110fc1096 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,56 @@ +module.exports = { + parser: "@typescript-eslint/parser", + parserOptions: { + ecmaFeatures: { + jsx: true + } + // project: './tsconfig.json' + }, + extends: [ + "airbnb", + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended", + "prettier/@typescript-eslint", + "prettier/react", + "plugin:prettier/recommended" + ], + settings: { + react: { + version: "detect" + }, + "import/resolver": { + typescript: {} + } + }, + env: { + browser: true, + node: true, + jest: true + }, + rules: { + "react/jsx-filename-extension": "off", + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "warn", + "import/prefer-default-export": "off", + "import/extensions": "off", + "consistent-return": "off", + // "camelcase": "off", + // "@typescript-eslint/camelcase": ["error", { "properties": "never" }], + // "no-unused-vars": "off", + // "@typescript-eslint/no-unused-vars": "error", + // "@typescript-eslint/indent": ["error", 2] + }, + plugins: [ + "@typescript-eslint", + "react-hooks" + // "prettier" + ], + overrides: [ + { + files: ["**/*.js"], + rules: { + "@typescript-eslint/no-var-requires": "off" + } + } + ] +}; diff --git a/.gitignore b/.gitignore index 9de55a7b46..4613a28ff3 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ package-lock.json # Build directory /public .DS_Store +build .env .firebase/* diff --git a/.prettierrc b/.prettierrc index 5159a26f3b..5c1a497dcc 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,12 +1,12 @@ { - "printWidth": 80, - "tabWidth": 2, - "useTabs": false, - "semi": true, - "singleQuote": true, - "jsxSingleQuote": false, - "trailingComma": "es5", - "bracketSpacing": true, - "jsxBracketSameLine": false, - "arrowParens": "avoid" +printWidth: 80, +tabWidth: 2, +useTabs: false, +semi: true, +singleQuote: true, +jsxSingleQuote: false, +trailingComma: "es5", +bracketSpacing: true, +jsxBracketSameLine: false, +arrowParens: "avoid" } diff --git a/gatsby-config.js b/gatsby-config.js index ba837c76f5..00dc4a4f35 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -1,4 +1,5 @@ if (process.env.ENVIROMENT !== 'production') { + // eslint-disable-next-line global-require require('dotenv').config(); } @@ -17,50 +18,54 @@ module.exports = { 'gatsby-plugin-catch-links', 'gatsby-plugin-react-helmet', { - resolve: `gatsby-plugin-canonical-urls`, + resolve: 'gatsby-plugin-canonical-urls', options: { siteUrl: config.siteUrl, }, }, - `gatsby-plugin-sharp`, + 'gatsby-plugin-sharp', { - resolve: `gatsby-source-filesystem`, + resolve: 'gatsby-source-filesystem', options: { - name: `learn`, + name: 'learn', path: `${__dirname}/src/documentation/`, - include: [`**/*.md`], // ignore files starting with a dot + include: ['**/*.md'], // ignore files starting with a dot }, }, + { - resolve: `gatsby-plugin-manifest`, + resolve: 'gatsby-plugin-manifest', options: { name: config.title, + /* eslint-disable @typescript-eslint/camelcase */ short_name: config.title, start_url: '/', background_color: config.color, theme_color: config.color, + /* eslint-disable @typescript-eslint/camelcase */ display: config.display, icon: config.icon, }, }, 'gatsby-plugin-offline', - `gatsby-plugin-typescript`, + 'gatsby-plugin-typescript', { resolve: 'gatsby-transformer-remark', options: { plugins: [ { - resolve: `gatsby-remark-autolink-headers`, + resolve: 'gatsby-remark-autolink-headers', options: { - offsetY: `125`, - icon: ``, - className: `autolink-headers`, + offsetY: '125', + icon: + '', + className: 'autolink-headers', maintainCase: false, removeAccents: true, }, }, { - resolve: `gatsby-remark-prismjs`, + resolve: 'gatsby-remark-prismjs', options: { classPrefix: 'language-', inlineCodeMarker: null, @@ -70,7 +75,7 @@ module.exports = { }, }, { - resolve: `gatsby-remark-images`, + resolve: 'gatsby-remark-images', options: { maxWidth: 590, }, @@ -79,7 +84,7 @@ module.exports = { }, }, { - resolve: `gatsby-plugin-sitemap`, + resolve: 'gatsby-plugin-sitemap', options: { query: `{ site { @@ -106,28 +111,23 @@ module.exports = { } }`, serialize: ({ site, allSitePage, allMarkdownRemark }) => { - let pages = []; - allSitePage.edges.map(edge => { - pages.push({ - url: site.siteMetadata.siteUrlNoSlash + edge.node.path, - changefreq: `daily`, - priority: 0.7, - }); - }); - allMarkdownRemark.edges.map(edge => { - pages.push({ - url: `${site.siteMetadata.siteUrlNoSlash}/${edge.node.fields.slug}`, - changefreq: `daily`, - priority: 0.7, - }); - }); + const sitePages = allSitePage.edges.map(edge => ({ + url: site.siteMetadata.siteUrlNoSlash + edge.node.path, + changefreq: 'daily', + priority: 0.7, + })); + const markdownRemark = allMarkdownRemark.edges.map(edge => ({ + url: `${site.siteMetadata.siteUrlNoSlash}/${edge.node.fields.slug}`, + changefreq: 'daily', + priority: 0.7, + })); - return pages; + return sitePages.concat(markdownRemark); }, }, }, { - resolve: `gatsby-plugin-emotion`, + resolve: 'gatsby-plugin-emotion', }, ], }; diff --git a/gatsby-node.js b/gatsby-node.js index 343cedf70d..ce0f99e1d4 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -1,8 +1,10 @@ -const createSlug = require('./src/util/createSlug'); +/* eslint-disable @typescript-eslint/no-var-requires */ +// Use in this file CommonJS syntax see https://www.gatsbyjs.org/docs/migrating-from-v1-to-v2/#convert-to-either-pure-commonjs-or-pure-es6 const path = require('path'); +const createSlug = require('./src/util/createSlug'); exports.createPages = ({ graphql, actions }) => { - const { createPage, createRedirect, createNodeField } = actions; + const { createPage } = actions; return new Promise((resolve, reject) => { const docTemplate = path.resolve('./src/templates/learn.tsx'); @@ -57,6 +59,7 @@ exports.createPages = ({ graphql, actions }) => { ` ).then(result => { if (result.errors) { + // eslint-disable-next-line no-console console.log(result.errors); reject(result.errors); } @@ -65,7 +68,7 @@ exports.createPages = ({ graphql, actions }) => { const docPages = []; edges.forEach(({ node }, index) => { const { - fields: { slug, authors }, + fields: { slug }, frontmatter: { title, section }, parent: { relativePath }, } = node; @@ -117,10 +120,10 @@ exports.createPages = ({ graphql, actions }) => { next: page.next, previous: page.previous, relativePath: page.relativePath, - navigationData: navigationData, + navigationData, }, }); - if (page.slug === 'introduction-to-nodejs') + if (page.slug === 'introduction-to-nodejs') { createPage({ path: `/learn`, component: docTemplate, @@ -129,32 +132,33 @@ exports.createPages = ({ graphql, actions }) => { next: page.next, previous: page.previous, relativePath: page.relativePath, - navigationData: navigationData, + navigationData, }, }); + } }); }) ); }); }; -exports.onCreateNode = ({ node, getNode, actions }) => { +exports.onCreateNode = ({ node, actions }) => { if (node.internal.type === 'MarkdownRemark') { const { createNodeField } = actions; const slug = createSlug(node.frontmatter.title); createNodeField({ node, - name: `slug`, + name: 'slug', value: slug, }); - let authors = node.frontmatter.authors; + let { authors } = node.frontmatter; if (authors) { authors = authors.split(','); createNodeField({ node, - name: `authors`, + name: 'authors', value: authors, }); } diff --git a/package.json b/package.json index ab6a3b5718..0639f48280 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "dotenv": "^6.0.0", "emotion": "^10.0.7", "emotion-server": "^10.0.7", + "eslint-plugin-jest": "^22.17.0", "gatsby": "^2.13.13", "gatsby-plugin-canonical-urls": "^2.0.10", "gatsby-plugin-catch-links": "^2.0.9", @@ -31,7 +32,6 @@ "react-dom": "^16.8.0", "react-emotion": "^10.0.0", "react-helmet": "^5.2.0", - "tslint": "^5.11.0", "typescript": "^3.1.1" }, "keywords": [ @@ -43,14 +43,15 @@ "build": "gatsby build", "build-ci": "gatsby build --prefix-paths", "start": "gatsby develop", - "format": "prettier --write '**/*.{ts,tsx,js}'", + "format": "yarn lint:fix", "format-check": "prettier --check '**/*.{ts,tsx,js}'", "jest": "jest", "update-snapshot": "jest --updateSnapshot", - "test": "yarn format-check && yarn tslint && yarn jest", + "test": "yarn lint && yarn jest", "test-watch": "yarn jest --watch", "test-ci": "yarn test --coverage && codecov", - "tslint": "tslint --project ./tsconfig.json", + "lint": "eslint . --ext .js,.ts,.tsx --ignore-pattern test/", + "lint:fix": "yarn lint --fix", "serve": "yarn build && clear && gatsby serve" }, "devDependencies": { @@ -60,16 +61,25 @@ "@commitlint/config-conventional": "^7.3.1", "@types/jest": "^24.0.5", "@types/react-test-renderer": "^16.8.1", + "@typescript-eslint/eslint-plugin": "^1.4.2", "babel-jest": "^24.1.0", "babel-preset-gatsby": "^0.1.7", "codecov": "^3.3.0", + "eslint": "^5.14.1", + "eslint-config-airbnb": "^17.1.0", + "eslint-config-prettier": "^4.1.0", + "eslint-import-resolver-typescript": "^1.1.1", + "eslint-plugin-import": "^2.16.0", + "eslint-plugin-jsx-a11y": "^6.2.1", + "eslint-plugin-prettier": "^3.1.0", + "eslint-plugin-react": "^7.12.4", + "eslint-plugin-react-hooks": "^1.4.0", "husky": "^1.3.1", "identity-obj-proxy": "^3.0.0", "jest": "^24.1.0", "prettier": "^1.16.4", "react-test-renderer": "^16.8.2", - "tslint-config-prettier": "^1.15.0", - "tslint-react": "^3.6.0" + "typescript": "~3.2.1" }, "repository": { "type": "git", @@ -103,7 +113,7 @@ "husky": { "hooks": { "commit-msg": "commitlint --edit $HUSKY_GIT_PARAMS", - "pre-push": "yarn format-check && yarn tslint" + "pre-push": "yarn lint" } } } diff --git a/src/components/article.tsx b/src/components/article.tsx index d160200819..1e96d7852c 100644 --- a/src/components/article.tsx +++ b/src/components/article.tsx @@ -5,7 +5,7 @@ import EditLink from './edit-link'; import Pagination from './pagination'; import TOC from './toc'; -type Props = { +interface Props { title: string; html: string; tableOfContents: string; @@ -13,7 +13,7 @@ type Props = { relativePath: string; next?: PaginationInfo; previous?: PaginationInfo; -}; +} const Article = ({ title, @@ -23,10 +23,11 @@ const Article = ({ next, relativePath, authors, -}: Props) => ( +}: Props): JSX.Element => (

{title}

+ {/* eslint-disable react/no-danger */}
diff --git a/src/components/author.tsx b/src/components/author.tsx index e1add552f6..ff1867ab32 100644 --- a/src/components/author.tsx +++ b/src/components/author.tsx @@ -22,21 +22,25 @@ const img: SerializedStyles = css` transition: all 0.2s ease-in-out; `; -type Props = { - index: Number; +interface Props { + index: number; username: string; size: string; -}; +} -const Author = ({ index, username, size = '64' }: Props) => { +const Author = ({ + index, + username, + size = '64', +}: Props): null | JSX.Element => { if (!username) { return null; } // Clean up username and build links. - username = username.trim(); - const githubLink = `https://github.com/${username}`; - const githubImgLink = `https://github.com/${username}.png?size=${size}`; + const githubUserName = username.trim(); + const githubLink = `https://github.com/${githubUserName}`; + const githubImgLink = `https://github.com/${githubUserName}.png?size=${size}`; // If it's the first author then no margin left. const mleft = index === 0 ? { marginLeft: 0 } : {}; diff --git a/src/components/authors-list.tsx b/src/components/authors-list.tsx index 7da3c8dfd8..559de866da 100644 --- a/src/components/authors-list.tsx +++ b/src/components/authors-list.tsx @@ -25,11 +25,11 @@ const list: SerializedStyles = css` } `; -type Props = { +interface Props { authors: string[]; -}; +} -const AuthorsList = ({ authors }: Props) => { +const AuthorsList = ({ authors }: Props): null | JSX.Element => { if (!authors) { return null; } @@ -38,7 +38,7 @@ const AuthorsList = ({ authors }: Props) => {
); @@ -70,7 +82,7 @@ function sideBarSection( section: keyof APIResponse, data: APIResponse, setPage: Function -) { +): JSX.Element { return (
  • @@ -82,7 +94,7 @@ function sideBarSection(
  • setPage(module)} + onClick={(): void => setPage(module)} className="t-body2 api-nav__sub-list-link" > {module.displayName || module.name} @@ -94,7 +106,7 @@ function sideBarSection( ); } -export default () => { +export default function APIDocsPage(): JSX.Element { const title = 'API Docs'; const description = 'Come learn yourself something.'; const [version, setVersion] = useState(null); @@ -103,7 +115,7 @@ export default () => { // Magical function filters out all major versions less than 6. // TODO: Remove the magical number for the major version. Fet from dynamic releases data to filter out EOL'd versions. const releases = useReleaseHistory().filter( - r => parseInt(r.version.slice(1), 10) >= 6 + (r): boolean => parseInt(r.version.slice(1), 10) >= 6 ); const apiData = useApiData( version || (releases[0] && releases[0].version) || null @@ -116,16 +128,18 @@ export default () => {
  • {sideBarSection('Globals', 'globals', apiData, setPage)} @@ -138,4 +152,4 @@ export default () => { {renderArticle(page)} ); -}; +} diff --git a/src/pages/download.tsx b/src/pages/download.tsx index 660c995d8b..7292595131 100644 --- a/src/pages/download.tsx +++ b/src/pages/download.tsx @@ -4,7 +4,7 @@ import Hero from '../components/hero'; import Layout from '../components/layout'; import ReleaseTable from '../components/release-table'; -export default () => { +export default function DownloadPage(): JSX.Element { const releaseHistory = useReleaseHistory().slice(0, 25); const title = 'Download Node.js'; const description = 'Come get me!'; @@ -14,8 +14,8 @@ export default () => {

    Welcome to the Downloads Page!

    - +
    ); -}; +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 1095788de2..5e9fabac9f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -5,17 +5,17 @@ import Layout from '../components/layout'; import './konami.js'; let discoMode: NodeJS.Timeout | null = null; -document.addEventListener('konamiCode', () => { +document.addEventListener('konamiCode', (): void => { if (discoMode) { return clearInterval(discoMode); } discoMode = setInterval( - () => document.body.classList.toggle('dark-mode'), + (): boolean => document.body.classList.toggle('dark-mode'), 300 ); }); -export default () => { +export default function HomePage(): JSX.Element { const title = 'Home Page'; const description = 'Welcome to Node.js!'; @@ -27,4 +27,4 @@ export default () => { ); -}; +} diff --git a/src/pages/konami.js b/src/pages/konami.js index ad3701c7ae..0350b79538 100644 --- a/src/pages/konami.js +++ b/src/pages/konami.js @@ -1,13 +1,12 @@ -(function() { - 'use strict'; - +(function konami() { // http://stackoverflow.com/a/9849276 - function _contains(a, b) { + function contains(a, b) { + // eslint-disable-next-line no-bitwise return !!~a.indexOf(b); } - var konamiCode = { - init: function() { + const konamiCode = { + init() { this.KEY_LEFT = 37; this.KEY_UP = 38; this.KEY_RIGHT = 39; @@ -21,11 +20,11 @@ return this; }, - bindListener: function() { - var buffer = ''; - var lastDate = new Date(); - var konamiCodeEvent = new Event('konamiCode'); - var validKeys = [ + bindListener() { + let buffer = ''; + let lastDate = new Date(); + const konamiCodeEvent = new Event('konamiCode'); + const validKeys = [ this.KEY_LEFT, this.KEY_UP, this.KEY_RIGHT, @@ -36,15 +35,15 @@ document.addEventListener( 'keyup', - function(ev) { + function enableKonami(ev) { if ( - _contains(validKeys, ev.keyCode) && + contains(validKeys, ev.keyCode) && new Date() - lastDate <= this.maxDelay ) { lastDate = new Date(); - buffer = buffer + ev.keyCode; + buffer += ev.keyCode; - if (_contains(buffer, this.CODE_SEQUENCE)) { + if (contains(buffer, this.CODE_SEQUENCE)) { document.dispatchEvent(konamiCodeEvent); buffer = ''; } diff --git a/src/pages/style-guide.tsx b/src/pages/style-guide.tsx index ec9f6ba0b8..ee01e0b669 100644 --- a/src/pages/style-guide.tsx +++ b/src/pages/style-guide.tsx @@ -1,12 +1,7 @@ import React from 'react'; import '../styles/layout.css'; -type Props = { - heading: string; - tableOfContents: string; -}; - -const StyleGuidePage = ({ heading }: Props) => { +const StyleGuidePage = (): JSX.Element => { return (
    Display1
    @@ -31,7 +26,8 @@ const StyleGuidePage = ({ heading }: Props) => { optimized for print, web, and mobile interfaces, and has excellent legibility characteristics in its letterforms.

    -
    This is a link + {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */} + This is a link
    ); }; diff --git a/src/styles/layout.css b/src/styles/layout.css index 93a6d57e87..d7f8b2b0bf 100644 --- a/src/styles/layout.css +++ b/src/styles/layout.css @@ -255,7 +255,7 @@ main { position: sticky; top: var(--nav-height); width: 100%; - max-width: 36.0rem; + max-width: 36rem; z-index: 998; } @@ -316,14 +316,14 @@ main { border-radius: 50%; box-shadow: inset 0 0 0 2px var(--brand-light); box-sizing: border-box; - content: ' '; + content: " "; display: block; height: 2.4rem; left: -3.6rem; padding: 2px 4px; position: absolute; top: 1.2rem; - transition: box-shadow .28s; + transition: box-shadow 0.28s; overflow: hidden; width: 2.4rem; } @@ -343,7 +343,7 @@ main { .side-nav__item::after { background: var(--brand-light); - content: ' '; + content: " "; display: block; height: calc(100% - 2.4rem - 8px); left: calc(-2.4rem - 1px); @@ -367,13 +367,14 @@ main { text-indent: 3.2rem; line-height: 0; font-weight: 200; - transition: color .28s, background-color .28s; + transition: color 0.28s, background-color 0.28s; outline: none; background-clip: content-box; z-index: 9999; } -.side-nav__open::before, .side-nav__open::after { +.side-nav__open::before, +.side-nav__open::after { content: ""; width: 100%; height: 3px; @@ -382,7 +383,7 @@ main { left: 0; transform: translateY(-250%); background-color: white; - transition: transform .28s; + transition: transform 0.28s; } .side-nav__open::after { @@ -396,10 +397,10 @@ main { color: transparent; background-color: transparent; } -.side-nav.side-nav--open .side-nav__open::before { +.side-nav.side-nav--open .side-nav__open::before { transform: rotate(-45deg); } -.side-nav.side-nav--open .side-nav__open::after { +.side-nav.side-nav--open .side-nav__open::after { transform: rotate(45deg); } @@ -439,9 +440,341 @@ main { /* End: Article Reader HTML Reset */ .stars { - --stars-small: 1928px 627px #767676, 626px 1242px #767676, 456px 1401px #767676, 1984px 1908px #767676, 391px 722px #767676, 1292px 1098px #767676, 29px 119px #767676, 445px 1913px #767676, 1861px 172px #767676, 1818px 1237px #767676, 1435px 660px #767676, 464px 928px #767676, 1771px 1053px #767676, 1033px 799px #767676, 553px 607px #767676, 1564px 1212px #767676, 915px 1084px #767676, 464px 847px #767676, 1456px 748px #767676, 997px 624px #767676, 1005px 1863px #767676, 1115px 1924px #767676, 1128px 1485px #767676, 827px 1590px #767676, 676px 1679px #767676, 660px 264px #767676, 320px 1327px #767676, 1738px 1375px #767676, 1597px 232px #767676, 457px 1891px #767676, 414px 725px #767676, 878px 248px #767676, 458px 221px #767676, 380px 428px #767676, 1364px 593px #767676, 267px 1967px #767676, 1266px 1579px #767676, 1867px 738px #767676, 1186px 970px #767676, 773px 1262px #767676, 1489px 1718px #767676, 1889px 1693px #767676, 154px 1834px #767676, 683px 484px #767676, 816px 1525px #767676, 1048px 1929px #767676, 1793px 977px #767676, 88px 1353px #767676, 760px 178px #767676, 1135px 521px #767676, 1391px 1168px #767676, 1031px 1017px #767676, 1260px 586px #767676, 1077px 420px #767676, 1693px 431px #767676, 629px 1488px #767676, 958px 533px #767676, 389px 1979px #767676, 1064px 1815px #767676, 1725px 581px #767676, 739px 1529px #767676, 263px 1626px #767676, 1803px 320px #767676, 801px 107px #767676, 1832px 957px #767676, 1828px 374px #767676, 1117px 1432px #767676, 1691px 1206px #767676, 78px 834px #767676, 570px 1935px #767676, 37px 1288px #767676, 29px 1763px #767676, 208px 1143px #767676, 832px 945px #767676, 477px 1782px #767676, 1495px 858px #767676, 287px 1926px #767676, 1399px 782px #767676, 111px 1178px #767676, 1570px 1587px #767676, 1152px 543px #767676, 876px 655px #767676, 895px 1895px #767676, 1140px 1759px #767676, 290px 593px #767676, 1803px 1699px #767676, 1180px 1328px #767676, 1465px 1795px #767676, 825px 1490px #767676, 256px 1972px #767676, 646px 1088px #767676, 65px 1221px #767676, 518px 1205px #767676, 1312px 1346px #767676, 632px 1551px #767676, 1989px 1924px #767676, 1090px 921px #767676, 695px 1486px #767676, 778px 1577px #767676, 174px 22px #767676, 1510px 1991px #767676, 392px 695px #767676, 1230px 773px #767676, 1868px 1191px #767676, 1504px 1619px #767676, 1440px 1116px #767676, 719px 1296px #767676, 900px 1868px #767676, 1553px 967px #767676, 1717px 1036px #767676, 518px 1187px #767676, 1558px 490px #767676, 339px 452px #767676, 1781px 1697px #767676, 1559px 829px #767676, 415px 1078px #767676, 856px 1622px #767676, 1820px 1026px #767676, 1235px 260px #767676, 1809px 1351px #767676, 1751px 765px #767676, 137px 1466px #767676, 1226px 1545px #767676, 660px 1105px #767676, 1076px 905px #767676, 1845px 446px #767676, 853px 1529px #767676, 50px 246px #767676, 1177px 1390px #767676, 1959px 983px #767676, 1616px 1208px #767676, 89px 1238px #767676, 1933px 822px #767676, 1006px 529px #767676, 760px 702px #767676, 1225px 1816px #767676, 1435px 547px #767676, 952px 1724px #767676, 1537px 1640px #767676, 566px 825px #767676, 1173px 349px #767676, 496px 688px #767676, 1799px 1086px #767676, 1913px 1322px #767676, 935px 859px #767676, 1537px 471px #767676, 248px 1467px #767676, 704px 576px #767676, 591px 168px #767676, 1647px 904px #767676, 851px 1971px #767676, 3px 210px #767676, 1397px 1735px #767676, 1234px 958px #767676, 518px 1073px #767676, 972px 553px #767676, 1905px 1892px #767676, 8px 566px #767676, 95px 1205px #767676, 804px 538px #767676, 1542px 810px #767676, 867px 1056px #767676, 1501px 988px #767676, 1388px 895px #767676, 92px 1827px #767676, 61px 1809px #767676, 140px 115px #767676, 1491px 52px #767676, 1669px 1895px #767676, 935px 879px #767676, 1185px 549px #767676, 586px 695px #767676, 1975px 925px #767676, 1663px 1854px #767676, 1567px 15px #767676, 943px 1307px #767676, 568px 1720px #767676, 563px 292px #767676, 1698px 374px #767676, 856px 759px #767676, 1895px 966px #767676, 105px 82px #767676, 1314px 1698px #767676, 826px 746px #767676, 1187px 385px #767676, 956px 368px #767676, 1047px 888px #767676, 1452px 1520px #767676, 168px 1289px #767676, 406px 340px #767676, 1999px 1402px #767676, 1901px 1628px #767676, 1778px 1664px #767676, 1276px 1181px #767676, 1391px 546px #767676, 1465px 1680px #767676, 727px 406px #767676, 1130px 1798px #767676, 972px 1636px #767676, 1463px 1855px #767676, 1542px 1078px #767676, 1470px 1055px #767676, 998px 536px #767676, 1265px 1692px #767676, 395px 459px #767676, 1132px 1527px #767676, 820px 743px #767676, 1533px 1552px #767676, 126px 659px #767676, 1797px 1020px #767676, 790px 1544px #767676, 184px 560px #767676, 243px 915px #767676, 1575px 166px #767676, 346px 1756px #767676, 1428px 611px #767676, 1257px 955px #767676, 1884px 777px #767676, 966px 1336px #767676, 595px 461px #767676, 428px 210px #767676, 664px 1476px #767676, 406px 812px #767676, 1115px 808px #767676, 847px 792px #767676, 982px 269px #767676, 534px 1770px #767676, 133px 20px #767676, 626px 1740px #767676, 1498px 606px #767676, 365px 291px #767676, 725px 666px #767676, 727px 1446px #767676, 505px 675px #767676, 1372px 302px #767676, 1419px 1947px #767676, 1858px 636px #767676, 1961px 2000px #767676, 1659px 1567px #767676, 1794px 746px #767676, 1490px 10px #767676, 704px 1930px #767676, 976px 1630px #767676, 1531px 905px #767676, 990px 1527px #767676, 866px 227px #767676, 1360px 982px #767676, 831px 1288px #767676, 1406px 806px #767676, 131px 45px #767676, 650px 99px #767676, 1760px 1969px #767676, 506px 1481px #767676, 30px 424px #767676, 229px 1881px #767676, 52px 162px #767676, 1154px 1980px #767676, 658px 10px #767676, 344px 1992px #767676, 1649px 1500px #767676, 1179px 1114px #767676, 1072px 171px #767676, 1975px 1027px #767676, 1619px 1224px #767676, 242px 841px #767676, 413px 1533px #767676, 1882px 1745px #767676, 1440px 1050px #767676, 1412px 198px #767676, 879px 1759px #767676, 809px 1456px #767676, 74px 50px #767676, 878px 358px #767676, 283px 433px #767676, 1056px 1773px #767676, 1727px 184px #767676, 1262px 1808px #767676, 560px 727px #767676, 769px 1457px #767676, 1469px 884px #767676, 1651px 1215px #767676, 757px 1131px #767676, 1663px 123px #767676, 814px 1675px #767676, 1163px 1360px #767676, 1930px 803px #767676, 1719px 871px #767676, 1078px 673px #767676, 678px 220px #767676, 1671px 1240px #767676, 1047px 229px #767676, 1066px 41px #767676, 1054px 146px #767676, 919px 1696px #767676, 1600px 7px #767676, 893px 271px #767676, 359px 968px #767676, 195px 1931px #767676, 858px 887px #767676, 930px 1447px #767676, 773px 102px #767676, 1737px 459px #767676, 190px 660px #767676, 271px 454px #767676, 1045px 1368px #767676, 419px 971px #767676, 643px 1171px #767676, 532px 345px #767676, 1766px 641px #767676, 403px 444px #767676, 394px 918px #767676, 1137px 92px #767676, 814px 931px #767676, 254px 342px #767676, 250px 980px #767676, 1558px 1786px #767676, 437px 1396px #767676, 376px 1053px #767676, 982px 227px #767676, 95px 1182px #767676, 1291px 125px #767676, 314px 1936px #767676, 503px 1055px #767676, 714px 1922px #767676, 1390px 1785px #767676, 1297px 199px #767676, 530px 1768px #767676, 998px 1710px #767676, 530px 163px #767676, 151px 1898px #767676, 1001px 675px #767676, 234px 1122px #767676, 1052px 1144px #767676, 1224px 1937px #767676, 1613px 620px #767676, 175px 1058px #767676, 1496px 1422px #767676, 360px 1796px #767676, 1907px 559px #767676, 355px 558px #767676, 1189px 784px #767676, 1170px 568px #767676, 96px 1978px #767676, 932px 1214px #767676, 394px 786px #767676, 1903px 336px #767676, 1137px 1421px #767676, 1563px 15px #767676, 1528px 763px #767676, 1621px 390px #767676, 1440px 1764px #767676, 1764px 85px #767676, 989px 1492px #767676, 877px 1561px #767676, 1009px 1157px #767676, 1737px 462px #767676, 520px 1995px #767676, 36px 247px #767676, 1849px 1938px #767676, 937px 941px #767676, 1864px 1950px #767676, 104px 692px #767676, 149px 1976px #767676, 1394px 1140px #767676, 1609px 629px #767676, 385px 1442px #767676, 1702px 1255px #767676, 413px 840px #767676, 1762px 825px #767676, 1535px 681px #767676, 1894px 988px #767676, 1355px 268px #767676, 541px 766px #767676, 1091px 1807px #767676, 1723px 856px #767676, 1096px 966px #767676, 1619px 1225px #767676, 337px 161px #767676, 664px 1623px #767676, 415px 1418px #767676, 534px 85px #767676, 278px 463px #767676, 405px 1549px #767676, 463px 106px #767676, 1227px 590px #767676, 1131px 849px #767676, 1497px 162px #767676, 1162px 953px #767676, 818px 1263px #767676, 1691px 1480px #767676, 1093px 630px #767676, 1884px 975px #767676, 1238px 517px #767676, 1234px 951px #767676, 1398px 1687px #767676, 1908px 856px #767676, 1307px 863px #767676, 1294px 689px #767676, 60px 442px #767676, 1860px 1115px #767676, 799px 778px #767676, 152px 1451px #767676, 1664px 1828px #767676, 1095px 1189px #767676, 717px 884px #767676, 1759px 1128px #767676, 891px 83px #767676, 1652px 1864px #767676, 289px 1149px #767676, 155px 1525px #767676, 663px 1323px #767676, 829px 545px #767676, 800px 1235px #767676, 687px 1912px #767676, 1655px 1256px #767676, 1721px 1205px #767676, 902px 1680px #767676, 574px 425px #767676, 164px 344px #767676, 131px 578px #767676, 1943px 65px #767676, 565px 1503px #767676, 1358px 1301px #767676, 1218px 381px #767676, 1203px 1601px #767676, 1389px 662px #767676, 779px 1580px #767676, 51px 736px #767676, 126px 266px #767676, 1708px 973px #767676, 790px 112px #767676, 1990px 914px #767676, 90px 1268px #767676, 407px 393px #767676, 27px 304px #767676, 1853px 1296px #767676, 1355px 1174px #767676, 1857px 89px #767676, 260px 776px #767676, 100px 1082px #767676, 695px 1560px #767676, 1576px 222px #767676, 565px 885px #767676, 297px 820px #767676, 1149px 1863px #767676, 187px 1252px #767676, 615px 974px #767676, 760px 1761px #767676, 1412px 1662px #767676, 611px 1154px #767676, 474px 1596px #767676, 1789px 768px #767676, 1634px 192px #767676, 1212px 1340px #767676, 1619px 1512px #767676, 611px 941px #767676, 113px 186px #767676, 1808px 510px #767676, 615px 1367px #767676, 547px 395px #767676, 1626px 1584px #767676, 1773px 397px #767676, 612px 1666px #767676, 361px 93px #767676, 1541px 1812px #767676, 911px 235px #767676, 120px 1681px #767676, 344px 1022px #767676, 1785px 53px #767676, 272px 400px #767676, 777px 573px #767676, 440px 1398px #767676, 1286px 1879px #767676, 1848px 1377px #767676, 1959px 1604px #767676, 1089px 1551px #767676, 1109px 1087px #767676, 1668px 1741px #767676, 1044px 1999px #767676, 660px 1671px #767676, 972px 1028px #767676, 1084px 655px #767676, 877px 1066px #767676, 457px 890px #767676, 424px 1492px #767676, 920px 867px #767676, 1546px 1409px #767676, 1729px 1482px #767676, 92px 1625px #767676, 468px 933px #767676, 1739px 683px #767676, 1130px 1578px #767676, 1340px 287px #767676, 828px 1961px #767676, 1130px 1823px #767676, 1810px 783px #767676, 1350px 631px #767676, 963px 1483px #767676, 1898px 1270px #767676, 1685px 1519px #767676, 1940px 1235px #767676, 57px 266px #767676, 1547px 92px #767676, 673px 1830px #767676, 900px 181px #767676, 132px 923px #767676, 1195px 113px #767676, 414px 1352px #767676, 1568px 304px #767676, 587px 1917px #767676, 269px 964px #767676, 1796px 1955px #767676, 798px 1513px #767676, 942px 615px #767676, 198px 860px #767676, 1473px 1891px #767676, 1519px 298px #767676, 100px 193px #767676, 721px 1199px #767676, 1395px 338px #767676, 25px 671px #767676, 75px 1685px #767676, 290px 214px #767676, 1185px 1821px #767676, 1312px 1188px #767676, 950px 2000px #767676, 1606px 1709px #767676, 931px 1565px #767676, 716px 382px #767676, 1117px 979px #767676, 1752px 1623px #767676, 1080px 766px #767676, 1145px 1667px #767676, 655px 278px #767676, 1679px 632px #767676, 1637px 1896px #767676, 490px 79px #767676, 1663px 266px #767676, 1392px 23px #767676, 718px 133px #767676, 350px 1808px #767676, 847px 1259px #767676, 1285px 271px #767676, 100px 661px #767676, 148px 1919px #767676, 997px 1803px #767676, 1137px 1362px #767676, 1094px 1280px #767676, 266px 645px #767676, 416px 914px #767676, 1994px 916px #767676, 581px 1984px #767676, 932px 296px #767676, 1651px 382px #767676, 615px 1703px #767676, 1144px 1925px #767676, 570px 29px #767676, 1561px 1744px #767676, 2px 1547px #767676, 561px 1310px #767676, 906px 683px #767676, 328px 1735px #767676, 1919px 1653px #767676, 327px 9px #767676, 735px 1315px #767676, 585px 444px #767676, 153px 724px #767676, 1724px 1871px #767676, 887px 410px #767676, 663px 1042px #767676, 251px 1924px #767676, 1663px 1258px #767676, 1413px 1126px #767676, 937px 876px #767676, 676px 1124px #767676, 1487px 1780px #767676, 1141px 1108px #767676, 513px 19px #767676, 1193px 1483px #767676, 1945px 1368px #767676, 1658px 218px #767676, 1858px 898px #767676, 1129px 1255px #767676, 1011px 1219px #767676, 1421px 1179px #767676, 114px 1124px #767676, 1407px 1753px #767676, 491px 1040px #767676, 1178px 1987px #767676, 1710px 1698px #767676, 1315px 1579px #767676, 48px 434px #767676, 1825px 879px #767676, 1381px 628px #767676, 1048px 1140px #767676, 1473px 718px #767676, 1420px 985px #767676, 902px 310px #767676, 1619px 324px #767676, 1083px 148px #767676, 1582px 1740px #767676, 1248px 1761px #767676, 1702px 1717px #767676, 627px 340px #767676, 1931px 1249px #767676, 1736px 627px #767676, 116px 1330px #767676, 96px 594px #767676, 1781px 1832px #767676, 1938px 1861px #767676, 1940px 1444px #767676, 266px 753px #767676, 91px 1090px #767676, 1393px 1746px #767676, 492px 178px #767676, 1556px 147px #767676, 1425px 1611px #767676, 282px 246px #767676, 500px 481px #767676, 515px 1947px #767676, 460px 1104px #767676, 931px 1472px #767676, 344px 226px #767676, 365px 107px #767676, 894px 1122px #767676, 1373px 1116px #767676, 507px 553px #767676, 966px 1895px #767676, 1587px 1357px #767676, 421px 652px #767676, 1893px 1500px #767676, 104px 1558px #767676, 456px 265px #767676, 1257px 1207px #767676, 1172px 906px #767676, 50px 1561px #767676, 1296px 30px #767676, 1098px 1529px #767676, 555px 723px #767676, 1458px 1919px #767676, 1146px 570px #767676, 1894px 973px #767676, 1777px 1570px #767676, 1917px 1004px #767676, 19px 927px #767676, 1882px 512px #767676, 1390px 1497px #767676, 99px 1521px #767676, 1796px 1847px #767676, 126px 1737px #767676, 600px 541px #767676, 1539px 391px #767676, 1689px 1531px #767676, 744px 92px #767676, 1000px 1339px #767676, 1697px 950px #767676, 1534px 745px #767676, 714px 272px #767676, 1931px 1036px #767676, 1063px 1547px #767676, 1790px 1484px #767676, 754px 612px #767676, 886px 878px #767676, 1588px 1882px #767676, 88px 1475px #767676, 920px 666px #767676, 1132px 1954px #767676, 825px 1000px #767676, 179px 1135px #767676, 919px 76px #767676, 1724px 1759px #767676, 1977px 1377px #767676, 1036px 1279px #767676, 1109px 658px #767676, 211px 188px #767676, 187px 180px #767676, 468px 1964px #767676, 1482px 244px #767676, 783px 772px #767676, 978px 431px #767676, 124px 388px #767676, 697px 1195px #767676, 404px 334px #767676, 1248px 572px #767676, 1888px 1144px #767676, 589px 132px #767676, 100px 425px #767676, 593px 648px #767676, 273px 643px #767676, 543px 1941px #767676, 427px 1843px #767676, 680px 293px #767676, 1495px 739px #767676, 526px 631px #767676, 1645px 567px #767676, 991px 949px #767676, 1027px 1570px #767676, 1335px 395px #767676, 1024px 1509px #767676, 1785px 250px #767676; - --stars-medium: 1120px 738px #767676, 533px 827px #767676, 339px 866px #767676, 1335px 1325px #767676, 1021px 435px #767676, 1850px 1972px #767676, 492px 1847px #767676, 1030px 1536px #767676, 1154px 1422px #767676, 533px 945px #767676, 1465px 1670px #767676, 411px 1474px #767676, 413px 526px #767676, 1155px 1946px #767676, 1469px 1277px #767676, 310px 1807px #767676, 936px 387px #767676, 397px 725px #767676, 228px 1790px #767676, 1124px 539px #767676, 1261px 63px #767676, 172px 881px #767676, 1042px 1984px #767676, 1153px 322px #767676, 1955px 662px #767676, 1951px 1981px #767676, 621px 248px #767676, 1589px 534px #767676, 1997px 667px #767676, 618px 660px #767676, 452px 259px #767676, 362px 1762px #767676, 735px 347px #767676, 783px 297px #767676, 1808px 408px #767676, 373px 740px #767676, 543px 1509px #767676, 1125px 1169px #767676, 1625px 483px #767676, 1461px 782px #767676, 460px 1210px #767676, 608px 1119px #767676, 132px 1503px #767676, 169px 660px #767676, 392px 1094px #767676, 1128px 567px #767676, 119px 1617px #767676, 1872px 60px #767676, 1192px 673px #767676, 1115px 1712px #767676, 1192px 873px #767676, 1375px 1486px #767676, 1031px 227px #767676, 510px 1459px #767676, 607px 1047px #767676, 752px 247px #767676, 1556px 135px #767676, 959px 915px #767676, 1071px 365px #767676, 318px 203px #767676, 1000px 573px #767676, 2000px 1250px #767676, 1566px 1478px #767676, 364px 1008px #767676, 1335px 1898px #767676, 580px 1162px #767676, 930px 1091px #767676, 1644px 1040px #767676, 1702px 1127px #767676, 1750px 1105px #767676, 708px 1310px #767676, 29px 392px #767676, 946px 1905px #767676, 407px 1326px #767676, 59px 927px #767676, 1717px 1944px #767676, 674px 301px #767676, 1018px 1346px #767676, 1376px 1697px #767676, 1402px 961px #767676, 1012px 1256px #767676, 999px 923px #767676, 1866px 1360px #767676, 1129px 533px #767676, 117px 797px #767676, 778px 855px #767676, 1809px 1485px #767676, 965px 1725px #767676, 780px 290px #767676, 205px 431px #767676, 1886px 1007px #767676, 163px 1912px #767676, 517px 1106px #767676, 527px 1428px #767676, 1258px 1921px #767676, 1544px 1149px #767676, 1829px 966px #767676, 1626px 1420px #767676, 402px 1275px #767676, 1952px 920px #767676, 738px 1364px #767676, 1598px 1288px #767676, 1461px 951px #767676, 1921px 782px #767676, 57px 943px #767676, 1123px 7px #767676, 763px 1524px #767676, 432px 847px #767676, 1479px 59px #767676, 1761px 258px #767676, 1410px 1609px #767676, 303px 58px #767676, 103px 1478px #767676, 1289px 221px #767676, 1265px 277px #767676, 1153px 1054px #767676, 1468px 314px #767676, 363px 453px #767676, 1946px 70px #767676, 1223px 876px #767676, 1780px 1010px #767676, 782px 1977px #767676, 1480px 1867px #767676, 451px 390px #767676, 1285px 321px #767676, 877px 1682px #767676, 1998px 365px #767676, 817px 1011px #767676, 926px 1147px #767676, 310px 368px #767676, 1234px 922px #767676, 658px 64px #767676, 1409px 200px #767676, 1200px 515px #767676, 1597px 1924px #767676, 1089px 1523px #767676, 1917px 995px #767676, 734px 1392px #767676, 1573px 174px #767676, 209px 1376px #767676, 1987px 1718px #767676, 1650px 796px #767676, 827px 1701px #767676, 1763px 961px #767676, 1387px 834px #767676, 1122px 1326px #767676, 7px 763px #767676, 666px 893px #767676, 1568px 947px #767676, 1460px 53px #767676, 618px 549px #767676, 527px 398px #767676, 1648px 1959px #767676, 1333px 956px #767676, 807px 695px #767676, 875px 147px #767676, 568px 1632px #767676, 986px 1215px #767676, 1057px 1737px #767676, 1352px 851px #767676, 1579px 853px #767676, 66px 1269px #767676, 1775px 1587px #767676, 703px 107px #767676, 393px 1303px #767676, 897px 1414px #767676, 812px 120px #767676, 1553px 1317px #767676, 1394px 606px #767676, 1504px 1659px #767676, 1007px 370px #767676, 964px 1028px #767676, 871px 1349px #767676, 803px 1218px #767676, 1851px 1273px #767676, 57px 432px #767676, 727px 1752px #767676, 1381px 998px #767676, 950px 412px #767676, 1118px 493px #767676, 549px 311px #767676, 1689px 983px #767676, 185px 1432px #767676, 425px 1761px #767676, 547px 291px #767676, 356px 1619px #767676, 516px 294px #767676, 458px 383px #767676, 1634px 1420px #767676, 1202px 1564px #767676, 1526px 821px #767676, 1401px 1242px #767676, 34px 1100px #767676, 1347px 1172px #767676, 854px 821px #767676, 1762px 467px #767676, 410px 1662px #767676, 1804px 19px #767676, 1997px 320px #767676, 1025px 1016px #767676; - --stars-large: 1783px 1852px #767676, 760px 523px #767676, 136px 446px #767676, 1618px 589px #767676, 769px 1696px #767676, 804px 1501px #767676, 1927px 1123px #767676, 46px 1079px #767676, 1682px 728px #767676, 1049px 479px #767676, 1427px 1116px #767676, 1951px 782px #767676, 1556px 827px #767676, 926px 382px #767676, 1851px 863px #767676, 1399px 1900px #767676, 634px 850px #767676, 1939px 1032px #767676, 1571px 1958px #767676, 1648px 1378px #767676, 33px 1171px #767676, 1848px 475px #767676, 1173px 1872px #767676, 1810px 409px #767676, 1957px 328px #767676, 1029px 45px #767676, 333px 584px #767676, 1998px 422px #767676, 480px 1216px #767676, 1432px 1888px #767676, 709px 606px #767676, 555px 1702px #767676, 58px 1863px #767676, 1839px 1633px #767676, 1349px 895px #767676, 1393px 1027px #767676, 799px 218px #767676, 923px 1581px #767676, 1277px 271px #767676, 142px 1086px #767676, 365px 41px #767676, 1135px 1148px #767676, 1101px 1518px #767676, 265px 1855px #767676, 1134px 167px #767676, 997px 770px #767676, 1172px 1332px #767676, 1573px 121px #767676, 1925px 853px #767676, 1951px 200px #767676, 777px 1093px #767676, 996px 278px #767676, 1328px 1296px #767676, 978px 535px #767676, 161px 288px #767676, 1466px 310px #767676, 638px 1368px #767676, 1407px 360px #767676, 704px 658px #767676, 1371px 1152px #767676, 1947px 1808px #767676, 1280px 1392px #767676, 51px 499px #767676, 1862px 1087px #767676, 563px 575px #767676, 165px 689px #767676, 1104px 708px #767676, 1279px 1339px #767676, 1561px 899px #767676, 1046px 49px #767676, 1916px 1992px #767676, 893px 1915px #767676, 1404px 1555px #767676, 1203px 330px #767676, 389px 1239px #767676, 69px 1152px #767676, 1566px 804px #767676, 341px 751px #767676, 1775px 724px #767676, 1281px 685px #767676, 244px 1397px #767676, 619px 1533px #767676, 169px 1812px #767676, 369px 1px #767676, 1705px 1430px #767676, 796px 1998px #767676, 1801px 534px #767676, 749px 1038px #767676, 429px 1533px #767676, 536px 1902px #767676, 261px 1700px #767676, 1630px 511px #767676, 863px 925px #767676, 435px 621px #767676, 221px 191px #767676, 734px 660px #767676, 1032px 1017px #767676, 832px 1594px #767676, 1757px 962px #767676, 652px 1291px #767676; + --stars-small: 1928px 627px #767676, 626px 1242px #767676, + 456px 1401px #767676, 1984px 1908px #767676, 391px 722px #767676, + 1292px 1098px #767676, 29px 119px #767676, 445px 1913px #767676, + 1861px 172px #767676, 1818px 1237px #767676, 1435px 660px #767676, + 464px 928px #767676, 1771px 1053px #767676, 1033px 799px #767676, + 553px 607px #767676, 1564px 1212px #767676, 915px 1084px #767676, + 464px 847px #767676, 1456px 748px #767676, 997px 624px #767676, + 1005px 1863px #767676, 1115px 1924px #767676, 1128px 1485px #767676, + 827px 1590px #767676, 676px 1679px #767676, 660px 264px #767676, + 320px 1327px #767676, 1738px 1375px #767676, 1597px 232px #767676, + 457px 1891px #767676, 414px 725px #767676, 878px 248px #767676, + 458px 221px #767676, 380px 428px #767676, 1364px 593px #767676, + 267px 1967px #767676, 1266px 1579px #767676, 1867px 738px #767676, + 1186px 970px #767676, 773px 1262px #767676, 1489px 1718px #767676, + 1889px 1693px #767676, 154px 1834px #767676, 683px 484px #767676, + 816px 1525px #767676, 1048px 1929px #767676, 1793px 977px #767676, + 88px 1353px #767676, 760px 178px #767676, 1135px 521px #767676, + 1391px 1168px #767676, 1031px 1017px #767676, 1260px 586px #767676, + 1077px 420px #767676, 1693px 431px #767676, 629px 1488px #767676, + 958px 533px #767676, 389px 1979px #767676, 1064px 1815px #767676, + 1725px 581px #767676, 739px 1529px #767676, 263px 1626px #767676, + 1803px 320px #767676, 801px 107px #767676, 1832px 957px #767676, + 1828px 374px #767676, 1117px 1432px #767676, 1691px 1206px #767676, + 78px 834px #767676, 570px 1935px #767676, 37px 1288px #767676, + 29px 1763px #767676, 208px 1143px #767676, 832px 945px #767676, + 477px 1782px #767676, 1495px 858px #767676, 287px 1926px #767676, + 1399px 782px #767676, 111px 1178px #767676, 1570px 1587px #767676, + 1152px 543px #767676, 876px 655px #767676, 895px 1895px #767676, + 1140px 1759px #767676, 290px 593px #767676, 1803px 1699px #767676, + 1180px 1328px #767676, 1465px 1795px #767676, 825px 1490px #767676, + 256px 1972px #767676, 646px 1088px #767676, 65px 1221px #767676, + 518px 1205px #767676, 1312px 1346px #767676, 632px 1551px #767676, + 1989px 1924px #767676, 1090px 921px #767676, 695px 1486px #767676, + 778px 1577px #767676, 174px 22px #767676, 1510px 1991px #767676, + 392px 695px #767676, 1230px 773px #767676, 1868px 1191px #767676, + 1504px 1619px #767676, 1440px 1116px #767676, 719px 1296px #767676, + 900px 1868px #767676, 1553px 967px #767676, 1717px 1036px #767676, + 518px 1187px #767676, 1558px 490px #767676, 339px 452px #767676, + 1781px 1697px #767676, 1559px 829px #767676, 415px 1078px #767676, + 856px 1622px #767676, 1820px 1026px #767676, 1235px 260px #767676, + 1809px 1351px #767676, 1751px 765px #767676, 137px 1466px #767676, + 1226px 1545px #767676, 660px 1105px #767676, 1076px 905px #767676, + 1845px 446px #767676, 853px 1529px #767676, 50px 246px #767676, + 1177px 1390px #767676, 1959px 983px #767676, 1616px 1208px #767676, + 89px 1238px #767676, 1933px 822px #767676, 1006px 529px #767676, + 760px 702px #767676, 1225px 1816px #767676, 1435px 547px #767676, + 952px 1724px #767676, 1537px 1640px #767676, 566px 825px #767676, + 1173px 349px #767676, 496px 688px #767676, 1799px 1086px #767676, + 1913px 1322px #767676, 935px 859px #767676, 1537px 471px #767676, + 248px 1467px #767676, 704px 576px #767676, 591px 168px #767676, + 1647px 904px #767676, 851px 1971px #767676, 3px 210px #767676, + 1397px 1735px #767676, 1234px 958px #767676, 518px 1073px #767676, + 972px 553px #767676, 1905px 1892px #767676, 8px 566px #767676, + 95px 1205px #767676, 804px 538px #767676, 1542px 810px #767676, + 867px 1056px #767676, 1501px 988px #767676, 1388px 895px #767676, + 92px 1827px #767676, 61px 1809px #767676, 140px 115px #767676, + 1491px 52px #767676, 1669px 1895px #767676, 935px 879px #767676, + 1185px 549px #767676, 586px 695px #767676, 1975px 925px #767676, + 1663px 1854px #767676, 1567px 15px #767676, 943px 1307px #767676, + 568px 1720px #767676, 563px 292px #767676, 1698px 374px #767676, + 856px 759px #767676, 1895px 966px #767676, 105px 82px #767676, + 1314px 1698px #767676, 826px 746px #767676, 1187px 385px #767676, + 956px 368px #767676, 1047px 888px #767676, 1452px 1520px #767676, + 168px 1289px #767676, 406px 340px #767676, 1999px 1402px #767676, + 1901px 1628px #767676, 1778px 1664px #767676, 1276px 1181px #767676, + 1391px 546px #767676, 1465px 1680px #767676, 727px 406px #767676, + 1130px 1798px #767676, 972px 1636px #767676, 1463px 1855px #767676, + 1542px 1078px #767676, 1470px 1055px #767676, 998px 536px #767676, + 1265px 1692px #767676, 395px 459px #767676, 1132px 1527px #767676, + 820px 743px #767676, 1533px 1552px #767676, 126px 659px #767676, + 1797px 1020px #767676, 790px 1544px #767676, 184px 560px #767676, + 243px 915px #767676, 1575px 166px #767676, 346px 1756px #767676, + 1428px 611px #767676, 1257px 955px #767676, 1884px 777px #767676, + 966px 1336px #767676, 595px 461px #767676, 428px 210px #767676, + 664px 1476px #767676, 406px 812px #767676, 1115px 808px #767676, + 847px 792px #767676, 982px 269px #767676, 534px 1770px #767676, + 133px 20px #767676, 626px 1740px #767676, 1498px 606px #767676, + 365px 291px #767676, 725px 666px #767676, 727px 1446px #767676, + 505px 675px #767676, 1372px 302px #767676, 1419px 1947px #767676, + 1858px 636px #767676, 1961px 2000px #767676, 1659px 1567px #767676, + 1794px 746px #767676, 1490px 10px #767676, 704px 1930px #767676, + 976px 1630px #767676, 1531px 905px #767676, 990px 1527px #767676, + 866px 227px #767676, 1360px 982px #767676, 831px 1288px #767676, + 1406px 806px #767676, 131px 45px #767676, 650px 99px #767676, + 1760px 1969px #767676, 506px 1481px #767676, 30px 424px #767676, + 229px 1881px #767676, 52px 162px #767676, 1154px 1980px #767676, + 658px 10px #767676, 344px 1992px #767676, 1649px 1500px #767676, + 1179px 1114px #767676, 1072px 171px #767676, 1975px 1027px #767676, + 1619px 1224px #767676, 242px 841px #767676, 413px 1533px #767676, + 1882px 1745px #767676, 1440px 1050px #767676, 1412px 198px #767676, + 879px 1759px #767676, 809px 1456px #767676, 74px 50px #767676, + 878px 358px #767676, 283px 433px #767676, 1056px 1773px #767676, + 1727px 184px #767676, 1262px 1808px #767676, 560px 727px #767676, + 769px 1457px #767676, 1469px 884px #767676, 1651px 1215px #767676, + 757px 1131px #767676, 1663px 123px #767676, 814px 1675px #767676, + 1163px 1360px #767676, 1930px 803px #767676, 1719px 871px #767676, + 1078px 673px #767676, 678px 220px #767676, 1671px 1240px #767676, + 1047px 229px #767676, 1066px 41px #767676, 1054px 146px #767676, + 919px 1696px #767676, 1600px 7px #767676, 893px 271px #767676, + 359px 968px #767676, 195px 1931px #767676, 858px 887px #767676, + 930px 1447px #767676, 773px 102px #767676, 1737px 459px #767676, + 190px 660px #767676, 271px 454px #767676, 1045px 1368px #767676, + 419px 971px #767676, 643px 1171px #767676, 532px 345px #767676, + 1766px 641px #767676, 403px 444px #767676, 394px 918px #767676, + 1137px 92px #767676, 814px 931px #767676, 254px 342px #767676, + 250px 980px #767676, 1558px 1786px #767676, 437px 1396px #767676, + 376px 1053px #767676, 982px 227px #767676, 95px 1182px #767676, + 1291px 125px #767676, 314px 1936px #767676, 503px 1055px #767676, + 714px 1922px #767676, 1390px 1785px #767676, 1297px 199px #767676, + 530px 1768px #767676, 998px 1710px #767676, 530px 163px #767676, + 151px 1898px #767676, 1001px 675px #767676, 234px 1122px #767676, + 1052px 1144px #767676, 1224px 1937px #767676, 1613px 620px #767676, + 175px 1058px #767676, 1496px 1422px #767676, 360px 1796px #767676, + 1907px 559px #767676, 355px 558px #767676, 1189px 784px #767676, + 1170px 568px #767676, 96px 1978px #767676, 932px 1214px #767676, + 394px 786px #767676, 1903px 336px #767676, 1137px 1421px #767676, + 1563px 15px #767676, 1528px 763px #767676, 1621px 390px #767676, + 1440px 1764px #767676, 1764px 85px #767676, 989px 1492px #767676, + 877px 1561px #767676, 1009px 1157px #767676, 1737px 462px #767676, + 520px 1995px #767676, 36px 247px #767676, 1849px 1938px #767676, + 937px 941px #767676, 1864px 1950px #767676, 104px 692px #767676, + 149px 1976px #767676, 1394px 1140px #767676, 1609px 629px #767676, + 385px 1442px #767676, 1702px 1255px #767676, 413px 840px #767676, + 1762px 825px #767676, 1535px 681px #767676, 1894px 988px #767676, + 1355px 268px #767676, 541px 766px #767676, 1091px 1807px #767676, + 1723px 856px #767676, 1096px 966px #767676, 1619px 1225px #767676, + 337px 161px #767676, 664px 1623px #767676, 415px 1418px #767676, + 534px 85px #767676, 278px 463px #767676, 405px 1549px #767676, + 463px 106px #767676, 1227px 590px #767676, 1131px 849px #767676, + 1497px 162px #767676, 1162px 953px #767676, 818px 1263px #767676, + 1691px 1480px #767676, 1093px 630px #767676, 1884px 975px #767676, + 1238px 517px #767676, 1234px 951px #767676, 1398px 1687px #767676, + 1908px 856px #767676, 1307px 863px #767676, 1294px 689px #767676, + 60px 442px #767676, 1860px 1115px #767676, 799px 778px #767676, + 152px 1451px #767676, 1664px 1828px #767676, 1095px 1189px #767676, + 717px 884px #767676, 1759px 1128px #767676, 891px 83px #767676, + 1652px 1864px #767676, 289px 1149px #767676, 155px 1525px #767676, + 663px 1323px #767676, 829px 545px #767676, 800px 1235px #767676, + 687px 1912px #767676, 1655px 1256px #767676, 1721px 1205px #767676, + 902px 1680px #767676, 574px 425px #767676, 164px 344px #767676, + 131px 578px #767676, 1943px 65px #767676, 565px 1503px #767676, + 1358px 1301px #767676, 1218px 381px #767676, 1203px 1601px #767676, + 1389px 662px #767676, 779px 1580px #767676, 51px 736px #767676, + 126px 266px #767676, 1708px 973px #767676, 790px 112px #767676, + 1990px 914px #767676, 90px 1268px #767676, 407px 393px #767676, + 27px 304px #767676, 1853px 1296px #767676, 1355px 1174px #767676, + 1857px 89px #767676, 260px 776px #767676, 100px 1082px #767676, + 695px 1560px #767676, 1576px 222px #767676, 565px 885px #767676, + 297px 820px #767676, 1149px 1863px #767676, 187px 1252px #767676, + 615px 974px #767676, 760px 1761px #767676, 1412px 1662px #767676, + 611px 1154px #767676, 474px 1596px #767676, 1789px 768px #767676, + 1634px 192px #767676, 1212px 1340px #767676, 1619px 1512px #767676, + 611px 941px #767676, 113px 186px #767676, 1808px 510px #767676, + 615px 1367px #767676, 547px 395px #767676, 1626px 1584px #767676, + 1773px 397px #767676, 612px 1666px #767676, 361px 93px #767676, + 1541px 1812px #767676, 911px 235px #767676, 120px 1681px #767676, + 344px 1022px #767676, 1785px 53px #767676, 272px 400px #767676, + 777px 573px #767676, 440px 1398px #767676, 1286px 1879px #767676, + 1848px 1377px #767676, 1959px 1604px #767676, 1089px 1551px #767676, + 1109px 1087px #767676, 1668px 1741px #767676, 1044px 1999px #767676, + 660px 1671px #767676, 972px 1028px #767676, 1084px 655px #767676, + 877px 1066px #767676, 457px 890px #767676, 424px 1492px #767676, + 920px 867px #767676, 1546px 1409px #767676, 1729px 1482px #767676, + 92px 1625px #767676, 468px 933px #767676, 1739px 683px #767676, + 1130px 1578px #767676, 1340px 287px #767676, 828px 1961px #767676, + 1130px 1823px #767676, 1810px 783px #767676, 1350px 631px #767676, + 963px 1483px #767676, 1898px 1270px #767676, 1685px 1519px #767676, + 1940px 1235px #767676, 57px 266px #767676, 1547px 92px #767676, + 673px 1830px #767676, 900px 181px #767676, 132px 923px #767676, + 1195px 113px #767676, 414px 1352px #767676, 1568px 304px #767676, + 587px 1917px #767676, 269px 964px #767676, 1796px 1955px #767676, + 798px 1513px #767676, 942px 615px #767676, 198px 860px #767676, + 1473px 1891px #767676, 1519px 298px #767676, 100px 193px #767676, + 721px 1199px #767676, 1395px 338px #767676, 25px 671px #767676, + 75px 1685px #767676, 290px 214px #767676, 1185px 1821px #767676, + 1312px 1188px #767676, 950px 2000px #767676, 1606px 1709px #767676, + 931px 1565px #767676, 716px 382px #767676, 1117px 979px #767676, + 1752px 1623px #767676, 1080px 766px #767676, 1145px 1667px #767676, + 655px 278px #767676, 1679px 632px #767676, 1637px 1896px #767676, + 490px 79px #767676, 1663px 266px #767676, 1392px 23px #767676, + 718px 133px #767676, 350px 1808px #767676, 847px 1259px #767676, + 1285px 271px #767676, 100px 661px #767676, 148px 1919px #767676, + 997px 1803px #767676, 1137px 1362px #767676, 1094px 1280px #767676, + 266px 645px #767676, 416px 914px #767676, 1994px 916px #767676, + 581px 1984px #767676, 932px 296px #767676, 1651px 382px #767676, + 615px 1703px #767676, 1144px 1925px #767676, 570px 29px #767676, + 1561px 1744px #767676, 2px 1547px #767676, 561px 1310px #767676, + 906px 683px #767676, 328px 1735px #767676, 1919px 1653px #767676, + 327px 9px #767676, 735px 1315px #767676, 585px 444px #767676, + 153px 724px #767676, 1724px 1871px #767676, 887px 410px #767676, + 663px 1042px #767676, 251px 1924px #767676, 1663px 1258px #767676, + 1413px 1126px #767676, 937px 876px #767676, 676px 1124px #767676, + 1487px 1780px #767676, 1141px 1108px #767676, 513px 19px #767676, + 1193px 1483px #767676, 1945px 1368px #767676, 1658px 218px #767676, + 1858px 898px #767676, 1129px 1255px #767676, 1011px 1219px #767676, + 1421px 1179px #767676, 114px 1124px #767676, 1407px 1753px #767676, + 491px 1040px #767676, 1178px 1987px #767676, 1710px 1698px #767676, + 1315px 1579px #767676, 48px 434px #767676, 1825px 879px #767676, + 1381px 628px #767676, 1048px 1140px #767676, 1473px 718px #767676, + 1420px 985px #767676, 902px 310px #767676, 1619px 324px #767676, + 1083px 148px #767676, 1582px 1740px #767676, 1248px 1761px #767676, + 1702px 1717px #767676, 627px 340px #767676, 1931px 1249px #767676, + 1736px 627px #767676, 116px 1330px #767676, 96px 594px #767676, + 1781px 1832px #767676, 1938px 1861px #767676, 1940px 1444px #767676, + 266px 753px #767676, 91px 1090px #767676, 1393px 1746px #767676, + 492px 178px #767676, 1556px 147px #767676, 1425px 1611px #767676, + 282px 246px #767676, 500px 481px #767676, 515px 1947px #767676, + 460px 1104px #767676, 931px 1472px #767676, 344px 226px #767676, + 365px 107px #767676, 894px 1122px #767676, 1373px 1116px #767676, + 507px 553px #767676, 966px 1895px #767676, 1587px 1357px #767676, + 421px 652px #767676, 1893px 1500px #767676, 104px 1558px #767676, + 456px 265px #767676, 1257px 1207px #767676, 1172px 906px #767676, + 50px 1561px #767676, 1296px 30px #767676, 1098px 1529px #767676, + 555px 723px #767676, 1458px 1919px #767676, 1146px 570px #767676, + 1894px 973px #767676, 1777px 1570px #767676, 1917px 1004px #767676, + 19px 927px #767676, 1882px 512px #767676, 1390px 1497px #767676, + 99px 1521px #767676, 1796px 1847px #767676, 126px 1737px #767676, + 600px 541px #767676, 1539px 391px #767676, 1689px 1531px #767676, + 744px 92px #767676, 1000px 1339px #767676, 1697px 950px #767676, + 1534px 745px #767676, 714px 272px #767676, 1931px 1036px #767676, + 1063px 1547px #767676, 1790px 1484px #767676, 754px 612px #767676, + 886px 878px #767676, 1588px 1882px #767676, 88px 1475px #767676, + 920px 666px #767676, 1132px 1954px #767676, 825px 1000px #767676, + 179px 1135px #767676, 919px 76px #767676, 1724px 1759px #767676, + 1977px 1377px #767676, 1036px 1279px #767676, 1109px 658px #767676, + 211px 188px #767676, 187px 180px #767676, 468px 1964px #767676, + 1482px 244px #767676, 783px 772px #767676, 978px 431px #767676, + 124px 388px #767676, 697px 1195px #767676, 404px 334px #767676, + 1248px 572px #767676, 1888px 1144px #767676, 589px 132px #767676, + 100px 425px #767676, 593px 648px #767676, 273px 643px #767676, + 543px 1941px #767676, 427px 1843px #767676, 680px 293px #767676, + 1495px 739px #767676, 526px 631px #767676, 1645px 567px #767676, + 991px 949px #767676, 1027px 1570px #767676, 1335px 395px #767676, + 1024px 1509px #767676, 1785px 250px #767676; + --stars-medium: 1120px 738px #767676, 533px 827px #767676, 339px 866px #767676, + 1335px 1325px #767676, 1021px 435px #767676, 1850px 1972px #767676, + 492px 1847px #767676, 1030px 1536px #767676, 1154px 1422px #767676, + 533px 945px #767676, 1465px 1670px #767676, 411px 1474px #767676, + 413px 526px #767676, 1155px 1946px #767676, 1469px 1277px #767676, + 310px 1807px #767676, 936px 387px #767676, 397px 725px #767676, + 228px 1790px #767676, 1124px 539px #767676, 1261px 63px #767676, + 172px 881px #767676, 1042px 1984px #767676, 1153px 322px #767676, + 1955px 662px #767676, 1951px 1981px #767676, 621px 248px #767676, + 1589px 534px #767676, 1997px 667px #767676, 618px 660px #767676, + 452px 259px #767676, 362px 1762px #767676, 735px 347px #767676, + 783px 297px #767676, 1808px 408px #767676, 373px 740px #767676, + 543px 1509px #767676, 1125px 1169px #767676, 1625px 483px #767676, + 1461px 782px #767676, 460px 1210px #767676, 608px 1119px #767676, + 132px 1503px #767676, 169px 660px #767676, 392px 1094px #767676, + 1128px 567px #767676, 119px 1617px #767676, 1872px 60px #767676, + 1192px 673px #767676, 1115px 1712px #767676, 1192px 873px #767676, + 1375px 1486px #767676, 1031px 227px #767676, 510px 1459px #767676, + 607px 1047px #767676, 752px 247px #767676, 1556px 135px #767676, + 959px 915px #767676, 1071px 365px #767676, 318px 203px #767676, + 1000px 573px #767676, 2000px 1250px #767676, 1566px 1478px #767676, + 364px 1008px #767676, 1335px 1898px #767676, 580px 1162px #767676, + 930px 1091px #767676, 1644px 1040px #767676, 1702px 1127px #767676, + 1750px 1105px #767676, 708px 1310px #767676, 29px 392px #767676, + 946px 1905px #767676, 407px 1326px #767676, 59px 927px #767676, + 1717px 1944px #767676, 674px 301px #767676, 1018px 1346px #767676, + 1376px 1697px #767676, 1402px 961px #767676, 1012px 1256px #767676, + 999px 923px #767676, 1866px 1360px #767676, 1129px 533px #767676, + 117px 797px #767676, 778px 855px #767676, 1809px 1485px #767676, + 965px 1725px #767676, 780px 290px #767676, 205px 431px #767676, + 1886px 1007px #767676, 163px 1912px #767676, 517px 1106px #767676, + 527px 1428px #767676, 1258px 1921px #767676, 1544px 1149px #767676, + 1829px 966px #767676, 1626px 1420px #767676, 402px 1275px #767676, + 1952px 920px #767676, 738px 1364px #767676, 1598px 1288px #767676, + 1461px 951px #767676, 1921px 782px #767676, 57px 943px #767676, + 1123px 7px #767676, 763px 1524px #767676, 432px 847px #767676, + 1479px 59px #767676, 1761px 258px #767676, 1410px 1609px #767676, + 303px 58px #767676, 103px 1478px #767676, 1289px 221px #767676, + 1265px 277px #767676, 1153px 1054px #767676, 1468px 314px #767676, + 363px 453px #767676, 1946px 70px #767676, 1223px 876px #767676, + 1780px 1010px #767676, 782px 1977px #767676, 1480px 1867px #767676, + 451px 390px #767676, 1285px 321px #767676, 877px 1682px #767676, + 1998px 365px #767676, 817px 1011px #767676, 926px 1147px #767676, + 310px 368px #767676, 1234px 922px #767676, 658px 64px #767676, + 1409px 200px #767676, 1200px 515px #767676, 1597px 1924px #767676, + 1089px 1523px #767676, 1917px 995px #767676, 734px 1392px #767676, + 1573px 174px #767676, 209px 1376px #767676, 1987px 1718px #767676, + 1650px 796px #767676, 827px 1701px #767676, 1763px 961px #767676, + 1387px 834px #767676, 1122px 1326px #767676, 7px 763px #767676, + 666px 893px #767676, 1568px 947px #767676, 1460px 53px #767676, + 618px 549px #767676, 527px 398px #767676, 1648px 1959px #767676, + 1333px 956px #767676, 807px 695px #767676, 875px 147px #767676, + 568px 1632px #767676, 986px 1215px #767676, 1057px 1737px #767676, + 1352px 851px #767676, 1579px 853px #767676, 66px 1269px #767676, + 1775px 1587px #767676, 703px 107px #767676, 393px 1303px #767676, + 897px 1414px #767676, 812px 120px #767676, 1553px 1317px #767676, + 1394px 606px #767676, 1504px 1659px #767676, 1007px 370px #767676, + 964px 1028px #767676, 871px 1349px #767676, 803px 1218px #767676, + 1851px 1273px #767676, 57px 432px #767676, 727px 1752px #767676, + 1381px 998px #767676, 950px 412px #767676, 1118px 493px #767676, + 549px 311px #767676, 1689px 983px #767676, 185px 1432px #767676, + 425px 1761px #767676, 547px 291px #767676, 356px 1619px #767676, + 516px 294px #767676, 458px 383px #767676, 1634px 1420px #767676, + 1202px 1564px #767676, 1526px 821px #767676, 1401px 1242px #767676, + 34px 1100px #767676, 1347px 1172px #767676, 854px 821px #767676, + 1762px 467px #767676, 410px 1662px #767676, 1804px 19px #767676, + 1997px 320px #767676, 1025px 1016px #767676; + --stars-large: 1783px 1852px #767676, 760px 523px #767676, 136px 446px #767676, + 1618px 589px #767676, 769px 1696px #767676, 804px 1501px #767676, + 1927px 1123px #767676, 46px 1079px #767676, 1682px 728px #767676, + 1049px 479px #767676, 1427px 1116px #767676, 1951px 782px #767676, + 1556px 827px #767676, 926px 382px #767676, 1851px 863px #767676, + 1399px 1900px #767676, 634px 850px #767676, 1939px 1032px #767676, + 1571px 1958px #767676, 1648px 1378px #767676, 33px 1171px #767676, + 1848px 475px #767676, 1173px 1872px #767676, 1810px 409px #767676, + 1957px 328px #767676, 1029px 45px #767676, 333px 584px #767676, + 1998px 422px #767676, 480px 1216px #767676, 1432px 1888px #767676, + 709px 606px #767676, 555px 1702px #767676, 58px 1863px #767676, + 1839px 1633px #767676, 1349px 895px #767676, 1393px 1027px #767676, + 799px 218px #767676, 923px 1581px #767676, 1277px 271px #767676, + 142px 1086px #767676, 365px 41px #767676, 1135px 1148px #767676, + 1101px 1518px #767676, 265px 1855px #767676, 1134px 167px #767676, + 997px 770px #767676, 1172px 1332px #767676, 1573px 121px #767676, + 1925px 853px #767676, 1951px 200px #767676, 777px 1093px #767676, + 996px 278px #767676, 1328px 1296px #767676, 978px 535px #767676, + 161px 288px #767676, 1466px 310px #767676, 638px 1368px #767676, + 1407px 360px #767676, 704px 658px #767676, 1371px 1152px #767676, + 1947px 1808px #767676, 1280px 1392px #767676, 51px 499px #767676, + 1862px 1087px #767676, 563px 575px #767676, 165px 689px #767676, + 1104px 708px #767676, 1279px 1339px #767676, 1561px 899px #767676, + 1046px 49px #767676, 1916px 1992px #767676, 893px 1915px #767676, + 1404px 1555px #767676, 1203px 330px #767676, 389px 1239px #767676, + 69px 1152px #767676, 1566px 804px #767676, 341px 751px #767676, + 1775px 724px #767676, 1281px 685px #767676, 244px 1397px #767676, + 619px 1533px #767676, 169px 1812px #767676, 369px 1px #767676, + 1705px 1430px #767676, 796px 1998px #767676, 1801px 534px #767676, + 749px 1038px #767676, 429px 1533px #767676, 536px 1902px #767676, + 261px 1700px #767676, 1630px 511px #767676, 863px 925px #767676, + 435px 621px #767676, 221px 191px #767676, 734px 660px #767676, + 1032px 1017px #767676, 832px 1594px #767676, 1757px 962px #767676, + 652px 1291px #767676; height: 100%; left: 0; overflow: hidden; @@ -474,7 +807,7 @@ main { width: 2px; } -.stars>.medium::after { +.stars > .medium::after { content: " "; background: transparent; box-shadow: var(--stars-medium); diff --git a/src/styles/mobile.css b/src/styles/mobile.css index 55c15456f9..caad0340c9 100644 --- a/src/styles/mobile.css +++ b/src/styles/mobile.css @@ -1,7 +1,7 @@ @media (max-width: 1262px) and (min-width: 721px) { body { --banner-clip: polygon(0 0, 100% 0, 100% calc(100% - 52px), 0 100%); - --hero-height: 36.0rem; + --hero-height: 36rem; } .article-reader { @@ -13,7 +13,7 @@ } .side-nav { - margin-right: -36.0rem; + margin-right: -36rem; margin-bottom: calc(-100vh + var(--nav-height)); pointer-events: none; overflow: hidden; @@ -28,7 +28,7 @@ top: 0; background-color: var(--black0); transform: translateX(-120%); - transition: transform .28s; + transition: transform 0.28s; pointer-events: none; z-index: -1; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.33), 2px 0 3px rgba(0, 0, 0, 0.2); @@ -50,7 +50,7 @@ .side-nav__list { transform: translateX(-120%); - transition: transform .28s; + transition: transform 0.28s; pointer-events: none; } @@ -63,13 +63,13 @@ left: 20rem; } - .side-nav__open, .side-nav.side-nav--open .side-nav__open { + .side-nav__open, + .side-nav.side-nav--open .side-nav__open { top: 34px; margin-top: 0; display: block; pointer-events: all; } - } @media (max-width: 720px) { @@ -80,7 +80,12 @@ body { --nav-height: 5.2rem; --hero-height: 92px; - --banner-clip: polygon(0 0, 100% 0, 100% calc(100% - 52px), 0 calc(100% - 32px)); + --banner-clip: polygon( + 0 0, + 100% 0, + 100% calc(100% - 52px), + 0 calc(100% - 32px) + ); } .hero { @@ -156,7 +161,7 @@ .article-reader { width: 100%; - padding: 0 1.0rem; + padding: 0 1rem; box-sizing: border-box; } diff --git a/src/templates/learn.tsx b/src/templates/learn.tsx index 5a0258a579..aff1a9c1b7 100644 --- a/src/templates/learn.tsx +++ b/src/templates/learn.tsx @@ -1,17 +1,15 @@ import { graphql } from 'gatsby'; import React from 'react'; import Article from '../components/article'; -import Hero from '../components/hero'; import Layout from '../components/layout'; import Navigation from '../components/navigation'; import { LearnPageContext, LearnPageData } from '../types'; -type Props = { +interface Props { data: LearnPageData; pageContext: LearnPageContext; -}; - -export default ({ +} +const LearnLayout = ({ data: { doc: { frontmatter: { title, description }, @@ -21,22 +19,21 @@ export default ({ }, }, pageContext: { slug, next, previous, relativePath, navigationData }, -}: Props) => { - return ( - - -
    - - ); -}; +}: Props): React.ReactNode => ( + + +
    + +); +export default LearnLayout; export const query = graphql` query DocBySlug($slug: String!) { diff --git a/src/util/createSlug.js b/src/util/createSlug.js index ab3f525f04..4a8500b01f 100644 --- a/src/util/createSlug.js +++ b/src/util/createSlug.js @@ -11,11 +11,14 @@ function createSlug(title) { slug = slug.replace(set.from, set.to); }); - return slug - .replace(/[^\w\-]+/g, '') // Remove any non word characters - .replace(/--+/g, '-') // Replace multiple hyphens with single - .replace(/^-/, '') // Remove any leading hyphen - .replace(/-$/, ''); // Remove any trailing hyphen + return ( + slug + // eslint-disable-next-line no-useless-escape + .replace(/[^\w\-]+/g, '') // Remove any non word characters + .replace(/--+/g, '-') // Replace multiple hyphens with single + .replace(/^-/, '') // Remove any leading hyphen + .replace(/-$/, '') + ); // Remove any trailing hyphen } module.exports = createSlug; diff --git a/src/util/isScreenWithinWidth.ts b/src/util/isScreenWithinWidth.ts index 86ea88a43b..ec3a9f2f5f 100644 --- a/src/util/isScreenWithinWidth.ts +++ b/src/util/isScreenWithinWidth.ts @@ -2,9 +2,9 @@ * If the width of the viewport is lesser than this value * it means that the website is viewed in a tablet or mobile */ -const MAX_SMALL_SCREEN_WIDTH: number = 1262; +const MAX_SMALL_SCREEN_WIDTH = 1262; -const MAX_MOBILE_SCREEN_WIDTH: number = 720; +const MAX_MOBILE_SCREEN_WIDTH = 720; const isScreenWithinWidth = (maxWidth: number): boolean => { // Get viewport width @@ -17,7 +17,8 @@ const isScreenWithinWidth = (maxWidth: number): boolean => { return w <= maxWidth; }; -export const isSmallScreen = () => isScreenWithinWidth(MAX_SMALL_SCREEN_WIDTH); +export const isSmallScreen = (): boolean => + isScreenWithinWidth(MAX_SMALL_SCREEN_WIDTH); -export const isMobileScreen = () => +export const isMobileScreen = (): boolean => isScreenWithinWidth(MAX_MOBILE_SCREEN_WIDTH); diff --git a/src/util/notifyWhenStickyHeadersChange.ts b/src/util/notifyWhenStickyHeadersChange.ts deleted file mode 100644 index d3bf6d44bd..0000000000 --- a/src/util/notifyWhenStickyHeadersChange.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { StickyChange, SentinelObserverSetupOptions } from '../types'; - -/** - * Dispatches a `stickychange` custom event. - */ -const fireStickyChange = (stuck: boolean, target: HTMLElement): void => { - const detail: StickyChange = { stuck, target }; - const event: CustomEvent = new CustomEvent('stickychange', { - detail, - }); - document.dispatchEvent(event); -}; - -/** - * Adds DOM nodes (aka sentinels) in each sticky section to act as waypoints for - * figuring out scroll position. - */ -const addSentinels = ( - container: HTMLElement, - stickyElementsClassName: string, - className: string -): HTMLDivElement[] => { - const stickyElements: HTMLElement[] = Array.from( - container.querySelectorAll(`.${stickyElementsClassName}`) - ) as HTMLElement[]; - const sentinels: HTMLDivElement[] = stickyElements.map( - (stickyElement: HTMLElement) => { - const sentinel: HTMLDivElement = document.createElement('div'); - sentinel.classList.add('sticky-sentinel', className); - const appendedSentinel: HTMLDivElement = stickyElement.parentElement!.appendChild( - sentinel - ); - - return appendedSentinel; - } - ); - - return sentinels; -}; - -/** - * Sets up an intersection observer to notify when elements with the class - * `.sticky-sentinel--top` become visible/invisible at the top of the container. - */ -const observeTopSentinels = ({ - container, - stickyElementsClassName, - root = container, - headerRootMargin, -}: SentinelObserverSetupOptions): void => { - const callback: IntersectionObserverCallback = ( - entries: IntersectionObserverEntry[] - ) => { - entries.forEach((entry: IntersectionObserverEntry) => { - const targetBoundsInfo: ClientRect = entry.boundingClientRect; - const targetParentElement: HTMLElement | null = - entry.target.parentElement; - const stickyElement: HTMLElement | null = - targetParentElement && - (targetParentElement.querySelector( - `.${stickyElementsClassName}` - ) as HTMLElement); - const rootBoundsInfo: ClientRect = entry.rootBounds; - - // Started sticking - if (stickyElement && targetBoundsInfo.bottom < rootBoundsInfo.top) { - fireStickyChange(true, stickyElement); - } - - // Stopped sticking - if ( - stickyElement && - targetBoundsInfo.bottom >= rootBoundsInfo.top && - targetBoundsInfo.bottom < rootBoundsInfo.bottom - ) { - fireStickyChange(false, stickyElement); - } - }); - }; - const options: IntersectionObserverInit = { - root, - rootMargin: headerRootMargin || '0px', - threshold: [0], - }; - const observer: IntersectionObserver = new IntersectionObserver( - callback, - options - ); - - // Add the top sentinels to each section and attach an observer - const topSentinels: HTMLDivElement[] = addSentinels( - container, - stickyElementsClassName, - 'sticky-sentinel--top' - ); - topSentinels.forEach((sentinel: HTMLDivElement) => - observer.observe(sentinel) - ); -}; - -/** - * Sets up an intersection observer to notify when elements with the class - * `.sticky-sentinel--bottom` become visible/invisible at the bottom of the - * container. - */ -const observeBottomSentinels = ({ - container, - stickyElementsClassName, - root = container, - footerRootMargin, -}: SentinelObserverSetupOptions): void => { - const callback: IntersectionObserverCallback = ( - entries: IntersectionObserverEntry[] - ) => { - entries.forEach((entry: IntersectionObserverEntry) => { - const targetBoundsInfo: ClientRect = entry.boundingClientRect; - const targetParentElement: HTMLElement | null = - entry.target.parentElement; - const stickyElement: HTMLElement | null = - targetParentElement && - (targetParentElement.querySelector( - `.${stickyElementsClassName}` - ) as HTMLElement); - const rootBoundsInfo: ClientRect = entry.rootBounds; - const ratio: number = entry.intersectionRatio; - - // Started sticking - if ( - stickyElement && - targetBoundsInfo.bottom > rootBoundsInfo.top && - ratio === 1 - ) { - fireStickyChange(true, stickyElement); - } - - // Stopped sticking - if ( - stickyElement && - targetBoundsInfo.top < rootBoundsInfo.top && - targetBoundsInfo.bottom < rootBoundsInfo.bottom - ) { - fireStickyChange(false, stickyElement); - } - }); - }; - const options: IntersectionObserverInit = { - root, - rootMargin: footerRootMargin || '0px', - // Get callback slightly before element is 100% visible/invisible - threshold: [1], - }; - const observer: IntersectionObserver = new IntersectionObserver( - callback, - options - ); - - // Add the bottom sentinels to each section and attach an observer - const bottomSentinels: HTMLDivElement[] = addSentinels( - container, - stickyElementsClassName, - 'sticky-sentinel--bottom' - ); - bottomSentinels.forEach((sentinel: HTMLDivElement) => - observer.observe(sentinel) - ); -}; - -/** - * Notifies when elements that have the class `stickyElementsClassName` - * (specified in `setupOptions`) begin to stick or not. - * Note: these should be children of the `container` element. - */ -export const notifyWhenStickyHeadersChange = ( - setupOptions: SentinelObserverSetupOptions -): void => { - observeTopSentinels(setupOptions); - observeBottomSentinels(setupOptions); -}; diff --git a/src/util/outlineOnKeyboardNav.ts b/src/util/outlineOnKeyboardNav.ts index 9662f5cc8c..2d298637b4 100644 --- a/src/util/outlineOnKeyboardNav.ts +++ b/src/util/outlineOnKeyboardNav.ts @@ -7,11 +7,32 @@ const MOUSEDOWN_EVENT = 'mousedown'; let IS_MOUSE_EVENT = false; +export function handleKeyDown(event: KeyboardEvent): void { + if (event.keyCode === TAB_KEYCODE) { + IS_MOUSE_EVENT = false; + } +} + +export function handleMouseDown(): void { + IS_MOUSE_EVENT = true; +} + +export function handleFocus(event: Event): void { + if (IS_MOUSE_EVENT && event.target && event.target !== event.currentTarget) { + (event.target as Element).setAttribute(FOCUS_ATTR, 'true'); + } +} + +export function handleBlur(event: Event): void { + if (event.target !== event.currentTarget) { + (event.target as Element).removeAttribute(FOCUS_ATTR); + } +} /** * Attaches listeners for keydown, mousedown, focus, and blur to the document, * which handle adding or removing focus outline css class for mouse events. */ -export function addFocusOutlineListeners() { +export function addFocusOutlineListeners(): void { const docEl = window.document.documentElement; IS_MOUSE_EVENT = false; @@ -24,7 +45,7 @@ export function addFocusOutlineListeners() { /** * Detaches listeners */ -export function removeFocusOutlineListeners() { +export function removeFocusOutlineListeners(): void { const docEl = window.document.documentElement; if (docEl) { @@ -34,25 +55,3 @@ export function removeFocusOutlineListeners() { docEl.removeEventListener(BLUR_EVENT, handleBlur, true); } } - -export function handleKeyDown(event: KeyboardEvent) { - if (event.keyCode === TAB_KEYCODE) { - IS_MOUSE_EVENT = false; - } -} - -export function handleMouseDown(event: MouseEvent) { - IS_MOUSE_EVENT = true; -} - -export function handleFocus(event: Event) { - if (IS_MOUSE_EVENT && event.target && event.target !== event.currentTarget) { - (event.target as Element).setAttribute(FOCUS_ATTR, 'true'); - } -} - -export function handleBlur(event: Event) { - if (event.target !== event.currentTarget) { - (event.target as Element).removeAttribute(FOCUS_ATTR); - } -} diff --git a/src/util/scrollTo.tsx b/src/util/scrollTo.tsx index 045aa80572..89e554f369 100644 --- a/src/util/scrollTo.tsx +++ b/src/util/scrollTo.tsx @@ -1,12 +1,15 @@ import { isMobileScreen } from './isScreenWithinWidth'; +/* eslint-disable */ +// this is from stack overflow I assume const easeInOutCubic = (t: number, b: number, c: number, d: number) => (t /= d / 2) < 1 ? (c / 2) * t * t * t + b : (c / 2) * ((t -= 2) * t * t + 2) + b; +/* eslint-enable */ export function scrollTo( - scrollTo: number, + scrollToPoint: number, element: HTMLElement | null = null, duration: number = 333 ): Promise { @@ -15,12 +18,12 @@ export function scrollTo( window.pageYOffset || document.documentElement.scrollTop) - ((element && element.clientTop) || 0); - const change = scrollTo - start; + const change = scrollToPoint - start; let previousTime = window.performance.now(); let currentTime = 0; - return new Promise((resolve, _reject) => { - const animateScroll = () => { + return new Promise((resolve): void => { + const animateScroll = (): void => { const time = window.performance.now(); const increment = time - previousTime; previousTime = time; @@ -41,10 +44,16 @@ export function scrollTo( const SPEED_MODIFIER = 0.9; const BASE_TIME = 500; +interface ScrollParams { + newScrollPos: number; + scrollWindow: null | HTMLElement; + scrollTime: number; +} + export const calcNavScrollParams = ( linkHeight: number, navElement: HTMLElement -) => { +): ScrollParams => { const navRect = navElement.getBoundingClientRect(); let newScrollPos: number; let scrollWindow: HTMLElement | null; diff --git a/src/util/tocFormatter.ts b/src/util/tocFormatter.ts index 422b1b36aa..aa28f4e6da 100644 --- a/src/util/tocFormatter.ts +++ b/src/util/tocFormatter.ts @@ -1,5 +1,5 @@ // See related issue: https://github.com/gatsbyjs/gatsby/issues/8982 -export function fixTocCodeTag(tocLinks: string = '') { +export function fixTocCodeTag(tocLinks: string = ''): string { const lessThanSignRegex = /</gi; return tocLinks.replace(lessThanSignRegex, '<'); diff --git a/test-setup.js b/test-setup.js index 530bd30b3c..d08bba40ab 100644 --- a/test-setup.js +++ b/test-setup.js @@ -1,3 +1,4 @@ +// eslint-disable-next-line no-underscore-dangle global.___loader = { enqueue: jest.fn(), }; diff --git a/test/__mocks__/gatsby.js b/test/__mocks__/gatsby.js index b6535f1ab5..ee36affb2b 100644 --- a/test/__mocks__/gatsby.js +++ b/test/__mocks__/gatsby.js @@ -1,14 +1,13 @@ const React = require('react'); + const gatsby = jest.requireActual('gatsby'); module.exports = { ...gatsby, graphql: jest.fn(), - Link: jest.fn().mockImplementation(({ to, ...rest }) => - React.createElement('a', { + Link: jest.fn().mockImplementation(({ to, ...rest }) => React.createElement('a', { ...rest, href: to, - }) - ), + })), StaticQuery: jest.fn(), }; diff --git a/test/util/outlineOnKeyboardNav.test.js b/test/util/outlineOnKeyboardNav.test.js index 55fe031537..d37f00eb99 100644 --- a/test/util/outlineOnKeyboardNav.test.js +++ b/test/util/outlineOnKeyboardNav.test.js @@ -4,6 +4,7 @@ import { handleKeyDown, handleBlur, } from '../../src/util/outlineOnKeyboardNav'; + describe('Tests for focus and blur handlers', () => { const FOCUS_ATTR = 'data-is-focused'; const TAB_KEYCODE = 9; diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 10e7dfce13..0000000000 --- a/tslint.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "extends": ["tslint-react", "tslint-config-prettier"], - "jsRules": { - "no-empty": true - }, - "rules": { - "array-type": [true, "array"], - "arrow-return-shorthand": true, - "ban": false, - "class-name": true, - "comment-format": [true, "check-space"], - "curly": true, - "eofline": false, - "forin": true, - "import-blacklist": [true, "lodash-es"], - "indent": [true, "spaces"], - "interface-name": [true, "never-prefix"], - "jsdoc-format": true, - "jsx-boolean-value": [true, "never"], - "jsx-no-lambda": false, - "jsx-no-multiline-js": false, - "label-position": true, - "newline-before-return": true, - "no-any": true, - "no-arg": true, - "no-bitwise": true, - "no-console": [ - true, - "log", - "error", - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-consecutive-blank-lines": true, - "no-construct": true, - "no-debugger": true, - "no-duplicate-variable": true, - "no-empty": true, - "no-eval": true, - "no-implicit-dependencies": [true, "dev"], - "no-string-literal": true, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": false, - "no-unnecessary-callback-wrapper": true, - "no-unused-expression": true, - "one-line": [ - true, - "check-catch", - "check-else", - "check-open-brace", - "check-whitespace" - ], - "prefer-const": true, - "quotemark": [true, "single", "jsx-double"], - "radix": true, - "switch-default": true, - "triple-equals": [true, "allow-null-check"], - "typedef": [true, "parameter", "property-declaration"], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-module", - "check-operator", - "check-separator", - "check-type", - "check-typecast" - ] - } -} diff --git a/yarn.lock b/yarn.lock index c39019691e..0bb15d886d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1665,6 +1665,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -1774,7 +1779,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^1.13.0": +"@typescript-eslint/eslint-plugin@^1.13.0", "@typescript-eslint/eslint-plugin@^1.4.2": version "1.13.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f" integrity sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g== @@ -1785,7 +1790,7 @@ regexpp "^2.0.1" tsutils "^3.7.0" -"@typescript-eslint/experimental-utils@1.13.0": +"@typescript-eslint/experimental-utils@1.13.0", "@typescript-eslint/experimental-utils@^1.13.0": version "1.13.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== @@ -3113,11 +3118,6 @@ buffer@^5.2.0, buffer@^5.2.1: base64-js "^1.0.2" ieee754 "^1.1.4" -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - builtin-modules@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" @@ -3336,7 +3336,7 @@ chalk@2.3.1: escape-string-regexp "^1.0.5" supports-color "^5.2.0" -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3665,7 +3665,7 @@ command-exists@^1.2.2: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291" integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw== -commander@^2.11.0, commander@^2.12.1, commander@^2.20.0, commander@~2.20.0: +commander@^2.11.0, commander@^2.20.0, commander@~2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== @@ -3782,7 +3782,7 @@ configstore@^5.0.0: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" -confusing-browser-globals@^1.0.7: +confusing-browser-globals@^1.0.5, confusing-browser-globals@^1.0.7: version "1.0.8" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz#93ffec1f82a6e2bf2bc36769cc3a92fa20e502f3" integrity sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg== @@ -4448,6 +4448,11 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deepmerge@^2.0.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + deepmerge@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09" @@ -4620,11 +4625,6 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -5094,6 +5094,31 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +eslint-config-airbnb-base@^13.2.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz#f6ea81459ff4dec2dda200c35f1d8f7419d57943" + integrity sha512-1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w== + dependencies: + confusing-browser-globals "^1.0.5" + object.assign "^4.1.0" + object.entries "^1.1.0" + +eslint-config-airbnb@^17.1.0: + version "17.1.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.1.tgz#2272e0b86bb1e2b138cdf88d07a3b6f4cda3d626" + integrity sha512-xCu//8a/aWqagKljt+1/qAM62BYZeNq04HmdevG5yUGWpja0I/xhqd6GdLRch5oetEGFiJAnvtGuTEAese53Qg== + dependencies: + eslint-config-airbnb-base "^13.2.0" + object.assign "^4.1.0" + object.entries "^1.1.0" + +eslint-config-prettier@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-4.3.0.tgz#c55c1fcac8ce4518aeb77906984e134d9eb5a4f0" + integrity sha512-sZwhSTHVVz78+kYD3t5pCWSYEdVSBR0PXnwjDRsUs8ytIrK8PLXw+6FKp8r3Z7rx4ZszdetWlXYKOHoUrrwPlA== + dependencies: + get-stdin "^6.0.0" + eslint-config-react-app@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-4.0.1.tgz#23fd0fd7ea89442ef1e733f66a7207674b23c8db" @@ -5109,6 +5134,15 @@ eslint-import-resolver-node@^0.3.2: debug "^2.6.9" resolve "^1.5.0" +eslint-import-resolver-typescript@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-1.1.1.tgz#e6d42172b95144ef16610fe104ef38340edea591" + integrity sha512-jqSfumQ+H5y3FUJ6NjRkbOQSUOlbBucGTN3ELymOtcDBbPjVdm/luvJuCfCaIXGh8sEF26ma1qVdtDgl9ndhUg== + dependencies: + debug "^4.0.1" + resolve "^1.4.0" + tsconfig-paths "^3.6.0" + eslint-loader@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" @@ -5143,7 +5177,7 @@ eslint-plugin-graphql@^3.0.3: graphql-config "^2.0.1" lodash "^4.11.1" -eslint-plugin-import@^2.18.2: +eslint-plugin-import@^2.16.0, eslint-plugin-import@^2.18.2: version "2.18.2" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== @@ -5160,7 +5194,14 @@ eslint-plugin-import@^2.18.2: read-pkg-up "^2.0.0" resolve "^1.11.0" -eslint-plugin-jsx-a11y@^6.2.3: +eslint-plugin-jest@^22.17.0: + version "22.17.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.17.0.tgz#dc170ec8369cd1bff9c5dd8589344e3f73c88cf6" + integrity sha512-WT4DP4RoGBhIQjv+5D0FM20fAdAUstfYAf/mkufLNTojsfgzc5/IYW22cIg/Q4QBavAZsROQlqppiWDpFZDS8Q== + dependencies: + "@typescript-eslint/experimental-utils" "^1.13.0" + +eslint-plugin-jsx-a11y@^6.2.1, eslint-plugin-jsx-a11y@^6.2.3: version "6.2.3" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== @@ -5175,12 +5216,19 @@ eslint-plugin-jsx-a11y@^6.2.3: has "^1.0.3" jsx-ast-utils "^2.2.1" -eslint-plugin-react-hooks@^1.7.0: +eslint-plugin-prettier@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz#8695188f95daa93b0dc54b249347ca3b79c4686d" + integrity sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react-hooks@^1.4.0, eslint-plugin-react-hooks@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA== -eslint-plugin-react@^7.14.3: +eslint-plugin-react@^7.12.4, eslint-plugin-react@^7.14.3: version "7.14.3" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz#911030dd7e98ba49e1b2208599571846a66bdf13" integrity sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA== @@ -5215,7 +5263,7 @@ eslint-visitor-keys@^1.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^5.16.0: +eslint@^5.14.1, eslint@^5.16.0: version "5.16.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== @@ -5597,6 +5645,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + fast-glob@^2.0.2, fast-glob@^2.2.2: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -11273,6 +11326,13 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + prettier@^1.16.4: version "1.18.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" @@ -12228,7 +12288,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== @@ -13744,49 +13804,22 @@ ts-pnp@^1.1.2: resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.2.tgz#be8e4bfce5d00f0f58e0666a82260c34a57af552" integrity sha512-f5Knjh7XCyRIzoC/z1Su1yLLRrPrFCgtUAh/9fCSP6NKbATwpOL1+idQVXQokK9GRFURn/jYPGPfegIctwunoA== -tslib@^1.6.0, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: +tsconfig-paths@^3.6.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.8.0.tgz#4e34202d5b41958f269cf56b01ed95b853d59f72" + integrity sha512-zZEYFo4sjORK8W58ENkRn9s+HmQFkkwydDG7My5s/fnfr2YYCaiyXe/HBUcIgU8epEKOXwiahOO+KZYjiXlWyQ== + dependencies: + "@types/json5" "^0.0.29" + deepmerge "^2.0.1" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.6.0, tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tslint-config-prettier@^1.15.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" - integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== - -tslint-react@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-3.6.0.tgz#7f462c95c4a0afaae82507f06517ff02942196a1" - integrity sha512-AIv1QcsSnj7e9pFir6cJ6vIncTqxfqeFF3Lzh8SuuBljueYzEAtByuB6zMaD27BL0xhMEqsZ9s5eHuCONydjBw== - dependencies: - tsutils "^2.13.1" - -tslint@^5.11.0: - version "5.19.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.19.0.tgz#a2cbd4a7699386da823f6b499b8394d6c47bb968" - integrity sha512-1LwwtBxfRJZnUvoS9c0uj8XQtAnyhWr9KlNvDIdB+oXyT+VpsOAaEhEgKi1HrZ8rq0ki/AAnbGSv4KM6/AfVZw== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.13.1, tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - tsutils@^3.7.0: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"