initial commit

This commit is contained in:
Nadar 2024-02-27 14:38:06 +03:00
commit 5c87a247a7
22 changed files with 6410 additions and 0 deletions

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

3
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
}

7
README.md Normal file
View File

@ -0,0 +1,7 @@
# Vue 3 + Vite
This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
## Recommended IDE Setup
- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).

13
eslint.config.js Normal file
View File

@ -0,0 +1,13 @@
import antfu from '@antfu/eslint-config'
export default await antfu({
vue: true,
typescript: true,
overrides: {
vue: {
'vue/block-order': ['error', {
order: ['template', 'script', 'style'],
}],
},
},
})

13
index.html Normal file
View File

@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Vue</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

5081
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

24
package.json Normal file
View File

@ -0,0 +1,24 @@
{
"name": "test-task-medods",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@vuelidate/core": "^2.0.3",
"@vuelidate/validators": "^2.0.4",
"vue": "^3.4.19",
"vue-router": "^4.3.0"
},
"devDependencies": {
"@antfu/eslint-config": "^2.6.4",
"@vitejs/plugin-vue": "^5.0.4",
"eslint": "^8.57.0",
"sass": "^1.71.1",
"vite": "^5.1.4"
}
}

11
src/App.vue Normal file
View File

@ -0,0 +1,11 @@
<template>
<RouterView />
</template>
<script setup>
</script>
<style>
</style>

45
src/assets/fonts.scss Normal file
View File

@ -0,0 +1,45 @@
@import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,500;0,700;1,500&display=swap');
h1, h2, h3, h4, h5, h6 {
margin: 0;
}
h1 {
font-size: 48px;
font-weight: 700;
line-height: 59px;
}
h2 {
font-size: 40px;
font-weight: 600;
line-height: 49px;
}
h3 {
font-size: 32px;
font-weight: 600;
line-height: 39px;
}
h4 {
font-size: 24px;
font-weight: 600;
line-height: 29px;
}
h5 {
font-size: 24px;
font-weight: 600;
line-height: 29px;
}
h6 {
font-size: 18px;
font-weight: 600;
line-height: 22px;
}
a {
text-decoration: none;
}

397
src/assets/index.css Normal file
View File

@ -0,0 +1,397 @@
@import url("https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,500;0,700;1,500&display=swap");
h1, h2, h3, h4, h5, h6 {
margin: 0;
}
h1 {
font-size: 48px;
font-weight: 700;
line-height: 59px;
}
h2 {
font-size: 40px;
font-weight: 600;
line-height: 49px;
}
h3 {
font-size: 32px;
font-weight: 600;
line-height: 39px;
}
h4 {
font-size: 24px;
font-weight: 600;
line-height: 29px;
}
h5 {
font-size: 24px;
font-weight: 600;
line-height: 29px;
}
h6 {
font-size: 18px;
font-weight: 600;
line-height: 22px;
}
a {
text-decoration: none;
}
html,
body {
height: 100%;
}
body {
background: black;
font-family: "Montserrat", sans-serif;
overflow: hidden;
color: white;
}
#app {
height: 100%;
}
button {
background-color: transparent;
border-width: 0;
}
button:hover {
opacity: 0.7;
cursor: pointer;
}
*::-webkit-scrollbar {
width: 4px;
}
*::-webkit-scrollbar-thumb {
background-color: #57595D;
}
.container {
max-width: 1200px;
width: 100%;
margin-inline: auto;
}
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
/* Document
========================================================================== */
/**
* 1. Correct the line height in all browsers.
* 2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/* Sections
========================================================================== */
/**
* Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
* Render the `main` element consistently in IE.
*/
main {
display: block;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/
/* Grouping content
========================================================================== */
/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics
========================================================================== */
/**
* Remove the gray background on active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* 1. Remove the bottom border in Chrome 57-
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bold;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
========================================================================== */
/**
* Remove the border on images inside links in IE 10.
*/
img {
border-style: none;
vertical-align: middle;
font-style: italic;
}
svg {
vertical-align: middle;
}
/* Forms
========================================================================== */
/**
* 1. Change the font styles in all browsers.
* 2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
padding: 0;
border: 0;
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
button,
input { /* 1 */
overflow: visible;
}
/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
* Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
/**
* Remove the inner border and padding in Firefox.
*/
button::-moz-focus-inner,
[type=button]::-moz-focus-inner,
[type=reset]::-moz-focus-inner,
[type=submit]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type=button]:-moz-focusring,
[type=reset]:-moz-focusring,
[type=submit]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Correct the padding in Firefox.
*/
fieldset {
padding: 0.35em 0.75em 0.625em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
vertical-align: baseline;
}
/**
* Remove the default vertical scrollbar in IE 10+.
*/
textarea {
overflow: auto;
}
/**
* 1. Add the correct box sizing in IE 10.
* 2. Remove the padding in IE 10.
*/
[type=checkbox],
[type=radio] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type=number]::-webkit-inner-spin-button,
[type=number]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type=search] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding in Chrome and Safari on macOS.
*/
[type=search]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
========================================================================== */
/*
* Add the correct display in Edge, IE 10+, and Firefox.
*/
details {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Misc
========================================================================== */
/**
* Add the correct display in IE 10+.
*/
template {
display: none;
}
/**
* Add the correct display in IE 10.
*/
[hidden] {
display: none;
}
/*# sourceMappingURL=index.css.map */

1
src/assets/index.css.map Normal file
View File

@ -0,0 +1 @@
{"version":3,"sourceRoot":"","sources":["fonts.scss","style.scss","normalize.scss"],"names":[],"mappings":"AAAQ;AAER;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AC3CF;AAAA;EAEE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EAEA;;;ACtCF;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAUA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;EAGE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA,QACQ;EACN;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA,SACS;EACP;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE","file":"index.css"}

3
src/assets/index.scss Normal file
View File

@ -0,0 +1,3 @@
@import 'fonts';
@import 'style';
@import 'normalize';

View File

@ -0,0 +1,136 @@
//txt - text
//
//l - Large
//m - medium
//s - small
//
//i - Italic
//b - Bold
//Large
@mixin txt-l {
font-family: 'Montserrat', sans-serif;
font-style: normal;
font-size: 18px;
font-weight: 500;
line-height: 25px;
}
@mixin txt-l-i {
font-family: 'Montserrat', sans-serif;
font-style: italic;
font-size: 18px;
font-weight: 500;
line-height: 25px;
}
@mixin txt-l-b {
font-family: 'Montserrat', sans-serif;
font-style: normal;
font-size: 18px;
font-weight: 700;
line-height: 25px;
}
//Medium
@mixin txt-m {
font-family: 'Montserrat', sans-serif;
font-style: normal;
font-size: 14px;
font-weight: 500;
line-height: 20px;
}
@mixin txt-m-i {
font-family: 'Montserrat', sans-serif;
font-style: italic;
font-size: 14px;
font-weight: 500;
line-height: 20px;
}
@mixin txt-m-b {
font-family: 'Montserrat', sans-serif;
font-style: normal;
font-size: 14px;
font-weight: 700;
line-height: 20px;
}
//Small
@mixin txt-s {
font-family: 'Montserrat', sans-serif;
font-style: normal;
font-size: 10px;
font-weight: 500;
line-height: 14px;
}
@mixin txt-s-i {
font-family: 'Montserrat', sans-serif;
font-style: italic;
font-size: 10px;
font-weight: 500;
line-height: 14px;
}
@mixin txt-s-b {
font-family: 'Montserrat', sans-serif;
font-style: normal;
font-size: 10px;
font-weight: 700;
line-height: 14px;
}
//BUTTON & LINK
@mixin btn-link-m {
font-family: 'Montserrat', sans-serif;
font-style: normal;
font-size: 14px;
font-weight: 500;
line-height: 20px;
}
@mixin btn-link-m-l {
font-family: 'Montserrat', sans-serif;
font-style: normal;
font-size: 14px;
font-weight: 500;
line-height: 20px;
text-decoration-style: solid;
}
//FIELDS
@mixin fld-l {
font-family: 'Montserrat', sans-serif;
font-style: normal;
font-size: 16px;
font-weight: 500;
line-height: 20px;
}
@mixin fld-s {
font-family: 'Montserrat', sans-serif;
font-style: normal;
font-size: 10px;
font-weight: 500;
line-height: 12px;
}

357
src/assets/normalize.scss vendored Normal file
View File

@ -0,0 +1,357 @@
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
/* Document
========================================================================== */
/**
* 1. Correct the line height in all browsers.
* 2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/* Sections
========================================================================== */
/**
* Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
* Render the `main` element consistently in IE.
*/
main {
display: block;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/
h1 {
//font-size: 2em;
//margin: 0.67em 0;
}
/* Grouping content
========================================================================== */
/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics
========================================================================== */
/**
* Remove the gray background on active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* 1. Remove the bottom border in Chrome 57-
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bold;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
========================================================================== */
/**
* Remove the border on images inside links in IE 10.
*/
img {
border-style: none;
vertical-align: middle;
font-style: italic;
}
svg {
vertical-align: middle;
}
/* Forms
========================================================================== */
/**
* 1. Change the font styles in all browsers.
* 2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
padding: 0;
border: 0;
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
button,
input { /* 1 */
overflow: visible;
}
/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
* Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
/**
* Remove the inner border and padding in Firefox.
*/
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Correct the padding in Firefox.
*/
fieldset {
padding: 0.35em 0.75em 0.625em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
vertical-align: baseline;
}
/**
* Remove the default vertical scrollbar in IE 10+.
*/
textarea {
overflow: auto;
}
/**
* 1. Add the correct box sizing in IE 10.
* 2. Remove the padding in IE 10.
*/
[type="checkbox"],
[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type="search"] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding in Chrome and Safari on macOS.
*/
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
========================================================================== */
/*
* Add the correct display in Edge, IE 10+, and Firefox.
*/
details {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Misc
========================================================================== */
/**
* Add the correct display in IE 10+.
*/
template {
display: none;
}
/**
* Add the correct display in IE 10.
*/
[hidden] {
display: none;
}

40
src/assets/style.scss Normal file
View File

@ -0,0 +1,40 @@
html,
body {
height: 100%;
}
body {
background: black;
font-family: 'Montserrat', sans-serif;
overflow: hidden;
color: white;
}
#app {
height: 100%;
}
button {
background-color: transparent;
border-width: 0;
&:hover {
opacity: 0.7;
cursor: pointer;
}
}
*::-webkit-scrollbar {
width: 4px;
}
*::-webkit-scrollbar-thumb {
background-color: #57595D;
}
.container{
max-width: 1200px;
width: 100%;
margin-inline: auto;
}

View File

@ -0,0 +1,6 @@
$clr-grey: #1A1E21;
$clr-bg-2: #222529;
$clr-no-active-link: #57595D;
$clr-red-active: #FF3233;
$clr-alt-text: #898C93;
$clr-bg-light: #2B2F35;

View File

@ -0,0 +1,58 @@
<template>
<button
class="btn" :class="[{ btn_icon: icon }, { btn_medium: medium }]"
@click="clickOnButton()"
>
<slot v-if="icon" name="icon">
<Component :is="icon" />
</slot>
<slot v-if="!icon" />
</button>
</template>
<script setup>
defineProps({
icon: {},
medium: {
type: Boolean,
default: false,
},
})
const emit = defineEmits(['click'])
function clickOnButton() {
emit('click')
}
</script>
<style lang="scss" scoped>
.btn {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
background: white;
color: black;
border: none;
cursor: pointer;
font-size: 14px;
transition: .2s;
&_icon {
padding: 10px;
background-color: #F4F5FD;
border-radius: 8px;
width: 44px;
height: 44px;
}
&_medium {
width: 140px;
height: 42px;
background-color: #FFE27A;
border-radius: 7px;
}
}
</style>

View File

@ -0,0 +1,78 @@
<template>
<label
class="app-input"
:style="{width: width}"
>
<div class="app-input__title">{{ title }}</div>
<input
:placeholder=placeholder
:value="value"
@input="updateValue">
<div
class="app-input__warning"
v-for="element of error"
:key="element.$uid">
<div class="form-error__message">{{ element.$message }}</div>
</div>
</label>
</template>
<script setup>
const emit = defineEmits(['update:value'])
const props = defineProps({
error: {
type: Array,
default: ''
},
value: {
type: String,
default: ''
},
width: {
type: String,
default: '300px'
},
title: {
type: String,
default: ''
},
placeholder: {
type: String,
default: ''
},
warning: {
type: String,
default: ''
}
})
const updateValue = (e) => {
emit('update:value', e.target.value)
}
</script>
<style lang="scss" scoped>
.app-input {
border-radius: 10px;
cursor: pointer;
input {
width: 100%;
border-radius: 5px;
padding: 10px;
}
&__title {
margin-bottom: 5px;
}
&__warning {
color: red;
margin-top: 5px;
input {
color: red;
}
}
}
</style>

11
src/main.js Normal file
View File

@ -0,0 +1,11 @@
import { createApp } from 'vue'
import App from './App.vue'
import router from "./router/index.js"
import './assets/index.scss'
const app = createApp(App)
app
.use(router)
.mount('#app')

79
src/pages/createUser.vue Normal file
View File

@ -0,0 +1,79 @@
<template>
<div class="createUser">
<div class="container">
<h1 class="createUser__title">Создание пользователя</h1>
<form @submit.prevent="submitForm" class="createUser__form">
<div class="createUser__row">
<AppInput
placeholder='Введите фамилию'
title="Фамилия"
v-model:value="v$.nameField.$model"
:error="v$.nameField.$errors"
/>
<AppInput
placeholder='Введите почту'
title="Почта"
v-model:value="v$.emailField.$model"
:error="v$.emailField.$errors"
/>
</div>
<AppButton medium>Confirm</AppButton>
</form>
</div>
</div>
</template>
<script setup>
import AppButton from "../components/app-button.vue";
import AppInput from "../components/app-input.vue";
import {computed, ref} from "vue";
import {email, helpers, minLength} from "@vuelidate/validators";
import useVuelidate from "@vuelidate/core";
const nameField = ref('')
const emailField = ref('')
const rules = computed(() => ({
nameField: {
required: true,
minLength: helpers.withMessage(`Минимальная длина: 6 символа`, minLength(6))
},
emailField: {
required: true,
email: helpers.withMessage('Вы ввели неверный email', email)
},
}))
const v$ = useVuelidate(rules, {nameField, emailField})
console.log(v$)
</script>
<style lang="scss">
.createUser {
&__title {
margin-top: 30px;
margin-bottom: 50px;
}
&__form {
display: flex;
flex-direction: column;
gap: 30px;
}
&__row {
display: flex;
flex-direction: row;
justify-content: space-between;
}
}
.inputblock {
display: flex;
flex-direction: column;
gap: 30px;
}
</style>

16
src/router/index.js Normal file
View File

@ -0,0 +1,16 @@
import { createRouter, createWebHistory } from 'vue-router'
import Test from "../pages/createUser.vue";
const routes = [
{
path: '/',
component: Test,
},
]
const router = createRouter({
routes,
history: createWebHistory(),
})
export default router

7
vite.config.js Normal file
View File

@ -0,0 +1,7 @@
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
})