This commit is contained in:
Igor Brylev 2025-02-28 17:24:40 +03:00
parent 7dbdc345da
commit c4993f6540
23 changed files with 458 additions and 102 deletions

View file

@ -26,13 +26,10 @@ const config: Config = {
src: 'img/logo.svg',
},
items: [
{
to: 'docs/',
activeBasePath: 'docs',
label: 'Документация',
position: 'left',
},
{to: 'blog', label: 'Проекты', position: 'left'},
{to: 'blog', label: 'Новости', position: 'left'},
{to: 'blog', label: 'Команда', position: 'left'},
{to: 'blog', label: 'Как помочь', position: 'left'},
{
href: 'https://t.me/robossembler_ru',
label: 'Telegram',

View file

@ -35,6 +35,7 @@
"tailwind-merge": "^2.6.0",
"tailwindcss": "^3.4.17",
"tailwindcss-animate": "^1.0.7",
"@tailwindcss/typography": "^0.5.10",
"typescript": "~5.6.2"
},
"browserslist": {

View file

@ -0,0 +1,40 @@
import React from "react";
import clsx from "clsx";
import Link, { Props } from "@docusaurus/Link";
type ButtonProps = Props & {
variant: "primary" | "secondary";
};
export default function Button({
children,
variant,
className,
...rest
}: ButtonProps) {
const computedClassName = clsx(
"border font-bold h-12 px-6 flex items-center hover:no-underline transition-colors",
variant === "primary" &&
"bg-brand-500 text-gray-900 hover:bg-brand-600 border-brand-500 hover:border-brand-600 hover:text-gray-900",
variant === "secondary" &&
"border-gray-200 dark:border-gray-800 text-gray-900 dark:text-gray-50 bg-transparent hover:border-gray-900 dark:hover:border-gray-50 hover:text-gray-900 dark:hover:text-gray-50 aria-selected:border-gray-900 dark:aria-selected:border-gray-50",
className,
);
if ("href" in rest) {
return (
<Link {...rest} className={computedClassName}>
{children}
</Link>
);
}
return (
<button
{...(rest as unknown as React.ButtonHTMLAttributes<HTMLButtonElement>)}
className={computedClassName}
>
{children}
</button>
);
}

View file

@ -0,0 +1,49 @@
import React, { ComponentType, SVGProps } from "react";
import ExpandIcon from "../../icons/expand.svg";
import DotsIcon from "../../icons/dots.svg";
import ScaleIcon from "../../icons/scale.svg";
import LayersIcon from "../../icons/layers.svg";
import HumidityIcon from "../../icons/humidity.svg";
type GoalProps = {
icon: ComponentType<SVGProps<SVGSVGElement>>;
title: string;
description: string;
};
function Goal({ icon: Icon, title, description }: GoalProps) {
return (
<div className="bg-white dark:bg-blue-900 p-6">
<Icon className="w-12 mb-4" aria-hidden />
<h3 className="text-xl mb-2">{title}</h3>
<p className="text-gray-600 dark:text-gray-500">{description}</p>
</div>
);
}
export default function Goals() {
return (
<section className="py-6 md:py-12 mx-auto container px-4">
<h2 className="text-center text-3xl md:text-5xl font-bold mb-6 md:mb-12">
Наши принципы
</h2>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<Goal
icon={ExpandIcon}
title="Open Source"
description="Робосборщик выстраивает мост между инженерами, потребителями и производителями, позволяя добиться оптимального результата."
/>
<Goal
icon={DotsIcon}
title="Полная автоматизация"
description="Робосборщик выстраивает мост между инженерами, потребителями и производителями, позволяя добиться оптимального результата."
/>
<Goal
icon={ScaleIcon}
title="Децентрализация"
description="Робосборщик выстраивает мост между инженерами, потребителями и производителями, позволяя добиться оптимального результата."
/>
</div>
</section>
);
}

View file

@ -0,0 +1,20 @@
import clsx from "clsx";
import React from "react";
type HeadlineProps = {
children: React.ReactNode;
className?: string;
};
export default function Headline({ children, className }: HeadlineProps) {
return (
<h1
className={clsx(
"text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold leading-normal lg:leading-tight tracking-wider text-center px-4",
className,
)}
>
{children}
</h1>
);
}

View file

@ -0,0 +1,23 @@
import React from "react";
import Button from "../Button";
import PatternBg from "../PatternBg";
import Headline from "../Headline";
export default function Hero() {
return (
<header className="flex flex-col items-center py-10 md:py-20 px-6 md:px-16 mx-auto">
<PatternBg />
<Headline className="sm:max-w-2xl md:max-w-3xl lg:max-w-4xl">
Отворённые роботы
</Headline>
<p className="my-6 text-xl sm:max-w-lg md:max-w-xl lg:max-w-2xl text-center text-gray-600 dark:text-gray-500">
Мы в Robossembler создаём набор открытых технологий, чтобы самая современная робототехника стала доступной каждому
</p>
<div className="flex gap-4 pt-6">
<Button variant="primary" href="/docs/intro/install">
Проекты
</Button>
</div>
</header>
);
}

View file

@ -0,0 +1,11 @@
import React from "react";
import styles from "./styles.module.css";
export default function PatternBg() {
return (
<div className="absolute top-0 left-0 right-0 h-[600px] -z-10" aria-hidden>
<div className="absolute inset-0 z-10 bg-gradient-to-b from-transparent to-gray-50 dark:to-blue-950" />
<div className={`${styles.bg} w-full h-full opacity-5`} />
</div>
);
}

View file

@ -0,0 +1,3 @@
.bg {
background-image: url('data:image/webp;base64,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');
}

View file

@ -0,0 +1,86 @@
import clsx from 'clsx';
import Link from '@docusaurus/Link';
import useBaseUrl from '@docusaurus/useBaseUrl';
// import styles from './index.module.css';
const features = [
{
title: 'Сервопривод',
imageUrl: 'img/servo-reducer-assembled.jpg',
description: (
<>
Сервопривод собственной разработки с оригинальным контроллером, outrunner-двигателем и прецессирующим редуктором. Конструкция привода оптимизирована для простой сборки с минимальным количеством комплектующих. Большая часть деталей может быть изготовлена на 3D-принтере, включая статор.
</>
),
repourl: 'https://gitlab.com/robossembler/servo',
},
{
title: 'Робот-манипулятор',
imageUrl: 'img/robossembler-arm.jpg',
description: (
<>
Реконфигурируемый шести-осевой робот-манипулятор без металлического крепежа с симметричным стыковочным интерфейсом. Количество компонентов изделия сведено к минимуму около 100 сборочных деталей. Дизайн подразумевает автоматическую сборку в перспективе такие роботы смогут собирать себя сами.
</>
),
repourl: 'https://gitlab.com/robossembler/roboarm-diy-version',
},
{
title: 'Станок намотки',
imageUrl: 'img/winder.jpg',
description: (
<>
Намоточная машина для автоматического производства статоров/роторов. Программа намотки генерируется автоматически, исходя из параметров двигателя, что позволяет использовать станок для разных конфигураций малогабаритных электродвигателей. Большинство деталей станка могут быть изготовлены на 3D-принтере.
</>
),
repourl: 'https://gitlab.com/robossembler/cnc/motor-wire-winder',
},
{
title: 'Фреймворк Робосборщик',
imageUrl: 'img/webservice.jpg',
description: (
<>
Программный комплекс для программирования и обучения роботов на базе современных технологий робототехники: ROS 2 Jazzy, Lifecycle Nodes, Behavior Tree,
</>
),
repourl: 'https://gitlab.com/robossembler/robossembler-ros2',
},
];
function Feature({ imageUrl, title, description }) {
const imgUrl = useBaseUrl(imageUrl);
return (
<div className={clsx('col col--6')}>
{imgUrl && (
<div>
<img src={imgUrl} alt={title} />
</div>
)}
<h1>{title}</h1>
<p>{description}</p>
</div>
);
}
export default function Home() {
return (
<div>
<h2 className="text-center text-3xl md:text-5xl font-bold mb-6 md:mb-12">
Проекты
</h2>
<main>
{features && features.length > 0 && (
<section>
<div className="container">
<div className="row">
{features.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
</div>
</section>
)}
</main>
</div>
);
}

93
src/fonts/LICENSE Normal file
View file

@ -0,0 +1,93 @@
Copyright 2014 The DM Sans Project Authors (https://github.com/googlefonts/dm-fonts)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://openfontlicense.org
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

14
src/icons/LICENSE Normal file
View file

@ -0,0 +1,14 @@
Copyright © Nucleo
Version 1.3, January 3, 2024
Nucleo Icons
https://nucleoapp.com/
- Redistribution of icons is prohibited.
- Icons are restricted for use only within the product they are bundled with.
For more details:
https://nucleoapp.com/license

4
src/icons/dots.svg Normal file
View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 48 48">
<path class="fill-brand-300" d="M19.75 18.25C20.917 19.417 22.333 20 24 20c1.667 0 3.083-.583 4.25-1.75C29.417 17.083 30 15.667 30 14c0-1.667-.583-3.083-1.75-4.25C27.083 8.583 25.667 8 24 8c-1.667 0-3.083.583-4.25 1.75C18.583 10.917 18 12.333 18 14c0 1.667.583 3.083 1.75 4.25Z"/>
<path class="fill-brand-600" d="M12 40c-1.667 0-3.083-.583-4.25-1.75C6.583 37.083 6 35.667 6 34c0-1.667.583-3.083 1.75-4.25C8.917 28.583 10.333 28 12 28c1.667 0 3.083.583 4.25 1.75C17.417 30.917 18 32.333 18 34c0 1.667-.583 3.083-1.75 4.25C15.083 39.417 13.667 40 12 40Zm24 0c-1.667 0-3.083-.583-4.25-1.75C30.583 37.083 30 35.667 30 34c0-1.667.583-3.083 1.75-4.25C32.917 28.583 34.333 28 36 28c1.667 0 3.083.583 4.25 1.75C41.417 30.917 42 32.333 42 34c0 1.667-.583 3.083-1.75 4.25C39.083 39.417 37.667 40 36 40Z"/>
</svg>

After

Width:  |  Height:  |  Size: 876 B

4
src/icons/expand.svg Normal file
View file

@ -0,0 +1,4 @@
<svg viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M34 14V22H38V10H26V14H34Z" class="fill-brand-600"/>
<path d="M10 38V26H14V34H22V38H10Z" class="fill-brand-300"/>
</svg>

After

Width:  |  Height:  |  Size: 202 B

4
src/icons/humidity.svg Normal file
View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 48 48">
<path class="fill-brand-300" d="m16.441 18.296 5.568 5.568-5.568 5.567a7.873 7.873 0 1 1 0-11.135Z"/>
<path class="fill-brand-600" d="m29.703 18.296-5.567 5.568 5.567 5.567a7.874 7.874 0 1 0 0-11.135Z"/>
</svg>

After

Width:  |  Height:  |  Size: 284 B

5
src/icons/layers.svg Normal file
View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 48 48">
<path class="fill-brand-200" d="m33.645 24.99-9.14 6.444-9.14-6.444 9.14-6.433L33.645 25v-.01Z"/>
<path class="fill-brand-300" d="M15.364 25 10 28.778 24.505 39l14.504-10.222L33.645 25l-9.14 6.443L15.365 25Z"/>
<path class="fill-brand-600" d="M33.636 25 39 21.222 24.505 11 10 21.222 15.364 25l9.14-6.443L33.646 25h-.01Z"/>
</svg>

After

Width:  |  Height:  |  Size: 404 B

5
src/icons/scale.svg Normal file
View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 48 48">
<path class="fill-brand-600" d="M5.75 21.25C6.917 22.417 8.333 23 10 23c1.667 0 3.083-.583 4.25-1.75C15.417 20.083 16 18.667 16 17c0-1.667-.583-3.083-1.75-4.25C13.083 11.583 11.667 11 10 11c-1.667 0-3.083.583-4.25 1.75C4.583 13.917 4 15.333 4 17c0 1.667.583 3.083 1.75 4.25Z"/>
<path class="fill-brand-300" d="M33.75 21.25C34.917 22.417 36.333 23 38 23c1.667 0 3.083-.583 4.25-1.75C43.417 20.083 44 18.667 44 17c0-1.667-.583-3.083-1.75-4.25C41.083 11.583 39.667 11 38 11c-1.667 0-3.083.583-4.25 1.75C32.583 13.917 32 15.333 32 17c0 1.667.583 3.083 1.75 4.25Z"/>
<path class="fill-brand-200" d="M6 27h37v5H6zM30 41a6 6 0 1 0-12 0h12Z"/>
</svg>

After

Width:  |  Height:  |  Size: 716 B

View file

@ -1,103 +1,27 @@
import clsx from 'clsx';
import Link from '@docusaurus/Link';
import React from "react";
import Layout from "@theme/Layout";
import Hero from "../components/Hero";
import Projects from "../components/Projects";
// import Supporters from "../components/Supporters";
// import FAQ from "../components/FAQ";
// import HowToContribute from "../components/HowToContribute";
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Layout from '@theme/Layout';
import useBaseUrl from '@docusaurus/useBaseUrl';
import styles from './index.module.css';
const features = [
{
title: 'Сервопривод',
imageUrl: 'img/servo-reducer-assembled.jpg',
description: (
<>
Сервопривод собственной разработки с оригинальным контроллером, outrunner-двигателем и прецессирующим редуктором. Конструкция привода оптимизирована для простой сборки с минимальным количеством комплектующих. Большая часть деталей может быть изготовлена на 3D-принтере, включая статор.
</>
),
repourl: 'https://gitlab.com/robossembler/servo',
},
{
title: 'Робот-манипулятор',
imageUrl: 'img/robossembler-arm.jpg',
description: (
<>
Реконфигурируемый шести-осевой робот-манипулятор без металлического крепежа с симметричным стыковочным интерфейсом. Количество компонентов изделия сведено к минимуму около 100 сборочных деталей. Дизайн подразумевает автоматическую сборку в перспективе такие роботы смогут собирать себя сами.
</>
),
repourl: 'https://gitlab.com/robossembler/roboarm-diy-version',
},
{
title: 'Станок намотки',
imageUrl: 'img/winder.jpg',
description: (
<>
Намоточная машина для автоматического производства статоров/роторов. Программа намотки генерируется автоматически, исходя из параметров двигателя, что позволяет использовать станок для разных конфигураций малогабаритных электродвигателей. Большинство деталей станка могут быть изготовлены на 3D-принтере.
</>
),
repourl: 'https://gitlab.com/robossembler/cnc/motor-wire-winder',
},
{
title: 'Фреймворк Робосборщик',
imageUrl: 'img/webservice.jpg',
description: (
<>
Программный комплекс для программирования и обучения роботов на базе современных технологий робототехники: ROS 2 Jazzy, Lifecycle Nodes, Behavior Tree,
</>
),
repourl: 'https://gitlab.com/robossembler/robossembler-ros2',
},
];
function Feature({ imageUrl, title, description }) {
const imgUrl = useBaseUrl(imageUrl);
return (
<div className={clsx('col col--6', styles.feature)}>
{imgUrl && (
<div>
<img className={styles.featureImage} src={imgUrl} alt={title} />
</div>
)}
<h1>{title}</h1>
<p>{description}</p>
</div>
);
}
import Goals from "../components/Goals";
export default function Home() {
const {siteConfig} = useDocusaurusContext();
return (
<Layout
title={siteConfig.title}
description="Промышленная робототехника с открытыми конструкторской документацией и исходным кодом">
<header className={clsx('hero hero--primary', styles.heroBanner)}>
<div className="container">
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<Link
className={clsx(
'button button--outline button--secondary button--lg',
styles.getStarted,
)}
to={useBaseUrl('docs/')}>
Обзор репозиториев
</Link>
</div>
</div>
</header>
<main>
{features && features.length > 0 && (
<section className={styles.features}>
<div className="container">
<div className="row">
{features.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
</div>
</section>
)}
</main>
<Hero />
<Goals />
<Projects />
{/* <Hero />
<HowToContribute />
<FAQ />
<Supporters /> */}
</Layout>
);
}
}

View file

@ -7,7 +7,7 @@ module.exports = {
container: false,
},
darkMode: ["class", '[data-theme="dark"]'],
content: ["./src/**/*.{jsx,tsx,html}"],
content: ["./src/**/*.{js,jsx,ts,tsx,svg}"],
theme: {
extend: {
fontFamily: {
@ -22,8 +22,48 @@ module.exports = {
sm: "0px",
lg: "997px",
},
colors: {},
colors: {
fontSize: {
"5xl": "2.5rem",
},
brand: {
900: "#332c05",
850: "#4d4107",
800: "#66570a",
700: "#b29911",
650: "#e6b600",
600: "#f0cd14",
500: "#ffda18",
400: "#ffe146",
300: "#ffe974",
200: "#fff0a3",
150: "#fff4ba",
100: "#fff8d1",
50: "#fffbe8",
},
gray: {
950: "#0D0E10",
900: "#1B1D20",
850: "#282B31",
800: "#353A41",
700: "#505661",
600: "#6A7382",
500: "#8590A2",
400: "#9DA6B5",
300: "#B6BCC7",
200: "#CED3DA",
150: "#DADEE3",
100: "#E7E9EC",
50: "#F9F9F9",
},
blue: {
950: "#0c192b",
900: "#14253D",
},
},
},
},
plugins: [],
plugins: [
require("@tailwindcss/typography"),
],
};

View file

@ -2362,6 +2362,16 @@
dependencies:
defer-to-connect "^2.0.1"
"@tailwindcss/typography@^0.5.10":
version "0.5.16"
resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.16.tgz#a926c8f44d5c439b2915e231cad80058850047c6"
integrity sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==
dependencies:
lodash.castarray "^4.4.0"
lodash.isplainobject "^4.0.6"
lodash.merge "^4.6.2"
postcss-selector-parser "6.0.10"
"@trysound/sax@0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
@ -5970,16 +5980,31 @@ locate-path@^7.1.0:
dependencies:
p-locate "^6.0.0"
lodash.castarray@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115"
integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==
lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
lodash.isplainobject@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
lodash.merge@^4.6.2:
version "4.6.2"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
lodash.uniq@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
@ -7861,6 +7886,14 @@ postcss-selector-not@^8.0.1:
dependencies:
postcss-selector-parser "^7.0.0"
postcss-selector-parser@6.0.10:
version "6.0.10"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
dependencies:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
version "6.0.15"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535"