From b9e28cd4e3b32702a63374971476ef26d9bf1923 Mon Sep 17 00:00:00 2001 From: MaryWylde Date: Wed, 15 Jul 2026 16:19:50 +0200 Subject: [PATCH] library: self-host Source Sans Pro for tags and polish sidebar/toolbar - Tag labels now use self-hosted Source Sans Pro (400) via a new @font-face and the --font-source-sans token, overriding the inherited serif face - Sidebar: hide the About divider when there is no About text, drop the fixed height on Edit buttons (keep padding 4px 8px), and show a "No tags yet." empty state at 50px - LibraryToolbar: remove the owner-view divider, preserving its 16px spacing on the controls row Co-Authored-By: Claude Opus 4.7 --- .../SourceSansPro/SourceSansPro-Regular.woff2 | Bin 0 -> 13036 bytes .../library/molecules/Tag/Tag.module.scss | 3 +++ .../LibraryToolbar/LibraryToolbar.module.scss | 21 +++++++----------- .../LibraryToolbar/LibraryToolbar.tsx | 2 -- .../organisms/Sidebar/Sidebar.module.scss | 12 +++++++++- .../library/organisms/Sidebar/Sidebar.tsx | 14 ++++++++++-- src/styles/globals.scss | 9 ++++++++ src/styles/library/variables.scss | 2 ++ 8 files changed, 45 insertions(+), 18 deletions(-) create mode 100644 public/fonts/SourceSansPro/SourceSansPro-Regular.woff2 diff --git a/public/fonts/SourceSansPro/SourceSansPro-Regular.woff2 b/public/fonts/SourceSansPro/SourceSansPro-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e49928e8297a96a91c41824c0362e354e6a5c867 GIT binary patch literal 13036 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 0,1,1) so tag labels + // use the sans face. + font-family: var(--font-source-sans); } .removeButton { diff --git a/src/components/library/organisms/LibraryToolbar/LibraryToolbar.module.scss b/src/components/library/organisms/LibraryToolbar/LibraryToolbar.module.scss index c822ecde..7fa63695 100644 --- a/src/components/library/organisms/LibraryToolbar/LibraryToolbar.module.scss +++ b/src/components/library/organisms/LibraryToolbar/LibraryToolbar.module.scss @@ -12,24 +12,14 @@ } } -.divider { - width: 100%; - height: 1px; - background: var(--black-100); - margin: 16px 0; - - // Mobile: collapse the top margin so the divider connects to the fixed - // header (paired with the layout wrapper dropping its top padding). - @media (max-width: 768px) { - margin-top: 0; - } -} - .controls { display: flex; align-items: center; justify-content: space-between; gap: 24px; + // Replaces the removed divider's 16px top margin so the controls keep their + // breathing room below the global header. + margin-top: 16px; animation: toolbar-fade 0.3s ease; // On phones everything crammed onto one row collapsed the flex:1 pill @@ -40,12 +30,17 @@ flex-direction: column; align-items: stretch; gap: 12px; + // Collapse the top margin on mobile so the controls connect to the fixed + // header (paired with the layout wrapper dropping its top padding), matching + // the removed divider's mobile behavior. + margin-top: 0; } } // Guest view of someone else's library: the divider is dropped, so restore the // vertical breathing room on the controls row itself. .controlsGuest { + margin-top: 0; padding: 24px 10px; } diff --git a/src/components/library/organisms/LibraryToolbar/LibraryToolbar.tsx b/src/components/library/organisms/LibraryToolbar/LibraryToolbar.tsx index 4e475029..b3be94e9 100644 --- a/src/components/library/organisms/LibraryToolbar/LibraryToolbar.tsx +++ b/src/components/library/organisms/LibraryToolbar/LibraryToolbar.tsx @@ -332,8 +332,6 @@ export function LibraryToolbar(props: LibraryToolbarProps): JSX.Element { return (
-
-
{isReordering ? 'Drag to reorder →' : 'Jump to →'} diff --git a/src/components/library/organisms/Sidebar/Sidebar.module.scss b/src/components/library/organisms/Sidebar/Sidebar.module.scss index af36f9bb..f661b41d 100644 --- a/src/components/library/organisms/Sidebar/Sidebar.module.scss +++ b/src/components/library/organisms/Sidebar/Sidebar.module.scss @@ -87,7 +87,8 @@ .button { width: auto; - padding: 3px 8px; + height: auto; + padding: 4px 8px; } .text { @@ -132,6 +133,15 @@ display: flex; flex-wrap: wrap; + &.tagsEmpty { + height: 50px; + align-items: center; + } + + .emptyTags { + color: var(--gray-medium); + } + .button { color: var(--brown); height: 26px; diff --git a/src/components/library/organisms/Sidebar/Sidebar.tsx b/src/components/library/organisms/Sidebar/Sidebar.tsx index 35fc9ebc..4980a73c 100644 --- a/src/components/library/organisms/Sidebar/Sidebar.tsx +++ b/src/components/library/organisms/Sidebar/Sidebar.tsx @@ -171,6 +171,9 @@ export function Sidebar() { resolveStrapiUrl(currentOwner?.avatar) ?? (isMyLibrary ? accountData?.picture : undefined); const aboutAuthorText = stripHtml(currentOwner?.aboutMe); + const aboutLibraryText = stripHtml( + currentLibrary?.attributes.libraryDetails?.aboutLibrary, + ); // Owner sees their full tag palette; a true visitor sees only the tags // actually used on this library's objects — no cross-account tag fetch. @@ -397,7 +400,7 @@ export function Sidebar() { ''}
-
+ {aboutLibraryText &&
}
Total objects: @@ -468,7 +471,14 @@ export function Sidebar() { )}
-
+
+ {displayedTags.length === 0 && ( + No tags yet. + )} {displayedTags.map(tag => ( ))} diff --git a/src/styles/globals.scss b/src/styles/globals.scss index 8056fa45..650ac572 100644 --- a/src/styles/globals.scss +++ b/src/styles/globals.scss @@ -267,6 +267,15 @@ body { font-display: block; } +@font-face { + font-family: 'Source Sans Pro'; + src: url('/keepsimple_/fonts/SourceSansPro/SourceSansPro-Regular.woff2') + format('woff2'); + font-weight: 400; + font-style: normal; + font-display: block; +} + // Aldrich is being used in Company Management(new) @font-face { font-family: 'Aldrich'; diff --git a/src/styles/library/variables.scss b/src/styles/library/variables.scss index 2be45c5f..5d0d8f46 100644 --- a/src/styles/library/variables.scss +++ b/src/styles/library/variables.scss @@ -113,5 +113,7 @@ /* Fonts — the upstream library injected these via next/font on ; here we declare them directly with web-safe fallbacks. */ --font-source-serif: 'Source Serif 4', Georgia, 'Times New Roman', serif; + --font-source-sans: + 'Source Sans Pro', system-ui, -apple-system, Arial, sans-serif; --font-lato: 'Lato', system-ui, -apple-system, Arial, sans-serif; }