From bc6244bb5825711f17c1158d13d147f14df48dd7 Mon Sep 17 00:00:00 2001 From: Sebastian Graz Date: Wed, 29 Nov 2023 21:18:47 +0100 Subject: [PATCH] Styling PR 1 (#16) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add maxwidth limit for very large screens * testing animation on hints * page aside style on darkmode * fix icon TOC * Make scrollbars stable when overflowing * fix scrollbar on search * search compact header * search style * test without bg toc * Commit * setup before mobile TOC * test if style{} clashes * fix TOC hover * add prevent default on search shortcut * add deps * Add header mobile menu setup * work on fallback logo * style search modal position * style hamburger button * padding * add rudimental toggle * comment * gap value responsive * remove slate * fix z index * undo test * Install and format --------- Co-authored-by: Samy Pessé --- bun.lockb | Bin 301573 -> 301770 bytes package.json | 7 +- src/app/[spaceId]/globals.css | 53 ++++++++++ src/components/DocumentView/File.tsx | 4 +- src/components/DocumentView/Hint.tsx | 99 ++++++++++++++++-- src/components/DocumentView/Images.tsx | 2 +- src/components/Header/CompactHeader.tsx | 20 +++- src/components/Header/Header.tsx | 4 +- src/components/Header/HeaderLogo.tsx | 50 ++++++--- src/components/Header/HeaderMobileMenu.tsx | 33 ++++++ .../PageAside/ScrollSectionsList.tsx | 7 +- src/components/Search/SearchButton.tsx | 26 +++-- src/components/Search/SearchModal.tsx | 7 +- src/components/Search/SearchResults.tsx | 2 +- src/components/SpaceContent/SpaceContent.tsx | 3 +- .../TableOfContents/PageDocumentItem.tsx | 4 +- src/components/TableOfContents/PagesList.tsx | 2 +- .../TableOfContents/TableOfContents.tsx | 25 +++-- .../TableOfContents/ToggleableLinkItem.tsx | 1 + src/components/icons/IconMenu.tsx | 19 ++++ tailwind.config.ts | 25 ++++- 21 files changed, 326 insertions(+), 67 deletions(-) create mode 100644 src/components/Header/HeaderMobileMenu.tsx create mode 100644 src/components/icons/IconMenu.tsx diff --git a/bun.lockb b/bun.lockb index c9aae63b86178c0d401d9e7b924fcb74ac077242..8f708ea6f5e52c64c8d6871b7226052e0980b33d 100755 GIT binary patch delta 42813 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 ag4=tgaEaF!EI%MES1X(g8s3y%7X26Sr>Zgl delta 43084 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 diff --git a/package.json b/package.json index 0e220c362..73d078fe5 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ }, "dependencies": { "@geist-ui/icons": "^1.0.2", + "@gitbook/api": "^0.15.0", "@radix-ui/react-popover": "^1.0.7", - "@gitbook/api": "^0.17.0", "@readme/openapi-parser": "^2.5.0", "@upstash/redis": "^1.25.1", "ajv": "^8.12.0", @@ -23,14 +23,15 @@ "bun-types": "^1.0.7", "jsontoxml": "^1.0.1", "katex": "^0.16.9", - "next": "^14.0.4-canary.25", + "next": "^14.0.3", "react": "^18", "react-dom": "^18", "react-hotkeys-hook": "^4.4.1", "recoil": "^0.7.7", "server-only": "^0.0.1", "shiki": "^0.14.5", - "tailwind-merge": "^1.14.0" + "tailwind-merge": "^1.14.0", + "tailwind-shades": "^1.1.2" }, "devDependencies": { "@cloudflare/next-on-pages": "^1.7.3", diff --git a/src/app/[spaceId]/globals.css b/src/app/[spaceId]/globals.css index fefb83f39..6589c7547 100644 --- a/src/app/[spaceId]/globals.css +++ b/src/app/[spaceId]/globals.css @@ -31,10 +31,63 @@ p { @apply text-dark/9 dark:text-light/8; } + + /* Light mode */ + ::-webkit-scrollbar { + @apply bg-transparent; + width: 8px; + } + + ::-webkit-scrollbar-thumb { + @apply bg-dark/4; + border-radius: 8px; + } + + ::-webkit-scrollbar-thumb:hover { + @apply bg-dark/5; + } + + /* Dark mode */ + .dark ::-webkit-scrollbar { + @apply bg-light/1; + } + + .dark ::-webkit-scrollbar-thumb { + @apply bg-light/3; + } + + .dark ::-webkit-scrollbar-thumb:hover { + @apply bg-light/4; + } + + /* Inverted theme light mode */ + .inverted-theme-scroll::-webkit-scrollbar { + @apply bg-transparent; + } + + .inverted-theme-scroll::-webkit-scrollbar-thumb { + @apply bg-dark/5; + } + + .inverted-theme-scroll::-webkit-scrollbar-thumb:hover { + @apply bg-dark/6; + } } @layer utilities { .linear-mask-gradient { mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1) 96px, rgba(0, 0, 0, 0)); } + .grid-area-1-1 { + grid-area: 1/1; + } + .gutter-stable { + scrollbar-gutter: stable; + } + .textwrap-balance { + text-wrap: balance; + } + .textwrap-pretty { + text-wrap: pretty; + } } diff --git a/src/components/DocumentView/File.tsx b/src/components/DocumentView/File.tsx index e715840b9..ac987e67b 100644 --- a/src/components/DocumentView/File.tsx +++ b/src/components/DocumentView/File.tsx @@ -28,8 +28,8 @@ export async function File(props: BlockProps) { 'hover:border-slate-300', 'px-5', 'py-2', - 'text-slate-500', - 'hover:text-slate-700', + /* 'text-slate-500', */ + /* 'hover:text-slate-700', */ style, )} > diff --git a/src/components/DocumentView/Hint.tsx b/src/components/DocumentView/Hint.tsx index 79289f213..f58767493 100644 --- a/src/components/DocumentView/Hint.tsx +++ b/src/components/DocumentView/Hint.tsx @@ -3,6 +3,7 @@ import IconAlertTriangle from '@geist-ui/icons/alertTriangle'; import IconCheckInCircle from '@geist-ui/icons/checkInCircle'; import IconInfo from '@geist-ui/icons/info'; import { DocumentBlockHint } from '@gitbook/api'; +import React from 'react'; import { ClassValue, tcls } from '@/lib/tailwind'; @@ -14,6 +15,7 @@ export function Hint(props: BlockProps) { const { block, style, ancestorBlocks, ...contextProps } = props; const hintStyle = HINT_STYLES[block.data.style]; const firstLine = getBlockTextStyle(block.nodes[0]); + const RenderIcon = HINT_STYLES[block.data.style].icon; return (
) { 'py-4', 'transition-colors', 'rounded', - 'border-l-4', + 'border-b-[1px]', + 'dark:border-t-[1px]', + 'dark:border-b-0', + + /* 'shadow-1xs', */ hintStyle.style, style, )} @@ -40,7 +46,9 @@ export function Hint(props: BlockProps) { hintStyle.iconStyle, )} > - + {/* */} + +
) { ); } +const SuccessIcon = () => ( +
+
+
+
+
+
+
+); +const WarningIcon = () => SuccessIcon(); +const DangerIcon = () => SuccessIcon(); +const InfoIcon = () => SuccessIcon(); + const HINT_STYLES: { [style in DocumentBlockHint['data']['style']]: { - icon: React.ComponentType<{ className?: string }>; + icon: React.ComponentType; iconStyle: ClassValue; style: ClassValue; }; } = { info: { - icon: IconInfo, + icon: SuccessIcon, iconStyle: ['text-current'], - style: ['border-dark/2', 'bg-dark/2', 'dark:bg-light/1', 'dark:border-light/3'], + style: ['border-dark/1', 'bg-dark/2', 'dark:bg-light/1', 'dark:border-light/1'], }, warning: { - icon: IconAlertCircle, + icon: WarningIcon, iconStyle: ['text-yellow, dark:text-yellow/1, dark:text-yellow/8'], - style: ['border-yellow/4', 'bg-yellow', 'dark:bg-yellow/1'], + style: ['border-yellow/6', 'bg-yellow/6', 'dark:bg-yellow/1', 'dark:border-yellow/2'], }, danger: { - icon: IconAlertTriangle, + icon: DangerIcon, iconStyle: ['text-pomegranate'], - style: ['border-pomegranate/4', 'bg-pomegranate/2', 'dark:bg-pomegranate/1'], + style: [ + 'border-pomegranate/2', + 'bg-pomegranate/2', + 'dark:bg-pomegranate/1', + 'dark:border-pomegranate/3', + ], }, success: { - icon: IconCheckInCircle, + icon: InfoIcon, iconStyle: ['text-teal'], - style: ['border-teal/4', 'bg-teal/2', 'dark:bg-teal/2'], + style: ['border-teal/2', 'bg-teal/2', 'dark:bg-teal/2'], }, }; diff --git a/src/components/DocumentView/Images.tsx b/src/components/DocumentView/Images.tsx index 8535887d5..4786470d5 100644 --- a/src/components/DocumentView/Images.tsx +++ b/src/components/DocumentView/Images.tsx @@ -21,7 +21,7 @@ export function Images(props: BlockProps) { block.data.align === 'right' && 'justify-end', block.data.align === 'left' && 'justify-start', style, - block.data.fullWidth ? 'max-w-full' : null, + block.data.fullWidth ? 'max-w-screen-2xl' : null, 'justify-center', )} > diff --git a/src/components/Header/CompactHeader.tsx b/src/components/Header/CompactHeader.tsx index 1a1735e47..025ff2e54 100644 --- a/src/components/Header/CompactHeader.tsx +++ b/src/components/Header/CompactHeader.tsx @@ -1,6 +1,7 @@ import { Collection, CustomizationSettings, Space } from '@gitbook/api'; import React from 'react'; +import { t } from '@/lib/intl'; import { tcls } from '@/lib/tailwind'; import { HeaderLogo } from './HeaderLogo'; @@ -18,8 +19,17 @@ export function CompactHeader(props: { const { space, collection, customization } = props; return ( -
-
+
+
-
+
- + + {t({ space }, 'search')} +
diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx index d44d124ec..c96774c7b 100644 --- a/src/components/Header/Header.tsx +++ b/src/components/Header/Header.tsx @@ -91,8 +91,8 @@ export function Header(props: {
- - {t({ space }, 'search')} + + {t({ space }, 'search')}
diff --git a/src/components/Header/HeaderLogo.tsx b/src/components/Header/HeaderLogo.tsx index e5697a259..4dc14f934 100644 --- a/src/components/Header/HeaderLogo.tsx +++ b/src/components/Header/HeaderLogo.tsx @@ -1,6 +1,7 @@ import { Collection, CustomizationSettings, Space } from '@gitbook/api'; import Link from 'next/link'; +import { HeaderMobileMenu } from '@/components/Header/HeaderMobileMenu'; import { Image } from '@/components/utils'; import { absoluteHref } from '@/lib/links'; import { ClassValue, tcls } from '@/lib/tailwind'; @@ -20,21 +21,24 @@ export function HeaderLogo(props: HeaderLogoProps) { const { customization } = props; return ( - - {customization.header.logo ? ( - Logo - ) : ( - - )} - +
+ + + {customization.header.logo ? ( + Logo + ) : ( + + )} + +
); } @@ -56,7 +60,21 @@ function LogoFallback(props: HeaderLogoProps) { style={['w-8', 'h-8']} /> -

+

{collection ? collection.title : space.title}

diff --git a/src/components/Header/HeaderMobileMenu.tsx b/src/components/Header/HeaderMobileMenu.tsx new file mode 100644 index 000000000..fe1e83f46 --- /dev/null +++ b/src/components/Header/HeaderMobileMenu.tsx @@ -0,0 +1,33 @@ +'use client'; + +import { IconMenu } from '@/components/icons/IconMenu'; +import { tcls } from '@/lib/tailwind'; + +export const HeaderMobileMenu = (props: Partial>) => { + const toggleNavigation = () => { + if (document.body.classList.contains('navigation-visible')) { + document.body.classList.remove('navigation-visible'); + } else { + document.body.classList.add('navigation-visible'); + } + }; + return ( + + ); +}; diff --git a/src/components/PageAside/ScrollSectionsList.tsx b/src/components/PageAside/ScrollSectionsList.tsx index f4a7d9858..2681aecc5 100644 --- a/src/components/PageAside/ScrollSectionsList.tsx +++ b/src/components/PageAside/ScrollSectionsList.tsx @@ -25,11 +25,10 @@ export function ScrollSectionsList(props: { sections: DocumentSection[] }) { 'flex', 'flex-row', 'text-sm', - section.depth > 1 - ? ['font-light', 'ps-3', 'py-1', 'text-light/5'] - : ['py-2', 'text-light/7'], + 'hover:text-primary', + section.depth > 1 ? ['ps-3', 'py-1', 'opacity-8'] : ['py-2'], - activeId === section.id ? 'text-primary' : 'hover:text-light/9', + activeId === section.id ? 'text-primary' : '', )} > {section.depth > 1 ? ( diff --git a/src/components/Search/SearchButton.tsx b/src/components/Search/SearchButton.tsx index 488a849f9..dc2758539 100644 --- a/src/components/Search/SearchButton.tsx +++ b/src/components/Search/SearchButton.tsx @@ -26,21 +26,29 @@ export function SearchButton(props: { children?: React.ReactNode; style?: ClassV 'flex', 'flex-1', 'flex-row', + 'justify-center', 'items-center', - 'px-4', - 'py-1', - 'rounded', - 'dark:bg-vanta/4', - 'hover:bg-light', + 'px-2', + 'min-h-[2.5rem]', + 'w-[2.5rem]', + 'rounded-lg', + 'bg-dark/2', + 'hover:bg-dark/3', 'border', - 'border-dark/2', - 'shadow-lg', - 'dark:border-light/3', + 'border-dark/1', + 'dark:bg-light/1', + 'dark:border-light/1', + 'dark:hover:bg-light/2', + '[&>span]:hidden', + 'sm:justify-between', + 'sm:[&>span]:flex', + 'sm:w-full', + 'sm:px-4', style, )} > - {children} + ); } diff --git a/src/components/Search/SearchModal.tsx b/src/components/Search/SearchModal.tsx index 101904cd1..0b053c87b 100644 --- a/src/components/Search/SearchModal.tsx +++ b/src/components/Search/SearchModal.tsx @@ -20,7 +20,8 @@ export function SearchModal(props: SearchModalProps) { useHotkeys( 'ctrl+k, command+k', - () => { + (e) => { + e.preventDefault(); //might be inadvisable as it interferes with expected browser behavior. setQuery(''); }, [], @@ -51,7 +52,9 @@ export function SearchModal(props: SearchModalProps) { 'dark:bg-dark/9', 'opacity-100', 'z-30', - 'pt-24', + 'px-4', + 'pt-4', + 'md:pt-[min(12vw,_10rem)]', )} onClick={onClose} > diff --git a/src/components/Search/SearchResults.tsx b/src/components/Search/SearchResults.tsx index c27890aff..decddec8b 100644 --- a/src/components/Search/SearchResults.tsx +++ b/src/components/Search/SearchResults.tsx @@ -100,7 +100,7 @@ export const SearchResults = React.forwardRef(function SearchResults( } return ( -
+
{results.length === 0 ? (
{noResultsMessage} diff --git a/src/components/SpaceContent/SpaceContent.tsx b/src/components/SpaceContent/SpaceContent.tsx index 5a226140e..7ff68708c 100644 --- a/src/components/SpaceContent/SpaceContent.tsx +++ b/src/components/SpaceContent/SpaceContent.tsx @@ -76,7 +76,8 @@ export function SpaceContent(props: {
+
    {pages.map((page) => { if (page.type === 'group') { return ( diff --git a/src/components/TableOfContents/TableOfContents.tsx b/src/components/TableOfContents/TableOfContents.tsx index 84fede9da..4944d2968 100644 --- a/src/components/TableOfContents/TableOfContents.tsx +++ b/src/components/TableOfContents/TableOfContents.tsx @@ -34,24 +34,34 @@ export function TableOfContents( return ( ); } diff --git a/src/components/TableOfContents/ToggleableLinkItem.tsx b/src/components/TableOfContents/ToggleableLinkItem.tsx index 19a333a8d..86737c287 100644 --- a/src/components/TableOfContents/ToggleableLinkItem.tsx +++ b/src/components/TableOfContents/ToggleableLinkItem.tsx @@ -30,6 +30,7 @@ export function ToggleableLinkItem( {children} >) { + return ( + + + + ); +} diff --git a/tailwind.config.ts b/tailwind.config.ts index 41350895d..7e0ec6f0e 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,4 +1,5 @@ import type { Config } from 'tailwindcss'; +import plugin from 'tailwindcss/plugin'; export const shades = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900]; export const opacities = [4, 8, 12, 16, 24, 40, 64, 72, 88, 96]; @@ -46,9 +47,31 @@ const config: Config = { 'header-background': generateShades('header-background'), 'header-link': generateShades('header-link'), }, + keyframes: { + pingAlt: { + '0%': { + transform: 'scale(0.5)', + opacity: '0', + }, + '20%': { + opacity: '1', + }, + '30%, 100%': { + transform: 'scale(2.5)', + opacity: '0', + }, + }, + }, + boxShadow: { + '1xs': '0px 1.54px 1px rgba(0, 0, 0, 0.09), 0px 3.267px 2.754px rgb(0, 0, 0, 0.05), 0px 6.278px 6.63px rgb(0, 0, 0, 0.05), 0px 14px 22px rgb(0, 0, 0, 0.04)', + }, }, opacity: opacity(), }, - plugins: [], + plugins: [ + plugin(function ({ addVariant }) { + addVariant('navigation-visible', 'body.navigation-visible &'); + }), + ], }; export default config;