diff --git a/src/components/Article/RatingControl.module.scss b/src/components/Article/RatingControl.module.scss index 68001845..1d871050 100644 --- a/src/components/Article/RatingControl.module.scss +++ b/src/components/Article/RatingControl.module.scss @@ -16,8 +16,7 @@ justify-content: center; height: 0.9em; line-height: 0; - @include font-size(3.6rem); - + font-size: 1.6em; padding: 0; width: 0.9em; diff --git a/src/components/Author/Card.module.scss b/src/components/Author/Card.module.scss index 19df71b5..e8f9062a 100644 --- a/src/components/Author/Card.module.scss +++ b/src/components/Author/Card.module.scss @@ -54,6 +54,10 @@ padding: 0 0 0 42px; } + @include media-breakpoint-down(md) { + flex-wrap: wrap; + } + a { background: #f7f7f7; border: none; @@ -136,6 +140,17 @@ } } +.authorSubscribeSocial { + align-items: center; + display: flex; + + @include media-breakpoint-down(sm) { + flex: 1 100%; + justify-content: center; + margin-top: 1em; + } +} + .buttonSubscribe { align-items: center; aspect-ratio: 1/1; @@ -180,9 +195,12 @@ } .authorPage { + @include media-breakpoint-down(md) { + justify-content: center; + } + .authorName { @include font-size(3.4rem); - font-weight: 500; margin-bottom: 0.2em; } @@ -195,10 +213,18 @@ .authorSubscribe { margin-top: 2rem; padding-left: 0; + + @include media-breakpoint-down(md) { + justify-content: center; + } } .authorDetails { display: block; + + @include media-breakpoint-down(md) { + flex: 1 100%; + } } .buttonLabel { @@ -237,6 +263,16 @@ .button { margin-right: 1.6rem; vertical-align: middle; + + &:last-of-type { + margin-right: 0; + } + + @include media-breakpoint-down(sm) { + display: block; + margin-bottom: 0.5em; + margin-right: 0; + } } } diff --git a/src/components/Author/Card.tsx b/src/components/Author/Card.tsx index 3daa4a10..680e2b8c 100644 --- a/src/components/Author/Card.tsx +++ b/src/components/Author/Card.tsx @@ -177,7 +177,9 @@ export const AuthorCard = (props: AuthorCardProps) => { - {(link) => } +
+ {(link) => } +
diff --git a/src/components/Author/Full.scss b/src/components/Author/Full.scss index 13f5e9ca..801cd85c 100644 --- a/src/components/Author/Full.scss +++ b/src/components/Author/Full.scss @@ -1,11 +1,22 @@ .user-details { - margin-bottom: 5.4rem; + margin: 0 0 5.4rem; + + @include media-breakpoint-up(md) { + margin-left: 160px; + } + + @include media-breakpoint-up(lg) { + margin-left: 235px; + } + + @include media-breakpoint-down(md) { + text-align: center; + } } .author-page { .view-switcher { @include font-size(1.5rem); - margin-top: 0; button { diff --git a/src/components/Author/Full.tsx b/src/components/Author/Full.tsx index b240ae2b..0d621af4 100644 --- a/src/components/Author/Full.tsx +++ b/src/components/Author/Full.tsx @@ -5,7 +5,7 @@ import './Full.scss' export const AuthorFull = (props: { author: Author }) => { return (
-
+
diff --git a/src/components/Author/Userpic.module.scss b/src/components/Author/Userpic.module.scss index 20ed085e..18855e50 100644 --- a/src/components/Author/Userpic.module.scss +++ b/src/components/Author/Userpic.module.scss @@ -35,12 +35,16 @@ } .big.circlewrap { - margin-right: 4.8rem; + margin-right: 0; max-width: 168px; min-width: 168px; height: 168px; width: 168px; + @include media-breakpoint-up(md) { + margin-right: 4.8rem; + } + .userpic { font-size: 2em; line-height: 168px; diff --git a/src/components/Views/Author.module.scss b/src/components/Views/Author.module.scss new file mode 100644 index 00000000..9b279d03 --- /dev/null +++ b/src/components/Views/Author.module.scss @@ -0,0 +1,55 @@ +.ratingContainer { + @include font-size(1.5rem); + display: inline-block; + vertical-align: top; +} + +.ratingControl { + @include font-size(1.5rem); + display: inline-flex; + margin-left: 1em; + vertical-align: middle; +} + +.additionalControls { + white-space: nowrap; + + @include media-breakpoint-up(md) { + text-align: right; + } +} + +.userpic { + background: #fff; + box-shadow: 0 0 0 2px #fff; + display: inline-block; + margin-right: -1.2rem; + vertical-align: top; +} + +.subscribers { + cursor: pointer; + display: inline-block; + margin: -0.4rem 2em 0 0; + vertical-align: top; +} + +.subscribersCounter { + background: #fff; + border: 2px solid #000; + border-radius: 100%; + @include font-size(1rem); + font-weight: bold; + height: 32px; + line-height: 30px; + position: relative; + text-align: center; + width: 32px; + z-index: 1; +} + +.subscribersList { + max-height: 15em; + overflow: auto; + position: relative; +} diff --git a/src/components/Views/Author.tsx b/src/components/Views/Author.tsx index 37b3030a..85378e8d 100644 --- a/src/components/Views/Author.tsx +++ b/src/components/Views/Author.tsx @@ -1,7 +1,7 @@ import { Show, createMemo, createSignal, For, onMount } from 'solid-js' import type { Author, Shout } from '../../graphql/types.gen' +import { Row1 } from '../Feed/Row1' import { Row2 } from '../Feed/Row2' -import { Row3 } from '../Feed/Row3' import { AuthorFull } from '../Author/Full' import { t } from '../../utils/intl' import { useAuthorsStore } from '../../stores/zine/authors' @@ -9,9 +9,14 @@ import { loadShouts, useArticlesStore } from '../../stores/zine/articles' import { useTopicsStore } from '../../stores/zine/topics' import { useRouter } from '../../stores/router' -import { Beside } from '../Feed/Beside' import { restoreScrollPosition, saveScrollPosition } from '../../utils/scroll' import { splitToPages } from '../../utils/splitToPages' +import { RatingControl } from '../Article/RatingControl' +import styles from './Author.module.scss' +import { clsx } from 'clsx' +import Userpic from '../Author/Userpic' +import { Popup } from '../_shared/Popup' +import { AuthorCard } from '../Author/Card' // TODO: load reactions on client type AuthorProps = { @@ -38,6 +43,7 @@ export const AuthorView = (props: AuthorProps) => { const [isLoadMoreButtonVisible, setIsLoadMoreButtonVisible] = createSignal(false) const author = createMemo(() => authorEntities()[props.authorSlug]) + const subscribers = new Array(12).fill(author()) const { searchParams, changeSearchParam } = useRouter() const loadMore = async () => { @@ -94,36 +100,54 @@ export const AuthorView = (props: AuthorProps) => {
-
-
- {`${t('Show')} `} - {t('All posts')} +
+ + + + +
12
+
+ } + variant="tiny" + > +
    + + {(item) => ( +
  • + +
  • + )} +
    +
+ + +
+ Карма +
- - - - - + + + + + + {(page) => ( <> - - - + + + + + + )} diff --git a/src/components/_shared/Popup/Popup.module.scss b/src/components/_shared/Popup/Popup.module.scss index b1890f63..3325cc7c 100644 --- a/src/components/_shared/Popup/Popup.module.scss +++ b/src/components/_shared/Popup/Popup.module.scss @@ -4,18 +4,19 @@ .popup { background: #fff; - top: calc(100% + 8px); - opacity: 1; color: #000; - position: absolute; - z-index: 100; min-width: 144px; + opacity: 1; + position: absolute; + top: calc(100% + 8px); + z-index: 100; ul { margin-bottom: 0; li { position: relative; + &:last-child { margin-bottom: 0; } @@ -24,11 +25,12 @@ &.bordered { @include font-size(1.6rem); - border: 2px solid #000; padding: 2.4rem; + ul li { margin-bottom: 1.6rem; + &:last-child { margin-bottom: 0; } @@ -37,11 +39,12 @@ &.tiny { @include font-size(1.4rem); - box-shadow: 0 4px 60px rgba(0, 0, 0, 0.1); padding: 1rem; + ul li { margin-bottom: 1rem; + &:last-child { margin-bottom: 0; } @@ -67,22 +70,22 @@ white-space: nowrap; &:hover { - img { + .icon img { filter: invert(0); } } } - img { - filter: invert(1); - max-height: 2rem; - max-width: 2rem; - transition: filter 0.3s; - } - .icon { display: inline-block; width: 3.6rem; + + img { + filter: invert(1); + max-height: 2rem; + max-width: 2rem; + transition: filter 0.3s; + } } } diff --git a/src/locales/ru.json b/src/locales/ru.json index b9e8c8db..6eda3234 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -52,6 +52,7 @@ "Fill email": "Введите почту", "Follow": "Подписаться", "Follow the topic": "Подписаться на тему", + "Followers": "Подписчики", "Forgot password?": "Забыли пароль?", "Full name": "Имя и фамилия", "Get to know the most intelligent people of our time, edit and discuss the articles, share your expertise, rate and decide what to publish in the magazine": "Познакомитесь с выдающимися людьми нашего времени, участвуйте в редактировании и обсуждении статей, выступайте экспертом, оценивайте материалы других авторов со всего мира и определяйте, какие статьи будут опубликованы в журнале",