From 8966305803be6240ea4f44495cbbd4018c408783 Mon Sep 17 00:00:00 2001 From: dphuang2 Date: Mon, 23 Oct 2023 14:25:57 -0700 Subject: [PATCH] [ENG-1322] I Reviewed 1,000s of Opinions on GitHub Copilot (Part 2) (#307) * style docs * Change blog sidebar title * swizzle blog sidebar to deemphasize inactive blog post titles * fix typo --------- Co-authored-by: konfig-bot --- .../blog/2023/08/21-serverless.mdx | 1 - generator/konfig-docs/docusaurus.config.js | 357 +++++++++--------- generator/konfig-docs/src/css/custom.css | 103 ++++- .../src/theme/BlogSidebar/Desktop/index.js | 37 ++ .../BlogSidebar/Desktop/styles.module.css | 38 ++ .../konfig-docs/static/img/logo-light.png | Bin 0 -> 14261 bytes 6 files changed, 359 insertions(+), 177 deletions(-) create mode 100644 generator/konfig-docs/src/theme/BlogSidebar/Desktop/index.js create mode 100644 generator/konfig-docs/src/theme/BlogSidebar/Desktop/styles.module.css create mode 100644 generator/konfig-docs/static/img/logo-light.png diff --git a/generator/konfig-docs/blog/2023/08/21-serverless.mdx b/generator/konfig-docs/blog/2023/08/21-serverless.mdx index 9cf3b3d46..0c939aca6 100644 --- a/generator/konfig-docs/blog/2023/08/21-serverless.mdx +++ b/generator/konfig-docs/blog/2023/08/21-serverless.mdx @@ -5,7 +5,6 @@ description: | From DHH shunning serverless, Ahrefs saving millions by using a cloud provider at all, to Amazon raining fire on their own serverless product, serverless has recently faced significant scrutiny. -and literally hundreds more). One research paper from Berkeley even claimed: authors: dylan tags: [Engineering] image: ./serverless-assets/banner.png diff --git a/generator/konfig-docs/docusaurus.config.js b/generator/konfig-docs/docusaurus.config.js index 26527933b..25a90e5bb 100644 --- a/generator/konfig-docs/docusaurus.config.js +++ b/generator/konfig-docs/docusaurus.config.js @@ -85,200 +85,207 @@ const beforeRemarkPluginsForPages = [ ], ]; - /** * @returns {Promise} */ async function createConfig() { -const remarkPlugins = [ - (await import('remark-gfm')).default, - [ - mermaid, - { - theme: { light: "default", dark: "dark" }, - }, - ], -]; - return { - title: "Konfig", - tagline: "Generate SDKs for your REST API", - url: "https://konfigthis.com", - baseUrl: "/", - onBrokenLinks: "throw", - onBrokenMarkdownLinks: "warn", - favicon: "img/favicon.png", - themes: [ - "docusaurus-json-schema-plugin", + const remarkPlugins = [ + (await import("remark-gfm")).default, [ - require.resolve("@easyops-cn/docusaurus-search-local"), + mermaid, { - hashed: true, - indexBlog: false, - docsRouteBasePath: "/", + theme: { light: "default", dark: "dark" }, }, ], - "mdx-v2", - ], - plugins: [ - async function docusaurus(context, options) { - return { - name: "docusaurus-tailwindcss", - configurePostCss(postcssOptions) { - // Appends TailwindCSS and AutoPrefixer. - postcssOptions.plugins.push(require("tailwindcss")); - postcssOptions.plugins.push(require("autoprefixer")); - return postcssOptions; + ]; + return { + title: "Konfig", + tagline: "Generate SDKs for your REST API", + url: "https://konfigthis.com", + baseUrl: "/", + onBrokenLinks: "throw", + onBrokenMarkdownLinks: "warn", + favicon: "img/favicon.png", + themes: [ + "docusaurus-json-schema-plugin", + [ + require.resolve("@easyops-cn/docusaurus-search-local"), + { + hashed: true, + indexBlog: false, + docsRouteBasePath: "/", }, - }; - }, - ], + ], + "mdx-v2", + ], + plugins: [ + async function docusaurus(context, options) { + return { + name: "docusaurus-tailwindcss", + configurePostCss(postcssOptions) { + // Appends TailwindCSS and AutoPrefixer. + postcssOptions.plugins.push(require("tailwindcss")); + postcssOptions.plugins.push(require("autoprefixer")); + return postcssOptions; + }, + }; + }, + ], - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - // organizationName: "facebook", // Usually your GitHub org/user name. - // projectName: "docusaurus", // Usually your repo name. + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + // organizationName: "facebook", // Usually your GitHub org/user name. + // projectName: "docusaurus", // Usually your repo name. - // Even if you don't use internalization, you can use this field to set useful - // metadata like html lang. For example, if your site is Chinese, you may want - // to replace "en" with "zh-Hans". - i18n: { - defaultLocale: "en", - locales: ["en"], - }, + // Even if you don't use internalization, you can use this field to set useful + // metadata like html lang. For example, if your site is Chinese, you may want + // to replace "en" with "zh-Hans". + i18n: { + defaultLocale: "en", + locales: ["en"], + }, - presets: [ - [ - "classic", - /** @type {import('@docusaurus/preset-classic').Options} */ + presets: [ + [ + "classic", + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + beforeDefaultRemarkPlugins: beforeRemarkPlugins, + remarkPlugins: remarkPlugins, + routeBasePath: "/docs", + sidebarPath: require.resolve("./sidebars.js"), + }, + pages: { + beforeDefaultRemarkPlugins: beforeRemarkPluginsForPages, + remarkPlugins: remarkPlugins, + }, + theme: { + customCss: [ + require.resolve("@code-hike/mdx/styles.css"), + require.resolve("./src/css/custom.css"), + ], + }, + blog: { + beforeDefaultRemarkPlugins: beforeRemarkPluginsForBlogs, + blogSidebarCount: "ALL", + blogSidebarTitle: "All posts", + remarkPlugins: remarkPlugins, + showReadingTime: true, + blogDescription: "Generate SDKs for your REST API", + truncateMarker: /{\/\* TRUNCATE \*\/}/, + }, + gtag: { + trackingID: "G-L2Q9WBQN2D", + anonymizeIP: true, + }, + }), + ], + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ - docs: { - beforeDefaultRemarkPlugins: beforeRemarkPlugins, - remarkPlugins: remarkPlugins, - routeBasePath: "/docs", - sidebarPath: require.resolve("./sidebars.js"), - }, - pages: { - beforeDefaultRemarkPlugins: beforeRemarkPluginsForPages, - remarkPlugins: remarkPlugins, + colorMode: { + defaultMode: "light", + disableSwitch: true, }, - theme: { - customCss: [ - require.resolve("@code-hike/mdx/styles.css"), - require.resolve("./src/css/custom.css"), + navbar: { + logo: { + alt: "Konfig Logo", + src: "img/logo-light.png", + href: "https://konfigthis.com", + }, + items: [ + { + type: "doc", + docId: "intro", + position: "left", + label: "Documentation", + }, + { + to: "/interactive-tutorial", + label: "Interactive Tutorial", + position: "left", + }, + { to: "/schedule-demo", label: "Schedule Demo", position: "right" }, + { to: "/blog", label: "Blog", position: "right" }, + { to: "/about", label: "About", position: "right" }, ], }, - blog: { - beforeDefaultRemarkPlugins: beforeRemarkPluginsForBlogs, - blogSidebarCount: "ALL", - remarkPlugins: remarkPlugins, - showReadingTime: true, - blogDescription: "Generate SDKs for your REST API", - truncateMarker: /{\/\* TRUNCATE \*\/}/, + api: { + authPersistance: "localStorage", + serverVariablesPersistance: "localStorage", }, - gtag: { - trackingID: "G-L2Q9WBQN2D", - anonymizeIP: true, + footer: { + style: "light", + links: [ + { + title: "Links", + items: [ + { + label: "Website", + to: "https://konfigthis.com", + }, + { + label: "LinkedIn", + to: "https://www.linkedin.com/company/konfig", + }, + { + label: "Blog", + to: "/blog", + }, + ], + }, + // { + // title: "Docs", + // items: [ + // { + // label: "Introduction", + // to: "/docs/intro", + // }, + // ], + // }, + // { + // title: "Community", + // items: [ + // { + // label: "Stack Overflow", + // href: "https://stackoverflow.com/questions/tagged/docusaurus", + // }, + // { + // label: "Discord", + // href: "https://discordapp.com/invite/docusaurus", + // }, + // { + // label: "Twitter", + // href: "https://twitter.com/docusaurus", + // }, + // ], + // }, + // { + // title: "More", + // items: [ + // { + // label: "Blog", + // to: "/blog", + // }, + // { + // label: "GitHub", + // href: "https://github.com/facebook/docusaurus", + // }, + // ], + // }, + ], + copyright: `Copyright © ${new Date().getFullYear()} Konfig, Inc.`, }, - }), - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - navbar: { - title: "Konfig", - logo: { - alt: "Konfig Logo", - src: "img/favicon.png", - href: "https://konfigthis.com", + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + additionalLanguages: ["ruby", "csharp", "php"], }, - items: [ - { - type: "doc", - docId: "intro", - position: "left", - label: "Documentation", - }, - { - to: "/interactive-tutorial", - label: "Interactive Tutorial", - position: "left", - }, - { to: "/schedule-demo", label: "Schedule Demo", position: "right" }, - { to: "/blog", label: "Blog", position: "right" }, - { to: "/about", label: "About", position: "right" }, - ], - }, - api: { - authPersistance: "localStorage", - serverVariablesPersistance: "localStorage", - }, - footer: { - style: "light", - links: [ - { - title: "Links", - items: [ - { - label: "Website", - to: "https://konfigthis.com", - }, - { - label: "LinkedIn", - to: "https://www.linkedin.com/company/konfig", - }, - ], - }, - // { - // title: "Docs", - // items: [ - // { - // label: "Introduction", - // to: "/docs/intro", - // }, - // ], - // }, - // { - // title: "Community", - // items: [ - // { - // label: "Stack Overflow", - // href: "https://stackoverflow.com/questions/tagged/docusaurus", - // }, - // { - // label: "Discord", - // href: "https://discordapp.com/invite/docusaurus", - // }, - // { - // label: "Twitter", - // href: "https://twitter.com/docusaurus", - // }, - // ], - // }, - // { - // title: "More", - // items: [ - // { - // label: "Blog", - // to: "/blog", - // }, - // { - // label: "GitHub", - // href: "https://github.com/facebook/docusaurus", - // }, - // ], - // }, - ], - copyright: `Copyright © ${new Date().getFullYear()} Konfig, Inc.`, - }, - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - additionalLanguages: ["ruby", "csharp", "php"], - }, - }), + }), + }; } -}; module.exports = createConfig; diff --git a/generator/konfig-docs/src/css/custom.css b/generator/konfig-docs/src/css/custom.css index dbbe9c2bc..64b1ef272 100644 --- a/generator/konfig-docs/src/css/custom.css +++ b/generator/konfig-docs/src/css/custom.css @@ -3,7 +3,7 @@ @tailwind utilities; a[data-footnote-ref="true"] { - scroll-margin-top: calc(var(--ifm-navbar-height) + 0.5rem);; + scroll-margin-top: calc(var(--ifm-navbar-height) + 0.5rem); } figure { @@ -34,6 +34,53 @@ figure { :root { --ifm-font-size-base: 15px; + --ifm-navbar-height: 64px; + --ifm-font-size-base: 16px; + --ifm-menu-link-padding-vertical: 0.5rem; + --ifm-menu-color: var(--ifm-color-gray-600); + --ifm-link-hover-decoration: none; + --ifm-link-decoration: none; + --ifm-menu-color-background-active: var( + --ifm-color-primary-contrast-background + ); +} + +.alert { + --ifm-link-hover-decoration: none; + --ifm-link-decoration: none; +} + +.markdown { + color: var(--ifm-color-gray-700); + + --ifm-h1-vertical-rhythm-top: 5; + --ifm-h2-vertical-rhythm-top: 4; + --ifm-h3-vertical-rhythm-top: 3; + --ifm-heading-vertical-rhythm-top: 1.25; + --ifm-h1-vertical-rhythm-bottom: 1.25; + --ifm-heading-vertical-rhythm-bottom: 1; +} + +.markdown a { + color: var(--ifm-color-emphasis-1000); + border-bottom: 1px solid var(--ifm-color-primary-light); +} + +.markdown p { + margin-top: 1rem; +} + +.markdown a:hover { + border-bottom-width: 2px; +} + +.markdown h1, +h2, +h3, +h4, +h5, +h6 { + color: var(--ifm-color-emphasis-1000); } :root { @@ -185,3 +232,57 @@ summary { .highlighted-node .nodeLabel { color: black !important; } + +.theme-doc-sidebar-container { + border-right: none !important; + font-size: 0.875rem; +} + +.menu__link { + line-height: 1.55; +} + +.navbar { + border-bottom: 1px solid var(--ifm-toc-border-color); + box-shadow: none !important; +} + +.menu__link--sublist-caret:after { + background: var(--ifm-menu-link-sublist-icon) 50% / 1rem 1rem; +} + +.menu__link:hover { + color: var(--ifm-color-emphasis-800); +} + +.menu__link:hover { + color: var(--ifm-color-emphasis-800); +} + +.menu__link--active:hover { + color: var(--ifm-menu-color-active); +} + +.menu__caret:before { + background: var(--ifm-menu-link-sublist-icon) 50% / 1rem 1rem; +} + +.navbar__link { + color: var(--ifm-color-gray-600); +} + +.navbar__link--active { + color: var(--ifm-color-primary); +} + +.menu__list-item:not(:first-child) { + margin-top: 0; +} + +.navbar__link:hover { + color: var(--ifm-color-emphasis-800); +} + +.menu__list .menu__list { + margin-top: 0; +} diff --git a/generator/konfig-docs/src/theme/BlogSidebar/Desktop/index.js b/generator/konfig-docs/src/theme/BlogSidebar/Desktop/index.js new file mode 100644 index 000000000..06682800c --- /dev/null +++ b/generator/konfig-docs/src/theme/BlogSidebar/Desktop/index.js @@ -0,0 +1,37 @@ +import React from "react"; +import clsx from "clsx"; +import Link from "@docusaurus/Link"; +import { translate } from "@docusaurus/Translate"; +import styles from "./styles.module.css"; +export default function BlogSidebarDesktop({ sidebar }) { + return ( + + ); +} diff --git a/generator/konfig-docs/src/theme/BlogSidebar/Desktop/styles.module.css b/generator/konfig-docs/src/theme/BlogSidebar/Desktop/styles.module.css new file mode 100644 index 000000000..ce897e03f --- /dev/null +++ b/generator/konfig-docs/src/theme/BlogSidebar/Desktop/styles.module.css @@ -0,0 +1,38 @@ +.sidebar { + max-height: calc(100vh - (var(--ifm-navbar-height) + 2rem)); + overflow-y: auto; + position: sticky; + top: calc(var(--ifm-navbar-height) + 2rem); +} + +.sidebarItemTitle { + font-size: var(--ifm-h3-font-size); + font-weight: var(--ifm-font-weight-bold); +} + +.sidebarItemList { + font-size: 0.9rem; +} + +.sidebarItem { + margin-top: 0.7rem; +} + +.sidebarItemLink { + color: var(--ifm-color-gray-600); + display: block; +} + +.sidebarItemLink:hover { + text-decoration: none; +} + +.sidebarItemLinkActive { + color: var(--ifm-color-primary) !important; +} + +@media (max-width: 996px) { + .sidebar { + display: none; + } +} diff --git a/generator/konfig-docs/static/img/logo-light.png b/generator/konfig-docs/static/img/logo-light.png new file mode 100644 index 0000000000000000000000000000000000000000..f17e04960bceb22f6f342172656ca4dece5bd2f0 GIT binary patch literal 14261 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 SRpjreYJA!JQugmRAN?;ulK+DM literal 0 HcmV?d00001