diff --git a/public/icons/static/article/author_upvoted.svg b/public/icons/static/article/author_upvoted.svg
new file mode 100644
index 000000000..0188a8a97
--- /dev/null
+++ b/public/icons/static/article/author_upvoted.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/icons/static/article/comment-reply-mode.svg b/public/icons/static/article/comment-reply-mode.svg
new file mode 100644
index 000000000..eed945013
--- /dev/null
+++ b/public/icons/static/article/comment-reply-mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/icons/static/article/comment-timeline-mode.svg b/public/icons/static/article/comment-timeline-mode.svg
new file mode 100644
index 000000000..591d081c4
--- /dev/null
+++ b/public/icons/static/article/comment-timeline-mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/icons/static/shape/expand-all.svg b/public/icons/static/shape/expand-all.svg
new file mode 100644
index 000000000..8e2b04a74
--- /dev/null
+++ b/public/icons/static/shape/expand-all.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/icons/static/shape/fold-all.svg b/public/icons/static/shape/fold-all.svg
new file mode 100644
index 000000000..d32a08671
--- /dev/null
+++ b/public/icons/static/shape/fold-all.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/icons/static/shape/lock.svg b/public/icons/static/shape/lock.svg
new file mode 100644
index 000000000..87eb4dde2
--- /dev/null
+++ b/public/icons/static/shape/lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/icons/static/shape/quote.svg b/public/icons/static/shape/quote.svg
new file mode 100644
index 000000000..bdf645912
--- /dev/null
+++ b/public/icons/static/shape/quote.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/components/Common/index.ts b/src/components/Common/index.ts
index 149f9c080..045838fcf 100755
--- a/src/components/Common/index.ts
+++ b/src/components/Common/index.ts
@@ -3,8 +3,8 @@ import styled from 'styled-components'
import type { TSpace } from '@/spec'
export const Br = styled.div`
- margin-top: ${({ top }) => `${top}px` || 0};
- margin-bottom: ${({ bottom }) => `${bottom}px` || 0};
+ margin-top: ${({ top }) => `${top || 0}px`};
+ margin-bottom: ${({ bottom }) => `${bottom || 0}px`};
`
export const Space = styled.span`
margin-left: ${({ left }) => `${left}px` || 0};
diff --git a/src/components/Switcher/IconSwitcher.js b/src/components/Switcher/IconSwitcher.js
deleted file mode 100644
index b3ca131e8..000000000
--- a/src/components/Switcher/IconSwitcher.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *
- * IconSwitcher
- *
- */
-
-import React from 'react'
-import T from 'prop-types'
-import { findIndex, propEq } from 'ramda'
-
-import { buildLog, nilOrEmpty } from '@/utils'
-
-import {
- Wrapper,
- AccessZone,
- Tabs,
- IconHoverWrapper,
- HoverText,
- Icon,
- Label,
- Slider,
-} from './styles/icon_selector'
-
-/* eslint-disable-next-line */
-const log = buildLog('c:IconSwitcher:index')
-
-const IconComp = ({ item, activeKey }) => {
- if (!item.desc) {
- return
- }
-
- return (
-
-
- {item.desc}
-
- )
-}
-
-const IconSwitcher = ({ items, activeKey, onChange }) => {
- const slideIndex = findIndex(propEq('key', activeKey), items)
-
- return (
-
-
-
- {items.map((item) => (
-
- ))}
-
-
-
- )
-}
-
-IconSwitcher.propTypes = {
- items: T.arrayOf(
- T.shape({
- iconSrc: T.string,
- localIcon: T.oneOfType([T.string, T.node]),
- key: T.string,
- }),
- ).isRequired,
- activeKey: T.string.isRequired,
- onChange: T.func.isRequired,
-}
-
-IconSwitcher.defaultProps = {}
-
-export default React.memo(IconSwitcher)
diff --git a/src/components/Switcher/IconSwitcher.tsx b/src/components/Switcher/IconSwitcher.tsx
new file mode 100644
index 000000000..99f52853e
--- /dev/null
+++ b/src/components/Switcher/IconSwitcher.tsx
@@ -0,0 +1,100 @@
+/*
+ *
+ * IconSwitcher
+ *
+ */
+
+import React from 'react'
+import { findIndex, propEq } from 'ramda'
+
+import { buildLog, nilOrEmpty } from '@/utils'
+import Tooltip from '@/components/Tooltip'
+
+import {
+ Wrapper,
+ AccessZone,
+ Tabs,
+ DescText,
+ Icon,
+ Label,
+ Slider,
+} from './styles/icon_selector'
+
+/* eslint-disable-next-line */
+const log = buildLog('c:IconSwitcher:index')
+
+type TItem = {
+ iconSrc?: string
+ localIcon?: React.ReactNode
+ key: string
+ desc?: string
+}
+
+type TIconComp = {
+ item: TItem
+ activeKey: string
+}
+
+type TTabLabel = {
+ item: TItem
+ activeKey: string
+ onChange: (item: TItem) => void
+}
+
+const TabLabel: React.FC = ({ item, activeKey, onChange }) => {
+ if (!item.desc) {
+ return (
+
+ )
+ }
+
+ return (
+ {item.desc}}
+ placement="bottom"
+ delay={500}
+ noPadding
+ >
+
+
+ )
+}
+
+type TProps = {
+ items: TItem[]
+ activeKey: string
+ onChange: (item: TItem) => void
+}
+
+const IconSwitcher: React.FC = ({ items, activeKey, onChange }) => {
+ const slideIndex = findIndex(propEq('key', activeKey), items)
+
+ return (
+
+
+
+ {items.map((item) => (
+
+ ))}
+
+
+
+ )
+}
+
+export default React.memo(IconSwitcher)
diff --git a/src/components/Switcher/index.js b/src/components/Switcher/index.tsx
similarity index 100%
rename from src/components/Switcher/index.js
rename to src/components/Switcher/index.tsx
diff --git a/src/components/Switcher/styles/icon_selector.ts b/src/components/Switcher/styles/icon_selector.ts
index 3be85ddee..f01d56402 100644
--- a/src/components/Switcher/styles/icon_selector.ts
+++ b/src/components/Switcher/styles/icon_selector.ts
@@ -50,22 +50,10 @@ export const Label = styled.label`
cursor: pointer;
}
`
-export const IconHoverWrapper = styled.div`
- position: relative;
-`
-export const HoverText = styled.span`
- position: absolute;
- width: 80px;
- left: -20px;
- top: 30px;
- font-size: 12px;
- opacity: 0;
- overflow: hidden;
- ${IconHoverWrapper}:hover & {
- opacity: 1;
- }
- transition: opacity 0.25s;
- transition-delay: 0.3s;
+export const DescText = styled.div`
+ ${css.flex('align-both')};
+ min-width: 90px;
+ padding: 5px 10px;
`
export const Icon = styled(Img)<{ checked: boolean }>`
fill: ${({ checked }) =>
@@ -81,7 +69,7 @@ export const Slider = styled.span<{ index: number }>`
width: ${width};
height: ${height};
background-color: #0b3546;
- z-index: 1;
+ z-index: 0;
border-radius: 6px;
${Wrapper}:hover & {
diff --git a/src/components/Switcher/styles/tabs/local_icon.ts b/src/components/Switcher/styles/tabs/local_icon.ts
index cd5245c79..5c959eca6 100644
--- a/src/components/Switcher/styles/tabs/local_icon.ts
+++ b/src/components/Switcher/styles/tabs/local_icon.ts
@@ -21,7 +21,7 @@ import TabPublishSVG from '@/SvgIcons/TabPublishSVG'
import TabBillingSVG from '@/SvgIcons/TabBillingSVG'
import TabCommentsSVG from '@/SvgIcons/TabCommentsSVG'
import TabSettingsSVG from '@/SvgIcons/TabSettingsSVG'
-import TabFavoritesSVG from '@/SvgIcons/TabFavoritesSVG'
+import TabFavoritesSVG from '@/components/SvgIcons/TabFavoritesSVG'
export const LableWrapper = styled.div`
${css.flex('align-center')};
diff --git a/src/components/Tooltip/styles/index.ts b/src/components/Tooltip/styles/index.ts
index a128c37f9..dd1e2ed9e 100755
--- a/src/components/Tooltip/styles/index.ts
+++ b/src/components/Tooltip/styles/index.ts
@@ -29,6 +29,7 @@ export const NoPaddingStyledTippy = styled(StyledTippy)`
export const ContentWrapper = styled.div<{ contentHeight: string }>`
position: relative;
height: ${({ contentHeight }) => contentHeight};
+ z-index: 1;
`
const Arrow = styled.div`
position: absolute;
diff --git a/src/containers/unit/Comments/Comment/Actions.tsx b/src/containers/unit/Comments/Comment/Actions.tsx
index d8a301747..91eae31b0 100755
--- a/src/containers/unit/Comments/Comment/Actions.tsx
+++ b/src/containers/unit/Comments/Comment/Actions.tsx
@@ -1,11 +1,16 @@
import React from 'react'
import type { TAccount, TComment } from '@/spec'
+import { ICON } from '@/config'
-import DotDivider from '@/components/DotDivider'
import { SpaceGrow } from '@/components/Common'
-import { Wrapper, ReplyAction } from '../styles/comment/actions'
+import {
+ Wrapper,
+ ActionWrapper,
+ ReplyAction,
+ ActionIcon,
+} from '../styles/comment/actions'
import { openUpdateEditor, openReplyEditor, onDelete } from '../logic'
type TProps = {
@@ -27,13 +32,15 @@ const Actions: React.FC = ({ data, accountInfo }) => {
openReplyEditor(data)}>回复
- 分享
-
- 引用
-
- 折叠
-
- 举报
+
+
+
+
+
+
+
+
+
)
}
diff --git a/src/containers/unit/Comments/Comment/DesktopView.tsx b/src/containers/unit/Comments/Comment/DesktopView.tsx
index 2b7717b24..b840e8bd4 100644
--- a/src/containers/unit/Comments/Comment/DesktopView.tsx
+++ b/src/containers/unit/Comments/Comment/DesktopView.tsx
@@ -3,8 +3,10 @@ import { isEmpty } from 'ramda'
import type { TAccount, TComment } from '@/spec'
import { Global } from '@/utils'
+import { ICON } from '@/config'
import MarkDownRender from '@/components/MarkDownRender'
+import Tooltip from '@/components/Tooltip'
import Upvote from './Upvote'
import Header from './Header'
@@ -15,11 +17,16 @@ import Footer from './Footer'
import {
Wrapper,
CommentWrapper,
+ SidebarWrapper,
CommentContent,
CommentBodyInfo,
PinState,
PinIcon,
PinText,
+ AuthorUpvotedIcon,
+ SolutionIcon,
+ BadgePopContent,
+ RangeLine,
} from '../styles/comment/desktop_view'
const getSelection = () => {
@@ -33,10 +40,21 @@ type TProps = {
data: TComment
accountInfo: TAccount
tobeDeleteId: string
+ hasReplies?: boolean
+ withoutBottomDivider?: boolean
}
-const Comment: React.FC = ({ data, tobeDeleteId, accountInfo }) => {
+const Comment: React.FC = ({
+ data,
+ tobeDeleteId,
+ accountInfo,
+ hasReplies = false,
+ withoutBottomDivider = false,
+}) => {
const pined = data.id === '360' || data.id === '377'
+ const isAuthorUpvoted =
+ data.id === '377' || data.id === '355' || data.id === '359'
+ const isSolution = data.id === '358' || data.id === '355'
return (
@@ -48,7 +66,31 @@ const Comment: React.FC = ({ data, tobeDeleteId, accountInfo }) => {
)}
-
+
+
+ {isAuthorUpvoted && (
+ 作者顶过}
+ placement="bottom"
+ noPadding
+ >
+
+
+ )}
+ {isSolution && (
+ 最佳答案}
+ placement="bottom"
+ noPadding
+ >
+
+
+ )}
+
+
@@ -56,7 +98,12 @@ const Comment: React.FC = ({ data, tobeDeleteId, accountInfo }) => {
{data.replyTo && }
-
+
diff --git a/src/containers/unit/Comments/Comment/Footer.tsx b/src/containers/unit/Comments/Comment/Footer.tsx
index 77e3904a0..193cf2889 100755
--- a/src/containers/unit/Comments/Comment/Footer.tsx
+++ b/src/containers/unit/Comments/Comment/Footer.tsx
@@ -13,12 +13,19 @@ import { Wrapper } from '../styles/comment/footer'
type TProps = {
data: TComment
accountInfo: TAccount
+ withoutBottomDivider?: boolean
+ hasReplies?: boolean
}
-const Footer: React.FC = ({ data, accountInfo }) => (
-
+const Footer: React.FC = ({
+ data,
+ accountInfo,
+ withoutBottomDivider = false,
+ hasReplies = false,
+}) => (
+
-
+
diff --git a/src/containers/unit/Comments/CommentsFilter.tsx b/src/containers/unit/Comments/CommentsFilter.tsx
deleted file mode 100755
index e353d73b9..000000000
--- a/src/containers/unit/Comments/CommentsFilter.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-import React from 'react'
-
-import { ICON_CMD } from '@/config'
-import { TYPE } from '@/constant'
-
-import Tooltip from '@/components/Tooltip'
-import {
- FilterWraper,
- MenuWrapper,
- MenuItem,
- FilterIcon,
- Header,
- RecentlyIcon,
-} from './styles/comments_filter'
-
-import { onFilterChange } from './logic'
-
-const filterDict = {
- DESC_INSERTED: '最新创建',
- ASC_INSERTED: '综合排序',
- MOST_LIKES: '最多顶',
- MOST_DISLIKES: '最多踩',
-}
-
-const Menus = ({ active }) => (
-
-
-
-
-
-
-)
-
-const renderFilterIcon = (filterType) => {
- switch (filterType) {
- case TYPE.DESC_INSERTED:
- return
-
- case TYPE.MOST_LIKES:
- return
-
- case TYPE.MOST_DISLIKES:
- return
-
- default:
- return
- }
-}
-
-type TProps = {
- filterType: string
- show: boolean
-}
-
-const CommentsFilter: React.FC = ({ filterType, show }) => (
-
- }>
-
- {renderFilterIcon(filterType)}
- {filterDict[filterType]}
-
-
-
-)
-
-export default React.memo(CommentsFilter)
diff --git a/src/containers/unit/Comments/List/Header.tsx b/src/containers/unit/Comments/List/Header.tsx
index d32d44ed2..16ffe42ed 100644
--- a/src/containers/unit/Comments/List/Header.tsx
+++ b/src/containers/unit/Comments/List/Header.tsx
@@ -1,12 +1,21 @@
import React from 'react'
-import Filter from '../CommentsFilter'
+import { ICON } from '@/config'
+import Tooltip from '@/components/Tooltip'
+
+import { Space } from '@/components/Common'
+import { IconSwitcher } from '@/components/Switcher'
import {
Wrapper,
TotalTitle,
TotalCountWrapper,
TotalNum,
+ ActionsWrapper,
+ ActionIcon,
+ ExpandIcon,
+ FoldIcon,
+ IconDescText,
} from '../styles/list/header'
type TProps = {
@@ -14,7 +23,39 @@ type TProps = {
filterType: string
}
+type TActionTooltip = {
+ children: React.ReactNode
+ desc: string
+}
+
+const ActionTooltip: React.FC = ({ children, desc }) => {
+ return (
+ {desc}}
+ placement="bottom"
+ delay={1000}
+ noPadding
+ >
+ {children}
+
+ )
+}
+
const Header: React.FC = ({ totalCount, filterType }) => {
+ const switchItems = [
+ {
+ key: 'reply',
+ iconSrc: `${ICON}/article/comment-reply-mode.svg`,
+ desc: '回复模式',
+ },
+ {
+ key: 'time',
+ iconSrc: `${ICON}/article/comment-timeline-mode.svg`,
+ desc: '时间线模式',
+ },
+ ]
+ const isAllFolded = false
+
return (
@@ -24,7 +65,29 @@ const Header: React.FC = ({ totalCount, filterType }) => {
)}
- = 2} />
+
+
+
+
+
+
+
+ {isAllFolded ? (
+
+
+
+ ) : (
+
+
+
+ )}
+
+
+
)
}
diff --git a/src/containers/unit/Comments/List/List.tsx b/src/containers/unit/Comments/List/List.tsx
index 85ebb34a8..019674417 100644
--- a/src/containers/unit/Comments/List/List.tsx
+++ b/src/containers/unit/Comments/List/List.tsx
@@ -3,6 +3,7 @@ import React from 'react'
import type { TAccount, TComment } from '@/spec'
import Comment from '../Comment'
+import RepliesList from './RepliesList'
import DateDivider from './DateDivider'
type TProps = {
@@ -11,19 +12,29 @@ type TProps = {
accountInfo: TAccount
}
-const List: React.FC = ({ entries, tobeDeleteId, accountInfo }) => (
-
- {entries.map((c, index) => (
-
-
- {(index === 1 || index === 3) && }
-
- ))}
-
-)
+const List: React.FC = ({ entries, tobeDeleteId, accountInfo }) => {
+ return (
+
+ {entries.map((c) => (
+
+
+ {c.id === '354' && }
+ {c.id === '377' && (
+
+ )}
+
+ ))}
+
+ )
+}
export default React.memo(List)
diff --git a/src/containers/unit/Comments/List/RepliesList.tsx b/src/containers/unit/Comments/List/RepliesList.tsx
new file mode 100644
index 000000000..ad8cd0c42
--- /dev/null
+++ b/src/containers/unit/Comments/List/RepliesList.tsx
@@ -0,0 +1,38 @@
+import React from 'react'
+
+import type { TAccount, TComment } from '@/spec'
+
+import TogglerButton from './TogglerButton'
+import Comment from '../Comment'
+
+import { RepliesWrapper, RepliesCommentsWrapper } from '../styles/list/list'
+
+type TProps = {
+ entries: TComment[]
+ tobeDeleteId: string
+ accountInfo: TAccount
+}
+
+const RepliesList: React.FC = ({
+ entries,
+ tobeDeleteId,
+ accountInfo,
+}) => {
+ return (
+
+ {entries.slice(7, 9).map((c) => (
+
+
+
+ ))}
+
+
+ )
+}
+
+export default React.memo(RepliesList)
diff --git a/src/containers/unit/Comments/List/TogglerButton.tsx b/src/containers/unit/Comments/List/TogglerButton.tsx
new file mode 100644
index 000000000..1c0a0c10d
--- /dev/null
+++ b/src/containers/unit/Comments/List/TogglerButton.tsx
@@ -0,0 +1,22 @@
+import React from 'react'
+
+import {
+ Wrapper,
+ SlashSign,
+ DividerLine,
+ Text,
+} from '../styles/list/toggler_button'
+
+type TProps = {
+ text: string
+}
+
+const TogglerButton: React.FC = ({ text }) => (
+
+ //
+
+ {text}
+
+)
+
+export default React.memo(TogglerButton)
diff --git a/src/containers/unit/Comments/styles/comment/actions.ts b/src/containers/unit/Comments/styles/comment/actions.ts
index f8e2e1cc3..cd853a2ec 100755
--- a/src/containers/unit/Comments/styles/comment/actions.ts
+++ b/src/containers/unit/Comments/styles/comment/actions.ts
@@ -1,5 +1,6 @@
import styled from 'styled-components'
+import Img from '@/Img'
import { theme, css } from '@/utils'
// import { CommentBodyInfo } from './index'
@@ -11,12 +12,14 @@ export const Wrapper = styled.div`
font-size: 12px;
`};
`
+export const ActionWrapper = styled.div`
+ margin-left: 13px;
+`
+export const ActionIcon = styled(Img)`
+ fill: ${theme('comment.action')};
+ ${css.size(13)};
+ cursor: pointer;
+`
export const ReplyAction = styled.div`
- ${css.flex()};
color: ${theme('comment.action')};
- cursor: pointer;
- font-weight: bold;
- opacity: 1;
-
- transition: opacity 0.3s;
`
diff --git a/src/containers/unit/Comments/styles/comment/desktop_view.ts b/src/containers/unit/Comments/styles/comment/desktop_view.ts
index 7e1fd892f..218cc5fd8 100644
--- a/src/containers/unit/Comments/styles/comment/desktop_view.ts
+++ b/src/containers/unit/Comments/styles/comment/desktop_view.ts
@@ -5,34 +5,35 @@ import { theme, css } from '@/utils'
import PinSVG from '@/SvgIcons/PinSVG'
-export const Wrapper = styled.div<{ pined: boolean }>`
+type TWrapper = {
+ pined: boolean
+}
+
+export const Wrapper = styled.div`
position: relative;
${css.flex()};
- margin-bottom: 14px;
- padding: 15px 5px;
- padding-top: ${({ pined }) => (pined ? '24px' : '15px')};
+ margin-left: 5px;
+ padding-top: ${({ pined }) => (pined ? '24px' : '20px')};
position: relative;
background: transparent;
- border-bottom: 1px solid;
- border-bottom-color: #0b4252;
`
export const PinState = styled.div`
position: absolute;
top: 0;
left: 0;
${css.flex('align-center')};
- margin-left: 5px;
+ margin-left: 1px;
`
export const PinIcon = styled(PinSVG)`
fill: ${theme('thread.articleDigest')};
${css.size(14)};
- opacity: 0.8;
+ opacity: 0.9;
transform: rotate(-30deg);
`
export const PinText = styled.div`
font-size: 12px;
color: ${theme('thread.articleDigest')};
- margin-left: 12px;
+ margin-left: 15px;
opacity: 0.8;
`
@@ -41,12 +42,52 @@ export const CommentWrapper = styled.div<{ tobeDelete: boolean }>`
${css.flexGrow()};
filter: ${({ tobeDelete }) => (tobeDelete ? 'blur(3px)' : '')};
`
+export const SidebarWrapper = styled.div`
+ ${css.flexColumn('align-start')};
+ height: 100%;
+ min-width: 35px;
+`
+export const BadgePopContent = styled.div`
+ padding: 5px 10px;
+ font-size: 12px;
+`
+export const AuthorUpvotedIcon = styled(Img)`
+ ${css.size(14)};
+ fill: ${theme('comment.icon')};
+ opacity: 0.6;
+ margin-top: 3px;
+`
+export const SolutionIcon = styled(Img)<{ isAuthorUpvoted: boolean }>`
+ ${css.size(14)};
+ fill: ${theme('baseColor.green')};
+ margin-top: ${({ isAuthorUpvoted }) => (isAuthorUpvoted ? '7px' : '3px')};
+ margin-left: 1px;
+`
+export const RangeLine = styled.div<{ hasReplies: boolean }>`
+ flex-grow: 1;
+ width: 25px;
+ height: 100%;
+ border-left: 1px solid;
+ border-left-color: #004251;
+ margin-left: 6px;
+ margin-top: 8px;
+ opacity: 0;
+ opacity: ${({ hasReplies }) => (hasReplies ? 1 : 0)};
+
+ ${SidebarWrapper}:hover & {
+ opacity: 1;
+ cursor: pointer;
+ }
+
+ transition: all 0.25s;
+`
export const CommentBodyInfo = styled.div`
${css.flexColumn()};
width: 100%;
`
export const CommentContent = styled.div`
- font-size: 0.9rem;
+ font-size: 14px;
+ margin-left: 1px;
`
export const LikeIcon = styled(Img)`
fill: ${theme('comment.icon')};
diff --git a/src/containers/unit/Comments/styles/comment/footer.ts b/src/containers/unit/Comments/styles/comment/footer.ts
index ff8f3f1c0..b78f96c75 100755
--- a/src/containers/unit/Comments/styles/comment/footer.ts
+++ b/src/containers/unit/Comments/styles/comment/footer.ts
@@ -1,10 +1,19 @@
import styled from 'styled-components'
-import Img from '@/Img'
-import { css, theme } from '@/utils'
+// import Img from '@/Img'
+import { css } from '@/utils'
-export const Wrapper = styled.div`
+type TWrapper = {
+ hasReplies: boolean
+ withoutBottomDivider: boolean
+}
+
+export const Wrapper = styled.div`
${css.flex('align-center')};
margin-top: 5px;
+ padding-bottom: ${({ hasReplies }) => (hasReplies ? '16px' : '10px')};
+ border-bottom: 1px solid;
+ border-bottom-color: ${({ withoutBottomDivider }) =>
+ withoutBottomDivider ? 'transparent' : '#0a3846'};
`
export const holder = 1
diff --git a/src/containers/unit/Comments/styles/comment/header.ts b/src/containers/unit/Comments/styles/comment/header.ts
index 19bdb12e3..3ae643bc5 100755
--- a/src/containers/unit/Comments/styles/comment/header.ts
+++ b/src/containers/unit/Comments/styles/comment/header.ts
@@ -7,7 +7,7 @@ import { Wrapper as CommentBlock } from './desktop_view'
export const Wrapper = styled.div`
${css.flex('align-center')};
- margin-bottom: 14px;
+ margin-bottom: 15px;
`
export const Avatar = styled(Img)`
${css.circle(24)};
diff --git a/src/containers/unit/Comments/styles/comment/upvote.ts b/src/containers/unit/Comments/styles/comment/upvote.ts
index b82f24d9f..34cb4401f 100755
--- a/src/containers/unit/Comments/styles/comment/upvote.ts
+++ b/src/containers/unit/Comments/styles/comment/upvote.ts
@@ -6,7 +6,6 @@ import { theme, css } from '@/utils'
export const Wrapper = styled.div`
${css.flexColumn('align-start', 'justify-start')};
color: ${theme('thread.articleTitle')};
- min-width: 32px;
margin-top: 5px;
${css.media.mobile`
diff --git a/src/containers/unit/Comments/styles/comments_filter.ts b/src/containers/unit/Comments/styles/comments_filter.ts
deleted file mode 100755
index 6e363b547..000000000
--- a/src/containers/unit/Comments/styles/comments_filter.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import styled from 'styled-components'
-
-import type { TActive } from '@/spec'
-import Img from '@/Img'
-import { theme, css } from '@/utils'
-
-export const FilterWraper = styled.div`
- margin-right: 8px;
- margin-top: 8px;
- display: ${({ show }) => (show ? 'block' : 'none')};
- ${css.smokey()};
-
- ${css.media.mobile`
- margin-right: 0;
- margin-top: 2px;
- `};
-`
-export const Header = styled.div`
- ${css.flex('align-center')};
- color: ${theme('comment.title')};
-
- ${css.media.mobile`
- font-size: 13px;
- `};
-`
-type TFilterIcon = { reverse?: boolean }
-export const FilterIcon = styled(Img)`
- fill: ${theme('comment.title')};
- margin-right: 3px;
- ${css.size(20)};
- transform: ${({ reverse }) => (reverse ? 'rotate(180deg)' : '')};
- ${css.media.mobile`
- ${css.size(15)};
- `};
-`
-export const RecentlyIcon = styled(FilterIcon)``
-export const MenuWrapper = styled.div`
- ${css.flexColumn('align-center')};
- width: 80px;
- margin-top: 10px;
-`
-
-export const MenuItem = styled.div`
- margin-bottom: 10px;
- color: ${({ active }) =>
- active ? theme('comment.filterActive') : theme('comment.filter')};
- &:hover {
- cursor: pointer;
- color: ${theme('comment.filterActive')};
- }
-`
diff --git a/src/containers/unit/Comments/styles/list/date_divider.ts b/src/containers/unit/Comments/styles/list/date_divider.ts
index 3b74fcdb3..f2ed78f2e 100644
--- a/src/containers/unit/Comments/styles/list/date_divider.ts
+++ b/src/containers/unit/Comments/styles/list/date_divider.ts
@@ -5,6 +5,7 @@ import { theme, css } from '@/utils'
export const Wrapper = styled.div`
${css.flex('align-center')};
color: ${theme('thread.articleDigest')};
+ padding-top: 12px;
padding-bottom: 10px;
`
export const SlashSign = styled.div`
diff --git a/src/containers/unit/Comments/styles/list/header.ts b/src/containers/unit/Comments/styles/list/header.ts
index 0e7ad078b..ebb163d70 100644
--- a/src/containers/unit/Comments/styles/list/header.ts
+++ b/src/containers/unit/Comments/styles/list/header.ts
@@ -1,5 +1,7 @@
import styled from 'styled-components'
+import type { TActive } from '@/spec'
+import Img from '@/Img'
import { theme, css } from '@/utils'
export const Wrapper = styled.div`
@@ -44,3 +46,30 @@ export const CommentBlock = styled.div`
border-radius: 3px;
background: ${theme('drawer.articleBg')};
`
+export const ActionsWrapper = styled.div`
+ ${css.flex('align-center')};
+`
+export const ActionIcon = styled(Img)`
+ fill: ${({ active }) => (active ? '#66b5e8' : theme('thread.articleDigest'))};
+ ${css.size(16)};
+ margin-left: 4px;
+ margin-right: 4px;
+
+ &:hover {
+ fill: ${theme('thread.articleTitle')};
+ cursor: pointer;
+ }
+
+ transition: all 0.25s;
+`
+export const ExpandIcon = styled(ActionIcon)`
+ ${css.size(14)};
+`
+export const FoldIcon = styled(ActionIcon)`
+ ${css.size(13)};
+`
+export const IconDescText = styled.div`
+ ${css.flex('align-both')};
+ min-width: 90px;
+ padding: 5px 10px;
+`
diff --git a/src/containers/unit/Comments/styles/list/list.ts b/src/containers/unit/Comments/styles/list/list.ts
new file mode 100644
index 000000000..e9a80c6b1
--- /dev/null
+++ b/src/containers/unit/Comments/styles/list/list.ts
@@ -0,0 +1,14 @@
+import styled from 'styled-components'
+
+// import { theme, css } from '@/utils'
+
+// min-height: 300px;
+export const Wrapper = styled.div``
+export const RepliesWrapper = styled.div`
+ border-left: 1px solid;
+ border-left-color: #004251;
+ margin-left: 12px;
+`
+export const RepliesCommentsWrapper = styled.div`
+ margin-left: 24px;
+`
diff --git a/src/containers/unit/Comments/styles/list/toggler_button.ts b/src/containers/unit/Comments/styles/list/toggler_button.ts
new file mode 100644
index 000000000..fd12ef2c3
--- /dev/null
+++ b/src/containers/unit/Comments/styles/list/toggler_button.ts
@@ -0,0 +1,38 @@
+import styled from 'styled-components'
+
+import { theme, css } from '@/utils'
+
+export const Wrapper = styled.div`
+ ${css.flex('align-center')};
+ color: ${theme('thread.articleDigest')};
+ padding-top: 12px;
+ padding-bottom: 18px;
+ margin-left: 25px;
+`
+export const SlashSign = styled.div`
+ font-size: 10px;
+ font-weight: bolder;
+ font-family: cursive;
+ margin-left: 6px;
+ opacity: 0.8;
+`
+export const DividerLine = styled.div`
+ width: 10px;
+ height: 1px;
+ background: ${theme('thread.articleDigest')};
+ opacity: 0.6;
+ margin-left: 7px;
+ margin-right: 7px;
+`
+export const Text = styled.div`
+ font-size: 12px;
+ opacity: 0.8;
+ color: #00a59b;
+
+ &:hover {
+ opacity: 1;
+ cursor: pointer;
+ }
+
+ transition: all 0.25s;
+`