{"version":3,"sources":["../src/index.ts","../src/extensions/index.ts","../src/extensions/baseTheme.ts","../src/events.ts"],"sourcesContent":["import { Extension } from '@codemirror/state'\nimport { EditorView, EditorViewConfig } from '@codemirror/view'\nimport extensions from \"./extensions\"\nimport { eventsToExtensions } from \"./events\"\n\nexport const basicSetup: Extension[] = [\n  ...extensions,\n  ...eventsToExtensions()\n]\n\nexport function createEditor(config: EditorViewConfig = {}) {\n  return new EditorView({\n    ...config,\n    extensions: [\n      ...basicSetup,\n      ...(config.extensions ? [config.extensions] : [])\n    ].flat()\n  })\n}\n","import { EditorState } from '@codemirror/state'\nimport { autocompletion, closeBrackets, closeBracketsKeymap, completionKeymap, completionStatus, acceptCompletion } from '@codemirror/autocomplete'\nimport { defaultKeymap, history, historyKeymap } from '@codemirror/commands'\nimport { bracketMatching } from '@codemirror/language'\nimport { lintKeymap } from '@codemirror/lint'\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search'\nimport { drawSelection, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, keymap, lineNumbers } from '@codemirror/view'\nimport { ChordPro } from '@chordbook/codemirror-lang-chordpro'\nimport { oneDark } from '@codemirror/theme-one-dark'\nimport baseTheme from './baseTheme'\n\nexport default [\n  baseTheme,\n  oneDark,\n  ChordPro(),\n  lineNumbers(),\n  highlightActiveLineGutter(),\n  highlightSpecialChars(),\n  history(),\n  drawSelection(),\n  autocompletion(),\n  EditorState.allowMultipleSelections.of(true),\n  bracketMatching(),\n  closeBrackets(),\n  highlightActiveLine(),\n  highlightSelectionMatches(),\n  keymap.of([\n    ...closeBracketsKeymap,\n    ...defaultKeymap,\n    ...searchKeymap,\n    ...historyKeymap,\n    ...completionKeymap,\n    ...lintKeymap,\n    // Accept completion on Tab\n    {\n      key: 'Tab',\n      preventDefault: true,\n      run: e => {\n        if (completionStatus(e.state)) return acceptCompletion(e);\n        return false\n      },\n    }\n  ])\n]\n","import { EditorView } from \"@codemirror/view\"\n\nexport default EditorView.baseTheme({\n  \"&\": {\n    minHeight: '100%'\n  },\n  \".cm-editor\": {\n    minHeight: '100%'\n  },\n  \".cm-scroller\": {\n    flex: '1'\n  }\n})\n","import { EditorView, ViewUpdate } from \"@codemirror/view\"\nimport { Extension } from \"@codemirror/state\"\n\nexport interface EventConfig {\n  changeInterval?: number\n}\n\nfunction dispatch(viewUpdate: ViewUpdate, type: string, detail: any = {}) {\n  const event = new CustomEvent(type, { bubbles: true, detail: { viewUpdate, ...detail } })\n  viewUpdate.view.dom.dispatchEvent(event)\n}\n\nconst onChange = (viewUpdate: ViewUpdate): void => {\n  dispatch(viewUpdate, 'change', { doc: viewUpdate.state.doc.toString() })\n}\nconst onFocus = (viewUpdate: ViewUpdate): void => { dispatch(viewUpdate, 'focus') }\nconst onBlur = (viewUpdate: ViewUpdate): void => { dispatch(viewUpdate, 'blur') }\n\nexport function eventsToExtensions ({ changeInterval = 300 }: EventConfig = {}): Extension[]  {\n  const debouncedChange = debounce(onChange, changeInterval)\n  return [\n    // https://discuss.codemirror.net/t/codemirror-6-proper-way-to-listen-for-changes/2395/11\n    EditorView.updateListener.of(v => {\n      if (v.docChanged) debouncedChange(v)\n      if (v.focusChanged) v.view.hasFocus ? onFocus(v) : onBlur(v)\n    })\n  ]\n}\n\nexport function debounce<T extends Function>(callback: T, wait = 300) {\n  let timeout = 0;\n  let callable = (...args: any) => {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => callback(...args), wait);\n  };\n  return <T>(<any>callable);\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,iBAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAA6C,4BCD7C,IAAAC,EAA4B,6BAC5BC,EAAyH,oCACzHC,EAAsD,gCACtDC,EAAgC,gCAChCC,EAA2B,4BAC3BC,EAAwD,8BACxDC,EAA0H,4BAC1HC,EAAyB,+CACzBC,EAAwB,sCCRxB,IAAAC,EAA2B,4BAEpBC,EAAQ,aAAW,UAAU,CAClC,IAAK,CACH,UAAW,MACb,EACA,aAAc,CACZ,UAAW,MACb,EACA,eAAgB,CACd,KAAM,GACR,CACF,CAAC,EDDD,IAAOC,EAAQ,CACbC,EACA,aACA,YAAS,KACT,eAAY,KACZ,6BAA0B,KAC1B,yBAAsB,KACtB,WAAQ,KACR,iBAAc,KACd,kBAAe,EACf,cAAY,wBAAwB,GAAG,EAAI,KAC3C,mBAAgB,KAChB,iBAAc,KACd,uBAAoB,KACpB,6BAA0B,EAC1B,SAAO,GAAG,CACR,GAAG,sBACH,GAAG,gBACH,GAAG,eACH,GAAG,gBACH,GAAG,mBACH,GAAG,aAEH,CACE,IAAK,MACL,eAAgB,GAChB,IAAK,MACC,oBAAiB,EAAE,KAAK,KAAU,oBAAiB,CAAC,EACjD,EAEX,CACF,CAAC,CACH,EE3CA,IAAAC,EAAuC,4BAOvC,SAASC,EAASC,EAAwBC,EAAcC,EAAc,CAAC,EAAG,CACxE,IAAMC,EAAQ,IAAI,YAAYF,EAAM,CAAE,QAAS,GAAM,OAAQ,CAAE,WAAAD,EAAY,GAAGE,CAAO,CAAE,CAAC,EACxFF,EAAW,KAAK,IAAI,cAAcG,CAAK,CACzC,CAEA,IAAMC,EAAYJ,GAAiC,CACjDD,EAASC,EAAY,SAAU,CAAE,IAAKA,EAAW,MAAM,IAAI,SAAS,CAAE,CAAC,CACzE,EACMK,EAAWL,GAAiC,CAAED,EAASC,EAAY,OAAO,CAAE,EAC5EM,EAAUN,GAAiC,CAAED,EAASC,EAAY,MAAM,CAAE,EAEzE,SAASO,EAAoB,CAAE,eAAAC,EAAiB,GAAI,EAAiB,CAAC,EAAiB,CAC5F,IAAMC,EAAkBC,EAASN,EAAUI,CAAc,EACzD,MAAO,CAEL,aAAW,eAAe,GAAGG,GAAK,CAC5BA,EAAE,YAAYF,EAAgBE,CAAC,EAC/BA,EAAE,eAAcA,EAAE,KAAK,SAAWN,EAAQM,CAAC,EAAIL,EAAOK,CAAC,EAC7D,CAAC,CACH,CACF,CAEO,SAASD,EAA6BE,EAAaC,EAAO,IAAK,CACpE,IAAIC,EAAU,EAKd,MAJe,IAAIC,IAAc,CAC/B,aAAaD,CAAO,EACpBA,EAAU,WAAW,IAAMF,EAAS,GAAGG,CAAI,EAAGF,CAAI,CACpD,CAEF,CH/BO,IAAMG,EAA0B,CACrC,GAAGC,EACH,GAAGC,EAAmB,CACxB,EAEO,SAASC,EAAaC,EAA2B,CAAC,EAAG,CAC1D,OAAO,IAAI,aAAW,CACpB,GAAGA,EACH,WAAY,CACV,GAAGJ,EACH,GAAII,EAAO,WAAa,CAACA,EAAO,UAAU,EAAI,CAAC,CACjD,EAAE,KAAK,CACT,CAAC,CACH","names":["src_exports","__export","basicSetup","createEditor","__toCommonJS","import_view","import_state","import_autocomplete","import_commands","import_language","import_lint","import_search","import_view","import_codemirror_lang_chordpro","import_theme_one_dark","import_view","baseTheme_default","extensions_default","baseTheme_default","import_view","dispatch","viewUpdate","type","detail","event","onChange","onFocus","onBlur","eventsToExtensions","changeInterval","debouncedChange","debounce","v","callback","wait","timeout","args","basicSetup","extensions_default","eventsToExtensions","createEditor","config"]}