You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.0 KiB
131 lines
4.0 KiB
import '@/styles/globals.css';
|
|
import 'react-tooltip/dist/react-tooltip.css';
|
|
import { Red_Hat_Display } from 'next/font/google';
|
|
import { type Metadata } from 'next/types';
|
|
import { allPosts } from 'contentlayer/generated';
|
|
|
|
import { blogConfig } from '@/config';
|
|
import { Analytics } from '@/components/analytics';
|
|
import { FontStyleProvider } from '@/components/font-style-provider';
|
|
import { Footer } from '@/components/footer';
|
|
import { Header } from '@/components/header';
|
|
import { Search } from '@/components/search';
|
|
import { cn } from '@/lib/utils';
|
|
|
|
import Script from 'next/script';
|
|
|
|
|
|
const fontSans = Red_Hat_Display({
|
|
subsets: ['latin'],
|
|
variable: '--font-red-hat',
|
|
});
|
|
|
|
type RootLayoutProps = {
|
|
children: React.ReactNode;
|
|
};
|
|
|
|
export const metadata: Metadata = {
|
|
title: {
|
|
default: blogConfig.title,
|
|
template: `${blogConfig.title} | %s`,
|
|
},
|
|
openGraph: {
|
|
title: {
|
|
default: blogConfig.title,
|
|
template: `${blogConfig.title} | %s`,
|
|
},
|
|
},
|
|
twitter: {
|
|
title: {
|
|
default: blogConfig.title,
|
|
template: `${blogConfig.title} | %s`,
|
|
},
|
|
},
|
|
robots: {
|
|
index: true,
|
|
follow: true,
|
|
},
|
|
icons: [
|
|
{
|
|
rel: 'apple-touch-icon',
|
|
sizes: '180x180',
|
|
url: '/apple-touch-icon.png',
|
|
},
|
|
{
|
|
rel: 'icon',
|
|
type: 'image/png',
|
|
sizes: '32x32',
|
|
url: '/favicon-32x32.png',
|
|
},
|
|
{
|
|
rel: 'icon',
|
|
type: 'image/png',
|
|
sizes: '16x16',
|
|
url: '/favicon-16x16.png',
|
|
},
|
|
],
|
|
};
|
|
|
|
export default function RootLayout({ children }: RootLayoutProps) {
|
|
return (
|
|
<html
|
|
lang="ru"
|
|
className={cn(
|
|
'scroll-pt-16 overflow-auto overscroll-none',
|
|
//fontSans.variable,
|
|
//fontSerif.variable,
|
|
)}
|
|
>
|
|
<Script id="metrika-counter" strategy="afterInteractive">
|
|
{`(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
|
|
m[i].l=1*new Date();
|
|
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
|
|
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
|
|
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
|
|
|
|
ym(95287082, "init", {
|
|
defer: true,
|
|
clickmap:true,
|
|
trackLinks:true,
|
|
accurateTrackBounce:true,
|
|
webvisor:true
|
|
});`
|
|
}
|
|
</Script>
|
|
<head />
|
|
<body className="grid min-h-screen grid-cols-1 grid-rows-layout bg-slate-200 dark:bg-slate-700 sm:grid-cols-layout">
|
|
<FontStyleProvider>
|
|
<section className="sticky top-0 z-30 col-span-1 row-span-1 row-start-1 h-full self-start sm:col-start-2">
|
|
<Header />
|
|
</section>
|
|
<main className="col-span-1 row-start-2 sm:col-start-2">
|
|
{children}
|
|
</main>
|
|
<section className="col-span-3 row-span-1 row-start-3 sm:col-span-1 sm:col-start-2">
|
|
<Footer />
|
|
</section>
|
|
<div // left column
|
|
className={cn(
|
|
'col-span-1 col-start-1 row-span-3 row-start-1 hidden bg-gradient-to-r sm:block',
|
|
'from-slate-300 via-slate-400 to-slate-500',
|
|
'dark:from-slate-800 dark:via-slate-700 dark:to-slate-600',
|
|
)}
|
|
>
|
|
<div className="invisible h-full w-full bg-gradient-to-l from-rose-50 to-slate-700 opacity-25 dark:visible" />
|
|
</div>
|
|
<div // right column
|
|
className={cn(
|
|
'col-span-1 col-start-3 row-span-3 row-start-1 hidden bg-gradient-to-l sm:block',
|
|
'from-slate-300 via-slate-400 to-slate-500',
|
|
'dark:from-slate-800 dark:via-slate-700 dark:to-slate-600',
|
|
)}
|
|
>
|
|
<div className="invisible h-full w-full bg-gradient-to-r from-rose-50 to-slate-700 opacity-25 dark:visible" />
|
|
</div>
|
|
<Search posts={allPosts} />
|
|
<Analytics />
|
|
</FontStyleProvider>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|
|
|