/** * CodeMirror Control Styles for BetterDocs Code Snippet Block */ .betterdocs-codemirror-control { .components-base-control__field { margin-bottom: 0; } .components-base-control__label { font-weight: 600; margin-bottom: 8px; display: block; } .components-base-control__help { margin-top: 8px; font-size: 12px; font-style: normal; color: #757575; } // Loading state &.is-loading { .codemirror-loading { padding: 12px; text-align: center; background-color: #f7f7f7; border: 1px solid #ddd; border-radius: 4px; color: #666; font-size: 13px; margin-bottom: 8px; span { display: inline-block; position: relative; &::after { content: ''; display: inline-block; width: 12px; height: 12px; margin-left: 8px; border: 2px solid #ddd; border-top-color: #007cba; border-radius: 50%; animation: codemirror-spin 1s linear infinite; } } } } // Error state &.has-error { .components-base-control__help { color: #d63638; } textarea { border-color: #d63638; } } @keyframes codemirror-spin { to { transform: rotate(360deg); } } // Hide textarea when CodeMirror is active &.is-codemirror-ready { textarea { display: none !important; } } // Fallback textarea styling textarea { font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 13px; line-height: 1.4; border: 1px solid #ddd; border-radius: 4px; padding: 8px; resize: vertical; min-height: 200px; width: 100%; &:focus { border-color: #007cba; box-shadow: 0 0 0 1px #007cba; outline: 2px solid transparent; } } // CodeMirror wrapper .CodeMirror { border: 1px solid #ddd; border-radius: 4px; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 13px; line-height: 1.4; height: auto; min-height: 200px; max-height: 500px; &.CodeMirror-focused { border-color: #007cba; box-shadow: 0 0 0 1px #007cba; outline: 2px solid transparent; } .CodeMirror-scroll { min-height: 200px; max-height: 500px; } .CodeMirror-lines { padding: 8px 0; } .CodeMirror-line { padding: 0 8px; } .CodeMirror-linenumber { color: #999; padding: 0 8px 0 0; min-width: 30px; } .CodeMirror-gutters { border-right: 1px solid #ddd; background-color: #f7f7f7; } .CodeMirror-cursor { border-left: 1px solid #000; } .CodeMirror-selected { background: #d9d9d9; } .CodeMirror-selectedtext { background: none; } // Placeholder styling .CodeMirror-placeholder { color: #999; font-style: italic; } // Syntax highlighting improvements .cm-keyword { color: #d73a49; font-weight: bold; } .cm-string { color: #032f62; } .cm-comment { color: #6a737d; font-style: italic; } .cm-number { color: #005cc5; } .cm-variable { color: #24292e; } .cm-variable-2 { color: #6f42c1; } .cm-def { color: #6f42c1; } .cm-operator { color: #d73a49; } .cm-bracket { color: #24292e; } .cm-tag { color: #22863a; } .cm-attribute { color: #6f42c1; } .cm-property { color: #005cc5; } .cm-qualifier { color: #6f42c1; } .cm-builtin { color: #005cc5; } .cm-atom { color: #005cc5; } } // Focus state for the control &.is-focused { .CodeMirror { border-color: #007cba; box-shadow: 0 0 0 1px #007cba; } } // Dark theme support .interface-interface-skeleton__body.is-dark-theme & { .CodeMirror { background-color: #1e1e1e; color: #d4d4d4; border-color: #3c3c3c; .CodeMirror-gutters { background-color: #252526; border-right-color: #3c3c3c; } .CodeMirror-linenumber { color: #858585; } .CodeMirror-cursor { border-left-color: #d4d4d4; } .CodeMirror-selected { background: #264f78; } .CodeMirror-placeholder { color: #858585; } // Dark theme syntax highlighting .cm-keyword { color: #569cd6; } .cm-string { color: #ce9178; } .cm-comment { color: #6a9955; } .cm-number { color: #b5cea8; } .cm-variable { color: #9cdcfe; } .cm-variable-2 { color: #c586c0; } .cm-def { color: #dcdcaa; } .cm-operator { color: #d4d4d4; } .cm-tag { color: #569cd6; } .cm-attribute { color: #92c5f8; } .cm-property { color: #9cdcfe; } } } // Responsive adjustments @media (max-width: 782px) { .CodeMirror { font-size: 14px; min-height: 150px; } } }