docusaurus-plugin-copy-page-button
Version:
A Docusaurus plugin that provides a copy page button for extracting content as markdown for LLMs
207 lines (174 loc) • 4.31 kB
CSS
/* Position button container on top of sidebar */
#copy-page-button-container {
position: absolute;
top: -60px;
left: 0;
right: 0;
z-index: 100;
pointer-events: none;
padding-bottom: 20px;
}
#copy-page-button-container > * {
pointer-events: auto;
}
.copyPageContainer {
position: relative;
display: inline-block;
}
.copyPageButton {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 12px;
margin-bottom: 16px;
background: var(--ifm-navbar-background-color, #1c1e21);
border: 1px solid var(--ifm-color-emphasis-300);
border-radius: 6px;
color: var(--ifm-navbar-link-color);
cursor: pointer;
font-size: 14px;
font-weight: 500;
transition: all 0.2s ease;
white-space: nowrap;
}
.copyPageButton:hover {
background: var(--ifm-color-emphasis-100);
border-color: var(--ifm-color-emphasis-400);
}
.copyPageButton:focus {
background: var(--ifm-color-emphasis-200, #eee);
border-color: var(--ifm-color-primary, #007acc);
outline: none;
}
.chevron {
transition: transform 0.2s ease;
}
.chevron.open {
transform: rotate(180deg);
}
.copyPageDropdown {
min-width: 300px;
background: var(--ifm-dropdown-background-color, #1c1e21);
border: 1px solid var(--ifm-color-emphasis-300);
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
overflow: hidden;
}
.dropdownItem {
display: flex;
align-items: center;
gap: 12px;
width: 100%;
padding: 12px 16px;
background: transparent;
border: none;
color: var(--ifm-font-color-base);
cursor: pointer;
text-align: left;
transition: background-color 0.2s ease;
border-bottom: 1px solid var(--ifm-color-emphasis-200);
}
.dropdownItem:last-child {
border-bottom: none;
}
.dropdownItem:hover {
background: var(--ifm-color-emphasis-100);
}
.dropdownItem svg {
flex-shrink: 0;
opacity: 0.7;
}
.itemTitle {
font-size: 14px;
font-weight: 500;
margin-bottom: 2px;
color: var(--ifm-font-color-base);
}
.itemDescription {
font-size: 13px;
color: var(--ifm-color-emphasis-700);
line-height: 1.3;
}
[data-theme="dark"] .copyPageButton {
background: var(--ifm-navbar-background-color);
border-color: var(--ifm-color-emphasis-300);
}
[data-theme="dark"] .copyPageButton:hover {
background: var(--ifm-color-emphasis-200);
}
[data-theme="dark"] .copyPageDropdown {
background: var(--ifm-dropdown-background-color);
border-color: var(--ifm-color-emphasis-300);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
}
[data-theme="dark"] .dropdownItem:hover {
background: var(--ifm-color-emphasis-200);
}
[data-theme="light"] .copyPageButton {
background: #ffffff;
border-color: #d0d7de;
color: #24292f;
}
[data-theme="light"] .copyPageButton:hover {
background: #f6f8fa;
border-color: #8c959f;
}
[data-theme="light"] .copyPageDropdown {
background: #ffffff;
border-color: #d0d7de;
box-shadow: 0 8px 24px rgba(140, 149, 159, 0.2);
}
[data-theme="light"] .dropdownItem {
color: #24292f;
border-color: #d0d7de;
}
[data-theme="light"] .dropdownItem:hover {
background: #f6f8fa;
}
[data-theme="light"] .itemDescription {
color: #656d76;
}
/* Hide the "Copy page" text on smaller screens (below 768px) */
@media (max-width: 767px) {
.copyPageText {
display: none;
}
}
/* Force breadcrumbs to wrap earlier to avoid overlap with copy button */
:global(.theme-doc-breadcrumbs) {
/* Reserve space for copy button on smaller screens */
@media (max-width: 996px) {
max-width: calc(100% - 120px); /* Reserve 120px for copy button */
flex-wrap: wrap;
}
@media (max-width: 768px) {
max-width: calc(100% - 80px); /* Reserve 80px for icon-only button */
}
@media (max-width: 480px) {
max-width: calc(100% - 60px); /* Reserve 60px for very small screens */
}
}
/* Ensure breadcrumb items can wrap */
:global(.theme-doc-breadcrumbs .breadcrumbs__item) {
flex-shrink: 1;
min-width: 0;
}
/* Make breadcrumb links wrap text if needed */
:global(.theme-doc-breadcrumbs .breadcrumbs__link) {
white-space: normal;
word-break: break-word;
hyphens: auto;
}
:global(#copy-page-button-container) {
@media (max-width: 996px) {
position: absolute;
right: 16px;
top: 75px;
z-index: 50;
}
}
@media (max-width: 996px) {
.copyPageDropdown {
max-width: 300px;
}
}