diff --git a/app/global.css b/app/global.css
index e9b96424..b1046191 100644
--- a/app/global.css
+++ b/app/global.css
@@ -27,6 +27,7 @@ samp,
pre {
font-size: 1em;
font-family: var(--fonts-mono);
+ font-variant-ligatures: none; /* i hate them. fwiw. */
}
small {
diff --git a/components/Code/Code.module.css b/components/Code/Code.module.css
index 30f69a0f..56dd46c3 100644
--- a/components/Code/Code.module.css
+++ b/components/Code/Code.module.css
@@ -1,10 +1,8 @@
-.inline,
-.highlighted {
- font-family: var(--fonts-mono);
- font-variant-ligatures: none; /* i hate them. fwiw. */
-}
+/**
+ * Inline code
+ **/
-.inline {
+:not([data-rehype-pretty-code-figure]) .code {
padding: 0.2em 0.3em;
font-size: 0.925em;
page-break-inside: avoid;
@@ -13,14 +11,18 @@
border-radius: 0.6em;
}
-figure:has(.highlighted) {
+/**
+ * Syntax-highlighted code blocks
+ **/
+
+[data-rehype-pretty-code-figure]:has(.code) {
margin: 1em auto;
position: relative;
width: 100%;
background-color: var(--colors-background-header);
}
-.highlighted {
+[data-rehype-pretty-code-figure] .code {
display: block;
overflow-x: auto;
padding: 1em;
@@ -28,48 +30,45 @@ figure:has(.highlighted) {
tab-size: 2px;
border: 1px solid var(--colors-kinda-light);
border-radius: 0.6em;
+ counter-reset: line;
}
-.highlighted [style*="--shiki"] {
+[data-rehype-pretty-code-figure] .code [style*="--shiki"] {
color: var(--shiki-light);
font-style: var(--shiki-light-font-style);
font-weight: var(--shiki-light-font-weight);
text-decoration: var(--shiki-light-text-decoration);
}
-[data-theme="dark"] .highlighted [style*="--shiki"] {
+[data-theme="dark"] [data-rehype-pretty-code-figure] .code [style*="--shiki"] {
color: var(--shiki-dark);
font-style: var(--shiki-dark-font-style);
font-weight: var(--shiki-dark-font-weight);
text-decoration: var(--shiki-dark-text-decoration);
}
-.highlighted > [data-line]:nth-of-type(1),
-.highlighted > [data-line]:nth-of-type(2) {
+[data-rehype-pretty-code-figure] .code[data-line-numbers] > [data-line]:nth-of-type(1),
+[data-rehype-pretty-code-figure] .code[data-line-numbers] > [data-line]:nth-of-type(2) {
/* excessive right padding to prevent copy button from covering the first two lines of code */
padding-right: 4em;
}
-.highlighted[data-line-numbers] {
- counter-reset: line;
-}
-
-.highlighted[data-line-numbers] > [data-line]::before {
+[data-rehype-pretty-code-figure] .code[data-line-numbers] > [data-line]::before {
display: inline-block;
width: 1em;
margin-right: 1.5em;
text-align: right;
color: var(--colors-medium-light);
+ user-select: none;
counter-increment: line;
content: counter(line);
- user-select: none;
}
-.highlighted[data-line-numbers-max-digits="2"] > [data-line]::before {
+[data-rehype-pretty-code-figure] .code[data-line-numbers-max-digits="2"] > [data-line]::before {
width: 1.25rem;
}
-.highlighted[data-line-numbers-max-digits="3"] > [data-line]::before {
+[data-rehype-pretty-code-figure] .code[data-line-numbers-max-digits="3"] > [data-line]::before {
width: 1.75rem;
}
diff --git a/components/Code/Code.tsx b/components/Code/Code.tsx
index 6914eee6..1b154198 100644
--- a/components/Code/Code.tsx
+++ b/components/Code/Code.tsx
@@ -12,30 +12,23 @@ export type CodeProps = ComponentPropsWithoutRef<"code"> & {
// a simple wrapper component that "intelligently" picks between inline code and code blocks (w/ optional syntax
// highlighting & a clipboard button)
const Code = ({
- "data-language": dataLanguage,
- "data-theme": dataTheme, // eslint-disable-line @typescript-eslint/no-unused-vars
+ "data-language": dataLanguage, // eslint-disable-line @typescript-eslint/no-unused-vars
+ "data-theme": dataTheme,
className,
children,
...rest
}: CodeProps) => {
- // detect if this input has already been touched by shiki via rehype-pretty-code
- if (dataLanguage) {
- // full multi-line code blocks with copy-to-clipboard button
- return (
- <>
-
-
- {children}
-
- >
- );
- }
-
- // simple inline code in paragraphs, headings, etc. (never highlighted)
return (
-
- {children}
-
+ <>
+ {
+ // detect if this input has been touched by shiki via rehype-pretty-code and if so, include a copy-to-clipboard
+ // button as its sibling.
+ dataTheme &&
+ }
+
+ {children}
+
+ >
);
};
diff --git a/components/SkipNav/SkipNav.module.css b/components/SkipNav/SkipNav.module.css
index 02fed8bb..92ce724a 100644
--- a/components/SkipNav/SkipNav.module.css
+++ b/components/SkipNav/SkipNav.module.css
@@ -1,5 +1,5 @@
-/*
- * Pulled from @reach/skip-nav: https://github.com/reach/reach-ui/blob/main/packages/skip-nav/styles.css
+/*!
+ * @reach/skip-nav | MIT License | https://github.com/reach/reach-ui/blob/v0.18.0/packages/skip-nav/styles.css
*/
.hidden {