mirror of
https://github.com/bwya77/collapsible-code-blocks.git
synced 2026-07-22 12:00:25 +00:00
228 lines
No EOL
6.1 KiB
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;
|
|
} |