@gravity-ui/markdown-editor 15.17.0 → 15.19.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 (144) hide show
  1. package/build/cjs/bundle/Editor.d.ts +1 -1
  2. package/build/cjs/bundle/Editor.js +6 -1
  3. package/build/cjs/bundle/Editor.js.map +1 -1
  4. package/build/cjs/bundle/MarkdownEditorView.js +3 -1
  5. package/build/cjs/bundle/MarkdownEditorView.js.map +1 -1
  6. package/build/cjs/bundle/MarkupEditorView.d.ts +2 -1
  7. package/build/cjs/bundle/MarkupEditorView.js +2 -2
  8. package/build/cjs/bundle/MarkupEditorView.js.map +1 -1
  9. package/build/cjs/bundle/ToolbarView.d.ts +3 -2
  10. package/build/cjs/bundle/ToolbarView.js +3 -2
  11. package/build/cjs/bundle/ToolbarView.js.map +1 -1
  12. package/build/cjs/bundle/WysiwygEditorView.d.ts +2 -1
  13. package/build/cjs/bundle/WysiwygEditorView.js +2 -2
  14. package/build/cjs/bundle/WysiwygEditorView.js.map +1 -1
  15. package/build/cjs/bundle/settings/index.d.ts +1 -0
  16. package/build/cjs/bundle/settings/index.js +3 -3
  17. package/build/cjs/bundle/settings/index.js.map +1 -1
  18. package/build/cjs/bundle/types.d.ts +2 -0
  19. package/build/cjs/bundle/types.js.map +1 -1
  20. package/build/cjs/bundle/useMarkdownEditor.js +2 -1
  21. package/build/cjs/bundle/useMarkdownEditor.js.map +1 -1
  22. package/build/cjs/bundle/wysiwyg-preset.d.ts +1 -0
  23. package/build/cjs/bundle/wysiwyg-preset.js +1 -1
  24. package/build/cjs/bundle/wysiwyg-preset.js.map +1 -1
  25. package/build/cjs/extensions/behavior/Clipboard/code.js +8 -3
  26. package/build/cjs/extensions/behavior/Clipboard/code.js.map +1 -1
  27. package/build/cjs/extensions/behavior/Resizable/Resizable.d.ts +2 -1
  28. package/build/cjs/extensions/behavior/Resizable/Resizable.js.map +1 -1
  29. package/build/cjs/extensions/behavior/index.d.ts +1 -0
  30. package/build/cjs/extensions/behavior/index.js +6 -4
  31. package/build/cjs/extensions/behavior/index.js.map +1 -1
  32. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +13 -11
  33. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  34. package/build/cjs/extensions/markdown/CodeBlock/handle-paste.d.ts +1 -1
  35. package/build/cjs/extensions/markdown/CodeBlock/handle-paste.js +21 -5
  36. package/build/cjs/extensions/markdown/CodeBlock/handle-paste.js.map +1 -1
  37. package/build/cjs/i18n/gallery/en.json +5 -0
  38. package/build/cjs/i18n/gallery/index.d.ts +7 -0
  39. package/build/cjs/i18n/gallery/index.js +10 -0
  40. package/build/cjs/i18n/gallery/index.js.map +1 -0
  41. package/build/cjs/i18n/gallery/ru.json +5 -0
  42. package/build/cjs/i18n/placeholder/en.json +1 -0
  43. package/build/cjs/i18n/placeholder/index.d.ts +2 -1
  44. package/build/cjs/i18n/placeholder/ru.json +1 -0
  45. package/build/cjs/toolbar/FlexToolbar.js +9 -3
  46. package/build/cjs/toolbar/FlexToolbar.js.map +1 -1
  47. package/build/cjs/toolbar/PreviewTooltip.d.ts +1 -0
  48. package/build/cjs/toolbar/PreviewTooltip.js +3 -3
  49. package/build/cjs/toolbar/PreviewTooltip.js.map +1 -1
  50. package/build/cjs/toolbar/Toolbar.css +3 -0
  51. package/build/cjs/toolbar/Toolbar.d.ts +1 -1
  52. package/build/cjs/toolbar/Toolbar.js +3 -3
  53. package/build/cjs/toolbar/Toolbar.js.map +1 -1
  54. package/build/cjs/toolbar/ToolbarButton.d.ts +1 -1
  55. package/build/cjs/toolbar/ToolbarButton.js +2 -2
  56. package/build/cjs/toolbar/ToolbarButton.js.map +1 -1
  57. package/build/cjs/toolbar/ToolbarGroup.d.ts +1 -1
  58. package/build/cjs/toolbar/ToolbarGroup.js +4 -4
  59. package/build/cjs/toolbar/ToolbarGroup.js.map +1 -1
  60. package/build/cjs/toolbar/ToolbarListButton.d.ts +1 -1
  61. package/build/cjs/toolbar/ToolbarListButton.js +4 -4
  62. package/build/cjs/toolbar/ToolbarListButton.js.map +1 -1
  63. package/build/cjs/toolbar/types.d.ts +5 -0
  64. package/build/cjs/toolbar/types.js.map +1 -1
  65. package/build/cjs/version.js +1 -1
  66. package/build/cjs/version.js.map +1 -1
  67. package/build/cjs/view/hooks/useFilesGallery/types.d.ts +6 -0
  68. package/build/cjs/view/hooks/useFilesGallery/types.js.map +1 -1
  69. package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.d.ts +2 -2
  70. package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js +39 -4
  71. package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
  72. package/build/esm/bundle/Editor.d.ts +1 -1
  73. package/build/esm/bundle/Editor.js +6 -1
  74. package/build/esm/bundle/Editor.js.map +1 -1
  75. package/build/esm/bundle/MarkdownEditorView.js +3 -1
  76. package/build/esm/bundle/MarkdownEditorView.js.map +1 -1
  77. package/build/esm/bundle/MarkupEditorView.d.ts +2 -1
  78. package/build/esm/bundle/MarkupEditorView.js +2 -2
  79. package/build/esm/bundle/MarkupEditorView.js.map +1 -1
  80. package/build/esm/bundle/ToolbarView.d.ts +3 -2
  81. package/build/esm/bundle/ToolbarView.js +3 -2
  82. package/build/esm/bundle/ToolbarView.js.map +1 -1
  83. package/build/esm/bundle/WysiwygEditorView.d.ts +2 -1
  84. package/build/esm/bundle/WysiwygEditorView.js +2 -2
  85. package/build/esm/bundle/WysiwygEditorView.js.map +1 -1
  86. package/build/esm/bundle/settings/index.d.ts +1 -0
  87. package/build/esm/bundle/settings/index.js +3 -3
  88. package/build/esm/bundle/settings/index.js.map +1 -1
  89. package/build/esm/bundle/types.d.ts +2 -0
  90. package/build/esm/bundle/types.js.map +1 -1
  91. package/build/esm/bundle/useMarkdownEditor.js +2 -1
  92. package/build/esm/bundle/useMarkdownEditor.js.map +1 -1
  93. package/build/esm/bundle/wysiwyg-preset.d.ts +1 -0
  94. package/build/esm/bundle/wysiwyg-preset.js +1 -1
  95. package/build/esm/bundle/wysiwyg-preset.js.map +1 -1
  96. package/build/esm/extensions/behavior/Clipboard/code.js +8 -3
  97. package/build/esm/extensions/behavior/Clipboard/code.js.map +1 -1
  98. package/build/esm/extensions/behavior/Resizable/Resizable.d.ts +2 -1
  99. package/build/esm/extensions/behavior/Resizable/Resizable.js.map +1 -1
  100. package/build/esm/extensions/behavior/index.d.ts +1 -0
  101. package/build/esm/extensions/behavior/index.js +6 -4
  102. package/build/esm/extensions/behavior/index.js.map +1 -1
  103. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +13 -11
  104. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  105. package/build/esm/extensions/markdown/CodeBlock/handle-paste.d.ts +1 -1
  106. package/build/esm/extensions/markdown/CodeBlock/handle-paste.js +20 -5
  107. package/build/esm/extensions/markdown/CodeBlock/handle-paste.js.map +1 -1
  108. package/build/esm/i18n/gallery/en.json +5 -0
  109. package/build/esm/i18n/gallery/index.d.ts +7 -0
  110. package/build/esm/i18n/gallery/index.js +6 -0
  111. package/build/esm/i18n/gallery/index.js.map +1 -0
  112. package/build/esm/i18n/gallery/ru.json +5 -0
  113. package/build/esm/i18n/placeholder/en.json +1 -0
  114. package/build/esm/i18n/placeholder/index.d.ts +2 -1
  115. package/build/esm/i18n/placeholder/ru.json +1 -0
  116. package/build/esm/toolbar/FlexToolbar.js +9 -3
  117. package/build/esm/toolbar/FlexToolbar.js.map +1 -1
  118. package/build/esm/toolbar/PreviewTooltip.d.ts +1 -0
  119. package/build/esm/toolbar/PreviewTooltip.js +3 -3
  120. package/build/esm/toolbar/PreviewTooltip.js.map +1 -1
  121. package/build/esm/toolbar/Toolbar.css +3 -0
  122. package/build/esm/toolbar/Toolbar.d.ts +1 -1
  123. package/build/esm/toolbar/Toolbar.js +3 -3
  124. package/build/esm/toolbar/Toolbar.js.map +1 -1
  125. package/build/esm/toolbar/ToolbarButton.d.ts +1 -1
  126. package/build/esm/toolbar/ToolbarButton.js +2 -2
  127. package/build/esm/toolbar/ToolbarButton.js.map +1 -1
  128. package/build/esm/toolbar/ToolbarGroup.d.ts +1 -1
  129. package/build/esm/toolbar/ToolbarGroup.js +4 -4
  130. package/build/esm/toolbar/ToolbarGroup.js.map +1 -1
  131. package/build/esm/toolbar/ToolbarListButton.d.ts +1 -1
  132. package/build/esm/toolbar/ToolbarListButton.js +4 -4
  133. package/build/esm/toolbar/ToolbarListButton.js.map +1 -1
  134. package/build/esm/toolbar/types.d.ts +5 -0
  135. package/build/esm/toolbar/types.js.map +1 -1
  136. package/build/esm/version.js +1 -1
  137. package/build/esm/version.js.map +1 -1
  138. package/build/esm/view/hooks/useFilesGallery/types.d.ts +6 -0
  139. package/build/esm/view/hooks/useFilesGallery/types.js.map +1 -1
  140. package/build/esm/view/hooks/useFilesGallery/useFilesGallery.d.ts +2 -2
  141. package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js +40 -5
  142. package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
  143. package/build/styles.css +3 -0
  144. package/package.json +4 -4
@@ -5,7 +5,7 @@ import { i18n } from "../i18n/menubar/index.js";
5
5
  import { useSticky } from "../react-utils/useSticky.js";
6
6
  import { FlexToolbar } from "../toolbar/index.js";
7
7
  import { stickyCn } from "./sticky/index.js";
8
- export function ToolbarView({ editor, editorMode, toolbarEditor, toolbarFocus, toolbarConfig, hiddenActionsConfig, settingsVisible, className, children, stickyToolbar, qa, }) {
8
+ export function ToolbarView({ editor, editorMode, toolbarEditor, toolbarFocus, toolbarConfig, toolbarDisplay, hiddenActionsConfig, settingsVisible, className, children, stickyToolbar, qa, }) {
9
9
  const rerender = useUpdate();
10
10
  useLayoutEffect(() => {
11
11
  editor.on('rerender-toolbar', rerender);
@@ -15,10 +15,11 @@ export function ToolbarView({ editor, editorMode, toolbarEditor, toolbarFocus, t
15
15
  }, [editor, rerender]);
16
16
  const wrapperRef = useRef(null);
17
17
  const isStickyActive = useSticky(wrapperRef) && stickyToolbar;
18
+ const mobile = editor.mobile;
18
19
  return (_jsxs("div", { "data-qa": qa, ref: wrapperRef, className: stickyCn.toolbar({
19
20
  withSettings: settingsVisible,
20
21
  stickyActive: isStickyActive,
21
22
  isSticky: stickyToolbar,
22
- }, [className]), children: [_jsx(FlexToolbar, { data: toolbarConfig, hiddenActions: hiddenActionsConfig, editor: toolbarEditor, focus: toolbarFocus, dotsTitle: i18n('more_action'), onClick: (id, attrs) => editor.emit('toolbar-action', { id, attrs, editorMode }) }), children] }));
23
+ }, [className]), children: [_jsx(FlexToolbar, { data: toolbarConfig, hiddenActions: hiddenActionsConfig, editor: toolbarEditor, focus: toolbarFocus, dotsTitle: i18n('more_action'), onClick: (id, attrs) => editor.emit('toolbar-action', { id, attrs, editorMode }), display: toolbarDisplay, disableTooltip: mobile, disableHotkey: mobile, disablePreview: mobile }), children] }));
23
24
  }
24
25
  //# sourceMappingURL=ToolbarView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolbarView.js","sourceRoot":"../../../src","sources":["bundle/ToolbarView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,eAAe,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AAG9C,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAC,IAAI,EAAC,iCAAwB;AACrC,OAAO,EAAC,SAAS,EAAC,oCAAiC;AACnD,OAAO,EAAC,WAAW,EAAyC,4BAAmB;AAG/E,OAAO,EAAC,QAAQ,EAAC,0BAAiB;AAgBlC,MAAM,UAAU,WAAW,CAAI,EAC3B,MAAM,EACN,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,QAAQ,EACR,aAAa,EACb,EAAE,GACgB;IAClB,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;IAC7B,eAAe,CAAC,GAAG,EAAE;QACjB,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QACxC,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,aAAa,CAAC;IAE9D,OAAO,CACH,0BACa,EAAE,EACX,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,QAAQ,CAAC,OAAO,CACvB;YACI,YAAY,EAAE,eAAe;YAC7B,YAAY,EAAE,cAAc;YAC5B,QAAQ,EAAE,aAAa;SAC1B,EACD,CAAC,SAAS,CAAC,CACd,aAED,KAAC,WAAW,IACR,IAAI,EAAE,aAAa,EACnB,aAAa,EAAE,mBAAmB,EAClC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,EAC9B,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAC,CAAC,GAChF,EACD,QAAQ,IACP,CACT,CAAC;AACN,CAAC","sourcesContent":["import {useLayoutEffect, useRef} from 'react';\n\nimport type {QAProps} from '@gravity-ui/uikit';\nimport {useUpdate} from 'react-use';\n\nimport type {ClassNameProps} from '../classname';\nimport {i18n} from '../i18n/menubar';\nimport {useSticky} from '../react-utils/useSticky';\nimport {FlexToolbar, type ToolbarData, type ToolbarItemData} from '../toolbar';\n\nimport type {EditorInt} from './Editor';\nimport {stickyCn} from './sticky';\nimport type {MarkdownEditorMode} from './types';\n\nexport type ToolbarViewProps<T> = ClassNameProps &\n QAProps & {\n editor: EditorInt;\n editorMode: MarkdownEditorMode;\n toolbarEditor: T;\n toolbarFocus: () => void;\n toolbarConfig: ToolbarData<T>;\n settingsVisible?: boolean;\n hiddenActionsConfig?: ToolbarItemData<T>[];\n children?: React.ReactNode;\n stickyToolbar: boolean;\n };\n\nexport function ToolbarView<T>({\n editor,\n editorMode,\n toolbarEditor,\n toolbarFocus,\n toolbarConfig,\n hiddenActionsConfig,\n settingsVisible,\n className,\n children,\n stickyToolbar,\n qa,\n}: ToolbarViewProps<T>) {\n const rerender = useUpdate();\n useLayoutEffect(() => {\n editor.on('rerender-toolbar', rerender);\n return () => {\n editor.off('rerender-toolbar', rerender);\n };\n }, [editor, rerender]);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const isStickyActive = useSticky(wrapperRef) && stickyToolbar;\n\n return (\n <div\n data-qa={qa}\n ref={wrapperRef}\n className={stickyCn.toolbar(\n {\n withSettings: settingsVisible,\n stickyActive: isStickyActive,\n isSticky: stickyToolbar,\n },\n [className],\n )}\n >\n <FlexToolbar\n data={toolbarConfig}\n hiddenActions={hiddenActionsConfig}\n editor={toolbarEditor}\n focus={toolbarFocus}\n dotsTitle={i18n('more_action')}\n onClick={(id, attrs) => editor.emit('toolbar-action', {id, attrs, editorMode})}\n />\n {children}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"ToolbarView.js","sourceRoot":"../../../src","sources":["bundle/ToolbarView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,eAAe,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AAG9C,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAC,IAAI,EAAC,iCAAwB;AACrC,OAAO,EAAC,SAAS,EAAC,oCAAiC;AACnD,OAAO,EAAC,WAAW,EAA8D,4BAAmB;AAGpG,OAAO,EAAC,QAAQ,EAAC,0BAAiB;AAiBlC,MAAM,UAAU,WAAW,CAAI,EAC3B,MAAM,EACN,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,QAAQ,EACR,aAAa,EACb,EAAE,GACgB;IAClB,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;IAC7B,eAAe,CAAC,GAAG,EAAE;QACjB,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QACxC,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,aAAa,CAAC;IAE9D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAE7B,OAAO,CACH,0BACa,EAAE,EACX,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,QAAQ,CAAC,OAAO,CACvB;YACI,YAAY,EAAE,eAAe;YAC7B,YAAY,EAAE,cAAc;YAC5B,QAAQ,EAAE,aAAa;SAC1B,EACD,CAAC,SAAS,CAAC,CACd,aAED,KAAC,WAAW,IACR,IAAI,EAAE,aAAa,EACnB,aAAa,EAAE,mBAAmB,EAClC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,EAC9B,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAC,CAAC,EAC9E,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACxB,EACD,QAAQ,IACP,CACT,CAAC;AACN,CAAC","sourcesContent":["import {useLayoutEffect, useRef} from 'react';\n\nimport type {QAProps} from '@gravity-ui/uikit';\nimport {useUpdate} from 'react-use';\n\nimport type {ClassNameProps} from '../classname';\nimport {i18n} from '../i18n/menubar';\nimport {useSticky} from '../react-utils/useSticky';\nimport {FlexToolbar, type ToolbarData, type ToolbarDisplay, type ToolbarItemData} from '../toolbar';\n\nimport type {EditorInt} from './Editor';\nimport {stickyCn} from './sticky';\nimport type {MarkdownEditorMode} from './types';\n\nexport type ToolbarViewProps<T> = ClassNameProps &\n QAProps & {\n editor: EditorInt;\n editorMode: MarkdownEditorMode;\n toolbarEditor: T;\n toolbarFocus: () => void;\n toolbarConfig: ToolbarData<T>;\n settingsVisible?: boolean;\n hiddenActionsConfig?: ToolbarItemData<T>[];\n children?: React.ReactNode;\n stickyToolbar: boolean;\n toolbarDisplay?: ToolbarDisplay;\n };\n\nexport function ToolbarView<T>({\n editor,\n editorMode,\n toolbarEditor,\n toolbarFocus,\n toolbarConfig,\n toolbarDisplay,\n hiddenActionsConfig,\n settingsVisible,\n className,\n children,\n stickyToolbar,\n qa,\n}: ToolbarViewProps<T>) {\n const rerender = useUpdate();\n useLayoutEffect(() => {\n editor.on('rerender-toolbar', rerender);\n return () => {\n editor.off('rerender-toolbar', rerender);\n };\n }, [editor, rerender]);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const isStickyActive = useSticky(wrapperRef) && stickyToolbar;\n\n const mobile = editor.mobile;\n\n return (\n <div\n data-qa={qa}\n ref={wrapperRef}\n className={stickyCn.toolbar(\n {\n withSettings: settingsVisible,\n stickyActive: isStickyActive,\n isSticky: stickyToolbar,\n },\n [className],\n )}\n >\n <FlexToolbar\n data={toolbarConfig}\n hiddenActions={hiddenActionsConfig}\n editor={toolbarEditor}\n focus={toolbarFocus}\n dotsTitle={i18n('more_action')}\n onClick={(id, attrs) => editor.emit('toolbar-action', {id, attrs, editorMode})}\n display={toolbarDisplay}\n disableTooltip={mobile}\n disableHotkey={mobile}\n disablePreview={mobile}\n />\n {children}\n </div>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { QAProps } from '@gravity-ui/uikit';
2
2
  import { type ClassNameProps } from "../classname.js";
3
3
  import type { EditorInt } from "./Editor.js";
4
- import type { WToolbarData, WToolbarItemData } from "./toolbar/types.js";
4
+ import type { ToolbarDisplay, WToolbarData, WToolbarItemData } from "./toolbar/types.js";
5
5
  import "./WysiwygEditorView.css";
6
6
  export type WysiwygEditorViewProps = ClassNameProps & QAProps & {
7
7
  editor: EditorInt;
@@ -13,5 +13,6 @@ export type WysiwygEditorViewProps = ClassNameProps & QAProps & {
13
13
  toolbarClassName?: string;
14
14
  hiddenActionsConfig?: WToolbarItemData[];
15
15
  children?: React.ReactNode;
16
+ toolbarDisplay?: ToolbarDisplay;
16
17
  };
17
18
  export declare const WysiwygEditorView: import("react").NamedExoticComponent<WysiwygEditorViewProps>;
@@ -9,7 +9,7 @@ import { WysiwygEditorComponent } from "./WysiwygEditorComponent.js";
9
9
  import "./WysiwygEditorView.css";
10
10
  const b = cn('wysiwyg-editor');
11
11
  export const WysiwygEditorView = memo((props) => {
12
- const { editor, autofocus, settingsVisible, toolbarVisible, toolbarConfig, hiddenActionsConfig, qa, className, toolbarClassName, children, stickyToolbar = true, } = props;
12
+ const { editor, autofocus, settingsVisible, toolbarVisible, toolbarConfig, hiddenActionsConfig, qa, className, toolbarClassName, children, stickyToolbar = true, toolbarDisplay, } = props;
13
13
  useRenderTime((time) => {
14
14
  globalLogger.metrics({
15
15
  component: 'wysiwyg-editor',
@@ -22,7 +22,7 @@ export const WysiwygEditorView = memo((props) => {
22
22
  duration: time,
23
23
  });
24
24
  });
25
- return (_jsxs("div", { className: b({ toolbar: toolbarVisible }, [className]), "data-qa": qa, children: [toolbarVisible ? (_jsx(ToolbarView, { qa: "g-md-toolbar-main", editor: editor, editorMode: "wysiwyg", toolbarEditor: editor, stickyToolbar: stickyToolbar, toolbarConfig: toolbarConfig, toolbarFocus: () => editor.focus(), hiddenActionsConfig: hiddenActionsConfig, settingsVisible: settingsVisible, className: b('toolbar', [toolbarClassName]), children: children })) : null, _jsx(WysiwygEditorComponent, { autofocus: autofocus, editor: editor, className: b('editor'), children: _jsx(ReactRendererComponent, { storage: editor.renderStorage }) })] }));
25
+ return (_jsxs("div", { className: b({ toolbar: toolbarVisible }, [className]), "data-qa": qa, children: [toolbarVisible ? (_jsx(ToolbarView, { qa: "g-md-toolbar-main", editor: editor, editorMode: "wysiwyg", toolbarEditor: editor, stickyToolbar: stickyToolbar, toolbarConfig: toolbarConfig, toolbarFocus: () => editor.focus(), hiddenActionsConfig: hiddenActionsConfig, settingsVisible: settingsVisible, className: b('toolbar', [toolbarClassName]), toolbarDisplay: toolbarDisplay, children: children })) : null, _jsx(WysiwygEditorComponent, { autofocus: autofocus, editor: editor, className: b('editor'), children: _jsx(ReactRendererComponent, { storage: editor.renderStorage }) })] }));
26
26
  });
27
27
  WysiwygEditorView.displayName = 'MarkdownWysiwgEditorView';
28
28
  //# sourceMappingURL=WysiwygEditorView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WysiwygEditorView.js","sourceRoot":"../../../src","sources":["bundle/WysiwygEditorView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAI3B,OAAO,EAAsB,EAAE,EAAC,wBAAqB;AACrD,OAAO,EAAC,sBAAsB,EAAC,+BAAsB;AACrD,OAAO,EAAC,YAAY,EAAC,qBAAkB;AACvC,OAAO,EAAC,aAAa,EAAC,gCAA6B;AAGnD,OAAO,EAAC,WAAW,EAAC,yBAAsB;AAC1C,OAAO,EAAC,sBAAsB,EAAC,oCAAiC;AAGhE,iCAAkC;AAElC,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC;AAe/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAyB,CAAC,KAAK,EAAE,EAAE;IACpE,MAAM,EACF,MAAM,EACN,SAAS,EACT,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,EAAE,EACF,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,aAAa,GAAG,IAAI,GACvB,GAAG,KAAK,CAAC;IACV,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE;QACnB,YAAY,CAAC,OAAO,CAAC;YACjB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAClB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,cAAc,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC,aAAW,EAAE,aACjE,cAAc,CAAC,CAAC,CAAC,CACd,KAAC,WAAW,IACR,EAAE,EAAC,mBAAmB,EACtB,MAAM,EAAE,MAAM,EACd,UAAU,EAAC,SAAS,EACpB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAClC,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,YAE1C,QAAQ,GACC,CACjB,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,sBAAsB,IAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YAChF,KAAC,sBAAsB,IAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAI,GACpC,IACvB,CACT,CAAC;AACN,CAAC,CAAC,CAAC;AACH,iBAAiB,CAAC,WAAW,GAAG,0BAA0B,CAAC","sourcesContent":["import {memo} from 'react';\n\nimport type {QAProps} from '@gravity-ui/uikit';\n\nimport {type ClassNameProps, cn} from '../classname';\nimport {ReactRendererComponent} from '../extensions';\nimport {globalLogger} from '../logger';\nimport {useRenderTime} from '../react-utils/hooks';\n\nimport type {EditorInt} from './Editor';\nimport {ToolbarView} from './ToolbarView';\nimport {WysiwygEditorComponent} from './WysiwygEditorComponent';\nimport type {WToolbarData, WToolbarItemData} from './toolbar/types';\n\nimport './WysiwygEditorView.scss';\n\nconst b = cn('wysiwyg-editor');\n\nexport type WysiwygEditorViewProps = ClassNameProps &\n QAProps & {\n editor: EditorInt;\n autofocus?: boolean;\n settingsVisible?: boolean;\n toolbarConfig: WToolbarData;\n toolbarVisible?: boolean;\n stickyToolbar?: boolean;\n toolbarClassName?: string;\n hiddenActionsConfig?: WToolbarItemData[];\n children?: React.ReactNode;\n };\n\nexport const WysiwygEditorView = memo<WysiwygEditorViewProps>((props) => {\n const {\n editor,\n autofocus,\n settingsVisible,\n toolbarVisible,\n toolbarConfig,\n hiddenActionsConfig,\n qa,\n className,\n toolbarClassName,\n children,\n stickyToolbar = true,\n } = props;\n useRenderTime((time) => {\n globalLogger.metrics({\n component: 'wysiwyg-editor',\n event: 'render',\n duration: time,\n });\n editor.logger.metrics({\n component: 'wysiwyg-editor',\n event: 'render',\n duration: time,\n });\n });\n return (\n <div className={b({toolbar: toolbarVisible}, [className])} data-qa={qa}>\n {toolbarVisible ? (\n <ToolbarView\n qa=\"g-md-toolbar-main\"\n editor={editor}\n editorMode=\"wysiwyg\"\n toolbarEditor={editor}\n stickyToolbar={stickyToolbar}\n toolbarConfig={toolbarConfig}\n toolbarFocus={() => editor.focus()}\n hiddenActionsConfig={hiddenActionsConfig}\n settingsVisible={settingsVisible}\n className={b('toolbar', [toolbarClassName])}\n >\n {children}\n </ToolbarView>\n ) : null}\n <WysiwygEditorComponent autofocus={autofocus} editor={editor} className={b('editor')}>\n <ReactRendererComponent storage={editor.renderStorage} />\n </WysiwygEditorComponent>\n </div>\n );\n});\nWysiwygEditorView.displayName = 'MarkdownWysiwgEditorView';\n"]}
1
+ {"version":3,"file":"WysiwygEditorView.js","sourceRoot":"../../../src","sources":["bundle/WysiwygEditorView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAI3B,OAAO,EAAsB,EAAE,EAAC,wBAAqB;AACrD,OAAO,EAAC,sBAAsB,EAAC,+BAAsB;AACrD,OAAO,EAAC,YAAY,EAAC,qBAAkB;AACvC,OAAO,EAAC,aAAa,EAAC,gCAA6B;AAGnD,OAAO,EAAC,WAAW,EAAC,yBAAsB;AAC1C,OAAO,EAAC,sBAAsB,EAAC,oCAAiC;AAGhE,iCAAkC;AAElC,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC;AAgB/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAyB,CAAC,KAAK,EAAE,EAAE;IACpE,MAAM,EACF,MAAM,EACN,SAAS,EACT,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,EAAE,EACF,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,cAAc,GACjB,GAAG,KAAK,CAAC;IAEV,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE;QACnB,YAAY,CAAC,OAAO,CAAC;YACjB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAClB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,cAAc,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC,aAAW,EAAE,aACjE,cAAc,CAAC,CAAC,CAAC,CACd,KAAC,WAAW,IACR,EAAE,EAAC,mBAAmB,EACtB,MAAM,EAAE,MAAM,EACd,UAAU,EAAC,SAAS,EACpB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAClC,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAC3C,cAAc,EAAE,cAAc,YAE7B,QAAQ,GACC,CACjB,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,sBAAsB,IAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YAChF,KAAC,sBAAsB,IAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAI,GACpC,IACvB,CACT,CAAC;AACN,CAAC,CAAC,CAAC;AACH,iBAAiB,CAAC,WAAW,GAAG,0BAA0B,CAAC","sourcesContent":["import {memo} from 'react';\n\nimport type {QAProps} from '@gravity-ui/uikit';\n\nimport {type ClassNameProps, cn} from '../classname';\nimport {ReactRendererComponent} from '../extensions';\nimport {globalLogger} from '../logger';\nimport {useRenderTime} from '../react-utils/hooks';\n\nimport type {EditorInt} from './Editor';\nimport {ToolbarView} from './ToolbarView';\nimport {WysiwygEditorComponent} from './WysiwygEditorComponent';\nimport type {ToolbarDisplay, WToolbarData, WToolbarItemData} from './toolbar/types';\n\nimport './WysiwygEditorView.scss';\n\nconst b = cn('wysiwyg-editor');\n\nexport type WysiwygEditorViewProps = ClassNameProps &\n QAProps & {\n editor: EditorInt;\n autofocus?: boolean;\n settingsVisible?: boolean;\n toolbarConfig: WToolbarData;\n toolbarVisible?: boolean;\n stickyToolbar?: boolean;\n toolbarClassName?: string;\n hiddenActionsConfig?: WToolbarItemData[];\n children?: React.ReactNode;\n toolbarDisplay?: ToolbarDisplay;\n };\n\nexport const WysiwygEditorView = memo<WysiwygEditorViewProps>((props) => {\n const {\n editor,\n autofocus,\n settingsVisible,\n toolbarVisible,\n toolbarConfig,\n hiddenActionsConfig,\n qa,\n className,\n toolbarClassName,\n children,\n stickyToolbar = true,\n toolbarDisplay,\n } = props;\n\n useRenderTime((time) => {\n globalLogger.metrics({\n component: 'wysiwyg-editor',\n event: 'render',\n duration: time,\n });\n editor.logger.metrics({\n component: 'wysiwyg-editor',\n event: 'render',\n duration: time,\n });\n });\n\n return (\n <div className={b({toolbar: toolbarVisible}, [className])} data-qa={qa}>\n {toolbarVisible ? (\n <ToolbarView\n qa=\"g-md-toolbar-main\"\n editor={editor}\n editorMode=\"wysiwyg\"\n toolbarEditor={editor}\n stickyToolbar={stickyToolbar}\n toolbarConfig={toolbarConfig}\n toolbarFocus={() => editor.focus()}\n hiddenActionsConfig={hiddenActionsConfig}\n settingsVisible={settingsVisible}\n className={b('toolbar', [toolbarClassName])}\n toolbarDisplay={toolbarDisplay}\n >\n {children}\n </ToolbarView>\n ) : null}\n <WysiwygEditorComponent autofocus={autofocus} editor={editor} className={b('editor')}>\n <ReactRendererComponent storage={editor.renderStorage} />\n </WysiwygEditorComponent>\n </div>\n );\n});\nWysiwygEditorView.displayName = 'MarkdownWysiwgEditorView';\n"]}
@@ -20,5 +20,6 @@ type SettingsContentProps = ClassNameProps & QAProps & {
20
20
  splitMode?: MarkdownEditorSplitMode;
21
21
  splitModeEnabled?: boolean;
22
22
  onSplitModeChange?: (splitModeEnabled: boolean) => void;
23
+ disableMark?: boolean;
23
24
  };
24
25
  export {};
@@ -24,7 +24,7 @@ export const EditorSettings = memo(function EditorSettings(props) {
24
24
  return (_jsxs("div", { className: bSettings(null, [className]), children: [renderPreviewButton && (_jsxs(_Fragment, { children: [_jsx(ActionTooltip, { openDelay: ToolbarTooltipDelay.Open, closeDelay: ToolbarTooltipDelay.Close, title: i18n('preview_hint'), hotkey: "mod+shift+p", children: _jsx(Button, { qa: "g-md-markup-preview-button", size: "m", view: "flat", pin: "round-round", className: bSettings('preview-button'), onClick: () => onShowPreviewChange?.(!showPreview), selected: showPreview, children: _jsx(Icon, { data: Eye }) }) }), settingsVisible && _jsx("div", { className: bSettings('separator') })] })), areSettingsVisible && (_jsxs(_Fragment, { children: [_jsx(Button, { size: "m", view: "flat", pin: "round-round", onClick: togglePopup, ref: setChevronElement, qa: "g-md-settings-button", className: bSettings('dropdown-button'), children: _jsx(Icon, { data: Gear }) }), _jsx(Popup, { open: popupShown, anchorElement: chevronElement, placement: placement, onOpenChange: hidePopup, children: _jsx(SettingsContent, { ...props, qa: "g-md-settings-content", onClose: hidePopup, className: bSettings('content') }) })] }))] }));
25
25
  });
26
26
  const mdHelpPlacement = ['bottom', 'bottom-end', 'right-start', 'right', 'left'];
27
- const SettingsContent = function SettingsContent({ mode, onClose, onModeChange, toolbarVisibility, onToolbarVisibilityChange, onSplitModeChange, splitMode = false, splitModeEnabled, className, showPreview, settingsVisible, qa, }) {
27
+ const SettingsContent = function SettingsContent({ mode, onClose, onModeChange, toolbarVisibility, onToolbarVisibilityChange, onSplitModeChange, splitMode = false, splitModeEnabled, className, showPreview, settingsVisible, qa, disableMark, }) {
28
28
  const isSettingsArray = Array.isArray(settingsVisible);
29
29
  const showModeSetting = isSettingsArray ? settingsVisible?.includes('mode') : true;
30
30
  const showToolbarSetting = isSettingsArray ? settingsVisible?.includes('toolbar') : true;
@@ -35,13 +35,13 @@ const SettingsContent = function SettingsContent({ mode, onClose, onModeChange,
35
35
  }, iconStart: _jsx(Icon, { data: WysiwygModeIcon }), children: i18n('settings_wysiwyg') }), _jsxs(Menu.Item, { qa: "g-md-settings-mode-markup", active: mode === 'markup', onClick: () => {
36
36
  onModeChange('markup');
37
37
  onClose();
38
- }, iconStart: _jsx(Icon, { data: LogoMarkdown }), children: [i18n('settings_markup'), _jsx(HelpMark, { popoverProps: {
38
+ }, iconStart: _jsx(Icon, { data: LogoMarkdown }), children: [i18n('settings_markup'), !disableMark && (_jsx(HelpMark, { popoverProps: {
39
39
  placement: mdHelpPlacement,
40
40
  modal: false,
41
41
  }, className: bContent('mode-help'), children: _jsx("div", { onClick: (e) => {
42
42
  // stop clicks propagation
43
43
  // because otherwise click in MarkdownHints handled as click on MenuItem
44
44
  e.stopPropagation();
45
- }, children: _jsx(MarkdownHints, {}) }) })] })] })), showModeSetting && (showSplitModeSetting || showToolbarSetting) && (_jsx("div", { className: bContent('separator') })), showToolbarSetting && !showPreview && (_jsxs("div", { className: bContent('toolbar'), children: [_jsx(Checkbox, { size: "m", checked: toolbarVisibility, onUpdate: onToolbarVisibilityChange, children: i18n('settings_menubar') }), _jsx("div", { className: bContent('toolbar-hint'), children: i18n('settings_hint') })] })), showSplitModeSetting && splitMode && (_jsxs("div", { className: bContent('split-mode'), children: [_jsx(Checkbox, { size: "m", disabled: mode !== 'markup', checked: splitModeEnabled, onUpdate: onSplitModeChange ?? noop, children: i18n('settings_split-mode') }), _jsx("div", { className: bContent('toolbar-hint'), children: i18n('settings_split-mode-hint') })] })), _jsx("span", { className: bContent('version'), children: VERSION })] }));
45
+ }, children: _jsx(MarkdownHints, {}) }) }))] })] })), showModeSetting && (showSplitModeSetting || showToolbarSetting) && (_jsx("div", { className: bContent('separator') })), showToolbarSetting && !showPreview && (_jsxs("div", { className: bContent('toolbar'), children: [_jsx(Checkbox, { size: "m", checked: toolbarVisibility, onUpdate: onToolbarVisibilityChange, children: i18n('settings_menubar') }), _jsx("div", { className: bContent('toolbar-hint'), children: i18n('settings_hint') })] })), showSplitModeSetting && splitMode && (_jsxs("div", { className: bContent('split-mode'), children: [_jsx(Checkbox, { size: "m", disabled: mode !== 'markup', checked: splitModeEnabled, onUpdate: onSplitModeChange ?? noop, children: i18n('settings_split-mode') }), _jsx("div", { className: bContent('toolbar-hint'), children: i18n('settings_split-mode-hint') })] })), _jsx("span", { className: bContent('version'), children: VERSION })] }));
46
46
  };
47
47
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["bundle/settings/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport {memo, useState} from 'react';\n\nimport {Eye, Gear, LogoMarkdown} from '@gravity-ui/icons';\nimport {\n ActionTooltip,\n Button,\n Checkbox,\n HelpMark,\n Icon,\n Menu,\n Popup,\n type PopupPlacement,\n type QAProps,\n} from '@gravity-ui/uikit';\n\nimport {type ClassNameProps, cn} from '../../classname';\nimport {i18n} from '../../i18n/bundle';\nimport WysiwygModeIcon from '../../icons/WysiwygMode';\nimport {noop} from '../../lodash';\nimport {useBooleanState} from '../../react-utils/hooks';\nimport {ToolbarTooltipDelay} from '../../toolbar';\nimport {VERSION} from '../../version';\nimport type {MarkdownEditorMode, MarkdownEditorSplitMode} from '../types';\n\nimport {MarkdownHints} from './MarkdownHints';\n\nimport './index.scss';\n\nconst placement: PopupPlacement = ['bottom-end', 'top-end'];\n\nconst bSettings = cn('editor-settings');\nconst bContent = cn('settings-content');\n\nexport type EditorSettingsProps = Omit<SettingsContentProps, 'onClose'> & {\n renderPreviewButton?: boolean;\n settingsVisible?: boolean | SettingItems[];\n};\n\nexport const EditorSettings = memo<EditorSettingsProps>(function EditorSettings(props) {\n const {className, onShowPreviewChange, showPreview, renderPreviewButton, settingsVisible} =\n props;\n const [chevronElement, setChevronElement] = useState<HTMLButtonElement | null>(null);\n const [popupShown, , hidePopup, togglePopup] = useBooleanState(false);\n\n const areSettingsVisible =\n settingsVisible === true || (Array.isArray(settingsVisible) && settingsVisible.length > 0);\n\n return (\n <div className={bSettings(null, [className])}>\n {renderPreviewButton && (\n <>\n <ActionTooltip\n openDelay={ToolbarTooltipDelay.Open}\n closeDelay={ToolbarTooltipDelay.Close}\n title={i18n('preview_hint')}\n hotkey=\"mod+shift+p\"\n >\n <Button\n qa=\"g-md-markup-preview-button\"\n size=\"m\"\n view=\"flat\"\n pin=\"round-round\"\n className={bSettings('preview-button')}\n onClick={() => onShowPreviewChange?.(!showPreview)}\n selected={showPreview}\n >\n <Icon data={Eye} />\n </Button>\n </ActionTooltip>\n {settingsVisible && <div className={bSettings('separator')} />}\n </>\n )}\n {areSettingsVisible && (\n <>\n <Button\n size=\"m\"\n view=\"flat\"\n pin=\"round-round\"\n onClick={togglePopup}\n ref={setChevronElement}\n qa=\"g-md-settings-button\"\n className={bSettings('dropdown-button')}\n >\n <Icon data={Gear} />\n </Button>\n <Popup\n open={popupShown}\n anchorElement={chevronElement}\n placement={placement}\n onOpenChange={hidePopup}\n >\n <SettingsContent\n {...props}\n qa=\"g-md-settings-content\"\n onClose={hidePopup}\n className={bSettings('content')}\n />\n </Popup>\n </>\n )}\n </div>\n );\n});\n\nexport type SettingItems = 'mode' | 'toolbar' | 'split';\n\ntype SettingsContentProps = ClassNameProps &\n QAProps & {\n mode: MarkdownEditorMode;\n onClose: () => void;\n onModeChange: (mode: MarkdownEditorMode) => void;\n onShowPreviewChange: (showPreview: boolean) => void;\n showPreview: boolean;\n toolbarVisibility: boolean;\n settingsVisible?: SettingItems[] | boolean;\n onToolbarVisibilityChange: (val: boolean) => void;\n splitMode?: MarkdownEditorSplitMode;\n splitModeEnabled?: boolean;\n onSplitModeChange?: (splitModeEnabled: boolean) => void;\n };\n\nconst mdHelpPlacement: PopupPlacement = ['bottom', 'bottom-end', 'right-start', 'right', 'left'];\n\nconst SettingsContent: React.FC<SettingsContentProps> = function SettingsContent({\n mode,\n onClose,\n onModeChange,\n toolbarVisibility,\n onToolbarVisibilityChange,\n onSplitModeChange,\n splitMode = false,\n splitModeEnabled,\n className,\n showPreview,\n settingsVisible,\n qa,\n}) {\n const isSettingsArray = Array.isArray(settingsVisible);\n const showModeSetting = isSettingsArray ? settingsVisible?.includes('mode') : true;\n const showToolbarSetting = isSettingsArray ? settingsVisible?.includes('toolbar') : true;\n const showSplitModeSetting = isSettingsArray ? settingsVisible?.includes('split') : true;\n\n return (\n <div className={bContent(null, [className])} data-qa={qa}>\n {showModeSetting && (\n <Menu size=\"l\" className={bContent('mode')}>\n <Menu.Item\n qa=\"g-md-settings-mode-wysiwyg\"\n active={mode === 'wysiwyg'}\n onClick={() => {\n onModeChange('wysiwyg');\n onClose();\n }}\n iconStart={<Icon data={WysiwygModeIcon} />}\n >\n {i18n('settings_wysiwyg')}\n </Menu.Item>\n <Menu.Item\n qa=\"g-md-settings-mode-markup\"\n active={mode === 'markup'}\n onClick={() => {\n onModeChange('markup');\n onClose();\n }}\n iconStart={<Icon data={LogoMarkdown} />}\n >\n {i18n('settings_markup')}\n <HelpMark\n popoverProps={{\n placement: mdHelpPlacement,\n modal: false,\n }}\n className={bContent('mode-help')}\n >\n <div\n onClick={(e) => {\n // stop clicks propagation\n // because otherwise click in MarkdownHints handled as click on MenuItem\n e.stopPropagation();\n }}\n >\n <MarkdownHints />\n </div>\n </HelpMark>\n </Menu.Item>\n </Menu>\n )}\n {showModeSetting && (showSplitModeSetting || showToolbarSetting) && (\n <div className={bContent('separator')} />\n )}\n {showToolbarSetting && !showPreview && (\n <div className={bContent('toolbar')}>\n <Checkbox\n size=\"m\"\n checked={toolbarVisibility}\n onUpdate={onToolbarVisibilityChange}\n >\n {i18n('settings_menubar')}\n </Checkbox>\n <div className={bContent('toolbar-hint')}>{i18n('settings_hint')}</div>\n </div>\n )}\n {showSplitModeSetting && splitMode && (\n <div className={bContent('split-mode')}>\n <Checkbox\n size=\"m\"\n disabled={mode !== 'markup'}\n checked={splitModeEnabled}\n onUpdate={onSplitModeChange ?? noop}\n >\n {i18n('settings_split-mode')}\n </Checkbox>\n <div className={bContent('toolbar-hint')}>\n {i18n('settings_split-mode-hint')}\n </div>\n </div>\n )}\n <span className={bContent('version')}>{VERSION}</span>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["bundle/settings/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport {memo, useState} from 'react';\n\nimport {Eye, Gear, LogoMarkdown} from '@gravity-ui/icons';\nimport {\n ActionTooltip,\n Button,\n Checkbox,\n HelpMark,\n Icon,\n Menu,\n Popup,\n type PopupPlacement,\n type QAProps,\n} from '@gravity-ui/uikit';\n\nimport {type ClassNameProps, cn} from '../../classname';\nimport {i18n} from '../../i18n/bundle';\nimport WysiwygModeIcon from '../../icons/WysiwygMode';\nimport {noop} from '../../lodash';\nimport {useBooleanState} from '../../react-utils/hooks';\nimport {ToolbarTooltipDelay} from '../../toolbar';\nimport {VERSION} from '../../version';\nimport type {MarkdownEditorMode, MarkdownEditorSplitMode} from '../types';\n\nimport {MarkdownHints} from './MarkdownHints';\n\nimport './index.scss';\n\nconst placement: PopupPlacement = ['bottom-end', 'top-end'];\n\nconst bSettings = cn('editor-settings');\nconst bContent = cn('settings-content');\n\nexport type EditorSettingsProps = Omit<SettingsContentProps, 'onClose'> & {\n renderPreviewButton?: boolean;\n settingsVisible?: boolean | SettingItems[];\n};\n\nexport const EditorSettings = memo<EditorSettingsProps>(function EditorSettings(props) {\n const {className, onShowPreviewChange, showPreview, renderPreviewButton, settingsVisible} =\n props;\n const [chevronElement, setChevronElement] = useState<HTMLButtonElement | null>(null);\n const [popupShown, , hidePopup, togglePopup] = useBooleanState(false);\n\n const areSettingsVisible =\n settingsVisible === true || (Array.isArray(settingsVisible) && settingsVisible.length > 0);\n\n return (\n <div className={bSettings(null, [className])}>\n {renderPreviewButton && (\n <>\n <ActionTooltip\n openDelay={ToolbarTooltipDelay.Open}\n closeDelay={ToolbarTooltipDelay.Close}\n title={i18n('preview_hint')}\n hotkey=\"mod+shift+p\"\n >\n <Button\n qa=\"g-md-markup-preview-button\"\n size=\"m\"\n view=\"flat\"\n pin=\"round-round\"\n className={bSettings('preview-button')}\n onClick={() => onShowPreviewChange?.(!showPreview)}\n selected={showPreview}\n >\n <Icon data={Eye} />\n </Button>\n </ActionTooltip>\n {settingsVisible && <div className={bSettings('separator')} />}\n </>\n )}\n {areSettingsVisible && (\n <>\n <Button\n size=\"m\"\n view=\"flat\"\n pin=\"round-round\"\n onClick={togglePopup}\n ref={setChevronElement}\n qa=\"g-md-settings-button\"\n className={bSettings('dropdown-button')}\n >\n <Icon data={Gear} />\n </Button>\n <Popup\n open={popupShown}\n anchorElement={chevronElement}\n placement={placement}\n onOpenChange={hidePopup}\n >\n <SettingsContent\n {...props}\n qa=\"g-md-settings-content\"\n onClose={hidePopup}\n className={bSettings('content')}\n />\n </Popup>\n </>\n )}\n </div>\n );\n});\n\nexport type SettingItems = 'mode' | 'toolbar' | 'split';\n\ntype SettingsContentProps = ClassNameProps &\n QAProps & {\n mode: MarkdownEditorMode;\n onClose: () => void;\n onModeChange: (mode: MarkdownEditorMode) => void;\n onShowPreviewChange: (showPreview: boolean) => void;\n showPreview: boolean;\n toolbarVisibility: boolean;\n settingsVisible?: SettingItems[] | boolean;\n onToolbarVisibilityChange: (val: boolean) => void;\n splitMode?: MarkdownEditorSplitMode;\n splitModeEnabled?: boolean;\n onSplitModeChange?: (splitModeEnabled: boolean) => void;\n disableMark?: boolean;\n };\n\nconst mdHelpPlacement: PopupPlacement = ['bottom', 'bottom-end', 'right-start', 'right', 'left'];\n\nconst SettingsContent: React.FC<SettingsContentProps> = function SettingsContent({\n mode,\n onClose,\n onModeChange,\n toolbarVisibility,\n onToolbarVisibilityChange,\n onSplitModeChange,\n splitMode = false,\n splitModeEnabled,\n className,\n showPreview,\n settingsVisible,\n qa,\n disableMark,\n}) {\n const isSettingsArray = Array.isArray(settingsVisible);\n const showModeSetting = isSettingsArray ? settingsVisible?.includes('mode') : true;\n const showToolbarSetting = isSettingsArray ? settingsVisible?.includes('toolbar') : true;\n const showSplitModeSetting = isSettingsArray ? settingsVisible?.includes('split') : true;\n\n return (\n <div className={bContent(null, [className])} data-qa={qa}>\n {showModeSetting && (\n <Menu size=\"l\" className={bContent('mode')}>\n <Menu.Item\n qa=\"g-md-settings-mode-wysiwyg\"\n active={mode === 'wysiwyg'}\n onClick={() => {\n onModeChange('wysiwyg');\n onClose();\n }}\n iconStart={<Icon data={WysiwygModeIcon} />}\n >\n {i18n('settings_wysiwyg')}\n </Menu.Item>\n <Menu.Item\n qa=\"g-md-settings-mode-markup\"\n active={mode === 'markup'}\n onClick={() => {\n onModeChange('markup');\n onClose();\n }}\n iconStart={<Icon data={LogoMarkdown} />}\n >\n {i18n('settings_markup')}\n {!disableMark && (\n <HelpMark\n popoverProps={{\n placement: mdHelpPlacement,\n modal: false,\n }}\n className={bContent('mode-help')}\n >\n <div\n onClick={(e) => {\n // stop clicks propagation\n // because otherwise click in MarkdownHints handled as click on MenuItem\n e.stopPropagation();\n }}\n >\n <MarkdownHints />\n </div>\n </HelpMark>\n )}\n </Menu.Item>\n </Menu>\n )}\n {showModeSetting && (showSplitModeSetting || showToolbarSetting) && (\n <div className={bContent('separator')} />\n )}\n {showToolbarSetting && !showPreview && (\n <div className={bContent('toolbar')}>\n <Checkbox\n size=\"m\"\n checked={toolbarVisibility}\n onUpdate={onToolbarVisibilityChange}\n >\n {i18n('settings_menubar')}\n </Checkbox>\n <div className={bContent('toolbar-hint')}>{i18n('settings_hint')}</div>\n </div>\n )}\n {showSplitModeSetting && splitMode && (\n <div className={bContent('split-mode')}>\n <Checkbox\n size=\"m\"\n disabled={mode !== 'markup'}\n checked={splitModeEnabled}\n onUpdate={onSplitModeChange ?? noop}\n >\n {i18n('settings_split-mode')}\n </Checkbox>\n <div className={bContent('toolbar-hint')}>\n {i18n('settings_split-mode-hint')}\n </div>\n </div>\n )}\n <span className={bContent('version')}>{VERSION}</span>\n </div>\n );\n};\n"]}
@@ -189,4 +189,6 @@ export type MarkdownEditorOptions = {
189
189
  /** Options for wysiwyg mode */
190
190
  wysiwygConfig?: MarkdownEditorWysiwygConfig;
191
191
  logger?: Logger2.ILogger;
192
+ /** Mobile view */
193
+ mobile?: boolean;
192
194
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"../../../src","sources":["bundle/types.ts"],"names":[],"mappings":"AAAA,mDAAmD","sourcesContent":["// public types, re-exported in src/bundle/index.ts\n\nimport type {ReactNode} from 'react';\n\nimport type {MarkupString} from '../common';\nimport type {EscapeConfig, Extension} from '../core';\nimport type {Logger2} from '../logger';\nimport type {CreateCodemirrorParams, YfmLangOptions} from '../markup';\nimport type {FileUploadHandler} from '../utils';\nimport type {DirectiveSyntaxContext, DirectiveSyntaxOption} from '../utils/directive';\n\nimport type {ChangeEditorModeOptions} from './Editor';\nimport type {ExtensionsOptions as WysiwygPresetExtensionsOptions} from './wysiwyg-preset';\n\nexport type {Editor as MarkdownEditorInstance} from './Editor';\nexport type MarkdownEditorMode = 'wysiwyg' | 'markup';\nexport type MarkdownEditorPreset = 'zero' | 'commonmark' | 'default' | 'yfm' | 'full';\nexport type MarkdownEditorSplitMode = false | 'horizontal' | 'vertical';\n\nexport type RenderPreviewParams = {\n getValue: () => MarkupString;\n mode: 'preview' | 'split';\n md: Readonly<MarkdownEditorMdOptions>;\n directiveSyntax: Pick<DirectiveSyntaxContext, 'option' | 'valueFor' | 'mdPluginValueFor'>;\n};\nexport type RenderPreview = (params: RenderPreviewParams) => ReactNode;\n\nexport type ParseInsertedUrlAsImage = (text: string) => {imageUrl: string; title?: string} | null;\n\nexport type WysiwygPlaceholderOptions = {\n value?: string | (() => string);\n /** Default – empty-doc\n Values:\n - 'empty-doc' – The placeholder will only be shown when the document is completely empty;\n - 'empty-row-top-level' – The placeholder will be displayed in an empty line that is at the top level of the document structure;\n - 'empty-row' – The placeholder will be shown in any empty line within the document, regardless of its nesting level.\n */\n behavior?: 'empty-doc' | 'empty-row-top-level' | 'empty-row';\n};\n\nexport type MarkdownEditorMdOptions = {\n html?: boolean;\n breaks?: boolean;\n linkify?: boolean;\n linkifyTlds?: string | string[];\n};\n\nexport type MarkdownEditorInitialOptions = {\n markup?: MarkupString;\n /** Default – wysiwyg */\n mode?: MarkdownEditorMode;\n /** Default – true */\n toolbarVisible?: boolean;\n /**\n * Default – false\n *\n * Note: has no effect if `MarkdownEditorMarkupConfig.splitMode` is set to false or is not set.\n */\n splitModeEnabled?: boolean;\n};\n\nexport type MarkdownEditorHandlers = {\n /** Pass this handler to allow uploading files from device. */\n uploadFile?: FileUploadHandler;\n};\n\nexport type MarkdownEditorExperimentalOptions = {\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n /**\n * If we need to enable new image size calculations\n *\n * @default false\n */\n enableNewImageSizeCalculation?: boolean;\n /**\n * Called before switching from the markup editor to the wysiwyg editor.\n * You can use it to pre-process the value from the markup editor before it gets into the wysiwyg editor.\n */\n prepareRawMarkup?: (value: MarkupString) => MarkupString;\n beforeEditorModeChange?: (\n options: Pick<ChangeEditorModeOptions, 'mode' | 'reason'>,\n ) => boolean | undefined;\n /**\n * Enables support of directive syntax for diplodoc (YFM) extensions.\n *\n * **Note:** This setting affects parsing of markdown markup and serializing to markdown markup.\n * Be careful with it and use it in consistency with diplodoc/transform and diplodoc-extensions.\n *\n * Before enabling this option, make sure that appropriate versions of diplodoc/transform and diplodoc-extensions are installed.\n *\n * You can pass an object in `key:value` format to provide different behaviour for each extension individually.\n *\n * Values:\n * - 'disabled' – directive syntax is disabled;\n * - 'enabled' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using old syntax;\n * - 'preserve' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using directive syntax;\n * - 'overwrite' – existing blocks will be overwritten using directive syntax through serialization;\n * - 'only' – old syntax is disabled, only directive syntax available. Blocks in old syntax will not be parsed.\n *\n * Default value is 'disabled'.\n */\n directiveSyntax?: DirectiveSyntaxOption;\n /**\n * If we need support for empty strings\n *\n * @default false\n */\n preserveEmptyRows?: boolean;\n /**\n * Preserves the original formatting of unmodified blocks,\n * restoring their structure during serialization\n *\n * **Use case:** Maintain consistent markup when switching modes\n *\n * **Note:** Applies to tracked blocks: `yfm_table`\n *\n * @default false\n */\n preserveMarkupFormatting?: boolean;\n};\n\nexport type MarkdownEditorMarkupConfig = {\n /**\n * Pass the rendering function to preview the markdown content.\n *\n * It is also used for split view rendering.\n *\n * If false is passed, preview will be disabled.\n */\n renderPreview?: RenderPreview;\n /**\n * Pass position of split view.\n *\n * Note: for enable split view, you need to pass renderPreview function too.\n *\n * If false is passed, split view will be disabled.\n */\n splitMode?: MarkdownEditorSplitMode;\n /** Additional extensions for codemirror instance. */\n extensions?: CreateCodemirrorParams['extensions'];\n /** Can be used to disable some of the default extensions */\n disabledExtensions?: CreateCodemirrorParams['disabledExtensions'];\n /** Additional keymaps for codemirror instance */\n keymaps?: CreateCodemirrorParams['keymaps'];\n /** Overrides the default placeholder content. */\n placeholder?: CreateCodemirrorParams['placeholder'];\n /** Enable HTML parsing when pasting content. */\n parseHtmlOnPaste?: boolean;\n /**\n * Additional language data for markdown language in codemirror.\n * Can be used to configure additional autocompletions and others.\n * See more https://codemirror.net/docs/ref/#state.EditorState.languageDataAt\n */\n languageData?: YfmLangOptions['languageData'];\n /** Config for @codemirror/autocomplete https://codemirror.net/docs/ref/#autocomplete.autocompletion%5Econfig */\n autocompletion?: CreateCodemirrorParams['autocompletion'];\n /**\n * The function, used to determine if the pasted text is the image url and should be inserted as an image\n */\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n /**\n * Show search panel in the editor.\n * @default true\n */\n searchPanel?: boolean;\n};\n\n// do not export this type\ntype ExtensionsOptions<T extends object = {}> = Omit<\n WysiwygPresetExtensionsOptions,\n 'reactRenderer'\n> &\n T;\n\nexport type MarkdownEditorWysiwygConfig = {\n /** Additional extensions */\n extensions?: Extension;\n extensionOptions?: ExtensionsOptions;\n escapeConfig?: EscapeConfig;\n placeholderOptions?: WysiwygPlaceholderOptions;\n // MAJOR: remove markdown-it-attrs\n /**\n * Disable the markdown-it-attrs plugin in the markup parser.\n *\n * Note: The use of the markdown-it-attrs plugin will be removed in the next major version.\n */\n disableMarkdownAttrs?: boolean;\n};\n\nexport type MarkdownEditorOptions = {\n /**\n * A set of plug-in extensions.\n *\n * @default 'full'\n */\n preset?: MarkdownEditorPreset;\n /** Markdown parser options */\n md?: MarkdownEditorMdOptions;\n /** Initial values */\n initial?: MarkdownEditorInitialOptions;\n handlers?: MarkdownEditorHandlers;\n experimental?: MarkdownEditorExperimentalOptions;\n /** Options for markup mode */\n markupConfig?: MarkdownEditorMarkupConfig;\n /** Options for wysiwyg mode */\n wysiwygConfig?: MarkdownEditorWysiwygConfig;\n logger?: Logger2.ILogger;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"../../../src","sources":["bundle/types.ts"],"names":[],"mappings":"AAAA,mDAAmD","sourcesContent":["// public types, re-exported in src/bundle/index.ts\n\nimport type {ReactNode} from 'react';\n\nimport type {MarkupString} from '../common';\nimport type {EscapeConfig, Extension} from '../core';\nimport type {Logger2} from '../logger';\nimport type {CreateCodemirrorParams, YfmLangOptions} from '../markup';\nimport type {FileUploadHandler} from '../utils';\nimport type {DirectiveSyntaxContext, DirectiveSyntaxOption} from '../utils/directive';\n\nimport type {ChangeEditorModeOptions} from './Editor';\nimport type {ExtensionsOptions as WysiwygPresetExtensionsOptions} from './wysiwyg-preset';\n\nexport type {Editor as MarkdownEditorInstance} from './Editor';\nexport type MarkdownEditorMode = 'wysiwyg' | 'markup';\nexport type MarkdownEditorPreset = 'zero' | 'commonmark' | 'default' | 'yfm' | 'full';\nexport type MarkdownEditorSplitMode = false | 'horizontal' | 'vertical';\n\nexport type RenderPreviewParams = {\n getValue: () => MarkupString;\n mode: 'preview' | 'split';\n md: Readonly<MarkdownEditorMdOptions>;\n directiveSyntax: Pick<DirectiveSyntaxContext, 'option' | 'valueFor' | 'mdPluginValueFor'>;\n};\nexport type RenderPreview = (params: RenderPreviewParams) => ReactNode;\n\nexport type ParseInsertedUrlAsImage = (text: string) => {imageUrl: string; title?: string} | null;\n\nexport type WysiwygPlaceholderOptions = {\n value?: string | (() => string);\n /** Default – empty-doc\n Values:\n - 'empty-doc' – The placeholder will only be shown when the document is completely empty;\n - 'empty-row-top-level' – The placeholder will be displayed in an empty line that is at the top level of the document structure;\n - 'empty-row' – The placeholder will be shown in any empty line within the document, regardless of its nesting level.\n */\n behavior?: 'empty-doc' | 'empty-row-top-level' | 'empty-row';\n};\n\nexport type MarkdownEditorMdOptions = {\n html?: boolean;\n breaks?: boolean;\n linkify?: boolean;\n linkifyTlds?: string | string[];\n};\n\nexport type MarkdownEditorInitialOptions = {\n markup?: MarkupString;\n /** Default – wysiwyg */\n mode?: MarkdownEditorMode;\n /** Default – true */\n toolbarVisible?: boolean;\n /**\n * Default – false\n *\n * Note: has no effect if `MarkdownEditorMarkupConfig.splitMode` is set to false or is not set.\n */\n splitModeEnabled?: boolean;\n};\n\nexport type MarkdownEditorHandlers = {\n /** Pass this handler to allow uploading files from device. */\n uploadFile?: FileUploadHandler;\n};\n\nexport type MarkdownEditorExperimentalOptions = {\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n /**\n * If we need to enable new image size calculations\n *\n * @default false\n */\n enableNewImageSizeCalculation?: boolean;\n /**\n * Called before switching from the markup editor to the wysiwyg editor.\n * You can use it to pre-process the value from the markup editor before it gets into the wysiwyg editor.\n */\n prepareRawMarkup?: (value: MarkupString) => MarkupString;\n beforeEditorModeChange?: (\n options: Pick<ChangeEditorModeOptions, 'mode' | 'reason'>,\n ) => boolean | undefined;\n /**\n * Enables support of directive syntax for diplodoc (YFM) extensions.\n *\n * **Note:** This setting affects parsing of markdown markup and serializing to markdown markup.\n * Be careful with it and use it in consistency with diplodoc/transform and diplodoc-extensions.\n *\n * Before enabling this option, make sure that appropriate versions of diplodoc/transform and diplodoc-extensions are installed.\n *\n * You can pass an object in `key:value` format to provide different behaviour for each extension individually.\n *\n * Values:\n * - 'disabled' – directive syntax is disabled;\n * - 'enabled' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using old syntax;\n * - 'preserve' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using directive syntax;\n * - 'overwrite' – existing blocks will be overwritten using directive syntax through serialization;\n * - 'only' – old syntax is disabled, only directive syntax available. Blocks in old syntax will not be parsed.\n *\n * Default value is 'disabled'.\n */\n directiveSyntax?: DirectiveSyntaxOption;\n /**\n * If we need support for empty strings\n *\n * @default false\n */\n preserveEmptyRows?: boolean;\n /**\n * Preserves the original formatting of unmodified blocks,\n * restoring their structure during serialization\n *\n * **Use case:** Maintain consistent markup when switching modes\n *\n * **Note:** Applies to tracked blocks: `yfm_table`\n *\n * @default false\n */\n preserveMarkupFormatting?: boolean;\n};\n\nexport type MarkdownEditorMarkupConfig = {\n /**\n * Pass the rendering function to preview the markdown content.\n *\n * It is also used for split view rendering.\n *\n * If false is passed, preview will be disabled.\n */\n renderPreview?: RenderPreview;\n /**\n * Pass position of split view.\n *\n * Note: for enable split view, you need to pass renderPreview function too.\n *\n * If false is passed, split view will be disabled.\n */\n splitMode?: MarkdownEditorSplitMode;\n /** Additional extensions for codemirror instance. */\n extensions?: CreateCodemirrorParams['extensions'];\n /** Can be used to disable some of the default extensions */\n disabledExtensions?: CreateCodemirrorParams['disabledExtensions'];\n /** Additional keymaps for codemirror instance */\n keymaps?: CreateCodemirrorParams['keymaps'];\n /** Overrides the default placeholder content. */\n placeholder?: CreateCodemirrorParams['placeholder'];\n /** Enable HTML parsing when pasting content. */\n parseHtmlOnPaste?: boolean;\n /**\n * Additional language data for markdown language in codemirror.\n * Can be used to configure additional autocompletions and others.\n * See more https://codemirror.net/docs/ref/#state.EditorState.languageDataAt\n */\n languageData?: YfmLangOptions['languageData'];\n /** Config for @codemirror/autocomplete https://codemirror.net/docs/ref/#autocomplete.autocompletion%5Econfig */\n autocompletion?: CreateCodemirrorParams['autocompletion'];\n /**\n * The function, used to determine if the pasted text is the image url and should be inserted as an image\n */\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n /**\n * Show search panel in the editor.\n * @default true\n */\n searchPanel?: boolean;\n};\n\n// do not export this type\ntype ExtensionsOptions<T extends object = {}> = Omit<\n WysiwygPresetExtensionsOptions,\n 'reactRenderer'\n> &\n T;\n\nexport type MarkdownEditorWysiwygConfig = {\n /** Additional extensions */\n extensions?: Extension;\n extensionOptions?: ExtensionsOptions;\n escapeConfig?: EscapeConfig;\n placeholderOptions?: WysiwygPlaceholderOptions;\n // MAJOR: remove markdown-it-attrs\n /**\n * Disable the markdown-it-attrs plugin in the markup parser.\n *\n * Note: The use of the markdown-it-attrs plugin will be removed in the next major version.\n */\n disableMarkdownAttrs?: boolean;\n};\n\nexport type MarkdownEditorOptions = {\n /**\n * A set of plug-in extensions.\n *\n * @default 'full'\n */\n preset?: MarkdownEditorPreset;\n /** Markdown parser options */\n md?: MarkdownEditorMdOptions;\n /** Initial values */\n initial?: MarkdownEditorInitialOptions;\n handlers?: MarkdownEditorHandlers;\n experimental?: MarkdownEditorExperimentalOptions;\n /** Options for markup mode */\n markupConfig?: MarkdownEditorMarkupConfig;\n /** Options for wysiwyg mode */\n wysiwygConfig?: MarkdownEditorWysiwygConfig;\n logger?: Logger2.ILogger;\n /** Mobile view */\n mobile?: boolean;\n};\n"]}
@@ -7,7 +7,7 @@ import { EditorImpl } from "./Editor.js";
7
7
  import { BundlePreset } from "./wysiwyg-preset.js";
8
8
  export function useMarkdownEditor(props, deps = []) {
9
9
  const editor = useMemo(() => {
10
- const { md = {}, initial = {}, handlers = {}, experimental = {}, markupConfig = {}, wysiwygConfig = {}, logger = new Logger2(), } = props;
10
+ const { md = {}, initial = {}, handlers = {}, experimental = {}, markupConfig = {}, wysiwygConfig = {}, logger = new Logger2(), mobile, } = props;
11
11
  const preset = props.preset ?? 'full';
12
12
  const renderStorage = new ReactRenderStorage();
13
13
  const pmTransformers = getPMTransformers({
@@ -36,6 +36,7 @@ export function useMarkdownEditor(props, deps = []) {
36
36
  fileUploadHandler: handlers.uploadFile,
37
37
  needToSetDimensionsForUploadedImages: experimental.needToSetDimensionsForUploadedImages,
38
38
  enableNewImageSizeCalculation: experimental.enableNewImageSizeCalculation,
39
+ mobile,
39
40
  });
40
41
  {
41
42
  const extraExtensions = wysiwygConfig.extensions;
@@ -1 +1 @@
1
- {"version":3,"file":"useMarkdownEditor.js","sourceRoot":"../../../src","sources":["bundle/useMarkdownEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import {useLayoutEffect, useMemo} from 'react';\n\nimport type {Extension} from '../core';\nimport {getPMTransformers} from '../core/markdown/ProseMirrorTransformer/getTransformers';\nimport {ReactRenderStorage} from '../extensions';\nimport {Logger2, globalLogger} from '../logger';\nimport {DirectiveSyntaxContext} from '../utils/directive';\n\nimport {EditorImpl, type EditorInt} from './Editor';\nimport type {\n MarkdownEditorInstance,\n MarkdownEditorMode,\n MarkdownEditorOptions,\n MarkdownEditorPreset,\n} from './types';\nimport {BundlePreset} from './wysiwyg-preset';\n\nexport type UseMarkdownEditorProps = MarkdownEditorOptions;\n\nexport function useMarkdownEditor(\n props: UseMarkdownEditorProps,\n deps: React.DependencyList = [],\n): MarkdownEditorInstance {\n const editor = useMemo<EditorInt>(() => {\n const {\n md = {},\n initial = {},\n handlers = {},\n experimental = {},\n markupConfig = {},\n wysiwygConfig = {},\n logger = new Logger2(),\n } = props;\n\n const preset: MarkdownEditorPreset = props.preset ?? 'full';\n const renderStorage = new ReactRenderStorage();\n\n const pmTransformers = getPMTransformers({\n emptyRowTransformer: experimental.preserveEmptyRows,\n });\n\n const directiveSyntax = new DirectiveSyntaxContext(experimental.directiveSyntax);\n\n const extensions: Extension = (builder) => {\n const extensionOptions = wysiwygConfig.extensionOptions;\n\n builder.use(BundlePreset, {\n ...extensionOptions,\n directiveSyntax,\n preset,\n reactRenderer: renderStorage,\n onCancel: () => {\n editor.emit('cancel', null);\n return true;\n },\n onSubmit: () => {\n editor.emit('submit', null);\n return true;\n },\n disableMdAttrs: wysiwygConfig.disableMarkdownAttrs,\n preserveEmptyRows: experimental.preserveEmptyRows,\n placeholderOptions: wysiwygConfig.placeholderOptions,\n mdBreaks: md.breaks,\n fileUploadHandler: handlers.uploadFile,\n needToSetDimensionsForUploadedImages:\n experimental.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: experimental.enableNewImageSizeCalculation,\n });\n {\n const extraExtensions = wysiwygConfig.extensions;\n if (extraExtensions) {\n builder.use(extraExtensions, props.wysiwygConfig?.extensionOptions);\n }\n }\n };\n\n return new EditorImpl({\n ...props,\n logger,\n preset,\n renderStorage,\n directiveSyntax,\n pmTransformers,\n md,\n initial,\n handlers,\n experimental,\n markupConfig,\n wysiwygConfig: {\n ...wysiwygConfig,\n extensions,\n },\n });\n }, deps);\n\n useLayoutEffect(() => {\n function onToolbarAction({editorMode, id}: {editorMode: MarkdownEditorMode; id: string}) {\n globalLogger.action({mode: editorMode, source: 'toolbar', action: id});\n editor.logger.action({mode: editorMode, source: 'toolbar', action: id});\n }\n\n editor.on('toolbar-action', onToolbarAction);\n return () => {\n editor.off('toolbar-action', onToolbarAction);\n editor.destroy();\n };\n }, [editor]);\n return editor;\n}\n"]}
1
+ {"version":3,"file":"useMarkdownEditor.js","sourceRoot":"../../../src","sources":["bundle/useMarkdownEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import {useLayoutEffect, useMemo} from 'react';\n\nimport type {Extension} from '../core';\nimport {getPMTransformers} from '../core/markdown/ProseMirrorTransformer/getTransformers';\nimport {ReactRenderStorage} from '../extensions';\nimport {Logger2, globalLogger} from '../logger';\nimport {DirectiveSyntaxContext} from '../utils/directive';\n\nimport {EditorImpl, type EditorInt} from './Editor';\nimport type {\n MarkdownEditorInstance,\n MarkdownEditorMode,\n MarkdownEditorOptions,\n MarkdownEditorPreset,\n} from './types';\nimport {BundlePreset} from './wysiwyg-preset';\n\nexport type UseMarkdownEditorProps = MarkdownEditorOptions;\n\nexport function useMarkdownEditor(\n props: UseMarkdownEditorProps,\n deps: React.DependencyList = [],\n): MarkdownEditorInstance {\n const editor = useMemo<EditorInt>(() => {\n const {\n md = {},\n initial = {},\n handlers = {},\n experimental = {},\n markupConfig = {},\n wysiwygConfig = {},\n logger = new Logger2(),\n mobile,\n } = props;\n\n const preset: MarkdownEditorPreset = props.preset ?? 'full';\n const renderStorage = new ReactRenderStorage();\n\n const pmTransformers = getPMTransformers({\n emptyRowTransformer: experimental.preserveEmptyRows,\n });\n\n const directiveSyntax = new DirectiveSyntaxContext(experimental.directiveSyntax);\n\n const extensions: Extension = (builder) => {\n const extensionOptions = wysiwygConfig.extensionOptions;\n\n builder.use(BundlePreset, {\n ...extensionOptions,\n directiveSyntax,\n preset,\n reactRenderer: renderStorage,\n onCancel: () => {\n editor.emit('cancel', null);\n return true;\n },\n onSubmit: () => {\n editor.emit('submit', null);\n return true;\n },\n disableMdAttrs: wysiwygConfig.disableMarkdownAttrs,\n preserveEmptyRows: experimental.preserveEmptyRows,\n placeholderOptions: wysiwygConfig.placeholderOptions,\n mdBreaks: md.breaks,\n fileUploadHandler: handlers.uploadFile,\n needToSetDimensionsForUploadedImages:\n experimental.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: experimental.enableNewImageSizeCalculation,\n mobile,\n });\n {\n const extraExtensions = wysiwygConfig.extensions;\n if (extraExtensions) {\n builder.use(extraExtensions, props.wysiwygConfig?.extensionOptions);\n }\n }\n };\n\n return new EditorImpl({\n ...props,\n logger,\n preset,\n renderStorage,\n directiveSyntax,\n pmTransformers,\n md,\n initial,\n handlers,\n experimental,\n markupConfig,\n wysiwygConfig: {\n ...wysiwygConfig,\n extensions,\n },\n });\n }, deps);\n\n useLayoutEffect(() => {\n function onToolbarAction({editorMode, id}: {editorMode: MarkdownEditorMode; id: string}) {\n globalLogger.action({mode: editorMode, source: 'toolbar', action: id});\n editor.logger.action({mode: editorMode, source: 'toolbar', action: id});\n }\n\n editor.on('toolbar-action', onToolbarAction);\n return () => {\n editor.off('toolbar-action', onToolbarAction);\n editor.destroy();\n };\n }, [editor]);\n return editor;\n}\n"]}
@@ -21,6 +21,7 @@ export type BundlePresetOptions = ExtensionsOptions & EditorModeKeymapOptions &
21
21
  enableNewImageSizeCalculation?: boolean;
22
22
  directiveSyntax: DirectiveSyntaxContext;
23
23
  disableMdAttrs?: boolean;
24
+ mobile?: boolean;
24
25
  };
25
26
  declare global {
26
27
  namespace WysiwygEditor {
@@ -47,7 +47,7 @@ export const BundlePreset = (builder, opts) => {
47
47
  return null;
48
48
  return typeof value === 'function'
49
49
  ? value()
50
- : value ?? i18nPlaceholder('doc_empty');
50
+ : value ?? i18nPlaceholder(opts.mobile ? 'doc_empty_mobile' : 'doc_empty');
51
51
  },
52
52
  preserveEmptyRows: opts.preserveEmptyRows,
53
53
  ...opts.baseSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"wysiwyg-preset.js","sourceRoot":"../../../src","sources":["bundle/wysiwyg-preset.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Node} from 'prosemirror-model';\n\nimport type {ExtensionAuto} from '../core';\nimport {BehaviorPreset, type BehaviorPresetOptions} from '../extensions/behavior';\nimport {\n EditorModeKeymap,\n type EditorModeKeymapOptions,\n} from '../extensions/behavior/EditorModeKeymap';\nimport {BaseNode, YfmHeadingAttr, YfmNoteNode} from '../extensions/specs';\nimport {i18n as i18nPlaceholder} from '../i18n/placeholder';\nimport {CommonMarkPreset, type CommonMarkPresetOptions} from '../presets/commonmark';\nimport {DefaultPreset, type DefaultPresetOptions} from '../presets/default';\nimport {FullPreset, type FullPresetOptions} from '../presets/full';\nimport {YfmPreset, type YfmPresetOptions} from '../presets/yfm';\nimport {ZeroPreset, type ZeroPresetOptions} from '../presets/zero';\nimport {Action as A, formatter as f} from '../shortcuts';\nimport type {DirectiveSyntaxContext} from '../utils/directive';\nimport type {FileUploadHandler} from '../utils/upload';\n\nimport {wCommandMenuConfigByPreset, wSelectionMenuConfigByPreset} from './config/wysiwyg';\nimport {emojiDefs} from './emoji';\nimport type {MarkdownEditorPreset, WysiwygPlaceholderOptions} from './types';\n\nconst DEFAULT_IGNORED_KEYS = ['Tab', 'Shift-Tab'] as const;\n\nexport type ExtensionsOptions = BehaviorPresetOptions & FullPresetOptions;\n\nexport type BundlePresetOptions = ExtensionsOptions &\n EditorModeKeymapOptions & {\n preset: MarkdownEditorPreset;\n mdBreaks?: boolean;\n preserveEmptyRows?: boolean;\n fileUploadHandler?: FileUploadHandler;\n placeholderOptions?: WysiwygPlaceholderOptions;\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n enableNewImageSizeCalculation?: boolean;\n directiveSyntax: DirectiveSyntaxContext;\n // MAJOR: remove markdown-it-attrs\n disableMdAttrs?: boolean;\n };\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {\n directiveSyntax: DirectiveSyntaxContext;\n }\n }\n}\n\nexport const BundlePreset: ExtensionAuto<BundlePresetOptions> = (builder, opts) => {\n builder.context.set('directiveSyntax', opts.directiveSyntax);\n\n const dropCursor: NonNullable<BundlePresetOptions['cursor']>['dropOptions'] = {\n color: 'var(--g-color-line-brand)',\n width: 2,\n };\n\n const zeroOptions: BehaviorPresetOptions & ZeroPresetOptions = {\n ...opts,\n baseStyles: {\n attributes: {\n // for disable setting attrs inside pm-view from floating-ui from uikit\n // see https://github.com/floating-ui/floating-ui/discussions/3213\n // and https://github.com/floating-ui/floating-ui/pull/3202\n 'aria-live': '',\n ...opts.baseStyles?.attributes,\n },\n },\n cursor: {dropOptions: dropCursor},\n clipboard: {pasteFileHandler: opts.fileUploadHandler, ...opts.clipboard},\n selectionContext: {config: wSelectionMenuConfigByPreset.zero, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.zero, ...opts.commandMenu},\n history: {undoKey: f.toPM(A.Undo), redoKey: f.toPM(A.Redo), ...opts.history},\n baseSchema: {\n paragraphKey: f.toPM(A.Text),\n paragraphPlaceholder: (node: Node, parent?: Node | null) => {\n const {value, behavior} = opts.placeholderOptions || {};\n\n const emptyEntries = {\n 'empty-row': !node.text,\n 'empty-row-top-level': !node.text && parent?.type.name === BaseNode.Doc,\n 'empty-doc':\n !node.text && parent?.type.name === BaseNode.Doc && parent.childCount === 1,\n };\n\n const showPlaceholder = emptyEntries[behavior || 'empty-doc'];\n\n if (!showPlaceholder) return null;\n\n return typeof value === 'function'\n ? value()\n : value ?? i18nPlaceholder('doc_empty');\n },\n preserveEmptyRows: opts.preserveEmptyRows,\n ...opts.baseSchema,\n },\n };\n const commonMarkOptions: BehaviorPresetOptions & CommonMarkPresetOptions = {\n ...zeroOptions,\n selectionContext: {\n config: wSelectionMenuConfigByPreset.commonmark,\n ...opts.selectionContext,\n },\n commandMenu: {actions: wCommandMenuConfigByPreset.commonmark, ...opts.commandMenu},\n breaks: {\n preferredBreak: (opts.mdBreaks ? 'soft' : 'hard') as 'soft' | 'hard',\n ...opts.breaks,\n },\n bold: {boldKey: f.toPM(A.Bold), ...opts.bold},\n italic: {italicKey: f.toPM(A.Italic), ...opts.italic},\n code: {codeKey: f.toPM(A.Code), ...opts.code},\n codeBlock: {\n codeBlockKey: f.toPM(A.CodeBlock),\n ...opts.codeBlock,\n },\n blockquote: {qouteKey: f.toPM(A.Quote), ...opts.blockquote},\n link: {linkKey: f.toPM(A.Link), ...opts.link},\n lists: {\n ulKey: f.toPM(A.BulletList),\n olKey: f.toPM(A.OrderedList),\n ulInputRules: {plus: false},\n ...opts.lists,\n },\n image: {\n parseInsertedUrlAsImage: opts.imgSize?.parseInsertedUrlAsImage,\n },\n };\n const defaultOptions: BehaviorPresetOptions & DefaultPresetOptions = {\n ...commonMarkOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.default, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.default, ...opts.commandMenu},\n strike: {strikeKey: f.toPM(A.Strike), ...opts.strike},\n };\n const yfmOptions: BehaviorPresetOptions & YfmPresetOptions = {\n ...defaultOptions,\n yfmConfigs: {disableAttrs: opts.disableMdAttrs, ...opts.yfmConfigs},\n selectionContext: {config: wSelectionMenuConfigByPreset.yfm, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.yfm, ...opts.commandMenu},\n underline: {underlineKey: f.toPM(A.Underline), ...opts.underline},\n imgSize: {\n imageUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: opts.enableNewImageSizeCalculation,\n ...opts.imgSize,\n },\n checkbox: {checkboxLabelPlaceholder: () => i18nPlaceholder('checkbox'), ...opts.checkbox},\n deflist: {\n deflistTermPlaceholder: () => i18nPlaceholder('deflist_term'),\n deflistDescPlaceholder: () => i18nPlaceholder('deflist_desc'),\n },\n yfmCut: {\n yfmCutKey: f.toPM(A.Cut),\n yfmCutTitlePlaceholder: () => i18nPlaceholder('cut_title'),\n yfmCutContentPlaceholder: () => i18nPlaceholder('cut_content'),\n ...opts.yfmCut,\n },\n yfmNote: {\n yfmNoteKey: f.toPM(A.Note),\n yfmNoteTitlePlaceholder: () => i18nPlaceholder('note_title'),\n ...opts.yfmNote,\n },\n yfmTable: {yfmTableCellPlaceholder: () => i18nPlaceholder('table_cell'), ...opts.yfmTable},\n yfmFile: {\n fileUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n ...opts.yfmFile,\n },\n yfmHeading: {\n h1Key: f.toPM(A.Heading1),\n h2Key: f.toPM(A.Heading2),\n h3Key: f.toPM(A.Heading3),\n h4Key: f.toPM(A.Heading4),\n h5Key: f.toPM(A.Heading5),\n h6Key: f.toPM(A.Heading6),\n headingPlaceholder: (node: Node) =>\n `${i18nPlaceholder('heading')} ${node.attrs[YfmHeadingAttr.Level]}`, // todo: remove attrs import\n ...opts.yfmHeading,\n },\n placeholder: {\n [YfmNoteNode.NoteContent]: () => i18nPlaceholder('note_content'),\n },\n };\n const fullOptions: BehaviorPresetOptions & FullPresetOptions = {\n ...yfmOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.full, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.full, ...opts.commandMenu},\n emoji: {defs: emojiDefs, ...opts.emoji},\n };\n\n const zeroIgnoreActions = [A.Undo, A.Redo];\n const commonMarkIgnoreActions = zeroIgnoreActions.concat(\n A.Bold,\n A.Italic,\n A.Code,\n A.Link,\n\n A.Text,\n A.Heading1,\n A.Heading2,\n A.Heading3,\n A.Heading4,\n A.Heading5,\n A.Heading6,\n\n A.BulletList,\n A.OrderedList,\n\n A.Quote,\n A.CodeBlock,\n );\n const defaultIgnoreActions = commonMarkIgnoreActions.concat(A.Strike);\n const yfmIgnoreActions = defaultIgnoreActions.concat(\n A.Underline,\n\n A.Note,\n A.Cut,\n );\n const fullIgnoreActions = yfmIgnoreActions.concat();\n\n let ignoreActions;\n\n switch (opts.preset) {\n case 'zero': {\n ignoreActions = zeroIgnoreActions;\n builder.use(BehaviorPreset, zeroOptions).use(ZeroPreset, zeroOptions);\n break;\n }\n case 'commonmark': {\n ignoreActions = commonMarkIgnoreActions;\n builder.use(BehaviorPreset, commonMarkOptions).use(CommonMarkPreset, commonMarkOptions);\n break;\n }\n case 'default': {\n ignoreActions = defaultIgnoreActions;\n builder.use(BehaviorPreset, defaultOptions).use(DefaultPreset, defaultOptions);\n break;\n }\n case 'yfm': {\n ignoreActions = yfmIgnoreActions;\n builder.use(BehaviorPreset, yfmOptions).use(YfmPreset, yfmOptions);\n break;\n }\n default: {\n ignoreActions = fullIgnoreActions;\n builder.use(BehaviorPreset, fullOptions).use(FullPreset, fullOptions);\n break;\n }\n }\n\n const ignoreKeysList = opts.ignoreKeysList?.slice() ?? [];\n ignoreKeysList.push(...DEFAULT_IGNORED_KEYS);\n for (const action of ignoreActions) {\n const key = f.toPM(action);\n if (key) ignoreKeysList.push(key);\n }\n\n builder.use(EditorModeKeymap, {\n onSubmit: opts.onSubmit,\n onCancel: opts.onCancel,\n ignoreKeysList,\n });\n};\n"]}
1
+ {"version":3,"file":"wysiwyg-preset.js","sourceRoot":"../../../src","sources":["bundle/wysiwyg-preset.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Node} from 'prosemirror-model';\n\nimport type {ExtensionAuto} from '../core';\nimport {BehaviorPreset, type BehaviorPresetOptions} from '../extensions/behavior';\nimport {\n EditorModeKeymap,\n type EditorModeKeymapOptions,\n} from '../extensions/behavior/EditorModeKeymap';\nimport {BaseNode, YfmHeadingAttr, YfmNoteNode} from '../extensions/specs';\nimport {i18n as i18nPlaceholder} from '../i18n/placeholder';\nimport {CommonMarkPreset, type CommonMarkPresetOptions} from '../presets/commonmark';\nimport {DefaultPreset, type DefaultPresetOptions} from '../presets/default';\nimport {FullPreset, type FullPresetOptions} from '../presets/full';\nimport {YfmPreset, type YfmPresetOptions} from '../presets/yfm';\nimport {ZeroPreset, type ZeroPresetOptions} from '../presets/zero';\nimport {Action as A, formatter as f} from '../shortcuts';\nimport type {DirectiveSyntaxContext} from '../utils/directive';\nimport type {FileUploadHandler} from '../utils/upload';\n\nimport {wCommandMenuConfigByPreset, wSelectionMenuConfigByPreset} from './config/wysiwyg';\nimport {emojiDefs} from './emoji';\nimport type {MarkdownEditorPreset, WysiwygPlaceholderOptions} from './types';\n\nconst DEFAULT_IGNORED_KEYS = ['Tab', 'Shift-Tab'] as const;\n\nexport type ExtensionsOptions = BehaviorPresetOptions & FullPresetOptions;\n\nexport type BundlePresetOptions = ExtensionsOptions &\n EditorModeKeymapOptions & {\n preset: MarkdownEditorPreset;\n mdBreaks?: boolean;\n preserveEmptyRows?: boolean;\n fileUploadHandler?: FileUploadHandler;\n placeholderOptions?: WysiwygPlaceholderOptions;\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n enableNewImageSizeCalculation?: boolean;\n directiveSyntax: DirectiveSyntaxContext;\n // MAJOR: remove markdown-it-attrs\n disableMdAttrs?: boolean;\n mobile?: boolean;\n };\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {\n directiveSyntax: DirectiveSyntaxContext;\n }\n }\n}\n\nexport const BundlePreset: ExtensionAuto<BundlePresetOptions> = (builder, opts) => {\n builder.context.set('directiveSyntax', opts.directiveSyntax);\n\n const dropCursor: NonNullable<BundlePresetOptions['cursor']>['dropOptions'] = {\n color: 'var(--g-color-line-brand)',\n width: 2,\n };\n\n const zeroOptions: BehaviorPresetOptions & ZeroPresetOptions = {\n ...opts,\n baseStyles: {\n attributes: {\n // for disable setting attrs inside pm-view from floating-ui from uikit\n // see https://github.com/floating-ui/floating-ui/discussions/3213\n // and https://github.com/floating-ui/floating-ui/pull/3202\n 'aria-live': '',\n ...opts.baseStyles?.attributes,\n },\n },\n cursor: {dropOptions: dropCursor},\n clipboard: {pasteFileHandler: opts.fileUploadHandler, ...opts.clipboard},\n selectionContext: {config: wSelectionMenuConfigByPreset.zero, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.zero, ...opts.commandMenu},\n history: {undoKey: f.toPM(A.Undo), redoKey: f.toPM(A.Redo), ...opts.history},\n baseSchema: {\n paragraphKey: f.toPM(A.Text),\n paragraphPlaceholder: (node: Node, parent?: Node | null) => {\n const {value, behavior} = opts.placeholderOptions || {};\n\n const emptyEntries = {\n 'empty-row': !node.text,\n 'empty-row-top-level': !node.text && parent?.type.name === BaseNode.Doc,\n 'empty-doc':\n !node.text && parent?.type.name === BaseNode.Doc && parent.childCount === 1,\n };\n\n const showPlaceholder = emptyEntries[behavior || 'empty-doc'];\n\n if (!showPlaceholder) return null;\n\n return typeof value === 'function'\n ? value()\n : value ?? i18nPlaceholder(opts.mobile ? 'doc_empty_mobile' : 'doc_empty');\n },\n preserveEmptyRows: opts.preserveEmptyRows,\n ...opts.baseSchema,\n },\n };\n const commonMarkOptions: BehaviorPresetOptions & CommonMarkPresetOptions = {\n ...zeroOptions,\n selectionContext: {\n config: wSelectionMenuConfigByPreset.commonmark,\n ...opts.selectionContext,\n },\n commandMenu: {actions: wCommandMenuConfigByPreset.commonmark, ...opts.commandMenu},\n breaks: {\n preferredBreak: (opts.mdBreaks ? 'soft' : 'hard') as 'soft' | 'hard',\n ...opts.breaks,\n },\n bold: {boldKey: f.toPM(A.Bold), ...opts.bold},\n italic: {italicKey: f.toPM(A.Italic), ...opts.italic},\n code: {codeKey: f.toPM(A.Code), ...opts.code},\n codeBlock: {\n codeBlockKey: f.toPM(A.CodeBlock),\n ...opts.codeBlock,\n },\n blockquote: {qouteKey: f.toPM(A.Quote), ...opts.blockquote},\n link: {linkKey: f.toPM(A.Link), ...opts.link},\n lists: {\n ulKey: f.toPM(A.BulletList),\n olKey: f.toPM(A.OrderedList),\n ulInputRules: {plus: false},\n ...opts.lists,\n },\n image: {\n parseInsertedUrlAsImage: opts.imgSize?.parseInsertedUrlAsImage,\n },\n };\n const defaultOptions: BehaviorPresetOptions & DefaultPresetOptions = {\n ...commonMarkOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.default, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.default, ...opts.commandMenu},\n strike: {strikeKey: f.toPM(A.Strike), ...opts.strike},\n };\n const yfmOptions: BehaviorPresetOptions & YfmPresetOptions = {\n ...defaultOptions,\n yfmConfigs: {disableAttrs: opts.disableMdAttrs, ...opts.yfmConfigs},\n selectionContext: {config: wSelectionMenuConfigByPreset.yfm, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.yfm, ...opts.commandMenu},\n underline: {underlineKey: f.toPM(A.Underline), ...opts.underline},\n imgSize: {\n imageUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: opts.enableNewImageSizeCalculation,\n ...opts.imgSize,\n },\n checkbox: {checkboxLabelPlaceholder: () => i18nPlaceholder('checkbox'), ...opts.checkbox},\n deflist: {\n deflistTermPlaceholder: () => i18nPlaceholder('deflist_term'),\n deflistDescPlaceholder: () => i18nPlaceholder('deflist_desc'),\n },\n yfmCut: {\n yfmCutKey: f.toPM(A.Cut),\n yfmCutTitlePlaceholder: () => i18nPlaceholder('cut_title'),\n yfmCutContentPlaceholder: () => i18nPlaceholder('cut_content'),\n ...opts.yfmCut,\n },\n yfmNote: {\n yfmNoteKey: f.toPM(A.Note),\n yfmNoteTitlePlaceholder: () => i18nPlaceholder('note_title'),\n ...opts.yfmNote,\n },\n yfmTable: {yfmTableCellPlaceholder: () => i18nPlaceholder('table_cell'), ...opts.yfmTable},\n yfmFile: {\n fileUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n ...opts.yfmFile,\n },\n yfmHeading: {\n h1Key: f.toPM(A.Heading1),\n h2Key: f.toPM(A.Heading2),\n h3Key: f.toPM(A.Heading3),\n h4Key: f.toPM(A.Heading4),\n h5Key: f.toPM(A.Heading5),\n h6Key: f.toPM(A.Heading6),\n headingPlaceholder: (node: Node) =>\n `${i18nPlaceholder('heading')} ${node.attrs[YfmHeadingAttr.Level]}`, // todo: remove attrs import\n ...opts.yfmHeading,\n },\n placeholder: {\n [YfmNoteNode.NoteContent]: () => i18nPlaceholder('note_content'),\n },\n };\n const fullOptions: BehaviorPresetOptions & FullPresetOptions = {\n ...yfmOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.full, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.full, ...opts.commandMenu},\n emoji: {defs: emojiDefs, ...opts.emoji},\n };\n\n const zeroIgnoreActions = [A.Undo, A.Redo];\n const commonMarkIgnoreActions = zeroIgnoreActions.concat(\n A.Bold,\n A.Italic,\n A.Code,\n A.Link,\n\n A.Text,\n A.Heading1,\n A.Heading2,\n A.Heading3,\n A.Heading4,\n A.Heading5,\n A.Heading6,\n\n A.BulletList,\n A.OrderedList,\n\n A.Quote,\n A.CodeBlock,\n );\n const defaultIgnoreActions = commonMarkIgnoreActions.concat(A.Strike);\n const yfmIgnoreActions = defaultIgnoreActions.concat(\n A.Underline,\n\n A.Note,\n A.Cut,\n );\n const fullIgnoreActions = yfmIgnoreActions.concat();\n\n let ignoreActions;\n\n switch (opts.preset) {\n case 'zero': {\n ignoreActions = zeroIgnoreActions;\n builder.use(BehaviorPreset, zeroOptions).use(ZeroPreset, zeroOptions);\n break;\n }\n case 'commonmark': {\n ignoreActions = commonMarkIgnoreActions;\n builder.use(BehaviorPreset, commonMarkOptions).use(CommonMarkPreset, commonMarkOptions);\n break;\n }\n case 'default': {\n ignoreActions = defaultIgnoreActions;\n builder.use(BehaviorPreset, defaultOptions).use(DefaultPreset, defaultOptions);\n break;\n }\n case 'yfm': {\n ignoreActions = yfmIgnoreActions;\n builder.use(BehaviorPreset, yfmOptions).use(YfmPreset, yfmOptions);\n break;\n }\n default: {\n ignoreActions = fullIgnoreActions;\n builder.use(BehaviorPreset, fullOptions).use(FullPreset, fullOptions);\n break;\n }\n }\n\n const ignoreKeysList = opts.ignoreKeysList?.slice() ?? [];\n ignoreKeysList.push(...DEFAULT_IGNORED_KEYS);\n for (const action of ignoreActions) {\n const key = f.toPM(action);\n if (key) ignoreKeysList.push(key);\n }\n\n builder.use(EditorModeKeymap, {\n onSubmit: opts.onSubmit,\n onCancel: opts.onCancel,\n ignoreKeysList,\n });\n};\n"]}
@@ -1,5 +1,6 @@
1
1
  import dd from 'ts-dedent';
2
2
  import { getLoggerFromState } from "../../../core/index.js";
3
+ import { Fragment } from "../../../pm/model.js";
3
4
  import { Plugin } from "../../../pm/state.js";
4
5
  import { DataTransferType, isFilesOnly, isIosSafariShare } from "./utils.js";
5
6
  const isCodeMark = (mark) => mark.type.spec.code;
@@ -62,14 +63,18 @@ export const handlePasteIntoCodePlugin = () => {
62
63
  getLoggerFromState(state).event({
63
64
  codeType,
64
65
  dataFormat,
66
+ empty: !text,
65
67
  domEvent: 'paste',
66
68
  event: 'paste-into-code',
67
69
  dataTypes: clipboardData.types,
68
70
  });
69
71
  event.preventDefault();
70
- dispatch(state.tr
71
- .replaceSelectionWith(state.schema.text(text), true)
72
- .scrollIntoView());
72
+ const { tr } = state;
73
+ if (text)
74
+ tr.replaceSelectionWith(state.schema.text(text), true);
75
+ else
76
+ tr.replaceWith(tr.selection.from, tr.selection.to, Fragment.empty);
77
+ dispatch(tr.scrollIntoView());
73
78
  return true;
74
79
  },
75
80
  },
@@ -1 +1 @@
1
- {"version":3,"file":"code.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Clipboard/code.ts"],"names":[],"mappings":"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","sourcesContent":["import dd from 'ts-dedent';\n\nimport {getLoggerFromState} from '#core';\nimport type {Mark} from '#pm/model';\nimport {type EditorState, Plugin} from '#pm/state';\n\nimport {DataTransferType, isFilesOnly, isIosSafariShare} from './utils';\n\nconst isCodeMark = (mark: Mark) => mark.type.spec.code;\n\nexport function isInsideCode(state: EditorState): false | 'block' | 'inline' {\n if (isInsideBlockCode(state)) return 'block';\n if (isInsideInlineCode(state)) return 'inline';\n return false;\n}\n\nexport function isInsideBlockCode(state: EditorState): boolean {\n // it is enough to check only $from\n // when pasting, the content is inserted into a block with the type from $from\n return Boolean(state.selection.$from.parent.type.spec.code);\n}\n\nexport function isInsideInlineCode(state: EditorState): boolean {\n // same as for block code\n const fromHasCodeMark = state.selection.$from.marks().some(isCodeMark);\n if (state.selection.empty) {\n return fromHasCodeMark || (state.storedMarks ?? []).some(isCodeMark);\n }\n return fromHasCodeMark;\n}\n\n/**\n * This plugin handles paste into any type of code: code block or code mark.\n * If selection is inside code, it always prevents execution of all next paste handlers.\n * It takes a value from following clipboard data types: uri-list, files or text data.\n */\nexport const handlePasteIntoCodePlugin = () => {\n return new Plugin({\n props: {\n handleDOMEvents: {\n paste(view, event) {\n if (!event.clipboardData) return false;\n const {clipboardData} = event;\n\n const codeType = isInsideCode(view.state);\n if (!codeType) return false;\n\n let text: string;\n let dataFormat: string;\n\n if (isIosSafariShare(clipboardData)) {\n dataFormat = DataTransferType.UriList;\n text = clipboardData.getData(DataTransferType.UriList);\n } else if (isFilesOnly(clipboardData)) {\n dataFormat = DataTransferType.Files;\n text = Array.from(clipboardData.files)\n .map((file) => file.name)\n .join(' ');\n } else {\n dataFormat = DataTransferType.Text;\n text = dd(clipboardData.getData(DataTransferType.Text));\n }\n\n if (codeType === 'inline') {\n text = text.replaceAll('\\n', '↵');\n }\n\n const {state, dispatch} = view;\n\n getLoggerFromState(state).event({\n codeType,\n dataFormat,\n domEvent: 'paste',\n event: 'paste-into-code',\n dataTypes: clipboardData.types,\n });\n\n event.preventDefault();\n dispatch(\n state.tr\n .replaceSelectionWith(state.schema.text(text), true)\n .scrollIntoView(),\n );\n\n return true;\n },\n },\n },\n });\n};\n"]}
1
+ {"version":3,"file":"code.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Clipboard/code.ts"],"names":[],"mappings":"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","sourcesContent":["import dd from 'ts-dedent';\n\nimport {getLoggerFromState} from '#core';\nimport {Fragment, type Mark} from '#pm/model';\nimport {type EditorState, Plugin} from '#pm/state';\n\nimport {DataTransferType, isFilesOnly, isIosSafariShare} from './utils';\n\nconst isCodeMark = (mark: Mark) => mark.type.spec.code;\n\nexport function isInsideCode(state: EditorState): false | 'block' | 'inline' {\n if (isInsideBlockCode(state)) return 'block';\n if (isInsideInlineCode(state)) return 'inline';\n return false;\n}\n\nexport function isInsideBlockCode(state: EditorState): boolean {\n // it is enough to check only $from\n // when pasting, the content is inserted into a block with the type from $from\n return Boolean(state.selection.$from.parent.type.spec.code);\n}\n\nexport function isInsideInlineCode(state: EditorState): boolean {\n // same as for block code\n const fromHasCodeMark = state.selection.$from.marks().some(isCodeMark);\n if (state.selection.empty) {\n return fromHasCodeMark || (state.storedMarks ?? []).some(isCodeMark);\n }\n return fromHasCodeMark;\n}\n\n/**\n * This plugin handles paste into any type of code: code block or code mark.\n * If selection is inside code, it always prevents execution of all next paste handlers.\n * It takes a value from following clipboard data types: uri-list, files or text data.\n */\nexport const handlePasteIntoCodePlugin = () => {\n return new Plugin({\n props: {\n handleDOMEvents: {\n paste(view, event) {\n if (!event.clipboardData) return false;\n const {clipboardData} = event;\n\n const codeType = isInsideCode(view.state);\n if (!codeType) return false;\n\n let text: string;\n let dataFormat: string;\n\n if (isIosSafariShare(clipboardData)) {\n dataFormat = DataTransferType.UriList;\n text = clipboardData.getData(DataTransferType.UriList);\n } else if (isFilesOnly(clipboardData)) {\n dataFormat = DataTransferType.Files;\n text = Array.from(clipboardData.files)\n .map((file) => file.name)\n .join(' ');\n } else {\n dataFormat = DataTransferType.Text;\n text = dd(clipboardData.getData(DataTransferType.Text));\n }\n\n if (codeType === 'inline') {\n text = text.replaceAll('\\n', '↵');\n }\n\n const {state, dispatch} = view;\n\n getLoggerFromState(state).event({\n codeType,\n dataFormat,\n empty: !text,\n domEvent: 'paste',\n event: 'paste-into-code',\n dataTypes: clipboardData.types,\n });\n\n event.preventDefault();\n const {tr} = state;\n if (text) tr.replaceSelectionWith(state.schema.text(text), true);\n else tr.replaceWith(tr.selection.from, tr.selection.to, Fragment.empty);\n dispatch(tr.scrollIntoView());\n\n return true;\n },\n },\n },\n });\n};\n"]}
@@ -1,6 +1,7 @@
1
+ import type { ReactNode } from 'react';
1
2
  import "./Resizable.css";
2
3
  export interface ResizableProps {
3
- children: React.ReactNode;
4
+ children: ReactNode;
4
5
  onResizeLeft: (event: React.MouseEvent<HTMLElement>) => void;
5
6
  onResizeRight: (event: React.MouseEvent<HTMLElement>) => void;
6
7
  hover?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Resizable.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Resizable/Resizable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,EAAE,EAAC,8BAA2B;AAEtC,yBAA0B;AAE1B,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;AAM1B,MAAM,OAAO,GAA2B,CAAC,EAAC,WAAW,EAAE,SAAS,EAAC,EAAE,EAAE,CAAC,CAClE,cACI,SAAS,EAAE,CAAC,CAAC,iBAAiB,EAAE,EAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAC,CAAC,EACpD,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,WAAW,EAAE,WAAW,YAExB,cAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,GAAI,GAC9B,CACT,CAAC;AAUF,MAAM,CAAC,MAAM,SAAS,GAA6B,CAAC,EAChD,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,aAAa,GAChB,EAAE,EAAE,CAAC,CACF,eAAK,SAAS,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAC,CAAC,aAC/B,QAAQ,EACT,KAAC,OAAO,IAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAC,MAAM,GAAG,EACvD,KAAC,OAAO,IAAC,WAAW,EAAE,aAAa,EAAE,SAAS,EAAC,OAAO,GAAG,IACvD,CACT,CAAC","sourcesContent":["import {cn} from '../../../classname';\n\nimport './Resizable.scss';\n\nconst b = cn('resizable');\n\ninterface ResizerProps {\n onMouseDown: (event: React.MouseEvent<HTMLElement>) => void;\n direction: 'left' | 'right';\n}\nconst Resizer: React.FC<ResizerProps> = ({onMouseDown, direction}) => (\n <div\n className={b('resizer-wrapper', {[direction]: true})}\n role=\"button\"\n tabIndex={0}\n onMouseDown={onMouseDown}\n >\n <div className={b('resizer')} />\n </div>\n);\n\nexport interface ResizableProps {\n children: React.ReactNode;\n onResizeLeft: (event: React.MouseEvent<HTMLElement>) => void;\n onResizeRight: (event: React.MouseEvent<HTMLElement>) => void;\n hover?: boolean;\n resizing?: boolean;\n}\n\nexport const Resizable: React.FC<ResizableProps> = ({\n hover,\n resizing,\n children,\n onResizeLeft,\n onResizeRight,\n}) => (\n <div className={b({hover, resizing})}>\n {children}\n <Resizer onMouseDown={onResizeLeft} direction=\"left\" />\n <Resizer onMouseDown={onResizeRight} direction=\"right\" />\n </div>\n);\n"]}
1
+ {"version":3,"file":"Resizable.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Resizable/Resizable.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,EAAE,EAAC,8BAA2B;AAEtC,yBAA0B;AAE1B,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;AAM1B,MAAM,OAAO,GAA2B,CAAC,EAAC,WAAW,EAAE,SAAS,EAAC,EAAE,EAAE,CAAC,CAClE,cACI,SAAS,EAAE,CAAC,CAAC,iBAAiB,EAAE,EAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAC,CAAC,EACpD,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,WAAW,EAAE,WAAW,YAExB,cAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,GAAI,GAC9B,CACT,CAAC;AAUF,MAAM,CAAC,MAAM,SAAS,GAA6B,CAAC,EAChD,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,aAAa,GAChB,EAAE,EAAE,CAAC,CACF,eAAK,SAAS,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAC,CAAC,aAC/B,QAAQ,EACT,KAAC,OAAO,IAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAC,MAAM,GAAG,EACvD,KAAC,OAAO,IAAC,WAAW,EAAE,aAAa,EAAE,SAAS,EAAC,OAAO,GAAG,IACvD,CACT,CAAC","sourcesContent":["import type {ReactNode} from 'react';\n\nimport {cn} from '../../../classname';\n\nimport './Resizable.scss';\n\nconst b = cn('resizable');\n\ninterface ResizerProps {\n onMouseDown: (event: React.MouseEvent<HTMLElement>) => void;\n direction: 'left' | 'right';\n}\nconst Resizer: React.FC<ResizerProps> = ({onMouseDown, direction}) => (\n <div\n className={b('resizer-wrapper', {[direction]: true})}\n role=\"button\"\n tabIndex={0}\n onMouseDown={onMouseDown}\n >\n <div className={b('resizer')} />\n </div>\n);\n\nexport interface ResizableProps {\n children: ReactNode;\n onResizeLeft: (event: React.MouseEvent<HTMLElement>) => void;\n onResizeRight: (event: React.MouseEvent<HTMLElement>) => void;\n hover?: boolean;\n resizing?: boolean;\n}\n\nexport const Resizable: React.FC<ResizableProps> = ({\n hover,\n resizing,\n children,\n onResizeLeft,\n onResizeRight,\n}) => (\n <div className={b({hover, resizing})}>\n {children}\n <Resizer onMouseDown={onResizeLeft} direction=\"left\" />\n <Resizer onMouseDown={onResizeRight} direction=\"right\" />\n </div>\n);\n"]}
@@ -27,5 +27,6 @@ export type BehaviorPresetOptions = {
27
27
  reactRenderer: ReactRenderer;
28
28
  selectionContext?: SelectionContextOptions;
29
29
  commandMenu?: CommandMenuOptions;
30
+ mobile?: boolean;
30
31
  };
31
32
  export declare const BehaviorPreset: ExtensionAuto<BehaviorPresetOptions>;
@@ -32,10 +32,12 @@ export const BehaviorPreset = (builder, opts) => {
32
32
  .use(History, opts.history ?? {})
33
33
  .use(Clipboard, opts.clipboard ?? {})
34
34
  .use(ReactRendererExtension, opts.reactRenderer)
35
- .use(WidgetDecoration)
36
- .use(SelectionContext, opts.selectionContext ?? {});
37
- if (opts.commandMenu)
38
- builder.use(CommandMenu, opts.commandMenu);
35
+ .use(WidgetDecoration);
36
+ if (!opts.mobile) {
37
+ builder.use(SelectionContext, opts.selectionContext ?? {});
38
+ if (opts.commandMenu)
39
+ builder.use(CommandMenu, opts.commandMenu);
40
+ }
39
41
  builder.use(FilePaste);
40
42
  builder.use(ClicksOnEdges);
41
43
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["extensions/behavior/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,aAAa,EAAC,iCAAwB;AAC9C,OAAO,EAAC,SAAS,EAAwB,6BAAoB;AAC7D,OAAO,EAAC,WAAW,EAA0B,+BAAsB;AACnE,OAAO,EAAC,MAAM,EAAqB,0BAAiB;AACpD,OAAO,EAAC,SAAS,EAAC,6BAAoB;AACtC,OAAO,EAAC,OAAO,EAAsB,2BAAkB;AACvD,OAAO,EAAC,WAAW,EAAC,+BAAsB;AAC1C,OAAO,EAAqB,sBAAsB,EAAC,iCAAwB;AAC3E,OAAO,EAAC,SAAS,EAAC,6BAAoB;AACtC,OAAO,EAAC,gBAAgB,EAA+B,oCAA2B;AAClF,OAAO,EAAC,WAAW,EAAC,+BAAsB;AAC1C,OAAO,EAAC,gBAAgB,EAAC,oCAA2B;AAEpD,wCAA+B;AAC/B,yCAAgC;AAChC,qCAA4B;AAC5B,uCAA8B;AAC9B,kCAAyB;AACzB,qCAA4B;AAC5B,mCAA0B;AAC1B,uCAA8B;AAC9B,yCAAgC;AAChC,qCAA4B;AAC5B,4CAAmC;AACnC,uCAA8B;AAC9B,4CAAmC;AAanC,MAAM,CAAC,MAAM,cAAc,GAAyC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAClF,OAAO;SACF,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,WAAW,CAAC;SAChB,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SACxC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;SAC9B,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;SAChC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;SACpC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,aAAa,CAAC;SAC/C,GAAG,CAAC,gBAAgB,CAAC;SACrB,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;IAExD,IAAI,IAAI,CAAC,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC/B,CAAC,CAAC","sourcesContent":["import type {ExtensionAuto} from '../../core';\nimport type {PlaceholderOptions} from '../../utils/placeholder';\n\nimport {ClicksOnEdges} from './ClicksOnEdges';\nimport {Clipboard, type ClipboardOptions} from './Clipboard';\nimport {CommandMenu, type CommandMenuOptions} from './CommandMenu';\nimport {Cursor, type CursorOptions} from './Cursor';\nimport {FilePaste} from './FilePaste';\nimport {History, type HistoryOptions} from './History';\nimport {Placeholder} from './Placeholder';\nimport {type ReactRenderer, ReactRendererExtension} from './ReactRenderer';\nimport {Selection} from './Selection';\nimport {SelectionContext, type SelectionContextOptions} from './SelectionContext';\nimport {SharedState} from './SharedState';\nimport {WidgetDecoration} from './WidgetDecoration';\n\nexport * from './Autocomplete';\nexport * from './ClicksOnEdges';\nexport * from './Clipboard';\nexport * from './CommandMenu';\nexport * from './Cursor';\nexport * from './FilePaste';\nexport * from './History';\nexport * from './Placeholder';\nexport * from './ReactRenderer';\nexport * from './Selection';\nexport * from './SelectionContext';\nexport * from './SharedState';\nexport * from './WidgetDecoration';\n\nexport type BehaviorPresetOptions = {\n cursor?: CursorOptions;\n history?: HistoryOptions;\n clipboard?: ClipboardOptions;\n placeholder?: PlaceholderOptions;\n reactRenderer: ReactRenderer;\n selectionContext?: SelectionContextOptions;\n\n commandMenu?: CommandMenuOptions;\n};\n\nexport const BehaviorPreset: ExtensionAuto<BehaviorPresetOptions> = (builder, opts) => {\n builder\n .use(Selection)\n .use(SharedState)\n .use(Placeholder, opts.placeholder ?? {})\n .use(Cursor, opts.cursor ?? {})\n .use(History, opts.history ?? {})\n .use(Clipboard, opts.clipboard ?? {})\n .use(ReactRendererExtension, opts.reactRenderer)\n .use(WidgetDecoration)\n .use(SelectionContext, opts.selectionContext ?? {});\n\n if (opts.commandMenu) builder.use(CommandMenu, opts.commandMenu);\n builder.use(FilePaste);\n builder.use(ClicksOnEdges);\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["extensions/behavior/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,aAAa,EAAC,iCAAwB;AAC9C,OAAO,EAAC,SAAS,EAAwB,6BAAoB;AAC7D,OAAO,EAAC,WAAW,EAA0B,+BAAsB;AACnE,OAAO,EAAC,MAAM,EAAqB,0BAAiB;AACpD,OAAO,EAAC,SAAS,EAAC,6BAAoB;AACtC,OAAO,EAAC,OAAO,EAAsB,2BAAkB;AACvD,OAAO,EAAC,WAAW,EAAC,+BAAsB;AAC1C,OAAO,EAAqB,sBAAsB,EAAC,iCAAwB;AAC3E,OAAO,EAAC,SAAS,EAAC,6BAAoB;AACtC,OAAO,EAAC,gBAAgB,EAA+B,oCAA2B;AAClF,OAAO,EAAC,WAAW,EAAC,+BAAsB;AAC1C,OAAO,EAAC,gBAAgB,EAAC,oCAA2B;AAEpD,wCAA+B;AAC/B,yCAAgC;AAChC,qCAA4B;AAC5B,uCAA8B;AAC9B,kCAAyB;AACzB,qCAA4B;AAC5B,mCAA0B;AAC1B,uCAA8B;AAC9B,yCAAgC;AAChC,qCAA4B;AAC5B,4CAAmC;AACnC,uCAA8B;AAC9B,4CAAmC;AAcnC,MAAM,CAAC,MAAM,cAAc,GAAyC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAClF,OAAO;SACF,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,WAAW,CAAC;SAChB,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SACxC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;SAC9B,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;SAChC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;SACpC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,aAAa,CAAC;SAC/C,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC/B,CAAC,CAAC","sourcesContent":["import type {ExtensionAuto} from '../../core';\nimport type {PlaceholderOptions} from '../../utils/placeholder';\n\nimport {ClicksOnEdges} from './ClicksOnEdges';\nimport {Clipboard, type ClipboardOptions} from './Clipboard';\nimport {CommandMenu, type CommandMenuOptions} from './CommandMenu';\nimport {Cursor, type CursorOptions} from './Cursor';\nimport {FilePaste} from './FilePaste';\nimport {History, type HistoryOptions} from './History';\nimport {Placeholder} from './Placeholder';\nimport {type ReactRenderer, ReactRendererExtension} from './ReactRenderer';\nimport {Selection} from './Selection';\nimport {SelectionContext, type SelectionContextOptions} from './SelectionContext';\nimport {SharedState} from './SharedState';\nimport {WidgetDecoration} from './WidgetDecoration';\n\nexport * from './Autocomplete';\nexport * from './ClicksOnEdges';\nexport * from './Clipboard';\nexport * from './CommandMenu';\nexport * from './Cursor';\nexport * from './FilePaste';\nexport * from './History';\nexport * from './Placeholder';\nexport * from './ReactRenderer';\nexport * from './Selection';\nexport * from './SelectionContext';\nexport * from './SharedState';\nexport * from './WidgetDecoration';\n\nexport type BehaviorPresetOptions = {\n cursor?: CursorOptions;\n history?: HistoryOptions;\n clipboard?: ClipboardOptions;\n placeholder?: PlaceholderOptions;\n reactRenderer: ReactRenderer;\n selectionContext?: SelectionContextOptions;\n\n commandMenu?: CommandMenuOptions;\n mobile?: boolean;\n};\n\nexport const BehaviorPreset: ExtensionAuto<BehaviorPresetOptions> = (builder, opts) => {\n builder\n .use(Selection)\n .use(SharedState)\n .use(Placeholder, opts.placeholder ?? {})\n .use(Cursor, opts.cursor ?? {})\n .use(History, opts.history ?? {})\n .use(Clipboard, opts.clipboard ?? {})\n .use(ReactRendererExtension, opts.reactRenderer)\n .use(WidgetDecoration);\n\n if (!opts.mobile) {\n builder.use(SelectionContext, opts.selectionContext ?? {});\n if (opts.commandMenu) builder.use(CommandMenu, opts.commandMenu);\n }\n\n builder.use(FilePaste);\n builder.use(ClicksOnEdges);\n};\n"]}