From 5c05f9c2bbef433ae6f3e9599a5f4f9149d8d3f5 Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Thu, 26 Jun 2025 16:12:20 +0300 Subject: [PATCH] feat: header menus --- package-lock.json | 37 +++ package.json | 1 + public/images/dtr-logo-eagle.png | Bin 0 -> 16143 bytes public/{ => svg}/next.svg | 0 src/app/layout.tsx | 12 +- src/app/page.tsx | 10 +- src/core/styles/variables.scss | 8 +- src/entities/base-menu/index.ts | 1 + src/entities/base-menu/styles.module.scss | 106 ++++++++ src/entities/base-menu/ui.tsx | 135 +++++++++++ src/entities/index.ts | 2 + src/entities/top-menu/index.ts | 1 + src/entities/top-menu/styles.module.scss | 49 ++++ src/entities/top-menu/ui.tsx | 35 +++ src/shared/ui/icon/index.ts | 1 + src/shared/ui/icon/styles.module.scss | 0 src/shared/ui/icon/ui.tsx | 106 ++++++++ src/views/home/index.ts | 1 + src/views/home/styles.module.scss | 15 ++ src/views/home/ui.tsx | 279 ++++++++++++++++++++++ src/views/index.ts | 1 + 21 files changed, 792 insertions(+), 8 deletions(-) create mode 100644 public/images/dtr-logo-eagle.png rename public/{ => svg}/next.svg (100%) create mode 100644 src/entities/base-menu/index.ts create mode 100644 src/entities/base-menu/styles.module.scss create mode 100644 src/entities/base-menu/ui.tsx create mode 100644 src/entities/index.ts create mode 100644 src/entities/top-menu/index.ts create mode 100644 src/entities/top-menu/styles.module.scss create mode 100644 src/entities/top-menu/ui.tsx create mode 100644 src/shared/ui/icon/index.ts create mode 100644 src/shared/ui/icon/styles.module.scss create mode 100644 src/shared/ui/icon/ui.tsx create mode 100644 src/views/home/index.ts create mode 100644 src/views/home/styles.module.scss create mode 100644 src/views/home/ui.tsx create mode 100644 src/views/index.ts diff --git a/package-lock.json b/package-lock.json index 808c1b5..07f5d04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ }, "devDependencies": { "@eslint/eslintrc": "^3", + "@iconify-icon/react": "^3.0.0", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", @@ -281,6 +282,29 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@iconify-icon/react": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@iconify-icon/react/-/react-3.0.0.tgz", + "integrity": "sha512-TOyzGUIfOFbmRQflMbf8k8bBGbeVAVCnvJ/rKz2SgBOV6VZLv7E9gzLvkPzfkZ2HZL+GbRtLNX/GJq2EI54OFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconify-icon": "^3.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.34.2", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", @@ -3444,6 +3468,19 @@ "url": "https://github.com/sponsors/typicode" } }, + "node_modules/iconify-icon": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/iconify-icon/-/iconify-icon-3.0.0.tgz", + "integrity": "sha512-yPcnpkn8HUEUckrxxJBOer3jbGv3bqozHsLMLBRxhk3As1X76BgV2mS2a1HTNOIagR8nUs30H3qAd9GLe8Mnlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@iconify/types": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", diff --git a/package.json b/package.json index bdb7904..d449e5a 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ }, "devDependencies": { "@eslint/eslintrc": "^3", + "@iconify-icon/react": "^3.0.0", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", diff --git a/public/images/dtr-logo-eagle.png b/public/images/dtr-logo-eagle.png new file mode 100644 index 0000000000000000000000000000000000000000..68ca859b81863e504dad59536e8b012e33be9620 GIT binary patch literal 16143 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 hf2Uz_sM{Y9&FS0ktw@IS;az(N23 literal 0 HcmV?d00001 diff --git a/public/next.svg b/public/svg/next.svg similarity index 100% rename from public/next.svg rename to public/svg/next.svg diff --git a/src/app/layout.tsx b/src/app/layout.tsx index ab5d140..82989fa 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,6 +1,6 @@ import type { Metadata } from 'next'; import { ReactNode } from 'react'; -import { Roboto } from 'next/font/google'; +import { Montserrat, Roboto } from 'next/font/google'; import '@core/styles/globals.scss'; import '@core/styles/reset.scss'; @@ -10,6 +10,12 @@ const roboto = Roboto({ variable: '--font-roboto', }); +const montseratt = Montserrat({ + subsets: ['cyrillic'], + weight: ['300', '400', '500', '600', '700'], + variable: '--font-montseratt', +}); + export const metadata: Metadata = { title: 'Независимая оценка и судебная экспертиза | Компания ДИТРАСО', description: @@ -21,7 +27,9 @@ export default function RootLayout({ }: Readonly<{ children: ReactNode }>) { return ( - {children} + + {children} + ); } diff --git a/src/app/page.tsx b/src/app/page.tsx index 8e52ae9..5f51e64 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,3 +1,9 @@ -export default function Home() { - return
Main
; +import { Home } from '@/views'; + +export default function HomePage() { + return ( +
+ +
+ ); } diff --git a/src/core/styles/variables.scss b/src/core/styles/variables.scss index a08b916..123cb88 100644 --- a/src/core/styles/variables.scss +++ b/src/core/styles/variables.scss @@ -5,7 +5,8 @@ $laptop: 1024px; $desktop: 1440px; //fonts -$font-open-sans: var(--font-roboto), sans-serif; +$font-roboto: var(--font-roboto), sans-serif; +$font-montseratt: var(--font-montseratt), sans-serif; $base-font-size: 16px; @@ -18,13 +19,12 @@ $font-bold: 700; // colors $color-white: #FFFFFF; $color-black: #000000; -$color-orange: #E96526; -$color-orange-hover: #ea4b05; $color-lightgray: #E4E1E1; $color-darkgray: #999999; $color-text: #333333; $color-text-light: #222222; -$color-mark: #E96526; +$color-link: #333333; +$color-link-hover: #009283; $color-error: #ff0000; $color-error-light: #ff9191; $color-gray-border: #555555; \ No newline at end of file diff --git a/src/entities/base-menu/index.ts b/src/entities/base-menu/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/entities/base-menu/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/entities/base-menu/styles.module.scss b/src/entities/base-menu/styles.module.scss new file mode 100644 index 0000000..e05306e --- /dev/null +++ b/src/entities/base-menu/styles.module.scss @@ -0,0 +1,106 @@ +.ContainerNavbar { + box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.5); +} + +.Navbar { + margin: 0 auto; + width: rem(1540px); + height: 100px; + display: flex; + flex-direction: row; + align-items: center; + gap: 20px; + + + .Nav { + margin-left: auto; + + .Menu { + display: flex; + flex-direction: row; + align-items: center; + gap: rem(24px); + } + + .Parent { + display: block; + position: relative; + float: left; + line-height: 40px; + //background-color: #ffc72c; + //border-right: #CCC 1px solid; + } + + .Parent a { + //margin: 10px 24px; + //color: #5d3200; + text-decoration: none; + } + + .Parent:hover > ul { + display: block; + position: absolute; + box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.5); + } + + .Child { + display: none; + } + + .Child li { + background-color: #FFFFFF; + line-height: 40px; + padding: 0 10px; + width: 100%; + } + + .Child li a { + color: $color-text; + } + + ul { + list-style: none; + margin: 0; + padding: 0px; + min-width: 12em; + font-family: $font-montseratt; + font-weight: $font-medium; + font-size: rem(16px); + line-height: 100%; + color: $color-text; + } + + ul ul ul { + left: 100%; + top: 0; + margin-left: 1px; + } + + li:hover { + color: $color-link-hover; + } + + .Parent li:hover { + background-color: $color-link-hover; //#F0F0F0 + color: $color-white; + + & > a { + color: $color-white; + } + + & > .Expand { + color: $color-white; + } + } + + .Expand { + font-size: 16px; + float: right; + margin-left: 8px; + color: $color-text + } + } + + .Invite { + } +} \ No newline at end of file diff --git a/src/entities/base-menu/ui.tsx b/src/entities/base-menu/ui.tsx new file mode 100644 index 0000000..8ac689d --- /dev/null +++ b/src/entities/base-menu/ui.tsx @@ -0,0 +1,135 @@ +import s from './styles.module.scss'; +import Image from 'next/image'; +import dtrLogo from '@public/images/dtr-logo-eagle.png'; + +function BaseMenu() { + return ( +
+
+ {'ДиТрасо'} + +
+ +
+
+
+ ); +} + +export { BaseMenu }; + +const Menu = [ + { + menuItem: { + name: 'Home', + link: '/home', + }, + }, + { + menuItem: { + name: 'Link1', + children: [ + { + menuItem: { + name: 'link1-1', + link: '/home', + }, + }, + { + menuItem: { + name: 'link1-2', + link: '/home', + }, + }, + { + menuItem: { + name: 'link1-3', + link: '/home', + }, + }, + ], + }, + }, + { + menuItem: { + name: 'Link2', + children: [ + { + menuItem: { + name: 'link2-1', + link: '/home', + }, + }, + { + menuItem: { + name: 'link2-2', + children: [ + { + menuItem: { + name: 'link2-1', + link: '/home', + }, + }, + { + menuItem: { + name: 'link2-2', + link: '/home', + }, + }, + { + menuItem: { + name: 'link2-3', + link: '/home', + }, + }, + ], + }, + }, + { + menuItem: { + name: 'link2-3', + link: '/home', + }, + }, + ], + }, + }, +]; diff --git a/src/entities/index.ts b/src/entities/index.ts new file mode 100644 index 0000000..181c0b2 --- /dev/null +++ b/src/entities/index.ts @@ -0,0 +1,2 @@ +export { TopMenu } from './top-menu'; +export { BaseMenu } from './base-menu'; diff --git a/src/entities/top-menu/index.ts b/src/entities/top-menu/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/entities/top-menu/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/entities/top-menu/styles.module.scss b/src/entities/top-menu/styles.module.scss new file mode 100644 index 0000000..4065af5 --- /dev/null +++ b/src/entities/top-menu/styles.module.scss @@ -0,0 +1,49 @@ +.Container { + background: #007c6f; + padding: rem(8px) 0; +} + +.Top { + margin: 0 auto; + width: rem(1540px); + display: flex; + justify-content: space-between; + + .Icons { + display: flex; + flex-direction: row; + align-items: center; + gap: rem(20px); + + .Icon { + cursor: pointer; + } + } + + .Contacts { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + gap: rem(60px); + + .Item { + font-family: $font-roboto; + font-weight: $font-bold; + font-size: rem(16px); + line-height: 100%; + color: $color-white; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + gap: rem(8px); + + .IconBox { + padding: rem(4px); + border-radius: 50%; + background: $color-white; + } + } + } +} \ No newline at end of file diff --git a/src/entities/top-menu/ui.tsx b/src/entities/top-menu/ui.tsx new file mode 100644 index 0000000..b81023f --- /dev/null +++ b/src/entities/top-menu/ui.tsx @@ -0,0 +1,35 @@ +import s from './styles.module.scss'; +import { + CiPhoneIcon, + EnvelopeIcon, + MapIcon, + TgIcon, + WaIcon, +} from '@shared/ui/icon'; + +function TopMenu() { + return ( +
+
+
+ + + +
+
+

+ + spo-71@yandex.ru +

+ +

+ + г. Сочи, Навагинская д. 9д, оф. 35 +

+
+
+
+ ); +} + +export { TopMenu }; diff --git a/src/shared/ui/icon/index.ts b/src/shared/ui/icon/index.ts new file mode 100644 index 0000000..5ecdd1f --- /dev/null +++ b/src/shared/ui/icon/index.ts @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/shared/ui/icon/styles.module.scss b/src/shared/ui/icon/styles.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/icon/ui.tsx b/src/shared/ui/icon/ui.tsx new file mode 100644 index 0000000..1cd4e89 --- /dev/null +++ b/src/shared/ui/icon/ui.tsx @@ -0,0 +1,106 @@ +/** Based on https://iconify.design/ + * + */ +import type { SVGProps } from 'react'; + +type SVGIcon = SVGProps; + +//RiMapPinLine +function MapIcon(props: SVGIcon) { + return ( + + + + ); +} + +//MynauiEnvelope +function EnvelopeIcon(props: SVGIcon) { + return ( + + + + ); +} + +//IcBaselineWhatsapp +function WaIcon(props: SVGIcon) { + return ( + + + + ); +} + +//IcBaselineTelegram +function TgIcon(props: SVGIcon) { + return ( + + + + ); +} + +// CiPhone +function CiPhoneIcon(props: SVGIcon) { + return ( + + + + ); +} + +export { MapIcon, EnvelopeIcon, WaIcon, TgIcon, CiPhoneIcon }; diff --git a/src/views/home/index.ts b/src/views/home/index.ts new file mode 100644 index 0000000..e23ecc4 --- /dev/null +++ b/src/views/home/index.ts @@ -0,0 +1 @@ +export { default as Home } from './ui'; diff --git a/src/views/home/styles.module.scss b/src/views/home/styles.module.scss new file mode 100644 index 0000000..b758439 --- /dev/null +++ b/src/views/home/styles.module.scss @@ -0,0 +1,15 @@ +.Header { + display: flex; + flex-direction: column; +} + +.Container { + margin: 0 auto; + width: rem(1540px); + padding: 40px 0; +} + +.Footer { + margin: 0 auto; + width: rem(1540px); +} \ No newline at end of file diff --git a/src/views/home/ui.tsx b/src/views/home/ui.tsx new file mode 100644 index 0000000..6bd8516 --- /dev/null +++ b/src/views/home/ui.tsx @@ -0,0 +1,279 @@ +import s from './styles.module.scss'; +import { BaseMenu, TopMenu } from '@/entities'; + +export default function Main() { + return ( +
+
+ + +
+ +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores + cupiditate delectus dicta dignissimos eius esse est eum harum minus + omnis perspiciatis quaerat, quasi quia, quod ratione tempora vel velit + voluptates. +
+
+ Accusamus aliquam cumque dignissimos quasi repudiandae suscipit + veniam! Accusamus atque commodi distinctio dolorum esse exercitationem + explicabo, facilis in mollitia neque nostrum officia praesentium quod + ratione, repudiandae, tempora totam ut vel? +
+
+ Atque corporis dignissimos dolorem enim et eum fuga fugiat fugit + inventore iure iusto minima, nesciunt odio sed soluta vel voluptates. + A accusamus dolor earum excepturi odit quaerat repudiandae sed + tempore! +
+
+ Commodi cumque ducimus incidunt, nam numquam quo tempora voluptas? + Debitis iure, vero. Aperiam atque beatae delectus dolores enim facilis + fuga, ipsam laborum minus, molestiae obcaecati odio pariatur quis + reiciendis voluptate? +
+
+ Adipisci aspernatur consequatur cum distinctio ea error ex explicabo + fuga harum hic itaque molestiae nesciunt, omnis placeat reprehenderit + rerum sed temporibus vel! Doloribus facilis id labore quia quisquam + sequi voluptate. +
+
+ Adipisci atque dolorem ducimus enim facere fugit incidunt ipsam ipsum + laudantium magni minima mollitia neque nesciunt nostrum odio officia + perferendis quam, qui quia quisquam similique sunt temporibus vel + veritatis vitae? +
+
+ Culpa fuga incidunt magni nemo porro quas quia quod sunt voluptas + voluptate. Blanditiis ducimus eos eum facere fuga hic laborum minus, + mollitia necessitatibus officiis perspiciatis recusandae, rerum saepe, + temporibus ut? +
+
+ Consequatur ducimus eius, illo ipsa laborum magnam nesciunt numquam + officia porro provident quasi reprehenderit sapiente sed temporibus + unde vel veniam voluptatem. Amet commodi illum minus optio praesentium + quis repellat, repudiandae. +
+
+ A ad aperiam architecto aut autem consequuntur cumque dolor ducimus ea + eligendi ipsa iste laudantium magni maxime minima nostrum officia + pariatur quae quasi quia quo, reiciendis repudiandae, saepe ullam + voluptatum! +
+
+ Aperiam, aut commodi corporis dignissimos, eaque enim eos harum ipsa + optio quia quos reiciendis, repellat. Architecto dolores error minus + nihil non numquam, omnis optio porro tempora! Error eveniet nisi quod? +
+
+ Ab ad adipisci alias amet consequatur delectus deserunt dignissimos + distinctio dolor eius id ipsa, laboriosam libero nam natus non numquam + quidem quis quod rem saepe, tempora tenetur unde vel velit? +
+
+ Aliquam at consectetur culpa debitis doloribus ducimus eligendi + eveniet facere fugiat ipsam itaque, laudantium maiores maxime + molestiae molestias mollitia necessitatibus nisi numquam obcaecati + quaerat quidem quis recusandae rerum, vel voluptas? +
+
+ Ab ad alias aliquam, amet corporis cumque doloribus ducimus ea error + et excepturi exercitationem, explicabo impedit iste iure laudantium + necessitatibus optio pariatur quia quidem ratione, rem similique sint + totam voluptatem? +
+
+ Eius ipsa nihil odio perspiciatis sed sequi tempora, ullam? + Consequuntur enim ex illo laborum nam, repellat tempore totam ut + voluptatibus! Ad assumenda blanditiis distinctio dolorem, ex illum + iusto magnam tempore. +
+
+ Aspernatur consequatur delectus deleniti est fugit laborum minima nisi + quos suscipit vero. Accusantium ex illum maxime numquam obcaecati + perspiciatis, quod reiciendis temporibus vitae. Eos laboriosam nostrum + odit quidem reiciendis vitae. +
+
+ Animi at libero minima necessitatibus obcaecati, officia perferendis + quo! Ab ad dolorum excepturi laborum libero, officia quibusdam + sapiente! Accusamus adipisci consectetur cumque debitis dolore id + impedit nesciunt nisi omnis voluptas. +
+
+ Accusantium animi debitis ducimus, iste molestias quos rem. + Consectetur dicta, doloremque error eveniet excepturi fugit in, + incidunt natus nulla omnis, quia quidem quisquam sint soluta + voluptatibus. Eveniet maxime quae recusandae. +
+
+ Ad aliquam architecto distinctio eius eos maxime minima optio porro + quis voluptatem. Accusantium atque debitis eligendi esse hic ipsam + ipsum, nihil officia perspiciatis quasi rerum soluta, tempora vel + voluptas voluptatibus. +
+
+ Aperiam dolor exercitationem expedita illum labore modi molestias + repudiandae saepe velit voluptas. Accusamus consequuntur, dignissimos + eius eligendi fuga harum illo illum nam, nulla, odit officia quaerat + quis reiciendis sit tempore! +
+
+ A aliquam asperiores consequatur cum dignissimos distinctio dolorem + eius eos eum excepturi expedita impedit laborum molestiae mollitia, + natus quam quidem quis quo reprehenderit similique tempore unde + veritatis voluptatem, voluptatibus voluptatum? +
+
+ Accusamus adipisci assumenda beatae consequatur, eum exercitationem + explicabo maxime obcaecati officiis porro quae qui ratione sapiente + sequi suscipit velit veritatis? Harum molestiae quis quod? Et harum + neque quam reprehenderit voluptates! +
+
+ Aspernatur deleniti distinctio, illum, inventore iure labore maiores + nemo quod sapiente sit voluptas, voluptatem! Minus nobis perspiciatis + rem velit. Delectus, dolores natus? Eos laborum laudantium molestiae, + nobis perferendis unde. Animi. +
+
+ Dolores magni nulla quasi? Accusamus aliquam animi aperiam corporis + distinctio eligendi explicabo illo ipsum laboriosam laborum maiores + molestias obcaecati optio provident, quae, quaerat quas quisquam rerum + saepe voluptatum? Asperiores, unde. +
+
+ Dignissimos distinctio dolore, ea error fugiat ipsum modi pariatur + praesentium quia velit. Aliquam aut consequuntur corporis, debitis + esse hic iste laboriosam magni mollitia natus non obcaecati placeat + quia recusandae veniam? +
+
+ Accusantium aliquam corporis debitis distinctio dolore dolorem earum + eligendi fugiat harum impedit ipsam, libero magni minus molestias nisi + odit officiis possimus quae, quaerat quia quibusdam sit sunt totam ut + vel? +
+
+ Animi assumenda dicta dignissimos itaque, nesciunt quo. Aliquam + asperiores aspernatur delectus deleniti dolorem, dolorum eaque ex + exercitationem expedita fugit id, iusto mollitia nesciunt officia quam + suscipit temporibus ullam ut voluptates. +
+
+ Ad, at consequuntur dicta dolor, eius ex excepturi, fugit ipsum nisi + nostrum numquam qui reprehenderit sint suscipit tempora unde + voluptatibus. Dicta doloremque eaque est in nemo perspiciatis quae + quisquam, similique? +
+
+ Accusantium culpa eaque eius id incidunt ipsam ipsum, laboriosam + nesciunt recusandae, repellendus temporibus vel voluptates voluptatum. + Aliquid consectetur dolores in praesentium voluptate? Accusamus + consequuntur delectus facilis fuga nulla saepe veritatis? +
+
+ A aliquid animi commodi dolor est in, iure magnam molestias nesciunt + numquam quam, repellat sunt, veniam! Consectetur facere neque nulla + quos saepe! Dicta eum impedit molestias officiis temporibus tenetur + vitae? +
+
+ Animi dignissimos fugiat nihil odit perspiciatis soluta! Commodi + consectetur cupiditate iusto, possimus veritatis voluptas voluptatem. + Adipisci, alias consequuntur cum impedit itaque, minima modi natus + nulla quaerat quam quidem sed unde! +
+
+ Accusantium ad aliquid animi aspernatur corporis cumque cupiditate + delectus dolore ea expedita id iste, iure laudantium maiores modi odio + quae quas quis quod quos recusandae rerum sunt totam veniam + voluptatibus? +
+
+ Aperiam, aspernatur cum dolorum error exercitationem fuga id + necessitatibus nisi quo rem repudiandae soluta veniam? A architecto + commodi consequuntur culpa deserunt ducimus est et fugit, iusto nihil + odio quo rem? +
+
+ Alias distinctio dolorem ducimus eaque, eligendi error eveniet harum + iste iure modi mollitia odit perspiciatis praesentium quaerat quam + quidem rem repudiandae rerum sed sequi sit soluta ut veniam veritatis + voluptate. +
+
+ Cumque debitis eaque, error fugiat hic molestias placeat unde? + Accusamus, ad, amet architecto at beatae culpa deleniti expedita + labore magni maiores maxime odio quos repudiandae soluta voluptate? + Esse, nisi, provident. +
+
+ A aperiam autem eius error expedita id incidunt ipsum molestias nulla + porro reprehenderit, velit, vero voluptatem voluptatibus voluptatum! + Doloremque ducimus eum expedita molestias numquam porro quisquam + ratione repellendus tenetur voluptatibus. +
+
+ A accusamus architecto asperiores consectetur, consequuntur culpa cum + error est, explicabo illum impedit ipsum magnam, molestias nulla + obcaecati officiis pariatur possimus quia recusandae reprehenderit + tempora tempore ullam vitae voluptatem voluptatibus! +
+
+ A accusantium alias aliquam aut blanditiis consequatur cumque delectus + distinctio doloremque eligendi error et inventore ipsa ipsum iste + laborum neque odit qui quia, quo repudiandae saepe sit, totam vitae + voluptatem! +
+
+ Alias, aliquam animi aspernatur blanditiis consectetur consequatur + corporis cupiditate, dolorum error esse impedit laudantium magni + maiores natus non nulla odit perferendis quam, similique soluta + suscipit tenetur totam vel veniam voluptatem! +
+
+ Consequatur corporis cumque, dolore earum esse et fuga itaque laborum + magni maiores modi nihil odit officia officiis omnis praesentium, quae + quo quod ratione repellendus soluta suscipit, ullam! Accusamus, est, + reprehenderit! +
+
+ At consectetur debitis dolores, dolorum et expedita laboriosam minus + nemo nihil numquam perspiciatis quas quibusdam repellendus repudiandae + sint tenetur, voluptatibus. Alias dignissimos, labore laudantium nemo + numquam reprehenderit repudiandae similique vero? +
+
+ Architecto dignissimos enim et laboriosam quibusdam quisquam + reprehenderit rerum vel veniam voluptatum. Delectus facere modi + veritatis. A ad eaque eligendi enim fugiat harum maiores mollitia nisi + optio quibusdam sint, voluptate. +
+
+ Ab commodi iste laboriosam laudantium maiores maxime non odit placeat + quaerat quas reiciendis, sequi temporibus, totam vel veritatis! + Doloremque eveniet expedita, fuga quam quis recusandae veniam? + Exercitationem repellendus veniam voluptates? +
+
+ Animi aperiam asperiores autem delectus dignissimos illo impedit + ipsam, iusto natus numquam pariatur quae qui quis quisquam ratione + sequi sit suscipit ullam unde vel! Alias autem nemo odit quod + voluptate. +
+
+ Accusamus aspernatur consectetur culpa cum cumque cupiditate doloribus + ducimus explicabo hic, id ipsa laboriosam maiores, molestiae nobis + quasi quia quod rem tempora tempore, voluptatem. Alias atque labore + maiores quia reprehenderit. +
+
+ +
+ ); +} diff --git a/src/views/index.ts b/src/views/index.ts new file mode 100644 index 0000000..e20557b --- /dev/null +++ b/src/views/index.ts @@ -0,0 +1 @@ +export * from './home';