wip
This commit is contained in:
parent
7dbdc345da
commit
c4993f6540
23 changed files with 458 additions and 102 deletions
|
@ -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',
|
||||
|
|
|
@ -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": {
|
||||
|
|
40
src/components/Button/index.tsx
Normal file
40
src/components/Button/index.tsx
Normal 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>
|
||||
);
|
||||
}
|
49
src/components/Goals/index.tsx
Normal file
49
src/components/Goals/index.tsx
Normal 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>
|
||||
);
|
||||
}
|
20
src/components/Headline/index.tsx
Normal file
20
src/components/Headline/index.tsx
Normal 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>
|
||||
);
|
||||
}
|
23
src/components/Hero/index.tsx
Normal file
23
src/components/Hero/index.tsx
Normal 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>
|
||||
);
|
||||
}
|
11
src/components/PatternBg/index.tsx
Normal file
11
src/components/PatternBg/index.tsx
Normal 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>
|
||||
);
|
||||
}
|
3
src/components/PatternBg/styles.module.css
Normal file
3
src/components/PatternBg/styles.module.css
Normal file
|
@ -0,0 +1,3 @@
|
|||
.bg {
|
||||
background-image: url('data:image/webp;base64,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');
|
||||
}
|
86
src/components/Projects/index.tsx
Normal file
86
src/components/Projects/index.tsx
Normal 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
93
src/fonts/LICENSE
Normal 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.
|
BIN
src/fonts/dmsans-bold-latin-ext.woff2
Normal file
BIN
src/fonts/dmsans-bold-latin-ext.woff2
Normal file
Binary file not shown.
BIN
src/fonts/dmsans-bold-latin.woff2
Normal file
BIN
src/fonts/dmsans-bold-latin.woff2
Normal file
Binary file not shown.
BIN
src/fonts/dmsans-latin-ext.woff2
Normal file
BIN
src/fonts/dmsans-latin-ext.woff2
Normal file
Binary file not shown.
BIN
src/fonts/dmsans-latin.woff2
Normal file
BIN
src/fonts/dmsans-latin.woff2
Normal file
Binary file not shown.
14
src/icons/LICENSE
Normal file
14
src/icons/LICENSE
Normal 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
4
src/icons/dots.svg
Normal 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
4
src/icons/expand.svg
Normal 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
4
src/icons/humidity.svg
Normal 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
5
src/icons/layers.svg
Normal 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
5
src/icons/scale.svg
Normal 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 |
|
@ -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>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"),
|
||||
],
|
||||
};
|
||||
|
|
33
yarn.lock
33
yarn.lock
|
@ -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"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue