@krainovsd/markdown-editor 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/lib/cjs/index-CDtGUxs-.js +52 -0
  2. package/lib/cjs/index-CDtGUxs-.js.map +1 -0
  3. package/lib/cjs/{index-DPZa3gzd.js → index-CiorogHq.js} +973 -368
  4. package/lib/cjs/index-CiorogHq.js.map +1 -0
  5. package/lib/cjs/index.js +6 -3
  6. package/lib/cjs/index.js.map +1 -1
  7. package/lib/esm/extensions/init-extensions.js +6 -2
  8. package/lib/esm/extensions/init-extensions.js.map +1 -1
  9. package/lib/esm/extensions/listeners/get-focus-event.js +1 -0
  10. package/lib/esm/extensions/listeners/get-focus-event.js.map +1 -1
  11. package/lib/esm/extensions/markdown/blockquote/blockquote-decoration.js +2 -2
  12. package/lib/esm/extensions/markdown/blockquote/blockquote-decoration.js.map +1 -1
  13. package/lib/esm/extensions/markdown/bold/bold-decoration.js +2 -2
  14. package/lib/esm/extensions/markdown/bold/bold-decoration.js.map +1 -1
  15. package/lib/esm/extensions/markdown/code/code-decoration.js +2 -2
  16. package/lib/esm/extensions/markdown/code/code-decoration.js.map +1 -1
  17. package/lib/esm/extensions/markdown/header/header-decoration.js +3 -3
  18. package/lib/esm/extensions/markdown/header/header-decoration.js.map +1 -1
  19. package/lib/esm/extensions/markdown/horizontal/horizontal-decoration.js +2 -2
  20. package/lib/esm/extensions/markdown/horizontal/horizontal-decoration.js.map +1 -1
  21. package/lib/esm/extensions/markdown/image/image-decoration.js +33 -26
  22. package/lib/esm/extensions/markdown/image/image-decoration.js.map +1 -1
  23. package/lib/esm/extensions/markdown/image/image-widget.js +76 -70
  24. package/lib/esm/extensions/markdown/image/image-widget.js.map +1 -1
  25. package/lib/esm/extensions/markdown/init-markdown.js +5 -2
  26. package/lib/esm/extensions/markdown/init-markdown.js.map +1 -1
  27. package/lib/esm/extensions/markdown/italic/italic-decoration.js +7 -7
  28. package/lib/esm/extensions/markdown/italic/italic-decoration.js.map +1 -1
  29. package/lib/esm/extensions/markdown/link/auto-link-decoration.js +24 -4
  30. package/lib/esm/extensions/markdown/link/auto-link-decoration.js.map +1 -1
  31. package/lib/esm/extensions/markdown/link/link-decoration.js +25 -5
  32. package/lib/esm/extensions/markdown/link/link-decoration.js.map +1 -1
  33. package/lib/esm/extensions/markdown/link/link-label-decoration.js +3 -2
  34. package/lib/esm/extensions/markdown/link/link-label-decoration.js.map +1 -1
  35. package/lib/esm/extensions/markdown/link/link-widget.js +137 -112
  36. package/lib/esm/extensions/markdown/link/link-widget.js.map +1 -1
  37. package/lib/esm/extensions/markdown/list/list-decoration.js +3 -3
  38. package/lib/esm/extensions/markdown/list/list-decoration.js.map +1 -1
  39. package/lib/esm/extensions/markdown/markdown-decoration.js +89 -44
  40. package/lib/esm/extensions/markdown/markdown-decoration.js.map +1 -1
  41. package/lib/esm/extensions/markdown/markdown-state.js +29 -0
  42. package/lib/esm/extensions/markdown/markdown-state.js.map +1 -0
  43. package/lib/esm/extensions/markdown/mention/mention-decoration.js +2 -2
  44. package/lib/esm/extensions/markdown/mention/mention-decoration.js.map +1 -1
  45. package/lib/esm/extensions/markdown/strike-through/strike-through-decoration.js +2 -2
  46. package/lib/esm/extensions/markdown/strike-through/strike-through-decoration.js.map +1 -1
  47. package/lib/esm/extensions/markdown/todo/todo-decoration.js +3 -3
  48. package/lib/esm/extensions/markdown/todo/todo-decoration.js.map +1 -1
  49. package/lib/esm/extensions/markdown/todo/todo-widget.js +1 -0
  50. package/lib/esm/extensions/markdown/todo/todo-widget.js.map +1 -1
  51. package/lib/esm/extensions/settings/init-settings.js +1 -0
  52. package/lib/esm/extensions/settings/init-settings.js.map +1 -1
  53. package/lib/esm/index.js +9 -0
  54. package/lib/esm/index.js.map +1 -1
  55. package/lib/esm/lib/utils/get-decoration.js +2 -1
  56. package/lib/esm/lib/utils/get-decoration.js.map +1 -1
  57. package/lib/esm/module/Editor/Editor.js +4 -0
  58. package/lib/esm/module/Editor/Editor.js.map +1 -1
  59. package/lib/esm/module/Editor/lib/init-editor.js +1 -0
  60. package/lib/esm/module/Editor/lib/init-editor.js.map +1 -1
  61. package/lib/index.d.ts +2 -1
  62. package/package.json +1 -1
  63. package/lib/cjs/index-Czx0hvPo.js +0 -528
  64. package/lib/cjs/index-Czx0hvPo.js.map +0 -1
  65. package/lib/cjs/index-DPZa3gzd.js.map +0 -1
  66. package/lib/esm/lib/utils/tick.js +0 -22
  67. package/lib/esm/lib/utils/tick.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CiorogHq.js","sources":["../../src/extensions/compartments/index.ts","../../src/lib/utils/copy-to-clipboard.ts","../../src/lib/utils/get-decoration.ts","../../src/lib/utils/is-range-overlap.ts","../../src/lib/utils/is-in-range.ts","../../src/lib/utils/save-dispatch.ts","../../src/extensions/theme/themes/get-highlight-template.ts","../../src/extensions/theme/theme-constants.ts","../../src/extensions/theme/themes/get-theme-template.ts","../../src/extensions/theme/themes/get-dark-theme.ts","../../src/extensions/theme/themes/get-light-theme.ts","../../src/extensions/theme/init-theme.ts","../../src/extensions/keymaps/init-key-map.ts","../../src/extensions/listeners/get-change-event.ts","../../src/extensions/listeners/get-focus-event.ts","../../src/extensions/listeners/init-listeners.ts","../../../../node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js","../../src/extensions/markdown/blockquote/blockquote-constants.ts","../../src/extensions/markdown/blockquote/blockquote-widget.ts","../../src/extensions/markdown/blockquote/blockquote-decoration.ts","../../src/extensions/markdown/bold/bold-constants.ts","../../src/extensions/markdown/bold/bold-decoration.ts","../../src/extensions/markdown/code/code-constants.ts","../../src/extensions/markdown/code/code-widget.ts","../../src/extensions/markdown/code/code-decoration.ts","../../src/extensions/markdown/header/header-constants.ts","../../src/extensions/markdown/header/header-decoration.ts","../../src/extensions/markdown/horizontal/horizontal-constants.ts","../../src/extensions/markdown/horizontal/horizontal-decoration.ts","../../src/extensions/markdown/markdown-state.ts","../../src/extensions/markdown/image/image-constants.ts","../../src/extensions/markdown/image/image-widget.ts","../../src/extensions/markdown/image/image-decoration.ts","../../src/extensions/markdown/italic/italic-constants.ts","../../src/extensions/markdown/italic/italic-decoration.ts","../../src/extensions/markdown/link/link-constants.ts","../../src/extensions/markdown/link/link-label-decoration.ts","../../src/extensions/markdown/link/link-widget.ts","../../src/extensions/markdown/link/link-decoration.ts","../../src/extensions/markdown/link/auto-link-decoration.ts","../../src/extensions/markdown/list/list-constants.ts","../../src/extensions/markdown/list/list-widget.ts","../../src/extensions/markdown/list/list-decoration.ts","../../src/extensions/markdown/mention/mention-constants.ts","../../src/extensions/markdown/mention/mention-decoration.ts","../../src/extensions/markdown/strike-through/strike-through-constants.ts","../../src/extensions/markdown/strike-through/strike-through-decoration.ts","../../src/extensions/markdown/todo/todo-constants.ts","../../src/extensions/markdown/todo/todo-widget.ts","../../src/extensions/markdown/todo/todo-decoration.ts","../../src/extensions/markdown/markdown-decoration.ts","../../src/extensions/settings/init-settings.ts","../../src/extensions/init-extensions.ts","../../src/module/Editor/lib/init-editor-provider.ts","../../src/module/Editor/lib/init-editor-state.ts","../../src/module/Editor/lib/init-editor.ts","../../src/module/Editor/Editor.ts"],"sourcesContent":["import { Compartment } from \"@codemirror/state\";\n\nexport const ReadonlyCompartment = new Compartment();\n\nexport const VimModeCompartment = new Compartment();\n\nexport const ThemeCompartment = new Compartment();\n","export function copyToClipboard(content: string): Promise<void> {\n if (navigator.clipboard && window.isSecureContext) {\n return navigator.clipboard.writeText(content);\n }\n\n return fallbackCopyTextToClipboard(content);\n}\n\nfunction fallbackCopyTextToClipboard(content: string) {\n const textArea = document.createElement(\"textarea\");\n textArea.value = content;\n\n textArea.style.top = \"0\";\n textArea.style.left = \"0\";\n textArea.style.opacity = \"0\";\n textArea.style.position = \"fixed\";\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n return new Promise<void>((resolve, reject) => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n if (document.execCommand(\"copy\")) resolve();\n else reject();\n } catch {\n reject();\n } finally {\n document.body.removeChild(textArea);\n }\n });\n}\n","import { Decoration, type WidgetType } from \"@codemirror/view\";\n\ntype GetLineDecorationOptions = {\n style: string;\n range: [number, number?];\n};\nexport function getLineDecoration({ style, range }: GetLineDecorationOptions) {\n return Decoration.line({\n class: style,\n }).range(range[0], range[1]);\n}\n\ntype GetMarkDecorationOptions = {\n style?: string;\n attributes?: Record<string, string>;\n range: [number, number];\n};\nexport function getMarkDecoration({ range, style, attributes }: GetMarkDecorationOptions) {\n return Decoration.mark({\n class: style,\n attributes,\n }).range(range[0], range[1]);\n}\n\ntype GetHideDecorationOptions = {\n range: [number, number];\n};\nexport function getHideDecoration({ range }: GetHideDecorationOptions) {\n return Decoration.replace({}).range(range[0], range[1]);\n}\n\ntype GetReplaceDecorationOptions = {\n range: [number, number?];\n widget: WidgetType;\n};\nexport function getReplaceDecoration({ range, widget }: GetReplaceDecorationOptions) {\n return Decoration.replace({ widget }).range(range[0], range[1]);\n}\n\ntype GetWidgetDecorationOptions = {\n widget: WidgetType;\n range: [number, number?];\n};\nexport function getWidgetDecorationOptions({ widget, range }: GetWidgetDecorationOptions) {\n return Decoration.widget({ widget, side: 1 }).range(range[0], range[1]);\n}\n","export function isRangeOverlap(range: [number, number], text: [number, number]) {\n return range[0] <= text[1] && text[0] <= range[1];\n}\n","import type { SelectionRange } from \"@codemirror/state\";\nimport { isRangeOverlap } from \"./is-range-overlap\";\n\nexport function isInRange(ranges: readonly SelectionRange[], text: [number, number]) {\n return ranges.some((range) => isRangeOverlap([range.from, range.to], text));\n}\n","export function saveDispatch(dispatch: () => void) {\n queueMicrotask(() => {\n dispatch();\n });\n}\n","import { HighlightStyle, syntaxHighlighting } from \"@codemirror/language\";\nimport { tags as t } from \"@lezer/highlight\";\nimport type { HighlightConfig } from \"../theme-types\";\n\n/**\n * t.processingInstruction, t.meta - # () []\n * t.url, t.link - links\n */\n\nexport function getHighlightTemplate(config: Required<HighlightConfig>) {\n return syntaxHighlighting(\n HighlightStyle.define([\n { tag: t.keyword, color: config.keyword },\n { tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable },\n { tag: [t.propertyName], color: config.function },\n {\n tag: [t.string, t.inserted, t.special(t.string)],\n color: config.string,\n },\n { tag: [t.function(t.variableName), t.labelName], color: config.function },\n { tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant },\n { tag: [t.definition(t.name), t.separator], color: config.variable },\n { tag: [t.className], color: config.class },\n {\n tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace],\n color: config.number,\n },\n { tag: [t.typeName], color: config.type, fontStyle: config.type },\n { tag: [t.operator, t.operatorKeyword], color: config.keyword },\n { tag: [t.escape, t.regexp], color: config.regexp },\n { tag: [t.comment], color: config.comment },\n { tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable },\n { tag: t.invalid, color: config.invalid },\n ]),\n );\n}\n","export const CLASSES = {\n listCommon: \"cm-list-common\",\n code: \"cm-code\",\n codeButton: \"cm-code-button\",\n codeButtonSuccess: \"cm-code-button-success\",\n codeButtonFail: \"cm-code-button-fail\",\n codeButtonPending: \"cm-code-button-pending\",\n codeButtonSpan: \"cm-code-span\",\n horizontal: \"cm-horizontal\",\n blockquote: \"cm-blockquote\",\n blockquoteInner: \"cm-blockquote-inner\",\n link: \"cm-link\",\n mention: \"cm-mention\",\n};\n","import { EditorView } from \"@codemirror/view\";\nimport { CLASSES } from \"../theme-constants\";\nimport type { ThemeConfig } from \"../theme-types\";\n\nexport function getThemeTemplate(dark: boolean, config: Required<ThemeConfig>) {\n return EditorView.theme(\n {\n \"&\": {\n color: config.color,\n backgroundColor: config.background,\n },\n \".cm-content\": {\n fontFamily: config.fontFamily || \"Montserrat\",\n },\n \"&.cm-focused > .cm-scroller > .cm-selectionLayer > .cm-selectionBackground\": {\n background: config.vimSelectionFocused,\n },\n \"& .cm-selectionBackground\": {\n background: config.vimSelection,\n },\n \"&.cm-editor.cm-focused\": { outline: \"none\" },\n \"&.cm-editor\": {\n height: \"100%\",\n width: \"100%\",\n },\n [`.${CLASSES.listCommon}:after`]: {\n background: config.color,\n },\n [`.${CLASSES.code}`]: {\n background: config.codeBackground,\n color: config.codeColor,\n },\n [`.${CLASSES.horizontal}`]: {\n borderBottomColor: config.horizontalColor,\n },\n [`.${CLASSES.link}`]: {\n color: config.linkColor,\n },\n [`.${CLASSES.blockquote}`]: {\n borderLeftColor: config.blockquoteColor,\n },\n [`.${CLASSES.blockquoteInner}:before`]: {\n borderLeftColor: config.blockquoteColor,\n },\n [`.${CLASSES.codeButton}`]: {\n color: config.codeButtonColor,\n },\n [`.${CLASSES.codeButton}:hover`]: {\n background: config.codeButtonBackground,\n },\n [`.${CLASSES.codeButtonSuccess}:after`]: {\n borderColor: config.codeButtonColor,\n },\n [`.${CLASSES.codeButtonFail}:after`]: {\n background: config.codeButtonColor,\n },\n [`.${CLASSES.codeButtonFail}:before`]: {\n background: config.codeButtonColor,\n },\n [`.${CLASSES.codeButtonPending}:before`]: {\n borderColor: config.codeBackground,\n borderTopColor: config.codeButtonColor,\n },\n [`.${CLASSES.mention}`]: {\n color: config.mentionColor,\n },\n },\n { dark },\n );\n}\n","import { type HighlightConfig, type InitThemeOptions, type ThemeConfig } from \"../theme-types\";\nimport { getHighlightTemplate } from \"./get-highlight-template\";\nimport { getThemeTemplate } from \"./get-theme-template\";\n\nconst HIGHLIGHT_CONFIG: Required<HighlightConfig> = {\n keyword: \"#f97583\",\n variable: \"#ffab70\",\n function: \"#79b8ff\",\n string: \"#9ecbff\",\n constant: \"#79b8ff\",\n type: \"#79b8ff\",\n class: \"#b392f0\",\n number: \"#79b8ff\",\n comment: \"#6a737d\",\n heading: \"#79b8ff\",\n invalid: \"#f97583\",\n regexp: \"#9ecbff\",\n};\n\nconst THEME_CONFIG: Required<ThemeConfig> = {\n background: \"#2E3235\",\n blockquoteColor: \"#8A5CF5\", // #6A8695\n codeBackground: \"#24292e\",\n codeButtonBackground: \"#434C54FF\",\n codeButtonColor: \"#DDDDDD\",\n codeColor: \"#DDDDDD\",\n color: \"#DDDDDD\",\n fontFamily: \"Montserrat\",\n horizontalColor: \"#DDDDDD\",\n linkColor: \"#8A5CF5\",\n mentionColor: \"#8A5CF5\",\n vimSelection: \"#1A1919FF\",\n vimSelectionFocused: \"#2E4B4BFF\",\n};\n\nexport function getDarkTheme({ dark }: InitThemeOptions) {\n const highlightConfig = { ...HIGHLIGHT_CONFIG, ...(dark?.highlightConfig || {}) };\n const themeConfig = { ...THEME_CONFIG, ...(dark?.themeConfig || {}) };\n\n return [getThemeTemplate(true, themeConfig), getHighlightTemplate(highlightConfig)];\n}\n","import { type HighlightConfig, type InitThemeOptions, type ThemeConfig } from \"../theme-types\";\nimport { getHighlightTemplate } from \"./get-highlight-template\";\nimport { getThemeTemplate } from \"./get-theme-template\";\n\nconst HIGHLIGHT_CONFIG: Required<HighlightConfig> = {\n keyword: \"#9854f1\",\n variable: \"#3760bf\",\n function: \"#2e7de9\",\n string: \"#587539\",\n constant: \"#9854f1\",\n type: \"#07879d\",\n class: \"#3760bf\",\n number: \"#b15c00\",\n comment: \"#9da3c2\",\n heading: \"#006a83\",\n invalid: \"#ff3e64\",\n regexp: \"#2e5857\",\n};\n\nconst THEME_CONFIG: Required<ThemeConfig> = {\n background: \"transparent\",\n blockquoteColor: \"#8A5CF5\", // #6A8695\n codeBackground: \"#e1e2e7\",\n codeButtonBackground: \"#CCCCCDFF\",\n codeButtonColor: \"#000000\",\n codeColor: \"#000000\",\n color: \"#000000\",\n fontFamily: \"Montserrat\",\n horizontalColor: \"#000000\",\n linkColor: \"#8A5CF5\",\n mentionColor: \"#8A5CF5\",\n vimSelection: \"#d9d9d9\",\n vimSelectionFocused: \"#d7d4f0\",\n};\n\nexport function getLightTheme({ light }: InitThemeOptions) {\n const highlightConfig = { ...HIGHLIGHT_CONFIG, ...(light?.highlightConfig || {}) };\n const themeConfig = { ...THEME_CONFIG, ...(light?.themeConfig || {}) };\n\n return [getThemeTemplate(false, themeConfig), getHighlightTemplate(highlightConfig)];\n}\n","import type { Extension } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { ThemeCompartment } from \"../compartments\";\nimport type { InitThemeOptions } from \"./theme-types\";\nimport { getDarkTheme, getLightTheme } from \"./themes\";\n\nexport const initTheme = (options: InitThemeOptions): Extension => {\n const extensions: Extension[] = [\n EditorView.lineWrapping,\n ThemeCompartment.of(options.theme === \"dark\" ? getDarkTheme(options) : getLightTheme(options)),\n ];\n\n return extensions;\n};\n","import { historyKeymap, indentWithTab, standardKeymap } from \"@codemirror/commands\";\nimport type { Extension } from \"@codemirror/state\";\nimport { type EditorView, type KeyBinding, drawSelection, keymap } from \"@codemirror/view\";\nimport { saveDispatch } from \"@/lib/utils\";\nimport { ThemeCompartment, VimModeCompartment } from \"../compartments\";\nimport { type EditorTheme, type ThemeOptions, getDarkTheme, getLightTheme } from \"../theme\";\n\nexport type InitKeyMapsOptions = {\n onEnter?: HandleEnterKeyMapEditorFunction;\n onEscape?: HandleEscapeKeyMapEditorFunction;\n keyMaps?: CustomKeyMap[];\n defaultKeyMaps?: DefaultKeyMapsOptions;\n};\n\nexport type CustomKeyMap = KeyBinding;\nexport type HandleEnterKeyMapEditorFunction = (view: EditorView) => boolean;\nexport type HandleEscapeKeyMapEditorFunction = (view: EditorView) => boolean;\nexport type DefaultKeyMapsOptions = {\n vim?: boolean;\n theme?: boolean;\n};\n\nlet vimMode = false;\nlet theme: EditorTheme = \"light\";\n\nexport const initKeyMaps = async ({\n onEnter,\n onEscape,\n multiCursorMode,\n keyMaps,\n defaultKeyMaps,\n theme: initialTheme,\n vimMode: initialVimMode,\n dark,\n light,\n}: InitKeyMapsOptions & {\n multiCursorMode: boolean;\n vimMode: boolean;\n theme: EditorTheme;\n dark?: ThemeOptions;\n light?: ThemeOptions;\n}): Promise<Extension> => {\n vimMode = initialVimMode;\n theme = initialTheme;\n\n /** tab */\n const keyBindings: CustomKeyMap[] = [indentWithTab];\n\n /** standard */\n keyBindings.push(\n ...standardKeymap.map<CustomKeyMap>((keyMap) => {\n if (keyMap.key === \"Enter\" && onEnter) {\n return {\n key: \"Enter\",\n shift: keyMap.run,\n run: (view) => {\n const response = onEnter(view);\n\n if (response) keyMap.run?.(view);\n\n return response;\n },\n };\n }\n\n return keyMap;\n }),\n );\n\n /** vim */\n if (defaultKeyMaps?.vim)\n keyBindings.push({\n key: \"Mod-Alt-v\",\n run: (view) => {\n vimMode = !vimMode;\n\n void import(\"@replit/codemirror-vim\").then(({ vim }) => {\n saveDispatch(() => {\n view.dispatch({\n effects: VimModeCompartment.reconfigure(\n vimMode ? [vim({ status: true }), drawSelection()] : [],\n ),\n });\n });\n });\n\n return true;\n },\n });\n\n /** theme */\n if (defaultKeyMaps?.theme)\n keyBindings.push({\n key: \"Mod-Alt-a\",\n run: (view) => {\n theme = theme === \"light\" ? \"dark\" : \"light\";\n saveDispatch(() => {\n view.dispatch({\n effects: ThemeCompartment.reconfigure(\n theme === \"dark\"\n ? getDarkTheme({\n dark,\n light,\n theme,\n })\n : getLightTheme({\n dark,\n light,\n theme,\n }),\n ),\n });\n });\n\n return true;\n },\n });\n\n /** escape */\n if (onEscape) {\n keyBindings.push({\n key: \"Escape\",\n run: (view) => {\n return onEscape(view);\n },\n });\n }\n\n /** custom */\n if (keyMaps) {\n keyBindings.push(...keyMaps);\n }\n\n /** history */\n if (multiCursorMode) {\n const { yUndoManagerKeymap } = await import(\"y-codemirror.next\");\n keyBindings.push(...yUndoManagerKeymap);\n } else {\n keyBindings.push(...historyKeymap);\n }\n\n return keymap.of(keyBindings);\n};\n","import { EditorView, type ViewUpdate } from \"@codemirror/view\";\n\nexport type GetChangeEventOptions = {\n onChange?: HandleChangeEditorFunction;\n};\n\nexport type HandleChangeEditorFunction = (view: ViewUpdate) => void;\n\nexport function getChangeEvent({ onChange }: GetChangeEventOptions) {\n return onChange\n ? EditorView.updateListener.of((e) => {\n if (e.docChanged) {\n onChange(e);\n }\n })\n : [];\n}\n","import { type EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\n\nexport type GetFocusEventOptions = {\n onFocus?: HandleFocusEditorFunction;\n onBlur?: HandleBlurEditorFunction;\n};\n\nexport type HandleFocusEditorFunction = (state: EditorState) => void;\nexport type HandleBlurEditorFunction = (state: EditorState) => void;\n\nexport function getFocusEvent({ onBlur, onFocus }: GetFocusEventOptions) {\n return onFocus || onBlur\n ? EditorView.focusChangeEffect.of((e, focus) => {\n if (focus && onFocus) onFocus(e);\n else if (!focus && onBlur) onBlur(e);\n\n return null;\n })\n : [];\n}\n","import { type GetChangeEventOptions, getChangeEvent } from \"./get-change-event\";\nimport { type GetFocusEventOptions, getFocusEvent } from \"./get-focus-event\";\n\nexport type InitListenersOptions = GetFocusEventOptions & GetChangeEventOptions;\n\nexport function initListeners({ onBlur, onChange, onFocus }: InitListenersOptions) {\n return [getChangeEvent({ onChange }), getFocusEvent({ onBlur, onFocus })];\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","export const NAME_OF_BLOCKQUOTE_MARK = \"QuoteMark\";\nexport const CODE_OF_SPACE = 32;\nexport const CODE_OF_BLOCKQUOTE_MARK = 62; // >\n","import { WidgetType } from \"@codemirror/view\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport styles from \"../styles.module.scss\";\n\nexport class BlockquoteWidget extends WidgetType {\n constructor(private readonly deep: boolean) {\n super();\n }\n\n toDOM(): HTMLElement {\n const span = document.createElement(\"span\");\n span.classList.add(styles.blockquote__inner);\n if (this.deep) span.classList.add(styles[\"blockquote__inner-deep\"]);\n span.classList.add(CLASSES.blockquoteInner);\n\n return span;\n }\n}\n","import clsx from \"clsx\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport {\n CODE_OF_BLOCKQUOTE_MARK,\n CODE_OF_SPACE,\n NAME_OF_BLOCKQUOTE_MARK,\n} from \"./blockquote-constants\";\nimport { BlockquoteWidget } from \"./blockquote-widget\";\n\nfunction getBlockquoteDecorations({ decorations, node, view }: GetDecorationOptions) {\n if (node.name !== NAME_OF_BLOCKQUOTE_MARK) {\n return;\n }\n\n const line = view.lineBlockAt(node.from);\n let isInner = false;\n\n if (line.from !== node.from) {\n const content = view.state.doc.sliceString(line.from, node.to);\n let pos = content.length - 1;\n let isHasMark = false;\n\n while (pos >= 0) {\n pos--;\n const currentCode = content.charCodeAt(pos);\n if (currentCode === CODE_OF_SPACE) continue;\n if (currentCode === CODE_OF_BLOCKQUOTE_MARK) {\n if (!isHasMark) {\n isHasMark = true;\n continue;\n }\n if (!isInner) {\n isInner = true;\n break;\n }\n }\n pos = -1;\n }\n }\n\n if (!isInner) {\n decorations.push(\n utils.getLineDecoration({\n style: clsx(styles.blockquote, CLASSES.blockquote),\n range: [line.from],\n }),\n );\n }\n}\n\nfunction getBlockquoteSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_BLOCKQUOTE_MARK) {\n return;\n }\n\n const line = view.lineBlockAt(node.from);\n let isInner = false;\n let isDeepInner = false;\n\n if (line.from !== node.from) {\n const content = view.state.doc.sliceString(line.from, node.to);\n let pos = content.length;\n let isHasMark = false;\n\n while (pos >= 0) {\n pos--;\n const currentCode = content.charCodeAt(pos);\n\n if (currentCode === CODE_OF_SPACE) continue;\n if (currentCode === CODE_OF_BLOCKQUOTE_MARK) {\n if (!isHasMark) {\n isHasMark = true;\n continue;\n }\n if (!isInner) {\n isInner = true;\n continue;\n }\n if (!isDeepInner) {\n isDeepInner = true;\n break;\n }\n }\n pos = -1;\n }\n }\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n ) {\n if (!isInner) decorations.push(utils.getHideDecoration({ range: [node.from, node.to] }));\n else\n decorations.push(\n utils.getReplaceDecoration({\n widget: new BlockquoteWidget(isDeepInner),\n range: [node.from, node.to],\n }),\n );\n }\n}\n\nexport const blockquoteDecorationPlugin: DecorationPlugin = {\n decorations: [getBlockquoteDecorations],\n selectionDecorations: [getBlockquoteSelectionDecorations],\n};\n","export const NAME_OF_BOLD = \"StrongEmphasis\";\nexport const LIST_OF_BOLD_MARKS = new Set([95, 42]); // _ *\n","import { syntaxTree } from \"@codemirror/language\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { LIST_OF_BOLD_MARKS, NAME_OF_BOLD } from \"./bold-constants\";\n\nfunction getBoldDecorations({ decorations, node, view }: GetDecorationOptions) {\n if (node.name !== NAME_OF_BOLD) {\n return;\n }\n\n const step =\n LIST_OF_BOLD_MARKS.has(view.state.doc.sliceString(node.from - 1, node.from).charCodeAt(0)) &&\n syntaxTree(view.state).resolve(node.from - 1).type.name !== \"Emphasis\"\n ? 1\n : 0;\n\n decorations.push(\n utils.getMarkDecoration({\n style: styles.bold,\n range: [node.from - step, node.to + step],\n }),\n );\n}\n\nfunction getBoldSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_BOLD) {\n return;\n }\n\n if (\n LIST_OF_BOLD_MARKS.has(view.state.doc.sliceString(node.from - 1, node.from).charCodeAt(0)) &&\n syntaxTree(view.state).resolve(node.from - 1).type.name !== \"Emphasis\"\n ) {\n return;\n }\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + 2] }));\n decorations.push(utils.getHideDecoration({ range: [node.to - 2, node.to] }));\n }\n}\n\nexport const boldDecorationPlugin: DecorationPlugin = {\n decorations: [getBoldDecorations],\n selectionDecorations: [getBoldSelectionDecorations],\n};\n","export const NAME_OF_FENCED_CODE = \"FencedCode\";\nexport const NAME_OF_INLINE_CODE = \"InlineCode\";\nexport const CODE_OF_CODE_MARK = 96; // `\n","import { type EditorView, WidgetType } from \"@codemirror/view\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport styles from \"../styles.module.scss\";\n\nexport class CodeWidget extends WidgetType {\n view: EditorView | undefined;\n\n timer: NodeJS.Timeout | undefined;\n\n button: HTMLElement | undefined;\n\n span: HTMLElement | undefined;\n\n constructor(\n private readonly language: string,\n private content: string | undefined,\n ) {\n super();\n }\n\n onClick() {\n if (this.content && this.button && this.span) {\n const span = this.span;\n const button = this.button;\n clearTimeout(this.timer);\n button.classList.remove(styles.pending);\n button.classList.remove(CLASSES.codeButtonPending);\n button.classList.remove(styles.success);\n button.classList.remove(CLASSES.codeButtonSuccess);\n button.classList.remove(styles.fail);\n button.classList.remove(CLASSES.codeButtonFail);\n\n button.classList.add(styles.pending);\n button.classList.add(CLASSES.codeButtonPending);\n\n span.classList.add(styles.hide);\n\n void utils\n .copyToClipboard(this.content)\n .then(() => {\n button.classList.remove(styles.pending);\n button.classList.remove(CLASSES.codeButtonPending);\n\n button.classList.add(styles.success);\n button.classList.add(CLASSES.codeButtonSuccess);\n\n this.timer = setTimeout(() => {\n button.classList.remove(styles.success);\n button.classList.remove(CLASSES.codeButtonSuccess);\n span.classList.remove(styles.hide);\n }, 500);\n })\n .catch(() => {\n button.classList.remove(styles.pending);\n button.classList.remove(CLASSES.codeButtonPending);\n button.classList.add(styles.fail);\n button.classList.add(CLASSES.codeButtonFail);\n\n this.timer = setTimeout(() => {\n button.classList.remove(styles.fail);\n button.classList.remove(CLASSES.codeButtonFail);\n\n span.classList.remove(styles.hide);\n }, 500);\n });\n }\n }\n\n toDOM(view: EditorView): HTMLElement {\n this.view = view;\n\n const span = document.createElement(\"span\");\n span.classList.add(styles.code__span);\n span.classList.add(CLASSES.codeButtonSpan);\n\n span.textContent = this.language;\n\n const button = document.createElement(\"button\");\n button.classList.add(styles.code__button);\n button.classList.add(CLASSES.codeButton);\n\n if (this.content) button.addEventListener(\"click\", this.onClick.bind(this));\n button.appendChild(span);\n\n this.button = button;\n this.span = span;\n\n return button;\n }\n\n destroy(dom: HTMLElement): void {\n if (this.content) dom.removeEventListener(\"click\", this.onClick.bind(this));\n }\n}\n","import clsx from \"clsx\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { CODE_OF_CODE_MARK, NAME_OF_FENCED_CODE, NAME_OF_INLINE_CODE } from \"./code-constants\";\nimport { CodeWidget } from \"./code-widget\";\n\nfunction getCodeSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_FENCED_CODE && node.name !== NAME_OF_INLINE_CODE) {\n return;\n }\n\n let isOverlapLine = false;\n const startMarkPosition = { from: -1, to: -1 };\n const endMarkPosition = { from: -1, to: -1 };\n const lines = view.viewportLineBlocks.filter((line) => {\n const isOverlap = utils.isRangeOverlap([node.from, node.to], [line.from, line.to]);\n if (isOverlap && utils.isInRange(view.state.selection.ranges, [line.from, line.to]))\n isOverlapLine = true;\n\n return isOverlap;\n });\n let languagePos: [number, number] | undefined;\n let language: string | undefined;\n let codeContent: string | undefined;\n\n const content = view.state.doc.sliceString(node.from, node.to);\n let pos = -1;\n while (\n (startMarkPosition.from === -1 || startMarkPosition.to === -1) &&\n pos >= -1 &&\n pos < content.length\n ) {\n pos++;\n const code = content.charCodeAt(pos);\n\n if (code !== CODE_OF_CODE_MARK && startMarkPosition.from === -1) continue;\n else if (code === CODE_OF_CODE_MARK && startMarkPosition.from === -1)\n startMarkPosition.from = node.from + pos;\n else if (code !== CODE_OF_CODE_MARK && startMarkPosition.from !== -1)\n startMarkPosition.to = node.from + pos;\n }\n\n pos = content.length;\n\n while (\n (endMarkPosition.from === -1 || endMarkPosition.to === -1) &&\n pos >= -1 &&\n pos <= content.length\n ) {\n pos--;\n const code = content.charCodeAt(pos);\n\n if (code !== CODE_OF_CODE_MARK && endMarkPosition.to === -1) continue;\n else if (code === CODE_OF_CODE_MARK && endMarkPosition.to === -1)\n endMarkPosition.to = node.from + pos + 1;\n else if (code !== CODE_OF_CODE_MARK && endMarkPosition.to !== -1)\n endMarkPosition.from = node.from + pos + 1;\n }\n\n if (node.name === NAME_OF_FENCED_CODE) {\n const codeInfo = node.node.getChild(\"CodeInfo\");\n const codeText = node.node.getChild(\"CodeText\");\n\n if (codeInfo) {\n language = view.state.doc.sliceString(codeInfo.from, codeInfo.to);\n languagePos = [codeInfo.from, codeInfo.to];\n }\n if (codeText) codeContent = view.state.doc.sliceString(codeText.from, codeText.to);\n else codeContent = \"\";\n }\n if (node.name === NAME_OF_INLINE_CODE) {\n codeContent = view.state.doc.sliceString(startMarkPosition.to, endMarkPosition.from).trim();\n }\n if (!language) language = \"copy\";\n\n if (lines.length > 1) {\n lines.forEach((line) => {\n decorations.push(\n utils.getLineDecoration({\n style: clsx(styles.code__line, CLASSES.code),\n range: [line.from],\n }),\n );\n });\n } else {\n decorations.push(\n utils.getMarkDecoration({\n style: clsx(styles.code__single, CLASSES.code),\n range: [node.from, node.to],\n }),\n );\n }\n\n if (\n forceActive ||\n !view.hasFocus ||\n (lines.length > 1 && !isOverlapLine) ||\n (lines.length === 1 && !utils.isInRange(view.state.selection.ranges, [node.from, node.to]))\n ) {\n if (lines.length > 1 && language) {\n if (languagePos) decorations.push(utils.getHideDecoration({ range: languagePos }));\n decorations.push(\n utils.getWidgetDecorationOptions({\n widget: new CodeWidget(language, codeContent),\n range: [node.from],\n }),\n );\n }\n decorations.push(\n utils.getHideDecoration({ range: [startMarkPosition.from, startMarkPosition.to] }),\n );\n decorations.push(\n utils.getHideDecoration({ range: [endMarkPosition.from, endMarkPosition.to] }),\n );\n }\n}\n\nexport const codeDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getCodeSelectionDecorations],\n};\n","export const NAME_OF_HEADER = \"ATXHeading\";\nexport const NAME_OF_HEADER_UNDER = \"SetextHeading\";\nexport const NAME_OF_HEADER_MARK = \"HeaderMark\";\n","import clsx from \"clsx\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { NAME_OF_HEADER, NAME_OF_HEADER_MARK, NAME_OF_HEADER_UNDER } from \"./header-constants\";\n\nfunction getHeaderDecorations({ decorations, node, view }: GetDecorationOptions) {\n const isHeader = node.name.startsWith(NAME_OF_HEADER);\n const isHeaderUnder = node.name.startsWith(NAME_OF_HEADER_UNDER);\n\n if (!isHeader && !isHeaderUnder) {\n return;\n }\n\n let level: string | undefined;\n\n if (isHeader) {\n level = node.name.replace(NAME_OF_HEADER, \"\");\n\n if (view.state.doc.sliceString(node.from + +level).charCodeAt(0) !== 32) return;\n } else {\n level = node.name.replace(NAME_OF_HEADER_UNDER, \"\");\n }\n\n if (!level) return;\n\n decorations.push(\n utils.getLineDecoration({\n style: clsx(styles.header, styles[`level_${level}`]),\n range: [view.lineBlockAt(node.from).from],\n }),\n );\n}\n\nfunction getHeaderSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n const isHeader = node.name.startsWith(NAME_OF_HEADER);\n const isHeaderUnder = node.name.startsWith(NAME_OF_HEADER_UNDER);\n\n if (!isHeader && !isHeaderUnder) {\n return;\n }\n\n const mark = node.node.getChild(NAME_OF_HEADER_MARK);\n if (!mark) return;\n\n if (isHeader) {\n const line = view.lineBlockAt(mark.from);\n if (line.length < mark.to - mark.from + 1) return;\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [mark.from, mark.to + 1] }));\n }\n } else {\n const lineHeader = view.lineBlockAt(node.from);\n const lineMark = view.lineBlockAt(mark.from);\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [lineHeader.from, lineMark.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [lineMark.from, lineMark.to] }));\n }\n }\n}\n\nexport const headerDecorationPlugin: DecorationPlugin = {\n decorations: [getHeaderDecorations],\n selectionDecorations: [getHeaderSelectionDecorations],\n};\n","export const NAME_OF_HORIZONTAL = \"HorizontalRule\";\n","import clsx from \"clsx\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { NAME_OF_HORIZONTAL } from \"./horizontal-constants\";\n\nfunction getHorizontalSelectionDecoration({\n decorations,\n forceActive,\n node,\n view,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_HORIZONTAL) return;\n\n const line = view.lineBlockAt(node.from);\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n ) {\n decorations.push(\n utils.getLineDecoration({\n style: clsx(styles.horizontal, CLASSES.horizontal),\n range: [line.from],\n }),\n );\n decorations.push(utils.getHideDecoration({ range: [node.from, node.to] }));\n }\n}\n\nexport const horizontalDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getHorizontalSelectionDecoration],\n};\n","import { StateEffect, StateField } from \"@codemirror/state\";\nimport type { MarkdownState } from \"./markdown-types\";\n\nexport const openedImageEffect = StateEffect.define<string | undefined>();\nexport const openedLinkEffect = StateEffect.define<string | undefined>();\nexport const imageSrcGetterEffect = StateEffect.define<((src: string) => string) | undefined>();\n\nexport const markdownState = StateField.define<MarkdownState>({\n create() {\n return {\n openedImage: undefined,\n imageSrcGetter: undefined,\n openedLink: undefined,\n };\n },\n\n update(value, transaction) {\n const newValue = { ...value };\n\n for (const effect of transaction.effects) {\n if (effect.is(openedImageEffect)) newValue.openedImage = effect.value;\n if (effect.is(imageSrcGetterEffect)) newValue.imageSrcGetter = effect.value;\n if (effect.is(openedLinkEffect)) newValue.openedLink = effect.value;\n }\n\n return newValue;\n },\n});\n","export const NAME_OF_IMAGE = \"Image\";\nexport const CODE_OF_START_IMAGE_TEXT = 91; // [\nexport const CODE_OF_END_IMAGE_TEXT = 93; // ]\nexport const CODE_OF_START_IMAGE_URL = 40; // (\nexport const CODE_OF_END_IMAGE_URL = 41; // )\n","import { type EditorView, WidgetType } from \"@codemirror/view\";\nimport { saveDispatch } from \"@/lib/utils\";\nimport { openedImageEffect } from \"../markdown-state\";\nimport styles from \"../styles.module.scss\";\n\nconst INTERVAL_DELAY = 10000;\nconst IMAGE_NODES: Record<string, ImageElement | undefined> = {};\nconst EXISTING_WIDGETS: Set<string> = new Set();\nlet interval: NodeJS.Timeout | null = null;\n\ninterface ImageElement extends HTMLImageElement {\n clearListeners?: () => void;\n destroy?: () => void;\n}\n\nexport class ImageWidget extends WidgetType {\n constructor(\n private text: string,\n private link: string,\n private from: number,\n private to: number,\n private imageSrcGetter: ((src: string) => string) | undefined,\n private view: EditorView,\n ) {\n super();\n }\n\n get key() {\n return `${this.link}:${this.text}:${this.from}:${this.to}`;\n }\n\n get src() {\n return this.imageSrcGetter ? this.imageSrcGetter(this.link) : this.link;\n }\n\n eq(widget: ImageWidget): boolean {\n const image = IMAGE_NODES[this.key];\n\n if (!image) return false;\n\n delete IMAGE_NODES[this.key];\n EXISTING_WIDGETS.delete(this.key);\n\n if (image.src !== widget.src) image.src = widget.src;\n if (image.alt !== widget.text) image.alt = widget.text;\n\n this.link = widget.link;\n this.text = widget.text;\n this.from = widget.from;\n this.to = widget.to;\n\n this.registerListeners(image);\n IMAGE_NODES[this.key] = image;\n EXISTING_WIDGETS.add(this.key);\n\n return true;\n }\n\n updateDOM(): boolean {\n return true;\n }\n\n toDOM(): HTMLElement {\n EXISTING_WIDGETS.add(this.key);\n\n let image = IMAGE_NODES[this.key];\n if (image) {\n if (image.src !== this.src) {\n image.src = this.src;\n }\n if (image.alt !== this.text) image.alt = this.text;\n\n return image;\n }\n\n image = document.createElement(\"img\");\n image.classList.add(styles.image);\n image.alt = this.text;\n image.src = this.src;\n image.style.maxWidth = \"100%\";\n\n this.registerListeners(image);\n IMAGE_NODES[this.key] = image;\n\n if (!interval) interval = setInterval(garbageCollectorInterval, INTERVAL_DELAY);\n\n return image;\n }\n\n destroy(): void {\n EXISTING_WIDGETS.delete(this.key);\n }\n\n registerListeners(image: ImageElement) {\n image.clearListeners?.();\n const abortController = new AbortController();\n image.addEventListener(\n \"mousedown\",\n (event) => handleClick(this.view, this.text, this.link, this.key, event),\n { signal: abortController.signal },\n );\n image.clearListeners = () => {\n abortController.abort();\n };\n image.destroy = () => {\n image.clearListeners?.();\n image.remove();\n };\n }\n}\n\nfunction garbageCollectorInterval() {\n for (const [key, node] of Object.entries(IMAGE_NODES)) {\n if (EXISTING_WIDGETS.has(key) || !node) continue;\n\n delete IMAGE_NODES[key];\n node.destroy?.();\n }\n\n if (Object.keys(IMAGE_NODES).length === 0 && interval) {\n clearInterval(interval);\n interval = null;\n }\n}\n\n/** recursively find the link text node in line */\nfunction getTextNode(\n text: string,\n link: string,\n key: string,\n line: ChildNode | Node | null | undefined,\n): ChildNode | null {\n if (!line) return null;\n const textNodeContainer = getTextNodeContainer(text, link, key, line);\n if (!textNodeContainer) return null;\n\n for (const node of Array.from(textNodeContainer.childNodes)) {\n if (isCorrectNode(text, link, node)) {\n return node;\n }\n }\n\n return null;\n}\n\nfunction getTextNodeContainer(\n text: string,\n link: string,\n key: string,\n line: ChildNode | Node | null | undefined,\n): HTMLElement | null {\n if (!line) return null;\n\n for (const node of Array.from(line.childNodes)) {\n if (node instanceof HTMLElement && node.getAttribute(\"data-id\") === key) {\n return node;\n }\n\n if (node.nodeType !== 3) {\n const inner = getTextNodeContainer(text, link, key, node);\n if (inner) return inner;\n }\n }\n\n return null;\n}\n\nfunction isCorrectNode(\n text: string,\n link: string,\n node: ChildNode | Node | null | undefined,\n): node is ChildNode | Node {\n if (!node) return false;\n\n const textContent = node?.textContent;\n\n return Boolean(\n node &&\n textContent &&\n node.nodeType === 3 &&\n textContent.includes(link) &&\n textContent.includes(text),\n );\n}\n\ntype SelectLinkOptions = {\n node: ChildNode | Node;\n selection: Selection;\n start?: number;\n link: string;\n};\nfunction selectLink({ link, node, selection, start }: SelectLinkOptions) {\n const startPosition = start ?? (node.textContent?.indexOf?.(link) || 0);\n const endPosition = startPosition + link.length;\n\n const range = document.createRange();\n range.setStart(node, startPosition);\n range.setEnd(node, endPosition);\n selection.removeAllRanges();\n selection.addRange(range);\n}\n\nfunction handleClick(\n view: EditorView | undefined,\n text: string,\n link: string,\n key: string,\n event: MouseEvent,\n) {\n const selection = window.getSelection();\n\n if (event.shiftKey || event.ctrlKey || event.altKey || event.metaKey) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n const target = event.target as HTMLImageElement;\n const parent = target.parentNode;\n let line: HTMLElement | null = parent as HTMLElement | null;\n\n /** recursively find line that contains link */\n while (line && !line.classList.contains(\"cm-line\")) {\n line = line.parentNode as HTMLElement | null;\n }\n\n const editor = Array.from(document.querySelectorAll(\".cm-editor\")).find((element) =>\n element.contains(target),\n );\n\n if (!selection || !editor || !parent) return;\n\n const textNode = getTextNode(text, link, key, line);\n\n if (textNode) {\n return void selectLink({ selection, link, node: textNode });\n }\n\n saveDispatch(() => {\n if (!view) return;\n view.dispatch(view.state.update({ effects: openedImageEffect.of(key) }));\n\n const textNode = getTextNode(text, link, key, line);\n if (textNode) {\n selectLink({ selection, link, node: textNode });\n }\n\n requestAnimationFrame(() => {\n saveDispatch(() => {\n if (view) view.dispatch(view.state.update({ effects: openedImageEffect.of(undefined) }));\n });\n });\n });\n\n return false;\n}\n","import { type EditorView } from \"@codemirror/view\";\nimport type { SyntaxNodeRef } from \"@lezer/common\";\nimport { utils } from \"@/lib\";\nimport { markdownState } from \"../markdown-state\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport {\n CODE_OF_END_IMAGE_TEXT,\n CODE_OF_END_IMAGE_URL,\n CODE_OF_START_IMAGE_TEXT,\n CODE_OF_START_IMAGE_URL,\n NAME_OF_IMAGE,\n} from \"./image-constants\";\nimport { ImageWidget } from \"./image-widget\";\n\nfunction getImageDecorations({ decorations, node, view }: GetDecorationOptions) {\n if (node.name !== NAME_OF_IMAGE) {\n return;\n }\n\n const { text, url } = parseInfo(view, node);\n const imageSrcGetter = view.state.field(markdownState).imageSrcGetter;\n\n decorations.push(\n utils.getWidgetDecorationOptions({\n range: [node.to],\n widget: new ImageWidget(text, url, node.from, node.to, imageSrcGetter, view),\n }),\n );\n}\n\nfunction getImageSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_IMAGE) {\n return;\n }\n\n const { text, url } = parseInfo(view, node);\n const openedImage = view.state.field(markdownState).openedImage;\n const key = `${url}:${text}:${node.from}:${node.to}`;\n const isOpened = openedImage && openedImage === key;\n\n if (isOpened) {\n return void decorations.push(\n utils.getMarkDecoration({\n range: [node.from, node.to],\n attributes: {\n \"data-id\": key,\n },\n }),\n );\n }\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, node.to] }));\n } else {\n decorations.push(\n utils.getMarkDecoration({\n range: [node.from, node.to],\n attributes: {\n \"data-id\": key,\n },\n }),\n );\n }\n}\n\nfunction parseInfo(view: EditorView, node: SyntaxNodeRef) {\n const content = view.state.doc.sliceString(node.from, node.to);\n const textCoordinates = { from: -1, to: -1 };\n const urlCoordinates = { from: -1, to: -1 };\n let pos = -1;\n\n while (pos < content.length) {\n pos++;\n const code = content.charCodeAt(pos);\n\n if (textCoordinates.from === -1 && code === CODE_OF_START_IMAGE_TEXT)\n textCoordinates.from = pos + 1;\n else if (\n urlCoordinates.from === -1 &&\n textCoordinates.to !== -1 &&\n code === CODE_OF_START_IMAGE_URL\n )\n urlCoordinates.from = pos + 1;\n else if (\n textCoordinates.from !== -1 &&\n textCoordinates.to === -1 &&\n code === CODE_OF_END_IMAGE_TEXT\n )\n textCoordinates.to = pos;\n else if (\n urlCoordinates.from !== -1 &&\n urlCoordinates.to === -1 &&\n code === CODE_OF_END_IMAGE_URL\n )\n urlCoordinates.to = pos;\n }\n\n const text = content.substring(textCoordinates.from, textCoordinates.to);\n const url = content.substring(urlCoordinates.from, urlCoordinates.to);\n\n return { text, url };\n}\n\nexport const imageDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getImageSelectionDecorations],\n decorations: [getImageDecorations],\n};\n","export const NAME_OF_ITALIC = \"Emphasis\";\nexport const LIST_OF_ITALIC_MARKS = new Set([95, 42]); // _ *\n","import { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { LIST_OF_ITALIC_MARKS, NAME_OF_ITALIC } from \"./italic-constants\";\n\nfunction getItalicDecorations({ decorations, node }: GetDecorationOptions) {\n if (node.name !== NAME_OF_ITALIC) {\n return;\n }\n\n decorations.push(\n utils.getMarkDecoration({\n style: styles.italic,\n range: [node.from, node.to],\n }),\n );\n}\n\nfunction getItalicSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_ITALIC) {\n return;\n }\n\n if (checkIsSeveralEmphasis({ decorations, node, view, forceActive })) {\n return void splitEmphasis({ decorations, node, view, forceActive });\n }\n\n let step = 1;\n const startText = view.state.doc.sliceString(node.from, node.from + 3);\n if (\n LIST_OF_ITALIC_MARKS.has(startText.charCodeAt(0)) &&\n LIST_OF_ITALIC_MARKS.has(startText.charCodeAt(1)) &&\n LIST_OF_ITALIC_MARKS.has(startText.charCodeAt(2))\n )\n step = 3;\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + step] }));\n decorations.push(utils.getHideDecoration({ range: [node.to - step, node.to] }));\n }\n}\n\n/** Fixed wide italic + italic */\nfunction checkIsSeveralEmphasis({ node, view }: GetSelectionDecorationOptions) {\n let marks = 0;\n let pos = 0;\n\n const text = view.state.doc.sliceString(node.from, node.to);\n\n while (pos <= text.length) {\n if (LIST_OF_ITALIC_MARKS.has(text.charCodeAt(pos))) marks++;\n pos++;\n }\n\n if (marks === 8) return true;\n\n return false;\n}\n\nfunction splitEmphasis({ decorations, node, view, forceActive }: GetSelectionDecorationOptions) {\n const text = view.state.doc.sliceString(node.from, node.to);\n let marks = 0;\n let pos = 0;\n\n while (pos <= text.length && marks < 6) {\n if (LIST_OF_ITALIC_MARKS.has(text.charCodeAt(pos))) marks++;\n pos++;\n }\n\n getItalicSelectionDecorations({\n decorations,\n view,\n node: { ...node, name: node.name, from: node.from, to: node.from + pos },\n forceActive,\n });\n getItalicSelectionDecorations({\n decorations,\n view,\n node: { ...node, name: node.name, from: node.from + pos, to: node.to },\n forceActive,\n });\n}\n\nexport const italicDecorationPlugin: DecorationPlugin = {\n decorations: [getItalicDecorations],\n selectionDecorations: [getItalicSelectionDecorations],\n};\n","export const NAME_OF_LINK = \"Link\";\nexport const CODE_OF_START_LINK_TEXT = 91; // [\nexport const CODE_OF_END_LINK_TEXT = 93; // ]\nexport const CODE_OF_START_LINK_URL = 40; // (\nexport const CODE_OF_END_LINK_URL = 41; // )\n\nexport const NAME_OF_AUTO_LINK = \"Autolink\";\n\nexport const CODE_OF_LINK_LABEL_END = 58; // :\n","import { utils } from \"@/lib\";\nimport { type GetSelectionDecorationOptions } from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { CODE_OF_LINK_LABEL_END } from \"./link-constants\";\n\n// [label]:\n\nexport function getLinkLabelSelectionDecoration({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (view.state.doc.sliceString(node.to, node.to + 1).charCodeAt(0) !== CODE_OF_LINK_LABEL_END)\n return;\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to + 1])\n ) {\n decorations.push(\n utils.getMarkDecoration({\n range: [node.from, node.to + 1],\n style: styles.link__label,\n }),\n );\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + 1] }));\n decorations.push(utils.getHideDecoration({ range: [node.to - 1, node.to + 1] }));\n }\n}\n","import { type EditorView, WidgetType } from \"@codemirror/view\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { saveDispatch } from \"@/lib/utils\";\nimport { openedLinkEffect } from \"../markdown-state\";\nimport styles from \"../styles.module.scss\";\n\nconst LINK_NODES: Record<string, AnchorElement | undefined> = {};\n\ninterface AnchorElement extends HTMLAnchorElement {\n clearListeners?: () => void;\n destroy?: () => void;\n}\nexport class LinkWidget extends WidgetType {\n constructor(\n private text: string,\n private link: string,\n private from: number,\n private to: number,\n private view: EditorView,\n ) {\n super();\n }\n\n get key() {\n return `${this.link}:${this.text}:${this.from}:${this.to}`;\n }\n\n eq(widget: LinkWidget): boolean {\n const anchor = LINK_NODES[this.key];\n if (!anchor) return false;\n delete LINK_NODES[this.key];\n\n if (anchor.href !== widget.link) anchor.href = widget.link;\n if (anchor.textContent !== widget.text) anchor.textContent = widget.text;\n\n this.link = widget.link;\n this.text = widget.text;\n this.from = widget.from;\n this.to = widget.to;\n\n this.registerListeners(anchor);\n LINK_NODES[this.key] = anchor;\n\n return true;\n }\n\n toDOM(): HTMLElement {\n const anchor = document.createElement(\"a\") as AnchorElement;\n anchor.classList.add(styles.link);\n anchor.classList.add(CLASSES.link);\n\n anchor.target = \"_blank\";\n anchor.textContent = this.text;\n anchor.href = this.link;\n\n this.registerListeners(anchor);\n\n LINK_NODES[this.key] = anchor;\n\n return anchor;\n }\n\n destroy(dom: AnchorElement): void {\n delete LINK_NODES[this.key];\n dom.destroy?.();\n }\n\n registerListeners(anchor: AnchorElement) {\n anchor.clearListeners?.();\n const abortController = new AbortController();\n anchor.addEventListener(\n \"mousedown\",\n (event) => handleClick(this.view, this.text, this.link, this.key, event),\n { signal: abortController.signal },\n );\n anchor.addEventListener(\"click\", (e) => e.preventDefault(), { signal: abortController.signal });\n anchor.clearListeners = () => {\n abortController.abort();\n };\n anchor.destroy = () => {\n anchor.clearListeners?.();\n anchor.remove();\n };\n }\n}\n\n/** recursively find the link text node in line */\nfunction getTextNode(\n text: string,\n link: string,\n key: string,\n line: ChildNode | Node | null | undefined,\n): ChildNode | null {\n if (!line) return null;\n const textNodeContainer = getTextNodeContainer(text, link, key, line);\n if (!textNodeContainer) return null;\n\n for (const node of Array.from(textNodeContainer.childNodes)) {\n if (isCorrectNode(text, link, node)) {\n return node;\n }\n }\n\n return null;\n}\n\nfunction getTextNodeContainer(\n text: string,\n link: string,\n key: string,\n line: ChildNode | Node | null | undefined,\n): HTMLElement | null {\n if (!line) return null;\n\n for (const node of Array.from(line.childNodes)) {\n if (node instanceof HTMLElement && node.getAttribute(\"data-id\") === key) {\n return node;\n }\n\n if (node.nodeType !== 3) {\n const inner = getTextNodeContainer(text, link, key, node);\n if (inner) return inner;\n }\n }\n\n return null;\n}\n\nfunction isCorrectNode(\n text: string,\n link: string,\n node: ChildNode | Node | null | undefined,\n): node is ChildNode | Node {\n if (!node) return false;\n\n const textContent = node?.textContent;\n\n return Boolean(\n node &&\n textContent &&\n node.nodeType === 3 &&\n textContent.includes(link) &&\n textContent.includes(text),\n );\n}\n\ntype SelectLinkOptions = {\n node: ChildNode | Node;\n selection: Selection;\n start?: number;\n link: string;\n};\nfunction selectLink({ link, node, selection, start }: SelectLinkOptions) {\n const startPosition = start ?? (node.textContent?.indexOf?.(link) || 0);\n const endPosition = startPosition + link.length;\n\n const range = document.createRange();\n range.setStart(node, startPosition);\n range.setEnd(node, endPosition);\n selection.removeAllRanges();\n selection.addRange(range);\n}\n\nfunction handleClick(view: EditorView, text: string, link: string, key: string, event: MouseEvent) {\n /** open the link if has special key or the view is readonly */\n const contentEditable = view.contentDOM.getAttribute(\"contenteditable\");\n const forceActive = !contentEditable || contentEditable === \"false\";\n\n if (event.shiftKey || event.ctrlKey || event.altKey || event.metaKey || forceActive) {\n if (event.type === \"mousedown\") {\n const target = event.target as HTMLAnchorElement;\n window.open(target.href, \"_blank\");\n }\n\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n const target = event.target as HTMLImageElement;\n const parent = target.parentNode;\n let line: HTMLElement | null = parent as HTMLElement | null;\n\n /** recursively find line that contains link */\n while (line && !line.classList.contains(\"cm-line\")) {\n line = line.parentNode as HTMLElement | null;\n }\n\n const editor = Array.from(document.querySelectorAll(\".cm-editor\")).find((element) =>\n element.contains(target),\n );\n const selection = window.getSelection();\n\n if (!selection || !editor || !parent) return;\n\n const textNode = getTextNode(text, link, key, line);\n\n if (textNode) {\n return void selectLink({ selection, link, node: textNode });\n }\n\n saveDispatch(() => {\n if (!view) return;\n\n view.dispatch(view.state.update({ effects: openedLinkEffect.of(key) }));\n\n const textNode = getTextNode(text, link, key, line);\n if (textNode) {\n selectLink({ selection, link, node: textNode });\n }\n\n requestAnimationFrame(() => {\n saveDispatch(() => {\n if (view) view.dispatch(view.state.update({ effects: openedLinkEffect.of(undefined) }));\n });\n });\n });\n\n return false;\n}\n","import { utils } from \"@/lib\";\nimport { markdownState } from \"../markdown-state\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport {\n CODE_OF_END_LINK_TEXT,\n CODE_OF_END_LINK_URL,\n CODE_OF_START_LINK_TEXT,\n CODE_OF_START_LINK_URL,\n NAME_OF_LINK,\n} from \"./link-constants\";\nimport { getLinkLabelSelectionDecoration } from \"./link-label-decoration\";\nimport { LinkWidget } from \"./link-widget\";\n\nfunction getLinkSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_LINK) {\n return;\n }\n\n const content = view.state.doc.sliceString(node.from, node.to);\n const textCoordinates = { from: -1, to: -1 };\n const urlCoordinates = { from: -1, to: -1 };\n let pos = -1;\n\n while (pos < content.length) {\n pos++;\n const code = content.charCodeAt(pos);\n\n if (textCoordinates.from === -1 && code === CODE_OF_START_LINK_TEXT)\n textCoordinates.from = pos + 1;\n else if (\n urlCoordinates.from === -1 &&\n textCoordinates.to !== -1 &&\n code === CODE_OF_START_LINK_URL\n )\n urlCoordinates.from = pos + 1;\n else if (\n textCoordinates.from !== -1 &&\n textCoordinates.to === -1 &&\n code === CODE_OF_END_LINK_TEXT\n )\n textCoordinates.to = pos;\n else if (\n urlCoordinates.from !== -1 &&\n urlCoordinates.to === -1 &&\n code === CODE_OF_END_LINK_URL\n )\n urlCoordinates.to = pos;\n }\n\n if (urlCoordinates.from === -1 || urlCoordinates.to === -1)\n return void getLinkLabelSelectionDecoration({ decorations, forceActive, node, view });\n\n const text = content.substring(textCoordinates.from, textCoordinates.to);\n const url = content.substring(urlCoordinates.from, urlCoordinates.to);\n\n const openedLink = view.state.field(markdownState).openedLink;\n const key = `${url}:${text}:${node.from}:${node.to}`;\n const isOpened = openedLink && openedLink === key;\n\n if (isOpened) {\n return void decorations.push(\n utils.getMarkDecoration({\n range: [node.from, node.to],\n attributes: {\n \"data-id\": key,\n },\n }),\n );\n }\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(\n utils.getReplaceDecoration({\n range: [node.from, node.to],\n widget: new LinkWidget(text, url, node.from, node.to, view),\n }),\n );\n } else {\n decorations.push(\n utils.getMarkDecoration({\n range: [node.from, node.to],\n attributes: {\n \"data-id\": key,\n },\n }),\n );\n }\n}\n\nexport const linkDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getLinkSelectionDecorations],\n};\n","import { utils } from \"@/lib\";\nimport { markdownState } from \"../markdown-state\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport { NAME_OF_AUTO_LINK } from \"./link-constants\";\nimport { LinkWidget } from \"./link-widget\";\n\nfunction getAutoLinkSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_AUTO_LINK) return;\n\n const url = view.state.doc.sliceString(node.from + 1, node.to - 1);\n const openedLink = view.state.field(markdownState).openedLink;\n const key = `${url}:${url}:${node.from}:${node.to}`;\n const isOpened = openedLink && openedLink === key;\n\n if (isOpened) {\n return void decorations.push(\n utils.getMarkDecoration({\n range: [node.from, node.to],\n attributes: {\n \"data-id\": key,\n },\n }),\n );\n }\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(\n utils.getReplaceDecoration({\n range: [node.from, node.to],\n widget: new LinkWidget(url, url, node.from, node.to, view),\n }),\n );\n } else {\n decorations.push(\n utils.getMarkDecoration({\n range: [node.from, node.to],\n attributes: {\n \"data-id\": key,\n },\n }),\n );\n }\n}\n\nexport const autoLinkDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getAutoLinkSelectionDecorations],\n};\n","export const NAME_OF_LIST = \"ListMark\";\nexport const NAME_OF_TODO = \"Task\";\nexport const LIST_OF_LIST_MARKS = new Set([42, 43, 45]); // * + -\nexport const CODE_OF_ORDERED_LIST_MARK = 46; // .\n","import { WidgetType } from \"@codemirror/view\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport styles from \"../styles.module.scss\";\nimport { CODE_OF_ORDERED_LIST_MARK, LIST_OF_LIST_MARKS } from \"./list-constants\";\n\nexport class ListPointWidget extends WidgetType {\n constructor(\n private readonly mark: string,\n private readonly lastCodePoint: number,\n ) {\n super();\n }\n\n toDOM(): HTMLElement {\n const span = document.createElement(\"span\");\n span.classList.add(styles.list);\n span.textContent = this.mark;\n if (LIST_OF_LIST_MARKS.has(this.lastCodePoint)) {\n span.classList.add(styles.common);\n span.classList.add(CLASSES.listCommon);\n }\n if (CODE_OF_ORDERED_LIST_MARK === this.lastCodePoint) {\n span.classList.add(styles.ordered);\n }\n\n return span;\n }\n}\n","import { utils } from \"@/lib\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport {\n CODE_OF_ORDERED_LIST_MARK,\n LIST_OF_LIST_MARKS,\n NAME_OF_LIST,\n NAME_OF_TODO,\n} from \"./list-constants\";\nimport { ListPointWidget } from \"./list-widget\";\n\nfunction getListSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_LIST) {\n return;\n }\n\n const content = view.state.doc.sliceString(node.from, node.to);\n const lastCodePoint = content.codePointAt(content.length - 1) || 0;\n if (!LIST_OF_LIST_MARKS.has(lastCodePoint) && CODE_OF_ORDERED_LIST_MARK !== lastCodePoint) {\n return;\n }\n\n const nextSibling = node.node.nextSibling;\n if (nextSibling && nextSibling.name === NAME_OF_TODO) {\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, nextSibling.from + 3])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, nextSibling.from] }));\n }\n\n return;\n }\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(\n utils.getReplaceDecoration({\n range: [node.from, node.to],\n widget: new ListPointWidget(content, lastCodePoint),\n }),\n );\n }\n}\n\nexport const listDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getListSelectionDecorations],\n};\n","export const CODE_OF_START_MENTION = 64; // @\nexport const CODE_OF_SPACE = 32;\nexport const NAME_OF_MENTION = \"Mention\";\n","import clsx from \"clsx\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { NAME_OF_MENTION } from \"./mention-constants\";\n\nfunction getMentionDecorations({ decorations, node }: GetDecorationOptions) {\n if (node.name !== NAME_OF_MENTION) {\n return;\n }\n\n decorations.push(\n utils.getMarkDecoration({\n style: clsx(styles.mention, CLASSES.mention),\n range: [node.from, node.to],\n }),\n );\n}\n\nfunction getMentionSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_MENTION) {\n return;\n }\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + 1] }));\n }\n}\n\nexport const mentionDecorationPlugin: DecorationPlugin = {\n decorations: [getMentionDecorations],\n selectionDecorations: [getMentionSelectionDecorations],\n};\n","export const NAME_OF_STRIKE_THROUGH = \"Strikethrough\";\n","import { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { NAME_OF_STRIKE_THROUGH } from \"./strike-through-constants\";\n\nfunction getStrikeThroughDecorations({ decorations, node }: GetDecorationOptions) {\n if (node.name !== NAME_OF_STRIKE_THROUGH) {\n return;\n }\n\n decorations.push(\n utils.getMarkDecoration({\n style: styles[\"strike-through\"],\n range: [node.from, node.to],\n }),\n );\n}\n\nfunction getStrikeThroughSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_STRIKE_THROUGH) {\n return;\n }\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + 2] }));\n decorations.push(utils.getHideDecoration({ range: [node.to - 2, node.to] }));\n }\n}\n\nexport const strikeThroughDecorationPlugin: DecorationPlugin = {\n decorations: [getStrikeThroughDecorations],\n selectionDecorations: [getStrikeThroughSelectionDecorations],\n};\n","export const NAME_OF_TODO = \"Task\";\nexport const NAME_OF_LIST_MARK = \"ListMark\";\nexport const LIST_OF_TODO_MARKS = new Set([120, 1093]); // x\n","import { type ChangeSpec } from \"@codemirror/state\";\nimport { type EditorView, WidgetType } from \"@codemirror/view\";\nimport { saveDispatch } from \"@/lib/utils\";\nimport styles from \"../styles.module.scss\";\n\nexport class TodoWidget extends WidgetType {\n view: EditorView | undefined;\n\n constructor(\n public checked: boolean,\n private readonly position: number,\n ) {\n super();\n }\n\n onClick(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n\n const target = event.target as HTMLInputElement;\n const change: ChangeSpec = {\n from: this.position,\n to: this.position + 1,\n insert: this.checked ? \" \" : \"x\",\n };\n\n saveDispatch(() => {\n if (!this.view) return;\n\n this.view.dispatch(this.view.state.update({ changes: change }));\n });\n\n this.checked = !this.checked;\n target.checked = this.checked;\n }\n\n onBlock(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n toDOM(view: EditorView): HTMLElement {\n const span = document.createElement(\"span\");\n span.classList.add(styles.todo);\n this.view = view;\n\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"checkbox\";\n checkbox.checked = this.checked;\n\n checkbox.addEventListener(\"click\", this.onBlock.bind(this));\n checkbox.addEventListener(\"mousedown\", this.onClick.bind(this));\n\n span.appendChild(checkbox);\n\n return span;\n }\n\n destroy(dom: HTMLElement): void {\n dom.removeEventListener(\"click\", this.onBlock.bind(this));\n dom.removeEventListener(\"mousedown\", this.onClick.bind(this));\n }\n}\n","import { utils } from \"@/lib\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { LIST_OF_TODO_MARKS, NAME_OF_LIST_MARK, NAME_OF_TODO } from \"./todo-constants\";\nimport { TodoWidget } from \"./todo-widget\";\n\nfunction getTodoSelectionDecoration({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_TODO) return;\n\n const prevSibling = node.node.prevSibling;\n if (!prevSibling || prevSibling.name !== NAME_OF_LIST_MARK) return;\n\n const isChecked = LIST_OF_TODO_MARKS.has(\n view.state.doc.sliceString(node.from + 1, node.from + 2).codePointAt(0) || 0,\n );\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [prevSibling.from, node.from + 3])\n ) {\n decorations.push(\n utils.getReplaceDecoration({\n range: [node.from, node.from + 3],\n widget: new TodoWidget(isChecked, node.from + 1),\n }),\n );\n }\n\n if (isChecked) {\n const line = view.lineBlockAt(node.from);\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n )\n decorations.push(\n utils.getMarkDecoration({ style: styles.todo__checked, range: [node.from + 4, node.to] }),\n );\n }\n}\n\nexport const todoDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getTodoSelectionDecoration],\n};\n","import { syntaxTree } from \"@codemirror/language\";\nimport { type Range } from \"@codemirror/state\";\nimport {\n Decoration,\n type DecorationSet,\n type EditorView,\n ViewPlugin,\n type ViewUpdate,\n} from \"@codemirror/view\";\nimport { saveDispatch } from \"@/lib/utils\";\nimport { blockquoteDecorationPlugin } from \"./blockquote\";\nimport { boldDecorationPlugin } from \"./bold\";\nimport { codeDecorationPlugin } from \"./code\";\nimport { headerDecorationPlugin } from \"./header\";\nimport { horizontalDecorationPlugin } from \"./horizontal\";\nimport { imageDecorationPlugin } from \"./image/image-decoration\";\nimport { italicDecorationPlugin } from \"./italic\";\nimport { autoLinkDecorationPlugin, linkDecorationPlugin } from \"./link\";\nimport { listDecorationPlugin } from \"./list\";\nimport { imageSrcGetterEffect } from \"./markdown-state\";\nimport type {\n DecorationPlugin,\n GetDecorationFunction,\n GetSelectionDecorationFunction,\n MarkdownStateConfig,\n} from \"./markdown-types\";\nimport { mentionDecorationPlugin } from \"./mention/mention-decoration\";\nimport { strikeThroughDecorationPlugin } from \"./strike-through\";\nimport { todoDecorationPlugin } from \"./todo\";\n\nconst decorationPlugins: DecorationPlugin[] = [\n blockquoteDecorationPlugin,\n boldDecorationPlugin,\n codeDecorationPlugin,\n headerDecorationPlugin,\n horizontalDecorationPlugin,\n imageDecorationPlugin,\n italicDecorationPlugin,\n linkDecorationPlugin,\n listDecorationPlugin,\n autoLinkDecorationPlugin,\n mentionDecorationPlugin,\n strikeThroughDecorationPlugin,\n todoDecorationPlugin,\n];\n\nlet decorationFunctions: GetDecorationFunction[] = [];\nlet selectionDecorationFunctions: GetSelectionDecorationFunction[] = [];\n\nfor (const plugin of decorationPlugins) {\n if (plugin.decorations) decorationFunctions = decorationFunctions.concat(plugin.decorations);\n if (plugin.selectionDecorations)\n selectionDecorationFunctions = selectionDecorationFunctions.concat(plugin.selectionDecorations);\n}\n\nconst SKIP_MARKS = new Set([\n \"Document\",\n \"Paragraph\",\n \"EmphasisMark\",\n \"Blockquote\",\n \"StrikethroughMark\",\n \"BulletList\",\n \"OrderedList\",\n \"ListItem\",\n \"LinkMark\",\n \"URL\",\n \"CodeMark\",\n \"CodeInfo\",\n \"CodeText\",\n \"HeaderMark\",\n \"TaskMarker\",\n]);\n\nfunction createDecorationsGetter() {\n let markdownDecorationsCache: Range<Decoration>[] = [];\n let markdownSelectionDecorationsCache: Range<Decoration>[] = [];\n\n function getDecorations(view: EditorView, isChanged: boolean, mouseReleased: boolean) {\n const processDecorations = isChanged;\n const processSelectionDecorations = isChanged || mouseReleased;\n const decorations: Range<Decoration>[] = processDecorations ? [] : markdownDecorationsCache;\n const selectionDecorations: Range<Decoration>[] = processSelectionDecorations\n ? []\n : markdownSelectionDecorationsCache;\n\n const contentEditable = view.contentDOM.getAttribute(\"contenteditable\");\n const isReadonly = !contentEditable || contentEditable === \"false\";\n\n for (const { from: fromVisible, to: toVisible } of view.visibleRanges) {\n syntaxTree(view.state).iterate({\n from: fromVisible,\n to: toVisible,\n enter: (node) => {\n if (SKIP_MARKS.has(node.name)) return;\n /** Decoration by change content */\n if (processDecorations)\n decorationFunctions.forEach((f) => f({ decorations, node, view }));\n\n /** Decoration by selection content */\n if (processSelectionDecorations)\n selectionDecorationFunctions.forEach((f) =>\n f({\n decorations: selectionDecorations,\n node,\n view,\n forceActive: isReadonly,\n }),\n );\n },\n });\n }\n\n if (processDecorations) {\n markdownDecorationsCache = decorations;\n }\n if (processSelectionDecorations) {\n markdownSelectionDecorationsCache = selectionDecorations;\n }\n\n return Decoration.set([...decorations, ...selectionDecorations], true);\n }\n\n return getDecorations;\n}\n\nexport const markdownDecorationPlugin = (stateConfig: MarkdownStateConfig) => {\n return ViewPlugin.fromClass(\n class DecorationMarkdown {\n decorations: DecorationSet;\n\n mouseReleased: boolean = true;\n\n dom: HTMLElement;\n\n view: EditorView;\n\n decorationGetter: (\n view: EditorView,\n isChanged: boolean,\n mouseReleased: boolean,\n ) => DecorationSet;\n\n constructor(view: EditorView) {\n this.decorationGetter = createDecorationsGetter();\n this.decorations = this.decorationGetter(view, true, this.mouseReleased);\n this.dom = view.dom;\n this.view = view;\n document.addEventListener(\"mousedown\", this.onMouseDown.bind(this));\n document.addEventListener(\"mouseup\", this.onMouseUp.bind(this));\n\n saveDispatch(() => {\n this.view.dispatch(\n this.view.state.update({\n effects: [imageSrcGetterEffect.of(stateConfig.imageSrcGetter)],\n }),\n );\n });\n }\n\n update(update: ViewUpdate) {\n const isDocumentChanged =\n update.docChanged ||\n update.viewportChanged ||\n syntaxTree(update.startState) != syntaxTree(update.state);\n this.decorations = this.decorationGetter(\n update.view,\n isDocumentChanged,\n this.mouseReleased,\n );\n }\n\n destroy() {\n document.removeEventListener(\"mousedown\", this.onMouseDown.bind(this));\n document.removeEventListener(\"mouseup\", this.onMouseUp.bind(this));\n }\n\n onMouseDown(this: DecorationMarkdown) {\n this.mouseReleased = false;\n }\n\n onMouseUp(this: DecorationMarkdown) {\n this.mouseReleased = true;\n if (this.view.state.selection.ranges[0].from !== this.view.state.selection.ranges[0].to) {\n saveDispatch(() => {\n this.view.dispatch(this.view.state.update({}));\n });\n }\n }\n },\n {\n decorations: (plugin) => plugin.decorations,\n },\n );\n};\n","import { history } from \"@codemirror/commands\";\nimport { type Extension } from \"@codemirror/state\";\nimport { EditorView, drawSelection } from \"@codemirror/view\";\nimport { ReadonlyCompartment, VimModeCompartment } from \"../compartments\";\n\nexport type InitSettingsOptions = {\n readonly?: boolean;\n vimMode?: boolean;\n};\n\nexport async function InitSettings({\n readonly,\n vimMode,\n}: InitSettingsOptions): Promise<Extension[]> {\n let vimExtension: Extension = [];\n if (vimMode) {\n const { vim } = await import(\"@replit/codemirror-vim\");\n vimExtension = [vim({ status: true }), drawSelection()];\n }\n\n return [\n ReadonlyCompartment.of(EditorView.editable.of(!readonly)),\n VimModeCompartment.of(vimExtension),\n history(),\n ];\n}\n","import type { Extension } from \"@codemirror/state\";\nimport type { WebsocketProvider } from \"y-websocket\";\nimport type { Text } from \"yjs\";\nimport { type InitKeyMapsOptions, initKeyMaps } from \"./keymaps\";\nimport { type InitListenersOptions, initListeners } from \"./listeners\";\nimport { type InitMarkdownOptions } from \"./markdown\";\nimport { InitSettings, type InitSettingsOptions } from \"./settings\";\nimport { type InitThemeOptions, initTheme } from \"./theme\";\n\nexport type ExtensionsOptions = InitListenersOptions &\n InitThemeOptions &\n InitSettingsOptions &\n InitMarkdownOptions &\n InitKeyMapsOptions;\n\nexport type InitExtensionsOptions = {\n multiCursorText: Text | undefined;\n provider: WebsocketProvider | undefined;\n} & ExtensionsOptions;\n\nexport const initExtensions = async ({\n onBlur,\n onChange,\n onFocus,\n onEnter,\n onEscape,\n readonly = true,\n vimMode = false,\n multiCursorText,\n provider,\n theme = \"light\",\n dark,\n light,\n languages,\n keyMaps,\n defaultKeyMaps,\n imageSrcGetter,\n}: InitExtensionsOptions): Promise<Extension[]> => {\n const multiCursorMode = Boolean(multiCursorText && provider);\n\n const asyncPlugins = await Promise.all([\n InitSettings({ readonly, vimMode }),\n initKeyMaps({\n onEnter,\n onEscape,\n multiCursorMode,\n keyMaps,\n vimMode,\n theme,\n dark,\n defaultKeyMaps,\n light,\n }),\n new Promise<Extension>((resolve) => {\n void import(\"./markdown\").then(({ initMarkdown }) => {\n resolve(initMarkdown({ languages, imageSrcGetter }));\n });\n }),\n ]);\n\n const extensions = [\n ...asyncPlugins,\n initTheme({ theme, dark, light }),\n initListeners({ onBlur, onChange, onFocus }),\n ];\n\n if (multiCursorText && provider) {\n const multiCursorModules = await Promise.all([import(\"yjs\"), import(\"y-codemirror.next\")]);\n const [{ UndoManager }, { yCollab }] = multiCursorModules;\n\n const undoManager = new UndoManager(multiCursorText);\n extensions.push(yCollab(multiCursorText, provider.awareness, { undoManager }));\n }\n\n return extensions;\n};\n","import type { MultiCursorOptions } from \"../Editor.types\";\n\ntype InitEditorProviderOptions = {\n initialText?: string;\n} & MultiCursorOptions;\n\nexport async function initEditorProvider({\n roomId,\n url,\n userName = \"Anonymous\",\n userColor,\n initialText,\n onStartProvider,\n}: InitEditorProviderOptions) {\n const { Doc } = await import(\"yjs\");\n const { WebsocketProvider } = await import(\"y-websocket\");\n\n const multiCursorDocument = new Doc();\n const multiCursorText = multiCursorDocument.getText(roomId);\n\n if (!userColor || !userColor.startsWith(\"#\")) {\n // eslint-disable-next-line no-console\n console.warn(\"user color must be hex!\");\n userColor = \"#30bced\";\n }\n const userColorLight = `${userColor.substring(0, 7)}33`;\n\n const provider = new WebsocketProvider(url, roomId, multiCursorDocument);\n provider.awareness.setLocalStateField(\"user\", {\n name: userName,\n color: userColor,\n colorLight: userColorLight,\n });\n\n if (onStartProvider)\n provider.on(\"status\", (event: { status: string }) => {\n onStartProvider(event?.status);\n });\n\n if (provider && multiCursorText)\n provider.on(\"sync\", (isSynced: boolean) => {\n if (isSynced && !multiCursorText.length && initialText) {\n multiCursorText.insert(0, initialText);\n }\n });\n\n return { provider, multiCursorText };\n}\n","import { EditorState } from \"@codemirror/state\";\nimport { type InitExtensionsOptions, initExtensions } from \"@/extensions\";\n\ntype InitEditorStateOptions = {\n text: string;\n} & InitExtensionsOptions;\n\nexport async function initEditorState({ text, ...rest }: InitEditorStateOptions) {\n const extensions = await initExtensions(rest);\n\n return EditorState.create({\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n doc: rest.multiCursorText ? rest.multiCursorText.toString() : text,\n extensions,\n });\n}\n","import { EditorView } from \"@codemirror/view\";\nimport { type WebsocketProvider } from \"y-websocket\";\nimport type { Text } from \"yjs\";\nimport type { EditorArguments } from \"../Editor.types\";\nimport { initEditorProvider } from \"./init-editor-provider\";\nimport { initEditorState } from \"./init-editor-state\";\n\nexport async function initEditor({ multiCursor, root, initialText, ...rest }: EditorArguments) {\n let provider: WebsocketProvider | undefined;\n let multiCursorText: Text | undefined;\n\n if (multiCursor) {\n const editorProvider = await initEditorProvider({ ...multiCursor, initialText });\n provider = editorProvider.provider;\n multiCursorText = editorProvider.multiCursorText;\n }\n\n const state = await initEditorState({\n ...rest,\n text: initialText || \"\",\n provider,\n multiCursorText,\n });\n const view = new EditorView({\n state,\n parent: root,\n });\n\n return { view, provider };\n}\n","import { EditorView, drawSelection } from \"@codemirror/view\";\nimport type { WebsocketProvider } from \"y-websocket\";\nimport {\n type EditorTheme,\n ReadonlyCompartment,\n ThemeCompartment,\n VimModeCompartment,\n getDarkTheme,\n getLightTheme,\n} from \"@/extensions\";\nimport { saveDispatch } from \"@/lib/utils\";\nimport { type EditorArguments } from \"./Editor.types\";\nimport { initEditor } from \"./lib\";\n\nexport class Editor {\n view: EditorView | undefined;\n\n provider: WebsocketProvider | undefined;\n\n arguments: EditorArguments;\n\n constructor(options: EditorArguments) {\n void initEditor(options).then((editor) => {\n this.view = editor.view;\n this.provider = editor.provider;\n });\n\n this.arguments = options;\n }\n\n focus = () => {\n if (!this.view) return;\n\n this.view.focus();\n };\n\n getContent = () => {\n if (!this.view) return;\n\n return this.view.state.doc.toString();\n };\n\n setContent = (content: string, position?: number) => {\n if (!this.view) return;\n\n if (position == undefined) {\n const cursor = this.view.state.selection.main.head;\n position = cursor;\n }\n\n const transaction = this.view.state.update({\n changes: {\n from: position,\n insert: content,\n },\n });\n saveDispatch(() => {\n if (!this.view) return;\n\n this.view.dispatch(transaction);\n });\n };\n\n setReadonly = (readonly: boolean) => {\n saveDispatch(() => {\n if (!this.view) return;\n this.view.dispatch({\n effects: ReadonlyCompartment.reconfigure(EditorView.editable.of(!readonly)),\n });\n });\n };\n\n setTheme = (theme?: EditorTheme) => {\n saveDispatch(() => {\n if (!this.view) return;\n this.view.dispatch({\n effects: ThemeCompartment.reconfigure(\n theme === \"dark\"\n ? getDarkTheme({\n dark: this.arguments.dark,\n light: this.arguments.light,\n theme,\n })\n : getLightTheme({\n dark: this.arguments.dark,\n light: this.arguments.light,\n theme,\n }),\n ),\n });\n });\n };\n\n setVimMode = async (mode: boolean) => {\n if (!this.view) return;\n\n const { vim } = await import(\"@replit/codemirror-vim\");\n\n saveDispatch(() => {\n if (!this.view) return;\n this.view.dispatch({\n effects: VimModeCompartment.reconfigure(\n mode ? [vim({ status: true }), drawSelection()] : [],\n ),\n });\n });\n };\n\n setUserProvider = (name: string = \"Anonymous\", color: string = \"#000000\") => {\n if (!this.provider) return;\n\n this.provider.awareness.setLocalStateField(\"user\", { name, color });\n };\n\n destroy = () => {\n saveDispatch(() => {\n if (!this.view) return;\n this.view.destroy();\n });\n saveDispatch(() => {\n if (this.provider) this.provider.destroy();\n });\n };\n}\n\nexport type EditorInterface = typeof Editor;\n"],"names":["Compartment","Decoration","syntaxHighlighting","HighlightStyle","t","EditorView","HIGHLIGHT_CONFIG","THEME_CONFIG","indentWithTab","standardKeymap","view","drawSelection","historyKeymap","keymap","CODE_OF_SPACE","WidgetType","utils.getLineDecoration","utils.isInRange","utils.getHideDecoration","utils.getReplaceDecoration","syntaxTree","utils.getMarkDecoration","utils\n .copyToClipboard","utils.isRangeOverlap","utils.getWidgetDecorationOptions","StateEffect","StateField","handleClick","getTextNode","getTextNodeContainer","isCorrectNode","selectLink","NAME_OF_TODO","ViewPlugin","history","EditorState"],"mappings":"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","x_google_ignoreList":[16]}
package/lib/cjs/index.js CHANGED
@@ -2,12 +2,15 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const index = require('./index-Czx0hvPo.js');
6
- require('@codemirror/view');
7
- require('@codemirror/state');
5
+ const index = require('./index-CiorogHq.js');
8
6
  require('@codemirror/commands');
7
+ require('@codemirror/view');
9
8
  require('@codemirror/language');
10
9
  require('@lezer/highlight');
10
+ require('@codemirror/state');
11
+ require('@codemirror/lang-markdown');
12
+ require('clsx');
13
+ require('y-websocket');
11
14
 
12
15
 
13
16
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
@@ -1,12 +1,16 @@
1
1
  import { initKeyMaps } from './keymaps/init-key-map.js';
2
2
  import { initListeners } from './listeners/init-listeners.js';
3
+ import '@codemirror/lang-markdown';
4
+ import '@codemirror/state';
5
+ import './markdown/markdown-decoration.js';
6
+ import './markdown/markdown-state.js';
3
7
  import { InitSettings } from './settings/init-settings.js';
4
8
  import { initTheme } from './theme/init-theme.js';
5
9
  import '@codemirror/language';
6
10
  import '@lezer/highlight';
7
11
  import '@codemirror/view';
8
12
 
9
- const initExtensions = async ({ onBlur, onChange, onFocus, onEnter, onEscape, readonly = true, vimMode = false, multiCursorText, provider, theme = "light", dark, light, languages, keyMaps, defaultKeyMaps, }) => {
13
+ const initExtensions = async ({ onBlur, onChange, onFocus, onEnter, onEscape, readonly = true, vimMode = false, multiCursorText, provider, theme = "light", dark, light, languages, keyMaps, defaultKeyMaps, imageSrcGetter, }) => {
10
14
  const multiCursorMode = Boolean(multiCursorText && provider);
11
15
  const asyncPlugins = await Promise.all([
12
16
  InitSettings({ readonly, vimMode }),
@@ -23,7 +27,7 @@ const initExtensions = async ({ onBlur, onChange, onFocus, onEnter, onEscape, re
23
27
  }),
24
28
  new Promise((resolve) => {
25
29
  void import('./markdown/index.js').then(({ initMarkdown }) => {
26
- resolve(initMarkdown({ languages }));
30
+ resolve(initMarkdown({ languages, imageSrcGetter }));
27
31
  });
28
32
  }),
29
33
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"init-extensions.js","sources":["../../../src/extensions/init-extensions.ts"],"sourcesContent":["import type { Extension } from \"@codemirror/state\";\nimport type { WebsocketProvider } from \"y-websocket\";\nimport type { Text } from \"yjs\";\nimport { type InitKeyMapsOptions, initKeyMaps } from \"./keymaps\";\nimport { type InitListenersOptions, initListeners } from \"./listeners\";\nimport { type InitMarkdownOptions } from \"./markdown\";\nimport { InitSettings, type InitSettingsOptions } from \"./settings\";\nimport { type InitThemeOptions, initTheme } from \"./theme\";\n\nexport type ExtensionsOptions = InitListenersOptions &\n InitThemeOptions &\n InitSettingsOptions &\n InitMarkdownOptions &\n InitKeyMapsOptions;\n\nexport type InitExtensionsOptions = {\n multiCursorText: Text | undefined;\n provider: WebsocketProvider | undefined;\n} & ExtensionsOptions;\n\nexport const initExtensions = async ({\n onBlur,\n onChange,\n onFocus,\n onEnter,\n onEscape,\n readonly = true,\n vimMode = false,\n multiCursorText,\n provider,\n theme = \"light\",\n dark,\n light,\n languages,\n keyMaps,\n defaultKeyMaps,\n}: InitExtensionsOptions): Promise<Extension[]> => {\n const multiCursorMode = Boolean(multiCursorText && provider);\n\n const asyncPlugins = await Promise.all([\n InitSettings({ readonly, vimMode }),\n initKeyMaps({\n onEnter,\n onEscape,\n multiCursorMode,\n keyMaps,\n vimMode,\n theme,\n dark,\n defaultKeyMaps,\n light,\n }),\n new Promise<Extension>((resolve) => {\n void import(\"./markdown\").then(({ initMarkdown }) => {\n resolve(initMarkdown({ languages }));\n });\n }),\n ]);\n\n const extensions = [\n ...asyncPlugins,\n initTheme({ theme, dark, light }),\n initListeners({ onBlur, onChange, onFocus }),\n ];\n\n if (multiCursorText && provider) {\n const multiCursorModules = await Promise.all([import(\"yjs\"), import(\"y-codemirror.next\")]);\n const [{ UndoManager }, { yCollab }] = multiCursorModules;\n\n const undoManager = new UndoManager(multiCursorText);\n extensions.push(yCollab(multiCursorText, provider.awareness, { undoManager }));\n }\n\n return extensions;\n};\n"],"names":[],"mappings":";;;;;;;;MAoBa,cAAc,GAAG,OAAO,EACnC,MAAM,EACN,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,EACR,QAAQ,GAAG,IAAI,EACf,OAAO,GAAG,KAAK,EACf,eAAe,EACf,QAAQ,EACR,KAAK,GAAG,OAAO,EACf,IAAI,EACJ,KAAK,EACL,SAAS,EACT,OAAO,EACP,cAAc,GACQ,KAA0B;IAChD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,QAAQ,CAAC;AAE5D,IAAA,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACrC,QAAA,YAAY,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACnC,QAAA,WAAW,CAAC;YACV,OAAO;YACP,QAAQ;YACR,eAAe;YACf,OAAO;YACP,OAAO;YACP,KAAK;YACL,IAAI;YACJ,cAAc;YACd,KAAK;SACN,CAAC;AACF,QAAA,IAAI,OAAO,CAAY,CAAC,OAAO,KAAI;AACjC,YAAA,KAAK,OAAO,qBAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,KAAI;gBAClD,OAAO,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AACtC,aAAC,CAAC;AACJ,SAAC,CAAC;AACH,KAAA,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,GAAG,YAAY;QACf,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACjC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;KAC7C;AAED,IAAA,IAAI,eAAe,IAAI,QAAQ,EAAE;AAC/B,QAAA,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,OAAO,mBAAmB,CAAC,CAAC,CAAC;QAC1F,MAAM,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,kBAAkB;AAEzD,QAAA,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,eAAe,CAAC;AACpD,QAAA,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;;AAGhF,IAAA,OAAO,UAAU;AACnB;;;;"}
1
+ {"version":3,"file":"init-extensions.js","sources":["../../../src/extensions/init-extensions.ts"],"sourcesContent":["import type { Extension } from \"@codemirror/state\";\nimport type { WebsocketProvider } from \"y-websocket\";\nimport type { Text } from \"yjs\";\nimport { type InitKeyMapsOptions, initKeyMaps } from \"./keymaps\";\nimport { type InitListenersOptions, initListeners } from \"./listeners\";\nimport { type InitMarkdownOptions } from \"./markdown\";\nimport { InitSettings, type InitSettingsOptions } from \"./settings\";\nimport { type InitThemeOptions, initTheme } from \"./theme\";\n\nexport type ExtensionsOptions = InitListenersOptions &\n InitThemeOptions &\n InitSettingsOptions &\n InitMarkdownOptions &\n InitKeyMapsOptions;\n\nexport type InitExtensionsOptions = {\n multiCursorText: Text | undefined;\n provider: WebsocketProvider | undefined;\n} & ExtensionsOptions;\n\nexport const initExtensions = async ({\n onBlur,\n onChange,\n onFocus,\n onEnter,\n onEscape,\n readonly = true,\n vimMode = false,\n multiCursorText,\n provider,\n theme = \"light\",\n dark,\n light,\n languages,\n keyMaps,\n defaultKeyMaps,\n imageSrcGetter,\n}: InitExtensionsOptions): Promise<Extension[]> => {\n const multiCursorMode = Boolean(multiCursorText && provider);\n\n const asyncPlugins = await Promise.all([\n InitSettings({ readonly, vimMode }),\n initKeyMaps({\n onEnter,\n onEscape,\n multiCursorMode,\n keyMaps,\n vimMode,\n theme,\n dark,\n defaultKeyMaps,\n light,\n }),\n new Promise<Extension>((resolve) => {\n void import(\"./markdown\").then(({ initMarkdown }) => {\n resolve(initMarkdown({ languages, imageSrcGetter }));\n });\n }),\n ]);\n\n const extensions = [\n ...asyncPlugins,\n initTheme({ theme, dark, light }),\n initListeners({ onBlur, onChange, onFocus }),\n ];\n\n if (multiCursorText && provider) {\n const multiCursorModules = await Promise.all([import(\"yjs\"), import(\"y-codemirror.next\")]);\n const [{ UndoManager }, { yCollab }] = multiCursorModules;\n\n const undoManager = new UndoManager(multiCursorText);\n extensions.push(yCollab(multiCursorText, provider.awareness, { undoManager }));\n }\n\n return extensions;\n};\n"],"names":[],"mappings":";;;;;;;;;;;;MAoBa,cAAc,GAAG,OAAO,EACnC,MAAM,EACN,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,EACR,QAAQ,GAAG,IAAI,EACf,OAAO,GAAG,KAAK,EACf,eAAe,EACf,QAAQ,EACR,KAAK,GAAG,OAAO,EACf,IAAI,EACJ,KAAK,EACL,SAAS,EACT,OAAO,EACP,cAAc,EACd,cAAc,GACQ,KAA0B;IAChD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,QAAQ,CAAC;AAE5D,IAAA,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACrC,QAAA,YAAY,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACnC,QAAA,WAAW,CAAC;YACV,OAAO;YACP,QAAQ;YACR,eAAe;YACf,OAAO;YACP,OAAO;YACP,KAAK;YACL,IAAI;YACJ,cAAc;YACd,KAAK;SACN,CAAC;AACF,QAAA,IAAI,OAAO,CAAY,CAAC,OAAO,KAAI;AACjC,YAAA,KAAK,OAAO,qBAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,KAAI;gBAClD,OAAO,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;AACtD,aAAC,CAAC;AACJ,SAAC,CAAC;AACH,KAAA,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,GAAG,YAAY;QACf,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACjC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;KAC7C;AAED,IAAA,IAAI,eAAe,IAAI,QAAQ,EAAE;AAC/B,QAAA,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,OAAO,mBAAmB,CAAC,CAAC,CAAC;QAC1F,MAAM,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,kBAAkB;AAEzD,QAAA,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,eAAe,CAAC;AACpD,QAAA,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;;AAGhF,IAAA,OAAO,UAAU;AACnB;;;;"}
@@ -1,3 +1,4 @@
1
+ import '@codemirror/state';
1
2
  import { EditorView } from '@codemirror/view';
2
3
 
3
4
  function getFocusEvent({ onBlur, onFocus }) {
@@ -1 +1 @@
1
- {"version":3,"file":"get-focus-event.js","sources":["../../../../src/extensions/listeners/get-focus-event.ts"],"sourcesContent":["import { type EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\n\nexport type GetFocusEventOptions = {\n onFocus?: HandleFocusEditorFunction;\n onBlur?: HandleBlurEditorFunction;\n};\n\nexport type HandleFocusEditorFunction = (state: EditorState) => void;\nexport type HandleBlurEditorFunction = (state: EditorState) => void;\n\nexport function getFocusEvent({ onBlur, onFocus }: GetFocusEventOptions) {\n return onFocus || onBlur\n ? EditorView.focusChangeEffect.of((e, focus) => {\n if (focus && onFocus) onFocus(e);\n else if (!focus && onBlur) onBlur(e);\n\n return null;\n })\n : [];\n}\n"],"names":[],"mappings":";;SAWgB,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAwB,EAAA;IACrE,OAAO,OAAO,IAAI;AAChB,UAAE,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;YAC3C,IAAI,KAAK,IAAI,OAAO;gBAAE,OAAO,CAAC,CAAC,CAAC;iBAC3B,IAAI,CAAC,KAAK,IAAI,MAAM;gBAAE,MAAM,CAAC,CAAC,CAAC;AAEpC,YAAA,OAAO,IAAI;AACb,SAAC;UACD,EAAE;AACR;;;;"}
1
+ {"version":3,"file":"get-focus-event.js","sources":["../../../../src/extensions/listeners/get-focus-event.ts"],"sourcesContent":["import { type EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\n\nexport type GetFocusEventOptions = {\n onFocus?: HandleFocusEditorFunction;\n onBlur?: HandleBlurEditorFunction;\n};\n\nexport type HandleFocusEditorFunction = (state: EditorState) => void;\nexport type HandleBlurEditorFunction = (state: EditorState) => void;\n\nexport function getFocusEvent({ onBlur, onFocus }: GetFocusEventOptions) {\n return onFocus || onBlur\n ? EditorView.focusChangeEffect.of((e, focus) => {\n if (focus && onFocus) onFocus(e);\n else if (!focus && onBlur) onBlur(e);\n\n return null;\n })\n : [];\n}\n"],"names":[],"mappings":";;;SAWgB,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAwB,EAAA;IACrE,OAAO,OAAO,IAAI;AAChB,UAAE,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;YAC3C,IAAI,KAAK,IAAI,OAAO;gBAAE,OAAO,CAAC,CAAC,CAAC;iBAC3B,IAAI,CAAC,KAAK,IAAI,MAAM;gBAAE,MAAM,CAAC,CAAC,CAAC;AAEpC,YAAA,OAAO,IAAI;AACb,SAAC;UACD,EAAE;AACR;;;;"}
@@ -45,7 +45,7 @@ function getBlockquoteDecorations({ decorations, node, view }) {
45
45
  }));
46
46
  }
47
47
  }
48
- function getBlockquoteSelectionDecorations({ decorations, node, view, isReadonly, }) {
48
+ function getBlockquoteSelectionDecorations({ decorations, node, view, forceActive, }) {
49
49
  if (node.name !== NAME_OF_BLOCKQUOTE_MARK) {
50
50
  return;
51
51
  }
@@ -78,7 +78,7 @@ function getBlockquoteSelectionDecorations({ decorations, node, view, isReadonly
78
78
  pos = -1;
79
79
  }
80
80
  }
81
- if (isReadonly ||
81
+ if (forceActive ||
82
82
  !view.hasFocus ||
83
83
  !isInRange(view.state.selection.ranges, [line.from, line.to])) {
84
84
  if (!isInner)
@@ -1 +1 @@
1
- {"version":3,"file":"blockquote-decoration.js","sources":["../../../../../src/extensions/markdown/blockquote/blockquote-decoration.ts"],"sourcesContent":["import clsx from \"clsx\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport {\n CODE_OF_BLOCKQUOTE_MARK,\n CODE_OF_SPACE,\n NAME_OF_BLOCKQUOTE_MARK,\n} from \"./blockquote-constants\";\nimport { BlockquoteWidget } from \"./blockquote-widget\";\n\nfunction getBlockquoteDecorations({ decorations, node, view }: GetDecorationOptions) {\n if (node.name !== NAME_OF_BLOCKQUOTE_MARK) {\n return;\n }\n\n const line = view.lineBlockAt(node.from);\n let isInner = false;\n\n if (line.from !== node.from) {\n const content = view.state.doc.sliceString(line.from, node.to);\n let pos = content.length - 1;\n let isHasMark = false;\n\n while (pos >= 0) {\n pos--;\n const currentCode = content.charCodeAt(pos);\n if (currentCode === CODE_OF_SPACE) continue;\n if (currentCode === CODE_OF_BLOCKQUOTE_MARK) {\n if (!isHasMark) {\n isHasMark = true;\n continue;\n }\n if (!isInner) {\n isInner = true;\n break;\n }\n }\n pos = -1;\n }\n }\n\n if (!isInner) {\n decorations.push(\n utils.getLineDecoration({\n style: clsx(styles.blockquote, CLASSES.blockquote),\n range: [line.from],\n }),\n );\n }\n}\n\nfunction getBlockquoteSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_BLOCKQUOTE_MARK) {\n return;\n }\n\n const line = view.lineBlockAt(node.from);\n let isInner = false;\n let isDeepInner = false;\n\n if (line.from !== node.from) {\n const content = view.state.doc.sliceString(line.from, node.to);\n let pos = content.length;\n let isHasMark = false;\n\n while (pos >= 0) {\n pos--;\n const currentCode = content.charCodeAt(pos);\n\n if (currentCode === CODE_OF_SPACE) continue;\n if (currentCode === CODE_OF_BLOCKQUOTE_MARK) {\n if (!isHasMark) {\n isHasMark = true;\n continue;\n }\n if (!isInner) {\n isInner = true;\n continue;\n }\n if (!isDeepInner) {\n isDeepInner = true;\n break;\n }\n }\n pos = -1;\n }\n }\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n ) {\n if (!isInner) decorations.push(utils.getHideDecoration({ range: [node.from, node.to] }));\n else\n decorations.push(\n utils.getReplaceDecoration({\n widget: new BlockquoteWidget(isDeepInner),\n range: [node.from, node.to],\n }),\n );\n }\n}\n\nexport const blockquoteDecorationPlugin: DecorationPlugin = {\n decorations: [getBlockquoteDecorations],\n selectionDecorations: [getBlockquoteSelectionDecorations],\n};\n"],"names":["utils.getLineDecoration","utils.isInRange","utils.getHideDecoration","utils.getReplaceDecoration"],"mappings":"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"}
1
+ {"version":3,"file":"blockquote-decoration.js","sources":["../../../../../src/extensions/markdown/blockquote/blockquote-decoration.ts"],"sourcesContent":["import clsx from \"clsx\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport {\n CODE_OF_BLOCKQUOTE_MARK,\n CODE_OF_SPACE,\n NAME_OF_BLOCKQUOTE_MARK,\n} from \"./blockquote-constants\";\nimport { BlockquoteWidget } from \"./blockquote-widget\";\n\nfunction getBlockquoteDecorations({ decorations, node, view }: GetDecorationOptions) {\n if (node.name !== NAME_OF_BLOCKQUOTE_MARK) {\n return;\n }\n\n const line = view.lineBlockAt(node.from);\n let isInner = false;\n\n if (line.from !== node.from) {\n const content = view.state.doc.sliceString(line.from, node.to);\n let pos = content.length - 1;\n let isHasMark = false;\n\n while (pos >= 0) {\n pos--;\n const currentCode = content.charCodeAt(pos);\n if (currentCode === CODE_OF_SPACE) continue;\n if (currentCode === CODE_OF_BLOCKQUOTE_MARK) {\n if (!isHasMark) {\n isHasMark = true;\n continue;\n }\n if (!isInner) {\n isInner = true;\n break;\n }\n }\n pos = -1;\n }\n }\n\n if (!isInner) {\n decorations.push(\n utils.getLineDecoration({\n style: clsx(styles.blockquote, CLASSES.blockquote),\n range: [line.from],\n }),\n );\n }\n}\n\nfunction getBlockquoteSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_BLOCKQUOTE_MARK) {\n return;\n }\n\n const line = view.lineBlockAt(node.from);\n let isInner = false;\n let isDeepInner = false;\n\n if (line.from !== node.from) {\n const content = view.state.doc.sliceString(line.from, node.to);\n let pos = content.length;\n let isHasMark = false;\n\n while (pos >= 0) {\n pos--;\n const currentCode = content.charCodeAt(pos);\n\n if (currentCode === CODE_OF_SPACE) continue;\n if (currentCode === CODE_OF_BLOCKQUOTE_MARK) {\n if (!isHasMark) {\n isHasMark = true;\n continue;\n }\n if (!isInner) {\n isInner = true;\n continue;\n }\n if (!isDeepInner) {\n isDeepInner = true;\n break;\n }\n }\n pos = -1;\n }\n }\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n ) {\n if (!isInner) decorations.push(utils.getHideDecoration({ range: [node.from, node.to] }));\n else\n decorations.push(\n utils.getReplaceDecoration({\n widget: new BlockquoteWidget(isDeepInner),\n range: [node.from, node.to],\n }),\n );\n }\n}\n\nexport const blockquoteDecorationPlugin: DecorationPlugin = {\n decorations: [getBlockquoteDecorations],\n selectionDecorations: [getBlockquoteSelectionDecorations],\n};\n"],"names":["utils.getLineDecoration","utils.isInRange","utils.getHideDecoration","utils.getReplaceDecoration"],"mappings":"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"}
@@ -17,7 +17,7 @@ function getBoldDecorations({ decorations, node, view }) {
17
17
  range: [node.from - step, node.to + step],
18
18
  }));
19
19
  }
20
- function getBoldSelectionDecorations({ decorations, node, view, isReadonly, }) {
20
+ function getBoldSelectionDecorations({ decorations, node, view, forceActive, }) {
21
21
  if (node.name !== NAME_OF_BOLD) {
22
22
  return;
23
23
  }
@@ -25,7 +25,7 @@ function getBoldSelectionDecorations({ decorations, node, view, isReadonly, }) {
25
25
  syntaxTree(view.state).resolve(node.from - 1).type.name !== "Emphasis") {
26
26
  return;
27
27
  }
28
- if (isReadonly ||
28
+ if (forceActive ||
29
29
  !view.hasFocus ||
30
30
  !isInRange(view.state.selection.ranges, [node.from, node.to])) {
31
31
  decorations.push(getHideDecoration({ range: [node.from, node.from + 2] }));
@@ -1 +1 @@
1
- {"version":3,"file":"bold-decoration.js","sources":["../../../../../src/extensions/markdown/bold/bold-decoration.ts"],"sourcesContent":["import { syntaxTree } from \"@codemirror/language\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { LIST_OF_BOLD_MARKS, NAME_OF_BOLD } from \"./bold-constants\";\n\nfunction getBoldDecorations({ decorations, node, view }: GetDecorationOptions) {\n if (node.name !== NAME_OF_BOLD) {\n return;\n }\n\n const step =\n LIST_OF_BOLD_MARKS.has(view.state.doc.sliceString(node.from - 1, node.from).charCodeAt(0)) &&\n syntaxTree(view.state).resolve(node.from - 1).type.name !== \"Emphasis\"\n ? 1\n : 0;\n\n decorations.push(\n utils.getMarkDecoration({\n style: styles.bold,\n range: [node.from - step, node.to + step],\n }),\n );\n}\n\nfunction getBoldSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_BOLD) {\n return;\n }\n\n if (\n LIST_OF_BOLD_MARKS.has(view.state.doc.sliceString(node.from - 1, node.from).charCodeAt(0)) &&\n syntaxTree(view.state).resolve(node.from - 1).type.name !== \"Emphasis\"\n ) {\n return;\n }\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + 2] }));\n decorations.push(utils.getHideDecoration({ range: [node.to - 2, node.to] }));\n }\n}\n\nexport const boldDecorationPlugin: DecorationPlugin = {\n decorations: [getBoldDecorations],\n selectionDecorations: [getBoldSelectionDecorations],\n};\n"],"names":["utils.getMarkDecoration","utils.isInRange","utils.getHideDecoration"],"mappings":";;;;;;AAUA,SAAS,kBAAkB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAwB,EAAA;AAC3E,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;QAC9B;;AAGF,IAAA,MAAM,IAAI,GACR,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK;AAC1D,UAAE;UACA,CAAC;AAEP,IAAA,WAAW,CAAC,IAAI,CACdA,iBAAuB,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC,IAAI;AAClB,QAAA,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;AAC1C,KAAA,CAAC,CACH;AACH;AAEA,SAAS,2BAA2B,CAAC,EACnC,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,UAAU,GACoB,EAAA;AAC9B,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;QAC9B;;IAGF,IACE,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1F,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,EACtE;QACA;;AAGF,IAAA,IACE,UAAU;QACV,CAAC,IAAI,CAAC,QAAQ;QACd,CAACC,SAAe,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EACnE;QACA,WAAW,CAAC,IAAI,CAACC,iBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAChF,WAAW,CAAC,IAAI,CAACA,iBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;AAEhF;AAEa,MAAA,oBAAoB,GAAqB;IACpD,WAAW,EAAE,CAAC,kBAAkB,CAAC;IACjC,oBAAoB,EAAE,CAAC,2BAA2B,CAAC;;;;;"}
1
+ {"version":3,"file":"bold-decoration.js","sources":["../../../../../src/extensions/markdown/bold/bold-decoration.ts"],"sourcesContent":["import { syntaxTree } from \"@codemirror/language\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { LIST_OF_BOLD_MARKS, NAME_OF_BOLD } from \"./bold-constants\";\n\nfunction getBoldDecorations({ decorations, node, view }: GetDecorationOptions) {\n if (node.name !== NAME_OF_BOLD) {\n return;\n }\n\n const step =\n LIST_OF_BOLD_MARKS.has(view.state.doc.sliceString(node.from - 1, node.from).charCodeAt(0)) &&\n syntaxTree(view.state).resolve(node.from - 1).type.name !== \"Emphasis\"\n ? 1\n : 0;\n\n decorations.push(\n utils.getMarkDecoration({\n style: styles.bold,\n range: [node.from - step, node.to + step],\n }),\n );\n}\n\nfunction getBoldSelectionDecorations({\n decorations,\n node,\n view,\n forceActive,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_BOLD) {\n return;\n }\n\n if (\n LIST_OF_BOLD_MARKS.has(view.state.doc.sliceString(node.from - 1, node.from).charCodeAt(0)) &&\n syntaxTree(view.state).resolve(node.from - 1).type.name !== \"Emphasis\"\n ) {\n return;\n }\n\n if (\n forceActive ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + 2] }));\n decorations.push(utils.getHideDecoration({ range: [node.to - 2, node.to] }));\n }\n}\n\nexport const boldDecorationPlugin: DecorationPlugin = {\n decorations: [getBoldDecorations],\n selectionDecorations: [getBoldSelectionDecorations],\n};\n"],"names":["utils.getMarkDecoration","utils.isInRange","utils.getHideDecoration"],"mappings":";;;;;;AAUA,SAAS,kBAAkB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAwB,EAAA;AAC3E,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;QAC9B;;AAGF,IAAA,MAAM,IAAI,GACR,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK;AAC1D,UAAE;UACA,CAAC;AAEP,IAAA,WAAW,CAAC,IAAI,CACdA,iBAAuB,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC,IAAI;AAClB,QAAA,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;AAC1C,KAAA,CAAC,CACH;AACH;AAEA,SAAS,2BAA2B,CAAC,EACnC,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,WAAW,GACmB,EAAA;AAC9B,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;QAC9B;;IAGF,IACE,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1F,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,EACtE;QACA;;AAGF,IAAA,IACE,WAAW;QACX,CAAC,IAAI,CAAC,QAAQ;QACd,CAACC,SAAe,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EACnE;QACA,WAAW,CAAC,IAAI,CAACC,iBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAChF,WAAW,CAAC,IAAI,CAACA,iBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;AAEhF;AAEa,MAAA,oBAAoB,GAAqB;IACpD,WAAW,EAAE,CAAC,kBAAkB,CAAC;IACjC,oBAAoB,EAAE,CAAC,2BAA2B,CAAC;;;;;"}
@@ -11,7 +11,7 @@ import styles from '../styles.module.scss.js';
11
11
  import { NAME_OF_FENCED_CODE, NAME_OF_INLINE_CODE, CODE_OF_CODE_MARK } from './code-constants.js';
12
12
  import { CodeWidget } from './code-widget.js';
13
13
 
14
- function getCodeSelectionDecorations({ decorations, node, view, isReadonly, }) {
14
+ function getCodeSelectionDecorations({ decorations, node, view, forceActive, }) {
15
15
  if (node.name !== NAME_OF_FENCED_CODE && node.name !== NAME_OF_INLINE_CODE) {
16
16
  return;
17
17
  }
@@ -85,7 +85,7 @@ function getCodeSelectionDecorations({ decorations, node, view, isReadonly, }) {
85
85
  range: [node.from, node.to],
86
86
  }));
87
87
  }
88
- if (isReadonly ||
88
+ if (forceActive ||
89
89
  !view.hasFocus ||
90
90
  (lines.length > 1 && !isOverlapLine) ||
91
91
  (lines.length === 1 && !isInRange(view.state.selection.ranges, [node.from, node.to]))) {