From aa1ca65e7c9807c6d6020e39166536297fe1cdae Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Sat, 15 Jan 2022 22:45:57 +0100 Subject: chore: update sidebar and widgets styles I'm now using a widget that can be expanded/collapsed. It also allows me to handle more effectively widgets overflow and to avoid styles repetitions. However, with stylelint rule "no-descending-specificity", I'm not sure if the stylesheets are really logical... Maybe I should deactivate this rule. --- src/components/PostHeader/PostHeader.module.scss | 5 +- src/components/PostPreview/PostPreview.module.scss | 2 +- src/components/PostPreview/PostPreview.tsx | 3 +- src/components/PostsList/PostsList.module.scss | 2 +- src/components/Sidebar/Sidebar.module.scss | 31 ++-- src/components/Sidebar/Sidebar.tsx | 30 +++- src/components/ToC/ToC.module.scss | 27 --- src/components/ToC/ToC.tsx | 29 --- .../Widget/CVPreview/CVPreview.module.scss | 6 - src/components/Widget/CVPreview/CVPreview.tsx | 36 ---- .../Widget/RecentPosts/RecentPosts.module.scss | 94 ---------- src/components/Widget/RecentPosts/RecentPosts.tsx | 63 ------- .../Widget/RelatedThematics/RelatedThematics.tsx | 31 ---- .../Widget/RelatedTopics/RelatedTopics.tsx | 31 ---- src/components/Widget/Sharing/Sharing.module.scss | 198 --------------------- src/components/Widget/Sharing/Sharing.tsx | 111 ------------ .../Widget/SocialMedia/SocialMedia.module.scss | 47 ----- src/components/Widget/SocialMedia/SocialMedia.tsx | 72 -------- .../Widget/ThematicsList/ThematicsList.tsx | 40 ----- src/components/Widget/TopicsList/TopicsList.tsx | 40 ----- src/components/Widget/Widget.module.scss | 7 - src/components/Widget/index.tsx | 19 -- .../ExpandableWidget/ExpandableWidget.module.scss | 146 +++++++++++++++ .../ExpandableWidget/ExpandableWidget.tsx | 47 +++++ src/components/WidgetParts/List/List.module.scss | 47 +++++ src/components/WidgetParts/List/List.tsx | 7 + .../OrderedList/OrderedList.module.scss | 66 +++++++ .../WidgetParts/OrderedList/OrderedList.tsx | 7 + src/components/WidgetParts/index.tsx | 5 + .../Widgets/CVPreview/CVPreview.module.scss | 6 + src/components/Widgets/CVPreview/CVPreview.tsx | 36 ++++ .../Widgets/RecentPosts/RecentPosts.module.scss | 94 ++++++++++ src/components/Widgets/RecentPosts/RecentPosts.tsx | 63 +++++++ .../Widgets/RelatedThematics/RelatedThematics.tsx | 31 ++++ .../Widgets/RelatedTopics/RelatedTopics.tsx | 31 ++++ src/components/Widgets/Sharing/Sharing.module.scss | 196 ++++++++++++++++++++ src/components/Widgets/Sharing/Sharing.tsx | 113 ++++++++++++ .../Widgets/SocialMedia/SocialMedia.module.scss | 48 +++++ src/components/Widgets/SocialMedia/SocialMedia.tsx | 72 ++++++++ .../Widgets/ThematicsList/ThematicsList.tsx | 46 +++++ src/components/Widgets/ToC/ToC.module.scss | 70 ++++++++ src/components/Widgets/ToC/ToC.tsx | 30 ++++ src/components/Widgets/TopicsList/TopicsList.tsx | 46 +++++ src/components/Widgets/index.tsx | 21 +++ src/content | 2 +- src/pages/article/[slug].tsx | 9 +- src/pages/blog/index.tsx | 4 +- src/pages/contact.tsx | 4 +- src/pages/cv.tsx | 9 +- src/pages/mentions-legales.tsx | 7 +- src/pages/recherche/index.tsx | 4 +- src/pages/sujet/[slug].tsx | 12 +- src/pages/thematique/[slug].tsx | 12 +- src/styles/pages/Page.module.scss | 29 --- src/ts/types/app.ts | 4 + 55 files changed, 1315 insertions(+), 933 deletions(-) delete mode 100644 src/components/ToC/ToC.module.scss delete mode 100644 src/components/ToC/ToC.tsx delete mode 100644 src/components/Widget/CVPreview/CVPreview.module.scss delete mode 100644 src/components/Widget/CVPreview/CVPreview.tsx delete mode 100644 src/components/Widget/RecentPosts/RecentPosts.module.scss delete mode 100644 src/components/Widget/RecentPosts/RecentPosts.tsx delete mode 100644 src/components/Widget/RelatedThematics/RelatedThematics.tsx delete mode 100644 src/components/Widget/RelatedTopics/RelatedTopics.tsx delete mode 100644 src/components/Widget/Sharing/Sharing.module.scss delete mode 100644 src/components/Widget/Sharing/Sharing.tsx delete mode 100644 src/components/Widget/SocialMedia/SocialMedia.module.scss delete mode 100644 src/components/Widget/SocialMedia/SocialMedia.tsx delete mode 100644 src/components/Widget/ThematicsList/ThematicsList.tsx delete mode 100644 src/components/Widget/TopicsList/TopicsList.tsx delete mode 100644 src/components/Widget/Widget.module.scss delete mode 100644 src/components/Widget/index.tsx create mode 100644 src/components/WidgetParts/ExpandableWidget/ExpandableWidget.module.scss create mode 100644 src/components/WidgetParts/ExpandableWidget/ExpandableWidget.tsx create mode 100644 src/components/WidgetParts/List/List.module.scss create mode 100644 src/components/WidgetParts/List/List.tsx create mode 100644 src/components/WidgetParts/OrderedList/OrderedList.module.scss create mode 100644 src/components/WidgetParts/OrderedList/OrderedList.tsx create mode 100644 src/components/WidgetParts/index.tsx create mode 100644 src/components/Widgets/CVPreview/CVPreview.module.scss create mode 100644 src/components/Widgets/CVPreview/CVPreview.tsx create mode 100644 src/components/Widgets/RecentPosts/RecentPosts.module.scss create mode 100644 src/components/Widgets/RecentPosts/RecentPosts.tsx create mode 100644 src/components/Widgets/RelatedThematics/RelatedThematics.tsx create mode 100644 src/components/Widgets/RelatedTopics/RelatedTopics.tsx create mode 100644 src/components/Widgets/Sharing/Sharing.module.scss create mode 100644 src/components/Widgets/Sharing/Sharing.tsx create mode 100644 src/components/Widgets/SocialMedia/SocialMedia.module.scss create mode 100644 src/components/Widgets/SocialMedia/SocialMedia.tsx create mode 100644 src/components/Widgets/ThematicsList/ThematicsList.tsx create mode 100644 src/components/Widgets/ToC/ToC.module.scss create mode 100644 src/components/Widgets/ToC/ToC.tsx create mode 100644 src/components/Widgets/TopicsList/TopicsList.tsx create mode 100644 src/components/Widgets/index.tsx (limited to 'src') diff --git a/src/components/PostHeader/PostHeader.module.scss b/src/components/PostHeader/PostHeader.module.scss index 3db92da..33dc488 100644 --- a/src/components/PostHeader/PostHeader.module.scss +++ b/src/components/PostHeader/PostHeader.module.scss @@ -4,10 +4,13 @@ .wrapper { composes: grid from "@styles/layout/_grid.scss"; max-width: 100%; - margin-bottom: var(--spacing-md); position: relative; @include mix.media("screen") { + @include mix.dimensions("md") { + margin-bottom: var(--spacing-md); + } + @include mix.dimensions("lg") { --grid-gap: var(--spacing-lg); } diff --git a/src/components/PostPreview/PostPreview.module.scss b/src/components/PostPreview/PostPreview.module.scss index 8039a87..8c14000 100644 --- a/src/components/PostPreview/PostPreview.module.scss +++ b/src/components/PostPreview/PostPreview.module.scss @@ -48,7 +48,7 @@ h2.title { .wrapper { margin: 0; padding: var(--spacing-sm) var(--spacing-sm) var(--spacing-md); - border: fun.convert-px(1) solid var(--color-border-light); + border: fun.convert-px(1) solid var(--color-primary-dark); border-radius: fun.convert-px(3); box-shadow: fun.convert-px(1) fun.convert-px(1) fun.convert-px(1) 0 var(--color-shadow-light), diff --git a/src/components/PostPreview/PostPreview.tsx b/src/components/PostPreview/PostPreview.tsx index 3ea4c40..3bf7bdb 100644 --- a/src/components/PostPreview/PostPreview.tsx +++ b/src/components/PostPreview/PostPreview.tsx @@ -6,8 +6,7 @@ import styles from './PostPreview.module.scss'; import Image from 'next/image'; import { ButtonLink } from '@components/Buttons'; import { ArrowIcon } from '@components/Icons'; - -type TitleLevel = 2 | 3 | 4 | 5 | 6; +import { TitleLevel } from '@ts/types/app'; const PostPreview = ({ post, diff --git a/src/components/PostsList/PostsList.module.scss b/src/components/PostsList/PostsList.module.scss index 6c3f93e..5d3ee95 100644 --- a/src/components/PostsList/PostsList.module.scss +++ b/src/components/PostsList/PostsList.module.scss @@ -19,7 +19,7 @@ grid-column: 1; justify-self: end; position: sticky; - top: 0; + top: var(--spacing-xs); margin-right: var(--spacing-lg); } } diff --git a/src/components/Sidebar/Sidebar.module.scss b/src/components/Sidebar/Sidebar.module.scss index 83c1024..18291b6 100644 --- a/src/components/Sidebar/Sidebar.module.scss +++ b/src/components/Sidebar/Sidebar.module.scss @@ -2,37 +2,44 @@ .wrapper { grid-column: 2; - margin-top: var(--spacing-lg); + margin: var(--spacing-md) 0; @include mix.media("screen") { @include mix.dimensions("md") { - grid-column: 3; - grid-row: 2; align-self: stretch; display: flex; - flex-flow: column nowrap; - margin-top: 0; - position: relative; - visibility: hidden; + flex-flow: column; + justify-content: flex-start; + margin: var(--spacing-xs); - &:hover { - visibility: visible; + &--right { + grid-row: 2 / 4; + grid-column: 3; } + } - > * { - visibility: visible; + @include mix.dimensions("lg") { + &--left { + grid-row: 2 / 4; + grid-column: 1; } } } } .body { + display: flex; + flex-flow: column; + justify-content: flex-start; + max-height: 100vh; + @include mix.media("screen") { @include mix.dimensions("md") { align-self: flex-start; width: 100%; + max-height: calc(100vh - (var(--spacing-xs) * 2)); position: sticky; - top: 0; + top: var(--spacing-xs); } } } diff --git a/src/components/Sidebar/Sidebar.tsx b/src/components/Sidebar/Sidebar.tsx index 8c9fa1d..f319f9e 100644 --- a/src/components/Sidebar/Sidebar.tsx +++ b/src/components/Sidebar/Sidebar.tsx @@ -1,10 +1,32 @@ -import { FunctionComponent } from 'react'; +import { Children, cloneElement, isValidElement, ReactNode } from 'react'; import styles from './Sidebar.module.scss'; -const Sidebar: FunctionComponent = ({ children }) => { +type SidebarPosition = 'left' | 'right'; + +const Sidebar = ({ + children, + position, + title, +}: { + children: ReactNode; + position: SidebarPosition; + title?: string; +}) => { + const childrenWithProps = Children.map(children, (child) => { + if (isValidElement(child)) { + return cloneElement(child, { titleLevel: title ? 3 : 2 }); + } + return child; + }); + + const positionClass = `wrapper--${position}`; + return ( -