/CodeMirror-SwiftUI

CodeMirror-SwiftUI is a lightweight wrapper of CodeMirror for macOS and iOS packaged for SwiftUI.

Primary LanguageJavaScriptMIT LicenseMIT

CodeMirror-SwiftUI

GitHub tag (latest by date) Swift Package Manager Swift5 Platform GitHub repo size

CodeMirror-SwiftUI

CodeMirror-SwiftUI is a lightweight wrapper of CodeMirror for macOS and iOS packaged for SwiftUI.

This package is a fork from CodeMirror-Swift

Features

  • 🍭 Lightweight CodeMirror wrapper (build 5.59.4)
  • ✅ 100% Native Swift 5 and modern WKWebView
  • 👑 Support iOS & macOS
  • 🎧 Built-in addons
  • 📕 100+ built-in themes and syntax highlight modes
  • ⚡️ Ready to go

Requirements

  • Xcode 12
  • Swift 5.3

Integration

CodeMirror-SwiftUI is available via Swift Package Manager

Using Xcode 12, go to File -> Swift Packages -> Add Package Dependency and enter https://github.com/Pictarine/CodeMirror-SwiftUI

Usage

CodeMirror gives you access to a new view called CodeView. It can be integrated within your view body like this :

CodeView(theme: themes[selectedTheme],
         code: $codeBlock,
         mode: codeMode,
         fontSize: fontSize,
         showInvisibleCharacters: showInvisibleCharacters,
         lineWrapping: lineWrapping)
.onLoadSuccess {
  print("Loaded")
}
.onContentChange { newCodeBlock in
  print("Content Change")
}
.onLoadFail { error in
  print("Load failed : \(error.localizedDescription)")
}

Details

Code Editor Features

  • CodeMirror v5.59.4
  • Better find and replace dialog integration
  • Autocompletion hints (ctrl+space)
  • Reindent (ctrl+i)
  • Auto close tags and brackets

Parameters

CodeView has multiple params:

Parameter name Optional Type Default
code false Binding
mode false Mode
theme true CodeViewTheme .materialPalenight
fontSize true Int 12 (px)
showInvisibleCharacters true Bool true
lineWrapping true Bool true

Modifiers

CodeView comes with three modifiers

onLoadSuccess { ... }
onLoadFail { ... }
onContentChange { ... }

Demo

black_light_theme

License

CodeMirror-SwiftUI is available under the MIT license. See the LICENSE file for more info.