@gravity-ui/markdown-editor 15.35.1 → 15.37.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 (205) hide show
  1. package/README.md +87 -0
  2. package/build/cjs/core/Editor.js +2 -0
  3. package/build/cjs/core/Editor.js.map +1 -1
  4. package/build/cjs/core/index.d.ts +1 -0
  5. package/build/cjs/core/index.js +3 -1
  6. package/build/cjs/core/index.js.map +1 -1
  7. package/build/cjs/core/markdown/MarkdownParser.d.ts +1 -0
  8. package/build/cjs/core/markdown/MarkdownParser.js +3 -0
  9. package/build/cjs/core/markdown/MarkdownParser.js.map +1 -1
  10. package/build/cjs/core/types/parser.d.ts +1 -0
  11. package/build/cjs/core/types/parser.js.map +1 -1
  12. package/build/cjs/core/utils/parser.d.ts +3 -0
  13. package/build/cjs/core/utils/parser.js +12 -0
  14. package/build/cjs/core/utils/parser.js.map +1 -0
  15. package/build/cjs/extensions/additional/QuoteLink/QuoteLinkSpecs/index.js +1 -0
  16. package/build/cjs/extensions/additional/QuoteLink/QuoteLinkSpecs/index.js.map +1 -1
  17. package/build/cjs/extensions/behavior/Clipboard/clipboard.js +2 -13
  18. package/build/cjs/extensions/behavior/Clipboard/clipboard.js.map +1 -1
  19. package/build/cjs/extensions/behavior/Clipboard/selection-content.d.ts +1 -0
  20. package/build/cjs/extensions/behavior/Clipboard/selection-content.js +35 -0
  21. package/build/cjs/extensions/behavior/Clipboard/selection-content.js.map +1 -0
  22. package/build/cjs/extensions/behavior/Selection/commands.d.ts +2 -1
  23. package/build/cjs/extensions/behavior/Selection/commands.js +47 -1
  24. package/build/cjs/extensions/behavior/Selection/commands.js.map +1 -1
  25. package/build/cjs/extensions/behavior/Selection/selection.d.ts +15 -0
  26. package/build/cjs/extensions/behavior/Selection/selection.js +1 -0
  27. package/build/cjs/extensions/behavior/Selection/selection.js.map +1 -1
  28. package/build/cjs/extensions/behavior/SelectionContext/tooltip.js +3 -0
  29. package/build/cjs/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
  30. package/build/cjs/extensions/markdown/Blockquote/BlockquoteSpecs/index.js +1 -0
  31. package/build/cjs/extensions/markdown/Blockquote/BlockquoteSpecs/index.js.map +1 -1
  32. package/build/cjs/extensions/markdown/Bold/index.js +1 -1
  33. package/build/cjs/extensions/markdown/Bold/index.js.map +1 -1
  34. package/build/cjs/extensions/markdown/Code/index.js +1 -1
  35. package/build/cjs/extensions/markdown/Code/index.js.map +1 -1
  36. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.d.ts +2 -2
  37. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +79 -128
  38. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  39. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeBlockToolbar.d.ts +14 -0
  40. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeBlockToolbar.js +117 -0
  41. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeBlockToolbar.js.map +1 -0
  42. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeLangSelect.d.ts +9 -0
  43. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeLangSelect.js +22 -0
  44. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeLangSelect.js.map +1 -0
  45. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.d.ts +2 -3
  46. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js +5 -93
  47. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js.map +1 -1
  48. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLangsPlugin.d.ts +23 -0
  49. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLangsPlugin.js +88 -0
  50. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLangsPlugin.js.map +1 -0
  51. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLineNumbersPlugin.js +42 -22
  52. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLineNumbersPlugin.js.map +1 -1
  53. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/utils.js +20 -0
  54. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/utils.js.map +1 -1
  55. package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/schema.js +2 -0
  56. package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/schema.js.map +1 -1
  57. package/build/cjs/extensions/markdown/Italic/index.js +1 -1
  58. package/build/cjs/extensions/markdown/Italic/index.js.map +1 -1
  59. package/build/cjs/extensions/markdown/Mark/index.js +1 -1
  60. package/build/cjs/extensions/markdown/Mark/index.js.map +1 -1
  61. package/build/cjs/extensions/markdown/Strike/index.js +1 -1
  62. package/build/cjs/extensions/markdown/Strike/index.js.map +1 -1
  63. package/build/cjs/extensions/markdown/Table/TableSpecs/schema.js +1 -0
  64. package/build/cjs/extensions/markdown/Table/TableSpecs/schema.js.map +1 -1
  65. package/build/cjs/extensions/markdown/Underline/index.js +1 -1
  66. package/build/cjs/extensions/markdown/Underline/index.js.map +1 -1
  67. package/build/cjs/extensions/yfm/Monospace/index.js +1 -1
  68. package/build/cjs/extensions/yfm/Monospace/index.js.map +1 -1
  69. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +2 -0
  70. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
  71. package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/schema.js +2 -0
  72. package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/schema.js.map +1 -1
  73. package/build/cjs/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/YfmNoteToolbar.css +20 -0
  74. package/build/cjs/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/YfmNoteToolbar.d.ts +9 -0
  75. package/build/cjs/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/YfmNoteToolbar.js +77 -0
  76. package/build/cjs/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/YfmNoteToolbar.js.map +1 -0
  77. package/build/cjs/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/index.d.ts +1 -2
  78. package/build/cjs/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/index.js +5 -65
  79. package/build/cjs/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/index.js.map +1 -1
  80. package/build/cjs/extensions/yfm/YfmTable/YfmTableSpecs/schema.js +2 -0
  81. package/build/cjs/extensions/yfm/YfmTable/YfmTableSpecs/schema.js.map +1 -1
  82. package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js +3 -0
  83. package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
  84. package/build/cjs/plugins/BaseTooltip/index.d.ts +1 -0
  85. package/build/cjs/plugins/BaseTooltip/index.js +4 -3
  86. package/build/cjs/plugins/BaseTooltip/index.js.map +1 -1
  87. package/build/cjs/toolbar/ToolbarGroup.js +4 -3
  88. package/build/cjs/toolbar/ToolbarGroup.js.map +1 -1
  89. package/build/cjs/toolbar/types.d.ts +2 -0
  90. package/build/cjs/toolbar/types.js.map +1 -1
  91. package/build/cjs/utils/actions.d.ts +6 -0
  92. package/build/cjs/utils/actions.js +24 -0
  93. package/build/cjs/utils/actions.js.map +1 -1
  94. package/build/cjs/utils/marks.d.ts +6 -0
  95. package/build/cjs/utils/marks.js +31 -0
  96. package/build/cjs/utils/marks.js.map +1 -1
  97. package/build/cjs/utils/transaction.d.ts +1 -0
  98. package/build/cjs/utils/transaction.js +40 -0
  99. package/build/cjs/utils/transaction.js.map +1 -0
  100. package/build/cjs/version.js +1 -1
  101. package/build/cjs/version.js.map +1 -1
  102. package/build/esm/core/Editor.js +2 -0
  103. package/build/esm/core/Editor.js.map +1 -1
  104. package/build/esm/core/index.d.ts +1 -0
  105. package/build/esm/core/index.js +1 -0
  106. package/build/esm/core/index.js.map +1 -1
  107. package/build/esm/core/markdown/MarkdownParser.d.ts +1 -0
  108. package/build/esm/core/markdown/MarkdownParser.js +3 -0
  109. package/build/esm/core/markdown/MarkdownParser.js.map +1 -1
  110. package/build/esm/core/types/parser.d.ts +1 -0
  111. package/build/esm/core/types/parser.js.map +1 -1
  112. package/build/esm/core/utils/parser.d.ts +3 -0
  113. package/build/esm/core/utils/parser.js +8 -0
  114. package/build/esm/core/utils/parser.js.map +1 -0
  115. package/build/esm/extensions/additional/QuoteLink/QuoteLinkSpecs/index.js +1 -0
  116. package/build/esm/extensions/additional/QuoteLink/QuoteLinkSpecs/index.js.map +1 -1
  117. package/build/esm/extensions/behavior/Clipboard/clipboard.js +1 -12
  118. package/build/esm/extensions/behavior/Clipboard/clipboard.js.map +1 -1
  119. package/build/esm/extensions/behavior/Clipboard/selection-content.d.ts +1 -0
  120. package/build/esm/extensions/behavior/Clipboard/selection-content.js +32 -0
  121. package/build/esm/extensions/behavior/Clipboard/selection-content.js.map +1 -0
  122. package/build/esm/extensions/behavior/Selection/commands.d.ts +2 -1
  123. package/build/esm/extensions/behavior/Selection/commands.js +47 -2
  124. package/build/esm/extensions/behavior/Selection/commands.js.map +1 -1
  125. package/build/esm/extensions/behavior/Selection/selection.d.ts +15 -0
  126. package/build/esm/extensions/behavior/Selection/selection.js +2 -1
  127. package/build/esm/extensions/behavior/Selection/selection.js.map +1 -1
  128. package/build/esm/extensions/behavior/SelectionContext/tooltip.js +3 -0
  129. package/build/esm/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
  130. package/build/esm/extensions/markdown/Blockquote/BlockquoteSpecs/index.js +1 -0
  131. package/build/esm/extensions/markdown/Blockquote/BlockquoteSpecs/index.js.map +1 -1
  132. package/build/esm/extensions/markdown/Bold/index.js +2 -2
  133. package/build/esm/extensions/markdown/Bold/index.js.map +1 -1
  134. package/build/esm/extensions/markdown/Code/index.js +2 -2
  135. package/build/esm/extensions/markdown/Code/index.js.map +1 -1
  136. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.d.ts +2 -2
  137. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +79 -128
  138. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  139. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeBlockToolbar.d.ts +14 -0
  140. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeBlockToolbar.js +114 -0
  141. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeBlockToolbar.js.map +1 -0
  142. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeLangSelect.d.ts +9 -0
  143. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeLangSelect.js +19 -0
  144. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/CodeLangSelect.js.map +1 -0
  145. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.d.ts +2 -3
  146. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js +6 -94
  147. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/index.js.map +1 -1
  148. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLangsPlugin.d.ts +23 -0
  149. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLangsPlugin.js +83 -0
  150. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLangsPlugin.js.map +1 -0
  151. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLineNumbersPlugin.js +43 -23
  152. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/plugins/codeBlockLineNumbersPlugin.js.map +1 -1
  153. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/utils.js +20 -1
  154. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/utils.js.map +1 -1
  155. package/build/esm/extensions/markdown/Deflist/DeflistSpecs/schema.js +2 -0
  156. package/build/esm/extensions/markdown/Deflist/DeflistSpecs/schema.js.map +1 -1
  157. package/build/esm/extensions/markdown/Italic/index.js +2 -2
  158. package/build/esm/extensions/markdown/Italic/index.js.map +1 -1
  159. package/build/esm/extensions/markdown/Mark/index.js +2 -2
  160. package/build/esm/extensions/markdown/Mark/index.js.map +1 -1
  161. package/build/esm/extensions/markdown/Strike/index.js +2 -2
  162. package/build/esm/extensions/markdown/Strike/index.js.map +1 -1
  163. package/build/esm/extensions/markdown/Table/TableSpecs/schema.js +1 -0
  164. package/build/esm/extensions/markdown/Table/TableSpecs/schema.js.map +1 -1
  165. package/build/esm/extensions/markdown/Underline/index.js +2 -2
  166. package/build/esm/extensions/markdown/Underline/index.js.map +1 -1
  167. package/build/esm/extensions/yfm/Monospace/index.js +2 -2
  168. package/build/esm/extensions/yfm/Monospace/index.js.map +1 -1
  169. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +2 -0
  170. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
  171. package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/schema.js +2 -0
  172. package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/schema.js.map +1 -1
  173. package/build/esm/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/YfmNoteToolbar.css +20 -0
  174. package/build/esm/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/YfmNoteToolbar.d.ts +9 -0
  175. package/build/esm/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/YfmNoteToolbar.js +74 -0
  176. package/build/esm/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/YfmNoteToolbar.js.map +1 -0
  177. package/build/esm/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/index.d.ts +1 -2
  178. package/build/esm/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/index.js +4 -64
  179. package/build/esm/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/index.js.map +1 -1
  180. package/build/esm/extensions/yfm/YfmTable/YfmTableSpecs/schema.js +2 -0
  181. package/build/esm/extensions/yfm/YfmTable/YfmTableSpecs/schema.js.map +1 -1
  182. package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js +3 -0
  183. package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
  184. package/build/esm/plugins/BaseTooltip/index.d.ts +1 -0
  185. package/build/esm/plugins/BaseTooltip/index.js +4 -3
  186. package/build/esm/plugins/BaseTooltip/index.js.map +1 -1
  187. package/build/esm/toolbar/ToolbarGroup.js +4 -3
  188. package/build/esm/toolbar/ToolbarGroup.js.map +1 -1
  189. package/build/esm/toolbar/types.d.ts +2 -0
  190. package/build/esm/toolbar/types.js.map +1 -1
  191. package/build/esm/utils/actions.d.ts +6 -0
  192. package/build/esm/utils/actions.js +24 -1
  193. package/build/esm/utils/actions.js.map +1 -1
  194. package/build/esm/utils/marks.d.ts +6 -0
  195. package/build/esm/utils/marks.js +30 -0
  196. package/build/esm/utils/marks.js.map +1 -1
  197. package/build/esm/utils/transaction.d.ts +1 -0
  198. package/build/esm/utils/transaction.js +36 -0
  199. package/build/esm/utils/transaction.js.map +1 -0
  200. package/build/esm/version.js +1 -1
  201. package/build/esm/version.js.map +1 -1
  202. package/build/styles.css +9 -5
  203. package/package.json +4 -3
  204. package/build/cjs/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/index.css +0 -16
  205. package/build/esm/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/index.css +0 -16
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { createElement as _createElement } from "react";
3
+ import { Fragment } from 'react';
3
4
  import { cn } from "../classname.js";
4
5
  import { ToolbarButton } from "./ToolbarButton.js";
5
6
  import { ToolbarButtonPopup } from "./ToolbarButtonPopup.js";
@@ -22,13 +23,13 @@ export function ToolbarButtonGroup({ className, editor, data, focus, onClick, di
22
23
  if (item.type === ToolbarDataType.ReactComponent) {
23
24
  const Component = item.component;
24
25
  const renderFn = () => (_jsx(Component, { ...item.props, editor: editor, focus: focus, onClick: onClick, className: b(item.type, { id: item.id }, [item.className]) }));
25
- return item.noRerenderOnUpdate ? (renderFn()) : (_jsx(ToolbarUpdateOnRerender, { content: renderFn }, item.id));
26
+ return item.noRerenderOnUpdate ? (_jsx(Fragment, { children: renderFn() }, item.id)) : (_jsx(ToolbarUpdateOnRerender, { content: renderFn }, item.id));
26
27
  }
27
28
  if (item.type === ToolbarDataType.ReactNode) {
28
- return _jsx(ToolbarUpdateOnRerender, { content: () => item.content }, item.id);
29
+ return item.noRerenderOnUpdate ? (_jsx(Fragment, { children: item.content }, item.id)) : (_jsx(ToolbarUpdateOnRerender, { content: () => item.content }, item.id));
29
30
  }
30
31
  if (item.type === ToolbarDataType.ReactNodeFn) {
31
- return (_jsx(ToolbarUpdateOnRerender, { content: () => item.content(editor) }, item.id));
32
+ return item.noRerenderOnUpdate ? (_jsx(Fragment, { children: item.content(editor) }, item.id)) : (_jsx(ToolbarUpdateOnRerender, { content: () => item.content(editor) }, item.id));
32
33
  }
33
34
  return null;
34
35
  }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"ToolbarGroup.js","sourceRoot":"../../../src","sources":["toolbar/ToolbarGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["import {cn} from '../classname';\n\nimport {ToolbarButton} from './ToolbarButton';\nimport {ToolbarButtonPopup} from './ToolbarButtonPopup';\nimport {ToolbarListButton} from './ToolbarListButton';\nimport {ToolbarUpdateOnRerender} from './ToolbarRerender';\nimport {type ToolbarBaseProps, ToolbarDataType, type ToolbarGroupData} from './types';\n\nimport './ToolbarGroup.scss';\n\nconst b = cn('toolbar-group');\n\nexport type {ToolbarGroupData};\n\nexport type ToolbarGroupProps<E> = ToolbarBaseProps<E> & {\n data: ToolbarGroupData<E>;\n};\n\nexport function ToolbarButtonGroup<E>({\n className,\n editor,\n data,\n focus,\n onClick,\n disableTooltip,\n disablePreview,\n disableHotkey,\n}: ToolbarGroupProps<E>) {\n return (\n <div className={b(null, [className])}>\n {data.map((item) => {\n if (item.type === ToolbarDataType.SingleButton) {\n return (\n <ToolbarButton\n {...item}\n key={item.id}\n editor={editor}\n focus={focus}\n onClick={onClick}\n className={b(item.type, {id: item.id}, [item.className])}\n disableTooltip={disableTooltip}\n />\n );\n }\n\n if (item.type === ToolbarDataType.ButtonPopup) {\n return (\n <ToolbarButtonPopup\n {...item}\n key={item.id}\n editor={editor}\n focus={focus}\n onClick={onClick}\n className={b(item.type, {id: item.id}, item.className)}\n disableTooltip={disableTooltip}\n />\n );\n }\n\n if (item.type === ToolbarDataType.ListButton) {\n return (\n <ToolbarListButton\n {...item}\n qaMenu=\"g-md-toolbar-menu\"\n key={item.id}\n editor={editor}\n focus={focus}\n onClick={onClick}\n className={b(item.type, {id: item.id}, [item.className])}\n disablePreview={disablePreview}\n disableHotkey={disableHotkey}\n disableTooltip={disableTooltip}\n />\n );\n }\n\n if (item.type === ToolbarDataType.ReactComponent) {\n const Component = item.component;\n const renderFn = () => (\n <Component\n {...item.props}\n editor={editor}\n focus={focus}\n onClick={onClick}\n className={b(item.type, {id: item.id}, [item.className])}\n />\n );\n return item.noRerenderOnUpdate ? (\n renderFn()\n ) : (\n <ToolbarUpdateOnRerender key={item.id} content={renderFn} />\n );\n }\n\n if (item.type === ToolbarDataType.ReactNode) {\n return <ToolbarUpdateOnRerender key={item.id} content={() => item.content} />;\n }\n\n if (item.type === ToolbarDataType.ReactNodeFn) {\n return (\n <ToolbarUpdateOnRerender\n key={item.id}\n content={() => item.content(editor)}\n />\n );\n }\n\n return null;\n })}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"ToolbarGroup.js","sourceRoot":"../../../src","sources":["toolbar/ToolbarGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Fragment} from 'react';\n\nimport {cn} from '../classname';\n\nimport {ToolbarButton} from './ToolbarButton';\nimport {ToolbarButtonPopup} from './ToolbarButtonPopup';\nimport {ToolbarListButton} from './ToolbarListButton';\nimport {ToolbarUpdateOnRerender} from './ToolbarRerender';\nimport {type ToolbarBaseProps, ToolbarDataType, type ToolbarGroupData} from './types';\n\nimport './ToolbarGroup.scss';\n\nconst b = cn('toolbar-group');\n\nexport type {ToolbarGroupData};\n\nexport type ToolbarGroupProps<E> = ToolbarBaseProps<E> & {\n data: ToolbarGroupData<E>;\n};\n\nexport function ToolbarButtonGroup<E>({\n className,\n editor,\n data,\n focus,\n onClick,\n disableTooltip,\n disablePreview,\n disableHotkey,\n}: ToolbarGroupProps<E>) {\n return (\n <div className={b(null, [className])}>\n {data.map((item) => {\n if (item.type === ToolbarDataType.SingleButton) {\n return (\n <ToolbarButton\n {...item}\n key={item.id}\n editor={editor}\n focus={focus}\n onClick={onClick}\n className={b(item.type, {id: item.id}, [item.className])}\n disableTooltip={disableTooltip}\n />\n );\n }\n\n if (item.type === ToolbarDataType.ButtonPopup) {\n return (\n <ToolbarButtonPopup\n {...item}\n key={item.id}\n editor={editor}\n focus={focus}\n onClick={onClick}\n className={b(item.type, {id: item.id}, item.className)}\n disableTooltip={disableTooltip}\n />\n );\n }\n\n if (item.type === ToolbarDataType.ListButton) {\n return (\n <ToolbarListButton\n {...item}\n qaMenu=\"g-md-toolbar-menu\"\n key={item.id}\n editor={editor}\n focus={focus}\n onClick={onClick}\n className={b(item.type, {id: item.id}, [item.className])}\n disablePreview={disablePreview}\n disableHotkey={disableHotkey}\n disableTooltip={disableTooltip}\n />\n );\n }\n\n if (item.type === ToolbarDataType.ReactComponent) {\n const Component = item.component;\n const renderFn = () => (\n <Component\n {...item.props}\n editor={editor}\n focus={focus}\n onClick={onClick}\n className={b(item.type, {id: item.id}, [item.className])}\n />\n );\n return item.noRerenderOnUpdate ? (\n <Fragment key={item.id}>{renderFn()}</Fragment>\n ) : (\n <ToolbarUpdateOnRerender key={item.id} content={renderFn} />\n );\n }\n\n if (item.type === ToolbarDataType.ReactNode) {\n return item.noRerenderOnUpdate ? (\n <Fragment key={item.id}>{item.content}</Fragment>\n ) : (\n <ToolbarUpdateOnRerender key={item.id} content={() => item.content} />\n );\n }\n\n if (item.type === ToolbarDataType.ReactNodeFn) {\n return item.noRerenderOnUpdate ? (\n <Fragment key={item.id}>{item.content(editor)}</Fragment>\n ) : (\n <ToolbarUpdateOnRerender\n key={item.id}\n content={() => item.content(editor)}\n />\n );\n }\n\n return null;\n })}\n </div>\n );\n}\n"]}
@@ -103,6 +103,7 @@ export type ToolbarReactNodeData = {
103
103
  type: ToolbarDataType.ReactNode;
104
104
  width: number;
105
105
  content: React.ReactNode;
106
+ noRerenderOnUpdate?: boolean;
106
107
  };
107
108
  /**
108
109
  * @deprecated Use ReactComponent type instead
@@ -112,4 +113,5 @@ export type ToolbarReactNodeFnData<E> = {
112
113
  type: ToolbarDataType.ReactNodeFn;
113
114
  width: number;
114
115
  content: (e: E) => React.ReactNode;
116
+ noRerenderOnUpdate?: boolean;
115
117
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"../../../src","sources":["toolbar/types.ts"],"names":[],"mappings":"AAgDA,MAAM,CAAN,IAAY,eASX;AATD,WAAY,eAAe;IACvB,4CAAyB,CAAA;IACzB,wCAAqB,CAAA;IACrB,0CAAuB,CAAA;IACvB,kDAAkD;IAClD,uCAAoB,CAAA;IACpB,kDAAkD;IAClD,4CAAyB,CAAA;IACzB,iDAA8B,CAAA;AAClC,CAAC,EATW,eAAe,KAAf,eAAe,QAS1B","sourcesContent":["import type {HotkeyProps, IconProps, QAProps} from '@gravity-ui/uikit';\n\nimport type {ClassNameProps} from '../classname';\n\nexport type ToolbarBaseProps<E> = ClassNameProps &\n QAProps & {\n editor: E;\n focus(): void;\n onClick?(id: string, attrs?: {[key: string]: any}): void;\n display?: ToolbarDisplay;\n disableTooltip?: boolean;\n disablePreview?: boolean;\n disableHotkey?: boolean;\n };\n\nexport type ToolbarIconData = Pick<IconProps, 'data' | 'size'>;\nexport type ToolbarGroupData<E> = Array<ToolbarGroupItemData<E>>;\nexport type ToolbarData<E> = ToolbarGroupData<E>[];\nexport type ToolbarDisplay = 'shrink' | 'scroll';\n\nexport type ToolbarItemData<E> = QAProps & {\n id: string;\n icon: ToolbarIconData;\n title: string | (() => string);\n hint?: string | (() => string);\n hotkey?: HotkeyProps['value'];\n preview?: React.ReactNode;\n theme?: 'normal' | 'danger';\n /**\n * Alternative IDs that can be used to find this command\n */\n aliases?: string[];\n /**\n * Show hint when _isEnable()_ returns false\n *\n * `false` – don't show hint;\n *\n * `true` – show default hint;\n *\n * `string` or `() => string` – show hint with custom message.\n * @default true\n */\n hintWhenDisabled?: boolean | string | (() => string);\n exec(editor: E): void;\n isActive(editor: E): boolean;\n isEnable(editor: E): boolean;\n};\n\nexport enum ToolbarDataType {\n SingleButton = 's-button',\n ListButton = 'list-b',\n ButtonPopup = 'b-popup',\n /** @deprecated Use ReactComponent type instead */\n ReactNode = 'r-node',\n /** @deprecated Use ReactComponent type instead */\n ReactNodeFn = 'r-node-fn',\n ReactComponent = 'r-component',\n}\n\nexport type ToolbarGroupItemData<E> =\n | ToolbarSingleItemData<E>\n | ToolbarButtonPopupData<E>\n | ToolbarListItemData<E>\n | ToolbarReactNodeData\n | ToolbarReactNodeFnData<E>\n | ToolbarReactComponentData<E>;\n\nexport type ToolbarSingleItemData<E> = ToolbarItemData<E> & {\n id: string;\n type: ToolbarDataType.SingleButton;\n className?: string;\n};\n\nexport type ToolbarListItemData<E> = ToolbarListButtonData<E> & {\n id: string;\n type: ToolbarDataType.ListButton;\n className?: string;\n};\n\nexport type ToolbarReactComponentData<E> = {\n id: string;\n type: ToolbarDataType.ReactComponent;\n width: number;\n className?: string;\n component: React.ComponentType<ToolbarBaseProps<E>>;\n noRerenderOnUpdate?: boolean;\n props?: object;\n};\n\nexport type ToolbarButtonPopupData<E> = ToolbarItemData<E> & {\n /** not used, may be an empty function */\n exec: ToolbarItemData<E>['exec'];\n type: ToolbarDataType.ButtonPopup;\n renderPopup: (\n props: ToolbarBaseProps<E> & {hide: () => void; anchorElement: HTMLElement | null},\n ) => React.ReactNode;\n className?: string;\n};\n\nexport type ToolbarListButtonItemData<E> = ToolbarItemData<E> & {\n doNotActivateList?: boolean;\n};\n\nexport type ToolbarListButtonData<E> = {\n icon: ToolbarIconData;\n title: string | (() => string);\n withArrow?: boolean;\n data: ToolbarListButtonItemData<E>[];\n alwaysActive?: boolean;\n hideDisabled?: boolean;\n /** When state changes to active, replace default icon with icon of first active item */\n replaceActiveIcon?: boolean;\n};\n\n/**\n * @deprecated Use ReactComponent type instead\n */\nexport type ToolbarReactNodeData = {\n id: string;\n type: ToolbarDataType.ReactNode;\n width: number;\n content: React.ReactNode;\n};\n\n/**\n * @deprecated Use ReactComponent type instead\n */\nexport type ToolbarReactNodeFnData<E> = {\n id: string;\n type: ToolbarDataType.ReactNodeFn;\n width: number;\n content: (e: E) => React.ReactNode;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"../../../src","sources":["toolbar/types.ts"],"names":[],"mappings":"AAgDA,MAAM,CAAN,IAAY,eASX;AATD,WAAY,eAAe;IACvB,4CAAyB,CAAA;IACzB,wCAAqB,CAAA;IACrB,0CAAuB,CAAA;IACvB,kDAAkD;IAClD,uCAAoB,CAAA;IACpB,kDAAkD;IAClD,4CAAyB,CAAA;IACzB,iDAA8B,CAAA;AAClC,CAAC,EATW,eAAe,KAAf,eAAe,QAS1B","sourcesContent":["import type {HotkeyProps, IconProps, QAProps} from '@gravity-ui/uikit';\n\nimport type {ClassNameProps} from '../classname';\n\nexport type ToolbarBaseProps<E> = ClassNameProps &\n QAProps & {\n editor: E;\n focus(): void;\n onClick?(id: string, attrs?: {[key: string]: any}): void;\n display?: ToolbarDisplay;\n disableTooltip?: boolean;\n disablePreview?: boolean;\n disableHotkey?: boolean;\n };\n\nexport type ToolbarIconData = Pick<IconProps, 'data' | 'size'>;\nexport type ToolbarGroupData<E> = Array<ToolbarGroupItemData<E>>;\nexport type ToolbarData<E> = ToolbarGroupData<E>[];\nexport type ToolbarDisplay = 'shrink' | 'scroll';\n\nexport type ToolbarItemData<E> = QAProps & {\n id: string;\n icon: ToolbarIconData;\n title: string | (() => string);\n hint?: string | (() => string);\n hotkey?: HotkeyProps['value'];\n preview?: React.ReactNode;\n theme?: 'normal' | 'danger';\n /**\n * Alternative IDs that can be used to find this command\n */\n aliases?: string[];\n /**\n * Show hint when _isEnable()_ returns false\n *\n * `false` – don't show hint;\n *\n * `true` – show default hint;\n *\n * `string` or `() => string` – show hint with custom message.\n * @default true\n */\n hintWhenDisabled?: boolean | string | (() => string);\n exec(editor: E): void;\n isActive(editor: E): boolean;\n isEnable(editor: E): boolean;\n};\n\nexport enum ToolbarDataType {\n SingleButton = 's-button',\n ListButton = 'list-b',\n ButtonPopup = 'b-popup',\n /** @deprecated Use ReactComponent type instead */\n ReactNode = 'r-node',\n /** @deprecated Use ReactComponent type instead */\n ReactNodeFn = 'r-node-fn',\n ReactComponent = 'r-component',\n}\n\nexport type ToolbarGroupItemData<E> =\n | ToolbarSingleItemData<E>\n | ToolbarButtonPopupData<E>\n | ToolbarListItemData<E>\n | ToolbarReactNodeData\n | ToolbarReactNodeFnData<E>\n | ToolbarReactComponentData<E>;\n\nexport type ToolbarSingleItemData<E> = ToolbarItemData<E> & {\n id: string;\n type: ToolbarDataType.SingleButton;\n className?: string;\n};\n\nexport type ToolbarListItemData<E> = ToolbarListButtonData<E> & {\n id: string;\n type: ToolbarDataType.ListButton;\n className?: string;\n};\n\nexport type ToolbarReactComponentData<E> = {\n id: string;\n type: ToolbarDataType.ReactComponent;\n width: number;\n className?: string;\n component: React.ComponentType<ToolbarBaseProps<E>>;\n noRerenderOnUpdate?: boolean;\n props?: object;\n};\n\nexport type ToolbarButtonPopupData<E> = ToolbarItemData<E> & {\n /** not used, may be an empty function */\n exec: ToolbarItemData<E>['exec'];\n type: ToolbarDataType.ButtonPopup;\n renderPopup: (\n props: ToolbarBaseProps<E> & {hide: () => void; anchorElement: HTMLElement | null},\n ) => React.ReactNode;\n className?: string;\n};\n\nexport type ToolbarListButtonItemData<E> = ToolbarItemData<E> & {\n doNotActivateList?: boolean;\n};\n\nexport type ToolbarListButtonData<E> = {\n icon: ToolbarIconData;\n title: string | (() => string);\n withArrow?: boolean;\n data: ToolbarListButtonItemData<E>[];\n alwaysActive?: boolean;\n hideDisabled?: boolean;\n /** When state changes to active, replace default icon with icon of first active item */\n replaceActiveIcon?: boolean;\n};\n\n/**\n * @deprecated Use ReactComponent type instead\n */\nexport type ToolbarReactNodeData = {\n id: string;\n type: ToolbarDataType.ReactNode;\n width: number;\n content: React.ReactNode;\n noRerenderOnUpdate?: boolean;\n};\n\n/**\n * @deprecated Use ReactComponent type instead\n */\nexport type ToolbarReactNodeFnData<E> = {\n id: string;\n type: ToolbarDataType.ReactNodeFn;\n width: number;\n content: (e: E) => React.ReactNode;\n noRerenderOnUpdate?: boolean;\n};\n"]}
@@ -2,3 +2,9 @@ import type { MarkType } from 'prosemirror-model';
2
2
  import type { ActionSpec } from "../core/index.js";
3
3
  export declare function defineActions<Keys extends string>(actions: Record<Keys, ActionSpec>): Record<Keys, ActionSpec>;
4
4
  export declare function createToggleMarkAction(markType: MarkType): ActionSpec;
5
+ /**
6
+ * Like createToggleMarkAction, but blocks applying the mark when the selection
7
+ * boundaries would produce markdown that cannot round-trip (e.g. `word**,**`).
8
+ * Removing the mark (toggling off) is always allowed.
9
+ */
10
+ export declare function createMarkdownInlineMarkAction(markType: MarkType): ActionSpec;
@@ -1,5 +1,5 @@
1
1
  import { toggleMark } from 'prosemirror-commands';
2
- import { isMarkActive } from "./marks.js";
2
+ import { canApplyInlineMarkInMarkdown, isMarkActive } from "./marks.js";
3
3
  export function defineActions(actions) {
4
4
  return actions;
5
5
  }
@@ -11,4 +11,27 @@ export function createToggleMarkAction(markType) {
11
11
  run: command,
12
12
  };
13
13
  }
14
+ /**
15
+ * Like createToggleMarkAction, but blocks applying the mark when the selection
16
+ * boundaries would produce markdown that cannot round-trip (e.g. `word**,**`).
17
+ * Removing the mark (toggling off) is always allowed.
18
+ */
19
+ export function createMarkdownInlineMarkAction(markType) {
20
+ const base = createToggleMarkAction(markType);
21
+ return {
22
+ isActive: base.isActive,
23
+ isEnable: (state, dispatch, view, attrs) => {
24
+ const isBlocked = !isMarkActive(state, markType) && !canApplyInlineMarkInMarkdown(state);
25
+ if (isBlocked)
26
+ return false;
27
+ return base.isEnable(state, dispatch, view, attrs);
28
+ },
29
+ run: (state, dispatch, view, attrs) => {
30
+ const isBlocked = !isMarkActive(state, markType) && !canApplyInlineMarkInMarkdown(state);
31
+ if (isBlocked)
32
+ return;
33
+ base.run(state, dispatch, view, attrs);
34
+ },
35
+ };
36
+ }
14
37
  //# sourceMappingURL=actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"../../../src","sources":["utils/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAKhD,OAAO,EAAC,YAAY,EAAC,mBAAgB;AAErC,MAAM,UAAU,aAAa,CAAsB,OAAiC;IAChF,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAkB;IACrD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO;QACH,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3D,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE,OAAO;KACf,CAAC;AACN,CAAC","sourcesContent":["import {toggleMark} from 'prosemirror-commands';\nimport type {MarkType} from 'prosemirror-model';\n\nimport type {ActionSpec} from '../core';\n\nimport {isMarkActive} from './marks';\n\nexport function defineActions<Keys extends string>(actions: Record<Keys, ActionSpec>) {\n return actions;\n}\n\nexport function createToggleMarkAction(markType: MarkType): ActionSpec {\n const command = toggleMark(markType);\n return {\n isActive: (state) => Boolean(isMarkActive(state, markType)),\n isEnable: command,\n run: command,\n };\n}\n"]}
1
+ {"version":3,"file":"actions.js","sourceRoot":"../../../src","sources":["utils/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAKhD,OAAO,EAAC,4BAA4B,EAAE,YAAY,EAAC,mBAAgB;AAEnE,MAAM,UAAU,aAAa,CAAsB,OAAiC;IAChF,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAkB;IACrD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO;QACH,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3D,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE,OAAO;KACf,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,QAAkB;IAC7D,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO;QACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YACvC,MAAM,SAAS,GACX,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;YAC3E,IAAI,SAAS;gBAAE,OAAO,KAAK,CAAC;YAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YAClC,MAAM,SAAS,GACX,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;YAC3E,IAAI,SAAS;gBAAE,OAAO;YACtB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import {toggleMark} from 'prosemirror-commands';\nimport type {MarkType} from 'prosemirror-model';\n\nimport type {ActionSpec} from '../core';\n\nimport {canApplyInlineMarkInMarkdown, isMarkActive} from './marks';\n\nexport function defineActions<Keys extends string>(actions: Record<Keys, ActionSpec>) {\n return actions;\n}\n\nexport function createToggleMarkAction(markType: MarkType): ActionSpec {\n const command = toggleMark(markType);\n return {\n isActive: (state) => Boolean(isMarkActive(state, markType)),\n isEnable: command,\n run: command,\n };\n}\n\n/**\n * Like createToggleMarkAction, but blocks applying the mark when the selection\n * boundaries would produce markdown that cannot round-trip (e.g. `word**,**`).\n * Removing the mark (toggling off) is always allowed.\n */\nexport function createMarkdownInlineMarkAction(markType: MarkType): ActionSpec {\n const base = createToggleMarkAction(markType);\n return {\n isActive: base.isActive,\n isEnable: (state, dispatch, view, attrs) => {\n const isBlocked =\n !isMarkActive(state, markType) && !canApplyInlineMarkInMarkdown(state);\n if (isBlocked) return false;\n return base.isEnable(state, dispatch, view, attrs);\n },\n run: (state, dispatch, view, attrs) => {\n const isBlocked =\n !isMarkActive(state, markType) && !canApplyInlineMarkInMarkdown(state);\n if (isBlocked) return;\n base.run(state, dispatch, view, attrs);\n },\n };\n}\n"]}
@@ -2,3 +2,9 @@ import type { Mark, MarkType, Node } from 'prosemirror-model';
2
2
  import type { EditorState } from 'prosemirror-state';
3
3
  export declare const findMark: (node: Node, markType: MarkType) => Mark | undefined;
4
4
  export declare function isMarkActive(state: EditorState, type: MarkType): boolean | Mark | undefined;
5
+ /**
6
+ * Returns `false` when the current selection cannot be wrapped in an inline mark
7
+ * without breaking markdown round-trip, per CommonMark flanking delimiter rules:
8
+ * https://spec.commonmark.org/0.31.2/#left-flanking-delimiter-run
9
+ */
10
+ export declare function canApplyInlineMarkInMarkdown(state: EditorState): boolean;
@@ -1,3 +1,4 @@
1
+ import { getParserFromState } from "../core/utils/parser.js";
1
2
  export const findMark = (node, markType) => {
2
3
  return node.marks.find((mark) => mark.type.name === markType.name);
3
4
  };
@@ -8,4 +9,33 @@ export function isMarkActive(state, type) {
8
9
  }
9
10
  return state.doc.rangeHasMark(from, to, type);
10
11
  }
12
+ /**
13
+ * Returns `false` when the current selection cannot be wrapped in an inline mark
14
+ * without breaking markdown round-trip, per CommonMark flanking delimiter rules:
15
+ * https://spec.commonmark.org/0.31.2/#left-flanking-delimiter-run
16
+ */
17
+ export function canApplyInlineMarkInMarkdown(state) {
18
+ const { from, to, empty } = state.selection;
19
+ if (empty) {
20
+ return true;
21
+ }
22
+ const text = state.doc.textBetween(from, to);
23
+ if (!text) {
24
+ return true;
25
+ }
26
+ const parser = getParserFromState(state);
27
+ const isPunct = (ch) => parser.isPunctChar(ch);
28
+ const isWordChar = (ch) => !/\s/.test(ch) && !isPunct(ch);
29
+ const chars = [...text];
30
+ const firstChar = chars[0];
31
+ const lastChar = chars.at(-1);
32
+ const charBefore = from > 0 ? state.doc.textBetween(from - 1, from) : '';
33
+ const charAfter = to < state.doc.content.size ? state.doc.textBetween(to, to + 1) : '';
34
+ // opening delimiter would not be left-flanking
35
+ if (isPunct(firstChar) && charBefore && isWordChar(charBefore)) {
36
+ return false;
37
+ }
38
+ // closing delimiter would not be right-flanking
39
+ return !(lastChar && isPunct(lastChar) && charAfter && isWordChar(charAfter));
40
+ }
11
41
  //# sourceMappingURL=marks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"marks.js","sourceRoot":"../../../src","sources":["utils/marks.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,QAAkB,EAAoB,EAAE;IACzE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAkB,EAAE,IAAc;IAC3D,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IAEjD,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import type {Mark, MarkType, Node} from 'prosemirror-model';\nimport type {EditorState} from 'prosemirror-state';\n\nexport const findMark = (node: Node, markType: MarkType): Mark | undefined => {\n return node.marks.find((mark) => mark.type.name === markType.name);\n};\n\nexport function isMarkActive(state: EditorState, type: MarkType) {\n const {from, $from, to, empty} = state.selection;\n\n if (empty) {\n return type.isInSet(state.storedMarks || $from.marks());\n }\n\n return state.doc.rangeHasMark(from, to, type);\n}\n"]}
1
+ {"version":3,"file":"marks.js","sourceRoot":"../../../src","sources":["utils/marks.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,kBAAkB,EAAC,gCAA6B;AAExD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,QAAkB,EAAoB,EAAE;IACzE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAkB,EAAE,IAAc;IAC3D,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IAEjD,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAkB;IAC3D,MAAM,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IAC1C,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAElE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,SAAS,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvF,+CAA+C;IAC/C,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,gDAAgD;IAChD,OAAO,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAClF,CAAC","sourcesContent":["import type {Mark, MarkType, Node} from 'prosemirror-model';\nimport type {EditorState} from 'prosemirror-state';\n\nimport {getParserFromState} from '../core/utils/parser';\n\nexport const findMark = (node: Node, markType: MarkType): Mark | undefined => {\n return node.marks.find((mark) => mark.type.name === markType.name);\n};\n\nexport function isMarkActive(state: EditorState, type: MarkType) {\n const {from, $from, to, empty} = state.selection;\n\n if (empty) {\n return type.isInSet(state.storedMarks || $from.marks());\n }\n\n return state.doc.rangeHasMark(from, to, type);\n}\n\n/**\n * Returns `false` when the current selection cannot be wrapped in an inline mark\n * without breaking markdown round-trip, per CommonMark flanking delimiter rules:\n * https://spec.commonmark.org/0.31.2/#left-flanking-delimiter-run\n */\nexport function canApplyInlineMarkInMarkdown(state: EditorState): boolean {\n const {from, to, empty} = state.selection;\n if (empty) {\n return true;\n }\n\n const text = state.doc.textBetween(from, to);\n if (!text) {\n return true;\n }\n\n const parser = getParserFromState(state);\n const isPunct = (ch: string) => parser.isPunctChar(ch);\n const isWordChar = (ch: string) => !/\\s/.test(ch) && !isPunct(ch);\n\n const chars = [...text];\n const firstChar = chars[0];\n const lastChar = chars.at(-1);\n\n const charBefore = from > 0 ? state.doc.textBetween(from - 1, from) : '';\n const charAfter = to < state.doc.content.size ? state.doc.textBetween(to, to + 1) : '';\n\n // opening delimiter would not be left-flanking\n if (isPunct(firstChar) && charBefore && isWordChar(charBefore)) {\n return false;\n }\n\n // closing delimiter would not be right-flanking\n return !(lastChar && isPunct(lastChar) && charAfter && isWordChar(charAfter));\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,36 @@
1
+ import { AttrStep } from "../pm/transform.js";
2
+ /** @internal */
3
+ export function getChangedRanges(tr) {
4
+ const ranges = [];
5
+ const { maps } = tr.mapping;
6
+ tr.steps.forEach((step, i) => {
7
+ if (step instanceof AttrStep) {
8
+ let pos = step.pos;
9
+ for (let j = i + 1; j < maps.length; j++) {
10
+ pos = maps[j].map(pos);
11
+ }
12
+ const node = tr.doc.nodeAt(pos);
13
+ if (node) {
14
+ ranges.push({ from: pos, to: pos + node.nodeSize });
15
+ }
16
+ return;
17
+ }
18
+ step.getMap().forEach((_oldStart, _oldEnd, newStart, newEnd) => {
19
+ let from = newStart;
20
+ let to = newEnd;
21
+ for (let j = i + 1; j < maps.length; j++) {
22
+ from = maps[j].map(from, -1);
23
+ to = maps[j].map(to, 1);
24
+ }
25
+ ranges.push({ from, to });
26
+ });
27
+ });
28
+ return ranges;
29
+ }
30
+ /** @internal */
31
+ export function forEachChangedNode(tr, callback) {
32
+ for (const { from, to } of getChangedRanges(tr)) {
33
+ tr.doc.nodesBetween(from, to, callback);
34
+ }
35
+ }
36
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"../../../src","sources":["utils/transaction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAC,2BAAsB;AAEvC,gBAAgB;AAChB,MAAM,UAAU,gBAAgB,CAAC,EAAe;IAC5C,MAAM,MAAM,GAAiC,EAAE,CAAC;IAChD,MAAM,EAAC,IAAI,EAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IAE1B,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACzB,IAAI,IAAI,YAAY,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACnB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,IAAI,EAAE,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAC,CAAC,CAAC;YACtD,CAAC;YACD,OAAO;QACX,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;YAC3D,IAAI,IAAI,GAAG,QAAQ,CAAC;YACpB,IAAI,EAAE,GAAG,MAAM,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7B,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,EAAE,EAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,kBAAkB,CAC9B,EAAe,EACf,QAAyF;IAEzF,KAAK,MAAM,EAAC,IAAI,EAAE,EAAE,EAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5C,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC","sourcesContent":["import type {Node} from '#pm/model';\nimport type {Transaction} from '#pm/state';\nimport {AttrStep} from '#pm/transform';\n\n/** @internal */\nexport function getChangedRanges(tr: Transaction): {from: number; to: number}[] {\n const ranges: {from: number; to: number}[] = [];\n const {maps} = tr.mapping;\n\n tr.steps.forEach((step, i) => {\n if (step instanceof AttrStep) {\n let pos = step.pos;\n for (let j = i + 1; j < maps.length; j++) {\n pos = maps[j].map(pos);\n }\n const node = tr.doc.nodeAt(pos);\n if (node) {\n ranges.push({from: pos, to: pos + node.nodeSize});\n }\n return;\n }\n\n step.getMap().forEach((_oldStart, _oldEnd, newStart, newEnd) => {\n let from = newStart;\n let to = newEnd;\n for (let j = i + 1; j < maps.length; j++) {\n from = maps[j].map(from, -1);\n to = maps[j].map(to, 1);\n }\n ranges.push({from, to});\n });\n });\n\n return ranges;\n}\n\n/** @internal */\nexport function forEachChangedNode(\n tr: Transaction,\n callback: (node: Node, pos: number, parent: Node | null, index: number) => boolean | void,\n): void {\n for (const {from, to} of getChangedRanges(tr)) {\n tr.doc.nodesBetween(from, to, callback);\n }\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  /** During build process, the current version will be injected here */
2
- export const VERSION = typeof '15.35.1' !== 'undefined' ? '15.35.1' : 'unknown';
2
+ export const VERSION = typeof '15.37.0' !== 'undefined' ? '15.37.0' : 'unknown';
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.35.1' !== 'undefined' ? '15.35.1' : 'unknown';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.37.0' !== 'undefined' ? '15.37.0' : 'unknown';\n"]}
package/build/styles.css CHANGED
@@ -2392,20 +2392,24 @@ body :has(.g-md-resizable_resizing) {
2392
2392
  right: 3px;
2393
2393
  }
2394
2394
  .g-md-yfm-note-toolbar {
2395
- margin: 2px 8px;
2395
+ margin: var(--g-spacing-half);
2396
2396
  }
2397
2397
 
2398
2398
  .g-md-toolbar-group__s-button_id_note-type-tip {
2399
- color: var(--yfm-color-note-tip);
2399
+ --g-button-text-color: var(--yfm-color-note-tip);
2400
+ --g-button-text-color-hover: var(--yfm-color-note-tip);
2400
2401
  }
2401
2402
  .g-md-toolbar-group__s-button_id_note-type-info {
2402
- color: var(--yfm-color-note-info);
2403
+ --g-button-text-color: var(--yfm-color-note-info);
2404
+ --g-button-text-color-hover: var(--yfm-color-note-info);
2403
2405
  }
2404
2406
  .g-md-toolbar-group__s-button_id_note-type-alert {
2405
- color: var(--yfm-color-note-important);
2407
+ --g-button-text-color: var(--yfm-color-note-important);
2408
+ --g-button-text-color-hover: var(--yfm-color-note-important);
2406
2409
  }
2407
2410
  .g-md-toolbar-group__s-button_id_note-type-warning {
2408
- color: var(--yfm-color-note-warning);
2411
+ --g-button-text-color: var(--yfm-color-note-warning);
2412
+ --g-button-text-color-hover: var(--yfm-color-note-warning);
2409
2413
  }
2410
2414
  .g-md-image-tooltip-form__input_type_width, .g-md-image-tooltip-form__input_type_height {
2411
2415
  max-width: 112px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/markdown-editor",
3
- "version": "15.35.1",
3
+ "version": "15.37.0",
4
4
  "description": "Markdown wysiwyg and markup editor",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -141,7 +141,8 @@
141
141
  "module": "build/esm/index.js",
142
142
  "types": "build/esm/index.d.ts",
143
143
  "files": [
144
- "build"
144
+ "build",
145
+ "README.md"
145
146
  ],
146
147
  "dependencies": {
147
148
  "@bem-react/classname": "^1.6.0",
@@ -314,6 +315,6 @@
314
315
  "test:cov": "jest --coverage",
315
316
  "test:watch": "jest --watchAll",
316
317
  "test:esbuild": "node tests/esbuild-test/esbuild-tester.js",
317
- "test:circular-deps": "node scripts/check-circular-deps.js 48"
318
+ "test:circular-deps": "node scripts/check-circular-deps.js 47"
318
319
  }
319
320
  }
@@ -1,16 +0,0 @@
1
- .g-md-yfm-note-toolbar {
2
- margin: 2px 8px;
3
- }
4
-
5
- .g-md-toolbar-group__s-button_id_note-type-tip {
6
- color: var(--yfm-color-note-tip);
7
- }
8
- .g-md-toolbar-group__s-button_id_note-type-info {
9
- color: var(--yfm-color-note-info);
10
- }
11
- .g-md-toolbar-group__s-button_id_note-type-alert {
12
- color: var(--yfm-color-note-important);
13
- }
14
- .g-md-toolbar-group__s-button_id_note-type-warning {
15
- color: var(--yfm-color-note-warning);
16
- }
@@ -1,16 +0,0 @@
1
- .g-md-yfm-note-toolbar {
2
- margin: 2px 8px;
3
- }
4
-
5
- .g-md-toolbar-group__s-button_id_note-type-tip {
6
- color: var(--yfm-color-note-tip);
7
- }
8
- .g-md-toolbar-group__s-button_id_note-type-info {
9
- color: var(--yfm-color-note-info);
10
- }
11
- .g-md-toolbar-group__s-button_id_note-type-alert {
12
- color: var(--yfm-color-note-important);
13
- }
14
- .g-md-toolbar-group__s-button_id_note-type-warning {
15
- color: var(--yfm-color-note-warning);
16
- }