gman 2 years ago
commit 600ceb84f8

1832
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -11,14 +11,18 @@
},
"dependencies": {
"@emotion/react": "^11.11.1",
"@mantine/core": "^6.0.17",
"@mantine/hooks": "^6.0.17",
"@mantine/carousel": "^6.0.21",
"@mantine/core": "^6.0.21",
"@mantine/hooks": "^6.0.21",
"@tabler/icons-react": "^2.28.0",
"embla-carousel-react": "^7.0.0",
"fuse.js": "^6.6.2",
"maplibre-gl": "^3.2.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-map-gl": "^7.1.3"
"react-map-gl": "^7.1.3",
"react-markdown": "^9.0.0",
"react-router-dom": "^6.16.0"
},
"devDependencies": {
"@types/react": "^18.2.15",

@ -1,4 +1,10 @@
import { Box } from '@mantine/core';
import {
createBrowserRouter,
RouterProvider,
useLoaderData,
} from 'react-router-dom';
import { KartaPage } from './KartaPage';
import { Landing } from './Landing';
import { Article } from './Article';
@ -7,14 +13,37 @@ import { FooterLinks } from './Footer';
import headerLinks from './assets/header.json';
import footerLinks from './assets/footer.json';
const articleLoader = async function({ params }) {
const response = await fetch("http://strapi.wg.gateway.ts/api/articles?filters[id][$eq]=3")
const article = await response.json()
return article;
}
const router = createBrowserRouter([
{
path: "/",
element: <KartaPage />
},
{
path: "/about",
element: <Landing />
},
{
path: "/article/:id",
element: <Article />,
loader: async ({ params }) => {
return fetch(`http://strapi.wg.gateway.ts/api/articles?populate=*&filters[id][$eq]=${params.id}`);
},
}
])
function App() {
return (
<Box pos={'absolute'} w={'100%'} top={0}>
<HeaderSimple links={headerLinks.links} />
<KartaPage></KartaPage>
{/* <Article></Article> */}
{/* <Landing></Landing> */}
<RouterProvider router={router} />
<FooterLinks data={footerLinks.data} />
</Box >
);

@ -1,4 +1,7 @@
import { Title, Text, Container, Blockquote, rem, createStyles } from '@mantine/core';
import { Title, Container, rem, createStyles, TypographyStylesProvider, Image } from '@mantine/core';
import { Carousel } from '@mantine/carousel';
import { useLoaderData } from 'react-router-dom';
import Markdown from 'react-markdown';
const useStyles = createStyles((theme) => ({
content: {
@ -6,12 +9,10 @@ const useStyles = createStyles((theme) => ({
},
title: {
color: theme.colorScheme === 'dark' ? theme.white : theme.black,
fontFamily: `Greycliff CF, ${theme.fontFamily}`,
fontSize: rem(55),
lineHeight: 1.2,
fontWeight: 900,
padding: rem(20),
paddingBottom: rem(20),
[theme.fn.smallerThan('xs')]: {
fontSize: rem(28),
},
@ -23,47 +24,35 @@ const useStyles = createStyles((theme) => ({
}
}));
export function Article() {
const articleData = useLoaderData();
const { classes } = useStyles();
const article = articleData.data[0].attributes
console.log(articleData)
const generateCarousel = () => {
if (articleData.data[0].attributes.carousel.data) {
return (
<Carousel slideSize="70%" height={500} slideGap="md" loop>
{articleData.data[0].attributes.carousel.data.map(image => <Carousel.Slide><Image fit='fill' height={500} mx="auto" radius="md" src={`http://strapi.wg.gateway.ts${image.attributes.url}`} alt="Random image" /></Carousel.Slide>)}
</Carousel>
)
}
}
return (
<Container className={classes.content}>
<Title order={1} className={classes.title}>
Михаил Михайлович Пришвин
</Title>
<Text>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quis iusto blanditiis exercitationem voluptates itaque eligendi, consequatur in distinctio eius explicabo. Aliquid in vel explicabo assumenda, molestiae consequatur illum eius voluptates? Lorem ipsum dolor sit amet consectetur, adipisicing elit. Ipsum, a similique reprehenderit nesciunt corporis nemo autem neque, ratione assumenda eveniet ex maxime quae vero non expedita dicta. Laudantium, ea numquam?
Explicabo eos dolores aliquid quos velit, provident, autem ipsam, hic impedit quis cupiditate distinctio ipsum a perferendis. Fugiat in ad consequuntur! Numquam suscipit nostrum commodi repudiandae nulla minus vel tempora.
Tempora repellendus incidunt voluptatum, obcaecati eos reiciendis repellat corrupti velit cupiditate unde modi enim sed sunt fugiat, quasi, quidem at maiores. At et tenetur magni delectus, voluptates perspiciatis. Tempore, vero?
Facilis, architecto ducimus? Dolor sed saepe omnis? Quam dolorum sequi magni necessitatibus eveniet, assumenda ducimus iste obcaecati optio voluptatibus ad expedita odio dolorem amet impedit saepe molestias esse dolores eaque?
Soluta facilis incidunt, illo quibusdam hic voluptate officia quae aspernatur esse ullam voluptas, temporibus, cum atque quas nihil perferendis excepturi pariatur mollitia delectus nisi. Iusto fugit at voluptatem. Nam, quidem!
</Text>
<Blockquote color="indigo" cite=" Михаил Пришвин">
Life is like an npm install you never know what you are going to get.
</Blockquote>
<Title order={2} className={classes.heading2}>
Юбилей
</Title>
<Text>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quis iusto blanditiis exercitationem voluptates itaque eligendi, consequatur in distinctio eius explicabo. Aliquid in vel explicabo assumenda, molestiae consequatur illum eius voluptates?
</Text>
<Text>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quis iusto blanditiis exercitationem voluptates itaque eligendi, consequatur in distinctio eius explicabo. Aliquid in vel explicabo assumenda, molestiae consequatur illum eius voluptates?
</Text>
<Title order={2} className={classes.heading2}>
Ранние годы
{article.title}
</Title>
<Text>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quis iusto blanditiis exercitationem voluptates itaque eligendi, consequatur in distinctio eius explicabo. Aliquid in vel explicabo assumenda, molestiae consequatur illum eius voluptates?
</Text>
<Text>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quis iusto blanditiis exercitationem voluptates itaque eligendi, consequatur in distinctio eius explicabo. Aliquid in vel explicabo assumenda, molestiae consequatur illum eius voluptates?
</Text>
<Text>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quis iusto blanditiis exercitationem voluptates itaque eligendi, consequatur in distinctio eius explicabo. Aliquid in vel explicabo assumenda, molestiae consequatur illum eius voluptates?
</Text>
<Text>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quis iusto blanditiis exercitationem voluptates itaque eligendi, consequatur in distinctio eius explicabo. Aliquid in vel explicabo assumenda, molestiae consequatur illum eius voluptates?
</Text>
<TypographyStylesProvider>
<Markdown>{article.content}</Markdown>
</TypographyStylesProvider>
{generateCarousel()}
</Container>
);
}

@ -1,4 +1,4 @@
import { createStyles, Card, Image, Avatar, Text, Group, Center, rem } from '@mantine/core';
import { createStyles, Card, Image, Stack, Text, Group, Flex, rem } from '@mantine/core';
import { IconCurrentLocation } from '@tabler/icons-react';
@ -52,22 +52,22 @@ export function ArticleCardVertical({
return (
<Card withBorder shadow="sm" radius="md" p={0} w={'100%'} className={classes.card}>
<Group noWrap spacing={0}>
<Image src={image} height={140} width={140} />
<div className={classes.body}>
<Image src={image} height={200} width={200} />
<Stack p='md'>
<Text transform="uppercase" color="dimmed" weight={700} size="xs">
{category}
</Text>
<Text className={classes.title} mt="xs" mb="md" color={id === selected ? 'red' : 'black'}>
<Text component='a' href={`/article/${id}`} className={classes.title} mt="xs" mb="md" color={id === selected ? 'red' : 'black'}>
{title}
</Text>
<Center inline onClick={() => handleAddressClick(id)} className={classes.address}>
<Flex align='center' onClick={() => handleAddressClick(id)} className={classes.address}>
<IconCurrentLocation style={{ width: rem(12), height: rem(12) }} />
{/* <IconArrowLeft style={{ width: rem(12), height: rem(12) }} /> */}
<Text size="xs">
<Text size="xs" pl={5} pb={2}>
{address}
</Text>
</Center>
</div>
</Flex>
</Stack>
</Group>
</Card>
);

@ -130,10 +130,10 @@ export function FooterLinks({ data }: FooterLinksProps) {
<footer className={classes.footer}>
<Container className={classes.inner}>
<div className={classes.logo}>
<Title order={3}>Литкарта</Title>
<Title order={3}>Литературные музеи России</Title>
{/* <MantineLogo size={30} /> */}
<Text size="xs" color="dimmed" className={classes.description}>
Пространство для русской литературы
Геоинформационный портал
</Text>
</div>
<div className={classes.groups}>{groups}</div>

@ -52,7 +52,7 @@ interface HeaderSimpleProps {
export function HeaderSimple({ links }: HeaderSimpleProps) {
const [opened, { toggle }] = useDisclosure(false);
const [active, setActive] = useState(links[0].link);
const [active, setActive] = useState('');
const { classes, cx } = useStyles();
const items = links.map((link) => (
@ -60,8 +60,7 @@ export function HeaderSimple({ links }: HeaderSimpleProps) {
key={link.label}
href={link.link}
className={cx(classes.link, { [classes.linkActive]: active === link.link })}
onClick={(event) => {
event.preventDefault();
onClick={() => {
setActive(link.link);
}}
>
@ -72,7 +71,7 @@ export function HeaderSimple({ links }: HeaderSimpleProps) {
return (
<Header height={60}>
<Container className={classes.header}>
<Title order={3}>Литкарта</Title>
<Title order={3}>Литературные музеи России</Title>
{/* <MantineLogo size={28} /> */}
<Group spacing={5} className={classes.links}>
{items}

@ -126,8 +126,8 @@ export function KartaPage() {
{articles !== null && articles.length > 0 && articles.map(article => {
const articleInfo = {
"id": article.id,
// "image": article.attributes.cover.data !== null ? "http://strapi.wg.gateway.ts" + article.attributes.cover.data.attributes.url : "https://images.unsplash.com/photo-1628890923662-2cb23c2e0cfe?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=200&q=80",
"category": "",
"image": article.attributes.cover.data !== null ? "http://strapi.wg.gateway.ts" + article.attributes.cover.data.attributes.url : "",
"category": "Памятные места",
"title": article.attributes.title,
"address": article.attributes.address,
"coordinates": article.attributes.coordinates,

@ -100,6 +100,8 @@ import {
Подробнее
</Button>
<Button
component='a'
href="/"
variant="gradient"
gradient={{ deg: 133, from: 'blue', to: 'cyan' }}
size="lg"

@ -1,6 +1,6 @@
{
"version": 8,
"name": "Positron without labels",
"name": "Voyager without labels",
"metadata": {},
"sources": {
"carto": {
@ -8,7 +8,7 @@
"url": "https://tiles.basemaps.cartocdn.com/vector/carto.streets/v1/tiles.json"
}
},
"sprite": "https://tiles.basemaps.cartocdn.com/gl/positron-gl-style/sprite",
"sprite": "https://tiles.basemaps.cartocdn.com/gl/voyager-gl-style/sprite",
"glyphs": "https://tiles.basemaps.cartocdn.com/fonts/{fontstack}/{range}.pbf",
"layers": [
{
@ -18,7 +18,7 @@
"visibility": "visible"
},
"paint": {
"background-color": "#fafaf8",
"background-color": "#fbf8f3",
"background-opacity": 1
}
},
@ -50,23 +50,23 @@
"stops": [
[
8,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.2)"
],
[
9,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.25)"
],
[
11,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.35)"
],
[
13,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.4)"
],
[
15,
"rgba(234, 241, 233, 0.5)"
"#e0ecd3"
]
]
},
@ -95,23 +95,23 @@
"stops": [
[
8,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.2)"
],
[
9,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.25)"
],
[
11,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.35)"
],
[
13,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.4)"
],
[
15,
"rgba(234, 241, 233, 0.5)"
"#e0ecd3"
]
]
},
@ -141,23 +141,23 @@
"stops": [
[
8,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.2)"
],
[
9,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.25)"
],
[
11,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.35)"
],
[
13,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.4)"
],
[
15,
"rgba(234, 241, 233, 0.5)"
"#e0ecd3"
]
]
},
@ -195,31 +195,31 @@
"stops": [
[
5,
"rgba(237, 237, 237, 0.5)"
"rgba(243, 234, 220, 0.5)"
],
[
8,
"rgba(237, 237, 237, 0.45)"
"rgba(243, 234, 220, 0.45)"
],
[
9,
"rgba(237, 237, 237, 0.4)"
"rgba(243, 234, 220, 0.4)"
],
[
11,
"rgba(237, 237, 237, 0.35)"
"rgba(243, 234, 220, 0.35)"
],
[
13,
"rgba(237, 237, 237, 0.3)"
"rgba(243, 234, 220, 0.3)"
],
[
15,
"rgba(237, 237, 237, 0.25)"
"rgba(243, 234, 220, 0.25)"
],
[
16,
"rgba(237, 237, 237, 0.25)"
"rgba(243, 234, 220, 0.15)"
]
]
},
@ -260,23 +260,23 @@
"stops": [
[
8,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.2)"
],
[
9,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.25)"
],
[
11,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.35)"
],
[
13,
"rgba(234, 241, 233, 0.5)"
"rgba(197, 225, 178, 0.4)"
],
[
15,
"rgba(234, 241, 233, 0.5)"
"#e0ecd3"
]
]
}
@ -288,7 +288,7 @@
"source": "carto",
"source-layer": "waterway",
"paint": {
"line-color": "#d1dbdf",
"line-color": "#cce7ea",
"line-width": {
"stops": [
[
@ -331,16 +331,19 @@
0
]
],
"layout": {
"visibility": "none"
},
"paint": {
"line-color": {
"stops": [
[
4,
"#ead5d7"
"#d4d5d6"
],
[
5,
"#ead5d7"
"#d4d5d6"
],
[
6,
@ -398,16 +401,19 @@
0
]
],
"layout": {
"visibility": "none"
},
"paint": {
"line-color": {
"stops": [
[
4,
"#ead5d7"
"#d4d5d6"
],
[
5,
"#ead5d7"
"#d4d5d6"
],
[
6,
@ -473,7 +479,7 @@
"visibility": "visible"
},
"paint": {
"fill-color": "#d4dadc",
"fill-color": "#b0d0d6",
"fill-antialias": true,
"fill-translate-anchor": "map",
"fill-opacity": 1
@ -497,7 +503,7 @@
"visibility": "visible"
},
"paint": {
"fill-color": "transparent",
"fill-color": "rgba(203, 225, 228, 1)",
"fill-antialias": true,
"fill-translate-anchor": "map",
"fill-opacity": 1,
@ -664,7 +670,7 @@
]
},
"line-opacity": 1,
"line-color": "#ddd"
"line-color": "#e6dfcb"
}
},
{
@ -725,7 +731,7 @@
]
},
"line-opacity": 1,
"line-color": "#ddd"
"line-color": "#e6dfcb"
}
},
{
@ -791,7 +797,7 @@
]
},
"line-opacity": 1,
"line-color": "#ddd"
"line-color": "#e6dfcb"
}
},
{
@ -880,7 +886,7 @@
]
]
},
"line-color": "#ddd"
"line-color": "#e6dfcb"
}
},
{
@ -970,7 +976,7 @@
]
]
},
"line-color": "#ddd"
"line-color": "#fbdb98"
}
},
{
@ -1063,7 +1069,7 @@
]
]
},
"line-color": "#ddd"
"line-color": "#fbdb98"
}
},
{
@ -1108,7 +1114,7 @@
]
},
"line-opacity": 1,
"line-color": "#d5d5d5",
"line-color": "#d7d7d7",
"line-dasharray": {
"stops": [
[
@ -1175,7 +1181,7 @@
]
},
"line-opacity": 1,
"line-color": "#eee"
"line-color": "#f0eee7"
}
},
{
@ -1286,7 +1292,7 @@
]
},
"line-opacity": 1,
"line-color": "#eee"
"line-color": "#f0eee7"
}
},
{
@ -1352,7 +1358,7 @@
]
},
"line-opacity": 1,
"line-color": "#eee"
"line-color": "#f0eee7"
}
},
{
@ -1419,7 +1425,7 @@
]
},
"line-opacity": 1,
"line-color": "#eee"
"line-color": "#f0eee7"
}
},
{
@ -1489,7 +1495,7 @@
]
},
"line-opacity": 1,
"line-color": "#eee"
"line-color": "#f0eee7"
}
},
{
@ -1653,7 +1659,7 @@
]
},
"line-opacity": 1,
"line-color": "#ddd"
"line-color": "#fdebce"
}
},
{
@ -1718,15 +1724,15 @@
"stops": [
[
13,
"#e6e6e6"
"#ffffff"
],
[
15.7,
"#e6e6e6"
"#ffffff"
],
[
16,
"#ddd"
"#fdebce"
]
]
}
@ -1797,7 +1803,7 @@
]
]
},
"line-color": "#ddd"
"line-color": "#ffeabb"
}
},
{
@ -1858,11 +1864,11 @@
"stops": [
[
12,
"#e6e6e6"
"#fbdb98"
],
[
14,
"#ddd"
"#fbdb98"
]
]
}
@ -1926,11 +1932,11 @@
"stops": [
[
12,
"#e6e6e6"
"#fbdb98"
],
[
14,
"#ddd"
"#fbdb98"
]
]
}
@ -2002,15 +2008,15 @@
"stops": [
[
11,
"#e6e6e6"
"#fffef9"
],
[
12.99,
"#e6e6e6"
"#fffef9"
],
[
13,
"#ddd"
"#ffedc0"
]
]
}
@ -2105,11 +2111,11 @@
"stops": [
[
7,
"#e6e6e6"
"#ffe7b7"
],
[
12,
"#ddd"
"#ffeabb"
]
]
}
@ -2204,11 +2210,11 @@
"stops": [
[
5,
"#e6e6e6"
"#ffe7b7"
],
[
12,
"#ddd"
"#fbdb98"
]
]
}
@ -2307,11 +2313,11 @@
"stops": [
[
5,
"#e6e6e6"
"#fbdb98"
],
[
12,
"#ddd"
"#fbdb98"
]
]
}
@ -2359,7 +2365,7 @@
]
},
"line-opacity": 1,
"line-color": "#d5d5d5",
"line-color": "#d7d7d7",
"line-dasharray": {
"stops": [
[
@ -2425,7 +2431,7 @@
]
},
"line-opacity": 1,
"line-color": "#fdfdfd"
"line-color": "#ffffff"
}
},
{
@ -2473,7 +2479,7 @@
]
},
"line-opacity": 1,
"line-color": "#fdfdfd"
"line-color": "#ffffff"
}
},
{
@ -2530,7 +2536,7 @@
]
},
"line-opacity": 1,
"line-color": "#fff"
"line-color": "#fefdd7"
}
},
{
@ -2587,7 +2593,7 @@
]
},
"line-opacity": 1,
"line-color": "#fff"
"line-color": "#FFE9A5"
}
},
{
@ -2644,7 +2650,7 @@
]
},
"line-opacity": 1,
"line-color": "#fff"
"line-color": "#FFE9A5"
}
},
{
@ -2705,7 +2711,7 @@
]
},
"line-opacity": 1,
"line-color": "#fff"
"line-color": "#fefdd7"
}
},
{
@ -2770,7 +2776,7 @@
]
},
"line-opacity": 1,
"line-color": "#fff"
"line-color": "#fefdd7"
}
},
{
@ -2835,7 +2841,7 @@
]
},
"line-opacity": 1,
"line-color": "#fff"
"line-color": "#FFE9A5"
}
},
{
@ -2904,7 +2910,7 @@
]
},
"line-opacity": 1,
"line-color": "#fff"
"line-color": "#FFE9A5"
}
},
{
@ -3067,7 +3073,7 @@
]
},
"line-opacity": 1,
"line-color": "#ddd"
"line-color": "#fdebce"
}
},
{
@ -3133,15 +3139,15 @@
"stops": [
[
13,
"#e6e6e6"
"#ffffff"
],
[
15.7,
"#e6e6e6"
"#ffffff"
],
[
16,
"#ddd"
"#fdebce"
]
]
}
@ -3214,15 +3220,15 @@
"stops": [
[
11,
"#e6e6e6"
"#fffef9"
],
[
12.99,
"#e6e6e6"
"#fffef9"
],
[
13,
"#ddd"
"#ffedc0"
]
]
}
@ -3318,11 +3324,11 @@
"stops": [
[
8,
"#e6e6e6"
"#ffe7b7"
],
[
12,
"#ddd"
"#ffeabb"
]
]
}
@ -3419,11 +3425,11 @@
"stops": [
[
5,
"#e6e6e6"
"#fbdb98"
],
[
12,
"#ddd"
"#fbdb98"
]
]
}
@ -3523,11 +3529,11 @@
"stops": [
[
5,
"#e6e6e6"
"#fbdb98"
],
[
10,
"#ddd"
"#fbdb98"
]
]
}
@ -3575,7 +3581,7 @@
]
},
"line-opacity": 1,
"line-color": "#d5d5d5",
"line-color": "#d7d7d7",
"line-dasharray": {
"stops": [
[
@ -3642,7 +3648,7 @@
]
},
"line-opacity": 1,
"line-color": "#fdfdfd"
"line-color": "#ffffff"
}
},
{
@ -3691,7 +3697,7 @@
]
},
"line-opacity": 1,
"line-color": "#fdfdfd"
"line-color": "#ffffff"
}
},
{
@ -3753,7 +3759,7 @@
]
},
"line-opacity": 1,
"line-color": "#fff"
"line-color": "#fefdd7"
}
},
{
@ -3819,7 +3825,7 @@
]
},
"line-opacity": 1,
"line-color": "#fff"
"line-color": "#fefdd7"
}
},
{
@ -3886,7 +3892,7 @@
]
},
"line-opacity": 1,
"line-color": "#fff"
"line-color": "#FFE9A5"
}
},
{
@ -3956,7 +3962,7 @@
]
},
"line-opacity": 1,
"line-color": "#fff"
"line-color": "#FFE9A5"
}
},
{
@ -3973,11 +3979,11 @@
"stops": [
[
15.5,
"#dfdfdf"
"#e4dcd0"
],
[
16,
"#dfdfdf"
"#e4dcd0"
]
]
},
@ -4012,8 +4018,8 @@
]
]
},
"fill-outline-color": "#dfdfdf",
"fill-color": "#ededed",
"fill-outline-color": "#e9d8be",
"fill-color": "#f3eadc",
"fill-opacity": {
"base": 1,
"stops": [
@ -4090,7 +4096,7 @@
"stops": [
[
4,
"#f2e6e7"
"#ead5d7"
],
[
5,

@ -2,15 +2,15 @@
"links": [
{
"link": "#",
"label": "Карта"
"label": "Авторы"
},
{
"link": "articles",
"label": "Статьи"
"link": "#",
"label": "Территории"
},
{
"link": "about",
"label": "О проекте"
"link": "#",
"label": "Маршруты"
}
]
}

@ -7,7 +7,7 @@
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"moduleResolution": "node",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,

Loading…
Cancel
Save