diff --git a/docusaurus.config.js b/docusaurus.config.js index 312e694166..89c5368b12 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -108,6 +108,12 @@ const config = { ], require.resolve('docusaurus-plugin-image-zoom'), require.resolve('./plugins/llm'), + [ + 'docusaurus-plugin-copy-page-button', + { + injectButton: false, + }, + ], // .... function docusaurusTailwindcssPlugin(context, options) { return { diff --git a/package-lock.json b/package-lock.json index 6c813e445c..9c35479b33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "@mdx-js/react": "^3.0.0", "autoprefixer": "^10.4.17", "clsx": "^2.1.0", + "docusaurus-plugin-copy-page-button": "^0.8.0", "docusaurus-plugin-image-zoom": "^2.0.0", "docusaurus-plugin-sass": "0.2.5", "postcss": "^8.4.34", @@ -9577,6 +9578,19 @@ "node": ">=6" } }, + "node_modules/docusaurus-plugin-copy-page-button": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-copy-page-button/-/docusaurus-plugin-copy-page-button-0.8.0.tgz", + "integrity": "sha512-WsdA9yDlOevHuKiHMq/aZJvLViyYmlyYEPtYaIvL09qScZLu27Lyx7ABycgYz10t389nnz7NcfSKD3ghMs62fg==", + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@docusaurus/core": "^3.0.0", + "react": "^18.0.0 || ^19.0.0" + } + }, "node_modules/docusaurus-plugin-image-zoom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/docusaurus-plugin-image-zoom/-/docusaurus-plugin-image-zoom-2.0.0.tgz", diff --git a/package.json b/package.json index 80504fc37b..65610e456a 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "@mdx-js/react": "^3.0.0", "autoprefixer": "^10.4.17", "clsx": "^2.1.0", + "docusaurus-plugin-copy-page-button": "^0.8.0", "docusaurus-plugin-image-zoom": "^2.0.0", "docusaurus-plugin-sass": "0.2.5", "postcss": "^8.4.34", diff --git a/src/theme/TOC/index.tsx b/src/theme/TOC/index.tsx index c77d3ecfe5..2f3f536b96 100644 --- a/src/theme/TOC/index.tsx +++ b/src/theme/TOC/index.tsx @@ -1,10 +1,25 @@ import React from 'react' import clsx from 'clsx' import TOC from '@theme-original/TOC' +import CopyPageButton from 'docusaurus-plugin-copy-page-button/react' +import styles from './styles.module.css' export default function TOCWrapper(props) { return ( <> +
+ { + const {origin, pathname} = new URL(pageUrl) + const rel = pathname.replace(/^\/+/, '').replace(/\/+$/, '') + return `${origin}/llm/markdown/${rel ? `${rel}.md` : 'index.md'}` + }} + customStyles={{ + button: {className: styles.copyPageButton}, + }} + /> +

Contents

diff --git a/src/theme/TOC/styles.module.css b/src/theme/TOC/styles.module.css new file mode 100644 index 0000000000..497735354b --- /dev/null +++ b/src/theme/TOC/styles.module.css @@ -0,0 +1,9 @@ +.copyPageButton { + background: transparent !important; + border-radius: 4px; + font-size: 0; + gap: 4px; + margin-bottom: 0; + padding: 8px; + height: 32px; +}