4import CSS.Safer (cssSafer)
5import Control.Promise (Promise)
6import Control.Promise as Promise
7import Data.Maybe (Maybe(..))
8import Data.Nullable (notNull, null)
10import Effect.Aff (Aff)
11import Effect.Class (liftEffect)
12import Effect.Class.Console (warn)
13import Effect.Uncurried (EffectFn2, mkEffectFn2)
14import Foreign (Foreign, unsafeToForeign)
15import Prim.Row (class Union)
16import React.Basic (JSX, ReactComponent, element, fragment)
17import React.Basic.DOM as R
18import React.Basic.Events (handler_)
19import React.Basic.Hooks (component, readRefMaybe, useRef, writeRef)
20import React.Basic.Hooks as React
21import React.Basic.Hooks.Aff (useAff)
22import React.Helpers (wrapperDiv)
23import Theme.Styles (makeStyles_)
29 , editorDidMount ∷ EffectFn2 Node Editor Unit
38foreign import editorImpl ∷ ∀ attrs. ReactComponent { | attrs }
40foreign import initMonacoImpl ∷ Effect (Promise Monaco)
42foreign import defineThemeImpl ∷ Monaco -> String -> MonacoTheme -> Effect Unit
44foreign import setThemeImpl ∷ Monaco -> String -> Effect Unit
46foreign import nightOwlTheme ∷ MonacoTheme
48foreign import getValue ∷ Editor -> Effect String
50foreign import data Monaco ∷ Type
52foreign import data Editor ∷ Type
54foreign import data MonacoTheme ∷ Type
57 ∀ attrs attrs_. Union attrs attrs_ EditorProps => ReactComponent { | attrs }
60initMonaco ∷ Aff Monaco
61initMonaco = liftEffect initMonacoImpl >>= Promise.toAff
66foreign import data MonarchLanguage ∷ Type
68foreign import purescriptSyntax ∷ MonarchLanguage
70foreign import registerLanguageImpl ∷ Monaco -> String -> Effect Unit
72foreign import setMonarchTokensProviderImpl ∷ Monaco -> String -> MonarchLanguage -> Effect Unit
74mkEditor ∷ Effect (ReactComponent {})
81 , boxSizing: "border-box"
82 , padding: "35px 40px"
85 , borderRadius: "32px"
86 , backgroundColor: "#011627"
89 component "Editor" \{} -> React.do
95 defineThemeImpl monaco themeName nightOwlTheme # liftEffect
96 setThemeImpl monaco themeName # liftEffect
97 registerLanguageImpl monaco "purescript" # liftEffect
98 setMonarchTokensProviderImpl monaco "purescript" purescriptSyntax # liftEffect
104 maybeEditor <- readRefMaybe ref
109 warn $ "Value: " <> v
111 , wrapperDiv { className: classes.wrapper }
116 { fontFamily: "PragmataPro"
117 , fontLigatures: true
122 , lineDecorationsWidth: 0
123 , lineNumbersMinChars: 0
124 , minimap: { enabled: false }
126 , language: "purescript"
127 -- https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-custom-languages
129 mkEffectFn2 \_ -> notNull >>> writeRef ref
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list