reactjs-tiptap-editor-pro 0.2.31 → 0.2.32

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 (333) hide show
  1. package/lib/RichTextEditor-BwbqJLnA.cjs +141 -0
  2. package/lib/RichTextEditor-iGJ6-rbq.js +8833 -0
  3. package/lib/extension-bundle.cjs +33 -0
  4. package/lib/extension-bundle.d.cts +947 -0
  5. package/lib/extension-bundle.d.ts +947 -0
  6. package/lib/extension-bundle.js +5755 -0
  7. package/lib/index-DV-nXpU1.cjs +1 -0
  8. package/lib/index-M6H3FoBi.js +1147 -0
  9. package/lib/index.cjs +1 -0
  10. package/lib/index.d.cts +513 -0
  11. package/lib/index.d.ts +513 -0
  12. package/lib/index.js +16 -0
  13. package/lib/locale-bundle.cjs +1 -0
  14. package/lib/locale-bundle.d.cts +1140 -0
  15. package/lib/locale-bundle.d.ts +1140 -0
  16. package/lib/locale-bundle.js +9 -0
  17. package/lib/style.css +1 -0
  18. package/lib/tiptap-DkWHMWDt.js +6061 -0
  19. package/lib/tiptap-gBG-1T-V.cjs +116 -0
  20. package/lib/vendor-BJ0Yf78E.cjs +8114 -0
  21. package/lib/vendor-Cpa6z-M0.js +67575 -0
  22. package/package.json +58 -5
  23. package/src/components/ActionButton.tsx +0 -103
  24. package/src/components/ActionMenuButton.tsx +0 -76
  25. package/src/components/BubbleMenu.tsx +0 -93
  26. package/src/components/CharactorCount.tsx +0 -50
  27. package/src/components/ColorPicker.tsx +0 -272
  28. package/src/components/RichTextEditor.tsx +0 -212
  29. package/src/components/SizeSetter/SizeSetter.tsx +0 -102
  30. package/src/components/Toolbar.tsx +0 -108
  31. package/src/components/icons/Activity.tsx +0 -19
  32. package/src/components/icons/Animas.tsx +0 -24
  33. package/src/components/icons/AspectRatio.tsx +0 -13
  34. package/src/components/icons/Blockquote.tsx +0 -17
  35. package/src/components/icons/ColumnAddLeft.tsx +0 -7
  36. package/src/components/icons/ColumnAddRight.tsx +0 -7
  37. package/src/components/icons/DeleteColumn.tsx +0 -26
  38. package/src/components/icons/DeleteRow.tsx +0 -26
  39. package/src/components/icons/Direction.tsx +0 -7
  40. package/src/components/icons/Excalidraw.tsx +0 -7
  41. package/src/components/icons/ExportPdf.tsx +0 -8
  42. package/src/components/icons/ExportWord.tsx +0 -24
  43. package/src/components/icons/FileWordOutline.tsx +0 -13
  44. package/src/components/icons/Flag.tsx +0 -19
  45. package/src/components/icons/Food.tsx +0 -20
  46. package/src/components/icons/GIfIcon.tsx +0 -10
  47. package/src/components/icons/Icon.tsx +0 -30
  48. package/src/components/icons/ImportWord.tsx +0 -23
  49. package/src/components/icons/LeftToRight.tsx +0 -7
  50. package/src/components/icons/LineHeight.tsx +0 -13
  51. package/src/components/icons/MenuDown.tsx +0 -24
  52. package/src/components/icons/Mermaid.tsx +0 -13
  53. package/src/components/icons/NoFill.tsx +0 -7
  54. package/src/components/icons/Object.tsx +0 -24
  55. package/src/components/icons/RightToLeft.tsx +0 -7
  56. package/src/components/icons/SizeL.tsx +0 -9
  57. package/src/components/icons/SizeM.tsx +0 -13
  58. package/src/components/icons/SizeS.tsx +0 -13
  59. package/src/components/icons/Symbol.tsx +0 -19
  60. package/src/components/icons/Travel.tsx +0 -24
  61. package/src/components/icons/Twitter.tsx +0 -7
  62. package/src/components/icons/icons.ts +0 -212
  63. package/src/components/icons/index.ts +0 -12
  64. package/src/components/index.ts +0 -9
  65. package/src/components/menus/bubble.ts +0 -395
  66. package/src/components/menus/components/BubbleMenuContent.tsx +0 -15
  67. package/src/components/menus/components/BubbleMenuDrawer.tsx +0 -128
  68. package/src/components/menus/components/BubbleMenuExcalidraw.tsx +0 -91
  69. package/src/components/menus/components/BubbleMenuIframe.tsx +0 -143
  70. package/src/components/menus/components/BubbleMenuKatex.tsx +0 -136
  71. package/src/components/menus/components/BubbleMenuLink.tsx +0 -99
  72. package/src/components/menus/components/BubbleMenuMedia.tsx +0 -235
  73. package/src/components/menus/components/BubbleMenuMermaid.tsx +0 -128
  74. package/src/components/menus/components/BubbleMenuText.tsx +0 -102
  75. package/src/components/menus/components/BubbleMenuTwitter.tsx +0 -91
  76. package/src/components/menus/components/ColumnsBubbleMenu.tsx +0 -59
  77. package/src/components/menus/components/ContentMenu.tsx +0 -396
  78. package/src/components/menus/components/TableBubbleMenu.tsx +0 -362
  79. package/src/components/menus/index.ts +0 -7
  80. package/src/components/ui/button.tsx +0 -56
  81. package/src/components/ui/checkbox.tsx +0 -30
  82. package/src/components/ui/dialog.tsx +0 -128
  83. package/src/components/ui/dropdown-menu.tsx +0 -203
  84. package/src/components/ui/emoji-picker.tsx +0 -166
  85. package/src/components/ui/index.ts +0 -14
  86. package/src/components/ui/input.tsx +0 -25
  87. package/src/components/ui/label.tsx +0 -26
  88. package/src/components/ui/popover.tsx +0 -31
  89. package/src/components/ui/select.tsx +0 -162
  90. package/src/components/ui/separator.tsx +0 -31
  91. package/src/components/ui/switch.tsx +0 -29
  92. package/src/components/ui/tabs.tsx +0 -55
  93. package/src/components/ui/textarea.tsx +0 -24
  94. package/src/components/ui/toast.tsx +0 -129
  95. package/src/components/ui/toaster.tsx +0 -44
  96. package/src/components/ui/toggle.tsx +0 -45
  97. package/src/components/ui/tooltip.tsx +0 -30
  98. package/src/components/ui/use-toast.ts +0 -197
  99. package/src/constants/index.ts +0 -223
  100. package/src/constants/resetCSS.ts +0 -139
  101. package/src/extension-bundle.ts +0 -2
  102. package/src/extensions/Attachment/Attachment.ts +0 -144
  103. package/src/extensions/Attachment/components/NodeViewAttachment/FileIcon.tsx +0 -69
  104. package/src/extensions/Attachment/components/NodeViewAttachment/FileIconString.ts +0 -28
  105. package/src/extensions/Attachment/components/NodeViewAttachment/NodeViewAttachment.tsx +0 -155
  106. package/src/extensions/Attachment/components/NodeViewAttachment/index.module.scss +0 -23
  107. package/src/extensions/Attachment/index.ts +0 -1
  108. package/src/extensions/BaseKit.ts +0 -253
  109. package/src/extensions/Blockquote/Blockquote.ts +0 -31
  110. package/src/extensions/Blockquote/index.ts +0 -1
  111. package/src/extensions/Bold/Bold.ts +0 -26
  112. package/src/extensions/Bold/index.ts +0 -1
  113. package/src/extensions/BulletList/BulletList.ts +0 -28
  114. package/src/extensions/BulletList/index.ts +0 -1
  115. package/src/extensions/Clear/Clear.ts +0 -24
  116. package/src/extensions/Clear/index.ts +0 -1
  117. package/src/extensions/Code/Code.ts +0 -26
  118. package/src/extensions/Code/index.ts +0 -1
  119. package/src/extensions/CodeBlock/CodeBlock.ts +0 -54
  120. package/src/extensions/CodeBlock/components/CodeBlockActiveButton.tsx +0 -66
  121. package/src/extensions/CodeBlock/components/NodeViewCodeBlock/NodeViewCodeBlock.tsx +0 -89
  122. package/src/extensions/CodeBlock/components/NodeViewCodeBlock/index.module.scss +0 -81
  123. package/src/extensions/CodeBlock/highlighter.ts +0 -132
  124. package/src/extensions/CodeBlock/index.ts +0 -1
  125. package/src/extensions/CodeBlock/shiki-plugin.ts +0 -213
  126. package/src/extensions/Color/Color.ts +0 -52
  127. package/src/extensions/Color/components/ColorActionButton.tsx +0 -104
  128. package/src/extensions/Color/index.ts +0 -1
  129. package/src/extensions/Document/Document.ts +0 -8
  130. package/src/extensions/Document/index.ts +0 -1
  131. package/src/extensions/Drawer/Drawer.ts +0 -177
  132. package/src/extensions/Drawer/components/ControlDrawer/ControlDrawer.module.scss +0 -85
  133. package/src/extensions/Drawer/components/ControlDrawer/ControlDrawer.tsx +0 -598
  134. package/src/extensions/Drawer/components/ControlDrawer/icon.tsx +0 -500
  135. package/src/extensions/Drawer/components/DrawerActiveButton.tsx +0 -239
  136. package/src/extensions/Drawer/components/EditDrawerBlock.tsx +0 -238
  137. package/src/extensions/Drawer/components/NodeViewDrawer/NodeViewDrawer.tsx +0 -260
  138. package/src/extensions/Drawer/index.ts +0 -1
  139. package/src/extensions/Emoji/Emoji.ts +0 -146
  140. package/src/extensions/Emoji/components/EmojiList/EmojiList.tsx +0 -103
  141. package/src/extensions/Emoji/components/EmojiList/emojis.ts +0 -1858
  142. package/src/extensions/Emoji/components/EmojiPicker/EmojiPicker.tsx +0 -61
  143. package/src/extensions/Emoji/index.ts +0 -1
  144. package/src/extensions/Excalidraw/Excalidraw.ts +0 -123
  145. package/src/extensions/Excalidraw/components/ExcalidrawActiveButton.tsx +0 -138
  146. package/src/extensions/Excalidraw/components/NodeViewExcalidraw/NodeViewExcalidraw.tsx +0 -178
  147. package/src/extensions/Excalidraw/components/NodeViewExcalidraw/index.module.scss +0 -43
  148. package/src/extensions/Excalidraw/index.ts +0 -1
  149. package/src/extensions/ExportPdf/ExportPdf.ts +0 -25
  150. package/src/extensions/ExportPdf/index.ts +0 -1
  151. package/src/extensions/ExportWord/ExportWord.ts +0 -87
  152. package/src/extensions/ExportWord/index.ts +0 -1
  153. package/src/extensions/FontFamily/FontFamily.ts +0 -64
  154. package/src/extensions/FontFamily/components/FontFamilyButton.tsx +0 -97
  155. package/src/extensions/FontFamily/index.ts +0 -1
  156. package/src/extensions/FontSize/FontSize.ts +0 -119
  157. package/src/extensions/FontSize/components/FontSizeMenuButton.tsx +0 -84
  158. package/src/extensions/FontSize/index.ts +0 -1
  159. package/src/extensions/FormatPainter/FormatPainter.ts +0 -121
  160. package/src/extensions/FormatPainter/index.ts +0 -1
  161. package/src/extensions/Heading/Heading.ts +0 -57
  162. package/src/extensions/Heading/components/HeadingButton.tsx +0 -96
  163. package/src/extensions/Heading/index.ts +0 -1
  164. package/src/extensions/Highlight/Highlight.ts +0 -36
  165. package/src/extensions/Highlight/components/HighlightActionButton.tsx +0 -108
  166. package/src/extensions/Highlight/index.ts +0 -1
  167. package/src/extensions/History/History.ts +0 -39
  168. package/src/extensions/History/components/HistoryActionButton.tsx +0 -74
  169. package/src/extensions/History/index.ts +0 -1
  170. package/src/extensions/HorizontalRule/HorizontalRule.ts +0 -42
  171. package/src/extensions/HorizontalRule/index.ts +0 -1
  172. package/src/extensions/Iframe/Iframe.ts +0 -140
  173. package/src/extensions/Iframe/components/IframeNodeView.tsx +0 -92
  174. package/src/extensions/Iframe/components/index.module.scss +0 -40
  175. package/src/extensions/Iframe/embed.ts +0 -487
  176. package/src/extensions/Iframe/index.ts +0 -1
  177. package/src/extensions/Image/Image.ts +0 -303
  178. package/src/extensions/Image/components/ActionImageButton.tsx +0 -186
  179. package/src/extensions/Image/components/ImageCropper.tsx +0 -198
  180. package/src/extensions/Image/components/ImageView.tsx +0 -271
  181. package/src/extensions/Image/index.ts +0 -1
  182. package/src/extensions/Image/store.ts +0 -15
  183. package/src/extensions/ImageGif/ImageGif.ts +0 -176
  184. package/src/extensions/ImageGif/components/ImageGifActionButton.tsx +0 -138
  185. package/src/extensions/ImageGif/components/ImageGifView.tsx +0 -260
  186. package/src/extensions/ImageGif/index.ts +0 -1
  187. package/src/extensions/ImportWord/ImportWord.ts +0 -52
  188. package/src/extensions/ImportWord/components/ImportWordButton.tsx +0 -151
  189. package/src/extensions/ImportWord/index.ts +0 -1
  190. package/src/extensions/Indent/Indent.ts +0 -110
  191. package/src/extensions/Indent/index.ts +0 -1
  192. package/src/extensions/Italic/Italic.ts +0 -29
  193. package/src/extensions/Italic/index.ts +0 -1
  194. package/src/extensions/Katex/Katex.ts +0 -109
  195. package/src/extensions/Katex/components/KatexActiveButton.tsx +0 -117
  196. package/src/extensions/Katex/components/KatexWrapper.tsx +0 -53
  197. package/src/extensions/Katex/index.ts +0 -1
  198. package/src/extensions/LineHeight/LineHeight.ts +0 -76
  199. package/src/extensions/LineHeight/components/LineHeightDropdown.tsx +0 -93
  200. package/src/extensions/LineHeight/index.ts +0 -1
  201. package/src/extensions/Link/Link.ts +0 -92
  202. package/src/extensions/Link/components/LinkEditBlock.tsx +0 -110
  203. package/src/extensions/Link/components/LinkEditPopover.tsx +0 -46
  204. package/src/extensions/Link/components/LinkViewBlock.tsx +0 -54
  205. package/src/extensions/Link/index.ts +0 -1
  206. package/src/extensions/ListItem/ListItem.ts +0 -1
  207. package/src/extensions/ListItem/index.ts +0 -1
  208. package/src/extensions/Mention/Mention.ts +0 -100
  209. package/src/extensions/Mention/components/NodeViewMentionList/NodeViewMentionList.tsx +0 -94
  210. package/src/extensions/Mention/components/NodeViewMentionList/index.module.scss +0 -38
  211. package/src/extensions/Mention/index.ts +0 -1
  212. package/src/extensions/Mermaid/Mermaid.ts +0 -177
  213. package/src/extensions/Mermaid/components/EditMermaidBlock.tsx +0 -155
  214. package/src/extensions/Mermaid/components/MermaidActiveButton.tsx +0 -151
  215. package/src/extensions/Mermaid/components/NodeViewMermaid/NodeViewMermaid.tsx +0 -260
  216. package/src/extensions/Mermaid/index.ts +0 -1
  217. package/src/extensions/MoreMark/MoreMark.ts +0 -102
  218. package/src/extensions/MoreMark/components/ActionMoreButton.tsx +0 -97
  219. package/src/extensions/MoreMark/index.ts +0 -1
  220. package/src/extensions/MultiColumn/Column.ts +0 -36
  221. package/src/extensions/MultiColumn/MultiColumn.ts +0 -111
  222. package/src/extensions/MultiColumn/components/ColumnActionButton.ts +0 -22
  223. package/src/extensions/MultiColumn/index.ts +0 -3
  224. package/src/extensions/OrderedList/OrderedList.ts +0 -28
  225. package/src/extensions/OrderedList/index.ts +0 -1
  226. package/src/extensions/SearchAndReplace/SearchAndReplace.ts +0 -395
  227. package/src/extensions/SearchAndReplace/components/SearchAndReplaceButton.tsx +0 -190
  228. package/src/extensions/SearchAndReplace/index.ts +0 -1
  229. package/src/extensions/Selection/Selection.ts +0 -32
  230. package/src/extensions/Selection/index.ts +0 -1
  231. package/src/extensions/SlashCommand/SlashCommand.ts +0 -255
  232. package/src/extensions/SlashCommand/components/CommandsList.tsx +0 -180
  233. package/src/extensions/SlashCommand/groups.ts +0 -183
  234. package/src/extensions/SlashCommand/index.ts +0 -1
  235. package/src/extensions/SlashCommand/types.ts +0 -24
  236. package/src/extensions/Strike/Strike.ts +0 -26
  237. package/src/extensions/Strike/index.ts +0 -1
  238. package/src/extensions/Subscript/Subscript.ts +0 -88
  239. package/src/extensions/Subscript/index.ts +0 -1
  240. package/src/extensions/Table/Cell.ts +0 -131
  241. package/src/extensions/Table/Header.ts +0 -93
  242. package/src/extensions/Table/Row.ts +0 -8
  243. package/src/extensions/Table/Table.ts +0 -60
  244. package/src/extensions/Table/cell-background.ts +0 -112
  245. package/src/extensions/Table/components/CreateTablePopover.tsx +0 -132
  246. package/src/extensions/Table/components/TableActionButton.tsx +0 -42
  247. package/src/extensions/Table/index.ts +0 -6
  248. package/src/extensions/Table/utils.ts +0 -352
  249. package/src/extensions/TableOfContent/TableOfContent.ts +0 -124
  250. package/src/extensions/TableOfContent/components/NodeViewTableOfContent.tsx +0 -116
  251. package/src/extensions/TableOfContent/components/TableOfContentActionButton.tsx +0 -27
  252. package/src/extensions/TableOfContent/components/index.module.scss +0 -40
  253. package/src/extensions/TableOfContent/index.ts +0 -1
  254. package/src/extensions/TaskList/TaskList.ts +0 -46
  255. package/src/extensions/TaskList/index.ts +0 -1
  256. package/src/extensions/TextAlign/TextAlign.ts +0 -68
  257. package/src/extensions/TextAlign/components/TextAlignMenuButton.tsx +0 -103
  258. package/src/extensions/TextAlign/index.ts +0 -1
  259. package/src/extensions/TextBubble/TextBubble.ts +0 -22
  260. package/src/extensions/TextBubble/components/TextDropdown.tsx +0 -146
  261. package/src/extensions/TextBubble/index.ts +0 -1
  262. package/src/extensions/TextDirection/TextDirection.ts +0 -97
  263. package/src/extensions/TextDirection/components/TextDirectionButton.tsx +0 -103
  264. package/src/extensions/TextDirection/index.ts +0 -1
  265. package/src/extensions/TrailingNode/TrailingNode.ts +0 -71
  266. package/src/extensions/TrailingNode/index.ts +0 -1
  267. package/src/extensions/Twitter/Twitter.ts +0 -161
  268. package/src/extensions/Twitter/components/FormEditLinkTwitter.tsx +0 -68
  269. package/src/extensions/Twitter/components/NodeViewTweet.tsx +0 -30
  270. package/src/extensions/Twitter/components/TwitterActiveButton.tsx +0 -41
  271. package/src/extensions/Twitter/index.ts +0 -1
  272. package/src/extensions/UnderLine/Underline.ts +0 -30
  273. package/src/extensions/UnderLine/index.ts +0 -1
  274. package/src/extensions/Video/Video.ts +0 -204
  275. package/src/extensions/Video/components/ActiveVideoButton.tsx +0 -191
  276. package/src/extensions/Video/index.ts +0 -1
  277. package/src/extensions/Video/store.ts +0 -15
  278. package/src/extensions/index.ts +0 -122
  279. package/src/hooks/useActive.tsx +0 -24
  280. package/src/hooks/useAttributes.tsx +0 -45
  281. package/src/hooks/useCopy.tsx +0 -20
  282. package/src/hooks/useEditorState.tsx +0 -23
  283. package/src/hooks/useExtension.tsx +0 -29
  284. package/src/index.ts +0 -8
  285. package/src/lib/utils.ts +0 -7
  286. package/src/locale-bundle.ts +0 -3
  287. package/src/locales/en.ts +0 -173
  288. package/src/locales/hu.ts +0 -173
  289. package/src/locales/index.tsx +0 -163
  290. package/src/locales/pt-br.ts +0 -173
  291. package/src/locales/vi.ts +0 -173
  292. package/src/locales/zh-cn.ts +0 -173
  293. package/src/plugins/DragHandle/index.ts +0 -375
  294. package/src/plugins/DragHandle/range.ts +0 -114
  295. package/src/plugins/DragHandle/utils.ts +0 -80
  296. package/src/plugins/image-upload.ts +0 -160
  297. package/src/store/ProviderRichText.tsx +0 -53
  298. package/src/store/editableEditor.ts +0 -15
  299. package/src/store/fast-context.tsx +0 -70
  300. package/src/store/store.ts +0 -35
  301. package/src/styles/ProseMirror.scss +0 -176
  302. package/src/styles/columns.scss +0 -23
  303. package/src/styles/editor.scss +0 -411
  304. package/src/styles/global.scss +0 -87
  305. package/src/styles/index.scss +0 -5
  306. package/src/styles/mention.scss +0 -6
  307. package/src/theme/theme.ts +0 -15
  308. package/src/types.ts +0 -271
  309. package/src/utils/_event.ts +0 -55
  310. package/src/utils/color.ts +0 -67
  311. package/src/utils/columns.ts +0 -142
  312. package/src/utils/customEvents/customEvents.ts +0 -18
  313. package/src/utils/customEvents/events.constant.ts +0 -11
  314. package/src/utils/delete-node.ts +0 -46
  315. package/src/utils/dom-dataset.ts +0 -121
  316. package/src/utils/download.ts +0 -17
  317. package/src/utils/dynamicCSS.ts +0 -192
  318. package/src/utils/editor-container-size.ts +0 -28
  319. package/src/utils/file.ts +0 -112
  320. package/src/utils/getRenderContainer.ts +0 -41
  321. package/src/utils/indent.ts +0 -99
  322. package/src/utils/is-mobile.ts +0 -57
  323. package/src/utils/json.ts +0 -18
  324. package/src/utils/line-height.ts +0 -109
  325. package/src/utils/lru-cache.ts +0 -145
  326. package/src/utils/mitt.ts +0 -114
  327. package/src/utils/node.ts +0 -92
  328. package/src/utils/pdf.ts +0 -72
  329. package/src/utils/plateform.ts +0 -49
  330. package/src/utils/shortId.ts +0 -5
  331. package/src/utils/storage.ts +0 -18
  332. package/src/utils/utils.ts +0 -71
  333. package/src/vite-env.d.ts +0 -3
@@ -1,271 +0,0 @@
1
- /* eslint-disable no-unsafe-optional-chaining */
2
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
3
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
4
-
5
- import { NodeViewWrapper } from '@tiptap/react';
6
- import { clamp, isNumber, throttle } from 'lodash-es';
7
-
8
- import { IMAGE_MAX_SIZE, IMAGE_MIN_SIZE, IMAGE_THROTTLE_WAIT_TIME } from 'reactjs-tiptap-editor-pro/constants';
9
-
10
- interface Size {
11
- width: number
12
- height: number
13
- }
14
-
15
- const ResizeDirection = {
16
- TOP_LEFT: 'tl',
17
- TOP_RIGHT: 'tr',
18
- BOTTOM_LEFT: 'bl',
19
- BOTTOM_RIGHT: 'br',
20
- };
21
-
22
- function ImageView(props: any) {
23
- const [maxSize, setMaxSize] = useState<Size>({
24
- width: IMAGE_MAX_SIZE,
25
- height: IMAGE_MAX_SIZE,
26
- });
27
-
28
- const [originalSize, setOriginalSize] = useState({
29
- width: 0,
30
- height: 0,
31
- });
32
-
33
- const [resizeDirections] = useState<string[]>([
34
- ResizeDirection.TOP_LEFT,
35
- ResizeDirection.TOP_RIGHT,
36
- ResizeDirection.BOTTOM_LEFT,
37
- ResizeDirection.BOTTOM_RIGHT,
38
- ]);
39
-
40
- const [resizing, setResizing] = useState<boolean>(false);
41
-
42
- const [resizerState, setResizerState] = useState({
43
- x: 0,
44
- y: 0,
45
- w: 0,
46
- h: 0,
47
- dir: '',
48
- });
49
-
50
- const { align, inline } = props?.node?.attrs;
51
-
52
- const imgAttrs = useMemo(() => {
53
- const { src, alt, width: w, height: h, flipX, flipY } = props?.node?.attrs;
54
-
55
- const width = isNumber(w) ? `${w}px` : w;
56
- const height = isNumber(h) ? `${h}px` : h;
57
- const transformStyles: any = [];
58
-
59
- if (flipX)
60
- transformStyles.push('rotateX(180deg)');
61
- if (flipY)
62
- transformStyles.push('rotateY(180deg)');
63
- const transform = transformStyles.join(' ');
64
-
65
- return {
66
- src: src || undefined,
67
- alt: alt || undefined,
68
- style: {
69
- width: width || undefined,
70
- height: height || undefined,
71
- transform: transform || 'none',
72
- },
73
- };
74
- }, [props?.node?.attrs]);
75
-
76
- const imageMaxStyle = useMemo(() => {
77
- const {
78
- style: { width },
79
- } = imgAttrs;
80
-
81
- return { width: width === '100%' ? width : undefined };
82
- }, [imgAttrs]);
83
-
84
- function onImageLoad(e: Record<string, any>) {
85
- setOriginalSize({
86
- width: e.target.width,
87
- height: e.target.height,
88
- });
89
- }
90
-
91
- // https://github.com/scrumpy/tiptap/issues/361#issuecomment-540299541
92
- function selectImage() {
93
- const { editor, getPos } = props;
94
- editor.commands.setNodeSelection(getPos());
95
- }
96
-
97
- const getMaxSize = useCallback(
98
- throttle(() => {
99
- const { editor } = props;
100
- const { width } = getComputedStyle(editor.view.dom);
101
- setMaxSize((prev) => {
102
- return {
103
- ...prev,
104
- width: Number.parseInt(width, 10),
105
- };
106
- });
107
- }, IMAGE_THROTTLE_WAIT_TIME),
108
- [props?.editor],
109
- );
110
-
111
- function onMouseDown(e: MouseEvent, dir: string) {
112
- e.preventDefault();
113
- e.stopPropagation();
114
-
115
- const originalWidth = originalSize.width;
116
- const originalHeight = originalSize.height;
117
- const aspectRatio = originalWidth / originalHeight;
118
-
119
- let width = Number(props.node.attrs.width);
120
- let height = Number(props.node.attrs.height);
121
- const maxWidth = maxSize.width;
122
-
123
- if (width && !height) {
124
- width = width > maxWidth ? maxWidth : width;
125
- height = Math.round(width / aspectRatio);
126
- } else if (height && !width) {
127
- width = Math.round(height * aspectRatio);
128
- width = width > maxWidth ? maxWidth : width;
129
- } else if (!width && !height) {
130
- width = originalWidth > maxWidth ? maxWidth : originalWidth;
131
- height = Math.round(width / aspectRatio);
132
- } else {
133
- width = width > maxWidth ? maxWidth : width;
134
- }
135
-
136
- setResizing(true);
137
-
138
- setResizerState({
139
- x: e.clientX,
140
- y: e.clientY,
141
- w: width,
142
- h: height,
143
- dir,
144
- });
145
- }
146
-
147
- const onMouseMove = useCallback(
148
- throttle((e: MouseEvent) => {
149
- e.preventDefault();
150
- e.stopPropagation();
151
-
152
- if (!resizing) {
153
- return;
154
- }
155
-
156
- const { x, w, dir } = resizerState;
157
-
158
- const dx = (e.clientX - x) * (/l/.test(dir) ? -1 : 1);
159
- // const dy = (e.clientY - y) * (/t/.test(dir) ? -1 : 1)
160
-
161
- const width = clamp(w + dx, IMAGE_MIN_SIZE, maxSize.width);
162
- const height = null;
163
-
164
- props.updateAttributes({
165
- width,
166
- height,
167
- });
168
- }, IMAGE_THROTTLE_WAIT_TIME),
169
- [resizing, resizerState, maxSize, props.updateAttributes],
170
- );
171
-
172
- const onMouseUp = useCallback(
173
- (e: MouseEvent) => {
174
- e.preventDefault();
175
- e.stopPropagation();
176
- if (!resizing) {
177
- return;
178
- }
179
-
180
- setResizerState({
181
- x: 0,
182
- y: 0,
183
- w: 0,
184
- h: 0,
185
- dir: '',
186
- });
187
- setResizing(false);
188
-
189
- selectImage();
190
- },
191
- [resizing, selectImage],
192
- );
193
-
194
- const onEvents = useCallback(() => {
195
- document?.addEventListener('mousemove', onMouseMove, true);
196
- document?.addEventListener('mouseup', onMouseUp, true);
197
- }, [onMouseMove, onMouseUp]);
198
-
199
- const offEvents = useCallback(() => {
200
- document?.removeEventListener('mousemove', onMouseMove, true);
201
- document?.removeEventListener('mouseup', onMouseUp, true);
202
- }, [onMouseMove, onMouseUp]);
203
-
204
- useEffect(() => {
205
- if (resizing) {
206
- onEvents();
207
- } else {
208
- offEvents();
209
- }
210
-
211
- return () => {
212
- offEvents();
213
- };
214
- }, [resizing, onEvents, offEvents]);
215
-
216
- const resizeOb: ResizeObserver = useMemo(() => {
217
- return new ResizeObserver(() => getMaxSize());
218
- }, [getMaxSize]);
219
-
220
- useEffect(() => {
221
- resizeOb.observe(props.editor.view.dom);
222
-
223
- return () => {
224
- resizeOb.disconnect();
225
- };
226
- }, [props.editor.view.dom, resizeOb]);
227
-
228
- return (
229
- <NodeViewWrapper
230
- as={inline ? 'span' : 'div'}
231
- className="image-view"
232
- style={{ ...imageMaxStyle, textAlign: align, display: inline ? 'inline' : 'block' }}
233
- >
234
- <div
235
- data-drag-handle
236
- draggable="true"
237
- style={imageMaxStyle}
238
- className={`image-view__body ${props?.selected ? 'image-view__body--focused' : ''} ${
239
- resizing ? 'image-view__body--resizing' : ''
240
- }`}
241
- >
242
- <img
243
- alt={imgAttrs.alt}
244
- className="image-view__body__image block"
245
- height="auto"
246
- onClick={selectImage}
247
- onLoad={onImageLoad}
248
- src={imgAttrs.src}
249
- style={imgAttrs.style}
250
- />
251
-
252
- {props?.editor.view.editable && (props?.selected || resizing) && (
253
- <div className="image-resizer">
254
- {resizeDirections?.map((direction) => {
255
- return (
256
- <span
257
- className={`image-resizer__handler image-resizer__handler--${direction}`}
258
- key={`image-dir-${direction}`}
259
- onMouseDown={(e: any) => onMouseDown(e, direction)}
260
- >
261
- </span>
262
- );
263
- })}
264
- </div>
265
- )}
266
- </div>
267
- </NodeViewWrapper>
268
- );
269
- }
270
-
271
- export default ImageView;
@@ -1 +0,0 @@
1
- export * from './Image';
@@ -1,15 +0,0 @@
1
- import { useStoreUploadImage } from 'reactjs-tiptap-editor-pro/store/store';
2
- import { dispatchEvent } from 'reactjs-tiptap-editor-pro/utils/customEvents/customEvents';
3
- import { EVENTS } from 'reactjs-tiptap-editor-pro/utils/customEvents/events.constant';
4
-
5
- export function useDialogImage() {
6
- const [v] = useStoreUploadImage(store => store.value);
7
-
8
- return v;
9
- }
10
-
11
- export const actionDialogImage = {
12
- setOpen: (id: any, value: boolean) => {
13
- dispatchEvent(EVENTS.UPLOAD_IMAGE(id), value);
14
- },
15
- };
@@ -1,176 +0,0 @@
1
- import { mergeAttributes } from '@tiptap/core';
2
- import type { ImageOptions } from '@tiptap/extension-image';
3
- import TiptapImage from '@tiptap/extension-image';
4
- import { ReactNodeViewRenderer } from '@tiptap/react';
5
-
6
- import ImageGifActionButton from 'reactjs-tiptap-editor-pro/extensions/ImageGif/components/ImageGifActionButton';
7
- import ImageGifView from 'reactjs-tiptap-editor-pro/extensions/ImageGif/components/ImageGifView';
8
-
9
- export interface SetImageAttrsOptions {
10
- src?: string
11
- /** The alternative text for the image. */
12
- alt?: string
13
- /** The title of the image. */
14
- title?: string
15
- /** The width of the image. */
16
- width?: number | string | null
17
- /** The alignment of the image. */
18
- align?: 'left' | 'center' | 'right'
19
- }
20
-
21
- interface ImageGifOptions extends ImageOptions {
22
- /**
23
- * The key for the gif https://giphy.com/
24
- */
25
- GIPHY_API_KEY: string
26
- }
27
-
28
- declare module '@tiptap/core' {
29
- interface Commands<ReturnType> {
30
- imageGifUpload: {
31
- /**
32
- * Add an image gif
33
- */
34
- setImageGif: (options: Partial<SetImageAttrsOptions>) => ReturnType
35
- /**
36
- * Update an image gif
37
- */
38
- updateImageGif: (options: Partial<SetImageAttrsOptions>) => ReturnType
39
- /**
40
- * Set image alignment
41
- */
42
- setAlignImageGif: (align: 'left' | 'center' | 'right') => ReturnType
43
- }
44
- }
45
- }
46
-
47
- export const ImageGif = TiptapImage.extend<ImageGifOptions>({
48
- name: 'imageGif',
49
- addOptions() {
50
- return {
51
- ...this.parent?.(),
52
- inline: false,
53
- content: '',
54
- marks: '',
55
- group: 'block',
56
- GIPHY_API_KEY: '',
57
- draggable: false,
58
- selectable: true,
59
- atom: true,
60
- button: ({ editor, extension, t }: any) => {
61
- const giphyApiKey = extension?.options?.GIPHY_API_KEY || '';
62
-
63
- return {
64
- component: ImageGifActionButton,
65
- componentProps: {
66
- editor,
67
- action: () => {
68
- return;
69
- },
70
- isActive: () => false,
71
- disabled: false,
72
- icon: 'GifIcon',
73
- tooltip: t('editor.imageGif.tooltip'),
74
- giphyApiKey,
75
- },
76
- };
77
- },
78
- };
79
- },
80
- addAttributes() {
81
- return {
82
- ...this.parent?.(),
83
- width: {
84
- default: null,
85
- parseHTML: (element) => {
86
- const width = element.style.width || element.getAttribute('width') || '10';
87
- return width === undefined ? null : Number.parseInt(`${width}`, 10);
88
- },
89
- renderHTML: (attributes) => {
90
- return {
91
- width: attributes.width,
92
- };
93
- },
94
- },
95
- align: {
96
- default: 'center',
97
- parseHTML: element => element.getAttribute('align'),
98
- renderHTML: (attributes) => {
99
- return {
100
- align: attributes.align,
101
- };
102
- },
103
- },
104
- };
105
- },
106
-
107
- addNodeView() {
108
- return ReactNodeViewRenderer(ImageGifView);
109
- },
110
- addCommands() {
111
- return {
112
- ...this.parent?.(),
113
- setImageGif: (options: any) => ({ commands }: any) => {
114
- return commands.insertContent({
115
- type: this.name,
116
- attrs: options,
117
- });
118
- },
119
- updateImageGif:
120
- (options: any) =>
121
- ({ commands }: any) => {
122
- return commands.updateAttributes(this.name, options);
123
- },
124
- setAlignImageGif:
125
- (align: any) =>
126
- ({ commands }: any) => {
127
- return commands.updateAttributes(this.name, { align });
128
- },
129
- };
130
- },
131
- renderHTML({ HTMLAttributes }) {
132
- const { align } = HTMLAttributes;
133
-
134
- const style = align ? `text-align: ${align};` : '';
135
- return [
136
- 'div', // Parent element
137
- {
138
- style,
139
- class: 'imageGIf',
140
- },
141
- [
142
- 'img',
143
- mergeAttributes(
144
- // Always render the `height="auto"`
145
- {
146
- height: 'auto',
147
- },
148
- this.options.HTMLAttributes,
149
- HTMLAttributes,
150
- ),
151
- ],
152
- ];
153
- },
154
- parseHTML() {
155
- return [
156
- {
157
- tag: 'div[class=imageGIf]',
158
- getAttrs: (element) => {
159
- const img = element.querySelector('img');
160
-
161
- const width = img?.getAttribute('width');
162
-
163
- return {
164
- src: img?.getAttribute('src'),
165
- alt: img?.getAttribute('alt'),
166
- title: img?.getAttribute('title'),
167
- width: width ? Number.parseInt(width, 10) : null,
168
- align: img?.getAttribute('align') || element.style.textAlign || null,
169
- };
170
- },
171
- },
172
- ];
173
- },
174
- });
175
-
176
- export default ImageGif;
@@ -1,138 +0,0 @@
1
- import type React from 'react';
2
- import { useCallback, useEffect, useRef, useState } from 'react';
3
-
4
- import { debounce } from 'lodash-es';
5
-
6
- import { ActionButton, Input, Popover, PopoverContent, PopoverTrigger } from 'reactjs-tiptap-editor-pro/components';
7
-
8
- interface IProps {
9
- showClear?: boolean
10
- selectImage: (arg: string) => void
11
- children: React.ReactNode
12
- giphyApiKey: string
13
- }
14
-
15
- function ImageGifWrap({ selectImage, giphyApiKey, children }: IProps) {
16
- const [gifs, setGifs] = useState([]);
17
- const [limit] = useState(15);
18
-
19
- const inputRef = useRef(null);
20
-
21
- const search = (term: any, kind: any = 'search') => {
22
- if (!giphyApiKey) {
23
- return;
24
- }
25
-
26
- const url
27
- = kind === 'search'
28
- ? `https://api.giphy.com/v1/gifs/search?q=${term}`
29
- : `https://api.giphy.com/v1/gifs/trending?q=${term}`;
30
- const link = `${url}&limit=${limit}&api_key=${giphyApiKey}`;
31
-
32
- fetch(link).then(r => r.json()).then((response) => {
33
- // handle success
34
- setGifs(response.data);
35
- })
36
- .catch((error) => {
37
- // handle error
38
- console.log(error);
39
- });
40
- };
41
-
42
- useEffect(() => {
43
- search('', 'trend');
44
- }, []);
45
-
46
- const handleInputChange = useCallback(
47
- debounce((event: React.ChangeEvent<HTMLInputElement>) => {
48
- if (!event.target.value) {
49
- search('', 'trend');
50
- return;
51
- }
52
- // Add your logic here
53
- search(event.target.value);
54
- }, 350), // Adjust the debounce delay as needed
55
- [],
56
- );
57
-
58
- return (
59
- <Popover modal>
60
- <PopoverTrigger asChild>
61
- {children}
62
- </PopoverTrigger>
63
-
64
- <PopoverContent align="start"
65
- className="size-full p-2"
66
- hideWhenDetached
67
- side="bottom"
68
- >
69
-
70
- {
71
- giphyApiKey
72
- ? (
73
- <>
74
- <div className="mb-[10px] w-full">
75
- <Input
76
- onChange={handleInputChange}
77
- placeholder="Search GIF"
78
- ref={inputRef}
79
- type="text"
80
- />
81
- </div>
82
-
83
- <div className="max-h-[280px] overflow-y-auto">
84
- <div className="grid grid-cols-2 gap-1 ">
85
-
86
- {gifs?.length
87
- ? gifs?.map((o: any) => (
88
- <img
89
- alt="giphy"
90
- className="cursor-pointer text-center"
91
- height={o.images.fixed_width_downsampled.height}
92
- key={`giphy-${o.id}`}
93
- onClick={() => selectImage(o)}
94
- src={o.images.fixed_width_downsampled.url}
95
- width={o.images.fixed_width_downsampled.width}
96
- />
97
- ))
98
- : <p>
99
- No GIFs found
100
- </p>}
101
- </div>
102
- </div>
103
- </>
104
- )
105
- : (
106
- <div>
107
- <p>
108
- Missing Giphy API Key
109
- </p>
110
- </div>
111
- )
112
- }
113
- </PopoverContent>
114
- </Popover>
115
- );
116
- }
117
-
118
- export function ImageGifActionButton({ editor, icon, giphyApiKey, ...props }: any) {
119
- const selectImage = (giphyblock: any) => {
120
- const { url } = giphyblock.images.original;
121
-
122
- editor.chain().focus().setImageGif({ src: url }).run();
123
- };
124
-
125
- return (
126
- <ImageGifWrap
127
- giphyApiKey={giphyApiKey}
128
- selectImage={selectImage}
129
- >
130
- <ActionButton
131
- icon={icon}
132
- tooltip={props?.tooltip}
133
- />
134
- </ImageGifWrap>
135
- );
136
- }
137
-
138
- export default ImageGifActionButton;