bwya77_collapsible-code-blocks/styles.css

228 lines
No EOL
6.1 KiB
CSS

/* styles.css */
.markdown-preview-view pre.ccb-code-block {
position: relative;
padding-top: 24px;
user-select: text;
transition: max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
overflow: hidden;
}
.markdown-preview-view pre.ccb-code-block code {
display: block;
line-height: 1.5em;
transition: max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
overflow-x: auto;
}
.markdown-preview-view pre.ccb-code-block.collapsed code {
max-height: calc(var(--collapsed-lines, 1) * 1.5em);
overflow: hidden;
overflow-x: hidden;
}
.code-block-toggle {
position: absolute;
top: 4px;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
color: var(--text-muted);
cursor: pointer;
z-index: 2;
background: transparent;
border-radius: 4px;
user-select: none;
font-size: 16px;
}
/* Left alignment (default) */
.code-block-toggle {
left: 4px;
}
/* Right alignment */
[data-button-alignment="right"] .code-block-toggle {
right: 4px;
left: auto;
}
/* When copy button is present, position to the left of it with more spacing and lower position */
[data-button-alignment="right"] .markdown-preview-view pre.ccb-code-block:has(.copy-code-button) .code-block-toggle {
right: 38px;
top: 8px;
}
/* For right-aligned buttons without copy button, also adjust position slightly */
[data-button-alignment="right"] .markdown-preview-view pre.ccb-code-block .code-block-toggle {
top: 8px;
}
.code-block-toggle:hover {
color: var(--text-normal);
background: var(--background-modifier-hover);
}
.code-block-toggle:focus-visible {
outline: 2px solid var(--text-accent);
outline-offset: 2px;
}
.code-block-toggle::selection {
background: transparent;
}
body[data-ccb-horizontal-scroll="true"] .markdown-preview-view pre.ccb-code-block:not(.collapsed) code {
white-space: pre;
}
.ccb-hide-vertical-scrollbar::-webkit-scrollbar:vertical {
width: 0;
}
/* New styles for dynamic states */
.hidden {
display: none !important;
}
.element-hidden {
display: none !important;
}
.element-visible {
display: block;
}
.element-spacing {
margin-top: var(--element-spacing);
}
/* Custom properties for dynamic values */
:root {
--element-spacing: 0px;
--collapsed-lines: 1;
}
.code-block-folded {
min-height: 3em;
padding: 1.5em 1em 1em 48px;
background: var(--code-background);
border-radius: 4px;
color: var(--text-muted);
font-family: var(--font-monospace);
font-size: var(--code-size);
line-height: var(--line-height-tight);
position: relative;
}
.ccb-editor-codeblock {
position: relative;
padding-left: 32px;
}
.code-block-folded .folded-content {
max-height: calc(var(--collapsed-lines, 1) * 1.5em);
overflow: hidden;
}
.code-block-folded .folded-content pre {
margin: 0;
padding: 0;
background: transparent;
border: none;
font-family: var(--font-monospace);
font-size: inherit;
line-height: 1.5em;
}
.code-block-folded .folded-content code {
white-space: pre;
display: block;
color: inherit;
font-size: inherit;
font-family: var(--font-monospace);
line-height: inherit;
}
/* Ensure syntax highlighting tokens are visible in folded state */
.code-block-folded .folded-content .token {
color: inherit;
}
/* Preserve Prism.js syntax highlighting colors */
.code-block-folded .folded-content code[class*="language-"] {
color: var(--text-normal);
}
.code-block-folded .code-block-toggle {
top: 4px;
left: 4px;
}
[data-button-alignment="right"] .code-block-folded .code-block-toggle {
right: 4px;
left: auto;
top: 8px;
}
/* Rotate expand icon when right-aligned and collapsed */
[data-button-alignment="right"] .markdown-preview-view pre.ccb-code-block.collapsed .code-block-toggle,
[data-button-alignment="right"] .code-block-folded .code-block-toggle {
transform: rotate(180deg);
}
/* Transparent button functionality - only in reading mode */
[data-transparent-button="true"] .markdown-preview-view .code-block-toggle {
opacity: 0;
transition: opacity 0.2s ease-in-out;
}
/* Reading mode - show only on direct button hover */
[data-transparent-button="true"] .markdown-preview-view .code-block-toggle:hover,
[data-transparent-button="true"] .markdown-preview-view .code-block-toggle:focus-visible {
opacity: 1;
}
/* Edit mode - always show buttons (no transparency in edit mode) */
/* Dynamic positioning in edit mode based on code-block-flair presence */
/* When code-block-flair (language button) is present in the same line, position collapse button to its left */
.HyperMD-codeblock:has(.code-block-flair) .code-block-toggle {
right: 80px; /* Position close to language button */
left: auto;
}
/* Right-aligned buttons: when code-block-flair is present, move to left of language button */
[data-button-alignment="right"] .HyperMD-codeblock:has(.code-block-flair) .code-block-toggle {
right: 80px; /* Position close to language button */
left: auto;
}
/* Left-aligned buttons: when code-block-flair is present, stay on left but visible */
[data-button-alignment="left"] .HyperMD-codeblock:has(.code-block-flair) .code-block-toggle {
left: 4px;
right: auto;
}
/* When transparent button is enabled and language button is present, hide collapse button until hover */
[data-transparent-button="true"] .HyperMD-codeblock:has(.code-block-flair) .code-block-toggle {
opacity: 0;
transition: opacity 0.2s ease-in-out;
}
/* Show on hover when language button is present */
[data-transparent-button="true"] .HyperMD-codeblock:has(.code-block-flair):hover .code-block-toggle {
opacity: 1;
}
/* When transparent button is enabled and editing (no language button), hide collapse button until hover */
[data-transparent-button="true"] .HyperMD-codeblock:not(:has(.code-block-flair)) .code-block-toggle {
opacity: 0;
transition: opacity 0.2s ease-in-out;
}
/* Show on hover when actively editing (no language button) */
[data-transparent-button="true"] .HyperMD-codeblock:not(:has(.code-block-flair)):hover .code-block-toggle {
opacity: 1;
}