@gravity-ui/markdown-editor 15.27.2 → 15.28.1

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/README.md +6 -4
  2. package/build/cjs/bundle/Editor.js.map +1 -1
  3. package/build/cjs/bundle/HorizontalDrag.js +3 -3
  4. package/build/cjs/bundle/HorizontalDrag.js.map +1 -1
  5. package/build/cjs/bundle/settings/index.js +1 -1
  6. package/build/cjs/bundle/settings/index.js.map +1 -1
  7. package/build/cjs/bundle/toolbar/utils/toolbarsConfigs.js +8 -8
  8. package/build/cjs/bundle/toolbar/utils/toolbarsConfigs.js.map +1 -1
  9. package/build/cjs/bundle/types.d.ts +8 -11
  10. package/build/cjs/bundle/types.js.map +1 -1
  11. package/build/cjs/bundle/wysiwyg-preset.d.ts +0 -1
  12. package/build/cjs/bundle/wysiwyg-preset.js +1 -1
  13. package/build/cjs/bundle/wysiwyg-preset.js.map +1 -1
  14. package/build/cjs/core/Editor.js.map +1 -1
  15. package/build/cjs/core/ExtensionBuilder.d.ts +0 -2
  16. package/build/cjs/core/ExtensionBuilder.js +1 -1
  17. package/build/cjs/core/ExtensionBuilder.js.map +1 -1
  18. package/build/cjs/core/markdown/MarkdownParser.d.ts +2 -3
  19. package/build/cjs/core/markdown/MarkdownParser.js.map +1 -1
  20. package/build/cjs/core/types/extension.js.map +1 -1
  21. package/build/cjs/core/types/parser.d.ts +3 -2
  22. package/build/cjs/core/types/parser.js.map +1 -1
  23. package/build/cjs/extensions/additional/GPT/gptExtension/view.js +1 -3
  24. package/build/cjs/extensions/additional/GPT/gptExtension/view.js.map +1 -1
  25. package/build/cjs/extensions/additional/Mermaid/MermaidSpecs/index.js +0 -1
  26. package/build/cjs/extensions/additional/Mermaid/MermaidSpecs/index.js.map +1 -1
  27. package/build/cjs/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js +1 -1
  28. package/build/cjs/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js.map +1 -1
  29. package/build/cjs/extensions/additional/YfmHtmlBlock/YfmHtmlBlockSpecs/index.js.map +1 -1
  30. package/build/cjs/extensions/additional/YfmHtmlBlock/index.js.map +1 -1
  31. package/build/cjs/extensions/behavior/Autocomplete/types.js.map +1 -1
  32. package/build/cjs/extensions/behavior/SelectionContext/index.d.ts +0 -2
  33. package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
  34. package/build/cjs/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
  35. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +3 -1
  36. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  37. package/build/cjs/extensions/markdown/CodeBlock/handle-paste.d.ts +20 -0
  38. package/build/cjs/extensions/markdown/CodeBlock/handle-paste.js +80 -23
  39. package/build/cjs/extensions/markdown/CodeBlock/handle-paste.js.map +1 -1
  40. package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.d.ts +2 -2
  41. package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
  42. package/build/cjs/extensions/markdown/Heading/HeadingSpecs/index.d.ts +1 -1
  43. package/build/cjs/extensions/markdown/Heading/HeadingSpecs/index.js.map +1 -1
  44. package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.d.ts +1 -1
  45. package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
  46. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.d.ts +1 -1
  47. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
  48. package/build/cjs/extensions/yfm/ImgSize/index.d.ts +0 -1
  49. package/build/cjs/extensions/yfm/ImgSize/index.js.map +1 -1
  50. package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.d.ts +1 -1
  51. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +2 -2
  52. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
  53. package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.d.ts +1 -1
  54. package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
  55. package/build/cjs/extensions/yfm/YfmTable/index.d.ts +0 -2
  56. package/build/cjs/extensions/yfm/YfmTable/index.js.map +1 -1
  57. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -1
  58. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.d.ts +1 -1
  59. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js +3 -4
  60. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js.map +1 -1
  61. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -1
  62. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +0 -1
  63. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -1
  64. package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.d.ts +1 -1
  65. package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
  66. package/build/cjs/i18n/bundle/en.json +2 -1
  67. package/build/cjs/i18n/bundle/index.d.ts +3 -2
  68. package/build/cjs/i18n/bundle/ru.json +2 -1
  69. package/build/cjs/i18n/common/en.json +2 -1
  70. package/build/cjs/i18n/common/index.d.ts +2 -1
  71. package/build/cjs/i18n/common/ru.json +2 -1
  72. package/build/cjs/logger.d.ts +0 -1
  73. package/build/cjs/logger.js +0 -1
  74. package/build/cjs/logger.js.map +1 -1
  75. package/build/cjs/shortcuts/default.js +0 -2
  76. package/build/cjs/shortcuts/default.js.map +1 -1
  77. package/build/cjs/table-utils/commands/removeRow.js +1 -2
  78. package/build/cjs/table-utils/commands/removeRow.js.map +1 -1
  79. package/build/cjs/toolbar/types.d.ts +2 -3
  80. package/build/cjs/toolbar/types.js.map +1 -1
  81. package/build/cjs/types/spec.d.ts +0 -1
  82. package/build/cjs/types/spec.js.map +1 -1
  83. package/build/cjs/utils/ecapeRegexp.d.ts +1 -2
  84. package/build/cjs/utils/ecapeRegexp.js +1 -2
  85. package/build/cjs/utils/ecapeRegexp.js.map +1 -1
  86. package/build/cjs/utils/inputrules.js +2 -2
  87. package/build/cjs/utils/inputrules.js.map +1 -1
  88. package/build/cjs/version.js +1 -1
  89. package/build/cjs/version.js.map +1 -1
  90. package/build/cjs/view/hooks/useFilesGallery/constants.d.ts +5 -0
  91. package/build/cjs/view/hooks/useFilesGallery/constants.js +10 -2
  92. package/build/cjs/view/hooks/useFilesGallery/constants.js.map +1 -1
  93. package/build/cjs/view/hooks/useFilesGallery/helpers.d.ts +8 -0
  94. package/build/cjs/view/hooks/useFilesGallery/helpers.js +28 -0
  95. package/build/cjs/view/hooks/useFilesGallery/helpers.js.map +1 -0
  96. package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.d.ts +0 -1
  97. package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js +19 -22
  98. package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
  99. package/build/esm/bundle/Editor.js.map +1 -1
  100. package/build/esm/bundle/HorizontalDrag.js +3 -3
  101. package/build/esm/bundle/HorizontalDrag.js.map +1 -1
  102. package/build/esm/bundle/settings/index.js +1 -1
  103. package/build/esm/bundle/settings/index.js.map +1 -1
  104. package/build/esm/bundle/toolbar/utils/toolbarsConfigs.js +8 -8
  105. package/build/esm/bundle/toolbar/utils/toolbarsConfigs.js.map +1 -1
  106. package/build/esm/bundle/types.d.ts +8 -11
  107. package/build/esm/bundle/types.js.map +1 -1
  108. package/build/esm/bundle/wysiwyg-preset.d.ts +0 -1
  109. package/build/esm/bundle/wysiwyg-preset.js +1 -1
  110. package/build/esm/bundle/wysiwyg-preset.js.map +1 -1
  111. package/build/esm/core/Editor.js.map +1 -1
  112. package/build/esm/core/ExtensionBuilder.d.ts +0 -2
  113. package/build/esm/core/ExtensionBuilder.js +1 -1
  114. package/build/esm/core/ExtensionBuilder.js.map +1 -1
  115. package/build/esm/core/markdown/MarkdownParser.d.ts +2 -3
  116. package/build/esm/core/markdown/MarkdownParser.js.map +1 -1
  117. package/build/esm/core/types/extension.js.map +1 -1
  118. package/build/esm/core/types/parser.d.ts +3 -2
  119. package/build/esm/core/types/parser.js.map +1 -1
  120. package/build/esm/extensions/additional/GPT/gptExtension/view.js +1 -3
  121. package/build/esm/extensions/additional/GPT/gptExtension/view.js.map +1 -1
  122. package/build/esm/extensions/additional/Mermaid/MermaidSpecs/index.js +0 -1
  123. package/build/esm/extensions/additional/Mermaid/MermaidSpecs/index.js.map +1 -1
  124. package/build/esm/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js +1 -1
  125. package/build/esm/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js.map +1 -1
  126. package/build/esm/extensions/additional/YfmHtmlBlock/YfmHtmlBlockSpecs/index.js.map +1 -1
  127. package/build/esm/extensions/additional/YfmHtmlBlock/index.js.map +1 -1
  128. package/build/esm/extensions/behavior/Autocomplete/types.js.map +1 -1
  129. package/build/esm/extensions/behavior/SelectionContext/index.d.ts +0 -2
  130. package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
  131. package/build/esm/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
  132. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +3 -1
  133. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  134. package/build/esm/extensions/markdown/CodeBlock/handle-paste.d.ts +20 -0
  135. package/build/esm/extensions/markdown/CodeBlock/handle-paste.js +78 -24
  136. package/build/esm/extensions/markdown/CodeBlock/handle-paste.js.map +1 -1
  137. package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.d.ts +2 -2
  138. package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
  139. package/build/esm/extensions/markdown/Heading/HeadingSpecs/index.d.ts +1 -1
  140. package/build/esm/extensions/markdown/Heading/HeadingSpecs/index.js.map +1 -1
  141. package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.d.ts +1 -1
  142. package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
  143. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.d.ts +1 -1
  144. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
  145. package/build/esm/extensions/yfm/ImgSize/index.d.ts +0 -1
  146. package/build/esm/extensions/yfm/ImgSize/index.js.map +1 -1
  147. package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.d.ts +1 -1
  148. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +2 -2
  149. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
  150. package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.d.ts +1 -1
  151. package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
  152. package/build/esm/extensions/yfm/YfmTable/index.d.ts +0 -2
  153. package/build/esm/extensions/yfm/YfmTable/index.js.map +1 -1
  154. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -1
  155. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.d.ts +1 -1
  156. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js +1 -2
  157. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js.map +1 -1
  158. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -1
  159. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +0 -1
  160. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -1
  161. package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.d.ts +1 -1
  162. package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
  163. package/build/esm/i18n/bundle/en.json +2 -1
  164. package/build/esm/i18n/bundle/index.d.ts +3 -2
  165. package/build/esm/i18n/bundle/ru.json +2 -1
  166. package/build/esm/i18n/common/en.json +2 -1
  167. package/build/esm/i18n/common/index.d.ts +2 -1
  168. package/build/esm/i18n/common/ru.json +2 -1
  169. package/build/esm/logger.d.ts +0 -1
  170. package/build/esm/logger.js +0 -1
  171. package/build/esm/logger.js.map +1 -1
  172. package/build/esm/shortcuts/default.js +0 -2
  173. package/build/esm/shortcuts/default.js.map +1 -1
  174. package/build/esm/table-utils/commands/removeRow.js +1 -2
  175. package/build/esm/table-utils/commands/removeRow.js.map +1 -1
  176. package/build/esm/toolbar/types.d.ts +2 -3
  177. package/build/esm/toolbar/types.js.map +1 -1
  178. package/build/esm/types/spec.d.ts +0 -1
  179. package/build/esm/types/spec.js.map +1 -1
  180. package/build/esm/utils/ecapeRegexp.d.ts +1 -2
  181. package/build/esm/utils/ecapeRegexp.js +1 -2
  182. package/build/esm/utils/ecapeRegexp.js.map +1 -1
  183. package/build/esm/utils/inputrules.js +2 -2
  184. package/build/esm/utils/inputrules.js.map +1 -1
  185. package/build/esm/version.js +1 -1
  186. package/build/esm/version.js.map +1 -1
  187. package/build/esm/view/hooks/useFilesGallery/constants.d.ts +5 -0
  188. package/build/esm/view/hooks/useFilesGallery/constants.js +9 -1
  189. package/build/esm/view/hooks/useFilesGallery/constants.js.map +1 -1
  190. package/build/esm/view/hooks/useFilesGallery/helpers.d.ts +8 -0
  191. package/build/esm/view/hooks/useFilesGallery/helpers.js +25 -0
  192. package/build/esm/view/hooks/useFilesGallery/helpers.js.map +1 -0
  193. package/build/esm/view/hooks/useFilesGallery/useFilesGallery.d.ts +0 -1
  194. package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js +19 -21
  195. package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
  196. package/package.json +73 -49
@@ -8,5 +8,6 @@
8
8
  "settings_split-mode-hint": "Разделение редактора на два окна: предпросмотр и редактирование",
9
9
  "split-mode-text": "Предпросмотр",
10
10
  "markup_placeholder": "Добавьте вашу разметку",
11
- "preview_hint": "Предпросмотр"
11
+ "preview_label": "Предпросмотр",
12
+ "settings_label": "Настройки"
12
13
  }
@@ -6,5 +6,6 @@
6
6
  "preview": "Preview",
7
7
  "remove": "Remove",
8
8
  "save": "Save",
9
+ "actions": "Actions",
9
10
  "toolbar_action_disabled": "Incompatible markup element"
10
- }
11
+ }
@@ -1,4 +1,4 @@
1
- export declare const i18n: <G extends "cancel" | "close" | "remove" | "delete" | "edit" | "preview" | "save" | "toolbar_action_disabled", S extends string>(key: G | (string extends S ? S : never), params?: {
1
+ export declare const i18n: <G extends "cancel" | "close" | "remove" | "actions" | "delete" | "edit" | "preview" | "save" | "toolbar_action_disabled", S extends string>(key: G | (string extends S ? S : never), params?: {
2
2
  [key: string]: any;
3
3
  }) => S extends G ? {
4
4
  cancel: string;
@@ -8,5 +8,6 @@ export declare const i18n: <G extends "cancel" | "close" | "remove" | "delete" |
8
8
  preview: string;
9
9
  remove: string;
10
10
  save: string;
11
+ actions: string;
11
12
  toolbar_action_disabled: string;
12
13
  }[G] : string;
@@ -6,5 +6,6 @@
6
6
  "preview": "Предпросмотр",
7
7
  "remove": "Удалить",
8
8
  "save": "Сохранить",
9
+ "actions": "Действия",
9
10
  "toolbar_action_disabled": "Несовместимый элемент разметки"
10
- }
11
+ }
@@ -111,7 +111,6 @@ declare class Logger implements MdEditorLogger.Logger {
111
111
  export declare const logger: Logger;
112
112
  /**
113
113
  * Alias for global singleton logger instance
114
- *
115
114
  * @deprecated
116
115
  */
117
116
  export declare const globalLogger: Logger;
@@ -122,7 +122,6 @@ class Logger {
122
122
  export const logger = new Logger();
123
123
  /**
124
124
  * Alias for global singleton logger instance
125
- *
126
125
  * @deprecated
127
126
  */
128
127
  export const globalLogger = logger;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"../../src","sources":["logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,gBAAgB,EAAC,iCAA8B;AA4DrF,MAAM,OAAO,OAAO;IACP,QAAQ,GAAG,IAAI,gBAAgB,EAA2B,CAAC;IAEpE,GAAG,CAAC,GAAW,EAAE,GAAG,IAAc;QAC9B,MAAM,GAAG,GAAW,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,GAAG,IAAc;QAC/B,MAAM,GAAG,GAAW,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,GAA6B,EAAE,GAAG,IAAc;QAClD,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACzD,MAAM,GAAG,GAAW,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,KAAK,EAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,IAAwB;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,IAAyB;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,IAAuB;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,MAAc;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;QAE3B,MAAM,MAAM,GAA4C;YACpD,CAAC,SAAS,CAAC,EAAE,MAAM;YACnB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;gBACZ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;oBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YAC9E,CAAC;YACD,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;gBACb,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YAChF,CAAC;YACD,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI;gBACd,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;oBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,CAAC,IAAI;gBACP,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,EAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAC,CAAC,CAAC;YACpF,CAAC;YACD,OAAO,CAAC,IAAI;gBACR,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;oBAAE,IAAI,CAAC,OAAO,CAAC,EAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAC,CAAC,CAAC;YACtF,CAAC;YACD,KAAK,CAAC,IAAI;gBACN,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;oBAAE,IAAI,CAAC,KAAK,CAAC,EAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAC,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,CAAC,YAAY;gBACf,OAAO;oBACH,GAAG,IAAI;oBACP,CAAC,SAAS,CAAC,EAAE;wBACT,GAAG,IAAI,CAAC,SAAS,CAAC;wBAClB,GAAG,YAAY;qBAClB;iBACJ,CAAC;YACN,CAAC;YACD,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3B,CAAC;QAEF,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,EAAE,CACE,IAAO,EACP,QAA8C;QAE9C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CACC,IAAO,EACP,QAA8C;QAE9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;CACJ;AAED,0CAA0C;AAE1C,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAoCtB,kBAAkB;AAClB,MAAM,MAAM;IACR,OAAO,GAA0B,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAEvD,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,SAAS,CAAC,WAAoC,EAAE;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,QAAiC;QAC1C,OAAO;YACH,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,IAAI;YACzB,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;YAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,IAAI;YACjC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;SAClC,CAAC;IACN,CAAC;CACJ;AAED,kBAAkB;AAClB,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AACnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC","sourcesContent":["import {type Listener, type Receiver, SafeEventEmitter} from './utils/event-emitter';\n\ntype MsgObj = {\n msg: string;\n [key: string]: unknown;\n};\n\ntype ErrObj = {\n error: any;\n [key: string]: unknown;\n};\n\ntype EventObj = {\n event: string;\n [key: string]: unknown;\n};\n\n// MAJOR: rename Logger2 to Logger (namespace and class)\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace Logger2 {\n export type LogData = MsgObj;\n export type WarnData = MsgObj;\n export type ErrorData = ErrObj;\n export type ActionData = MdEditorLogger.ActionData;\n export type MetricsData = MdEditorLogger.MetricsData;\n export type EventData = EventObj;\n\n export type ReceiverDataMap = {\n log: LogData;\n warn: WarnData;\n error: ErrorData;\n event: EventData;\n action: ActionData;\n metrics: MetricsData;\n };\n\n export interface LogReceiver extends Receiver<ReceiverDataMap> {}\n\n export interface LogEmitter {\n /** Log a regular message */\n log(msg: string, ...data: object[]): void;\n /** Log a warning message */\n warn(msg: string, ...data: object[]): void;\n /** Log an error */\n error(err: string | Error | unknown, ...data: object[]): void;\n /** Log an event triggered in editor. For example, changing mode, pasting, or otherwise */\n event(data: Logger2.EventData): void;\n /** Log the action called in editor and its source (from toolbar, or hotkeys, etc.) */\n action(data: Logger2.ActionData): void;\n /** Log metric data, such as parsing or execution time */\n metrics(data: Logger2.MetricsData): void;\n }\n\n export interface ILogger extends Logger2.LogEmitter, Logger2.LogReceiver {\n /** Create nested logger with bound parameters */\n nested(params: object): ILogger;\n }\n}\n\nexport class Logger2 implements Logger2.ILogger {\n readonly #emitter = new SafeEventEmitter<Logger2.ReceiverDataMap>();\n\n log(msg: string, ...data: object[]): void {\n const obj: object = Object.assign({}, ...data);\n const logData = Object.assign(obj, {msg});\n this.#emitter.emit('log', logData);\n }\n\n warn(msg: string, ...data: object[]): void {\n const obj: object = Object.assign({}, ...data);\n const warnData = Object.assign(obj, {msg});\n this.#emitter.emit('warn', warnData);\n }\n\n error(err: string | Error | unknown, ...data: object[]): void {\n const error = typeof err === 'string' ? Error(err) : err;\n const obj: object = Object.assign({}, ...data);\n const errorData = Object.assign(obj, {error});\n this.#emitter.emit('error', errorData);\n }\n\n action(data: Logger2.ActionData): void {\n this.#emitter.emit('action', data);\n }\n\n metrics(data: Logger2.MetricsData): void {\n this.#emitter.emit('metrics', data);\n }\n\n event(data: Logger2.EventData): void {\n this.#emitter.emit('event', data);\n }\n\n nested(params: object): Logger2.ILogger {\n const self = this;\n const paramsKey = Symbol();\n\n const logger: Logger2.ILogger & {[paramsKey]: object} = {\n [paramsKey]: params,\n log(msg, ...data) {\n if (self.#emitter.countOf('log')) self.log(msg, this[paramsKey], ...data);\n },\n warn(msg, ...data) {\n if (self.#emitter.countOf('warn')) self.warn(msg, this[paramsKey], ...data);\n },\n error(err, ...data) {\n if (self.#emitter.countOf('error')) self.error(err, this[paramsKey], ...data);\n },\n action(data) {\n if (self.#emitter.countOf('action')) self.action({...this[paramsKey], ...data});\n },\n metrics(data) {\n if (self.#emitter.countOf('metrics')) self.metrics({...this[paramsKey], ...data});\n },\n event(data) {\n if (self.#emitter.countOf('event')) self.event({...this[paramsKey], ...data});\n },\n nested(nestedParams) {\n return {\n ...this,\n [paramsKey]: {\n ...this[paramsKey],\n ...nestedParams,\n },\n };\n },\n on: self.on.bind(self),\n off: self.off.bind(self),\n };\n\n return logger;\n }\n\n on<K extends keyof Logger2.ReceiverDataMap>(\n type: K,\n listener: Listener<Logger2.ReceiverDataMap[K]>,\n ): void {\n this.#emitter.on(type, listener);\n }\n\n off<K extends keyof Logger2.ReceiverDataMap>(\n type: K,\n listener: Listener<Logger2.ReceiverDataMap[K]>,\n ): void {\n this.#emitter.off(type, listener);\n }\n}\n\n// MAJOR: remove old logger implementation\n\nconst noop = () => {};\n\ndeclare global {\n /** @deprecated */\n namespace MdEditorLogger {\n /** @deprecated */\n type MetricsData = {\n component: string;\n event: string;\n duration?: number;\n meta?: Record<string, any>;\n [key: string]: any;\n };\n\n /** @deprecated */\n interface ActionData {\n action: string;\n source: string;\n [key: string]: any;\n }\n\n /** @deprecated */\n interface Logger {\n log(...data: any[]): void;\n info(...data: any[]): void;\n error(...data: any[]): void;\n warn(...data: any[]): void;\n metrics(data: MetricsData): void;\n action(data: ActionData): void;\n }\n\n /** @deprecated */\n interface Settings extends Partial<Logger> {}\n }\n}\n\n/** @deprecated */\nclass Logger implements MdEditorLogger.Logger {\n #logger: MdEditorLogger.Logger = this.createLogger({});\n\n get log() {\n return this.#logger.log;\n }\n\n get info() {\n return this.#logger.info;\n }\n\n get error() {\n return this.#logger.error;\n }\n\n get warn() {\n return this.#logger.warn;\n }\n\n get metrics() {\n return this.#logger.metrics;\n }\n\n get action() {\n return this.#logger.action;\n }\n\n setLogger(settings: MdEditorLogger.Settings = {}) {\n this.#logger = this.createLogger(settings);\n }\n\n /**\n * @inner\n *\n * To override the default logger, use setLogger\n */\n createLogger(settings: MdEditorLogger.Settings): MdEditorLogger.Logger {\n return {\n log: settings.log ?? noop,\n info: settings.info ?? noop,\n warn: settings.warn ?? noop,\n error: settings.error ?? noop,\n metrics: settings.metrics ?? noop,\n action: settings.action ?? noop,\n };\n }\n}\n\n/** @deprecated */\nexport const logger = new Logger();\n/**\n * Alias for global singleton logger instance\n *\n * @deprecated\n */\nexport const globalLogger = logger;\n"]}
1
+ {"version":3,"file":"logger.js","sourceRoot":"../../src","sources":["logger.ts"],"names":[],"mappings":"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","sourcesContent":["import {type Listener, type Receiver, SafeEventEmitter} from './utils/event-emitter';\n\ntype MsgObj = {\n msg: string;\n [key: string]: unknown;\n};\n\ntype ErrObj = {\n error: any;\n [key: string]: unknown;\n};\n\ntype EventObj = {\n event: string;\n [key: string]: unknown;\n};\n\n// MAJOR: rename Logger2 to Logger (namespace and class)\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace Logger2 {\n export type LogData = MsgObj;\n export type WarnData = MsgObj;\n export type ErrorData = ErrObj;\n export type ActionData = MdEditorLogger.ActionData;\n export type MetricsData = MdEditorLogger.MetricsData;\n export type EventData = EventObj;\n\n export type ReceiverDataMap = {\n log: LogData;\n warn: WarnData;\n error: ErrorData;\n event: EventData;\n action: ActionData;\n metrics: MetricsData;\n };\n\n export interface LogReceiver extends Receiver<ReceiverDataMap> {}\n\n export interface LogEmitter {\n /** Log a regular message */\n log(msg: string, ...data: object[]): void;\n /** Log a warning message */\n warn(msg: string, ...data: object[]): void;\n /** Log an error */\n error(err: string | Error | unknown, ...data: object[]): void;\n /** Log an event triggered in editor. For example, changing mode, pasting, or otherwise */\n event(data: Logger2.EventData): void;\n /** Log the action called in editor and its source (from toolbar, or hotkeys, etc.) */\n action(data: Logger2.ActionData): void;\n /** Log metric data, such as parsing or execution time */\n metrics(data: Logger2.MetricsData): void;\n }\n\n export interface ILogger extends Logger2.LogEmitter, Logger2.LogReceiver {\n /** Create nested logger with bound parameters */\n nested(params: object): ILogger;\n }\n}\n\nexport class Logger2 implements Logger2.ILogger {\n readonly #emitter = new SafeEventEmitter<Logger2.ReceiverDataMap>();\n\n log(msg: string, ...data: object[]): void {\n const obj: object = Object.assign({}, ...data);\n const logData = Object.assign(obj, {msg});\n this.#emitter.emit('log', logData);\n }\n\n warn(msg: string, ...data: object[]): void {\n const obj: object = Object.assign({}, ...data);\n const warnData = Object.assign(obj, {msg});\n this.#emitter.emit('warn', warnData);\n }\n\n error(err: string | Error | unknown, ...data: object[]): void {\n const error = typeof err === 'string' ? Error(err) : err;\n const obj: object = Object.assign({}, ...data);\n const errorData = Object.assign(obj, {error});\n this.#emitter.emit('error', errorData);\n }\n\n action(data: Logger2.ActionData): void {\n this.#emitter.emit('action', data);\n }\n\n metrics(data: Logger2.MetricsData): void {\n this.#emitter.emit('metrics', data);\n }\n\n event(data: Logger2.EventData): void {\n this.#emitter.emit('event', data);\n }\n\n nested(params: object): Logger2.ILogger {\n const self = this;\n const paramsKey = Symbol();\n\n const logger: Logger2.ILogger & {[paramsKey]: object} = {\n [paramsKey]: params,\n log(msg, ...data) {\n if (self.#emitter.countOf('log')) self.log(msg, this[paramsKey], ...data);\n },\n warn(msg, ...data) {\n if (self.#emitter.countOf('warn')) self.warn(msg, this[paramsKey], ...data);\n },\n error(err, ...data) {\n if (self.#emitter.countOf('error')) self.error(err, this[paramsKey], ...data);\n },\n action(data) {\n if (self.#emitter.countOf('action')) self.action({...this[paramsKey], ...data});\n },\n metrics(data) {\n if (self.#emitter.countOf('metrics')) self.metrics({...this[paramsKey], ...data});\n },\n event(data) {\n if (self.#emitter.countOf('event')) self.event({...this[paramsKey], ...data});\n },\n nested(nestedParams) {\n return {\n ...this,\n [paramsKey]: {\n ...this[paramsKey],\n ...nestedParams,\n },\n };\n },\n on: self.on.bind(self),\n off: self.off.bind(self),\n };\n\n return logger;\n }\n\n on<K extends keyof Logger2.ReceiverDataMap>(\n type: K,\n listener: Listener<Logger2.ReceiverDataMap[K]>,\n ): void {\n this.#emitter.on(type, listener);\n }\n\n off<K extends keyof Logger2.ReceiverDataMap>(\n type: K,\n listener: Listener<Logger2.ReceiverDataMap[K]>,\n ): void {\n this.#emitter.off(type, listener);\n }\n}\n\n// MAJOR: remove old logger implementation\n\nconst noop = () => {};\n\ndeclare global {\n /** @deprecated */\n namespace MdEditorLogger {\n /** @deprecated */\n type MetricsData = {\n component: string;\n event: string;\n duration?: number;\n meta?: Record<string, any>;\n [key: string]: any;\n };\n\n /** @deprecated */\n interface ActionData {\n action: string;\n source: string;\n [key: string]: any;\n }\n\n /** @deprecated */\n interface Logger {\n log(...data: any[]): void;\n info(...data: any[]): void;\n error(...data: any[]): void;\n warn(...data: any[]): void;\n metrics(data: MetricsData): void;\n action(data: ActionData): void;\n }\n\n /** @deprecated */\n interface Settings extends Partial<Logger> {}\n }\n}\n\n/** @deprecated */\nclass Logger implements MdEditorLogger.Logger {\n #logger: MdEditorLogger.Logger = this.createLogger({});\n\n get log() {\n return this.#logger.log;\n }\n\n get info() {\n return this.#logger.info;\n }\n\n get error() {\n return this.#logger.error;\n }\n\n get warn() {\n return this.#logger.warn;\n }\n\n get metrics() {\n return this.#logger.metrics;\n }\n\n get action() {\n return this.#logger.action;\n }\n\n setLogger(settings: MdEditorLogger.Settings = {}) {\n this.#logger = this.createLogger(settings);\n }\n\n /**\n * @inner\n *\n * To override the default logger, use setLogger\n */\n createLogger(settings: MdEditorLogger.Settings): MdEditorLogger.Logger {\n return {\n log: settings.log ?? noop,\n info: settings.info ?? noop,\n warn: settings.warn ?? noop,\n error: settings.error ?? noop,\n metrics: settings.metrics ?? noop,\n action: settings.action ?? noop,\n };\n }\n}\n\n/** @deprecated */\nexport const logger = new Logger();\n/**\n * Alias for global singleton logger instance\n * @deprecated\n */\nexport const globalLogger = logger;\n"]}
@@ -1,6 +1,5 @@
1
1
  import { Action as A, Key as K, ModKey as MK } from "./const.js";
2
2
  import { formatter } from "./formatter.js";
3
- /* eslint-disable */
4
3
  formatter
5
4
  .set(A.__debug, [MK.Mod, MK.Option, ']'])
6
5
  .set(A.Cancel, [K.Esc])
@@ -29,5 +28,4 @@ formatter
29
28
  .set(A.CodeBlock, { pc: [MK.Ctrl, MK.Shift, 'e'], mac: [MK.Cmd, MK.Option, 'e'] })
30
29
  .set(A.Cut, { pc: [MK.Ctrl, MK.Shift, '7'], mac: [MK.Cmd, MK.Option, '7'] })
31
30
  .set(A.Note, { pc: [MK.Ctrl, MK.Shift, '8'], mac: [MK.Cmd, MK.Option, '8'] });
32
- /* eslint-enable */
33
31
  //# sourceMappingURL=default.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"default.js","sourceRoot":"../../../src","sources":["shortcuts/default.ts"],"names":[],"mappings":"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","sourcesContent":["import {Action as A, Key as K, ModKey as MK} from './const';\nimport {formatter} from './formatter';\n\n/* eslint-disable */\nformatter\n .set(A.__debug, [MK.Mod, MK.Option, ']'])\n\n .set(A.Cancel, [K.Esc])\n .set(A.Submit, [MK.Mod, K.Enter])\n\n .set(A.Undo, [MK.Mod, 'z'])\n .set(A.Redo, [MK.Mod, MK.Shift, 'z'])\n\n .set(A.Bold, [MK.Mod, 'b'])\n .set(A.Italic, [MK.Mod, 'i'])\n .set(A.Underline, [MK.Mod, 'u'])\n .set(A.Strike, [MK.Mod, MK.Shift, 's'])\n .set(A.Code, [MK.Mod, 'e'])\n .set(A.Link, [MK.Mod, 'k'])\n\n .set(A.Text, {pc: [MK.Ctrl, MK.Shift, '0'], mac: [MK.Cmd, MK.Option, '0']})\n .set(A.Heading1, {pc: [MK.Ctrl, MK.Shift, '1'], mac: [MK.Cmd, MK.Option, '1']})\n .set(A.Heading2, {pc: [MK.Ctrl, MK.Shift, '2'], mac: [MK.Cmd, MK.Option, '2']})\n .set(A.Heading3, {pc: [MK.Ctrl, MK.Shift, '3'], mac: [MK.Cmd, MK.Option, '3']})\n .set(A.Heading4, {pc: [MK.Ctrl, MK.Shift, '4'], mac: [MK.Cmd, MK.Option, '4']})\n .set(A.Heading5, {pc: [MK.Ctrl, MK.Shift, '5'], mac: [MK.Cmd, MK.Option, '5']})\n .set(A.Heading6, {pc: [MK.Ctrl, MK.Shift, '6'], mac: [MK.Cmd, MK.Option, '6']})\n\n .set(A.EmptyRow, {pc: [MK.Ctrl, MK.Shift, K.Enter], mac: [MK.Cmd, MK.Shift, K.Enter]})\n\n .set(A.BulletList, [MK.Mod, MK.Shift, 'l'])\n .set(A.OrderedList, [MK.Mod, MK.Shift, 'm'])\n\n .set(A.SinkListItem, [MK.Tab])\n .set(A.LiftListItem, [MK.Shift, MK.Tab])\n\n .set(A.Quote, [MK.Mod, MK.Shift, '.'])\n .set(A.CodeBlock, {pc: [MK.Ctrl, MK.Shift, 'e'], mac: [MK.Cmd, MK.Option, 'e']})\n\n .set(A.Cut, {pc: [MK.Ctrl, MK.Shift, '7'], mac: [MK.Cmd, MK.Option, '7']})\n .set(A.Note, {pc: [MK.Ctrl, MK.Shift, '8'], mac: [MK.Cmd, MK.Option, '8']});\n/* eslint-enable */\n"]}
1
+ {"version":3,"file":"default.js","sourceRoot":"../../../src","sources":["shortcuts/default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,IAAI,EAAE,EAAC,mBAAgB;AAC5D,OAAO,EAAC,SAAS,EAAC,uBAAoB;AAEtC,SAAS;KACJ,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAExC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACtB,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;KAEhC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAC1B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KAEpC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAC1B,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAC5B,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAC/B,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAC1B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAE1B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC;KAC1E,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC;KAC9E,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC;KAC9E,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC;KAC9E,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC;KAC9E,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC;KAC9E,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC;KAE9E,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC;KAErF,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KAC1C,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KAE3C,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;KAC7B,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;KAEvC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KACrC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC;KAE/E,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC;KACzE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAC,CAAC,CAAC","sourcesContent":["import {Action as A, Key as K, ModKey as MK} from './const';\nimport {formatter} from './formatter';\n\nformatter\n .set(A.__debug, [MK.Mod, MK.Option, ']'])\n\n .set(A.Cancel, [K.Esc])\n .set(A.Submit, [MK.Mod, K.Enter])\n\n .set(A.Undo, [MK.Mod, 'z'])\n .set(A.Redo, [MK.Mod, MK.Shift, 'z'])\n\n .set(A.Bold, [MK.Mod, 'b'])\n .set(A.Italic, [MK.Mod, 'i'])\n .set(A.Underline, [MK.Mod, 'u'])\n .set(A.Strike, [MK.Mod, MK.Shift, 's'])\n .set(A.Code, [MK.Mod, 'e'])\n .set(A.Link, [MK.Mod, 'k'])\n\n .set(A.Text, {pc: [MK.Ctrl, MK.Shift, '0'], mac: [MK.Cmd, MK.Option, '0']})\n .set(A.Heading1, {pc: [MK.Ctrl, MK.Shift, '1'], mac: [MK.Cmd, MK.Option, '1']})\n .set(A.Heading2, {pc: [MK.Ctrl, MK.Shift, '2'], mac: [MK.Cmd, MK.Option, '2']})\n .set(A.Heading3, {pc: [MK.Ctrl, MK.Shift, '3'], mac: [MK.Cmd, MK.Option, '3']})\n .set(A.Heading4, {pc: [MK.Ctrl, MK.Shift, '4'], mac: [MK.Cmd, MK.Option, '4']})\n .set(A.Heading5, {pc: [MK.Ctrl, MK.Shift, '5'], mac: [MK.Cmd, MK.Option, '5']})\n .set(A.Heading6, {pc: [MK.Ctrl, MK.Shift, '6'], mac: [MK.Cmd, MK.Option, '6']})\n\n .set(A.EmptyRow, {pc: [MK.Ctrl, MK.Shift, K.Enter], mac: [MK.Cmd, MK.Shift, K.Enter]})\n\n .set(A.BulletList, [MK.Mod, MK.Shift, 'l'])\n .set(A.OrderedList, [MK.Mod, MK.Shift, 'm'])\n\n .set(A.SinkListItem, [MK.Tab])\n .set(A.LiftListItem, [MK.Shift, MK.Tab])\n\n .set(A.Quote, [MK.Mod, MK.Shift, '.'])\n .set(A.CodeBlock, {pc: [MK.Ctrl, MK.Shift, 'e'], mac: [MK.Cmd, MK.Option, 'e']})\n\n .set(A.Cut, {pc: [MK.Ctrl, MK.Shift, '7'], mac: [MK.Cmd, MK.Option, '7']})\n .set(A.Note, {pc: [MK.Ctrl, MK.Shift, '8'], mac: [MK.Cmd, MK.Option, '8']});\n"]}
@@ -8,8 +8,7 @@ export const removeRow = (state, dispatch, _, attrs = {}) => {
8
8
  const { tablePos, rowNumber } = attrs;
9
9
  if (tablePos === undefined || rowNumber === undefined)
10
10
  return false;
11
- const tableNode = findParentNodeClosestToPos(state.doc.resolve(tablePos + 1), isTableNode)
12
- ?.node;
11
+ const tableNode = findParentNodeClosestToPos(state.doc.resolve(tablePos + 1), isTableNode)?.node;
13
12
  if (!tableNode)
14
13
  return false;
15
14
  const tableDesc = TableDesc.create(tableNode);
@@ -1 +1 @@
1
- {"version":3,"file":"removeRow.js","sourceRoot":"../../../../src","sources":["table-utils/commands/removeRow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAE3C,oCAAoC;AACpC,OAAO,EAAC,0BAA0B,EAAC,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAC,uBAAuB,EAAC,4BAAmB;AACnD,OAAO,EAAC,SAAS,EAAC,yBAAsB;AACxC,OAAO,EAAC,WAAW,EAAC,oBAAiB;AAErC,MAAM,CAAC,MAAM,SAAS,GAAY,CAC9B,KAAK,EACL,QAAQ,EACR,CAAC,EACD,QAAiD,EAAE,EACrD,EAAE;IACA,MAAM,EAAC,QAAQ,EAAE,SAAS,EAAC,GAAG,KAAK,CAAC;IAEpC,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEpE,MAAM,SAAS,GAAG,0BAA0B,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC;QACtF,EAAE,IAAI,CAAC;IAEX,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAElD,IAAI,QAAQ,EAAE,CAAC;QACX,IAAI,EAAC,IAAI,EAAE,EAAE,EAAC,GAAG,SAAS,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,IAAI,QAAQ,CAAC;QACjB,EAAE,IAAI,QAAQ,CAAC;QACf,QAAQ,CACJ,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE;YACjF,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,IAAI,EAAE,SAAS,CAAC,IAAI;SACvB,CAAC,CACL,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC","sourcesContent":["import {Fragment} from 'prosemirror-model';\nimport type {Command} from 'prosemirror-state';\n// @ts-ignore // TODO: fix cjs build\nimport {findParentNodeClosestToPos} from 'prosemirror-utils';\n\nimport {trackTransactionMetrics} from '../../core';\nimport {TableDesc} from '../table-desc';\nimport {isTableNode} from '../utils';\n\nexport const removeRow: Command = (\n state,\n dispatch,\n _,\n attrs: {tablePos?: number; rowNumber?: number} = {},\n) => {\n const {tablePos, rowNumber} = attrs;\n\n if (tablePos === undefined || rowNumber === undefined) return false;\n\n const tableNode = findParentNodeClosestToPos(state.doc.resolve(tablePos + 1), isTableNode)\n ?.node;\n\n if (!tableNode) return false;\n\n const tableDesc = TableDesc.create(tableNode);\n if (!tableDesc || rowNumber >= tableDesc.rows) return false;\n if (!tableDesc.isSafeRow(rowNumber)) return false;\n\n if (dispatch) {\n let {from, to} = tableDesc.getRelativePosForRow(rowNumber);\n from += tablePos;\n to += tablePos;\n dispatch(\n trackTransactionMetrics(state.tr.replaceWith(from, to, Fragment.empty), 'removeRow', {\n rows: tableDesc.rows,\n cols: tableDesc.cols,\n }),\n );\n }\n\n return true;\n};\n"]}
1
+ {"version":3,"file":"removeRow.js","sourceRoot":"../../../../src","sources":["table-utils/commands/removeRow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAE3C,oCAAoC;AACpC,OAAO,EAAC,0BAA0B,EAAC,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAC,uBAAuB,EAAC,4BAAmB;AACnD,OAAO,EAAC,SAAS,EAAC,yBAAsB;AACxC,OAAO,EAAC,WAAW,EAAC,oBAAiB;AAErC,MAAM,CAAC,MAAM,SAAS,GAAY,CAC9B,KAAK,EACL,QAAQ,EACR,CAAC,EACD,QAAiD,EAAE,EACrD,EAAE;IACA,MAAM,EAAC,QAAQ,EAAE,SAAS,EAAC,GAAG,KAAK,CAAC;IAEpC,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEpE,MAAM,SAAS,GAAG,0BAA0B,CACxC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,EAC/B,WAAW,CACd,EAAE,IAAI,CAAC;IAER,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAElD,IAAI,QAAQ,EAAE,CAAC;QACX,IAAI,EAAC,IAAI,EAAE,EAAE,EAAC,GAAG,SAAS,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,IAAI,QAAQ,CAAC;QACjB,EAAE,IAAI,QAAQ,CAAC;QACf,QAAQ,CACJ,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE;YACjF,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,IAAI,EAAE,SAAS,CAAC,IAAI;SACvB,CAAC,CACL,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC","sourcesContent":["import {Fragment} from 'prosemirror-model';\nimport type {Command} from 'prosemirror-state';\n// @ts-ignore // TODO: fix cjs build\nimport {findParentNodeClosestToPos} from 'prosemirror-utils';\n\nimport {trackTransactionMetrics} from '../../core';\nimport {TableDesc} from '../table-desc';\nimport {isTableNode} from '../utils';\n\nexport const removeRow: Command = (\n state,\n dispatch,\n _,\n attrs: {tablePos?: number; rowNumber?: number} = {},\n) => {\n const {tablePos, rowNumber} = attrs;\n\n if (tablePos === undefined || rowNumber === undefined) return false;\n\n const tableNode = findParentNodeClosestToPos(\n state.doc.resolve(tablePos + 1),\n isTableNode,\n )?.node;\n\n if (!tableNode) return false;\n\n const tableDesc = TableDesc.create(tableNode);\n if (!tableDesc || rowNumber >= tableDesc.rows) return false;\n if (!tableDesc.isSafeRow(rowNumber)) return false;\n\n if (dispatch) {\n let {from, to} = tableDesc.getRelativePosForRow(rowNumber);\n from += tablePos;\n to += tablePos;\n dispatch(\n trackTransactionMetrics(state.tr.replaceWith(from, to, Fragment.empty), 'removeRow', {\n rows: tableDesc.rows,\n cols: tableDesc.cols,\n }),\n );\n }\n\n return true;\n};\n"]}
@@ -34,7 +34,6 @@ export type ToolbarItemData<E> = QAProps & {
34
34
  * `true` – show default hint;
35
35
  *
36
36
  * `string` or `() => string` – show hint with custom message.
37
- *
38
37
  * @default true
39
38
  */
40
39
  hintWhenDisabled?: boolean | string | (() => string);
@@ -96,7 +95,7 @@ export type ToolbarListButtonData<E> = {
96
95
  };
97
96
  /**
98
97
  * @deprecated Use ReactComponent type instead
99
- * */
98
+ */
100
99
  export type ToolbarReactNodeData = {
101
100
  id: string;
102
101
  type: ToolbarDataType.ReactNode;
@@ -105,7 +104,7 @@ export type ToolbarReactNodeData = {
105
104
  };
106
105
  /**
107
106
  * @deprecated Use ReactComponent type instead
108
- * */
107
+ */
109
108
  export type ToolbarReactNodeFnData<E> = {
110
109
  id: string;
111
110
  type: ToolbarDataType.ReactNodeFn;
@@ -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 /**\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 *\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 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":"AA+CA,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 /**\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 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"]}
@@ -10,7 +10,6 @@ declare module 'prosemirror-model' {
10
10
  escapeText?: boolean;
11
11
  /**
12
12
  * Set `false` to disable gapcursor selection inside this node.
13
- *
14
13
  * @default true
15
14
  */
16
15
  gapcursor?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"../../../src","sources":["types/spec.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AAEpD,OAAO,EAAE,CAAC","sourcesContent":["////////////////////////////////////////////////////\n/// ///\n/// This is a place to extend spec types ///\n/// ///\n////////////////////////////////////////////////////\n\nexport {};\n\ndeclare module 'prosemirror-model' {\n interface NodeSpec {\n /**\n * Determines whether this node is part of complex block,\n * e.g. yfm-cut, yfm-note, tables, etc...\n * And indicates its own role\n */\n complex?: 'root' | 'inner' | 'leaf';\n escapeText?: boolean;\n\n /**\n * Set `false` to disable gapcursor selection inside this node.\n *\n * @default true\n */\n gapcursor?: boolean;\n }\n\n interface MarkSpec {\n /**\n * Can be used to indicate that this mark contains code.\n */\n code?: boolean;\n }\n}\n"]}
1
+ {"version":3,"file":"spec.js","sourceRoot":"../../../src","sources":["types/spec.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AAEpD,OAAO,EAAE,CAAC","sourcesContent":["////////////////////////////////////////////////////\n/// ///\n/// This is a place to extend spec types ///\n/// ///\n////////////////////////////////////////////////////\n\nexport {};\n\ndeclare module 'prosemirror-model' {\n interface NodeSpec {\n /**\n * Determines whether this node is part of complex block,\n * e.g. yfm-cut, yfm-note, tables, etc...\n * And indicates its own role\n */\n complex?: 'root' | 'inner' | 'leaf';\n escapeText?: boolean;\n\n /**\n * Set `false` to disable gapcursor selection inside this node.\n * @default true\n */\n gapcursor?: boolean;\n }\n\n interface MarkSpec {\n /**\n * Can be used to indicate that this mark contains code.\n */\n code?: boolean;\n }\n}\n"]}
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
3
3
  * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
4
- *
5
4
  * @category String
6
- * @param {string} [src=''] The string to escape.
5
+ * @param {string} [src] The string to escape.
7
6
  * @returns {string} Returns the escaped string.
8
7
  * @see escape, escapeRegExp, unescape
9
8
  * @example
@@ -7,9 +7,8 @@ const reHasRegExpChar = RegExp(reRegExpChar.source);
7
7
  /**
8
8
  * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
9
9
  * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
10
- *
11
10
  * @category String
12
- * @param {string} [src=''] The string to escape.
11
+ * @param {string} [src] The string to escape.
13
12
  * @returns {string} Returns the escaped string.
14
13
  * @see escape, escapeRegExp, unescape
15
14
  * @example
@@ -1 +1 @@
1
- {"version":3,"file":"ecapeRegexp.js","sourceRoot":"../../../src","sources":["utils/ecapeRegexp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAC3C,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACpC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;AAC5F,CAAC","sourcesContent":["/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nconst reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\nconst reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @category String\n * @param {string} [src=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @see escape, escapeRegExp, unescape\n * @example\n *\n * escapeRegExp('[lodash](https://lodash.com/)')\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nexport function escapeRegExp(src: string) {\n return src && reHasRegExpChar.test(src) ? src.replace(reRegExpChar, '\\\\$&') : src || '';\n}\n"]}
1
+ {"version":3,"file":"ecapeRegexp.js","sourceRoot":"../../../src","sources":["utils/ecapeRegexp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAC3C,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACpC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;AAC5F,CAAC","sourcesContent":["/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nconst reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\nconst reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n * @category String\n * @param {string} [src] The string to escape.\n * @returns {string} Returns the escaped string.\n * @see escape, escapeRegExp, unescape\n * @example\n *\n * escapeRegExp('[lodash](https://lodash.com/)')\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nexport function escapeRegExp(src: string) {\n return src && reHasRegExpChar.test(src) ? src.replace(reRegExpChar, '\\\\$&') : src || '';\n}\n"]}
@@ -99,8 +99,8 @@ export function nodeInputRule(regexp, fragment, selectionOffset = 0) {
99
99
  const { tr } = state;
100
100
  if (matchStr) {
101
101
  tr.replaceWith(start - 1, end, isFunction(fragment)
102
- ? fragment(matchStr) ?? Fragment.empty
103
- : fragment ?? Fragment.empty).setSelection(new TextSelection(tr.doc.resolve(start + selectionOffset)));
102
+ ? (fragment(matchStr) ?? Fragment.empty)
103
+ : (fragment ?? Fragment.empty)).setSelection(new TextSelection(tr.doc.resolve(start + selectionOffset)));
104
104
  }
105
105
  return tr;
106
106
  });
@@ -1 +1 @@
1
- {"version":3,"file":"inputrules.js","sourceRoot":"../../../src","sources":["utils/inputrules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,QAAQ,EAAsC,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAmB,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAElE,6DAA6D;AAC7D,OAAO,EAAC,KAAK,EAAC,oCAAkC;AAChD,OAAO,EAAC,QAAQ,EAAC,wCAAsC;AACvD,OAAO,EAAC,UAAU,EAAC,qBAAmB;AACtC,OAAO,EAAC,YAAY,EAAC,mBAAwB;AAE7C,MAAM,UAAU,WAAW,CACvB,KAAkB,EAClB,MAAwB,EACxB,KAAa,EACb,GAAW;IAEX,mDAAmD;IACnD,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAClE,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,KAAkB,EAClB,MAAwB,EACxB,KAAa,EACb,IAAY;IAEZ,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC;AAED,OAAO,EAAC,sBAAsB,EAAE,iBAAiB,EAAC,0BAAuB;AAEzE,SAAS,eAAe,CAAC,KAAa,EAAE,GAAW,EAAE,KAAkB;IACnE,IAAI,KAAK,GAA+C,EAAE,CAAC;IAE3D,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC7C,KAAK,GAAG;YACJ,GAAG,KAAK;YACR,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACzB,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ;gBACxB,IAAI;aACP,CAAC,CAAC;SACN,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IAC/B,6CAA6C;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,aAAa,CACzB,IAAoE,EACpE,QAAkB,EAClB,QAAkD;IAElD,IAAI,MAAM,CAAC;IACX,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,IAAI,CAAC;IAClB,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,GAAG,IAAI,MAAM,CACf,MAAM,IAAI,GAAG;YACT,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,aAAa,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;YAC1D,MAAM,KAAK,OAAO,CACzB,CAAC;IACN,CAAC;IACD,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtD,qFAAqF;QACrF,IAAK,KAA0B,CAAC,KAAM,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,EAAE,GAAG,KAAyB,CAAC;YACrC,IAAI,EAAE,CAAC,KAAM,CAAC,EAAE,CAAC,KAAM,GAAG,CAAC,CAAC,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;QACtD,CAAC;QAED,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvD,MAAM,KAAK,GAAG,QAAQ,YAAY,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxE,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;QACnB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAI,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACX,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAE5C,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACxD,MAAM,aAAa,GAAG,YAAY;iBAC7B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;iBACnD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC;YAE7C,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,IAAI,OAAO,GAAG,QAAQ,EAAE,CAAC;gBACrB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjC,CAAC;YACD,IAAI,SAAS,GAAG,UAAU,EAAE,CAAC;gBACzB,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACrC,CAAC;YACD,SAAS,GAAG,UAAU,CAAC;YACvB,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1C,CAAC;QAED,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACvD,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AAID,MAAM,UAAU,aAAa,CACzB,MAAc,EACd,QAA0F,EAC1F,eAAe,GAAG,CAAC;IAEnB,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtD,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvD,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACzB,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;QAEnB,IAAI,QAAQ,EAAE,CAAC;YACX,EAAE,CAAC,WAAW,CACV,KAAK,GAAG,CAAC,EACT,GAAG,EACH,UAAU,CAAC,QAAQ,CAAC;gBAChB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK;gBACtC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CACnC,CAAC,YAAY,CAAC,IAAI,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,mBAAmB,CAC/B,MAAc,EACd,QAAyD;IAEzD,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtD,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvD,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACzB,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;QAEnB,IAAI,QAAQ,EAAE,CAAC;YACX,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CACzE,IAAI,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CACzC,CAAC;QACN,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import {InputRule} from 'prosemirror-inputrules';\nimport {Fragment, type Mark, type MarkType, type Node} from 'prosemirror-model';\nimport {type EditorState, TextSelection} from 'prosemirror-state';\n\n// TODO: remove explicit import from base and code extensions\nimport {pType} from 'src/extensions/base/specs';\nimport {codeType} from 'src/extensions/markdown/specs';\nimport {isFunction} from 'src/lodash';\nimport {isMarkActive} from 'src/utils/marks';\n\nexport function hasCodeMark(\n state: EditorState,\n _match: RegExpMatchArray,\n start: number,\n end: number,\n): boolean {\n // TODO: remove explicit import from code extension\n const codeMarkType = codeType(state.schema);\n if (isMarkActive(state, codeMarkType)) return true;\n if (state.doc.rangeHasMark(start, end, codeMarkType)) return true;\n return false;\n}\n\nexport function inDefaultTextblock(\n state: EditorState,\n _match: RegExpMatchArray,\n start: number,\n _end: number,\n): boolean {\n return state.doc.resolve(start).parent.type === pType(state.schema);\n}\n\nexport {textblockTypeInputRule, wrappingInputRule} from './rulebuilders';\n\nfunction getMarksBetween(start: number, end: number, state: EditorState) {\n let marks: {start: number; end: number; mark: Mark}[] = [];\n\n state.doc.nodesBetween(start, end, (node, pos) => {\n marks = [\n ...marks,\n ...node.marks.map((mark) => ({\n start: pos,\n end: pos + node.nodeSize,\n mark,\n })),\n ];\n });\n\n return marks;\n}\n\nfunction escapeRegex(string: string) {\n // eslint-disable-next-line no-useless-escape\n return string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\n// TODO: link has a custom input rule handler, think about generalizing\nexport function markInputRule(\n rule: RegExp | {open: string; close: string; ignoreBetween?: string},\n markType: MarkType,\n getAttrs?: (match: any) => Record<string, unknown>,\n): InputRule {\n let regexp;\n if (rule instanceof RegExp) {\n regexp = rule;\n } else {\n const open = escapeRegex(rule.open);\n const close = escapeRegex(rule.close);\n const ignoreBetween = escapeRegex(rule.ignoreBetween || '');\n regexp = new RegExp(\n `(?:${open})` +\n (ignoreBetween ? `([^\\\\s${ignoreBetween}]+)` : `([\\\\S]+)`) +\n `(?:${close})\\\\s$`,\n );\n }\n return new InputRule(regexp, (state, match, start, end) => {\n // handle the rule only if is start of line or there is a space before \"open\" symbols\n if ((match as RegExpMatchArray).index! > 0) {\n const re = match as RegExpMatchArray;\n if (re.input![re.index! - 1] !== ' ') return null;\n }\n\n if (hasCodeMark(state, match, start, end)) return null;\n\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n const {tr} = state;\n const m = match.length - 1;\n let markEnd = end;\n let markStart = start;\n\n if (match[m]) {\n const matchStart = start + match[0].indexOf(match[m - 1]);\n const matchEnd = matchStart + match[m - 1].length - 1;\n const textStart = matchStart + match[m - 1].lastIndexOf(match[m]);\n const textEnd = textStart + match[m].length;\n\n const marksBetween = getMarksBetween(start, end, state);\n const excludedMarks = marksBetween\n .filter((item) => item.mark.type.excludes(markType))\n .filter((item) => item.end > matchStart);\n\n if (excludedMarks.length) {\n return null;\n }\n\n if (textEnd < matchEnd) {\n tr.delete(textEnd, matchEnd);\n }\n if (textStart > matchStart) {\n tr.delete(matchStart, textStart);\n }\n markStart = matchStart;\n markEnd = markStart + match[m].length;\n }\n\n tr.addMark(markStart, markEnd, markType.create(attrs));\n tr.removeStoredMark(markType);\n return tr;\n });\n}\n\ntype NodeInputRuleReplaceFragment = Node | Fragment | readonly Node[] | null | undefined;\n\nexport function nodeInputRule(\n regexp: RegExp,\n fragment: NodeInputRuleReplaceFragment | ((match: string) => NodeInputRuleReplaceFragment),\n selectionOffset = 0,\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n if (hasCodeMark(state, match, start, end)) return null;\n\n const [matchStr] = match;\n const {tr} = state;\n\n if (matchStr) {\n tr.replaceWith(\n start - 1,\n end,\n isFunction(fragment)\n ? fragment(matchStr) ?? Fragment.empty\n : fragment ?? Fragment.empty,\n ).setSelection(new TextSelection(tr.doc.resolve(start + selectionOffset)));\n }\n\n return tr;\n });\n}\n\nexport function inlineNodeInputRule(\n regexp: RegExp,\n fragment: (match: string) => NodeInputRuleReplaceFragment,\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n if (hasCodeMark(state, match, start, end)) return null;\n\n const [matchStr] = match;\n const {tr} = state;\n\n if (matchStr) {\n tr.replaceWith(start, end, fragment(matchStr) ?? Fragment.empty).setSelection(\n new TextSelection(tr.doc.resolve(end)),\n );\n }\n\n return tr;\n });\n}\n"]}
1
+ {"version":3,"file":"inputrules.js","sourceRoot":"../../../src","sources":["utils/inputrules.ts"],"names":[],"mappings":"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","sourcesContent":["import {InputRule} from 'prosemirror-inputrules';\nimport {Fragment, type Mark, type MarkType, type Node} from 'prosemirror-model';\nimport {type EditorState, TextSelection} from 'prosemirror-state';\n\n// TODO: remove explicit import from base and code extensions\nimport {pType} from 'src/extensions/base/specs';\nimport {codeType} from 'src/extensions/markdown/specs';\nimport {isFunction} from 'src/lodash';\nimport {isMarkActive} from 'src/utils/marks';\n\nexport function hasCodeMark(\n state: EditorState,\n _match: RegExpMatchArray,\n start: number,\n end: number,\n): boolean {\n // TODO: remove explicit import from code extension\n const codeMarkType = codeType(state.schema);\n if (isMarkActive(state, codeMarkType)) return true;\n if (state.doc.rangeHasMark(start, end, codeMarkType)) return true;\n return false;\n}\n\nexport function inDefaultTextblock(\n state: EditorState,\n _match: RegExpMatchArray,\n start: number,\n _end: number,\n): boolean {\n return state.doc.resolve(start).parent.type === pType(state.schema);\n}\n\nexport {textblockTypeInputRule, wrappingInputRule} from './rulebuilders';\n\nfunction getMarksBetween(start: number, end: number, state: EditorState) {\n let marks: {start: number; end: number; mark: Mark}[] = [];\n\n state.doc.nodesBetween(start, end, (node, pos) => {\n marks = [\n ...marks,\n ...node.marks.map((mark) => ({\n start: pos,\n end: pos + node.nodeSize,\n mark,\n })),\n ];\n });\n\n return marks;\n}\n\nfunction escapeRegex(string: string) {\n // eslint-disable-next-line no-useless-escape\n return string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\n// TODO: link has a custom input rule handler, think about generalizing\nexport function markInputRule(\n rule: RegExp | {open: string; close: string; ignoreBetween?: string},\n markType: MarkType,\n getAttrs?: (match: any) => Record<string, unknown>,\n): InputRule {\n let regexp;\n if (rule instanceof RegExp) {\n regexp = rule;\n } else {\n const open = escapeRegex(rule.open);\n const close = escapeRegex(rule.close);\n const ignoreBetween = escapeRegex(rule.ignoreBetween || '');\n regexp = new RegExp(\n `(?:${open})` +\n (ignoreBetween ? `([^\\\\s${ignoreBetween}]+)` : `([\\\\S]+)`) +\n `(?:${close})\\\\s$`,\n );\n }\n return new InputRule(regexp, (state, match, start, end) => {\n // handle the rule only if is start of line or there is a space before \"open\" symbols\n if ((match as RegExpMatchArray).index! > 0) {\n const re = match as RegExpMatchArray;\n if (re.input![re.index! - 1] !== ' ') return null;\n }\n\n if (hasCodeMark(state, match, start, end)) return null;\n\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n const {tr} = state;\n const m = match.length - 1;\n let markEnd = end;\n let markStart = start;\n\n if (match[m]) {\n const matchStart = start + match[0].indexOf(match[m - 1]);\n const matchEnd = matchStart + match[m - 1].length - 1;\n const textStart = matchStart + match[m - 1].lastIndexOf(match[m]);\n const textEnd = textStart + match[m].length;\n\n const marksBetween = getMarksBetween(start, end, state);\n const excludedMarks = marksBetween\n .filter((item) => item.mark.type.excludes(markType))\n .filter((item) => item.end > matchStart);\n\n if (excludedMarks.length) {\n return null;\n }\n\n if (textEnd < matchEnd) {\n tr.delete(textEnd, matchEnd);\n }\n if (textStart > matchStart) {\n tr.delete(matchStart, textStart);\n }\n markStart = matchStart;\n markEnd = markStart + match[m].length;\n }\n\n tr.addMark(markStart, markEnd, markType.create(attrs));\n tr.removeStoredMark(markType);\n return tr;\n });\n}\n\ntype NodeInputRuleReplaceFragment = Node | Fragment | readonly Node[] | null | undefined;\n\nexport function nodeInputRule(\n regexp: RegExp,\n fragment: NodeInputRuleReplaceFragment | ((match: string) => NodeInputRuleReplaceFragment),\n selectionOffset = 0,\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n if (hasCodeMark(state, match, start, end)) return null;\n\n const [matchStr] = match;\n const {tr} = state;\n\n if (matchStr) {\n tr.replaceWith(\n start - 1,\n end,\n isFunction(fragment)\n ? (fragment(matchStr) ?? Fragment.empty)\n : (fragment ?? Fragment.empty),\n ).setSelection(new TextSelection(tr.doc.resolve(start + selectionOffset)));\n }\n\n return tr;\n });\n}\n\nexport function inlineNodeInputRule(\n regexp: RegExp,\n fragment: (match: string) => NodeInputRuleReplaceFragment,\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n if (hasCodeMark(state, match, start, end)) return null;\n\n const [matchStr] = match;\n const {tr} = state;\n\n if (matchStr) {\n tr.replaceWith(start, end, fragment(matchStr) ?? Fragment.empty).setSelection(\n new TextSelection(tr.doc.resolve(end)),\n );\n }\n\n return tr;\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.27.2' !== 'undefined' ? '15.27.2' : 'unknown';
2
+ export const VERSION = typeof '15.28.1' !== 'undefined' ? '15.28.1' : '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.27.2' !== 'undefined' ? '15.27.2' : '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.28.1' !== 'undefined' ? '15.28.1' : 'unknown';\n"]}
@@ -2,3 +2,8 @@ export declare const supportedImageExtensions: string[];
2
2
  export declare const supportedVideoExtensions: string[];
3
3
  export declare const supportedExtensions: string[];
4
4
  export declare const extensionRegex: RegExp;
5
+ export declare const YfmFileClassname = "yfm-file";
6
+ export declare const YfmFileAttrs: {
7
+ readonly Download: "download";
8
+ readonly Type: "type";
9
+ };
@@ -1,5 +1,13 @@
1
+ import { isMac } from "../../../utils/index.js";
1
2
  export const supportedImageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'avif', 'bmp'];
2
- export const supportedVideoExtensions = ['mp4', 'webm', 'ogg'];
3
+ const commonVideoExtensions = ['mp4', 'webm', 'ogg'];
4
+ const platformVideoExtensions = isMac() ? ['mov'] : [];
5
+ export const supportedVideoExtensions = [...commonVideoExtensions, ...platformVideoExtensions];
3
6
  export const supportedExtensions = [...supportedImageExtensions, ...supportedVideoExtensions];
4
7
  export const extensionRegex = /\w+?$/;
8
+ export const YfmFileClassname = 'yfm-file';
9
+ export const YfmFileAttrs = {
10
+ Download: 'download',
11
+ Type: 'type',
12
+ };
5
13
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"../../../../../src","sources":["view/hooks/useFilesGallery/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAEpG,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,wBAAwB,EAAE,GAAG,wBAAwB,CAAC,CAAC;AAE9F,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC","sourcesContent":["export const supportedImageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'avif', 'bmp'];\n\nexport const supportedVideoExtensions = ['mp4', 'webm', 'ogg'];\n\nexport const supportedExtensions = [...supportedImageExtensions, ...supportedVideoExtensions];\n\nexport const extensionRegex = /\\w+?$/;\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"../../../../../src","sources":["view/hooks/useFilesGallery/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,gCAAkB;AAEhC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAEpG,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACrD,MAAM,uBAAuB,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAEvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,qBAAqB,EAAE,GAAG,uBAAuB,CAAC,CAAC;AAE/F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,wBAAwB,EAAE,GAAG,wBAAwB,CAAC,CAAC;AAE9F,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;CACN,CAAC","sourcesContent":["import {isMac} from 'src/utils';\n\nexport const supportedImageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'avif', 'bmp'];\n\nconst commonVideoExtensions = ['mp4', 'webm', 'ogg'];\nconst platformVideoExtensions = isMac() ? ['mov'] : [];\n\nexport const supportedVideoExtensions = [...commonVideoExtensions, ...platformVideoExtensions];\n\nexport const supportedExtensions = [...supportedImageExtensions, ...supportedVideoExtensions];\n\nexport const extensionRegex = /\\w+?$/;\n\nexport const YfmFileClassname = 'yfm-file';\nexport const YfmFileAttrs = {\n Download: 'download',\n Type: 'type',\n} as const;\n"]}
@@ -0,0 +1,8 @@
1
+ type LinkObject = {
2
+ name?: string | null;
3
+ mimetype?: string | null;
4
+ type: 'image' | 'link' | 'file';
5
+ link: string;
6
+ };
7
+ export declare function buildLinkObject(elem: Element): LinkObject | null;
8
+ export {};
@@ -0,0 +1,25 @@
1
+ import { YfmFileAttrs, YfmFileClassname } from "./constants.js";
2
+ export function buildLinkObject(elem) {
3
+ let obj = null;
4
+ if (elem.tagName === 'IMG') {
5
+ obj = {
6
+ type: 'image',
7
+ name: elem.getAttribute('alt'),
8
+ link: elem.getAttribute('src') ?? '',
9
+ };
10
+ }
11
+ else if (elem.tagName === 'A') {
12
+ obj = {
13
+ type: 'link',
14
+ name: elem.getAttribute('title'),
15
+ link: elem.getAttribute('href') ?? '',
16
+ };
17
+ if (elem.classList.contains(YfmFileClassname)) {
18
+ obj.type = 'file';
19
+ obj.name = elem.getAttribute(YfmFileAttrs.Download);
20
+ obj.mimetype = elem.getAttribute(YfmFileAttrs.Type);
21
+ }
22
+ }
23
+ return obj;
24
+ }
25
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"../../../../../src","sources":["view/hooks/useFilesGallery/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,uBAAoB;AAS3D,MAAM,UAAU,eAAe,CAAC,IAAa;IACzC,IAAI,GAAG,GAAsB,IAAI,CAAC;IAElC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QACzB,GAAG,GAAG;YACF,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC9B,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE;SACvC,CAAC;IACN,CAAC;SAAM,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;QAC9B,GAAG,GAAG;YACF,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE;SACxC,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC;YAClB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACpD,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["import {YfmFileAttrs, YfmFileClassname} from './constants';\n\ntype LinkObject = {\n name?: string | null;\n mimetype?: string | null;\n type: 'image' | 'link' | 'file';\n link: string;\n};\n\nexport function buildLinkObject(elem: Element): LinkObject | null {\n let obj: LinkObject | null = null;\n\n if (elem.tagName === 'IMG') {\n obj = {\n type: 'image',\n name: elem.getAttribute('alt'),\n link: elem.getAttribute('src') ?? '',\n };\n } else if (elem.tagName === 'A') {\n obj = {\n type: 'link',\n name: elem.getAttribute('title'),\n link: elem.getAttribute('href') ?? '',\n };\n\n if (elem.classList.contains(YfmFileClassname)) {\n obj.type = 'file';\n obj.name = elem.getAttribute(YfmFileAttrs.Download);\n obj.mimetype = elem.getAttribute(YfmFileAttrs.Type);\n }\n }\n\n return obj;\n}\n"]}
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import type { GalleryItemPropsWithUrl, UseFilesGalleryOptions } from "./types.js";
3
2
  export declare function useFilesGallery(customFiles?: GalleryItemPropsWithUrl[], { download: getItemDownloladUrl, overrideItemProps, copyUrl: getItemCopyUrl, }?: UseFilesGalleryOptions): {
4
3
  openFilesGallery: (event: React.MouseEvent<HTMLDivElement>) => boolean;
@@ -1,39 +1,37 @@
1
- import * as React from 'react';
1
+ import { useCallback } from 'react';
2
2
  import { getGalleryItemCopyLinkAction, getGalleryItemDownloadAction, getGalleryItemImage, getGalleryItemVideo, useGallery, } from '@gravity-ui/components';
3
3
  import { useToaster } from '@gravity-ui/uikit';
4
4
  import { i18n } from "../../../i18n/gallery/index.js";
5
5
  import { extensionRegex, supportedExtensions, supportedVideoExtensions } from "./constants.js";
6
+ import { buildLinkObject } from "./helpers.js";
6
7
  export function useFilesGallery(customFiles, { download: getItemDownloladUrl, overrideItemProps, copyUrl: getItemCopyUrl, } = {}) {
7
8
  const { openGallery } = useGallery();
8
9
  const toaster = useToaster();
9
10
  return {
10
- openFilesGallery: React.useCallback((event) => {
11
+ openFilesGallery: useCallback((event) => {
11
12
  if (!(event.target instanceof HTMLElement)) {
12
13
  return false;
13
14
  }
14
- let fileLink = '';
15
- if (event.target.tagName === 'IMG' && !event.target.closest('a')) {
16
- fileLink = event.target.getAttribute('src') ?? '';
17
- }
18
- else if (event.target.tagName === 'A') {
19
- fileLink = event.target.getAttribute('href') ?? '';
20
- }
21
- if (!fileLink) {
15
+ if (event.target.tagName === 'IMG' && event.target.closest('a'))
16
+ return false;
17
+ // Opening the context menu or opening the link in the new tab
18
+ if (event.ctrlKey || event.metaKey) {
22
19
  return false;
23
20
  }
21
+ const targetFile = buildLinkObject(event.target);
22
+ if (!targetFile || !targetFile.link)
23
+ return false;
24
24
  const filesFromContent = [
25
25
  ...(event.currentTarget?.querySelectorAll('img,a') ?? []),
26
26
  ].reduce((result, element) => {
27
- const isImage = element.tagName === 'IMG';
28
- const link = isImage
29
- ? element.getAttribute('src')
30
- : element.getAttribute('href');
31
- if (link && !customFiles?.some((item) => item.url === link)) {
32
- const extension = link.match(extensionRegex)?.[0] || '';
33
- if (isImage || supportedExtensions.includes(extension)) {
34
- const name = (isImage
35
- ? element.getAttribute('alt')
36
- : element.getAttribute('title')) || '';
27
+ const linkObj = buildLinkObject(element);
28
+ if (linkObj?.link && !customFiles?.some((item) => item.url === linkObj.link)) {
29
+ const extension = linkObj.mimetype?.match(extensionRegex)?.[0] ||
30
+ linkObj.link.match(extensionRegex)?.[0] ||
31
+ '';
32
+ if (linkObj.type === 'image' || supportedExtensions.includes(extension)) {
33
+ const link = linkObj.link;
34
+ const name = linkObj.name || '';
37
35
  const filesGalleryItemType = supportedVideoExtensions.includes(extension) ? 'video' : 'image';
38
36
  const galleryItemActions = [];
39
37
  const itemCopyUrl = getItemCopyUrl?.(link, filesGalleryItemType, element);
@@ -70,7 +68,7 @@ export function useFilesGallery(customFiles, { download: getItemDownloladUrl, ov
70
68
  return result;
71
69
  }, []);
72
70
  const files = [...(customFiles ?? []), ...filesFromContent];
73
- const initialItemIndex = files.findIndex((item) => item.url === fileLink);
71
+ const initialItemIndex = files.findIndex((item) => item.url === targetFile.link);
74
72
  if (initialItemIndex !== -1) {
75
73
  event.preventDefault();
76
74
  openGallery(files, initialItemIndex);
@@ -1 +1 @@
1
- {"version":3,"file":"useFilesGallery.js","sourceRoot":"../../../../../src","sources":["view/hooks/useFilesGallery/useFilesGallery.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAEH,4BAA4B,EAC5B,4BAA4B,EAC5B,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAC,IAAI,EAAC,uCAAyB;AAEtC,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAE,wBAAwB,EAAC,uBAAoB;AAG1F,MAAM,UAAU,eAAe,CAC3B,WAAuC,EACvC,EACI,QAAQ,EAAE,mBAAmB,EAC7B,iBAAiB,EACjB,OAAO,EAAE,cAAc,MACC,EAAE;IAE9B,MAAM,EAAC,WAAW,EAAC,GAAG,UAAU,EAAE,CAAC;IAEnC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,OAAO;QACH,gBAAgB,EAAE,KAAK,CAAC,WAAW,CAC/B,CAAC,KAAuC,EAAE,EAAE;YACxC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY,WAAW,CAAC,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,IAAI,QAAQ,GAAG,EAAE,CAAC;YAElB,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/D,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACtD,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;gBACtC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACvD,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,MAAM,gBAAgB,GAAG;gBACrB,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;aAC5D,CAAC,MAAM,CAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;gBACpD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC;gBAC1C,MAAM,IAAI,GAAG,OAAO;oBAChB,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;oBAC7B,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAEnC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC;oBAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAExD,IAAI,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;wBACrD,MAAM,IAAI,GACN,CAAC,OAAO;4BACJ,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;4BAC7B,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;wBAE/C,MAAM,oBAAoB,GACtB,wBAAwB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;wBACrE,MAAM,kBAAkB,GAAwB,EAAE,CAAC;wBAEnD,MAAM,WAAW,GAAG,cAAc,EAAE,CAChC,IAAI,EACJ,oBAAoB,EACpB,OAAO,CACV,CAAC;wBAEF,IAAI,WAAW,EAAE,CAAC;4BACd,MAAM,gBAAgB,GAAG,GAAG,EAAE;gCAC1B,OAAO,CAAC,GAAG,CAAC;oCACR,KAAK,EAAE,SAAS;oCAChB,IAAI,EAAE,+BAA+B;oCACrC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC;iCAC7B,CAAC,CAAC;4BACP,CAAC,CAAC;4BAEF,kBAAkB,CAAC,IAAI,CACnB,4BAA4B,CAAC;gCACzB,OAAO,EAAE,WAAW;gCACpB,MAAM,EAAE,gBAAgB;6BAC3B,CAAC,CACL,CAAC;wBACN,CAAC;wBAED,MAAM,WAAW,GAAG,mBAAmB,EAAE,CACrC,IAAI,EACJ,oBAAoB,EACpB,OAAO,CACV,CAAC;wBAEF,IAAI,WAAW,EAAE,CAAC;4BACd,kBAAkB,CAAC,IAAI,CACnB,4BAA4B,CAAC,EAAC,WAAW,EAAC,CAAC,CAC9C,CAAC;wBACN,CAAC;wBAED,MAAM,gBAAgB,GAAG;4BACrB,GAAG,CAAC,oBAAoB,KAAK,OAAO;gCAChC,CAAC,CAAC,mBAAmB,CAAC,EAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;gCAC9C,CAAC,CAAC,mBAAmB,CAAC,EAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;4BACnD,GAAG,EAAE,IAAI;4BACT,OAAO,EAAE,kBAAkB;yBAC9B,CAAC;wBAEF,MAAM,CAAC,IAAI,CAAC;4BACR,GAAG,gBAAgB;4BACnB,GAAG,iBAAiB,EAAE,CAClB,IAAI,EACJ,oBAAoB,EACpB,OAAO,EACP,gBAAgB,CACnB;yBACJ,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;gBAED,OAAO,MAAM,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC;YAE5D,MAAM,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;YAE1E,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBACrC,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,OAAO,KAAK,CAAC;QACjB,CAAC,EACD;YACI,WAAW;YACX,cAAc;YACd,mBAAmB;YACnB,iBAAiB;YACjB,OAAO;YACP,WAAW;SACd,CACJ;KACJ,CAAC;AACN,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {\n type GalleryItemAction,\n getGalleryItemCopyLinkAction,\n getGalleryItemDownloadAction,\n getGalleryItemImage,\n getGalleryItemVideo,\n useGallery,\n} from '@gravity-ui/components';\nimport {useToaster} from '@gravity-ui/uikit';\n\nimport {i18n} from 'src/i18n/gallery';\n\nimport {extensionRegex, supportedExtensions, supportedVideoExtensions} from './constants';\nimport type {FilesGalleryItemType, GalleryItemPropsWithUrl, UseFilesGalleryOptions} from './types';\n\nexport function useFilesGallery(\n customFiles?: GalleryItemPropsWithUrl[],\n {\n download: getItemDownloladUrl,\n overrideItemProps,\n copyUrl: getItemCopyUrl,\n }: UseFilesGalleryOptions = {},\n) {\n const {openGallery} = useGallery();\n\n const toaster = useToaster();\n\n return {\n openFilesGallery: React.useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (!(event.target instanceof HTMLElement)) {\n return false;\n }\n\n let fileLink = '';\n\n if (event.target.tagName === 'IMG' && !event.target.closest('a')) {\n fileLink = event.target.getAttribute('src') ?? '';\n } else if (event.target.tagName === 'A') {\n fileLink = event.target.getAttribute('href') ?? '';\n }\n\n if (!fileLink) {\n return false;\n }\n\n const filesFromContent = [\n ...(event.currentTarget?.querySelectorAll('img,a') ?? []),\n ].reduce<GalleryItemPropsWithUrl[]>((result, element) => {\n const isImage = element.tagName === 'IMG';\n const link = isImage\n ? element.getAttribute('src')\n : element.getAttribute('href');\n\n if (link && !customFiles?.some((item) => item.url === link)) {\n const extension = link.match(extensionRegex)?.[0] || '';\n\n if (isImage || supportedExtensions.includes(extension)) {\n const name =\n (isImage\n ? element.getAttribute('alt')\n : element.getAttribute('title')) || '';\n\n const filesGalleryItemType: FilesGalleryItemType =\n supportedVideoExtensions.includes(extension) ? 'video' : 'image';\n const galleryItemActions: GalleryItemAction[] = [];\n\n const itemCopyUrl = getItemCopyUrl?.(\n link,\n filesGalleryItemType,\n element,\n );\n\n if (itemCopyUrl) {\n const handleLinkCopied = () => {\n toaster.add({\n theme: 'success',\n name: 'g-md-editor-gallery-copy-link',\n title: i18n('link_copied'),\n });\n };\n\n galleryItemActions.push(\n getGalleryItemCopyLinkAction({\n copyUrl: itemCopyUrl,\n onCopy: handleLinkCopied,\n }),\n );\n }\n\n const downloadUrl = getItemDownloladUrl?.(\n link,\n filesGalleryItemType,\n element,\n );\n\n if (downloadUrl) {\n galleryItemActions.push(\n getGalleryItemDownloadAction({downloadUrl}),\n );\n }\n\n const galleryItemProps = {\n ...(filesGalleryItemType === 'video'\n ? getGalleryItemVideo({src: link, name: name})\n : getGalleryItemImage({src: link, name: name})),\n url: link,\n actions: galleryItemActions,\n };\n\n result.push({\n ...galleryItemProps,\n ...overrideItemProps?.(\n link,\n filesGalleryItemType,\n element,\n galleryItemProps,\n ),\n });\n }\n }\n\n return result;\n }, []);\n\n const files = [...(customFiles ?? []), ...filesFromContent];\n\n const initialItemIndex = files.findIndex((item) => item.url === fileLink);\n\n if (initialItemIndex !== -1) {\n event.preventDefault();\n openGallery(files, initialItemIndex);\n return true;\n }\n\n return false;\n },\n [\n customFiles,\n getItemCopyUrl,\n getItemDownloladUrl,\n overrideItemProps,\n toaster,\n openGallery,\n ],\n ),\n };\n}\n"]}
1
+ {"version":3,"file":"useFilesGallery.js","sourceRoot":"../../../../../src","sources":["view/hooks/useFilesGallery/useFilesGallery.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useCallback} from 'react';\n\nimport {\n type GalleryItemAction,\n getGalleryItemCopyLinkAction,\n getGalleryItemDownloadAction,\n getGalleryItemImage,\n getGalleryItemVideo,\n useGallery,\n} from '@gravity-ui/components';\nimport {useToaster} from '@gravity-ui/uikit';\n\nimport {i18n} from 'src/i18n/gallery';\n\nimport {extensionRegex, supportedExtensions, supportedVideoExtensions} from './constants';\nimport {buildLinkObject} from './helpers';\nimport type {FilesGalleryItemType, GalleryItemPropsWithUrl, UseFilesGalleryOptions} from './types';\n\nexport function useFilesGallery(\n customFiles?: GalleryItemPropsWithUrl[],\n {\n download: getItemDownloladUrl,\n overrideItemProps,\n copyUrl: getItemCopyUrl,\n }: UseFilesGalleryOptions = {},\n) {\n const {openGallery} = useGallery();\n\n const toaster = useToaster();\n\n return {\n openFilesGallery: useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (!(event.target instanceof HTMLElement)) {\n return false;\n }\n\n if (event.target.tagName === 'IMG' && event.target.closest('a')) return false;\n\n // Opening the context menu or opening the link in the new tab\n if (event.ctrlKey || event.metaKey) {\n return false;\n }\n\n const targetFile = buildLinkObject(event.target);\n\n if (!targetFile || !targetFile.link) return false;\n\n const filesFromContent = [\n ...(event.currentTarget?.querySelectorAll('img,a') ?? []),\n ].reduce<GalleryItemPropsWithUrl[]>((result, element) => {\n const linkObj = buildLinkObject(element);\n\n if (linkObj?.link && !customFiles?.some((item) => item.url === linkObj.link)) {\n const extension =\n linkObj.mimetype?.match(extensionRegex)?.[0] ||\n linkObj.link.match(extensionRegex)?.[0] ||\n '';\n\n if (linkObj.type === 'image' || supportedExtensions.includes(extension)) {\n const link = linkObj.link;\n const name = linkObj.name || '';\n\n const filesGalleryItemType: FilesGalleryItemType =\n supportedVideoExtensions.includes(extension) ? 'video' : 'image';\n const galleryItemActions: GalleryItemAction[] = [];\n\n const itemCopyUrl = getItemCopyUrl?.(\n link,\n filesGalleryItemType,\n element,\n );\n\n if (itemCopyUrl) {\n const handleLinkCopied = () => {\n toaster.add({\n theme: 'success',\n name: 'g-md-editor-gallery-copy-link',\n title: i18n('link_copied'),\n });\n };\n\n galleryItemActions.push(\n getGalleryItemCopyLinkAction({\n copyUrl: itemCopyUrl,\n onCopy: handleLinkCopied,\n }),\n );\n }\n\n const downloadUrl = getItemDownloladUrl?.(\n link,\n filesGalleryItemType,\n element,\n );\n\n if (downloadUrl) {\n galleryItemActions.push(\n getGalleryItemDownloadAction({downloadUrl}),\n );\n }\n\n const galleryItemProps = {\n ...(filesGalleryItemType === 'video'\n ? getGalleryItemVideo({src: link, name: name})\n : getGalleryItemImage({src: link, name: name})),\n url: link,\n actions: galleryItemActions,\n };\n\n result.push({\n ...galleryItemProps,\n ...overrideItemProps?.(\n link,\n filesGalleryItemType,\n element,\n galleryItemProps,\n ),\n });\n }\n }\n\n return result;\n }, []);\n\n const files = [...(customFiles ?? []), ...filesFromContent];\n\n const initialItemIndex = files.findIndex((item) => item.url === targetFile.link);\n\n if (initialItemIndex !== -1) {\n event.preventDefault();\n openGallery(files, initialItemIndex);\n return true;\n }\n\n return false;\n },\n [\n customFiles,\n getItemCopyUrl,\n getItemDownloladUrl,\n overrideItemProps,\n toaster,\n openGallery,\n ],\n ),\n };\n}\n"]}