From d736f56065709984743ef6c29b9a9160024466ab Mon Sep 17 00:00:00 2001 From: Brian Hawthorne Date: Fri, 12 Sep 2025 14:48:45 -0700 Subject: [PATCH 01/13] bug: fix sidebar table of contents collapse bug (#635) --- .../site/src/components/Navigation/TableOfContentsItems.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/site/src/components/Navigation/TableOfContentsItems.tsx b/packages/site/src/components/Navigation/TableOfContentsItems.tsx index 383366206..a7d72b648 100644 --- a/packages/site/src/components/Navigation/TableOfContentsItems.tsx +++ b/packages/site/src/components/Navigation/TableOfContentsItems.tsx @@ -43,8 +43,9 @@ function nestToc(toc: Heading[]): NestedHeading[] { function pathnameMatchesHeading(pathname: string, heading: Heading, baseurl?: string) { const headingPath = withBaseurl(heading.path, baseurl); - if (pathname && headingPath === `${pathname}/index`) return true; - return headingPath === pathname; + const normalizedPathname = pathname.endsWith("/") ? pathname.slice(0, -1) : pathname; + if (normalizedPathname && headingPath === `${normalizedPathname}/index`) return true; + return headingPath === normalizedPathname; } function childrenOpen(headings: NestedHeading[], pathname: string, baseurl?: string): string[] { From 9717f957ba35e211592c900af82bd1054f9735d0 Mon Sep 17 00:00:00 2001 From: Brian Hawthorne Date: Fri, 12 Sep 2025 14:57:23 -0700 Subject: [PATCH 02/13] comment on bugfix --- .../site/src/components/Navigation/TableOfContentsItems.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/site/src/components/Navigation/TableOfContentsItems.tsx b/packages/site/src/components/Navigation/TableOfContentsItems.tsx index a7d72b648..6794423e9 100644 --- a/packages/site/src/components/Navigation/TableOfContentsItems.tsx +++ b/packages/site/src/components/Navigation/TableOfContentsItems.tsx @@ -43,6 +43,9 @@ function nestToc(toc: Heading[]): NestedHeading[] { function pathnameMatchesHeading(pathname: string, heading: Heading, baseurl?: string) { const headingPath = withBaseurl(heading.path, baseurl); + // In static html builds, pathname ends up with an unwanted trailing slash + // and then won't match the heading's slashless path. So first normalize the + // given path by removing any trailing slash. const normalizedPathname = pathname.endsWith("/") ? pathname.slice(0, -1) : pathname; if (normalizedPathname && headingPath === `${normalizedPathname}/index`) return true; return headingPath === normalizedPathname; From 8e7316aafbcd92b21365aafa42ffe3a342b67e88 Mon Sep 17 00:00:00 2001 From: Brian Hawthorne Date: Sat, 13 Sep 2025 15:17:44 -0700 Subject: [PATCH 03/13] lint --- .../site/src/components/Navigation/TableOfContentsItems.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/site/src/components/Navigation/TableOfContentsItems.tsx b/packages/site/src/components/Navigation/TableOfContentsItems.tsx index 6794423e9..2d02bf3e7 100644 --- a/packages/site/src/components/Navigation/TableOfContentsItems.tsx +++ b/packages/site/src/components/Navigation/TableOfContentsItems.tsx @@ -46,7 +46,7 @@ function pathnameMatchesHeading(pathname: string, heading: Heading, baseurl?: st // In static html builds, pathname ends up with an unwanted trailing slash // and then won't match the heading's slashless path. So first normalize the // given path by removing any trailing slash. - const normalizedPathname = pathname.endsWith("/") ? pathname.slice(0, -1) : pathname; + const normalizedPathname = pathname.endsWith('/') ? pathname.slice(0, -1) : pathname; if (normalizedPathname && headingPath === `${normalizedPathname}/index`) return true; return headingPath === normalizedPathname; } From cae9bc301425453c9a9af063b07603b40946d1ef Mon Sep 17 00:00:00 2001 From: Brian Hawthorne Date: Sun, 14 Sep 2025 16:06:21 -0700 Subject: [PATCH 04/13] simplify pathnameMatchesHeading function in site package --- .../site/src/components/Navigation/TableOfContentsItems.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/site/src/components/Navigation/TableOfContentsItems.tsx b/packages/site/src/components/Navigation/TableOfContentsItems.tsx index 2d02bf3e7..e80cf01af 100644 --- a/packages/site/src/components/Navigation/TableOfContentsItems.tsx +++ b/packages/site/src/components/Navigation/TableOfContentsItems.tsx @@ -47,8 +47,7 @@ function pathnameMatchesHeading(pathname: string, heading: Heading, baseurl?: st // and then won't match the heading's slashless path. So first normalize the // given path by removing any trailing slash. const normalizedPathname = pathname.endsWith('/') ? pathname.slice(0, -1) : pathname; - if (normalizedPathname && headingPath === `${normalizedPathname}/index`) return true; - return headingPath === normalizedPathname; + return (headingPath === `${normalizedPathname}/index` || headingPath === normalizedPathname); } function childrenOpen(headings: NestedHeading[], pathname: string, baseurl?: string): string[] { From 5cd84849a5882858f7a163870e51fd4361f9e722 Mon Sep 17 00:00:00 2001 From: Brian Hawthorne Date: Mon, 15 Sep 2025 12:40:57 -0700 Subject: [PATCH 05/13] lint --- .../site/src/components/Navigation/TableOfContentsItems.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/site/src/components/Navigation/TableOfContentsItems.tsx b/packages/site/src/components/Navigation/TableOfContentsItems.tsx index e80cf01af..103a82465 100644 --- a/packages/site/src/components/Navigation/TableOfContentsItems.tsx +++ b/packages/site/src/components/Navigation/TableOfContentsItems.tsx @@ -47,7 +47,7 @@ function pathnameMatchesHeading(pathname: string, heading: Heading, baseurl?: st // and then won't match the heading's slashless path. So first normalize the // given path by removing any trailing slash. const normalizedPathname = pathname.endsWith('/') ? pathname.slice(0, -1) : pathname; - return (headingPath === `${normalizedPathname}/index` || headingPath === normalizedPathname); + return headingPath === `${normalizedPathname}/index` || headingPath === normalizedPathname; } function childrenOpen(headings: NestedHeading[], pathname: string, baseurl?: string): string[] { From 91996de4a463437283f24e9cdc0b28d537e7cc71 Mon Sep 17 00:00:00 2001 From: Brian Hawthorne Date: Mon, 15 Sep 2025 12:46:56 -0700 Subject: [PATCH 06/13] restore original logic in case pathname is empty string --- .../site/src/components/Navigation/TableOfContentsItems.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/site/src/components/Navigation/TableOfContentsItems.tsx b/packages/site/src/components/Navigation/TableOfContentsItems.tsx index 103a82465..99bb08f1f 100644 --- a/packages/site/src/components/Navigation/TableOfContentsItems.tsx +++ b/packages/site/src/components/Navigation/TableOfContentsItems.tsx @@ -46,8 +46,8 @@ function pathnameMatchesHeading(pathname: string, heading: Heading, baseurl?: st // In static html builds, pathname ends up with an unwanted trailing slash // and then won't match the heading's slashless path. So first normalize the // given path by removing any trailing slash. - const normalizedPathname = pathname.endsWith('/') ? pathname.slice(0, -1) : pathname; - return headingPath === `${normalizedPathname}/index` || headingPath === normalizedPathname; + const normedPath = pathname.endsWith('/') ? pathname.slice(0, -1) : pathname; + return (normedPath && headingPath === `${normedPath}/index`) || headingPath === normedPath; } function childrenOpen(headings: NestedHeading[], pathname: string, baseurl?: string): string[] { From 11463ff60a978506956776b587fb3fdb85f2a561 Mon Sep 17 00:00:00 2001 From: Brian Hawthorne Date: Mon, 15 Sep 2025 12:53:59 -0700 Subject: [PATCH 07/13] restore original conditional structure because JS logical operators do not always return a Boolean value --- .../site/src/components/Navigation/TableOfContentsItems.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/site/src/components/Navigation/TableOfContentsItems.tsx b/packages/site/src/components/Navigation/TableOfContentsItems.tsx index 99bb08f1f..23f816066 100644 --- a/packages/site/src/components/Navigation/TableOfContentsItems.tsx +++ b/packages/site/src/components/Navigation/TableOfContentsItems.tsx @@ -47,7 +47,8 @@ function pathnameMatchesHeading(pathname: string, heading: Heading, baseurl?: st // and then won't match the heading's slashless path. So first normalize the // given path by removing any trailing slash. const normedPath = pathname.endsWith('/') ? pathname.slice(0, -1) : pathname; - return (normedPath && headingPath === `${normedPath}/index`) || headingPath === normedPath; + if (normedPath && headingPath === `${normedPath}/index`) return True; + return headingPath === normedPath; } function childrenOpen(headings: NestedHeading[], pathname: string, baseurl?: string): string[] { From 549e1a73df64bd1575ca40bf6a80d1d031db2551 Mon Sep 17 00:00:00 2001 From: Brian Hawthorne Date: Mon, 15 Sep 2025 15:23:40 -0700 Subject: [PATCH 08/13] typo --- .../site/src/components/Navigation/TableOfContentsItems.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/site/src/components/Navigation/TableOfContentsItems.tsx b/packages/site/src/components/Navigation/TableOfContentsItems.tsx index 23f816066..45956c06a 100644 --- a/packages/site/src/components/Navigation/TableOfContentsItems.tsx +++ b/packages/site/src/components/Navigation/TableOfContentsItems.tsx @@ -47,7 +47,7 @@ function pathnameMatchesHeading(pathname: string, heading: Heading, baseurl?: st // and then won't match the heading's slashless path. So first normalize the // given path by removing any trailing slash. const normedPath = pathname.endsWith('/') ? pathname.slice(0, -1) : pathname; - if (normedPath && headingPath === `${normedPath}/index`) return True; + if (normedPath && headingPath === `${normedPath}/index`) return true; return headingPath === normedPath; } From e783aa6e35369f63a0107d358f7260efcb810322 Mon Sep 17 00:00:00 2001 From: Brian Hawthorne Date: Tue, 16 Sep 2025 12:40:07 -0700 Subject: [PATCH 09/13] changeset --- .changeset/cool-grapes-decide.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cool-grapes-decide.md diff --git a/.changeset/cool-grapes-decide.md b/.changeset/cool-grapes-decide.md new file mode 100644 index 000000000..5856c7b24 --- /dev/null +++ b/.changeset/cool-grapes-decide.md @@ -0,0 +1,5 @@ +--- +'@myst-theme/site': patch +--- + +Fix static html sidebar menu collapse bug (#647) From 63bc73cd3074edb0043727e37f735d7b5f031ff4 Mon Sep 17 00:00:00 2001 From: Brian Hawthorne Date: Tue, 16 Sep 2025 13:04:02 -0700 Subject: [PATCH 10/13] correct issue number in changeset --- .changeset/cool-grapes-decide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/cool-grapes-decide.md b/.changeset/cool-grapes-decide.md index 5856c7b24..d1ef63955 100644 --- a/.changeset/cool-grapes-decide.md +++ b/.changeset/cool-grapes-decide.md @@ -2,4 +2,4 @@ '@myst-theme/site': patch --- -Fix static html sidebar menu collapse bug (#647) +Fix static html sidebar menu collapse bug (#635) From 9d22467caaf7af474153bfcc2faff002c567f1ca Mon Sep 17 00:00:00 2001 From: Stefan van der Walt Date: Tue, 16 Sep 2025 12:20:25 -0700 Subject: [PATCH 11/13] Expand changeset description --- .changeset/cool-grapes-decide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/cool-grapes-decide.md b/.changeset/cool-grapes-decide.md index d1ef63955..12d212f84 100644 --- a/.changeset/cool-grapes-decide.md +++ b/.changeset/cool-grapes-decide.md @@ -2,4 +2,4 @@ '@myst-theme/site': patch --- -Fix static html sidebar menu collapse bug (#635) +On static builds, fix sidebar menu not expanding for current page (closes [#635](https://github.com/jupyter-book/mystmd/issues/2288)). From ffa316c95f18f32df799508651ea924dda81598d Mon Sep 17 00:00:00 2001 From: Brian Hawthorne Date: Wed, 7 Jan 2026 01:09:45 -0800 Subject: [PATCH 12/13] add icon renderers from @scienceicons/myst --- .gitignore | 3 +++ package-lock.json | 20 ++++++++++++++++++++ packages/myst-to-react/package.json | 4 +++- packages/myst-to-react/src/index.tsx | 2 ++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3b0efdb3b..955f515fb 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,6 @@ yalc.lock # backup *# *~ + +# vim swap files +*.swp diff --git a/package-lock.json b/package-lock.json index cf78aaab0..c8338ba15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11427,6 +11427,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@scienceicons/myst": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@scienceicons/myst/-/myst-1.0.4.tgz", + "integrity": "sha512-jlDC4m7k9qoGmEUqgbP2528Jzz/mm+7ZJE2aIpwPe3aawsj6Z8KxeJRxRNEu8NWyPPPTmJoClGxLhn6GzvsS2Q==", + "peerDependencies": { + "@scienceicons/react": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@scienceicons/react": { "version": "0.0.13", "resolved": "https://registry.npmjs.org/@scienceicons/react/-/react-0.0.13.tgz", @@ -30660,6 +30670,14 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "0.562.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", + "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", @@ -43912,9 +43930,11 @@ "@heroicons/react": "^2.0.18", "@myst-theme/providers": "^1.0.0", "@radix-ui/react-hover-card": "^1.0.6", + "@scienceicons/myst": "^1.0.4", "@scienceicons/react": "^0.0.13", "buffer": "^6.0.3", "classnames": "^2.3.2", + "lucide-react": "^0.562.0", "myst-common": "^1.8.1", "myst-config": "^1.8.1", "myst-spec": "^0.0.5", diff --git a/packages/myst-to-react/package.json b/packages/myst-to-react/package.json index fbf30722d..0aef70fbc 100644 --- a/packages/myst-to-react/package.json +++ b/packages/myst-to-react/package.json @@ -22,10 +22,12 @@ "dependencies": { "@heroicons/react": "^2.0.18", "@myst-theme/providers": "^1.0.0", - "@scienceicons/react": "^0.0.13", "@radix-ui/react-hover-card": "^1.0.6", + "@scienceicons/myst": "^1.0.4", + "@scienceicons/react": "^0.0.13", "buffer": "^6.0.3", "classnames": "^2.3.2", + "lucide-react": "^0.562.0", "myst-common": "^1.8.1", "myst-config": "^1.8.1", "myst-spec": "^0.0.5", diff --git a/packages/myst-to-react/src/index.tsx b/packages/myst-to-react/src/index.tsx index 002338970..c800f72bd 100644 --- a/packages/myst-to-react/src/index.tsx +++ b/packages/myst-to-react/src/index.tsx @@ -22,6 +22,7 @@ import PROOF_RENDERERS from './proof.js'; import EXERCISE_RENDERERS from './exercise.js'; import ASIDE_RENDERERS from './aside.js'; import UNKNOWN_MYST_RENDERERS from './unknown.js'; +import SCIENCEICON_RENDERERS from '@scienceicons/myst/react'; export { Block } from './block.js'; export { CopyIcon, HoverPopover, Tooltip, LinkCard } from './components/index.js'; @@ -57,6 +58,7 @@ export const DEFAULT_RENDERERS = mergeRenderers( PROOF_RENDERERS, EXERCISE_RENDERERS, ASIDE_RENDERERS, + SCIENCEICON_RENDERERS, ], true, ); From 76eecdba4898a01c6d8bb48d60bc1e5b36f4f436 Mon Sep 17 00:00:00 2001 From: choldgraf Date: Thu, 12 Feb 2026 10:00:20 -0800 Subject: [PATCH 13/13] Demonstrate how this can enable science icons --- docs/_site/primary_sidebar_footer.md | 2 +- docs/myst.yml | 2 + docs/reference/icons.md | 51 ++++++++++++++++++++++ packages/myst-to-react/src/index.tsx | 2 + packages/myst-to-react/src/scienceicon.tsx | 23 ++++++++++ styles/app.css | 1 + styles/scienceicons.css | 15 +++++++ themes/article/remix.config.dev.js | 1 + themes/book/remix.config.dev.js | 1 + 9 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 docs/reference/icons.md create mode 100644 packages/myst-to-react/src/scienceicon.tsx create mode 100644 styles/scienceicons.css diff --git a/docs/_site/primary_sidebar_footer.md b/docs/_site/primary_sidebar_footer.md index 73b1b844f..95ba4a5a9 100644 --- a/docs/_site/primary_sidebar_footer.md +++ b/docs/_site/primary_sidebar_footer.md @@ -1 +1 @@ -**Custom Footer** | [GitHub](https://github.com/jupyter-book/myst-theme) +[{scienceicon}`github`](https://github.com/jupyter-book/myst-theme) [{scienceicon}`website`](https://mystmd.org) [{scienceicon}`mastodon`](https://bsky.app/profile/mystmd.org) diff --git a/docs/myst.yml b/docs/myst.yml index 7b4c31b99..fa6c6b540 100644 --- a/docs/myst.yml +++ b/docs/myst.yml @@ -3,6 +3,8 @@ version: 1 project: id: b19ac145-d09e-4dcc-bd37-28fbba0f9e8e title: myst-theme documentation + plugins: + - https://unpkg.com/@scienceicons/myst@1.0.4/dist/scienceicons.mjs # description: # keywords: [] diff --git a/docs/reference/icons.md b/docs/reference/icons.md new file mode 100644 index 000000000..d96bffe1b --- /dev/null +++ b/docs/reference/icons.md @@ -0,0 +1,51 @@ +--- +title: Icons +--- + +# ScienceIcons + +[scienceicons](https://github.com/continuous-foundation/scienceicons) is a collection of icons that are relevant to the scientific community. +It offers a plugin that you can use to create a `{scienceicon}` role. +The MyST themes know how to render the nodes that this role creates. + +## Enable the Plugin + +First enable the scienceicons plugin. +Add this to `myst.yml`: + +```yaml +project: + plugins: + - https://unpkg.com/@scienceicons/myst@1.0.4/dist/scienceicons.mjs +``` + +This enables the role described below: + +## Science Icons Role + +Inline: + +``` +{scienceicon}`jupyter` {scienceicon}`github` {scienceicon}`orcid` +``` +{scienceicon}`jupyter` {scienceicon}`github` {scienceicon}`orcid` + +These are useful if you want to create an **icon link**: + +``` +[{scienceicon}`github`](https://github.com/jupyter-book/myst-theme) +``` + +[{scienceicon}`github`](https://github.com/jupyter-book/myst-theme) + +The `scicon` alias is a helpful short-hand for the same thing: + +``` +{scicon}`jupyter-book` +``` +{scicon}`jupyter-book` + + +## All Supported Icon Names + +See the [list of supported icons](https://app.unpkg.com/@scienceicons/myst@1.0.4/files/src/names.json) for a list of the names available. diff --git a/packages/myst-to-react/src/index.tsx b/packages/myst-to-react/src/index.tsx index fdb1f7890..ba390dda3 100644 --- a/packages/myst-to-react/src/index.tsx +++ b/packages/myst-to-react/src/index.tsx @@ -23,6 +23,7 @@ import EXERCISE_RENDERERS from './exercise.js'; import ASIDE_RENDERERS from './aside.js'; import UNKNOWN_MYST_RENDERERS from './unknown.js'; import SCIENCEICON_RENDERERS from '@scienceicons/myst/react'; +import SCIENCEICON_CLASS_RENDERERS from './scienceicon.js'; export { Block } from './block.js'; export { CopyIcon, HoverPopover, Tooltip, LinkCard } from './components/index.js'; @@ -61,6 +62,7 @@ export const DEFAULT_RENDERERS = mergeRenderers( EXERCISE_RENDERERS, ASIDE_RENDERERS, SCIENCEICON_RENDERERS, + SCIENCEICON_CLASS_RENDERERS, ], true, ); diff --git a/packages/myst-to-react/src/scienceicon.tsx b/packages/myst-to-react/src/scienceicon.tsx new file mode 100644 index 000000000..9c90460d8 --- /dev/null +++ b/packages/myst-to-react/src/scienceicon.tsx @@ -0,0 +1,23 @@ +/** + * A small wrapper component around scienceicons so that we can add a .scienceicon class to style. + */ +import type { NodeRenderer } from '@myst-theme/providers'; +import { ScienceIconRenderer } from '@scienceicons/myst/react'; +import classNames from 'classnames'; + +// Wrap upstream renderer output with a class so our theme CSS can target it +// If scienceicons starts shipping with a class then we can delete this! +export const ScienceIconWithClass: NodeRenderer = ({ node, className }) => { + return ( + + + + ); +}; + +const SCIENCEICON_CLASS_RENDERERS = { + // Override the "scienceicon" node renderer key with our class-attached wrapper. + scienceicon: ScienceIconWithClass, +}; + +export default SCIENCEICON_CLASS_RENDERERS; diff --git a/styles/app.css b/styles/app.css index 6d7009654..2d7e3f7d7 100644 --- a/styles/app.css +++ b/styles/app.css @@ -1,4 +1,5 @@ @import './typography.css'; +@import './scienceicons.css'; @import './grid-system.css'; @import './details.css'; @import './citations.css'; diff --git a/styles/scienceicons.css b/styles/scienceicons.css new file mode 100644 index 000000000..74561d07f --- /dev/null +++ b/styles/scienceicons.css @@ -0,0 +1,15 @@ +@layer components { + /* Scienceicon output wrapper */ + a.link > .scienceicon { + @apply align-middle; + } + + .scienceicon > span.inline-flex { + @apply align-middle; + } + + /* Hide appended external/download link icon when link content is a scienceicon */ + a.link > .scienceicon + .link-icon { + display: none !important; + } +} diff --git a/themes/article/remix.config.dev.js b/themes/article/remix.config.dev.js index 99d3fb810..b3a82be29 100644 --- a/themes/article/remix.config.dev.js +++ b/themes/article/remix.config.dev.js @@ -48,6 +48,7 @@ module.exports = { 'credit-roles', 'tex-to-typst', 'jats-tags', + /^@scienceicons\/.*/, /^@myst-theme\/.*/, /react-syntax-highlighter.*/, 'markdown-it-myst-extras', diff --git a/themes/book/remix.config.dev.js b/themes/book/remix.config.dev.js index 99d3fb810..b3a82be29 100644 --- a/themes/book/remix.config.dev.js +++ b/themes/book/remix.config.dev.js @@ -48,6 +48,7 @@ module.exports = { 'credit-roles', 'tex-to-typst', 'jats-tags', + /^@scienceicons\/.*/, /^@myst-theme\/.*/, /react-syntax-highlighter.*/, 'markdown-it-myst-extras',