From d3f0cfcb74a4984e07d680f6de5b35197323f248 Mon Sep 17 00:00:00 2001 From: Rui Saraiva Date: Sun, 12 Apr 2020 09:43:27 +0100 Subject: [PATCH] feat(layout): add base page layout (#24) * feat(layout): add base page layout Add base layout component with dark mode support fix #15 * feat(storybook): add dark mode support to all components --- .storybook/logo.png | Bin 20332 -> 27580 bytes .storybook/preview-body.html | 2 +- .storybook/styles.css | 8 +++ components/base-layout/index.module.scss | 16 +++++ components/base-layout/index.tsx | 26 +++++++ components/button/index.module.scss | 11 +++ components/button/index.stories.tsx | 6 +- components/button/index.tsx | 20 ++++-- components/dark-mode-toggle/index.module.scss | 13 ++-- components/dark-mode-toggle/index.stories.tsx | 6 +- components/dark-mode-toggle/index.tsx | 6 +- components/seo/index.tsx | 19 ++++++ components/svgs/svg-moon.tsx | 2 +- components/svgs/svg-sun.tsx | 2 +- components/tool-title/index.module.scss | 6 ++ components/tool-title/index.stories.tsx | 26 +++++++ components/tool-title/index.tsx | 21 ++++++ components/typography/index.module.scss | 10 +++ components/typography/index.stories.tsx | 17 +++-- components/typography/index.tsx | 4 +- pages/_document.tsx | 2 +- pages/api/{resize.ts => favycon.ts} | 4 +- pages/appycon.tsx | 27 ++++++++ pages/favycon.tsx | 30 ++++++++ pages/index.tsx | 64 +++--------------- public/{ => js}/noflash.js | 0 styles/main.scss | 9 +++ styles/variables.scss | 8 ++- tsconfig.json | 2 +- 29 files changed, 280 insertions(+), 87 deletions(-) create mode 100644 components/base-layout/index.module.scss create mode 100644 components/base-layout/index.tsx create mode 100644 components/seo/index.tsx create mode 100644 components/tool-title/index.module.scss create mode 100644 components/tool-title/index.stories.tsx create mode 100644 components/tool-title/index.tsx rename pages/api/{resize.ts => favycon.ts} (95%) create mode 100644 pages/appycon.tsx create mode 100644 pages/favycon.tsx rename public/{ => js}/noflash.js (100%) diff --git a/.storybook/logo.png b/.storybook/logo.png index 9c5b9ac29a7c897b657df7b25f777a07cd57d68f..0b09ba25f1f77f4f13dca9a1010db4cf652357d0 100644 GIT binary patch literal 27580 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 literal 20332 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 P00000NkvXXu0mjfkUNa1 diff --git a/.storybook/preview-body.html b/.storybook/preview-body.html index 3c380c0..c2938b6 100644 --- a/.storybook/preview-body.html +++ b/.storybook/preview-body.html @@ -1 +1 @@ - + diff --git a/.storybook/styles.css b/.storybook/styles.css index b7739c2..5d020a0 100644 --- a/.storybook/styles.css +++ b/.storybook/styles.css @@ -1,4 +1,12 @@ .sb-show-main { margin: 0; background: inherit; + transition: background 0.2s ease; +} + +.sb-show-main.light-mode { + background: #fff; +} +.sb-show-main.dark-mode { + background: #191a1f; } diff --git a/components/base-layout/index.module.scss b/components/base-layout/index.module.scss new file mode 100644 index 0000000..5d4185b --- /dev/null +++ b/components/base-layout/index.module.scss @@ -0,0 +1,16 @@ +@import '../../styles/variables.scss'; + +.root { + padding: 0; +} + +.container { + max-width: 1440px; + padding: 20px; +} + +.header { + display: flex; + align-items: center; + justify-content: space-between; +} diff --git a/components/base-layout/index.tsx b/components/base-layout/index.tsx new file mode 100644 index 0000000..c2bbb3e --- /dev/null +++ b/components/base-layout/index.tsx @@ -0,0 +1,26 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { DarkModeToggle } from 'components/dark-mode-toggle' + +import styles from './index.module.scss' +import { Typography } from 'components/typography' + +type BaseLayoutProps = { + children: PropTypes.ReactNodeLike +} + +const BaseLayout = ({ children }: BaseLayoutProps) => { + return ( +
+
+
+ Menu + +
+
+
{children}
+
+ ) +} + +export { BaseLayout } diff --git a/components/button/index.module.scss b/components/button/index.module.scss index 5374f9e..693e7b3 100644 --- a/components/button/index.module.scss +++ b/components/button/index.module.scss @@ -5,10 +5,20 @@ font-size: $font-size-medium-body; line-height: $line-height-medium-body; color: $black; + cursor: pointer; background-color: $off-white; border: 1px solid $light-gray-one; border-radius: 4px; box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12); + transition: all 0.2s ease; + + &:focus { + outline: none; + } +} + +.noClick { + cursor: default; } .transparent { @@ -23,6 +33,7 @@ .dark { color: $white; background-color: $dark-purple; + border: 1px solid $dark-purple; } .regular { diff --git a/components/button/index.stories.tsx b/components/button/index.stories.tsx index adc5799..bf7e7db 100644 --- a/components/button/index.stories.tsx +++ b/components/button/index.stories.tsx @@ -14,11 +14,13 @@ export const ButtonDesktop = () => { const weight = select('weight', ['regular', 'medium', 'semiBold', 'bold'], 'bold') const body = text('body', 'Mac app coming soon') return ( -
+
- +
+
+
) } diff --git a/components/button/index.tsx b/components/button/index.tsx index 103e7cf..af2c84d 100644 --- a/components/button/index.tsx +++ b/components/button/index.tsx @@ -11,11 +11,23 @@ type ButtonProps = { weight: 'regular' | 'medium' | 'semiBold' | 'bold' } -const Button = ({ children, variant, weight }: ButtonProps) => { - const { value: isDark } = useDarkMode() - const className = classNames(styles[variant], { [styles.dark]: isDark }, styles[weight]) +const Button = ({ + children, + variant, + weight, + ...props +}: ButtonProps & React.DetailedHTMLProps, HTMLButtonElement>) => { + const { value: isDark } = useDarkMode(false) + const className = classNames(styles[variant], styles[weight], { + [styles.dark]: isDark, + [styles.noClick]: !props.onClick, + }) - return + return ( + + ) } Button.defaultProps = { diff --git a/components/dark-mode-toggle/index.module.scss b/components/dark-mode-toggle/index.module.scss index 35385b1..ad95fe5 100644 --- a/components/dark-mode-toggle/index.module.scss +++ b/components/dark-mode-toggle/index.module.scss @@ -1,21 +1,26 @@ @import '../../styles/variables.scss'; .root { - padding: 2px; + position: relative; } .label { display: flex; align-items: center; justify-content: center; - width: 28px; - height: 28px; + width: 32px; + height: 32px; cursor: pointer; user-select: none; } .checkbox { - position: relative; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + margin: 0; overflow: hidden; cursor: pointer; visibility: hidden; diff --git a/components/dark-mode-toggle/index.stories.tsx b/components/dark-mode-toggle/index.stories.tsx index 1b01d8c..f843fae 100644 --- a/components/dark-mode-toggle/index.stories.tsx +++ b/components/dark-mode-toggle/index.stories.tsx @@ -1,6 +1,7 @@ import React from 'react' import { DarkModeToggle } from '.' import useDarkMode from 'use-dark-mode' +import { Typography } from 'components/typography' export default { title: 'Dark Mode Toggle', @@ -10,9 +11,10 @@ export const ToggleDesktop = () => { const darkMode = useDarkMode(false) return ( -
+
-
dark mode: {darkMode.value ? 'enabled' : 'disabled'}
+
+ dark mode: {darkMode.value ? 'enabled' : 'disabled'}
) } diff --git a/components/dark-mode-toggle/index.tsx b/components/dark-mode-toggle/index.tsx index 9d0ba7c..ac629c2 100644 --- a/components/dark-mode-toggle/index.tsx +++ b/components/dark-mode-toggle/index.tsx @@ -10,9 +10,6 @@ const DarkModeToggle = () => { return (
- { checked={darkMode.value} onChange={darkMode.toggle} /> +
) } diff --git a/components/seo/index.tsx b/components/seo/index.tsx new file mode 100644 index 0000000..9114237 --- /dev/null +++ b/components/seo/index.tsx @@ -0,0 +1,19 @@ +import React from 'react' +import Head from 'next/head' + +type SEOProps = { + title: string + description: string +} + +const SEO = ({ title, description }: SEOProps) => ( + + {title} + + + + + +) + +export { SEO } diff --git a/components/svgs/svg-moon.tsx b/components/svgs/svg-moon.tsx index a15cda2..8f23ee3 100644 --- a/components/svgs/svg-moon.tsx +++ b/components/svgs/svg-moon.tsx @@ -5,7 +5,7 @@ const SvgMoon: React.FC> const idPrefix = uniqueId('svg-') return ( - Moon + Dark mode > const idPrefix = uniqueId('svg-') return ( - Sun + Light mode { + const { toggle } = useDarkMode(false) + const body = text('body', 'Favycon') + return ( +
+ {body} +
+ +
+ ) +} + +ToolTitleDesktop.story = { + name: 'desktop', +} diff --git a/components/tool-title/index.tsx b/components/tool-title/index.tsx new file mode 100644 index 0000000..2e1e13b --- /dev/null +++ b/components/tool-title/index.tsx @@ -0,0 +1,21 @@ +import React from 'react' +import { Typography } from 'components/typography' + +import styles from './index.module.scss' + +type ToolTitleProps = { + children: string +} + +const ToolTitle = ({ children }: ToolTitleProps) => ( +
+ + {children} + + + TOOL + +
+) + +export { ToolTitle } diff --git a/components/typography/index.module.scss b/components/typography/index.module.scss index b86a4c3..275de98 100644 --- a/components/typography/index.module.scss +++ b/components/typography/index.module.scss @@ -53,6 +53,11 @@ .black { color: $black; + transition: color 0.2s ease; + + &.dark { + color: $white; + } } .gray { @@ -61,4 +66,9 @@ .white { color: $white; + transition: color 0.2s ease; + + &.dark { + color: $black; + } } diff --git a/components/typography/index.stories.tsx b/components/typography/index.stories.tsx index 46bdc29..46545e9 100644 --- a/components/typography/index.stories.tsx +++ b/components/typography/index.stories.tsx @@ -1,5 +1,7 @@ import React from 'react' import { withKnobs, text, select } from '@storybook/addon-knobs' +import useDarkMode from 'use-dark-mode' +import { Button } from 'components/button' import { Typography } from '.' export default { @@ -7,7 +9,8 @@ export default { decorators: [withKnobs], } -export const typographyDesktop = () => { +export const TypographyDesktop = () => { + const { toggle } = useDarkMode(false) const variant = select( 'variant', ['h1', 'smallBody', 'regularBody', 'mediumBody', 'largeBody', 'footer', 'superscript'], @@ -17,12 +20,16 @@ export const typographyDesktop = () => { const color = select('color', ['black', 'gray', 'white'], 'black') const body = text('body', 'Some text') return ( - - {body} - +
+ + {body} + +
+ +
) } -typographyDesktop.story = { +TypographyDesktop.story = { name: 'Desktop', } diff --git a/components/typography/index.tsx b/components/typography/index.tsx index 3f6d19d..6afa783 100644 --- a/components/typography/index.tsx +++ b/components/typography/index.tsx @@ -1,6 +1,7 @@ import React from 'react' import PropTypes from 'prop-types' import classNames from 'classnames' +import useDarkMode from 'use-dark-mode' import styles from './index.module.scss' @@ -13,7 +14,8 @@ type TypographyProps = { } const Typography = ({ children, variant, weight, color, tag }: TypographyProps) => { - const className = classNames(styles[variant], styles[color], styles[weight]) + const { value: isDark } = useDarkMode(false) + const className = classNames(styles[variant], styles[color], styles[weight], { [styles.dark]: isDark }) const componentType = ['h1'].includes(variant) ? variant : 'p' return React.createElement(tag || componentType, { className }, children) diff --git a/pages/_document.tsx b/pages/_document.tsx index a9b4dd0..630dcf2 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -7,7 +7,7 @@ class MyDocument extends Document { -