diff --git a/package-lock.json b/package-lock.json index 020b606dfa..6f17cac9f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2914,9 +2914,9 @@ } }, "@types/codemirror": { - "version": "0.0.77", - "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.77.tgz", - "integrity": "sha512-nfjRJpAXgkT075jztMp92Ol2b7w7JrDvpfBU70GfVhpfdpWiZi6NqVIO3STGNzWl77/iJkTu2ZSg6hQobrEadg==", + "version": "0.0.98", + "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.98.tgz", + "integrity": "sha512-cbty5LPayy2vNSeuUdjNA9tggG+go5vAxmnLDRWpiZI5a+RDBi9dlozy4/jW/7P/gletbBWbQREEa7A81YxstA==", "dev": true, "requires": { "@types/tern": "*" @@ -2965,9 +2965,9 @@ "dev": true }, "@types/estree": { - "version": "0.0.44", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.44.tgz", - "integrity": "sha512-iaIVzr+w2ZJ5HkidlZ3EJM8VTZb2MJLCjw3V+505yVts0gRC4UMvjw0d1HPtGqI/HQC/KdsYtayfzl+AXY2R8g==", + "version": "0.0.45", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", + "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", "dev": true }, "@types/events": { @@ -5597,9 +5597,9 @@ "dev": true }, "codemirror": { - "version": "5.52.2", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.52.2.tgz", - "integrity": "sha512-WCGCixNUck2HGvY8/ZNI1jYfxPG5cRHv0VjmWuNzbtCLz8qYA5d+je4QhSSCtCaagyeOwMi/HmmPTjBgiTm2lQ==" + "version": "5.58.2", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.58.2.tgz", + "integrity": "sha512-K/hOh24cCwRutd1Mk3uLtjWzNISOkm4fvXiMO7LucCrqbh6aJDdtqUziim3MZUI6wOY0rvY1SlL1Ork01uMy6w==" }, "codemirror-abap": { "version": "0.2.2", diff --git a/package.json b/package.json index 234eb3084a..3a03926f0e 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@babel/preset-react": "^7.0.0", "@babel/preset-typescript": "^7.6.0", "@testing-library/react-hooks": "^2.0.1", - "@types/codemirror": "0.0.77", + "@types/codemirror": "0.0.98", "@types/dashify": "^1.0.0", "@types/filenamify": "^2.0.2", "@types/history": "^4.7.3", @@ -110,7 +110,7 @@ "@mdi/react": "^1.2.1", "aws-amplify": "^1.2.4", "classcat": "^4.0.2", - "codemirror": "^5.49.0", + "codemirror": "^5.58.2", "codemirror-abap": "^0.2.2", "coffeescript": "^2.4.1", "copy-to-clipboard": "^3.3.1", diff --git a/src/components/atoms/CodeEditor.tsx b/src/components/atoms/CodeEditor.tsx index b7fef292aa..066e4a278d 100644 --- a/src/components/atoms/CodeEditor.tsx +++ b/src/components/atoms/CodeEditor.tsx @@ -1,16 +1,38 @@ import React from 'react' import CodeMirror, { getCodeMirrorTheme } from '../../lib/CodeMirror' import styled from '../../lib/styled' +import { borderRight } from '../../lib/styled/styleFunctions' import { EditorIndentTypeOptions, EditorIndentSizeOptions, EditorKeyMapOptions, } from '../../lib/preferences' +import { osName } from '../../lib/platform' const StyledContainer = styled.div` .CodeMirror { font-family: inherit; } + + .CodeMirror-dialog button { + background-color: transparent; + cursor: pointer; + height: 26px; + line-height: 26px; + padding: 0 15px; + transition: color 200ms ease-in-out; + color: ${({ theme }) => theme.primaryDarkerColor}; + border: none; + ${borderRight} + &:last-child { + border-right: none; + } + } + + .CodeMirror-dialog button:hover { + color: ${({ theme }) => theme.primaryButtonLabelColor}; + background-color: ${({ theme }) => theme.primaryColor}; + } ` const defaultCodeMirrorOptions: CodeMirror.EditorConfiguration = { @@ -60,6 +82,8 @@ class CodeEditor extends React.Component { extraKeys: { Enter: 'newlineAndIndentContinueMarkdownList', Tab: 'indentMore', + [osName === 'macos' ? 'Cmd-Alt-F' : 'Ctrl-Alt-F']: 'findPersistent', + Esc: 'clearSearch', }, }) this.codeMirror.on('change', this.handleCodeMirrorChange) diff --git a/src/lib/CodeMirror.ts b/src/lib/CodeMirror.ts index 5259c67129..2ddc3b60bb 100644 --- a/src/lib/CodeMirror.ts +++ b/src/lib/CodeMirror.ts @@ -3,6 +3,11 @@ import 'codemirror/addon/runmode/runmode' import 'codemirror/addon/mode/overlay' import 'codemirror/addon/comment/comment' import 'codemirror/addon/edit/continuelist' +import 'codemirror/addon/dialog/dialog' +import 'codemirror/addon/search/search' +import 'codemirror/addon/search/searchcursor' +import 'codemirror/addon/search/jump-to-line' +import 'codemirror/addon/dialog/dialog.css' import 'codemirror/mode/markdown/markdown' import 'codemirror/mode/gfm/gfm' import 'codemirror/mode/xml/xml'