article pages

master
gman 2 years ago
parent 984ec21edc
commit 6502ae47c3

897
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -18,7 +18,9 @@
"maplibre-gl": "^3.2.0", "maplibre-gl": "^3.2.0",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^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": { "devDependencies": {
"@types/react": "^18.2.15", "@types/react": "^18.2.15",

@ -1,4 +1,10 @@
import { Box } from '@mantine/core'; import { Box } from '@mantine/core';
import {
createBrowserRouter,
RouterProvider,
useLoaderData,
} from 'react-router-dom';
import { KartaPage } from './KartaPage'; import { KartaPage } from './KartaPage';
import { Landing } from './Landing'; import { Landing } from './Landing';
import { Article } from './Article'; import { Article } from './Article';
@ -7,14 +13,37 @@ import { FooterLinks } from './Footer';
import headerLinks from './assets/header.json'; import headerLinks from './assets/header.json';
import footerLinks from './assets/footer.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?filters[id][$eq]=${params.id}`);
},
}
])
function App() { function App() {
return ( return (
<Box pos={'absolute'} w={'100%'} top={0}> <Box pos={'absolute'} w={'100%'} top={0}>
<HeaderSimple links={headerLinks.links} /> <HeaderSimple links={headerLinks.links} />
<KartaPage></KartaPage> <RouterProvider router={router} />
{/* <Article></Article> */}
{/* <Landing></Landing> */}
<FooterLinks data={footerLinks.data} /> <FooterLinks data={footerLinks.data} />
</Box > </Box >
); );

@ -1,4 +1,6 @@
import { Title, Text, Container, Blockquote, rem, createStyles } from '@mantine/core'; import { Title, Text, Container, rem, createStyles, TypographyStylesProvider } from '@mantine/core';
import { useLoaderData } from 'react-router-dom';
import Markdown from 'react-markdown';
const useStyles = createStyles((theme) => ({ const useStyles = createStyles((theme) => ({
content: { content: {
@ -6,12 +8,10 @@ const useStyles = createStyles((theme) => ({
}, },
title: { title: {
color: theme.colorScheme === 'dark' ? theme.white : theme.black,
fontFamily: `Greycliff CF, ${theme.fontFamily}`,
fontSize: rem(55), fontSize: rem(55),
lineHeight: 1.2, lineHeight: 1.2,
fontWeight: 900, fontWeight: 900,
padding: rem(20), paddingBottom: rem(20),
[theme.fn.smallerThan('xs')]: { [theme.fn.smallerThan('xs')]: {
fontSize: rem(28), fontSize: rem(28),
}, },
@ -23,46 +23,24 @@ const useStyles = createStyles((theme) => ({
} }
})); }));
export function Article() { export function Article() {
const articleData = useLoaderData();
const { classes } = useStyles(); const { classes } = useStyles();
const article = articleData.data[0].attributes
return ( return (
<Container className={classes.content}> <Container className={classes.content}>
<Title order={1} className={classes.title}> <Title order={1} className={classes.title}>
Михаил Михайлович Пришвин {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? 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}>
Ранние годы
</Title> </Title>
<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? <TypographyStylesProvider>
</Text> <Markdown>{article.content}</Markdown>
<Text> </TypographyStylesProvider>
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>
</Container> </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'; import { IconCurrentLocation } from '@tabler/icons-react';
@ -53,21 +53,21 @@ export function ArticleCardVertical({
<Card withBorder shadow="sm" radius="md" p={0} w={'100%'} className={classes.card}> <Card withBorder shadow="sm" radius="md" p={0} w={'100%'} className={classes.card}>
<Group noWrap spacing={0}> <Group noWrap spacing={0}>
<Image src={image} height={140} width={140} /> <Image src={image} height={140} width={140} />
<div className={classes.body}> <Stack p='md'>
<Text transform="uppercase" color="dimmed" weight={700} size="xs"> <Text transform="uppercase" color="dimmed" weight={700} size="xs">
{category} {category}
</Text> </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} {title}
</Text> </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) }} /> <IconCurrentLocation style={{ width: rem(12), height: rem(12) }} />
{/* <IconArrowLeft style={{ width: rem(12), height: rem(12) }} /> */} {/* <IconArrowLeft style={{ width: rem(12), height: rem(12) }} /> */}
<Text size="xs"> <Text size="xs">
{address} {address}
</Text> </Text>
</Center> </Flex>
</div> </Stack>
</Group> </Group>
</Card> </Card>
); );

@ -52,7 +52,7 @@ interface HeaderSimpleProps {
export function HeaderSimple({ links }: HeaderSimpleProps) { export function HeaderSimple({ links }: HeaderSimpleProps) {
const [opened, { toggle }] = useDisclosure(false); const [opened, { toggle }] = useDisclosure(false);
const [active, setActive] = useState(links[0].link); const [active, setActive] = useState('');
const { classes, cx } = useStyles(); const { classes, cx } = useStyles();
const items = links.map((link) => ( const items = links.map((link) => (
@ -60,8 +60,7 @@ export function HeaderSimple({ links }: HeaderSimpleProps) {
key={link.label} key={link.label}
href={link.link} href={link.link}
className={cx(classes.link, { [classes.linkActive]: active === link.link })} className={cx(classes.link, { [classes.linkActive]: active === link.link })}
onClick={(event) => { onClick={() => {
event.preventDefault();
setActive(link.link); setActive(link.link);
}} }}
> >

@ -126,8 +126,8 @@ export function KartaPage() {
{articles !== null && articles.length > 0 && articles.map(article => { {articles !== null && articles.length > 0 && articles.map(article => {
const articleInfo = { const articleInfo = {
"id": article.id, "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", "image": article.attributes.cover.data !== null ? "http://strapi.wg.gateway.ts" + article.attributes.cover.data.attributes.url : "",
"category": "", "category": "Памятные места",
"title": article.attributes.title, "title": article.attributes.title,
"address": article.attributes.address, "address": article.attributes.address,
"coordinates": article.attributes.coordinates, "coordinates": article.attributes.coordinates,

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

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

@ -1,15 +1,11 @@
{ {
"links": [ "links": [
{ {
"link": "#", "link": "/",
"label": "Карта" "label": "Карта"
}, },
{ {
"link": "articles", "link": "/about",
"label": "Статьи"
},
{
"link": "about",
"label": "О проекте" "label": "О проекте"
} }
] ]

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

Loading…
Cancel
Save