e.preventDefault()} className={styles.area}>
+
+
+
+
Загрузить фото
+
или просто перетащите мышью
+
+
+
fileInput.current?.click()}
+ className={styles.area__button}
+ variant='primary'
+ >
+
+ Загрузить
+
+
+
+ )
+}
@@ -0,0 +1 @@
+export * from './image-area'
\ No newline at end of file
@@ -0,0 +1 @@
+export * from './ui'
\ No newline at end of file
@@ -0,0 +1 @@
+export * from './upscale-settings.popup'
\ No newline at end of file
@@ -0,0 +1,4 @@
+.popup{
+ min-width: 200px;
+ min-height: 250px;
+}
\ No newline at end of file
@@ -0,0 +1,15 @@
+import { getPopupById, POPUP_UPSCALE_SETTINGS, PopupTemplate } from '#/shared/ui/popup'
+import React, { useEffect } from 'react'
+import styles from './upscale-settings.popup.module.scss'
+
+export const UpscaleSettingsPopup = () => {
+ const popup = getPopupById(POPUP_UPSCALE_SETTINGS)
+
+ return (
+
+ )
+}
@@ -0,0 +1 @@
+export * from './ui'
\ No newline at end of file
@@ -0,0 +1,6 @@
+import { UpscalePage } from '#/views/upscale'
+import { getDefaultLayout } from '#/widgets/layouts'
+
+UpscalePage.getLayout = getDefaultLayout({ titlePage: 'Upscale' })
+
+export default UpscalePage
@@ -1,2 +1,3 @@
+export const POPUP_UPSCALE_SETTINGS = 'popup-upscale-settings'
export const POPUP_IMAGE_SETTINGS = 'popup-image-settings'
export const POPUP_IMAGE_MODEL = 'popup-image-model'
@@ -8,7 +8,7 @@
min-width: 100px;
min-height: 70px;
transition: all 0.3s ease-in-out;
- z-index: 10;
+ z-index: 1000;
&_mobtransform {
width: 100vw;
@@ -0,0 +1 @@
+export * from './upscale-page'
\ No newline at end of file
@@ -0,0 +1,129 @@
+.main {
+ margin-right: 60px;
+ position: relative;
+ height: 100%;
+}
+
+.lottie {
+ &__wrapper {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+}
+
+.loading {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ object-fit: contain;
+
+ > canvas{
+ object-fit: contain;
+ width: 40% !important;
+ height: 40% !important;
+ }
+}
+
+.controls {
+ position: absolute;
+ bottom: 20px;
+ left: 50%;
+ transform: translateX(-50%);
+ display: flex;
+ z-index: 100;
+ align-items: center;
+ gap: 10px;
+
+ &__settings {
+ height: 50px;
+ width: 50px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 13px;
+ border: 1px solid var(--new-ui-gray-color);
+ }
+}
+
+.general {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding-top: 60px;
+
+ &__accent {
+ color: var(--air-color);
+ }
+
+ &__text {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.7ch;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ color: white;
+
+ font-size: 18px;
+ font-weight: 600;
+ margin-bottom: 20px;
+ }
+
+ &__desc {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ display: flex;
+ z-index: 1;
+ align-items: center;
+ flex-direction: column;
+ }
+
+ &__settings {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+ color: var(--air-color);
+ }
+
+ &__imgbox {
+ width: 900px;
+ position: relative;
+ border-radius: 20px;
+ overflow: hidden;
+
+ &::after {
+ content: '';
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+
+ background-color: rgba(52, 52, 52, 0.2);
+
+ [data-theme='dark'] & {
+ background-color: rgba(0, 0, 0, 0.2);
+ }
+ }
+ }
+
+ &__img {
+ width: 100%;
+ height: auto;
+ }
+}
@@ -0,0 +1,110 @@
+import { NextPageWithLayout } from '#/pages/_app'
+import React, { useEffect, useRef, useState } from 'react'
+
+import styles from './upscale-page.module.scss'
+import { DotLottieReact } from '@lottiefiles/dotlottie-react'
+
+import { c, Loader } from '#/shared'
+import Image from 'next/image'
+import { UpscaleEmpty } from '#/widgets/upscale-empty'
+import SettingsSvg from '#/assets/svg/settings.svg?react'
+import ArrowDropDownSvg from '#/assets/svg/arrow-dropdown.svg?react'
+import { CommonButton } from '#/shared/ui/button'
+import StarsSvg from '#/assets/svg/stars.svg?react'
+import { UpscaleSettingsPopup } from '#/features/upscale-settings'
+import { getPopupById, POPUP_UPSCALE_SETTINGS } from '#/shared/ui/popup'
+import AnimationBgSvg from '#/assets/svg/animation-bg.svg?react'
+
+interface UpscalePageProps {}
+
+export const UpscalePage: NextPageWithLayout = ({}: UpscalePageProps) => {
+ const [images, setImages] = useState