codemirror-foldable-indentation-guides
v1.1.0
Published
Render foldable indentation guides in CodeMirror
Maintainers
Readme
CodeMirror Foldable Indentation Guides
A CodeMirror extension that renders indentation guides that can be folded on click. Utilizes @replit/codemirror-indentation-markers for indentation logic.

Usage
import { basicSetup } from 'codemirror';
import { EditorState } from '@codemirror/state';
import { EditorView } from '@codemirror/view';
import { foldableIndentationGuides } from 'codemirror-foldable-indentation-guides';
const doc = `
def max(a, b):
if a > b:
return a
else:
return b
`;
new EditorView({
state: EditorState.create({
doc,
extensions: [basicSetup, foldableIndentationGuides()],
}),
parent: document.querySelector('#editor'),
});Options
You can provide an options object to foldableIndentationGuides() with the following
optional properties:
highlightActiveMarkerBoolean that determines whether the active block marker is styled differently. Setting this to
falseprovides a significant performance enhancement because it means that markers do not need to be regenerated when the selection changes. Defaults totrue.highlightHoveredMarkerBoolean that determines whether the hovered block marker is styled differently. Defaults to
true.highlightActiveBlockBackgroundBoolean that determines whether to change background color of line from active block. Defaults to
true.highlightHoveredBlockBackgroundBoolean that determines whether to change background color of line from hovered block marker. Defaults to
true.foldBlockOnClickBoolean that Determines whether block markers are foldable. Defaults to
true.hideFirstIndentBoolean that determines whether markers in the first column are omitted. Defaults to
false.markerTypeString that determines how far the indentation markers extend.
"fullScope"indicates that the markers extend down the full height of a scope. With the"codeOnly"option, indentation markers terminate at the last nonempty line in a scope. Defaults to"fullScope".thicknessInteger that determines the thickness in pixels of the indentation markers. Defaults to
1.activeThicknessInteger that determines the thickness in pixels of the active indentation markers. If
undefinedornullthenthicknesswill be used. Defaults toundefined.hoverThicknessInteger that determines the thickness in pixels of the hovered indentation markers. If
undefinedornullthenthicknesswill be used. Defaults toundefined.additionalPaddingInteger that determines the additional padding for each left and right side of marker button for more clickable and hoverable area (in pixels). Defaults to
0.colorsObject that determines the colors of the indentation markers.
lightString that determines the color of the markers when the editor has a light theme. Defaults to
#F0F1F2.darkString that determines the color of the markers when the editor has a dark theme. Defaults to
#2B3245.activeLightString that determines the color of the active block marker when the editor has a light theme. Only applies if
highlightActiveMarkeristrue. Defaults to#E4E5E6.activeDarkString that determines the color of the active block marker when the editor has a dark theme. Only applies if
highlightActiveMarkeristrue. Defaults to#3C445C.hoverLightString that determines the color of hovered indent markers when using a dark theme. Only applies if
highlightHoveredMarkeristrue. Defaults to#E4E5E6.hoverDarkString that determines the color of hovered indent markers when using a dark theme. Only applies if
highlightHoveredMarkeristrue. Defaults to#3C445C.backgroundLightString that determines the color of active background when using a light theme. Only applies if
highlightActiveBlockBackgroundistrue. Defaults to#e4e5e630.backgroundDarkString that determines the color of active background when using a dark theme. Only applies if
highlightActiveBlockBackgroundistrue. Defaults to#3c445c30.backgroundHoverLightString that determines the color of hovered background when using a light theme. Only applies if
highlightHoveredBlockBackgroundistrue. Defaults to#e4e5e630.backgroundHoverDarkString that determines the color of hovered background when using a dark theme. Only applies if
highlightHoveredBlockBackgroundistrue. Defaults to#3c445c30.
Example
new EditorView({
state: EditorState.create({
doc,
extensions: [
basicSetup,
foldableIndentationGuides({
highlightActiveBlock: false,
hideFirstIndent: true,
markerType: 'codeOnly',
thickness: 2,
colors: {
light: 'LightBlue',
dark: 'DarkBlue',
activeLight: 'LightGreen',
activeDark: 'DarkGreen',
},
}),
],
}),
parent: document.querySelector('#editor'),
});