@@ -0,0 +1,3 @@ +.selectTransparent { + background-color: transparent; +} @@ -5,6 +5,8 @@ import { MenuItem, Select, SelectChangeEvent, Stack, Typography } from '@mui/mat import { baseColor } from '#/shared/lib/constants/colors' import TooltipModelTypes from '#/widgets/filters-gpt/ui/tooltip-model-types' +import styles from './select_filter.module.scss' + interface IProps { selects: { availables: string[]; default: any; end: number; start: number; step: number } name: string @@ -43,9 +45,7 @@ export const SelectFilter = ({ selects, filters, item_key, name, description, se sx: { backgroundColor: '#151518', color: '#A6A5A5' }, }, }} - style={{ - backgroundColor: 'transparent', - }} + className={styles.selectTransparent} sx={{ boxShadow: 'none', borderRadius: '13px', @@ -0,0 +1,3 @@ +.selectTransparent { + background-color: transparent; +} @@ -6,6 +6,8 @@ import { IModelVersions } from '#/shared/api/models/models' import { baseColor } from '#/shared/lib/constants/colors' import TooltipModelTypes from '#/widgets/filters-gpt/ui/tooltip-model-types' +import styles from './chat_select.module.scss' + interface ISelect { value: string setValue: React.Dispatch> @@ -37,9 +39,7 @@ export const ChatSelect: React.FC = ({ value, setValue, list, setDefaul sx: { backgroundColor: '#151518', color: '#A6A5A5' }, }, }} - style={{ - backgroundColor: 'transparent', - }} + className={styles.selectTransparent} sx={{ boxShadow: 'none', borderRadius: '13px', @@ -0,0 +1,3 @@ +.sectionSpacing { + margin-top: 15px; +} @@ -7,6 +7,8 @@ import { useRouter } from 'next/router' import { signOut } from 'next-auth/react' import styles from '#/app/layout/styles/styles.module.css' + +import infoBarStyles from './info-bar.module.scss' import { useAppSelector } from '#/app/store/store' import { TooltipCustom } from '#/shared' import { getDaysLeft } from '#/shared/lib/helpers/date-helper' @@ -189,7 +191,7 @@ const InfoBar: React.FC = ({ device }) => { - + router.push('/account?scope=business')}> {''} @@ -202,7 +204,7 @@ const InfoBar: React.FC = ({ device }) => { {account_type === 'regular' && ( - + router.push('/account?scope=referral')}> {''} @@ -73,6 +73,14 @@ justify-content: flex-start; height: 100%; + .chartColumn { + display: flex; + justify-content: flex-start; + width: 53%; + height: 100%; + margin-right: 15px; + } + .list { width: 100%; overflow-y: auto; @@ -1,3 +1,9 @@ +/* Yandex Metrika noscript pixel (off-screen) */ +.metrika-pixel-hidden { + position: absolute; + left: -9999px; +} + :root { --air-color: #8280ff; --background-color-main: #303030; @@ -34,7 +34,7 @@ export function AudioModelCard({ return ( -
+
{title}
@@ -181,3 +181,11 @@ letter-spacing: -1%; } } + +.card_blocked { + user-select: none; +} + +.card_selectable { + user-select: auto !important; +} @@ -179,3 +179,11 @@ letter-spacing: -1%; } } + +.card_blocked { + user-select: none; +} + +.card_selectable { + user-select: auto !important; +} @@ -25,8 +25,7 @@ export function ChatModelCard({ description, image, title, slug, accessed_models
{title} @@ -25,8 +25,7 @@ export function ImageModelCard({ description, image, title, slug, accessed_model
{title} @@ -23,7 +23,7 @@ export function VideoModelCard({ description, image, title, slug, accessed_model return ( -
+
{title}
@@ -77,7 +77,7 @@ export const LimitModal: React.FC = ({ }} > - Сотрудник {person?.email} + Сотрудник {person?.email} @@ -120,6 +120,14 @@ } } +.fileInputHidden { + display: none; +} + +.fileInputLabel { + cursor: pointer; +} + .textarea { &__file { background: rgba(255, 255, 255, 0.06); @@ -40,10 +40,10 @@ export const ErrorReportPlate = () => { onChange={handleFileChange} type='file' accept='.jpg,.jpeg,.png' - style={{ display: 'none' }} + className={styles.fileInputHidden} id='file-input' /> - -

+

Регистрируясь, вы соглашаетесь с условиями  - + Политики обработки персональных данных  и  - + Публичной офертой

@@ -245,13 +232,7 @@ export const RegisterEmailForm: React.FC = ({ successLo }} > Есть аккаунт?{' '} - + Войти @@ -10,3 +10,13 @@ } } } + +.titleActions { + display: flex; + align-items: center; + gap: 20px; +} + +.titleActionsInner { + width: 100%; +} @@ -26,8 +26,8 @@ export default function Title(props: TitleProps) {  {props.title} -
-
+
+
{props.rightSlot}
@@ -0,0 +1,11 @@ +.yandexIcon { + margin-right: 15px; +} + +.yandexButton { + transition: opacity 0.3s ease-in-out; + + &:hover { + opacity: 0.7; + } +} @@ -1,17 +1,16 @@ import { Button } from '@mui/material' import { signIn } from 'next-auth/react' import Image from 'next/image' -import React, { useState } from 'react' +import React from 'react' + +import styles from './yandex-auth-button.module.scss' interface YandexAuthButtonProps {} export const YandexAuthButton = ({}: YandexAuthButtonProps) => { - const [hovered, setHovered] = useState(false) - return ( ) @@ -29,7 +29,7 @@ export default function Document() {
@@ -1,3 +1,7 @@ +.clickableIcon { + cursor: pointer; +} + .wrap { width: 85%; @@ -1,3 +1,7 @@ +.searchIcon { + margin-right: 15px; +} + .search { div { border-radius: 15px; @@ -14,7 +14,7 @@ export const Search = (props: TextFieldProps) => { {...props} InputProps={{ endAdornment: ( - {'1'} + {'1'} ), }} /> @@ -0,0 +1,3 @@ +.sliderFullWidth { + width: 100%; +} @@ -4,6 +4,8 @@ import Box from '@mui/material/Box' import { PrettoSliderDark } from '#/widgets/filters-gpt/ui/pretto-slider' +import styles from './slider.module.scss' + export const Slider = ({ value, title, @@ -41,7 +43,7 @@ export const Slider = ({ { width?: string | number height?: string | number @@ -26,7 +28,13 @@ export function SvgIcon({ url, color, width, height, ...props }: SvgIconProps) { return (
= ({ const tapMode = Boolean(tapToOpenOnMobile && isTouchPrimary) const [tapOpen, setTapOpen] = useState(false) - const triggerSpanStyle: React.CSSProperties | undefined = { - ...(fullWidthTrigger ? { display: 'flex', width: '100%', minWidth: 0 } : {}), - ...(wrapperWidth ? { display: 'block', width: wrapperWidth, maxWidth: '100%', minWidth: 0 } : {}), - } + const triggerSpanStyle: React.CSSProperties | undefined = wrapperWidth + ? { display: 'block', width: wrapperWidth, maxWidth: '100%', minWidth: 0 } + : undefined const tooltip = ( = ({ placement={placement} > void } const ErrorIcon = () => { - return {''} + return {''} } export const Error: React.FC = ({ handleClose }) => { @@ -23,10 +25,7 @@ export const Error: React.FC = ({ handleClose }) => { return ( ) => void @@ -43,9 +45,7 @@ export const SelectUI: React.FC = ({ }, }, }} - style={{ - backgroundColor: 'transparent', - }} + className={styles.selectTransparent} sx={{ boxShadow: 'none', borderRadius: '13px', @@ -0,0 +1,6 @@ +.freeTokensAlert { + background: linear-gradient(91.87deg, #7f7df3 0%, #d372a1 95.23%); + color: white; + border-radius: 10px; + padding: 7px 16px; +} @@ -3,6 +3,8 @@ import CloseIcon from '@mui/icons-material/Close' import { Alert, Collapse, IconButton } from '@mui/material' import Link from 'next/link' +import styles from './tooltip-free-tokens.module.scss' + export const TooltipFreeTokens = () => { const [open, setOpen] = React.useState(() => { if (typeof window !== 'undefined') { @@ -39,12 +41,7 @@ export const TooltipFreeTokens = () => { { @@ -459,7 +461,7 @@ const Account: NextPageWithLayout = () => { onClick={changePassword} sx={{ marginTop: '20px' }} text={'Изменить пароль'} - style={{ width: '150px' }} + className={accountStyles.changePasswordButton} /> @@ -472,11 +474,7 @@ const Account: NextPageWithLayout = () => { onClick={() => setConfirmDeleteModal(true)} sx={{ marginTop: '20px' }} text={'Удалить аккаунт'} - style={{ - width: '100%', - backgroundColor: 'rgba(255, 35, 114, 0.10)', - color: '#FF2372', - }} + className={accountStyles.deleteAccountButton} /> @@ -4,6 +4,7 @@ import Image from 'next/image' import { useSession } from 'next-auth/react' import { TooltipCustom } from '#/shared' +import styles from '#/shared/styles/api-keys.module.scss' import { getApiUrl } from '#/shared/lib/constants' import { useShowDataStore } from '#/shared/lib/hooks/use-show-data' import { InputStyleSmallDark } from '#/shared/ui/input' @@ -135,7 +136,7 @@ export const CopyButton: React.FC<{ src={'/svg/copy.svg'} width={20} height={20} - style={{ cursor: 'pointer' }} + className={styles.clickableIcon} alt={'copy'} /> @@ -166,7 +166,7 @@ const KeyRow: React.FC = ({ id, name, keyValue, limit, createdAt, e onDelete(name)} - style={{ cursor: 'pointer' }} + className={styles.clickableIcon} src='/svg/main_menu/trash.svg' width={20} height={20} @@ -120,7 +120,7 @@ const KeyCard: React.FC = ({ id, name, keyValue, limit, createdAt, onDelete(name)} - style={{ cursor: 'pointer' }} + className={styles.clickableIcon} src='/svg/main_menu/trash.svg' width={20} height={20} @@ -16,6 +16,23 @@ } } +.loaderCenter { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.messagesWrap { + position: relative; + border-radius: 13px; +} + +.scrollAnchor { + position: absolute; + top: 300px; +} + .staticTabsWrapper { display: flex; align-items: center; @@ -264,18 +264,11 @@ const AudioModelPage: NextPageWithLayout = () => { ) : (
-
+
-
+
{ className={'smallScroll'} > -
+
setPrompt(content)} />
@@ -0,0 +1,17 @@ +.closeLink { + position: absolute; + top: 45px; + right: 7%; + cursor: pointer; + font-size: 17px; +} + +.linkAccent { + color: #7f7df3; + font-size: 17px; + text-decoration: none; +} + +.submitButton { + margin-top: 18px; +} @@ -9,6 +9,8 @@ import { getApiUrl } from '#/shared/lib/constants' import { getDeviceType, getRandomImage } from '#/shared/lib/helpers' import { NextPageWithLayout } from '#/pages/_app' +import styles from './change-password.module.scss' + const ChangePassword: NextPageWithLayout = () => { const device = getDeviceType() @@ -90,16 +92,7 @@ const ChangePassword: NextPageWithLayout = () => { backgroundColor: '#373737', }} > - + {''} {desktop && ( @@ -161,7 +154,7 @@ const ChangePassword: NextPageWithLayout = () => { > Ваш пароль успешно изменён! - + Войти в аккаунт
@@ -251,9 +244,7 @@ const ChangePassword: NextPageWithLayout = () => { ) : ( - + { marginTop: '15px', }} > - + Зарегистрироваться @@ -356,7 +332,7 @@ const Login: NextPageWithLayout = () => { }} > {''} { alt={''} width={900} height={1002} - style={{ - borderRadius: '20px', - position: 'relative', - zIndex: 1000, - bottom: -260, - right: -390, - border: '10px solid rgba(255, 255, 255, 0.30)', - transform: 'rotate(-13deg)', - }} + className={styles.promoDashboardImage} /> )} @@ -8,4 +8,24 @@ @media screen and (max-width: 1000px) { width: 100%; } +} + +.logoMobile { + margin-top: 20px; +} + +.imageboxLogo { + position: absolute; + top: 35px; + left: 35px; +} + +.promoDashboardImage { + border-radius: 20px; + position: relative; + z-index: 1000; + bottom: -260px; + right: -390px; + border: 10px solid rgba(255, 255, 255, 0.3); + transform: rotate(-13deg); } \ No newline at end of file @@ -63,7 +63,7 @@ const Register: NextPageWithLayout = () => { > {!desktop && ( {''} { }} > {''} { alt={''} width={900} height={1002} - style={{ - borderRadius: '20px', - position: 'relative', - zIndex: 1000, - bottom: -260, - right: -390, - border: '10px solid rgba(255, 255, 255, 0.30)', - transform: 'rotate(-13deg)', - }} + className={styles.promoDashboardImage} /> )} @@ -151,4 +151,12 @@ &__fileInfo svg { color: rgba(245, 245, 247, 0.85); } +} + +.fileInputHidden { + display: none; +} + +.fileInputLabel { + cursor: pointer; } \ No newline at end of file @@ -37,10 +37,10 @@ const ReportsMobile: NextPageWithLayout = () => { onChange={handleFileChange} type='file' accept='.jpg,.jpeg,.png' - style={{ display: 'none' }} + className={styles.fileInputHidden} id='report-file-input' /> -