@gravity-ui/markdown-editor 15.4.2 → 15.6.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 (196) hide show
  1. package/build/cjs/bundle/MarkdownEditorView.d.ts +3 -2
  2. package/build/cjs/bundle/MarkdownEditorView.js +3 -3
  3. package/build/cjs/bundle/MarkdownEditorView.js.map +1 -1
  4. package/build/cjs/bundle/MarkupEditorView.d.ts +2 -1
  5. package/build/cjs/bundle/MarkupEditorView.js +2 -2
  6. package/build/cjs/bundle/MarkupEditorView.js.map +1 -1
  7. package/build/cjs/bundle/WysiwygEditorView.d.ts +2 -1
  8. package/build/cjs/bundle/WysiwygEditorView.js +2 -2
  9. package/build/cjs/bundle/WysiwygEditorView.js.map +1 -1
  10. package/build/cjs/bundle/config/action-names.d.ts +1 -1
  11. package/build/cjs/bundle/config/action-names.js +1 -0
  12. package/build/cjs/bundle/config/action-names.js.map +1 -1
  13. package/build/cjs/bundle/config/icons.d.ts +1 -1
  14. package/build/cjs/bundle/config/icons.js +1 -0
  15. package/build/cjs/bundle/config/icons.js.map +1 -1
  16. package/build/cjs/bundle/config/w-heading-config.js +1 -0
  17. package/build/cjs/bundle/config/w-heading-config.js.map +1 -1
  18. package/build/cjs/bundle/settings/index.js +3 -3
  19. package/build/cjs/bundle/settings/index.js.map +1 -1
  20. package/build/cjs/bundle/toolbar/utils/toolbarsConfigs.js +4 -1
  21. package/build/cjs/bundle/toolbar/utils/toolbarsConfigs.js.map +1 -1
  22. package/build/cjs/bundle/types.d.ts +6 -0
  23. package/build/cjs/bundle/types.js.map +1 -1
  24. package/build/cjs/bundle/useMarkdownEditor.js +1 -0
  25. package/build/cjs/bundle/useMarkdownEditor.js.map +1 -1
  26. package/build/cjs/bundle/wysiwyg-preset.d.ts +1 -0
  27. package/build/cjs/bundle/wysiwyg-preset.js +1 -0
  28. package/build/cjs/bundle/wysiwyg-preset.js.map +1 -1
  29. package/build/cjs/extensions/additional/QuoteLink/PlaceholderWidget/commands.d.ts +3 -0
  30. package/build/cjs/extensions/additional/QuoteLink/PlaceholderWidget/commands.js +10 -0
  31. package/build/cjs/extensions/additional/QuoteLink/PlaceholderWidget/commands.js.map +1 -0
  32. package/build/cjs/extensions/additional/QuoteLink/PlaceholderWidget/descriptor.d.ts +16 -0
  33. package/build/cjs/extensions/additional/QuoteLink/PlaceholderWidget/descriptor.js +72 -0
  34. package/build/cjs/extensions/additional/QuoteLink/PlaceholderWidget/descriptor.js.map +1 -0
  35. package/build/cjs/extensions/additional/QuoteLink/QuoteLinkSpecs/index.d.ts +10 -0
  36. package/build/cjs/extensions/additional/QuoteLink/QuoteLinkSpecs/index.js +71 -0
  37. package/build/cjs/extensions/additional/QuoteLink/QuoteLinkSpecs/index.js.map +1 -0
  38. package/build/cjs/extensions/additional/QuoteLink/QuoteLinkSpecs/md/moveLinkToQuoteAttributes.d.ts +2 -0
  39. package/build/cjs/extensions/additional/QuoteLink/QuoteLinkSpecs/md/moveLinkToQuoteAttributes.js +41 -0
  40. package/build/cjs/extensions/additional/QuoteLink/QuoteLinkSpecs/md/moveLinkToQuoteAttributes.js.map +1 -0
  41. package/build/cjs/extensions/additional/QuoteLink/QuoteLinkSpecs/md/utils.d.ts +6 -0
  42. package/build/cjs/extensions/additional/QuoteLink/QuoteLinkSpecs/md/utils.js +24 -0
  43. package/build/cjs/extensions/additional/QuoteLink/QuoteLinkSpecs/md/utils.js.map +1 -0
  44. package/build/cjs/extensions/additional/QuoteLink/commands.d.ts +4 -0
  45. package/build/cjs/extensions/additional/QuoteLink/commands.js +45 -0
  46. package/build/cjs/extensions/additional/QuoteLink/commands.js.map +1 -0
  47. package/build/cjs/extensions/additional/QuoteLink/index.css +32 -0
  48. package/build/cjs/extensions/additional/QuoteLink/index.d.ts +16 -0
  49. package/build/cjs/extensions/additional/QuoteLink/index.js +42 -0
  50. package/build/cjs/extensions/additional/QuoteLink/index.js.map +1 -0
  51. package/build/cjs/extensions/additional/YfmHtmlBlock/utils.js +2 -12
  52. package/build/cjs/extensions/additional/YfmHtmlBlock/utils.js.map +1 -1
  53. package/build/cjs/extensions/behavior/Clipboard/utils.d.ts +8 -1
  54. package/build/cjs/extensions/behavior/Clipboard/utils.js +3 -3
  55. package/build/cjs/extensions/behavior/Clipboard/utils.js.map +1 -1
  56. package/build/cjs/extensions/markdown/Html/schema.js +3 -3
  57. package/build/cjs/extensions/markdown/Html/schema.js.map +1 -1
  58. package/build/cjs/extensions/markdown/Lists/actions.js +2 -2
  59. package/build/cjs/extensions/markdown/Lists/actions.js.map +1 -1
  60. package/build/cjs/extensions/markdown/Lists/commands.d.ts +2 -1
  61. package/build/cjs/extensions/markdown/Lists/commands.js +64 -0
  62. package/build/cjs/extensions/markdown/Lists/commands.js.map +1 -1
  63. package/build/cjs/extensions/markdown/Lists/index.js +2 -2
  64. package/build/cjs/extensions/markdown/Lists/index.js.map +1 -1
  65. package/build/cjs/extensions/yfm/YfmConfigs/YfmConfigsSpecs/index.d.ts +2 -0
  66. package/build/cjs/extensions/yfm/YfmConfigs/YfmConfigsSpecs/index.js +5 -2
  67. package/build/cjs/extensions/yfm/YfmConfigs/YfmConfigsSpecs/index.js.map +1 -1
  68. package/build/cjs/extensions/yfm/YfmHeading/YfmHeadingSpecs/index.d.ts +1 -1
  69. package/build/cjs/extensions/yfm/YfmHeading/YfmHeadingSpecs/index.js +2 -0
  70. package/build/cjs/extensions/yfm/YfmHeading/YfmHeadingSpecs/index.js.map +1 -1
  71. package/build/cjs/extensions/yfm/YfmHeading/YfmHeadingSpecs/markdown/heading-attrs.d.ts +9 -0
  72. package/build/cjs/extensions/yfm/YfmHeading/YfmHeadingSpecs/markdown/heading-attrs.js +46 -0
  73. package/build/cjs/extensions/yfm/YfmHeading/YfmHeadingSpecs/markdown/heading-attrs.js.map +1 -0
  74. package/build/cjs/i18n/menubar/en.json +1 -0
  75. package/build/cjs/i18n/menubar/index.d.ts +2 -1
  76. package/build/cjs/i18n/menubar/ru.json +1 -0
  77. package/build/cjs/icons/index.d.ts +1 -1
  78. package/build/cjs/icons/index.js +2 -1
  79. package/build/cjs/icons/index.js.map +1 -1
  80. package/build/cjs/markup/commands/blocks.d.ts +1 -0
  81. package/build/cjs/markup/commands/blocks.js +8 -1
  82. package/build/cjs/markup/commands/blocks.js.map +1 -1
  83. package/build/cjs/modules/toolbars/items.d.ts +3 -0
  84. package/build/cjs/modules/toolbars/items.js +23 -3
  85. package/build/cjs/modules/toolbars/items.js.map +1 -1
  86. package/build/cjs/modules/toolbars/types.d.ts +2 -0
  87. package/build/cjs/modules/toolbars/types.js.map +1 -1
  88. package/build/cjs/toolbar/ToolbarListButton.d.ts +1 -1
  89. package/build/cjs/toolbar/ToolbarListButton.js +6 -4
  90. package/build/cjs/toolbar/ToolbarListButton.js.map +1 -1
  91. package/build/cjs/toolbar/types.d.ts +2 -0
  92. package/build/cjs/toolbar/types.js.map +1 -1
  93. package/build/cjs/utils/getSanitize.d.ts +4 -0
  94. package/build/cjs/utils/getSanitize.js +16 -0
  95. package/build/cjs/utils/getSanitize.js.map +1 -0
  96. package/build/cjs/version.js +1 -1
  97. package/build/cjs/version.js.map +1 -1
  98. package/build/esm/bundle/MarkdownEditorView.d.ts +3 -2
  99. package/build/esm/bundle/MarkdownEditorView.js +3 -3
  100. package/build/esm/bundle/MarkdownEditorView.js.map +1 -1
  101. package/build/esm/bundle/MarkupEditorView.d.ts +2 -1
  102. package/build/esm/bundle/MarkupEditorView.js +2 -2
  103. package/build/esm/bundle/MarkupEditorView.js.map +1 -1
  104. package/build/esm/bundle/WysiwygEditorView.d.ts +2 -1
  105. package/build/esm/bundle/WysiwygEditorView.js +2 -2
  106. package/build/esm/bundle/WysiwygEditorView.js.map +1 -1
  107. package/build/esm/bundle/config/action-names.d.ts +1 -1
  108. package/build/esm/bundle/config/action-names.js +1 -0
  109. package/build/esm/bundle/config/action-names.js.map +1 -1
  110. package/build/esm/bundle/config/icons.d.ts +1 -1
  111. package/build/esm/bundle/config/icons.js +2 -1
  112. package/build/esm/bundle/config/icons.js.map +1 -1
  113. package/build/esm/bundle/config/w-heading-config.js +1 -0
  114. package/build/esm/bundle/config/w-heading-config.js.map +1 -1
  115. package/build/esm/bundle/settings/index.js +3 -3
  116. package/build/esm/bundle/settings/index.js.map +1 -1
  117. package/build/esm/bundle/toolbar/utils/toolbarsConfigs.js +4 -1
  118. package/build/esm/bundle/toolbar/utils/toolbarsConfigs.js.map +1 -1
  119. package/build/esm/bundle/types.d.ts +6 -0
  120. package/build/esm/bundle/types.js.map +1 -1
  121. package/build/esm/bundle/useMarkdownEditor.js +1 -0
  122. package/build/esm/bundle/useMarkdownEditor.js.map +1 -1
  123. package/build/esm/bundle/wysiwyg-preset.d.ts +1 -0
  124. package/build/esm/bundle/wysiwyg-preset.js +1 -0
  125. package/build/esm/bundle/wysiwyg-preset.js.map +1 -1
  126. package/build/esm/extensions/additional/QuoteLink/PlaceholderWidget/commands.d.ts +3 -0
  127. package/build/esm/extensions/additional/QuoteLink/PlaceholderWidget/commands.js +6 -0
  128. package/build/esm/extensions/additional/QuoteLink/PlaceholderWidget/commands.js.map +1 -0
  129. package/build/esm/extensions/additional/QuoteLink/PlaceholderWidget/descriptor.d.ts +16 -0
  130. package/build/esm/extensions/additional/QuoteLink/PlaceholderWidget/descriptor.js +67 -0
  131. package/build/esm/extensions/additional/QuoteLink/PlaceholderWidget/descriptor.js.map +1 -0
  132. package/build/esm/extensions/additional/QuoteLink/QuoteLinkSpecs/index.d.ts +10 -0
  133. package/build/esm/extensions/additional/QuoteLink/QuoteLinkSpecs/index.js +66 -0
  134. package/build/esm/extensions/additional/QuoteLink/QuoteLinkSpecs/index.js.map +1 -0
  135. package/build/esm/extensions/additional/QuoteLink/QuoteLinkSpecs/md/moveLinkToQuoteAttributes.d.ts +2 -0
  136. package/build/esm/extensions/additional/QuoteLink/QuoteLinkSpecs/md/moveLinkToQuoteAttributes.js +37 -0
  137. package/build/esm/extensions/additional/QuoteLink/QuoteLinkSpecs/md/moveLinkToQuoteAttributes.js.map +1 -0
  138. package/build/esm/extensions/additional/QuoteLink/QuoteLinkSpecs/md/utils.d.ts +6 -0
  139. package/build/esm/extensions/additional/QuoteLink/QuoteLinkSpecs/md/utils.js +21 -0
  140. package/build/esm/extensions/additional/QuoteLink/QuoteLinkSpecs/md/utils.js.map +1 -0
  141. package/build/esm/extensions/additional/QuoteLink/commands.d.ts +4 -0
  142. package/build/esm/extensions/additional/QuoteLink/commands.js +41 -0
  143. package/build/esm/extensions/additional/QuoteLink/commands.js.map +1 -0
  144. package/build/esm/extensions/additional/QuoteLink/index.css +32 -0
  145. package/build/esm/extensions/additional/QuoteLink/index.d.ts +16 -0
  146. package/build/esm/extensions/additional/QuoteLink/index.js +38 -0
  147. package/build/esm/extensions/additional/QuoteLink/index.js.map +1 -0
  148. package/build/esm/extensions/additional/YfmHtmlBlock/utils.js +2 -11
  149. package/build/esm/extensions/additional/YfmHtmlBlock/utils.js.map +1 -1
  150. package/build/esm/extensions/behavior/Clipboard/utils.d.ts +8 -1
  151. package/build/esm/extensions/behavior/Clipboard/utils.js +3 -3
  152. package/build/esm/extensions/behavior/Clipboard/utils.js.map +1 -1
  153. package/build/esm/extensions/markdown/Html/schema.js +2 -1
  154. package/build/esm/extensions/markdown/Html/schema.js.map +1 -1
  155. package/build/esm/extensions/markdown/Lists/actions.js +4 -4
  156. package/build/esm/extensions/markdown/Lists/actions.js.map +1 -1
  157. package/build/esm/extensions/markdown/Lists/commands.d.ts +2 -1
  158. package/build/esm/extensions/markdown/Lists/commands.js +63 -0
  159. package/build/esm/extensions/markdown/Lists/commands.js.map +1 -1
  160. package/build/esm/extensions/markdown/Lists/index.js +4 -4
  161. package/build/esm/extensions/markdown/Lists/index.js.map +1 -1
  162. package/build/esm/extensions/yfm/YfmConfigs/YfmConfigsSpecs/index.d.ts +2 -0
  163. package/build/esm/extensions/yfm/YfmConfigs/YfmConfigsSpecs/index.js +5 -2
  164. package/build/esm/extensions/yfm/YfmConfigs/YfmConfigsSpecs/index.js.map +1 -1
  165. package/build/esm/extensions/yfm/YfmHeading/YfmHeadingSpecs/index.d.ts +1 -1
  166. package/build/esm/extensions/yfm/YfmHeading/YfmHeadingSpecs/index.js +2 -0
  167. package/build/esm/extensions/yfm/YfmHeading/YfmHeadingSpecs/index.js.map +1 -1
  168. package/build/esm/extensions/yfm/YfmHeading/YfmHeadingSpecs/markdown/heading-attrs.d.ts +9 -0
  169. package/build/esm/extensions/yfm/YfmHeading/YfmHeadingSpecs/markdown/heading-attrs.js +42 -0
  170. package/build/esm/extensions/yfm/YfmHeading/YfmHeadingSpecs/markdown/heading-attrs.js.map +1 -0
  171. package/build/esm/i18n/menubar/en.json +1 -0
  172. package/build/esm/i18n/menubar/index.d.ts +2 -1
  173. package/build/esm/i18n/menubar/ru.json +1 -0
  174. package/build/esm/icons/index.d.ts +1 -1
  175. package/build/esm/icons/index.js +1 -1
  176. package/build/esm/icons/index.js.map +1 -1
  177. package/build/esm/markup/commands/blocks.d.ts +1 -0
  178. package/build/esm/markup/commands/blocks.js +6 -0
  179. package/build/esm/markup/commands/blocks.js.map +1 -1
  180. package/build/esm/modules/toolbars/items.d.ts +3 -0
  181. package/build/esm/modules/toolbars/items.js +21 -1
  182. package/build/esm/modules/toolbars/items.js.map +1 -1
  183. package/build/esm/modules/toolbars/types.d.ts +2 -0
  184. package/build/esm/modules/toolbars/types.js.map +1 -1
  185. package/build/esm/toolbar/ToolbarListButton.d.ts +1 -1
  186. package/build/esm/toolbar/ToolbarListButton.js +6 -4
  187. package/build/esm/toolbar/ToolbarListButton.js.map +1 -1
  188. package/build/esm/toolbar/types.d.ts +2 -0
  189. package/build/esm/toolbar/types.js.map +1 -1
  190. package/build/esm/utils/getSanitize.d.ts +4 -0
  191. package/build/esm/utils/getSanitize.js +11 -0
  192. package/build/esm/utils/getSanitize.js.map +1 -0
  193. package/build/esm/version.js +1 -1
  194. package/build/esm/version.js.map +1 -1
  195. package/build/styles.css +32 -0
  196. package/package.json +9 -1
@@ -0,0 +1,32 @@
1
+ .yfm-quote-link {
2
+ --yfm-quote-link-background: var(--g-color-private-black-50-solid);
3
+ --yfm-quote-link-background-hover: var(--g-color-base-simple-hover);
4
+ }
5
+
6
+ .g-root_theme_dark .yfm-quote-link,
7
+ .g-root_theme_dark-hc .yfm-quote-link {
8
+ --yfm-quote-link-background: var(--g-color-private-white-100-solid);
9
+ }
10
+
11
+ .yfm-cut:not(.yfm-cut-active) .yfm-cut-content:has(> .yfm-quote-link) {
12
+ padding: 0;
13
+ }
14
+ .yfm-cut:not(.yfm-cut-active) .yfm-cut-content:has(> .yfm-quote-link) > .yfm-quote-link {
15
+ padding-top: var(--g-spacing-2);
16
+ padding-left: var(--g-spacing-7);
17
+ }
18
+
19
+ .yfm-editor .yfm-quote-link {
20
+ background-color: var(--yfm-quote-link-background);
21
+ }
22
+ .yfm-editor .yfm-quote-link .g-md-img-settings-button,
23
+ .yfm-editor .yfm-quote-link .yfm-clipboard-button {
24
+ position: absolute;
25
+ z-index: 2;
26
+ }
27
+ .yfm-editor .yfm-quote-link .g-button__icon-inner {
28
+ position: absolute;
29
+ }
30
+ .yfm-editor .yfm-quote-link p {
31
+ max-width: unset;
32
+ }
@@ -0,0 +1,16 @@
1
+ import '@diplodoc/quote-link-extension/runtime';
2
+ import type { Action, ExtensionAuto } from "../../../core/index.js";
3
+ import "./index.css";
4
+ import '@diplodoc/quote-link-extension/runtime/styles.css';
5
+ declare const quoteLinkAction = "quoteLink";
6
+ declare const addLinkToQuoteLinkAction = "addLinkToQuoteLink";
7
+ export declare const QuoteLink: ExtensionAuto;
8
+ declare global {
9
+ namespace WysiwygEditor {
10
+ interface Actions {
11
+ [quoteLinkAction]: Action;
12
+ [addLinkToQuoteLinkAction]: Action;
13
+ }
14
+ }
15
+ }
16
+ export {};
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuoteLink = void 0;
4
+ require("@diplodoc/quote-link-extension/runtime");
5
+ // @ts-ignore // TODO: fix cjs build
6
+ const prosemirror_utils_1 = require("prosemirror-utils");
7
+ const extensions_1 = require("../../index.js");
8
+ const utils_1 = require("../../../utils/index.js");
9
+ const QuoteLinkSpecs_1 = require("./QuoteLinkSpecs/index.js");
10
+ const commands_1 = require("./commands.js");
11
+ require("./index.css");
12
+ require("@diplodoc/quote-link-extension/runtime/styles.css");
13
+ const quoteLinkAction = 'quoteLink';
14
+ const addLinkToQuoteLinkAction = 'addLinkToQuoteLink';
15
+ const QuoteLink = (builder) => {
16
+ builder.use(QuoteLinkSpecs_1.QuoteLinkSpecs);
17
+ builder.addInputRules(({ schema }) => ({
18
+ rules: [quoteLinkInputRule((0, QuoteLinkSpecs_1.quoteLinkType)(schema))],
19
+ }));
20
+ builder.addAction(quoteLinkAction, ({ schema }) => {
21
+ const quoteLink = (0, QuoteLinkSpecs_1.quoteLinkType)(schema);
22
+ return {
23
+ isActive: (state) => (0, prosemirror_utils_1.hasParentNodeOfType)(quoteLink)(state.selection),
24
+ isEnable: commands_1.toggleQuote,
25
+ run: commands_1.toggleQuote,
26
+ };
27
+ });
28
+ builder.addAction(addLinkToQuoteLinkAction, (deps) => ({
29
+ isActive: (state) => Boolean((0, utils_1.isMarkActive)(state, (0, extensions_1.linkType)(state.schema))),
30
+ isEnable: (0, commands_1.addQuoteLink)(deps),
31
+ run: (0, commands_1.addQuoteLink)(deps),
32
+ }));
33
+ };
34
+ exports.QuoteLink = QuoteLink;
35
+ /**
36
+ * Given a quoteLink node type, returns an input rule that turns `"> "`
37
+ * at the start of a textblock into a quoteLink.
38
+ */
39
+ function quoteLinkInputRule(nodeType) {
40
+ return (0, utils_1.wrappingInputRule)(/^\s*>\s$/, nodeType);
41
+ }
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/additional/QuoteLink/index.ts"],"names":[],"mappings":";;;AAAA,kDAAgD;AAEhD,oCAAoC;AACpC,yDAAsD;AAGtD,+CAAwC;AACxC,mDAA0D;AAE1D,8DAA+D;AAC/D,4CAAqD;AAErD,uBAAsB;AACtB,6DAA2D;AAE3D,MAAM,eAAe,GAAG,WAAW,CAAC;AAEpC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAE/C,MAAM,SAAS,GAAkB,CAAC,OAAO,EAAE,EAAE;IAChD,OAAO,CAAC,GAAG,CAAC,+BAAc,CAAC,CAAC;IAE5B,OAAO,CAAC,aAAa,CAAC,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,CAAC;QACjC,KAAK,EAAE,CAAC,kBAAkB,CAAC,IAAA,8BAAa,EAAC,MAAM,CAAC,CAAC,CAAC;KACrD,CAAC,CAAC,CAAC;IAEJ,OAAO,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE;QAC5C,MAAM,SAAS,GAAG,IAAA,8BAAa,EAAC,MAAM,CAAC,CAAC;QAExC,OAAO;YACH,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,uCAAmB,EAAC,SAAS,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YACpE,QAAQ,EAAE,sBAAW;YACrB,GAAG,EAAE,sBAAW;SACnB,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,SAAS,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAA,oBAAY,EAAC,KAAK,EAAE,IAAA,qBAAQ,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACzE,QAAQ,EAAE,IAAA,uBAAY,EAAC,IAAI,CAAC;QAC5B,GAAG,EAAE,IAAA,uBAAY,EAAC,IAAI,CAAC;KAC1B,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAtBW,QAAA,SAAS,aAsBpB;AAEF;;;GAGG;AACH,SAAS,kBAAkB,CAAC,QAAkB;IAC1C,OAAO,IAAA,yBAAiB,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC","sourcesContent":["import '@diplodoc/quote-link-extension/runtime';\nimport type {NodeType} from 'prosemirror-model';\n// @ts-ignore // TODO: fix cjs build\nimport {hasParentNodeOfType} from 'prosemirror-utils';\n\nimport type {Action, ExtensionAuto} from '#core';\nimport {linkType} from 'src/extensions';\nimport {isMarkActive, wrappingInputRule} from 'src/utils';\n\nimport {QuoteLinkSpecs, quoteLinkType} from './QuoteLinkSpecs';\nimport {addQuoteLink, toggleQuote} from './commands';\n\nimport './index.scss';\nimport '@diplodoc/quote-link-extension/runtime/styles.css';\n\nconst quoteLinkAction = 'quoteLink';\n\nconst addLinkToQuoteLinkAction = 'addLinkToQuoteLink';\n\nexport const QuoteLink: ExtensionAuto = (builder) => {\n builder.use(QuoteLinkSpecs);\n\n builder.addInputRules(({schema}) => ({\n rules: [quoteLinkInputRule(quoteLinkType(schema))],\n }));\n\n builder.addAction(quoteLinkAction, ({schema}) => {\n const quoteLink = quoteLinkType(schema);\n\n return {\n isActive: (state) => hasParentNodeOfType(quoteLink)(state.selection),\n isEnable: toggleQuote,\n run: toggleQuote,\n };\n });\n\n builder.addAction(addLinkToQuoteLinkAction, (deps) => ({\n isActive: (state) => Boolean(isMarkActive(state, linkType(state.schema))),\n isEnable: addQuoteLink(deps),\n run: addQuoteLink(deps),\n }));\n};\n\n/**\n * Given a quoteLink node type, returns an input rule that turns `\"> \"`\n * at the start of a textblock into a quoteLink.\n */\nfunction quoteLinkInputRule(nodeType: NodeType) {\n return wrappingInputRule(/^\\s*>\\s$/, nodeType);\n}\n\ndeclare global {\n namespace WysiwygEditor {\n interface Actions {\n [quoteLinkAction]: Action;\n [addLinkToQuoteLinkAction]: Action;\n }\n }\n}\n"]}
@@ -1,19 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getSanitizeYfmHtmlBlock = exports.getYfmHtmlBlockOptions = void 0;
4
- const tslib_1 = require("tslib");
5
- const sanitizeModule = tslib_1.__importStar(require("@diplodoc/transform/lib/sanitize.js"));
6
- const sanitizeAll = () => {
7
- console.warn('[YfmHtmlBlock]: sanitize function not found');
8
- return '';
9
- };
10
- const getSanitizeFunction = () => {
11
- const module = sanitizeModule;
12
- const sanitize = 'sanitize' in module && module.sanitize ? module.sanitize : module.default;
13
- return sanitize instanceof Function ? sanitize : sanitizeAll;
14
- };
4
+ const getSanitize_1 = require("../../../utils/getSanitize.js");
15
5
  // MAJOR: use `import {sanitize} from '@diplodoc/transform/lib/sanitize.js'`
16
- const diplodocSanitize = getSanitizeFunction();
6
+ const diplodocSanitize = (0, getSanitize_1.getSanitize)('YfmHtmlBlock');
17
7
  // yfmHtmlBlock additional css properties white list
18
8
  const getYfmHtmlBlockWhiteList = () => {
19
9
  const whiteList = {};
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/additional/YfmHtmlBlock/utils.ts"],"names":[],"mappings":";;;;AACA,4FAAsE;AAatE,MAAM,WAAW,GAAG,GAAG,EAAE;IACrB,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC5D,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AACF,MAAM,mBAAmB,GAAG,GAAe,EAAE;IACzC,MAAM,MAAM,GAAG,cAAgC,CAAC;IAChD,MAAM,QAAQ,GAAG,UAAU,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAC5F,OAAO,QAAQ,YAAY,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;AACjE,CAAC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;AAE/C,oDAAoD;AACpD,MAAM,wBAAwB,GAAG,GAAG,EAAE;IAClC,MAAM,SAAS,GAA4B,EAAE,CAAC;IAE9C,qBAAqB;IACrB,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACnD,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACjD,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAChD,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,8CAA8C;IACxE,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAClD,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,mBAAmB;IACpD,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,kBAAkB;IAClD,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,8CAA8C;IAC/E,SAAS,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,CAAC,yBAAyB;IAChE,SAAS,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,CAAC,kBAAkB;IACzD,SAAS,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,CAAC,kBAAkB;IACzD,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACjD,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAClD,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,8CAA8C;IACrE,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAChD,SAAS,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC,eAAe;IACnD,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,8CAA8C;IAC7E,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,aAAa;IAC5C,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,aAAa;IAC9C,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,kBAAkB;IACjD,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,yBAAyB;IAC/C,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,8CAA8C;IACrE,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,8CAA8C;IAC7E,SAAS,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACvD,SAAS,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACpD,SAAS,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACpD,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,8CAA8C;IAC/E,SAAS,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACrD,SAAS,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACvD,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,8CAA8C;IAC5E,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAClD,SAAS,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACpD,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC,8CAA8C;IACjF,SAAS,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACzD,SAAS,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAC3D,SAAS,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACxD,SAAS,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACrD,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACnD,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAClD,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,kBAAkB;IACnD,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAChD,SAAS,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC,mBAAmB;IACxD,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,aAAa;IACrC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,aAAa;IACvC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAE5B,8BAA8B;IAC9B,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,8CAA8C;IACvE,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAC5C,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,kBAAkB;IAC/C,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAC5C,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,eAAe;IAC9C,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAC1C,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAChD,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,aAAa;IAC1C,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,8CAA8C;IAC5E,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC,kBAAkB;IACrD,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,mBAAmB;IACnD,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,mBAAmB;IACnD,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,kBAAkB;IAChD,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAC3C,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IACzC,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,kBAAkB;IACnD,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAE7C,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF,sCAAsC;AACtC,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1D,sCAAsC;AACtC,MAAM,6BAA6B,GAAG;IAClC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,CAAC,QAAQ,CAAC;IAChB,KAAK,EAAE,EAAE;CACZ,CAAC;AAEK,MAAM,sBAAsB,GAAG,CAAC,cAA+B,EAAmB,EAAE;IAKvF,MAAM,wBAAwB,GAAG,cAAc,CAAC,iBAA0C,CAAC;IAE3F,OAAO;QACH,GAAG,cAAc;QACjB,iBAAiB,EAAE;YACf,GAAG,wBAAwB;YAC3B,GAAG,6BAA6B;SACnC;QACD,WAAW,EACP,OAAO,cAAc,CAAC,WAAW,KAAK,SAAS;YAC3C,CAAC,CAAC,cAAc,CAAC,WAAW;YAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,uBAAuB,CAAC;QAC7E,YAAY,EAAE;YACV,GAAG,cAAc,CAAC,YAAY;YAC9B,GAAG,wBAAwB,EAAE;SAChC;KACJ,CAAC;AACN,CAAC,CAAC;AAtBW,QAAA,sBAAsB,0BAsBjC;AAMK,MAAM,uBAAuB,GAChC,CAAC,EAAC,OAAO,EAAE,QAAQ,GAAG,gBAAgB,EAA8B,EAAE,EAAE,CACxE,CAAC,OAAe,EAAE,EAAE,CAChB,QAAQ,CAAC,OAAO,EAAE,IAAA,8BAAsB,EAAC,OAAO,CAAC,CAAC,CAAC;AAH9C,QAAA,uBAAuB,2BAGuB","sourcesContent":["import type {SanitizeOptions} from '@diplodoc/transform/lib/sanitize.js';\nimport * as sanitizeModule from '@diplodoc/transform/lib/sanitize.js';\n\ntype SanitizeFn = (\n html: string,\n options?: SanitizeOptions,\n additionalOptions?: SanitizeOptions,\n) => string;\n\ninterface SanitizeModule {\n sanitize?: SanitizeFn;\n default?: SanitizeFn;\n}\n\nconst sanitizeAll = () => {\n console.warn('[YfmHtmlBlock]: sanitize function not found');\n return '';\n};\nconst getSanitizeFunction = (): SanitizeFn => {\n const module = sanitizeModule as SanitizeModule;\n const sanitize = 'sanitize' in module && module.sanitize ? module.sanitize : module.default;\n return sanitize instanceof Function ? sanitize : sanitizeAll;\n};\n\n// MAJOR: use `import {sanitize} from '@diplodoc/transform/lib/sanitize.js'`\nconst diplodocSanitize = getSanitizeFunction();\n\n// yfmHtmlBlock additional css properties white list\nconst getYfmHtmlBlockWhiteList = () => {\n const whiteList: Record<string, boolean> = {};\n\n // flex, grid, column\n whiteList['align-content'] = true; // default: auto\n whiteList['align-items'] = true; // default: auto\n whiteList['align-self'] = true; // default: auto\n whiteList.columns = true; // default: depending on individual properties\n whiteList['column-count'] = true; // default: auto\n whiteList['column-fill'] = true; // default: balance\n whiteList['column-gap'] = true; // default: normal\n whiteList['column-rule'] = true; // default: depending on individual properties\n whiteList['column-rule-color'] = true; // default: current color\n whiteList['column-rule-style'] = true; // default: medium\n whiteList['column-rule-width'] = true; // default: medium\n whiteList['column-span'] = true; // default: none\n whiteList['column-width'] = true; // default: auto\n whiteList.flex = true; // default: depending on individual properties\n whiteList['flex-basis'] = true; // default: auto\n whiteList['flex-direction'] = true; // default: row\n whiteList['flex-flow'] = true; // default: depending on individual properties\n whiteList['flex-grow'] = true; // default: 0\n whiteList['flex-shrink'] = true; // default: 1\n whiteList['flex-wrap'] = true; // default: nowrap\n whiteList.gap = true; // default: normal normal\n whiteList.grid = true; // default: depending on individual properties\n whiteList['grid-area'] = true; // default: depending on individual properties\n whiteList['grid-auto-columns'] = true; // default: auto\n whiteList['grid-auto-flow'] = true; // default: none\n whiteList['grid-auto-rows'] = true; // default: auto\n whiteList['grid-column'] = true; // default: depending on individual properties\n whiteList['grid-column-end'] = true; // default: auto\n whiteList['grid-column-start'] = true; // default: auto\n whiteList['grid-row'] = true; // default: depending on individual properties\n whiteList['grid-row-end'] = true; // default: auto\n whiteList['grid-row-start'] = true; // default: auto\n whiteList['grid-template'] = true; // default: depending on individual properties\n whiteList['grid-template-areas'] = true; // default: none\n whiteList['grid-template-columns'] = true; // default: none\n whiteList['grid-template-rows'] = true; // default: none\n whiteList['justify-content'] = true; // default: auto\n whiteList['justify-items'] = true; // default: auto\n whiteList['justify-self'] = true; // default: auto\n whiteList['line-height'] = true; // default: normal\n whiteList['object-fit'] = true; // default: fill\n whiteList['object-position'] = true; // default: 50% 50%\n whiteList.order = true; // default: 0\n whiteList.orphans = true; // default: 2\n whiteList['row-gap'] = true;\n\n // position, opacity, overflow\n whiteList['all'] = true; // default: depending on individual properties\n whiteList['bottom'] = true; // default: auto\n whiteList['content'] = true; // default: normal\n whiteList['cursor'] = true; // default: auto\n whiteList['direction'] = true; // default: ltr\n whiteList['left'] = true; // default: auto\n whiteList['line-break'] = true; // default: auto\n whiteList['opacity'] = true; // default: 1\n whiteList['overflow'] = true; // default: depending on individual properties\n whiteList['overflow-wrap'] = true; // default: normal\n whiteList['overflow-x'] = true; // default: visible\n whiteList['overflow-y'] = true; // default: visible\n whiteList['position'] = true; // default: static\n whiteList['right'] = true; // default: auto\n whiteList['top'] = true; // default: auto\n whiteList['white-space'] = true; // default: normal\n whiteList['z-index'] = true; // default: auto\n\n return whiteList;\n};\n\n// yfmHtmlBlock additional allowedTags\nconst yfmHtmlBlockAllowedTags = ['link', 'base', 'style'];\n\n// yfmHtmlBlock additional allowedTags\nconst yfmHtmlBlockAllowedAttributes = {\n link: ['rel', 'href'],\n base: ['target'],\n style: [],\n};\n\nexport const getYfmHtmlBlockOptions = (defaultOptions: SanitizeOptions): SanitizeOptions => {\n type AllowedAttributesType = Record<\n string,\n (string | {name: string; multiple?: boolean | undefined; values: string[]})[]\n >;\n const defaultAllowedAttributes = defaultOptions.allowedAttributes as AllowedAttributesType;\n\n return {\n ...defaultOptions,\n allowedAttributes: {\n ...defaultAllowedAttributes,\n ...yfmHtmlBlockAllowedAttributes,\n },\n allowedTags:\n typeof defaultOptions.allowedTags === 'boolean'\n ? defaultOptions.allowedTags\n : [...(defaultOptions.allowedTags ?? []), ...yfmHtmlBlockAllowedTags],\n cssWhiteList: {\n ...defaultOptions.cssWhiteList,\n ...getYfmHtmlBlockWhiteList(),\n },\n };\n};\n\nexport interface GetSanitizeYfmHtmlBlockArgs {\n options: SanitizeOptions;\n sanitize?: (html: string, options?: SanitizeOptions) => string;\n}\nexport const getSanitizeYfmHtmlBlock =\n ({options, sanitize = diplodocSanitize}: GetSanitizeYfmHtmlBlockArgs) =>\n (content: string) =>\n sanitize(content, getYfmHtmlBlockOptions(options));\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/additional/YfmHtmlBlock/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {SanitizeOptions} from '@diplodoc/transform/lib/sanitize.js';\n\nimport {getSanitize} from 'src/utils/getSanitize';\n\n// MAJOR: use `import {sanitize} from '@diplodoc/transform/lib/sanitize.js'`\nconst diplodocSanitize = getSanitize('YfmHtmlBlock');\n\n// yfmHtmlBlock additional css properties white list\nconst getYfmHtmlBlockWhiteList = () => {\n const whiteList: Record<string, boolean> = {};\n\n // flex, grid, column\n whiteList['align-content'] = true; // default: auto\n whiteList['align-items'] = true; // default: auto\n whiteList['align-self'] = true; // default: auto\n whiteList.columns = true; // default: depending on individual properties\n whiteList['column-count'] = true; // default: auto\n whiteList['column-fill'] = true; // default: balance\n whiteList['column-gap'] = true; // default: normal\n whiteList['column-rule'] = true; // default: depending on individual properties\n whiteList['column-rule-color'] = true; // default: current color\n whiteList['column-rule-style'] = true; // default: medium\n whiteList['column-rule-width'] = true; // default: medium\n whiteList['column-span'] = true; // default: none\n whiteList['column-width'] = true; // default: auto\n whiteList.flex = true; // default: depending on individual properties\n whiteList['flex-basis'] = true; // default: auto\n whiteList['flex-direction'] = true; // default: row\n whiteList['flex-flow'] = true; // default: depending on individual properties\n whiteList['flex-grow'] = true; // default: 0\n whiteList['flex-shrink'] = true; // default: 1\n whiteList['flex-wrap'] = true; // default: nowrap\n whiteList.gap = true; // default: normal normal\n whiteList.grid = true; // default: depending on individual properties\n whiteList['grid-area'] = true; // default: depending on individual properties\n whiteList['grid-auto-columns'] = true; // default: auto\n whiteList['grid-auto-flow'] = true; // default: none\n whiteList['grid-auto-rows'] = true; // default: auto\n whiteList['grid-column'] = true; // default: depending on individual properties\n whiteList['grid-column-end'] = true; // default: auto\n whiteList['grid-column-start'] = true; // default: auto\n whiteList['grid-row'] = true; // default: depending on individual properties\n whiteList['grid-row-end'] = true; // default: auto\n whiteList['grid-row-start'] = true; // default: auto\n whiteList['grid-template'] = true; // default: depending on individual properties\n whiteList['grid-template-areas'] = true; // default: none\n whiteList['grid-template-columns'] = true; // default: none\n whiteList['grid-template-rows'] = true; // default: none\n whiteList['justify-content'] = true; // default: auto\n whiteList['justify-items'] = true; // default: auto\n whiteList['justify-self'] = true; // default: auto\n whiteList['line-height'] = true; // default: normal\n whiteList['object-fit'] = true; // default: fill\n whiteList['object-position'] = true; // default: 50% 50%\n whiteList.order = true; // default: 0\n whiteList.orphans = true; // default: 2\n whiteList['row-gap'] = true;\n\n // position, opacity, overflow\n whiteList['all'] = true; // default: depending on individual properties\n whiteList['bottom'] = true; // default: auto\n whiteList['content'] = true; // default: normal\n whiteList['cursor'] = true; // default: auto\n whiteList['direction'] = true; // default: ltr\n whiteList['left'] = true; // default: auto\n whiteList['line-break'] = true; // default: auto\n whiteList['opacity'] = true; // default: 1\n whiteList['overflow'] = true; // default: depending on individual properties\n whiteList['overflow-wrap'] = true; // default: normal\n whiteList['overflow-x'] = true; // default: visible\n whiteList['overflow-y'] = true; // default: visible\n whiteList['position'] = true; // default: static\n whiteList['right'] = true; // default: auto\n whiteList['top'] = true; // default: auto\n whiteList['white-space'] = true; // default: normal\n whiteList['z-index'] = true; // default: auto\n\n return whiteList;\n};\n\n// yfmHtmlBlock additional allowedTags\nconst yfmHtmlBlockAllowedTags = ['link', 'base', 'style'];\n\n// yfmHtmlBlock additional allowedTags\nconst yfmHtmlBlockAllowedAttributes = {\n link: ['rel', 'href'],\n base: ['target'],\n style: [],\n};\n\nexport const getYfmHtmlBlockOptions = (defaultOptions: SanitizeOptions): SanitizeOptions => {\n type AllowedAttributesType = Record<\n string,\n (string | {name: string; multiple?: boolean | undefined; values: string[]})[]\n >;\n const defaultAllowedAttributes = defaultOptions.allowedAttributes as AllowedAttributesType;\n\n return {\n ...defaultOptions,\n allowedAttributes: {\n ...defaultAllowedAttributes,\n ...yfmHtmlBlockAllowedAttributes,\n },\n allowedTags:\n typeof defaultOptions.allowedTags === 'boolean'\n ? defaultOptions.allowedTags\n : [...(defaultOptions.allowedTags ?? []), ...yfmHtmlBlockAllowedTags],\n cssWhiteList: {\n ...defaultOptions.cssWhiteList,\n ...getYfmHtmlBlockWhiteList(),\n },\n };\n};\n\nexport interface GetSanitizeYfmHtmlBlockArgs {\n options: SanitizeOptions;\n sanitize?: (html: string, options?: SanitizeOptions) => string;\n}\nexport const getSanitizeYfmHtmlBlock =\n ({options, sanitize = diplodocSanitize}: GetSanitizeYfmHtmlBlockArgs) =>\n (content: string) =>\n sanitize(content, getYfmHtmlBlockOptions(options));\n"]}
@@ -14,5 +14,12 @@ export declare function isFilesOnly({ types }: DataTransfer): boolean;
14
14
  export declare function isFilesFromHtml({ types }: DataTransfer): boolean;
15
15
  export declare function isImageFile(file: File): boolean;
16
16
  export declare function extractTextContentFromHtml(html: string): string | null;
17
- export declare function findNotEmptyContentPosses(fragment: Fragment): [number, number, number, number];
17
+ type ContentBoundaryPositions = [
18
+ firstNotEmptyPos: number,
19
+ lastNotEmptyPos: number,
20
+ firstPos: number,
21
+ lastPos: number
22
+ ];
23
+ export declare function findNotEmptyContentPosses(fragment: Fragment): ContentBoundaryPositions;
18
24
  export declare function trimContent(fragment: Fragment, creatEmptyFragment?: () => Fragment): Fragment;
25
+ export {};
@@ -69,10 +69,10 @@ function findNotEmptyContentPosses(fragment) {
69
69
  if ((0, utils_1.isListNode)(contentNode) || (0, utils_1.isListItemNode)(contentNode)) {
70
70
  const [start, end] = findNotEmptyContentPosses(contentNode.content);
71
71
  if (firstNotEmptyNodePos === -1 && start !== -1) {
72
- firstNotEmptyNodePos = offset + start;
72
+ firstNotEmptyNodePos = offset + start + 1;
73
73
  }
74
74
  if (end !== -1) {
75
- lastNotEmptyNodePos = offset + end;
75
+ lastNotEmptyNodePos = offset + end + 1;
76
76
  }
77
77
  }
78
78
  else {
@@ -93,6 +93,6 @@ function trimContent(fragment, creatEmptyFragment) {
93
93
  else if (notEmptyStart === -1 && notEmptyEnd === -1) {
94
94
  return creatEmptyFragment ? creatEmptyFragment() : prosemirror_model_1.Fragment.empty;
95
95
  }
96
- return fragment.cut(notEmptyStart + 1, notEmptyEnd + 1);
96
+ return fragment.cut(notEmptyStart, notEmptyEnd);
97
97
  }
98
98
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Clipboard/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {Fragment} from 'prosemirror-model';\n\nimport {isListItemNode, isListNode} from 'src/extensions/markdown/Lists/utils';\nimport {isEmptyString} from 'src/utils';\n\n/** Сontains all data formats known to us */\nexport enum DataTransferType {\n Text = 'text/plain',\n Html = 'text/html',\n Yfm = 'text/yfm', // self\n Rtf = 'text/rtf', // Safari, WebStorm/Intelij\n UriList = 'text/uri-list',\n VSCodeData = 'vscode-editor-data',\n Files = 'Files',\n}\n\nexport function isIosSafariShare({types}: DataTransfer): boolean {\n // if link is copied from ios safari share button,\n // then data transfer only have text/uri-list data type\n return (\n types.includes(DataTransferType.UriList) &&\n !types.includes(DataTransferType.Text) &&\n !types.includes(DataTransferType.Html)\n );\n}\n\nexport function isFilesOnly({types}: DataTransfer): boolean {\n return types.length === 1 && types[0] === DataTransferType.Files;\n}\n\nexport function isFilesFromHtml({types}: DataTransfer): boolean {\n return (\n types.length === 2 &&\n types.includes(DataTransferType.Files) &&\n types.includes(DataTransferType.Html)\n );\n}\n\nexport function isImageFile(file: File): boolean {\n return file.type.startsWith('image/');\n}\n\nexport function extractTextContentFromHtml(html: string) {\n const element = document.createElement('div');\n element.innerHTML = html;\n element.replaceChildren(...Array.from(element.children).filter((v) => v.nodeName !== 'META'));\n\n // Look if all nodes are div or span. That they don't have any classname and have only text child.\n if (\n Array.from(element.children).every(({nodeName, classList, childNodes}) => {\n return (\n (nodeName === 'DIV' || nodeName === 'SPAN') &&\n !classList.length &&\n childNodes.length === 1 &&\n (childNodes[0].nodeName === '#text' || childNodes[0].nodeName === 'BR')\n );\n })\n ) {\n return Array.from(element.children).reduce((a, v) => a + v.textContent + '\\n', '');\n }\n\n return null;\n}\n\nexport function findNotEmptyContentPosses(fragment: Fragment): [number, number, number, number] {\n let firstNodePos = -1;\n let lastNodePos = -1;\n let firstNotEmptyNodePos = -1;\n let lastNotEmptyNodePos = -1;\n\n fragment.forEach((contentNode, offset) => {\n if (firstNodePos === -1) {\n firstNodePos = offset;\n }\n lastNodePos = offset + contentNode.nodeSize;\n\n if (!isEmptyString(contentNode)) {\n if (isListNode(contentNode) || isListItemNode(contentNode)) {\n const [start, end] = findNotEmptyContentPosses(contentNode.content);\n if (firstNotEmptyNodePos === -1 && start !== -1) {\n firstNotEmptyNodePos = offset + start;\n }\n if (end !== -1) {\n lastNotEmptyNodePos = offset + end;\n }\n } else {\n if (firstNotEmptyNodePos === -1) {\n firstNotEmptyNodePos = offset;\n }\n lastNotEmptyNodePos = offset + contentNode.nodeSize;\n }\n }\n });\n\n return [firstNotEmptyNodePos, lastNotEmptyNodePos, firstNodePos, lastNodePos];\n}\n\nexport function trimContent(fragment: Fragment, creatEmptyFragment?: () => Fragment): Fragment {\n const [notEmptyStart, notEmptyEnd, start, end] = findNotEmptyContentPosses(fragment);\n\n if (notEmptyStart === start && notEmptyEnd === end) {\n return fragment;\n } else if (notEmptyStart === -1 && notEmptyEnd === -1) {\n return creatEmptyFragment ? creatEmptyFragment() : Fragment.empty;\n }\n\n return fragment.cut(notEmptyStart + 1, notEmptyEnd + 1);\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/Clipboard/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {Fragment} from 'prosemirror-model';\n\nimport {isListItemNode, isListNode} from 'src/extensions/markdown/Lists/utils';\nimport {isEmptyString} from 'src/utils';\n\n/** Сontains all data formats known to us */\nexport enum DataTransferType {\n Text = 'text/plain',\n Html = 'text/html',\n Yfm = 'text/yfm', // self\n Rtf = 'text/rtf', // Safari, WebStorm/Intelij\n UriList = 'text/uri-list',\n VSCodeData = 'vscode-editor-data',\n Files = 'Files',\n}\n\nexport function isIosSafariShare({types}: DataTransfer): boolean {\n // if link is copied from ios safari share button,\n // then data transfer only have text/uri-list data type\n return (\n types.includes(DataTransferType.UriList) &&\n !types.includes(DataTransferType.Text) &&\n !types.includes(DataTransferType.Html)\n );\n}\n\nexport function isFilesOnly({types}: DataTransfer): boolean {\n return types.length === 1 && types[0] === DataTransferType.Files;\n}\n\nexport function isFilesFromHtml({types}: DataTransfer): boolean {\n return (\n types.length === 2 &&\n types.includes(DataTransferType.Files) &&\n types.includes(DataTransferType.Html)\n );\n}\n\nexport function isImageFile(file: File): boolean {\n return file.type.startsWith('image/');\n}\n\nexport function extractTextContentFromHtml(html: string) {\n const element = document.createElement('div');\n element.innerHTML = html;\n element.replaceChildren(...Array.from(element.children).filter((v) => v.nodeName !== 'META'));\n\n // Look if all nodes are div or span. That they don't have any classname and have only text child.\n if (\n Array.from(element.children).every(({nodeName, classList, childNodes}) => {\n return (\n (nodeName === 'DIV' || nodeName === 'SPAN') &&\n !classList.length &&\n childNodes.length === 1 &&\n (childNodes[0].nodeName === '#text' || childNodes[0].nodeName === 'BR')\n );\n })\n ) {\n return Array.from(element.children).reduce((a, v) => a + v.textContent + '\\n', '');\n }\n\n return null;\n}\n\ntype ContentBoundaryPositions = [\n firstNotEmptyPos: number,\n lastNotEmptyPos: number,\n firstPos: number,\n lastPos: number,\n];\nexport function findNotEmptyContentPosses(fragment: Fragment): ContentBoundaryPositions {\n let firstNodePos = -1;\n let lastNodePos = -1;\n let firstNotEmptyNodePos = -1;\n let lastNotEmptyNodePos = -1;\n\n fragment.forEach((contentNode, offset) => {\n if (firstNodePos === -1) {\n firstNodePos = offset;\n }\n lastNodePos = offset + contentNode.nodeSize;\n\n if (!isEmptyString(contentNode)) {\n if (isListNode(contentNode) || isListItemNode(contentNode)) {\n const [start, end] = findNotEmptyContentPosses(contentNode.content);\n if (firstNotEmptyNodePos === -1 && start !== -1) {\n firstNotEmptyNodePos = offset + start + 1;\n }\n if (end !== -1) {\n lastNotEmptyNodePos = offset + end + 1;\n }\n } else {\n if (firstNotEmptyNodePos === -1) {\n firstNotEmptyNodePos = offset;\n }\n lastNotEmptyNodePos = offset + contentNode.nodeSize;\n }\n }\n });\n\n return [firstNotEmptyNodePos, lastNotEmptyNodePos, firstNodePos, lastNodePos];\n}\n\nexport function trimContent(fragment: Fragment, creatEmptyFragment?: () => Fragment): Fragment {\n const [notEmptyStart, notEmptyEnd, start, end] = findNotEmptyContentPosses(fragment);\n\n if (notEmptyStart === start && notEmptyEnd === end) {\n return fragment;\n } else if (notEmptyStart === -1 && notEmptyEnd === -1) {\n return creatEmptyFragment ? creatEmptyFragment() : Fragment.empty;\n }\n\n return fragment.cut(notEmptyStart, notEmptyEnd);\n}\n"]}
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.schemaSpecs = void 0;
4
- const tslib_1 = require("tslib");
5
- const sanitize_js_1 = tslib_1.__importDefault(require("@diplodoc/transform/lib/sanitize.js"));
4
+ const getSanitize_1 = require("../../../utils/getSanitize.js");
6
5
  const const_1 = require("./const.js");
7
6
  var DomAttr;
8
7
  (function (DomAttr) {
9
8
  DomAttr["Html"] = "data-html";
10
9
  DomAttr["HtmlRaw"] = "data-html-raw";
11
10
  })(DomAttr || (DomAttr = {}));
11
+ const sanitize = (0, getSanitize_1.getSanitize)('Html');
12
12
  exports.schemaSpecs = {
13
13
  [const_1.HtmlNode.Block]: {
14
14
  atom: true,
@@ -31,7 +31,7 @@ exports.schemaSpecs = {
31
31
  elem.setAttribute(DomAttr.Html, '');
32
32
  elem.setAttribute(DomAttr.HtmlRaw, htmlContent);
33
33
  elem.contentEditable = 'false';
34
- elem.innerHTML = (0, sanitize_js_1.default)(htmlContent);
34
+ elem.innerHTML = sanitize(htmlContent);
35
35
  return elem;
36
36
  },
37
37
  },
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Html/schema.ts"],"names":[],"mappings":";;;;AAAA,8FAA2D;AAG3D,sCAA2C;AAE3C,IAAK,OAGJ;AAHD,WAAK,OAAO;IACR,6BAAkB,CAAA;IAClB,oCAAyB,CAAA;AAC7B,CAAC,EAHI,OAAO,KAAP,OAAO,QAGX;AAEY,QAAA,WAAW,GAA+B;IACnD,CAAC,gBAAQ,CAAC,KAAK,CAAC,EAAE;QACd,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAC;QAC/B,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,OAAO,OAAO,CAAC,IAAI,GAAG;gBAC3B,QAAQ,CAAC,GAAG;oBACR,MAAM,IAAI,GAAG,GAAkB,CAAC;oBAChC,OAAO;wBACH,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS;qBAC3E,CAAC;gBACN,CAAC;aACJ;SACJ;QACD,KAAK,CAAC,IAAI;YACN,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAQ,CAAC,OAAO,CAAW,CAAC;YAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAChD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAA,qBAAQ,EAAC,WAAW,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ;IAED,CAAC,gBAAQ,CAAC,MAAM,CAAC,EAAE;QACf,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAC;QAC/B,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,QAAQ,OAAO,CAAC,IAAI,GAAG;gBAC5B,QAAQ,CAAC,GAAG;oBACR,OAAO,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAG,GAAmB,CAAC,WAAW,EAAC,CAAC;gBAClE,CAAC;aACJ;SACJ;QACD,KAAK,CAAC,IAAI;YACN,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAQ,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ;CACJ,CAAC","sourcesContent":["import sanitize from '@diplodoc/transform/lib/sanitize.js';\nimport type {NodeSpec} from 'prosemirror-model';\n\nimport {HtmlAttr, HtmlNode} from './const';\n\nenum DomAttr {\n Html = 'data-html',\n HtmlRaw = 'data-html-raw',\n}\n\nexport const schemaSpecs: Record<HtmlNode, NodeSpec> = {\n [HtmlNode.Block]: {\n atom: true,\n group: 'block',\n attrs: {[HtmlAttr.Content]: {}},\n parseDOM: [\n {\n tag: `div[${DomAttr.Html}]`,\n getAttrs(dom) {\n const dom_ = dom as HTMLElement;\n return {\n [HtmlAttr.Content]: dom_.getAttribute(DomAttr.HtmlRaw) || dom_.innerHTML,\n };\n },\n },\n ],\n toDOM(node) {\n const htmlContent = node.attrs[HtmlAttr.Content] as string;\n const elem = document.createElement('div');\n elem.setAttribute(DomAttr.Html, '');\n elem.setAttribute(DomAttr.HtmlRaw, htmlContent);\n elem.contentEditable = 'false';\n elem.innerHTML = sanitize(htmlContent);\n return elem;\n },\n },\n\n [HtmlNode.Inline]: {\n atom: true,\n inline: true,\n group: 'inline',\n attrs: {[HtmlAttr.Content]: {}},\n parseDOM: [\n {\n tag: `span[${DomAttr.Html}]`,\n getAttrs(dom) {\n return {[HtmlAttr.Content]: (dom as HTMLElement).textContent};\n },\n },\n ],\n toDOM(node) {\n const elem = document.createElement('span');\n elem.setAttribute(DomAttr.Html, '');\n elem.contentEditable = 'false';\n elem.textContent = node.attrs[HtmlAttr.Content];\n return elem;\n },\n },\n};\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Html/schema.ts"],"names":[],"mappings":";;;AAEA,+DAAkD;AAElD,sCAA2C;AAE3C,IAAK,OAGJ;AAHD,WAAK,OAAO;IACR,6BAAkB,CAAA;IAClB,oCAAyB,CAAA;AAC7B,CAAC,EAHI,OAAO,KAAP,OAAO,QAGX;AAED,MAAM,QAAQ,GAAG,IAAA,yBAAW,EAAC,MAAM,CAAC,CAAC;AAExB,QAAA,WAAW,GAA+B;IACnD,CAAC,gBAAQ,CAAC,KAAK,CAAC,EAAE;QACd,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAC;QAC/B,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,OAAO,OAAO,CAAC,IAAI,GAAG;gBAC3B,QAAQ,CAAC,GAAG;oBACR,MAAM,IAAI,GAAG,GAAkB,CAAC;oBAChC,OAAO;wBACH,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS;qBAC3E,CAAC;gBACN,CAAC;aACJ;SACJ;QACD,KAAK,CAAC,IAAI;YACN,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAQ,CAAC,OAAO,CAAW,CAAC;YAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAChD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ;IAED,CAAC,gBAAQ,CAAC,MAAM,CAAC,EAAE;QACf,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAC;QAC/B,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,QAAQ,OAAO,CAAC,IAAI,GAAG;gBAC5B,QAAQ,CAAC,GAAG;oBACR,OAAO,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAG,GAAmB,CAAC,WAAW,EAAC,CAAC;gBAClE,CAAC;aACJ;SACJ;QACD,KAAK,CAAC,IAAI;YACN,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAQ,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ;CACJ,CAAC","sourcesContent":["import type {NodeSpec} from 'prosemirror-model';\n\nimport {getSanitize} from 'src/utils/getSanitize';\n\nimport {HtmlAttr, HtmlNode} from './const';\n\nenum DomAttr {\n Html = 'data-html',\n HtmlRaw = 'data-html-raw',\n}\n\nconst sanitize = getSanitize('Html');\n\nexport const schemaSpecs: Record<HtmlNode, NodeSpec> = {\n [HtmlNode.Block]: {\n atom: true,\n group: 'block',\n attrs: {[HtmlAttr.Content]: {}},\n parseDOM: [\n {\n tag: `div[${DomAttr.Html}]`,\n getAttrs(dom) {\n const dom_ = dom as HTMLElement;\n return {\n [HtmlAttr.Content]: dom_.getAttribute(DomAttr.HtmlRaw) || dom_.innerHTML,\n };\n },\n },\n ],\n toDOM(node) {\n const htmlContent = node.attrs[HtmlAttr.Content] as string;\n const elem = document.createElement('div');\n elem.setAttribute(DomAttr.Html, '');\n elem.setAttribute(DomAttr.HtmlRaw, htmlContent);\n elem.contentEditable = 'false';\n elem.innerHTML = sanitize(htmlContent);\n return elem;\n },\n },\n\n [HtmlNode.Inline]: {\n atom: true,\n inline: true,\n group: 'inline',\n attrs: {[HtmlAttr.Content]: {}},\n parseDOM: [\n {\n tag: `span[${DomAttr.Html}]`,\n getAttrs(dom) {\n return {[HtmlAttr.Content]: (dom as HTMLElement).textContent};\n },\n },\n ],\n toDOM(node) {\n const elem = document.createElement('span');\n elem.setAttribute(DomAttr.Html, '');\n elem.contentEditable = 'false';\n elem.textContent = node.attrs[HtmlAttr.Content];\n return elem;\n },\n },\n};\n"]}
@@ -30,8 +30,8 @@ exports.actions = {
30
30
  },
31
31
  sinkListItem: ({ schema }) => {
32
32
  return {
33
- isEnable: (0, prosemirror_schema_list_1.sinkListItem)((0, utils_1.liType)(schema)),
34
- run: (0, prosemirror_schema_list_1.sinkListItem)((0, utils_1.liType)(schema)),
33
+ isEnable: (0, commands_1.sinkOnlySelectedListItem)((0, utils_1.liType)(schema)),
34
+ run: (0, commands_1.sinkOnlySelectedListItem)((0, utils_1.liType)(schema)),
35
35
  };
36
36
  },
37
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Lists/actions.ts"],"names":[],"mappings":";;;AAAA,qEAAmE;AAInE,4CAAkC;AAClC,sCAAiC;AACjC,sCAAiE;AAEpD,QAAA,OAAO,GAAG;IACnB,YAAY,EAAE,CAAC,EAAC,MAAM,EAAgB,EAAc,EAAE;QAClD,MAAM,YAAY,GAAG,IAAA,iBAAM,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,OAAO;YACH,QAAQ,EAAE,IAAA,wBAAgB,EAAC,gBAAQ,CAAC,UAAU,CAAC;YAC/C,QAAQ,EAAE,YAAY;YACtB,GAAG,EAAE,YAAY;SACpB,CAAC;IACN,CAAC;IAED,aAAa,EAAE,CAAC,EAAC,MAAM,EAAgB,EAAc,EAAE;QACnD,MAAM,aAAa,GAAG,IAAA,iBAAM,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,OAAO;YACH,QAAQ,EAAE,IAAA,wBAAgB,EAAC,gBAAQ,CAAC,WAAW,CAAC;YAChD,QAAQ,EAAE,aAAa;YACvB,GAAG,EAAE,aAAa;SACrB,CAAC;IACN,CAAC;IAED,YAAY,EAAE,CAAC,EAAC,MAAM,EAAgB,EAAc,EAAE;QAClD,OAAO;YACH,QAAQ,EAAE,IAAA,sCAAY,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC;YACtC,GAAG,EAAE,IAAA,sCAAY,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC;SACpC,CAAC;IACN,CAAC;IAED,YAAY,EAAE,CAAC,EAAC,MAAM,EAAgB,EAAc,EAAE;QAClD,OAAO;YACH,QAAQ,EAAE,IAAA,sCAAY,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC;YACtC,GAAG,EAAE,IAAA,sCAAY,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC;SACpC,CAAC;IACN,CAAC;CACJ,CAAC","sourcesContent":["import {liftListItem, sinkListItem} from 'prosemirror-schema-list';\n\nimport type {ActionSpec, ExtensionDeps} from '../../../core';\n\nimport {toList} from './commands';\nimport {ListNode} from './const';\nimport {blType, isIntoListOfType, liType, olType} from './utils';\n\nexport const actions = {\n toBulletList: ({schema}: ExtensionDeps): ActionSpec => {\n const toBulletList = toList(blType(schema));\n return {\n isActive: isIntoListOfType(ListNode.BulletList),\n isEnable: toBulletList,\n run: toBulletList,\n };\n },\n\n toOrderedList: ({schema}: ExtensionDeps): ActionSpec => {\n const toOrderedList = toList(olType(schema));\n return {\n isActive: isIntoListOfType(ListNode.OrderedList),\n isEnable: toOrderedList,\n run: toOrderedList,\n };\n },\n\n liftListItem: ({schema}: ExtensionDeps): ActionSpec => {\n return {\n isEnable: liftListItem(liType(schema)),\n run: liftListItem(liType(schema)),\n };\n },\n\n sinkListItem: ({schema}: ExtensionDeps): ActionSpec => {\n return {\n isEnable: sinkListItem(liType(schema)),\n run: sinkListItem(liType(schema)),\n };\n },\n};\n"]}
1
+ {"version":3,"file":"actions.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Lists/actions.ts"],"names":[],"mappings":";;;AAAA,qEAAqD;AAIrD,4CAA4D;AAC5D,sCAAiC;AACjC,sCAAiE;AAEpD,QAAA,OAAO,GAAG;IACnB,YAAY,EAAE,CAAC,EAAC,MAAM,EAAgB,EAAc,EAAE;QAClD,MAAM,YAAY,GAAG,IAAA,iBAAM,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,OAAO;YACH,QAAQ,EAAE,IAAA,wBAAgB,EAAC,gBAAQ,CAAC,UAAU,CAAC;YAC/C,QAAQ,EAAE,YAAY;YACtB,GAAG,EAAE,YAAY;SACpB,CAAC;IACN,CAAC;IAED,aAAa,EAAE,CAAC,EAAC,MAAM,EAAgB,EAAc,EAAE;QACnD,MAAM,aAAa,GAAG,IAAA,iBAAM,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,OAAO;YACH,QAAQ,EAAE,IAAA,wBAAgB,EAAC,gBAAQ,CAAC,WAAW,CAAC;YAChD,QAAQ,EAAE,aAAa;YACvB,GAAG,EAAE,aAAa;SACrB,CAAC;IACN,CAAC;IAED,YAAY,EAAE,CAAC,EAAC,MAAM,EAAgB,EAAc,EAAE;QAClD,OAAO;YACH,QAAQ,EAAE,IAAA,sCAAY,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC;YACtC,GAAG,EAAE,IAAA,sCAAY,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC;SACpC,CAAC;IACN,CAAC;IAED,YAAY,EAAE,CAAC,EAAC,MAAM,EAAgB,EAAc,EAAE;QAClD,OAAO;YACH,QAAQ,EAAE,IAAA,mCAAwB,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC;YAClD,GAAG,EAAE,IAAA,mCAAwB,EAAC,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC;SAChD,CAAC;IACN,CAAC;CACJ,CAAC","sourcesContent":["import {liftListItem} from 'prosemirror-schema-list';\n\nimport type {ActionSpec, ExtensionDeps} from '../../../core';\n\nimport {sinkOnlySelectedListItem, toList} from './commands';\nimport {ListNode} from './const';\nimport {blType, isIntoListOfType, liType, olType} from './utils';\n\nexport const actions = {\n toBulletList: ({schema}: ExtensionDeps): ActionSpec => {\n const toBulletList = toList(blType(schema));\n return {\n isActive: isIntoListOfType(ListNode.BulletList),\n isEnable: toBulletList,\n run: toBulletList,\n };\n },\n\n toOrderedList: ({schema}: ExtensionDeps): ActionSpec => {\n const toOrderedList = toList(olType(schema));\n return {\n isActive: isIntoListOfType(ListNode.OrderedList),\n isEnable: toOrderedList,\n run: toOrderedList,\n };\n },\n\n liftListItem: ({schema}: ExtensionDeps): ActionSpec => {\n return {\n isEnable: liftListItem(liType(schema)),\n run: liftListItem(liType(schema)),\n };\n },\n\n sinkListItem: ({schema}: ExtensionDeps): ActionSpec => {\n return {\n isEnable: sinkOnlySelectedListItem(liType(schema)),\n run: sinkOnlySelectedListItem(liType(schema)),\n };\n },\n};\n"]}
@@ -1,4 +1,5 @@
1
- import type { NodeType } from 'prosemirror-model';
1
+ import { type NodeType } from 'prosemirror-model';
2
2
  import type { Command } from 'prosemirror-state';
3
3
  export declare function toList(listType: NodeType): Command;
4
4
  export declare const joinPrevList: Command;
5
+ export declare function sinkOnlySelectedListItem(itemType: NodeType): Command;
@@ -2,7 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.joinPrevList = void 0;
4
4
  exports.toList = toList;
5
+ exports.sinkOnlySelectedListItem = sinkOnlySelectedListItem;
6
+ const prosemirror_model_1 = require("prosemirror-model");
5
7
  const prosemirror_schema_list_1 = require("prosemirror-schema-list");
8
+ const prosemirror_transform_1 = require("prosemirror-transform");
6
9
  const join_1 = require("../../../commands/join.js");
7
10
  const utils_1 = require("./utils.js");
8
11
  function toList(listType) {
@@ -21,4 +24,65 @@ exports.joinPrevList = (0, join_1.joinPreviousBlock)({
21
24
  checkPrevNode: utils_1.isListNode,
22
25
  skipNode: utils_1.isListOrItemNode,
23
26
  });
27
+ /*
28
+ Simplified `sinkListItem` from `prosemirror-schema-list` without `state`/`dispatch`,
29
+ sinks list items deeper.
30
+ */
31
+ const sink = (tr, range, itemType) => {
32
+ const before = tr.mapping.map(range.start);
33
+ const after = tr.mapping.map(range.end);
34
+ const startIndex = tr.mapping.map(range.startIndex);
35
+ const parent = range.parent;
36
+ const nodeBefore = parent.child(startIndex - 1);
37
+ const nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type === parent.type;
38
+ const inner = prosemirror_model_1.Fragment.from(nestedBefore ? itemType.create() : null);
39
+ const slice = new prosemirror_model_1.Slice(prosemirror_model_1.Fragment.from(itemType.create(null, prosemirror_model_1.Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);
40
+ tr.step(new prosemirror_transform_1.ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice, 1, true));
41
+ return true;
42
+ };
43
+ function sinkOnlySelectedListItem(itemType) {
44
+ return ({ tr, selection }, dispatch) => {
45
+ const { $from, $to } = selection;
46
+ const selectionRange = $from.blockRange($to, (node) => node.childCount > 0 && node.firstChild.type === itemType);
47
+ if (!selectionRange) {
48
+ return false;
49
+ }
50
+ const { startIndex, parent, start, end } = selectionRange;
51
+ if (startIndex === 0) {
52
+ return false;
53
+ }
54
+ const nodeBefore = parent.child(startIndex - 1);
55
+ if (nodeBefore.type !== itemType) {
56
+ return false;
57
+ }
58
+ if (dispatch) {
59
+ // lifts following list items sequentially to prepare correct nesting structure
60
+ let currentEnd = end - 1;
61
+ while (currentEnd > start) {
62
+ const selectionEnd = tr.mapping.map($to.pos);
63
+ const $candidateBlockEnd = tr.doc.resolve(currentEnd);
64
+ const candidateBlockStartPos = $candidateBlockEnd.before($candidateBlockEnd.depth);
65
+ const $candidateBlockStart = tr.doc.resolve(candidateBlockStartPos);
66
+ const candidateBlockRange = $candidateBlockStart.blockRange($candidateBlockEnd);
67
+ if (candidateBlockRange?.start) {
68
+ const $rangeStart = tr.doc.resolve(candidateBlockRange.start);
69
+ const shouldLift = candidateBlockRange.start > selectionEnd && (0, utils_1.isListNode)($rangeStart.parent);
70
+ if (shouldLift) {
71
+ currentEnd = candidateBlockRange.start;
72
+ const targetDepth = (0, prosemirror_transform_1.liftTarget)(candidateBlockRange);
73
+ if (targetDepth !== null) {
74
+ tr.lift(candidateBlockRange, targetDepth);
75
+ }
76
+ }
77
+ }
78
+ currentEnd--;
79
+ }
80
+ // sinks the selected list item deeper into the list hierarchy
81
+ sink(tr, selectionRange, itemType);
82
+ dispatch(tr.scrollIntoView());
83
+ return true;
84
+ }
85
+ return false;
86
+ };
87
+ }
24
88
  //# sourceMappingURL=commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Lists/commands.ts"],"names":[],"mappings":";;;AAQA,wBAWC;AAlBD,qEAAmD;AAGnD,oDAAyD;AAEzD,sCAAwE;AAExE,SAAgB,MAAM,CAAC,QAAkB;IACrC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACvB,MAAM,UAAU,GAAG,IAAA,yBAAiB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,QAAQ,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEnD,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,IAAA,oCAAU,EAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC,CAAC;AACN,CAAC;AAEY,QAAA,YAAY,GAAG,IAAA,wBAAiB,EAAC;IAC1C,aAAa,EAAE,kBAAU;IACzB,QAAQ,EAAE,wBAAgB;CAC7B,CAAC,CAAC","sourcesContent":["import type {NodeType} from 'prosemirror-model';\nimport {wrapInList} from 'prosemirror-schema-list';\nimport type {Command} from 'prosemirror-state';\n\nimport {joinPreviousBlock} from '../../../commands/join';\n\nimport {findAnyParentList, isListNode, isListOrItemNode} from './utils';\n\nexport function toList(listType: NodeType): Command {\n return (state, dispatch) => {\n const parentList = findAnyParentList(state.schema)(state.selection);\n if (parentList) {\n if (listType === parentList.node.type) return true;\n\n dispatch?.(state.tr.setNodeMarkup(parentList.pos, listType));\n return true;\n }\n return wrapInList(listType)(state, dispatch);\n };\n}\n\nexport const joinPrevList = joinPreviousBlock({\n checkPrevNode: isListNode,\n skipNode: isListOrItemNode,\n});\n"]}
1
+ {"version":3,"file":"commands.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Lists/commands.ts"],"names":[],"mappings":"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","sourcesContent":["import {Fragment, type NodeRange, type NodeType, Slice} from 'prosemirror-model';\nimport {wrapInList} from 'prosemirror-schema-list';\nimport type {Command, Transaction} from 'prosemirror-state';\nimport {ReplaceAroundStep, liftTarget} from 'prosemirror-transform';\n\nimport {joinPreviousBlock} from '../../../commands/join';\n\nimport {findAnyParentList, isListNode, isListOrItemNode} from './utils';\n\nexport function toList(listType: NodeType): Command {\n return (state, dispatch) => {\n const parentList = findAnyParentList(state.schema)(state.selection);\n if (parentList) {\n if (listType === parentList.node.type) return true;\n\n dispatch?.(state.tr.setNodeMarkup(parentList.pos, listType));\n return true;\n }\n return wrapInList(listType)(state, dispatch);\n };\n}\n\nexport const joinPrevList = joinPreviousBlock({\n checkPrevNode: isListNode,\n skipNode: isListOrItemNode,\n});\n\n/*\n Simplified `sinkListItem` from `prosemirror-schema-list` without `state`/`dispatch`,\n sinks list items deeper.\n */\nconst sink = (tr: Transaction, range: NodeRange, itemType: NodeType) => {\n const before = tr.mapping.map(range.start);\n const after = tr.mapping.map(range.end);\n const startIndex = tr.mapping.map(range.startIndex);\n\n const parent = range.parent;\n const nodeBefore = parent.child(startIndex - 1);\n\n const nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type === parent.type;\n const inner = Fragment.from(nestedBefore ? itemType.create() : null);\n const slice = new Slice(\n Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))),\n nestedBefore ? 3 : 1,\n 0,\n );\n\n tr.step(\n new ReplaceAroundStep(\n before - (nestedBefore ? 3 : 1),\n after,\n before,\n after,\n slice,\n 1,\n true,\n ),\n );\n return true;\n};\n\nexport function sinkOnlySelectedListItem(itemType: NodeType): Command {\n return ({tr, selection}, dispatch) => {\n const {$from, $to} = selection;\n const selectionRange = $from.blockRange(\n $to,\n (node) => node.childCount > 0 && node.firstChild!.type === itemType,\n );\n if (!selectionRange) {\n return false;\n }\n\n const {startIndex, parent, start, end} = selectionRange;\n if (startIndex === 0) {\n return false;\n }\n\n const nodeBefore = parent.child(startIndex - 1);\n if (nodeBefore.type !== itemType) {\n return false;\n }\n\n if (dispatch) {\n // lifts following list items sequentially to prepare correct nesting structure\n let currentEnd = end - 1;\n while (currentEnd > start) {\n const selectionEnd = tr.mapping.map($to.pos);\n\n const $candidateBlockEnd = tr.doc.resolve(currentEnd);\n const candidateBlockStartPos = $candidateBlockEnd.before($candidateBlockEnd.depth);\n const $candidateBlockStart = tr.doc.resolve(candidateBlockStartPos);\n const candidateBlockRange = $candidateBlockStart.blockRange($candidateBlockEnd);\n\n if (candidateBlockRange?.start) {\n const $rangeStart = tr.doc.resolve(candidateBlockRange.start);\n const shouldLift =\n candidateBlockRange.start > selectionEnd && isListNode($rangeStart.parent);\n\n if (shouldLift) {\n currentEnd = candidateBlockRange.start;\n\n const targetDepth = liftTarget(candidateBlockRange);\n if (targetDepth !== null) {\n tr.lift(candidateBlockRange, targetDepth);\n }\n }\n }\n\n currentEnd--;\n }\n\n // sinks the selected list item deeper into the list hierarchy\n sink(tr, selectionRange, itemType);\n\n dispatch(tr.scrollIntoView());\n return true;\n }\n return false;\n };\n}\n"]}
@@ -26,10 +26,10 @@ const Lists = (builder, opts) => {
26
26
  if (olKey)
27
27
  bindings[olKey] = (0, keymap_1.withLogAction)('orderedList', (0, commands_1.toList)((0, ListsSpecs_1.olType)(schema)));
28
28
  return {
29
- Tab: (0, prosemirror_schema_list_1.sinkListItem)((0, ListsSpecs_1.liType)(schema)),
29
+ Tab: (0, commands_1.sinkOnlySelectedListItem)((0, ListsSpecs_1.liType)(schema)),
30
30
  'Shift-Tab': (0, prosemirror_schema_list_1.liftListItem)((0, ListsSpecs_1.liType)(schema)),
31
31
  'Mod-[': (0, prosemirror_schema_list_1.liftListItem)((0, ListsSpecs_1.liType)(schema)),
32
- 'Mod-]': (0, prosemirror_schema_list_1.sinkListItem)((0, ListsSpecs_1.liType)(schema)),
32
+ 'Mod-]': (0, commands_1.sinkOnlySelectedListItem)((0, ListsSpecs_1.liType)(schema)),
33
33
  ...bindings,
34
34
  };
35
35
  }, builder.Priority.High);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Lists/index.ts"],"names":[],"mappings":";;;AAAA,qEAAkF;AAGlF,qDAAoD;AAEpD,sDAAgE;AAChE,0CAAkC;AAClC,4CAAgD;AAChD,sCAAmC;AACnC,gDAAmF;AACnF,0EAAkE;AAClE,oEAA4D;AAE5D,oDAAyE;AAAjE,sGAAA,QAAQ,OAAA;AAAE,uGAAA,SAAS,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,oGAAA,MAAM,OAAA;AAQ5C,MAAM,KAAK,GAAgC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAChE,OAAO,CAAC,GAAG,CAAC,uBAAU,CAAC,CAAC;IAExB,OAAO,CAAC,SAAS,CAAC,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE;QAC3B,MAAM,EAAC,KAAK,EAAE,KAAK,EAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAW,EAAE,CAAC;QAC5B,IAAI,KAAK;YAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAA,sBAAa,EAAC,YAAY,EAAE,IAAA,iBAAM,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,KAAK;YAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAA,sBAAa,EAAC,aAAa,EAAE,IAAA,iBAAM,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAElF,OAAO;YACH,GAAG,EAAE,IAAA,sCAAY,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC;YACjC,WAAW,EAAE,IAAA,sCAAY,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC;YAEzC,OAAO,EAAE,IAAA,sCAAY,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC;YACrC,OAAO,EAAE,IAAA,sCAAY,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC;YAErC,GAAG,QAAQ;SACd,CAAC;IACN,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE1B,OAAO,CAAC,SAAS,CACb,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,CAAC;QACX,KAAK,EAAE,IAAA,uCAAa,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC;QACpC,SAAS,EAAE,uBAAY;KAC1B,CAAC,EACF,OAAO,CAAC,QAAQ,CAAC,GAAG,CACvB,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,qCAAwB,EAAE,EAAC,mBAAmB,EAAE,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC;IAEjF,OAAO,CAAC,SAAS,CAAC,mCAAgB,CAAC,CAAC;IAEpC,OAAO,CAAC,SAAS,CAAC,yCAAmB,CAAC,CAAC;IAEvC,OAAO;SACF,SAAS,CAAC,kBAAU,CAAC,YAAY,EAAE,iBAAO,CAAC,YAAY,CAAC;SACxD,SAAS,CAAC,kBAAU,CAAC,aAAa,EAAE,iBAAO,CAAC,aAAa,CAAC;SAC1D,SAAS,CAAC,kBAAU,CAAC,YAAY,EAAE,iBAAO,CAAC,YAAY,CAAC;SACxD,SAAS,CAAC,kBAAU,CAAC,YAAY,EAAE,iBAAO,CAAC,YAAY,CAAC,CAAC;AAClE,CAAC,CAAC;AAvCW,QAAA,KAAK,SAuChB","sourcesContent":["import {liftListItem, sinkListItem, splitListItem} from 'prosemirror-schema-list';\n\nimport type {Action, ExtensionAuto, Keymap} from '../../../core';\nimport {withLogAction} from '../../../utils/keymap';\n\nimport {ListsSpecs, blType, liType, olType} from './ListsSpecs';\nimport {actions} from './actions';\nimport {joinPrevList, toList} from './commands';\nimport {ListAction} from './const';\nimport {ListsInputRulesExtension, type ListsInputRulesOptions} from './inputrules';\nimport {collapseListsPlugin} from './plugins/CollapseListsPlugin';\nimport {mergeListsPlugin} from './plugins/MergeListsPlugin';\n\nexport {ListNode, ListsAttr, blType, liType, olType} from './ListsSpecs';\n\nexport type ListsOptions = {\n ulKey?: string | null;\n olKey?: string | null;\n ulInputRules?: ListsInputRulesOptions['bulletListInputRule'];\n};\n\nexport const Lists: ExtensionAuto<ListsOptions> = (builder, opts) => {\n builder.use(ListsSpecs);\n\n builder.addKeymap(({schema}) => {\n const {ulKey, olKey} = opts ?? {};\n const bindings: Keymap = {};\n if (ulKey) bindings[ulKey] = withLogAction('bulletList', toList(blType(schema)));\n if (olKey) bindings[olKey] = withLogAction('orderedList', toList(olType(schema)));\n\n return {\n Tab: sinkListItem(liType(schema)),\n 'Shift-Tab': liftListItem(liType(schema)),\n\n 'Mod-[': liftListItem(liType(schema)),\n 'Mod-]': sinkListItem(liType(schema)),\n\n ...bindings,\n };\n }, builder.Priority.High);\n\n builder.addKeymap(\n ({schema}) => ({\n Enter: splitListItem(liType(schema)),\n Backspace: joinPrevList,\n }),\n builder.Priority.Low,\n );\n\n builder.use(ListsInputRulesExtension, {bulletListInputRule: opts?.ulInputRules});\n\n builder.addPlugin(mergeListsPlugin);\n\n builder.addPlugin(collapseListsPlugin);\n\n builder\n .addAction(ListAction.ToBulletList, actions.toBulletList)\n .addAction(ListAction.ToOrderedList, actions.toOrderedList)\n .addAction(ListAction.SinkListItem, actions.sinkListItem)\n .addAction(ListAction.LiftListItem, actions.liftListItem);\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Actions {\n [ListAction.ToBulletList]: Action;\n [ListAction.ToOrderedList]: Action;\n [ListAction.SinkListItem]: Action;\n [ListAction.LiftListItem]: Action;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Lists/index.ts"],"names":[],"mappings":";;;AAAA,qEAAoE;AAGpE,qDAAoD;AAEpD,sDAAgE;AAChE,0CAAkC;AAClC,4CAA0E;AAC1E,sCAAmC;AACnC,gDAAmF;AACnF,0EAAkE;AAClE,oEAA4D;AAE5D,oDAAyE;AAAjE,sGAAA,QAAQ,OAAA;AAAE,uGAAA,SAAS,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,oGAAA,MAAM,OAAA;AAQ5C,MAAM,KAAK,GAAgC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAChE,OAAO,CAAC,GAAG,CAAC,uBAAU,CAAC,CAAC;IAExB,OAAO,CAAC,SAAS,CAAC,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE;QAC3B,MAAM,EAAC,KAAK,EAAE,KAAK,EAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAW,EAAE,CAAC;QAC5B,IAAI,KAAK;YAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAA,sBAAa,EAAC,YAAY,EAAE,IAAA,iBAAM,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,KAAK;YAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAA,sBAAa,EAAC,aAAa,EAAE,IAAA,iBAAM,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAElF,OAAO;YACH,GAAG,EAAE,IAAA,mCAAwB,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC;YAC7C,WAAW,EAAE,IAAA,sCAAY,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC;YAEzC,OAAO,EAAE,IAAA,sCAAY,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC;YACrC,OAAO,EAAE,IAAA,mCAAwB,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC;YAEjD,GAAG,QAAQ;SACd,CAAC;IACN,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE1B,OAAO,CAAC,SAAS,CACb,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,CAAC;QACX,KAAK,EAAE,IAAA,uCAAa,EAAC,IAAA,mBAAM,EAAC,MAAM,CAAC,CAAC;QACpC,SAAS,EAAE,uBAAY;KAC1B,CAAC,EACF,OAAO,CAAC,QAAQ,CAAC,GAAG,CACvB,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,qCAAwB,EAAE,EAAC,mBAAmB,EAAE,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC;IAEjF,OAAO,CAAC,SAAS,CAAC,mCAAgB,CAAC,CAAC;IAEpC,OAAO,CAAC,SAAS,CAAC,yCAAmB,CAAC,CAAC;IAEvC,OAAO;SACF,SAAS,CAAC,kBAAU,CAAC,YAAY,EAAE,iBAAO,CAAC,YAAY,CAAC;SACxD,SAAS,CAAC,kBAAU,CAAC,aAAa,EAAE,iBAAO,CAAC,aAAa,CAAC;SAC1D,SAAS,CAAC,kBAAU,CAAC,YAAY,EAAE,iBAAO,CAAC,YAAY,CAAC;SACxD,SAAS,CAAC,kBAAU,CAAC,YAAY,EAAE,iBAAO,CAAC,YAAY,CAAC,CAAC;AAClE,CAAC,CAAC;AAvCW,QAAA,KAAK,SAuChB","sourcesContent":["import {liftListItem, splitListItem} from 'prosemirror-schema-list';\n\nimport type {Action, ExtensionAuto, Keymap} from '../../../core';\nimport {withLogAction} from '../../../utils/keymap';\n\nimport {ListsSpecs, blType, liType, olType} from './ListsSpecs';\nimport {actions} from './actions';\nimport {joinPrevList, sinkOnlySelectedListItem, toList} from './commands';\nimport {ListAction} from './const';\nimport {ListsInputRulesExtension, type ListsInputRulesOptions} from './inputrules';\nimport {collapseListsPlugin} from './plugins/CollapseListsPlugin';\nimport {mergeListsPlugin} from './plugins/MergeListsPlugin';\n\nexport {ListNode, ListsAttr, blType, liType, olType} from './ListsSpecs';\n\nexport type ListsOptions = {\n ulKey?: string | null;\n olKey?: string | null;\n ulInputRules?: ListsInputRulesOptions['bulletListInputRule'];\n};\n\nexport const Lists: ExtensionAuto<ListsOptions> = (builder, opts) => {\n builder.use(ListsSpecs);\n\n builder.addKeymap(({schema}) => {\n const {ulKey, olKey} = opts ?? {};\n const bindings: Keymap = {};\n if (ulKey) bindings[ulKey] = withLogAction('bulletList', toList(blType(schema)));\n if (olKey) bindings[olKey] = withLogAction('orderedList', toList(olType(schema)));\n\n return {\n Tab: sinkOnlySelectedListItem(liType(schema)),\n 'Shift-Tab': liftListItem(liType(schema)),\n\n 'Mod-[': liftListItem(liType(schema)),\n 'Mod-]': sinkOnlySelectedListItem(liType(schema)),\n\n ...bindings,\n };\n }, builder.Priority.High);\n\n builder.addKeymap(\n ({schema}) => ({\n Enter: splitListItem(liType(schema)),\n Backspace: joinPrevList,\n }),\n builder.Priority.Low,\n );\n\n builder.use(ListsInputRulesExtension, {bulletListInputRule: opts?.ulInputRules});\n\n builder.addPlugin(mergeListsPlugin);\n\n builder.addPlugin(collapseListsPlugin);\n\n builder\n .addAction(ListAction.ToBulletList, actions.toBulletList)\n .addAction(ListAction.ToOrderedList, actions.toOrderedList)\n .addAction(ListAction.SinkListItem, actions.sinkListItem)\n .addAction(ListAction.LiftListItem, actions.liftListItem);\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Actions {\n [ListAction.ToBulletList]: Action;\n [ListAction.ToOrderedList]: Action;\n [ListAction.SinkListItem]: Action;\n [ListAction.LiftListItem]: Action;\n }\n }\n}\n"]}
@@ -3,5 +3,7 @@ import type { ExtensionAuto } from "../../../../core/index.js";
3
3
  export type YfmConfigsSpecsOptions = {
4
4
  /** markdown-it-attrs options */
5
5
  attrs?: AttrsOptions;
6
+ /** Disable markdown-it-attrs plugin */
7
+ disableAttrs?: boolean;
6
8
  };
7
9
  export declare const YfmConfigsSpecs: ExtensionAuto<YfmConfigsSpecsOptions>;
@@ -2,14 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.YfmConfigsSpecs = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const markdown_it_attrs_1 = tslib_1.__importDefault(require("markdown-it-attrs")); // eslint-disable-line import/no-extraneous-dependencies
5
+ const markdown_it_attrs_1 = tslib_1.__importDefault(require("markdown-it-attrs"));
6
6
  const lodash_1 = require("../../../../lodash.js");
7
7
  const defaultAttrsOpts = {
8
8
  allowedAttributes: ['id'],
9
9
  };
10
10
  const YfmConfigsSpecs = (builder, opts) => {
11
11
  const attrsOpts = { ...defaultAttrsOpts, ...opts.attrs };
12
- builder.configureMd((md) => md.use(markdown_it_attrs_1.default, attrsOpts), { text: false });
12
+ // MAJOR: remove markdown-it-attrs
13
+ if (!opts.disableAttrs) {
14
+ builder.configureMd((md) => md.use(markdown_it_attrs_1.default, attrsOpts), { text: false });
15
+ }
13
16
  // ignore yfm lint token
14
17
  builder.addNode('__yfm_lint', () => ({
15
18
  spec: {},
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmConfigs/YfmConfigsSpecs/index.ts"],"names":[],"mappings":";;;;AAAA,kFAAiE,CAAC,wDAAwD;AAG1H,kDAAwC;AAExC,MAAM,gBAAgB,GAAiB;IACnC,iBAAiB,EAAE,CAAC,IAAI,CAAC;CAC5B,CAAC;AAOK,MAAM,eAAe,GAA0C,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IACpF,MAAM,SAAS,GAAG,EAAC,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,EAAC,CAAC;IAEvD,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAe,2BAAW,EAAE,SAAS,CAAC,EAAE,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC;IAEzF,wBAAwB;IACxB,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAC,EAAC;QACrE,IAAI,EAAE,aAAI;KACb,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAXW,QAAA,eAAe,mBAW1B","sourcesContent":["import attrsPlugin, {type AttrsOptions} from 'markdown-it-attrs'; // eslint-disable-line import/no-extraneous-dependencies\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {noop} from '../../../../lodash';\n\nconst defaultAttrsOpts: AttrsOptions = {\n allowedAttributes: ['id'],\n};\n\nexport type YfmConfigsSpecsOptions = {\n /** markdown-it-attrs options */\n attrs?: AttrsOptions;\n};\n\nexport const YfmConfigsSpecs: ExtensionAuto<YfmConfigsSpecsOptions> = (builder, opts) => {\n const attrsOpts = {...defaultAttrsOpts, ...opts.attrs};\n\n builder.configureMd((md) => md.use<AttrsOptions>(attrsPlugin, attrsOpts), {text: false});\n\n // ignore yfm lint token\n builder.addNode('__yfm_lint', () => ({\n spec: {},\n fromMd: {tokenSpec: {name: '__yfm_lint', type: 'node', ignore: true}},\n toMd: noop,\n }));\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmConfigs/YfmConfigsSpecs/index.ts"],"names":[],"mappings":";;;;AAAA,kFAAiE;AAGjE,kDAAgC;AAEhC,MAAM,gBAAgB,GAAiB;IACnC,iBAAiB,EAAE,CAAC,IAAI,CAAC;CAC5B,CAAC;AASK,MAAM,eAAe,GAA0C,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IACpF,MAAM,SAAS,GAAG,EAAC,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,EAAC,CAAC;IAEvD,kCAAkC;IAClC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACrB,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAe,2BAAW,EAAE,SAAS,CAAC,EAAE,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC;IAC7F,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAC,EAAC;QACrE,IAAI,EAAE,aAAI;KACb,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAdW,QAAA,eAAe,mBAc1B","sourcesContent":["import attrsPlugin, {type AttrsOptions} from 'markdown-it-attrs';\n\nimport type {ExtensionAuto} from '#core';\nimport {noop} from 'src/lodash';\n\nconst defaultAttrsOpts: AttrsOptions = {\n allowedAttributes: ['id'],\n};\n\nexport type YfmConfigsSpecsOptions = {\n /** markdown-it-attrs options */\n attrs?: AttrsOptions;\n /** Disable markdown-it-attrs plugin */\n disableAttrs?: boolean;\n};\n\nexport const YfmConfigsSpecs: ExtensionAuto<YfmConfigsSpecsOptions> = (builder, opts) => {\n const attrsOpts = {...defaultAttrsOpts, ...opts.attrs};\n\n // MAJOR: remove markdown-it-attrs\n if (!opts.disableAttrs) {\n builder.configureMd((md) => md.use<AttrsOptions>(attrsPlugin, attrsOpts), {text: false});\n }\n\n // ignore yfm lint token\n builder.addNode('__yfm_lint', () => ({\n spec: {},\n fromMd: {tokenSpec: {name: '__yfm_lint', type: 'node', ignore: true}},\n toMd: noop,\n }));\n};\n"]}
@@ -1,5 +1,5 @@
1
- import type { NodeSpec } from 'prosemirror-model';
2
1
  import type { ExtensionAuto } from "../../../../core/index.js";
2
+ import type { NodeSpec } from "../../../../pm/model.js";
3
3
  export { YfmHeadingAttr } from "./const.js";
4
4
  export type YfmHeadingSpecsOptions = {
5
5
  /**
@@ -2,12 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.YfmHeadingSpecs = exports.YfmHeadingAttr = void 0;
4
4
  const const_1 = require("./const.js");
5
+ const heading_attrs_1 = require("./markdown/heading-attrs.js");
5
6
  const utils_1 = require("./utils.js");
6
7
  const DEFAULT_PLACEHOLDER = (node) => 'Heading ' + node.attrs[const_1.YfmHeadingAttr.Level];
7
8
  var const_2 = require("./const.js");
8
9
  Object.defineProperty(exports, "YfmHeadingAttr", { enumerable: true, get: function () { return const_2.YfmHeadingAttr; } });
9
10
  /** YfmHeading extension needs markdown-it-attrs plugin */
10
11
  const YfmHeadingSpecs = (builder, opts) => {
12
+ builder.configureMd((md) => md.use(heading_attrs_1.headingAttrsPlugin));
11
13
  builder.addNode(const_1.headingNodeName, () => ({
12
14
  spec: {
13
15
  attrs: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmHeading/YfmHeadingSpecs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Node, NodeSpec} from 'prosemirror-model';\n\nimport type {ExtensionAuto} from '../../../../core';\n\nimport {YfmHeadingAttr, headingNodeName} from './const';\nimport {getNodeAttrs} from './utils';\n\nconst DEFAULT_PLACEHOLDER = (node: Node) => 'Heading ' + node.attrs[YfmHeadingAttr.Level];\n\nexport {YfmHeadingAttr} from './const';\n\nexport type YfmHeadingSpecsOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n headingPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n};\n\n/** YfmHeading extension needs markdown-it-attrs plugin */\nexport const YfmHeadingSpecs: ExtensionAuto<YfmHeadingSpecsOptions> = (builder, opts) => {\n builder.addNode(headingNodeName, () => ({\n spec: {\n attrs: {\n [YfmHeadingAttr.Id]: {default: ''},\n [YfmHeadingAttr.Level]: {default: 1},\n [YfmHeadingAttr.DataLine]: {default: null},\n [YfmHeadingAttr.Folding]: {default: null},\n },\n content: '(text | inline)*',\n group: 'block',\n defining: true,\n selectable: true,\n parseDOM: [\n {tag: 'h1', getAttrs: getNodeAttrs(1), priority: 100, consuming: true},\n {tag: 'h2', getAttrs: getNodeAttrs(2), priority: 100, consuming: true},\n {tag: 'h3', getAttrs: getNodeAttrs(3), priority: 100, consuming: true},\n {tag: 'h4', getAttrs: getNodeAttrs(4), priority: 100, consuming: true},\n {tag: 'h5', getAttrs: getNodeAttrs(5), priority: 100, consuming: true},\n {tag: 'h6', getAttrs: getNodeAttrs(6), priority: 100, consuming: true},\n {\n // ignore anchor link inside headings\n tag: 'a.yfm-anchor',\n context: `${headingNodeName}/`,\n skip: true,\n ignore: true,\n priority: 1000,\n },\n ],\n toDOM(node) {\n const id = node.attrs[YfmHeadingAttr.Id];\n const lineNumber = node.attrs[YfmHeadingAttr.DataLine];\n const folding = node.attrs[YfmHeadingAttr.Folding];\n return [\n 'h' + node.attrs[YfmHeadingAttr.Level],\n {\n id: id || null,\n [YfmHeadingAttr.DataLine]: lineNumber,\n [`data-${YfmHeadingAttr.Folding}`]: folding,\n },\n 0,\n // [\n // 'a',\n // {\n // href: `#${node.attrs[YfmHeadingAttr.Id]}`,\n // class: 'yfm-anchor',\n // 'aria-hidden': 'true',\n // contenteditable: 'false',\n // },\n // ],\n // ['span', 0],\n ];\n },\n placeholder: {\n content:\n builder.context.get('placeholder')?.heading ??\n opts.headingPlaceholder ??\n DEFAULT_PLACEHOLDER,\n alwaysVisible: true,\n },\n },\n fromMd: {\n tokenSpec: {\n name: headingNodeName,\n type: 'block',\n getAttrs: (token) => {\n if (token.type.endsWith('_close')) return {};\n\n const attrs = Object.fromEntries(token.attrs || []);\n // if (!attrs[YfmHeadingAttr.Id]) {\n // // calculate id if it was not specified\n // // tokens[index + 1] is child inline token\n // attrs[YfmHeadingAttr.Id] = slugify(tokens[index + 1].content);\n // }\n\n // attrs have id only if it explicitly specified manually\n return {\n [YfmHeadingAttr.Level]: Number(token.tag.slice(1)),\n [YfmHeadingAttr.Folding]: token.meta?.folding === true ? true : null,\n ...attrs,\n };\n },\n },\n },\n toMd: (state, node) => {\n const folding = node.attrs[YfmHeadingAttr.Folding];\n const level = node.attrs[YfmHeadingAttr.Level];\n\n state.write(state.repeat('#', level) + (typeof folding === 'boolean' ? '+' : '') + ' ');\n state.renderInline(node);\n\n const anchor = node.attrs[YfmHeadingAttr.Id];\n\n if (anchor /*&& anchor !== node.firstChild?.textContent*/) {\n state.write(` {#${anchor}}`);\n }\n\n state.closeBlock(node);\n },\n }));\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmHeading/YfmHeadingSpecs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ExtensionAuto} from '#core';\nimport type {Node, NodeSpec} from '#pm/model';\n\nimport {YfmHeadingAttr, headingNodeName} from './const';\nimport {headingAttrsPlugin} from './markdown/heading-attrs';\nimport {getNodeAttrs} from './utils';\n\nconst DEFAULT_PLACEHOLDER = (node: Node) => 'Heading ' + node.attrs[YfmHeadingAttr.Level];\n\nexport {YfmHeadingAttr} from './const';\n\nexport type YfmHeadingSpecsOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n headingPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n};\n\n/** YfmHeading extension needs markdown-it-attrs plugin */\nexport const YfmHeadingSpecs: ExtensionAuto<YfmHeadingSpecsOptions> = (builder, opts) => {\n builder.configureMd((md) => md.use(headingAttrsPlugin));\n builder.addNode(headingNodeName, () => ({\n spec: {\n attrs: {\n [YfmHeadingAttr.Id]: {default: ''},\n [YfmHeadingAttr.Level]: {default: 1},\n [YfmHeadingAttr.DataLine]: {default: null},\n [YfmHeadingAttr.Folding]: {default: null},\n },\n content: '(text | inline)*',\n group: 'block',\n defining: true,\n selectable: true,\n parseDOM: [\n {tag: 'h1', getAttrs: getNodeAttrs(1), priority: 100, consuming: true},\n {tag: 'h2', getAttrs: getNodeAttrs(2), priority: 100, consuming: true},\n {tag: 'h3', getAttrs: getNodeAttrs(3), priority: 100, consuming: true},\n {tag: 'h4', getAttrs: getNodeAttrs(4), priority: 100, consuming: true},\n {tag: 'h5', getAttrs: getNodeAttrs(5), priority: 100, consuming: true},\n {tag: 'h6', getAttrs: getNodeAttrs(6), priority: 100, consuming: true},\n {\n // ignore anchor link inside headings\n tag: 'a.yfm-anchor',\n context: `${headingNodeName}/`,\n skip: true,\n ignore: true,\n priority: 1000,\n },\n ],\n toDOM(node) {\n const id = node.attrs[YfmHeadingAttr.Id];\n const lineNumber = node.attrs[YfmHeadingAttr.DataLine];\n const folding = node.attrs[YfmHeadingAttr.Folding];\n return [\n 'h' + node.attrs[YfmHeadingAttr.Level],\n {\n id: id || null,\n [YfmHeadingAttr.DataLine]: lineNumber,\n [`data-${YfmHeadingAttr.Folding}`]: folding,\n },\n 0,\n // [\n // 'a',\n // {\n // href: `#${node.attrs[YfmHeadingAttr.Id]}`,\n // class: 'yfm-anchor',\n // 'aria-hidden': 'true',\n // contenteditable: 'false',\n // },\n // ],\n // ['span', 0],\n ];\n },\n placeholder: {\n content:\n builder.context.get('placeholder')?.heading ??\n opts.headingPlaceholder ??\n DEFAULT_PLACEHOLDER,\n alwaysVisible: true,\n },\n },\n fromMd: {\n tokenSpec: {\n name: headingNodeName,\n type: 'block',\n getAttrs: (token) => {\n if (token.type.endsWith('_close')) return {};\n\n const attrs = Object.fromEntries(token.attrs || []);\n // if (!attrs[YfmHeadingAttr.Id]) {\n // // calculate id if it was not specified\n // // tokens[index + 1] is child inline token\n // attrs[YfmHeadingAttr.Id] = slugify(tokens[index + 1].content);\n // }\n\n // attrs have id only if it explicitly specified manually\n return {\n [YfmHeadingAttr.Level]: Number(token.tag.slice(1)),\n [YfmHeadingAttr.Folding]: token.meta?.folding === true ? true : null,\n ...attrs,\n };\n },\n },\n },\n toMd: (state, node) => {\n const folding = node.attrs[YfmHeadingAttr.Folding];\n const level = node.attrs[YfmHeadingAttr.Level];\n\n state.write(state.repeat('#', level) + (typeof folding === 'boolean' ? '+' : '') + ' ');\n state.renderInline(node);\n\n const anchor = node.attrs[YfmHeadingAttr.Id];\n\n if (anchor /*&& anchor !== node.firstChild?.textContent*/) {\n state.write(` {#${anchor}}`);\n }\n\n state.closeBlock(node);\n },\n }));\n};\n"]}