payload-richtext-tiptap 0.0.143 → 0.0.144

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 (270) hide show
  1. package/LICENSE.md +22 -22
  2. package/README.md +33 -33
  3. package/dist/src/body/StandardArticle.js.map +1 -1
  4. package/dist/src/fields/TiptapEditor/Components.js.map +1 -1
  5. package/dist/src/fields/TiptapEditor/context/EditorContext.js.map +1 -1
  6. package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.d.ts.map +1 -1
  7. package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js +48 -38
  8. package/dist/src/fields/TiptapEditor/extensions/AICommand/AICommand.js.map +1 -1
  9. package/dist/src/fields/TiptapEditor/extensions/AICommand/AIMenuList.js.map +1 -1
  10. package/dist/src/fields/TiptapEditor/extensions/AICommand/CommandButton.js.map +1 -1
  11. package/dist/src/fields/TiptapEditor/extensions/AICommand/groups.js.map +1 -1
  12. package/dist/src/fields/TiptapEditor/extensions/AICommand/index.js.map +1 -1
  13. package/dist/src/fields/TiptapEditor/extensions/AICommand/types.js.map +1 -1
  14. package/dist/src/fields/TiptapEditor/extensions/Audio/Audio.js +5 -5
  15. package/dist/src/fields/TiptapEditor/extensions/Audio/Audio.js.map +1 -1
  16. package/dist/src/fields/TiptapEditor/extensions/Audio/index.js.map +1 -1
  17. package/dist/src/fields/TiptapEditor/extensions/AudioBlock/AudioBlock.js.map +1 -1
  18. package/dist/src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.js.map +1 -1
  19. package/dist/src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockView.js.map +1 -1
  20. package/dist/src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockWidth.js.map +1 -1
  21. package/dist/src/fields/TiptapEditor/extensions/AudioBlock/index.js.map +1 -1
  22. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/BlockquoteFigure.js.map +1 -1
  23. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Design.js.map +1 -1
  24. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Quote/Quote.js.map +1 -1
  25. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/Quote/index.js.map +1 -1
  26. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/QuoteCaption/QuoteCaption.js.map +1 -1
  27. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/QuoteCaption/index.js.map +1 -1
  28. package/dist/src/fields/TiptapEditor/extensions/BlockquoteFigure/index.js.map +1 -1
  29. package/dist/src/fields/TiptapEditor/extensions/Document/Document.js.map +1 -1
  30. package/dist/src/fields/TiptapEditor/extensions/Document/index.js.map +1 -1
  31. package/dist/src/fields/TiptapEditor/extensions/Figcaption/Figcaption.js.map +1 -1
  32. package/dist/src/fields/TiptapEditor/extensions/Figcaption/index.js.map +1 -1
  33. package/dist/src/fields/TiptapEditor/extensions/Figure/Figure.js.map +1 -1
  34. package/dist/src/fields/TiptapEditor/extensions/Figure/index.js.map +1 -1
  35. package/dist/src/fields/TiptapEditor/extensions/FontSize/FontSize.js.map +1 -1
  36. package/dist/src/fields/TiptapEditor/extensions/FontSize/index.js.map +1 -1
  37. package/dist/src/fields/TiptapEditor/extensions/Heading/Heading.js.map +1 -1
  38. package/dist/src/fields/TiptapEditor/extensions/Heading/index.js.map +1 -1
  39. package/dist/src/fields/TiptapEditor/extensions/HorizontalRule/HorizontalRule.js.map +1 -1
  40. package/dist/src/fields/TiptapEditor/extensions/HorizontalRule/index.js.map +1 -1
  41. package/dist/src/fields/TiptapEditor/extensions/Iframe/IframeEmbed.js.map +1 -1
  42. package/dist/src/fields/TiptapEditor/extensions/Iframe/iframe.js.map +1 -1
  43. package/dist/src/fields/TiptapEditor/extensions/Iframe/index.js.map +1 -1
  44. package/dist/src/fields/TiptapEditor/extensions/Iframe/menus/IframeMenu.js.map +1 -1
  45. package/dist/src/fields/TiptapEditor/extensions/Iframe/menus/index.js.map +1 -1
  46. package/dist/src/fields/TiptapEditor/extensions/Image/Image.js.map +1 -1
  47. package/dist/src/fields/TiptapEditor/extensions/Image/index.js.map +1 -1
  48. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/ImageBlock.js.map +1 -1
  49. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.js.map +1 -1
  50. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockView.js.map +1 -1
  51. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockViewClientside.js.map +1 -1
  52. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockWidth.js.map +1 -1
  53. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/index.js.map +1 -1
  54. package/dist/src/fields/TiptapEditor/extensions/ImageUpload/ImageUpload.js.map +1 -1
  55. package/dist/src/fields/TiptapEditor/extensions/ImageUpload/getImageActualSize.js.map +1 -1
  56. package/dist/src/fields/TiptapEditor/extensions/ImageUpload/index.js.map +1 -1
  57. package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUpload.js.map +1 -1
  58. package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/ImageUploader.js.map +1 -1
  59. package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/hooks.js.map +1 -1
  60. package/dist/src/fields/TiptapEditor/extensions/ImageUpload/view/index.js.map +1 -1
  61. package/dist/src/fields/TiptapEditor/extensions/InsideLinks/InsideLink.client.js.map +1 -1
  62. package/dist/src/fields/TiptapEditor/extensions/InsideLinks/InsideLinksComponent.js.map +1 -1
  63. package/dist/src/fields/TiptapEditor/extensions/InsideLinks/index.js.map +1 -1
  64. package/dist/src/fields/TiptapEditor/extensions/InsideLinks/insideLinks.js.map +1 -1
  65. package/dist/src/fields/TiptapEditor/extensions/InsideLinks/menus/InsideLinksMenu.js.map +1 -1
  66. package/dist/src/fields/TiptapEditor/extensions/InsideLinks/menus/index.js.map +1 -1
  67. package/dist/src/fields/TiptapEditor/extensions/Link/Link.js.map +1 -1
  68. package/dist/src/fields/TiptapEditor/extensions/Link/index.js.map +1 -1
  69. package/dist/src/fields/TiptapEditor/extensions/LinkPreview/EditLinkPreviewPopover.js.map +1 -1
  70. package/dist/src/fields/TiptapEditor/extensions/LinkPreview/LinkPreview.js.map +1 -1
  71. package/dist/src/fields/TiptapEditor/extensions/LinkPreview/LinkPreviewEditorPanel.js.map +1 -1
  72. package/dist/src/fields/TiptapEditor/extensions/LinkPreview/index.js.map +1 -1
  73. package/dist/src/fields/TiptapEditor/extensions/LinkPreview/menus/index.js.map +1 -1
  74. package/dist/src/fields/TiptapEditor/extensions/LinkPreview/menus/linkPreviewMenu.js.map +1 -1
  75. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/Column.js.map +1 -1
  76. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/Columns.js +3 -3
  77. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/Columns.js.map +1 -1
  78. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/index.js.map +1 -1
  79. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/menus/ColumnsMenu.js.map +1 -1
  80. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/menus/index.js.map +1 -1
  81. package/dist/src/fields/TiptapEditor/extensions/Paragraph/Paragraph.js.map +1 -1
  82. package/dist/src/fields/TiptapEditor/extensions/Paragraph/index.js.map +1 -1
  83. package/dist/src/fields/TiptapEditor/extensions/Selection/Selection.js.map +1 -1
  84. package/dist/src/fields/TiptapEditor/extensions/Selection/index.js.map +1 -1
  85. package/dist/src/fields/TiptapEditor/extensions/SlashCommand/CommandButton.js.map +1 -1
  86. package/dist/src/fields/TiptapEditor/extensions/SlashCommand/MenuList.js.map +1 -1
  87. package/dist/src/fields/TiptapEditor/extensions/SlashCommand/SlashCommand.js.map +1 -1
  88. package/dist/src/fields/TiptapEditor/extensions/SlashCommand/groups.js.map +1 -1
  89. package/dist/src/fields/TiptapEditor/extensions/SlashCommand/index.js.map +1 -1
  90. package/dist/src/fields/TiptapEditor/extensions/SlashCommand/types.js.map +1 -1
  91. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Facebook/FacebookEmbed.js.map +1 -1
  92. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Facebook/facebook.js.map +1 -1
  93. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Facebook/index.js.map +1 -1
  94. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Instagram/InstagramEmbed.js.map +1 -1
  95. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Instagram/index.js.map +1 -1
  96. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Instagram/instagram.js.map +1 -1
  97. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Linkedin/LinkedinEmbed.js.map +1 -1
  98. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Linkedin/index.js.map +1 -1
  99. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Linkedin/linkedin.js.map +1 -1
  100. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/SocialMediaEmbed.js.map +1 -1
  101. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/SocialMediaEmbedServerside.js.map +1 -1
  102. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Tiktok/TiktokEmbed.js.map +1 -1
  103. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Tiktok/index.js.map +1 -1
  104. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Tiktok/tiktok.js.map +1 -1
  105. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Twitter/TwitterEmbed.js.map +1 -1
  106. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Twitter/index.js.map +1 -1
  107. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Twitter/twitter.js.map +1 -1
  108. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Youtube/YoutubeEmbed.js.map +1 -1
  109. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Youtube/index.js.map +1 -1
  110. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Youtube/youtube.js.map +1 -1
  111. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/index.js.map +1 -1
  112. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/menus/SocialMediaMenu.js.map +1 -1
  113. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/menus/constants.js.map +1 -1
  114. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/menus/index.js.map +1 -1
  115. package/dist/src/fields/TiptapEditor/extensions/Table/Cell.js.map +1 -1
  116. package/dist/src/fields/TiptapEditor/extensions/Table/Header.js.map +1 -1
  117. package/dist/src/fields/TiptapEditor/extensions/Table/Row.js.map +1 -1
  118. package/dist/src/fields/TiptapEditor/extensions/Table/Table.js.map +1 -1
  119. package/dist/src/fields/TiptapEditor/extensions/Table/index.js.map +1 -1
  120. package/dist/src/fields/TiptapEditor/extensions/Table/menus/TableColumn/index.js.map +1 -1
  121. package/dist/src/fields/TiptapEditor/extensions/Table/menus/TableColumn/utils.js.map +1 -1
  122. package/dist/src/fields/TiptapEditor/extensions/Table/menus/TableRow/index.js.map +1 -1
  123. package/dist/src/fields/TiptapEditor/extensions/Table/menus/TableRow/utils.js.map +1 -1
  124. package/dist/src/fields/TiptapEditor/extensions/Table/menus/index.js.map +1 -1
  125. package/dist/src/fields/TiptapEditor/extensions/Table/utils.js.map +1 -1
  126. package/dist/src/fields/TiptapEditor/extensions/TrailingNode/index.js.map +1 -1
  127. package/dist/src/fields/TiptapEditor/extensions/TrailingNode/trailing-node.js.map +1 -1
  128. package/dist/src/fields/TiptapEditor/extensions/Video/Video.js +5 -5
  129. package/dist/src/fields/TiptapEditor/extensions/Video/Video.js.map +1 -1
  130. package/dist/src/fields/TiptapEditor/extensions/Video/index.js.map +1 -1
  131. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/VideoBlock.js.map +1 -1
  132. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockMenu.js.map +1 -1
  133. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockView.js.map +1 -1
  134. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockViewClientside.js.map +1 -1
  135. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockWidth.js.map +1 -1
  136. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/VideoPlayer.js.map +1 -1
  137. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/components/QualityOption.js +9 -9
  138. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/components/QualityOption.js.map +1 -1
  139. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/components/QualitySelector.js +15 -15
  140. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/components/QualitySelector.js.map +1 -1
  141. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/events.d.ts.map +1 -1
  142. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/events.js.map +1 -1
  143. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/index.js.map +1 -1
  144. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/middleware/SourceInterceptor.js.map +1 -1
  145. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/util/SafeSeek.js.map +1 -1
  146. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/index.js.map +1 -1
  147. package/dist/src/fields/TiptapEditor/extensions/extension-kit.d.ts +1 -1
  148. package/dist/src/fields/TiptapEditor/extensions/extension-kit.d.ts.map +1 -1
  149. package/dist/src/fields/TiptapEditor/extensions/extension-kit.js.map +1 -1
  150. package/dist/src/fields/TiptapEditor/extensions/index.js.map +1 -1
  151. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentInlineRenderer.js.map +1 -1
  152. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentSideRenderer.js.map +1 -1
  153. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentSidebarRenderer.js.map +1 -1
  154. package/dist/src/fields/TiptapEditor/extensions/serverside/FacebookServerside.js.map +1 -1
  155. package/dist/src/fields/TiptapEditor/extensions/serverside/IFrameServerside.js.map +1 -1
  156. package/dist/src/fields/TiptapEditor/extensions/serverside/ImageBlockServerside.js.map +1 -1
  157. package/dist/src/fields/TiptapEditor/extensions/serverside/InsideLinkServerside.js.map +1 -1
  158. package/dist/src/fields/TiptapEditor/extensions/serverside/InstagramServerside.js.map +1 -1
  159. package/dist/src/fields/TiptapEditor/extensions/serverside/LinkedinServerside.js.map +1 -1
  160. package/dist/src/fields/TiptapEditor/extensions/serverside/RenderEmbedClientSide.js.map +1 -1
  161. package/dist/src/fields/TiptapEditor/extensions/serverside/ServersideTiptapBody.js.map +1 -1
  162. package/dist/src/fields/TiptapEditor/extensions/serverside/TiktokServerside.js.map +1 -1
  163. package/dist/src/fields/TiptapEditor/extensions/serverside/TwitterBlockServerside.js.map +1 -1
  164. package/dist/src/fields/TiptapEditor/extensions/serverside/VideoBlockServerside.js +5 -5
  165. package/dist/src/fields/TiptapEditor/extensions/serverside/VideoBlockServerside.js.map +1 -1
  166. package/dist/src/fields/TiptapEditor/extensions/serverside/YouTubeServerside.js.map +1 -1
  167. package/dist/src/fields/TiptapEditor/extensions/serverside/getAssetsAspectRatio.js.map +1 -1
  168. package/dist/src/fields/TiptapEditor/extensions/serverside/index.js.map +1 -1
  169. package/dist/src/fields/TiptapEditor/extensions/serverside/useAppendRequiredBlocksMarkerClient.js.map +1 -1
  170. package/dist/src/fields/TiptapEditor/features/BlockEditor/BlockEditor.js.map +1 -1
  171. package/dist/src/fields/TiptapEditor/features/BlockEditor/OneLineEditor.js.map +1 -1
  172. package/dist/src/fields/TiptapEditor/features/BlockEditor/components/EditorHeader.js.map +1 -1
  173. package/dist/src/fields/TiptapEditor/features/BlockEditor/components/EditorInfo.js.map +1 -1
  174. package/dist/src/fields/TiptapEditor/features/BlockEditor/components/OneLiner.js.map +1 -1
  175. package/dist/src/fields/TiptapEditor/features/BlockEditor/index.js.map +1 -1
  176. package/dist/src/fields/TiptapEditor/features/BlockEditor/types.js.map +1 -1
  177. package/dist/src/fields/TiptapEditor/features/menus/ContentItemMenu/ContentItemMenu.js.map +1 -1
  178. package/dist/src/fields/TiptapEditor/features/menus/ContentItemMenu/hooks/useContentItemActions.js.map +1 -1
  179. package/dist/src/fields/TiptapEditor/features/menus/ContentItemMenu/hooks/useData.js.map +1 -1
  180. package/dist/src/fields/TiptapEditor/features/menus/ContentItemMenu/index.js.map +1 -1
  181. package/dist/src/fields/TiptapEditor/features/menus/LinkMenu/LinkMenu.js.map +1 -1
  182. package/dist/src/fields/TiptapEditor/features/menus/LinkMenu/index.js.map +1 -1
  183. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/AITextMenu.js.map +1 -1
  184. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/TextMenu.js.map +1 -1
  185. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ContentTypePicker.js.map +1 -1
  186. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/EditIframeLinkPopover.js.map +1 -1
  187. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/EditLinkPopover.js.map +1 -1
  188. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.js.map +1 -1
  189. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontSizePicker.js.map +1 -1
  190. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/SocialMediaPopover.js.map +1 -1
  191. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-completion-command.js.map +1 -1
  192. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-draft-selector-commands.js.map +1 -1
  193. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js.map +1 -1
  194. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/hooks/useTextmenuCommands.js.map +1 -1
  195. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/hooks/useTextmenuContentTypes.js.map +1 -1
  196. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/hooks/useTextmenuStates.js.map +1 -1
  197. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/index.js.map +1 -1
  198. package/dist/src/fields/TiptapEditor/features/menus/index.js.map +1 -1
  199. package/dist/src/fields/TiptapEditor/features/menus/types.js.map +1 -1
  200. package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js +4 -4
  201. package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js.map +1 -1
  202. package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/index.js.map +1 -1
  203. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.d.ts.map +1 -1
  204. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.js +4 -6
  205. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/AIEditorPanel.js.map +1 -1
  206. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/EditorPreview.js.map +1 -1
  207. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/index.js.map +1 -1
  208. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/markdown.hook.js.map +1 -1
  209. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/utils.js.map +1 -1
  210. package/dist/src/fields/TiptapEditor/features/panels/Colorpicker/ColorButton.js.map +1 -1
  211. package/dist/src/fields/TiptapEditor/features/panels/Colorpicker/Colorpicker.js.map +1 -1
  212. package/dist/src/fields/TiptapEditor/features/panels/Colorpicker/index.js.map +1 -1
  213. package/dist/src/fields/TiptapEditor/features/panels/IframeLinkEditorPanel/IframeLinkEditorPanel.js.map +1 -1
  214. package/dist/src/fields/TiptapEditor/features/panels/IframeLinkEditorPanel/index.js.map +1 -1
  215. package/dist/src/fields/TiptapEditor/features/panels/InsideLinksEditorPanel/InsideLinksEditorPanel.js.map +1 -1
  216. package/dist/src/fields/TiptapEditor/features/panels/InsideLinksEditorPanel/index.js.map +1 -1
  217. package/dist/src/fields/TiptapEditor/features/panels/LinkEditorPanel/LinkEditorPanel.js.map +1 -1
  218. package/dist/src/fields/TiptapEditor/features/panels/LinkEditorPanel/index.js.map +1 -1
  219. package/dist/src/fields/TiptapEditor/features/panels/LinkPreviewPanel/LinkPreviewPanel.js.map +1 -1
  220. package/dist/src/fields/TiptapEditor/features/panels/LinkPreviewPanel/index.js.map +1 -1
  221. package/dist/src/fields/TiptapEditor/features/panels/SocialMediaEditorPanel/SocialMediaEditorPanel.js.map +1 -1
  222. package/dist/src/fields/TiptapEditor/features/panels/SocialMediaEditorPanel/index.js.map +1 -1
  223. package/dist/src/fields/TiptapEditor/features/panels/index.js.map +1 -1
  224. package/dist/src/fields/TiptapEditor/features/ui/Button/Button.js.map +1 -1
  225. package/dist/src/fields/TiptapEditor/features/ui/Button/SpanButton.js.map +1 -1
  226. package/dist/src/fields/TiptapEditor/features/ui/Button/index.js.map +1 -1
  227. package/dist/src/fields/TiptapEditor/features/ui/Dropdown/Dropdown.js.map +1 -1
  228. package/dist/src/fields/TiptapEditor/features/ui/Dropdown/index.js.map +1 -1
  229. package/dist/src/fields/TiptapEditor/features/ui/Icon.js.map +1 -1
  230. package/dist/src/fields/TiptapEditor/features/ui/Loader/Loader.js.map +1 -1
  231. package/dist/src/fields/TiptapEditor/features/ui/Loader/index.js.map +1 -1
  232. package/dist/src/fields/TiptapEditor/features/ui/Loader/types.js.map +1 -1
  233. package/dist/src/fields/TiptapEditor/features/ui/Panel/index.js.map +1 -1
  234. package/dist/src/fields/TiptapEditor/features/ui/PopoverMenu.js.map +1 -1
  235. package/dist/src/fields/TiptapEditor/features/ui/Spinner/Spinner.js.map +1 -1
  236. package/dist/src/fields/TiptapEditor/features/ui/Spinner/index.js.map +1 -1
  237. package/dist/src/fields/TiptapEditor/features/ui/Surface.js.map +1 -1
  238. package/dist/src/fields/TiptapEditor/features/ui/Textarea/Textarea.js.map +1 -1
  239. package/dist/src/fields/TiptapEditor/features/ui/Textarea/index.js.map +1 -1
  240. package/dist/src/fields/TiptapEditor/features/ui/Toggle/Toggle.js.map +1 -1
  241. package/dist/src/fields/TiptapEditor/features/ui/Toggle/index.js.map +1 -1
  242. package/dist/src/fields/TiptapEditor/features/ui/Toolbar.js.map +1 -1
  243. package/dist/src/fields/TiptapEditor/features/ui/Tooltip/index.js.map +1 -1
  244. package/dist/src/fields/TiptapEditor/features/ui/Tooltip/types.js.map +1 -1
  245. package/dist/src/fields/TiptapEditor/features/ui/crazy-spinner.js.map +1 -1
  246. package/dist/src/fields/TiptapEditor/features/ui/scroll-area.js.map +1 -1
  247. package/dist/src/fields/TiptapEditor/hooks/useBlockEditor.js.map +1 -1
  248. package/dist/src/fields/TiptapEditor/hooks/useSidebar.js.map +1 -1
  249. package/dist/src/fields/TiptapEditor/index.js.map +1 -1
  250. package/dist/src/fields/TiptapEditor/lib/api.js.map +1 -1
  251. package/dist/src/fields/TiptapEditor/lib/constants.js.map +1 -1
  252. package/dist/src/fields/TiptapEditor/lib/data/initialContent.js.map +1 -1
  253. package/dist/src/fields/TiptapEditor/lib/extract.js.map +1 -1
  254. package/dist/src/fields/TiptapEditor/lib/tiptapSchema.d.ts +62 -62
  255. package/dist/src/fields/TiptapEditor/lib/tiptapSchema.js.map +1 -1
  256. package/dist/src/fields/TiptapEditor/lib/utils/cssVar.js.map +1 -1
  257. package/dist/src/fields/TiptapEditor/lib/utils/deepMerge.js +8 -8
  258. package/dist/src/fields/TiptapEditor/lib/utils/deepMerge.js.map +1 -1
  259. package/dist/src/fields/TiptapEditor/lib/utils/getRenderContainer.js.map +1 -1
  260. package/dist/src/fields/TiptapEditor/lib/utils/index.js.map +1 -1
  261. package/dist/src/fields/TiptapEditor/lib/utils/isCustomNodeSelected.js.map +1 -1
  262. package/dist/src/fields/TiptapEditor/lib/utils/isRtl.js.map +1 -1
  263. package/dist/src/fields/TiptapEditor/lib/utils/isTextSelected.js.map +1 -1
  264. package/dist/src/fields/TiptapEditor/lib/utils/partialRequired.js.map +1 -1
  265. package/dist/src/fields/TiptapEditor/types.d.js.map +1 -1
  266. package/dist/src/index.js.map +1 -1
  267. package/dist/src/mobile.css +1 -1
  268. package/dist/src/styles.css +1 -1
  269. package/dist/tsconfig.tsbuildinfo +1 -1
  270. package/package.json +204 -200
package/LICENSE.md CHANGED
@@ -1,22 +1,22 @@
1
- MIT License
2
-
3
- Copyright (c) 2018-2022 Payload CMS, LLC <info@payloadcms.com>
4
- Portions Copyright (c) Meta Platforms, Inc. and affiliates.
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to deal
8
- in the Software without restriction, including without limitation the rights
9
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be included in all
14
- copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2018-2022 Payload CMS, LLC <info@payloadcms.com>
4
+ Portions Copyright (c) Meta Platforms, Inc. and affiliates.
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
package/README.md CHANGED
@@ -1,33 +1,33 @@
1
- # Tiptap Editor for payload and react
2
-
3
- This package provides a simple way to use tiptap editor in react and payloadcms
4
-
5
- ## Setup
6
-
7
- ### Tiptap Pro Authentication
8
-
9
- This package uses Tiptap Pro features that require authentication to access private repositories. To set this up:
10
-
11
- 1. Copy the `.npmrc.template` file to create your own `.npmrc` file:
12
-
13
- ```bash
14
- cp .npmrc.template .npmrc
15
- ```
16
-
17
- 2. Set up the `TIPTAP_AUTH_TOKEN` environment variable with your Tiptap authentication token:
18
-
19
- **For local development:**
20
- Add to your shell profile (e.g., `~/.zshrc` or `~/.bash_profile`):
21
-
22
- ```bash
23
- export TIPTAP_AUTH_TOKEN=your-actual-token
24
- ```
25
-
26
- Then restart your terminal or run `source ~/.zshrc` (or equivalent for your shell).
27
-
28
- **For CI/CD environments:**
29
- Add the token as a secret environment variable in your CI platform settings.
30
-
31
- 3. The `.npmrc` file is excluded from git to prevent committing sensitive credentials.
32
-
33
- **NOTE:** This package is a WIP and is not currently extensible.
1
+ # Tiptap Editor for payload and react
2
+
3
+ This package provides a simple way to use tiptap editor in react and payloadcms
4
+
5
+ ## Setup
6
+
7
+ ### Tiptap Pro Authentication
8
+
9
+ This package uses Tiptap Pro features that require authentication to access private repositories. To set this up:
10
+
11
+ 1. Copy the `.npmrc.template` file to create your own `.npmrc` file:
12
+
13
+ ```bash
14
+ cp .npmrc.template .npmrc
15
+ ```
16
+
17
+ 2. Set up the `TIPTAP_AUTH_TOKEN` environment variable with your Tiptap authentication token:
18
+
19
+ **For local development:**
20
+ Add to your shell profile (e.g., `~/.zshrc` or `~/.bash_profile`):
21
+
22
+ ```bash
23
+ export TIPTAP_AUTH_TOKEN=your-actual-token
24
+ ```
25
+
26
+ Then restart your terminal or run `source ~/.zshrc` (or equivalent for your shell).
27
+
28
+ **For CI/CD environments:**
29
+ Add the token as a secret environment variable in your CI platform settings.
30
+
31
+ 3. The `.npmrc` file is excluded from git to prevent committing sensitive credentials.
32
+
33
+ **NOTE:** This package is a WIP and is not currently extensible.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/body/StandardArticle.tsx"],"sourcesContent":["'use client'\nimport clsx from \"clsx\";\nimport { NextFontWithVariable } from \"next/dist/compiled/@next/font\";\n// import '../styles/globals.css';\nimport { ArticleBody } from \"./ArticleBody.js\";\n\n// Font files can be colocated inside of `pages`\n\nexport function isRTL(locale: string) {\n if (\n locale.startsWith('ar') ||\n locale.startsWith('fa') ||\n locale.startsWith('ur') ||\n locale.startsWith('ps') ||\n locale.startsWith('he') ||\n locale.startsWith('ui')\n ) {\n return true;\n }\n return false;\n\n}\n\nimport en from '../fonts/font.en.js'\nimport ar from '../fonts/font.ar.js'\nimport fa from '../fonts/font.fa.js'\nimport ur from '../fonts/font.ur.js'\nimport ps from '../fonts/font.ps.js'\nconst localFonts = {\n en: en,\n ar: ar,\n fa: fa,\n ur: ur,\n ps: ps,\n}\n\n// console.log(\"LCOA\", localFonts)\n\n\nexport const StandardArticle = async ({ body, locale }) => {\n const dir = isRTL(locale) ? 'rtl' : 'ltr';\n let fonts;\n try {\n if (['en', 'ar', 'fa', 'ur', 'ps'].includes(locale)) {\n fonts = localFonts[locale] as NextFontWithVariable[];\n } else {\n fonts = localFonts?.en as NextFontWithVariable[];\n }\n } catch {\n fonts = localFonts?.en as NextFontWithVariable[];\n }\n return (\n <html dir={dir} lang={locale}>\n <head>\n\n <script src=\"https://cdn.tailwindcss.com\"></script>\n <link href=\"https://cdn.jsdelivr.net/npm/payload-richtext-tiptap/dist/src/globals.css\" rel=\"stylesheet\" />\n <link href=\"https://cdn.jsdelivr.net/npm/payload-richtext-tiptap/dist/src/article-custom.css\" rel=\"stylesheet\" />\n\n </head>\n\n <body\n className={clsx(\n 'w-full overflow-x-hidden',\n // fonts.map(f => f.variable).join(' '),\n // fonts[0].className,\n )}\n >\n <main\n id=\"article-standard-wrapper\"\n className=\"min-h-fit xl:min-h-[100vh] pt-10 pb-6 md:pb-9 lg:pb-12 xl:pb-20\"\n >\n\n <div className=\"flex flex-col gap-6 md:gap-9 xl:gap-12 items-center mx-auto mt-8\">\n {/* Article Content */}\n <section className=\"w-full flex justify-center\">\n <div className=\"w-full max-w-full\">\n <div className=\"w-full flex flex-row justify-center gap-6 overflow-hidden pt-5\">\n <ArticleBody\n body={body}\n />\n </div>\n </div>\n </section>\n\n </div>\n </main>\n <script src=\"https://vjs.zencdn.net/8.16.1/video.min.js\"></script>\n\n </body>\n </html>\n\n )\n}"],"names":["clsx","ArticleBody","isRTL","locale","startsWith","en","ar","fa","ur","ps","localFonts","StandardArticle","body","dir","fonts","includes","html","lang","head","script","src","link","href","rel","className","main","id","div","section"],"mappings":"AAAA;;AACA,OAAOA,UAAU,OAAO;AAExB,kCAAkC;AAClC,SAASC,WAAW,QAAQ,mBAAmB;AAE/C,gDAAgD;AAEhD,OAAO,SAASC,MAAMC,MAAc;IAChC,IACIA,OAAOC,UAAU,CAAC,SAClBD,OAAOC,UAAU,CAAC,SAClBD,OAAOC,UAAU,CAAC,SAClBD,OAAOC,UAAU,CAAC,SAClBD,OAAOC,UAAU,CAAC,SAClBD,OAAOC,UAAU,CAAC,OACpB;QACE,OAAO;IACX;IACA,OAAO;AAEX;AAEA,OAAOC,QAAQ,sBAAqB;AACpC,OAAOC,QAAQ,sBAAqB;AACpC,OAAOC,QAAQ,sBAAqB;AACpC,OAAOC,QAAQ,sBAAqB;AACpC,OAAOC,QAAQ,sBAAqB;AACpC,MAAMC,aAAa;IACfL,IAAIA;IACJC,IAAIA;IACJC,IAAIA;IACJC,IAAIA;IACJC,IAAIA;AACR;AAEA,kCAAkC;AAGlC,OAAO,MAAME,kBAAkB,OAAO,EAAEC,IAAI,EAAET,MAAM,EAAE;IAClD,MAAMU,MAAMX,MAAMC,UAAU,QAAQ;IACpC,IAAIW;IACJ,IAAI;QACA,IAAI;YAAC;YAAM;YAAM;YAAM;YAAM;SAAK,CAACC,QAAQ,CAACZ,SAAS;YACjDW,QAAQJ,UAAU,CAACP,OAAO;QAC9B,OAAO;YACHW,QAAQJ,YAAYL;QACxB;IACJ,EAAE,OAAM;QACJS,QAAQJ,YAAYL;IACxB;IACA,qBACI,MAACW;QAAKH,KAAKA;QAAKI,MAAMd;;0BAClB,MAACe;;kCAEG,KAACC;wBAAOC,KAAI;;kCACZ,KAACC;wBAAKC,MAAK;wBAA4EC,KAAI;;kCAC3F,KAACF;wBAAKC,MAAK;wBAAmFC,KAAI;;;;0BAItG,MAACX;gBACGY,WAAWxB,KACP;;kCAKJ,KAACyB;wBACGC,IAAG;wBACHF,WAAU;kCAGV,cAAA,KAACG;4BAAIH,WAAU;sCAEX,cAAA,KAACI;gCAAQJ,WAAU;0CACf,cAAA,KAACG;oCAAIH,WAAU;8CACX,cAAA,KAACG;wCAAIH,WAAU;kDACX,cAAA,KAACvB;4CACGW,MAAMA;;;;;;;kCAQ9B,KAACO;wBAAOC,KAAI;;;;;;AAM5B,EAAC"}
1
+ {"version":3,"sources":["../../../src/body/StandardArticle.tsx"],"sourcesContent":["'use client'\r\nimport clsx from \"clsx\";\r\nimport { NextFontWithVariable } from \"next/dist/compiled/@next/font\";\r\n// import '../styles/globals.css';\r\nimport { ArticleBody } from \"./ArticleBody.js\";\r\n\r\n// Font files can be colocated inside of `pages`\r\n\r\nexport function isRTL(locale: string) {\r\n if (\r\n locale.startsWith('ar') ||\r\n locale.startsWith('fa') ||\r\n locale.startsWith('ur') ||\r\n locale.startsWith('ps') ||\r\n locale.startsWith('he') ||\r\n locale.startsWith('ui')\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n\r\n}\r\n\r\nimport en from '../fonts/font.en.js'\r\nimport ar from '../fonts/font.ar.js'\r\nimport fa from '../fonts/font.fa.js'\r\nimport ur from '../fonts/font.ur.js'\r\nimport ps from '../fonts/font.ps.js'\r\nconst localFonts = {\r\n en: en,\r\n ar: ar,\r\n fa: fa,\r\n ur: ur,\r\n ps: ps,\r\n}\r\n\r\n// console.log(\"LCOA\", localFonts)\r\n\r\n\r\nexport const StandardArticle = async ({ body, locale }) => {\r\n const dir = isRTL(locale) ? 'rtl' : 'ltr';\r\n let fonts;\r\n try {\r\n if (['en', 'ar', 'fa', 'ur', 'ps'].includes(locale)) {\r\n fonts = localFonts[locale] as NextFontWithVariable[];\r\n } else {\r\n fonts = localFonts?.en as NextFontWithVariable[];\r\n }\r\n } catch {\r\n fonts = localFonts?.en as NextFontWithVariable[];\r\n }\r\n return (\r\n <html dir={dir} lang={locale}>\r\n <head>\r\n\r\n <script src=\"https://cdn.tailwindcss.com\"></script>\r\n <link href=\"https://cdn.jsdelivr.net/npm/payload-richtext-tiptap/dist/src/globals.css\" rel=\"stylesheet\" />\r\n <link href=\"https://cdn.jsdelivr.net/npm/payload-richtext-tiptap/dist/src/article-custom.css\" rel=\"stylesheet\" />\r\n\r\n </head>\r\n\r\n <body\r\n className={clsx(\r\n 'w-full overflow-x-hidden',\r\n // fonts.map(f => f.variable).join(' '),\r\n // fonts[0].className,\r\n )}\r\n >\r\n <main\r\n id=\"article-standard-wrapper\"\r\n className=\"min-h-fit xl:min-h-[100vh] pt-10 pb-6 md:pb-9 lg:pb-12 xl:pb-20\"\r\n >\r\n\r\n <div className=\"flex flex-col gap-6 md:gap-9 xl:gap-12 items-center mx-auto mt-8\">\r\n {/* Article Content */}\r\n <section className=\"w-full flex justify-center\">\r\n <div className=\"w-full max-w-full\">\r\n <div className=\"w-full flex flex-row justify-center gap-6 overflow-hidden pt-5\">\r\n <ArticleBody\r\n body={body}\r\n />\r\n </div>\r\n </div>\r\n </section>\r\n\r\n </div>\r\n </main>\r\n <script src=\"https://vjs.zencdn.net/8.16.1/video.min.js\"></script>\r\n\r\n </body>\r\n </html>\r\n\r\n )\r\n}"],"names":["clsx","ArticleBody","isRTL","locale","startsWith","en","ar","fa","ur","ps","localFonts","StandardArticle","body","dir","fonts","includes","html","lang","head","script","src","link","href","rel","className","main","id","div","section"],"mappings":"AAAA;;AACA,OAAOA,UAAU,OAAO;AAExB,kCAAkC;AAClC,SAASC,WAAW,QAAQ,mBAAmB;AAE/C,gDAAgD;AAEhD,OAAO,SAASC,MAAMC,MAAc;IAChC,IACIA,OAAOC,UAAU,CAAC,SAClBD,OAAOC,UAAU,CAAC,SAClBD,OAAOC,UAAU,CAAC,SAClBD,OAAOC,UAAU,CAAC,SAClBD,OAAOC,UAAU,CAAC,SAClBD,OAAOC,UAAU,CAAC,OACpB;QACE,OAAO;IACX;IACA,OAAO;AAEX;AAEA,OAAOC,QAAQ,sBAAqB;AACpC,OAAOC,QAAQ,sBAAqB;AACpC,OAAOC,QAAQ,sBAAqB;AACpC,OAAOC,QAAQ,sBAAqB;AACpC,OAAOC,QAAQ,sBAAqB;AACpC,MAAMC,aAAa;IACfL,IAAIA;IACJC,IAAIA;IACJC,IAAIA;IACJC,IAAIA;IACJC,IAAIA;AACR;AAEA,kCAAkC;AAGlC,OAAO,MAAME,kBAAkB,OAAO,EAAEC,IAAI,EAAET,MAAM,EAAE;IAClD,MAAMU,MAAMX,MAAMC,UAAU,QAAQ;IACpC,IAAIW;IACJ,IAAI;QACA,IAAI;YAAC;YAAM;YAAM;YAAM;YAAM;SAAK,CAACC,QAAQ,CAACZ,SAAS;YACjDW,QAAQJ,UAAU,CAACP,OAAO;QAC9B,OAAO;YACHW,QAAQJ,YAAYL;QACxB;IACJ,EAAE,OAAM;QACJS,QAAQJ,YAAYL;IACxB;IACA,qBACI,MAACW;QAAKH,KAAKA;QAAKI,MAAMd;;0BAClB,MAACe;;kCAEG,KAACC;wBAAOC,KAAI;;kCACZ,KAACC;wBAAKC,MAAK;wBAA4EC,KAAI;;kCAC3F,KAACF;wBAAKC,MAAK;wBAAmFC,KAAI;;;;0BAItG,MAACX;gBACGY,WAAWxB,KACP;;kCAKJ,KAACyB;wBACGC,IAAG;wBACHF,WAAU;kCAGV,cAAA,KAACG;4BAAIH,WAAU;sCAEX,cAAA,KAACI;gCAAQJ,WAAU;0CACf,cAAA,KAACG;oCAAIH,WAAU;8CACX,cAAA,KAACG;wCAAIH,WAAU;kDACX,cAAA,KAACvB;4CACGW,MAAMA;;;;;;;kCAQ9B,KAACO;wBAAOC,KAAI;;;;;;AAM5B,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/TiptapEditor/Components.tsx"],"sourcesContent":["\"use client\";\nimport { useCallback, useEffect, useState } from \"react\";\n\n// import 'cal-sans'\n\n// import '@fontsource/inter/100.css'\n// import '@fontsource/inter/200.css'\n// import '@fontsource/inter/300.css'\n// import '@fontsource/inter/400.css'\n// import '@fontsource/inter/500.css'\n// import '@fontsource/inter/600.css'\n// import '@fontsource/inter/700.css'\n// import { BlockEditor } from './features/BlockEditor'\nimport { useField } from \"@payloadcms/ui\";\nimport { BlockEditor } from \"./features/BlockEditor/BlockEditor.js\";\n\n// import \"../../styles.css\";\nimport { CustomComponent, JSONField, ServerProps } from \"payload\";\nimport i18next from \"i18next\";\n\ntype Props = JSONField & ServerProps;\n\nconst useDarkmode = () => {\n const [isDarkMode, setIsDarkMode] = useState<boolean>(\n typeof window !== \"undefined\"\n ? document.documentElement.getAttribute(\"data-theme\") === \"dark\"\n : false\n );\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handleChange = () => setIsDarkMode(mediaQuery.matches);\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n useEffect(() => {\n document.documentElement.classList.toggle(\"dark\", isDarkMode);\n }, [isDarkMode]);\n\n const toggleDarkMode = useCallback(\n () => setIsDarkMode((isDark) => !isDark),\n []\n );\n const lightMode = useCallback(() => setIsDarkMode(false), []);\n const darkMode = useCallback(() => setIsDarkMode(true), []);\n\n return {\n isDarkMode,\n toggleDarkMode,\n lightMode,\n darkMode,\n };\n};\n\nexport const EditorComponent: CustomComponent = (props) => {\n const { value, setValue } = useField<any>({\n path: props.name,\n });\n\n useDarkmode();\n const hasCollab = false;\n return (\n <div\n lang={i18next.language}\n className=\"editor-tiptap content-field content-field-disabled\"\n style={{ width: \"100%\", height: \"100%\", overflow: \"visible\" }}\n >\n {/* {DarkModeSwitcher} */}\n {/* <FieldLabel label={props?.label ?? capitalize(props?.name) ?? ''} /> */}\n <BlockEditor\n hasCollab={hasCollab}\n content={value}\n openAssetHQHandler={(listener) => { }}\n handleChange={(value) => {\n setValue(value);\n }}\n />\n </div>\n );\n};\n"],"names":["useCallback","useEffect","useState","useField","BlockEditor","i18next","useDarkmode","isDarkMode","setIsDarkMode","window","document","documentElement","getAttribute","mediaQuery","matchMedia","handleChange","matches","addEventListener","removeEventListener","classList","toggle","toggleDarkMode","isDark","lightMode","darkMode","EditorComponent","props","value","setValue","path","name","hasCollab","div","lang","language","className","style","width","height","overflow","content","openAssetHQHandler","listener"],"mappings":"AAAA;;AACA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAEzD,oBAAoB;AAEpB,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,uDAAuD;AACvD,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,WAAW,QAAQ,wCAAwC;AAIpE,OAAOC,aAAa,UAAU;AAI9B,MAAMC,cAAc;IAClB,MAAM,CAACC,YAAYC,cAAc,GAAGN,SAClC,OAAOO,WAAW,cACdC,SAASC,eAAe,CAACC,YAAY,CAAC,kBAAkB,SACxD;IAGNX,UAAU;QACR,MAAMY,aAAaJ,OAAOK,UAAU,CAAC;QACrC,MAAMC,eAAe,IAAMP,cAAcK,WAAWG,OAAO;QAC3DH,WAAWI,gBAAgB,CAAC,UAAUF;QACtC,OAAO,IAAMF,WAAWK,mBAAmB,CAAC,UAAUH;IACxD,GAAG,EAAE;IAELd,UAAU;QACRS,SAASC,eAAe,CAACQ,SAAS,CAACC,MAAM,CAAC,QAAQb;IACpD,GAAG;QAACA;KAAW;IAEf,MAAMc,iBAAiBrB,YACrB,IAAMQ,cAAc,CAACc,SAAW,CAACA,SACjC,EAAE;IAEJ,MAAMC,YAAYvB,YAAY,IAAMQ,cAAc,QAAQ,EAAE;IAC5D,MAAMgB,WAAWxB,YAAY,IAAMQ,cAAc,OAAO,EAAE;IAE1D,OAAO;QACLD;QACAc;QACAE;QACAC;IACF;AACF;AAEA,OAAO,MAAMC,kBAAmC,CAACC;IAC/C,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGzB,SAAc;QACxC0B,MAAMH,MAAMI,IAAI;IAClB;IAEAxB;IACA,MAAMyB,YAAY;IAClB,qBACE,KAACC;QACCC,MAAM5B,QAAQ6B,QAAQ;QACtBC,WAAU;QACVC,OAAO;YAAEC,OAAO;YAAQC,QAAQ;YAAQC,UAAU;QAAU;kBAI5D,cAAA,KAACnC;YACC2B,WAAWA;YACXS,SAASb;YACTc,oBAAoB,CAACC,YAAe;YACpC3B,cAAc,CAACY;gBACbC,SAASD;YACX;;;AAIR,EAAE"}
1
+ {"version":3,"sources":["../../../../src/fields/TiptapEditor/Components.tsx"],"sourcesContent":["\"use client\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\n\r\n// import 'cal-sans'\r\n\r\n// import '@fontsource/inter/100.css'\r\n// import '@fontsource/inter/200.css'\r\n// import '@fontsource/inter/300.css'\r\n// import '@fontsource/inter/400.css'\r\n// import '@fontsource/inter/500.css'\r\n// import '@fontsource/inter/600.css'\r\n// import '@fontsource/inter/700.css'\r\n// import { BlockEditor } from './features/BlockEditor'\r\nimport { useField } from \"@payloadcms/ui\";\r\nimport { BlockEditor } from \"./features/BlockEditor/BlockEditor.js\";\r\n\r\n// import \"../../styles.css\";\r\nimport { CustomComponent, JSONField, ServerProps } from \"payload\";\r\nimport i18next from \"i18next\";\r\n\r\ntype Props = JSONField & ServerProps;\r\n\r\nconst useDarkmode = () => {\r\n const [isDarkMode, setIsDarkMode] = useState<boolean>(\r\n typeof window !== \"undefined\"\r\n ? document.documentElement.getAttribute(\"data-theme\") === \"dark\"\r\n : false\r\n );\r\n\r\n useEffect(() => {\r\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\r\n const handleChange = () => setIsDarkMode(mediaQuery.matches);\r\n mediaQuery.addEventListener(\"change\", handleChange);\r\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\r\n }, []);\r\n\r\n useEffect(() => {\r\n document.documentElement.classList.toggle(\"dark\", isDarkMode);\r\n }, [isDarkMode]);\r\n\r\n const toggleDarkMode = useCallback(\r\n () => setIsDarkMode((isDark) => !isDark),\r\n []\r\n );\r\n const lightMode = useCallback(() => setIsDarkMode(false), []);\r\n const darkMode = useCallback(() => setIsDarkMode(true), []);\r\n\r\n return {\r\n isDarkMode,\r\n toggleDarkMode,\r\n lightMode,\r\n darkMode,\r\n };\r\n};\r\n\r\nexport const EditorComponent: CustomComponent = (props) => {\r\n const { value, setValue } = useField<any>({\r\n path: props.name,\r\n });\r\n\r\n useDarkmode();\r\n const hasCollab = false;\r\n return (\r\n <div\r\n lang={i18next.language}\r\n className=\"editor-tiptap content-field content-field-disabled\"\r\n style={{ width: \"100%\", height: \"100%\", overflow: \"visible\" }}\r\n >\r\n {/* {DarkModeSwitcher} */}\r\n {/* <FieldLabel label={props?.label ?? capitalize(props?.name) ?? ''} /> */}\r\n <BlockEditor\r\n hasCollab={hasCollab}\r\n content={value}\r\n openAssetHQHandler={(listener) => { }}\r\n handleChange={(value) => {\r\n setValue(value);\r\n }}\r\n />\r\n </div>\r\n );\r\n};\r\n"],"names":["useCallback","useEffect","useState","useField","BlockEditor","i18next","useDarkmode","isDarkMode","setIsDarkMode","window","document","documentElement","getAttribute","mediaQuery","matchMedia","handleChange","matches","addEventListener","removeEventListener","classList","toggle","toggleDarkMode","isDark","lightMode","darkMode","EditorComponent","props","value","setValue","path","name","hasCollab","div","lang","language","className","style","width","height","overflow","content","openAssetHQHandler","listener"],"mappings":"AAAA;;AACA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAEzD,oBAAoB;AAEpB,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,uDAAuD;AACvD,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,WAAW,QAAQ,wCAAwC;AAIpE,OAAOC,aAAa,UAAU;AAI9B,MAAMC,cAAc;IAClB,MAAM,CAACC,YAAYC,cAAc,GAAGN,SAClC,OAAOO,WAAW,cACdC,SAASC,eAAe,CAACC,YAAY,CAAC,kBAAkB,SACxD;IAGNX,UAAU;QACR,MAAMY,aAAaJ,OAAOK,UAAU,CAAC;QACrC,MAAMC,eAAe,IAAMP,cAAcK,WAAWG,OAAO;QAC3DH,WAAWI,gBAAgB,CAAC,UAAUF;QACtC,OAAO,IAAMF,WAAWK,mBAAmB,CAAC,UAAUH;IACxD,GAAG,EAAE;IAELd,UAAU;QACRS,SAASC,eAAe,CAACQ,SAAS,CAACC,MAAM,CAAC,QAAQb;IACpD,GAAG;QAACA;KAAW;IAEf,MAAMc,iBAAiBrB,YACrB,IAAMQ,cAAc,CAACc,SAAW,CAACA,SACjC,EAAE;IAEJ,MAAMC,YAAYvB,YAAY,IAAMQ,cAAc,QAAQ,EAAE;IAC5D,MAAMgB,WAAWxB,YAAY,IAAMQ,cAAc,OAAO,EAAE;IAE1D,OAAO;QACLD;QACAc;QACAE;QACAC;IACF;AACF;AAEA,OAAO,MAAMC,kBAAmC,CAACC;IAC/C,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGzB,SAAc;QACxC0B,MAAMH,MAAMI,IAAI;IAClB;IAEAxB;IACA,MAAMyB,YAAY;IAClB,qBACE,KAACC;QACCC,MAAM5B,QAAQ6B,QAAQ;QACtBC,WAAU;QACVC,OAAO;YAAEC,OAAO;YAAQC,QAAQ;YAAQC,UAAU;QAAU;kBAI5D,cAAA,KAACnC;YACC2B,WAAWA;YACXS,SAASb;YACTc,oBAAoB,CAACC,YAAe;YACpC3B,cAAc,CAACY;gBACbC,SAASD;YACX;;;AAIR,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/fields/TiptapEditor/context/EditorContext.ts"],"sourcesContent":["'use client'\nimport { createContext } from 'react'\n\nexport const EditorContext = createContext({})\n"],"names":["createContext","EditorContext"],"mappings":"AAAA;AACA,SAASA,aAAa,QAAQ,QAAO;AAErC,OAAO,MAAMC,gBAAgBD,cAAc,CAAC,GAAE"}
1
+ {"version":3,"sources":["../../../../../src/fields/TiptapEditor/context/EditorContext.ts"],"sourcesContent":["'use client'\r\nimport { createContext } from 'react'\r\n\r\nexport const EditorContext = createContext({})\r\n"],"names":["createContext","EditorContext"],"mappings":"AAAA;AACA,SAASA,aAAa,QAAQ,QAAO;AAErC,OAAO,MAAMC,gBAAgBD,cAAc,CAAC,GAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"AICommand.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/AICommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,SAAS,EAAE,MAAM,cAAc,CAAA;AAchD,eAAO,MAAM,SAAS,qBA4RpB,CAAA;AAEF,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"AICommand.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/AICommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,SAAS,EAAE,MAAM,cAAc,CAAA;AAchD,eAAO,MAAM,SAAS,qBAwSpB,CAAA;AAEF,eAAe,SAAS,CAAA"}
@@ -12,36 +12,7 @@ let popupSelection;
12
12
  export const AICommand = Extension.create({
13
13
  name: extensionName,
14
14
  priority: 200,
15
- onCreate () {
16
- const t = tippy;
17
- popup = t('body', {
18
- interactive: true,
19
- trigger: 'manual',
20
- placement: 'bottom-start',
21
- theme: 'slash-command',
22
- // maxWidth: "16rem",
23
- offset: [
24
- 0,
25
- -16
26
- ],
27
- popperOptions: {
28
- strategy: 'fixed',
29
- modifiers: [
30
- {
31
- name: 'flip',
32
- enabled: false
33
- }
34
- ]
35
- },
36
- onHidden: (instance)=>{
37
- const selection = this.editor.state.selection;
38
- this.editor?.chain()?.focus()?.insertContentAt({
39
- from: popupSelection.from - 1,
40
- to: popupSelection.to
41
- }, ' ')?.insertContentAt(selection.to, this?.editor?.storage?.aiCommand?.completion?.content ?? [])?.run();
42
- }
43
- });
44
- },
15
+ onCreate () {},
45
16
  addProseMirrorPlugins () {
46
17
  return [
47
18
  Suggestion({
@@ -111,6 +82,46 @@ export const AICommand = Extension.create({
111
82
  let scrollHandler = null;
112
83
  return {
113
84
  onStart: (props)=>{
85
+ const editor = props.editor;
86
+ const t = tippy;
87
+ popup = t('body', {
88
+ interactive: true,
89
+ trigger: 'manual',
90
+ placement: 'bottom-start',
91
+ theme: 'slash-command',
92
+ // maxWidth: "16rem",
93
+ offset: [
94
+ 0,
95
+ -16
96
+ ],
97
+ popperOptions: {
98
+ strategy: 'fixed',
99
+ modifiers: [
100
+ {
101
+ name: 'flip',
102
+ enabled: false
103
+ }
104
+ ]
105
+ },
106
+ editor: editor,
107
+ onHide (instance) {
108
+ try {
109
+ const editorRef = instance.props.editor;
110
+ const completion = editorRef?.storage?.aiCommand?.completion ?? [];
111
+ const selection = editorRef?.state?.selection;
112
+ if (!completion || completion === '') {
113
+ return;
114
+ }
115
+ editorRef?.chain().focus().insertContentAt({
116
+ from: popupSelection.from - 1,
117
+ to: popupSelection.to
118
+ }, ' ').insertContentAt(popupSelection.to, completion).run();
119
+ props.editor.storage.aiCommand.completion = '';
120
+ } catch (e) {
121
+ console.log('Error', e);
122
+ }
123
+ }
124
+ });
114
125
  component = new ReactRenderer(AIMenuList, {
115
126
  props,
116
127
  editor: props.editor
@@ -145,7 +156,7 @@ export const AICommand = Extension.create({
145
156
  popup?.[0].setProps({
146
157
  getReferenceClientRect,
147
158
  appendTo: ()=>document.body,
148
- content: component.element
159
+ content: component?.element
149
160
  });
150
161
  const selection = this?.editor?.state?.selection;
151
162
  popupSelection = {
@@ -154,8 +165,8 @@ export const AICommand = Extension.create({
154
165
  };
155
166
  popup?.[0].show();
156
167
  },
157
- onUpdate (props) {
158
- component.updateProps(props);
168
+ onUpdate: (props)=>{
169
+ component?.updateProps(props);
159
170
  const { view } = props.editor;
160
171
  const editorNode = view.dom;
161
172
  const getReferenceClientRect = ()=>{
@@ -188,7 +199,7 @@ export const AICommand = Extension.create({
188
199
  getReferenceClientRect
189
200
  });
190
201
  },
191
- onKeyDown (props) {
202
+ onKeyDown: (props)=>{
192
203
  if (props.event.key === 'Escape') {
193
204
  popup?.[0].hide();
194
205
  return true;
@@ -196,10 +207,9 @@ export const AICommand = Extension.create({
196
207
  if (!popup?.[0].state.isShown) {
197
208
  popup?.[0].show();
198
209
  }
199
- return component.ref?.onKeyDown(props);
210
+ return component?.ref?.onKeyDown(props);
200
211
  },
201
- onExit (props) {
202
- popup?.[0].hide();
212
+ onExit: (props)=>{
203
213
  if (scrollHandler) {
204
214
  const { view } = props.editor;
205
215
  view.dom.parentElement?.removeEventListener('scroll', scrollHandler);
@@ -207,7 +217,7 @@ export const AICommand = Extension.create({
207
217
  props.editor.storage.aiCommand.active = false;
208
218
  props.editor.storage.aiCommand.userPrompt = '';
209
219
  props.editor.storage.aiCommand.completion = '';
210
- component.destroy();
220
+ component?.destroy();
211
221
  }
212
222
  };
213
223
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/AICommand.ts"],"sourcesContent":["'use client'\nimport { Editor, Extension } from '@tiptap/core'\nimport { PluginKey } from '@tiptap/pm/state'\nimport { ReactRenderer } from '@tiptap/react'\nimport Suggestion, { SuggestionKeyDownProps, SuggestionProps } from '@tiptap/suggestion'\nimport tippy from 'tippy.js'\n\nimport AIMenuList from './AIMenuList.js'\n// import { AICommandPanel } from \"../../features/panels/AICommandPanel/AICommandPanel.js\";\n\nconst extensionName = 'aiCommand'\n\nlet popup: any\nlet popupSelection: { from: number; to: number }\n\nexport const AICommand = Extension.create({\n name: extensionName,\n\n priority: 200,\n\n onCreate() {\n const t = tippy as any\n popup = t('body', {\n interactive: true,\n trigger: 'manual',\n placement: 'bottom-start',\n theme: 'slash-command',\n // maxWidth: \"16rem\",\n offset: [0, -16],\n popperOptions: {\n strategy: 'fixed',\n modifiers: [\n {\n name: 'flip',\n enabled: false,\n },\n ],\n },\n onHidden: (instance) => {\n const selection = this.editor.state.selection\n\n this.editor\n ?.chain()\n ?.focus()\n ?.insertContentAt({ from: popupSelection.from - 1, to: popupSelection.to }, ' ')\n ?.insertContentAt(\n selection.to,\n this?.editor?.storage?.aiCommand?.completion?.content ?? [],\n )\n ?.run()\n },\n })\n },\n\n addProseMirrorPlugins() {\n return [\n Suggestion({\n editor: this.editor,\n char: ' ',\n allowSpaces: false,\n startOfLine: true,\n pluginKey: new PluginKey(extensionName),\n allow: ({ state, range }) => {\n const $from = state.doc.resolve(range.from)\n const isRootDepth = $from.depth === 1\n const isParagraph = $from.parent.type.name === 'paragraph'\n const isStartOfNode = $from.parent.textContent?.charAt(0) === ' '\n const textLength = $from.parent.textContent?.length\n\n // TODO\n const isInColumn = this.editor.isActive('column')\n\n const afterContent = $from.parent.textContent?.substring(\n $from.parent.textContent?.indexOf(' '),\n )\n const isValidAfterContent = !afterContent?.endsWith(' ')\n return (\n ((isRootDepth && isParagraph && isStartOfNode) ||\n (isInColumn && isParagraph && isStartOfNode)) &&\n isValidAfterContent &&\n textLength === 1\n )\n },\n command: ({ editor, props }: { editor: Editor; props: any }) => {\n // const { view, state } = editor;\n // const { $head, $from } = view.state.selection;\n\n // const end = $from.pos;\n // const from = $head?.nodeBefore\n // ? end -\n // ($head.nodeBefore.text?.substring(\n // $head.nodeBefore.text?.indexOf(\" \")\n // ).length ?? 0)\n // : $from.start();\n\n // const tr = state.tr.deleteRange(from, end);\n // view.dispatch(tr);\n\n props.action(editor)\n // view.focus();\n },\n items: async ({ query }: { query: string }) => {\n const GROUPS = (await import('./groups.js')).default\n const withFilteredCommands = GROUPS.map((group) => ({\n ...group,\n commands: group.commands\n .filter((item) => {\n const labelNormalized = item.label.toLowerCase().trim()\n const queryNormalized = query.toLowerCase().trim()\n\n if (item.aliases) {\n const aliases = item.aliases.map((alias) => alias.toLowerCase().trim())\n\n return (\n labelNormalized.includes(queryNormalized) || aliases.includes(queryNormalized)\n )\n }\n\n return labelNormalized.includes(queryNormalized)\n })\n .filter((command) =>\n command.shouldBeHidden ? !command.shouldBeHidden(this.editor) : true,\n ),\n }))\n\n const withoutEmptyGroups = withFilteredCommands.filter((group) => {\n if (group.commands.length > 0) {\n return true\n }\n\n return false\n })\n\n const withEnabledSettings = withoutEmptyGroups.map((group) => ({\n ...group,\n commands: group.commands.map((command) => ({\n ...command,\n isEnabled: true,\n })),\n }))\n\n return withEnabledSettings\n },\n render: () => {\n let component: any\n\n let scrollHandler: (() => void) | null = null\n\n return {\n onStart: (props: SuggestionProps) => {\n component = new ReactRenderer(AIMenuList, {\n props,\n editor: props.editor,\n })\n props.editor.storage.aiCommand.active = true\n const { view } = props.editor\n\n const editorNode = view.dom as HTMLElement\n\n const getReferenceClientRect = () => {\n if (!props.clientRect) {\n return props.editor.storage[extensionName].rect\n }\n\n const rect = props.clientRect()\n\n if (!rect) {\n return props.editor.storage[extensionName].rect\n }\n\n let yPos = rect.y\n\n if (rect.top + component.element.offsetHeight + 40 > window.innerHeight) {\n const diff = rect.top + component.element.offsetHeight - window.innerHeight + 40\n yPos = rect.y - diff\n }\n\n // Account for when the editor is bound inside a container that doesn't go all the way to the edge of the screen\n const editorXOffset = editorNode.getBoundingClientRect().x\n const boundigClient = editorNode.getBoundingClientRect()\n\n return new DOMRect(rect.x, yPos, boundigClient.width, rect.height)\n }\n\n scrollHandler = () => {\n popup?.[0].setProps({\n getReferenceClientRect,\n })\n }\n\n view.dom.parentElement?.addEventListener('scroll', scrollHandler)\n\n popup?.[0].setProps({\n getReferenceClientRect,\n appendTo: () => document.body,\n content: component.element,\n })\n\n const selection = this?.editor?.state?.selection\n popupSelection = { from: selection?.from, to: selection?.to }\n\n popup?.[0].show()\n },\n\n onUpdate(props: SuggestionProps) {\n component.updateProps(props)\n\n const { view } = props.editor\n\n const editorNode = view.dom as HTMLElement\n\n const getReferenceClientRect = () => {\n if (!props.clientRect) {\n return props.editor.storage[extensionName].rect\n }\n\n const rect = props.clientRect()\n\n if (!rect) {\n return props.editor.storage[extensionName].rect\n }\n\n // Account for when the editor is bound inside a container that doesn't go all the way to the edge of the screen\n return new DOMRect(rect.x, rect.y, rect.width, rect.height)\n }\n\n let scrollHandler = () => {\n popup?.[0].setProps({\n getReferenceClientRect,\n })\n }\n\n view.dom.parentElement?.addEventListener('scroll', scrollHandler)\n\n // eslint-disable-next-line no-param-reassign\n props.editor.storage[extensionName].rect = props.clientRect\n ? getReferenceClientRect()\n : {\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }\n popup?.[0].setProps({\n getReferenceClientRect,\n })\n },\n\n onKeyDown(props: SuggestionKeyDownProps) {\n if (props.event.key === 'Escape') {\n popup?.[0].hide()\n\n return true\n }\n\n if (!popup?.[0].state.isShown) {\n popup?.[0].show()\n }\n\n return component.ref?.onKeyDown(props)\n },\n\n onExit(props) {\n popup?.[0].hide()\n if (scrollHandler) {\n const { view } = props.editor\n view.dom.parentElement?.removeEventListener('scroll', scrollHandler)\n }\n\n props.editor.storage.aiCommand.active = false\n props.editor.storage.aiCommand.userPrompt = ''\n props.editor.storage.aiCommand.completion = ''\n\n component.destroy()\n },\n }\n },\n }),\n ]\n },\n\n addStorage() {\n return {\n rect: {\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n },\n userPrompt: '',\n completion: '',\n title: '',\n active: false,\n }\n },\n})\n\nexport default AICommand\n"],"names":["Extension","PluginKey","ReactRenderer","Suggestion","tippy","AIMenuList","extensionName","popup","popupSelection","AICommand","create","name","priority","onCreate","t","interactive","trigger","placement","theme","offset","popperOptions","strategy","modifiers","enabled","onHidden","instance","selection","editor","state","chain","focus","insertContentAt","from","to","storage","aiCommand","completion","content","run","addProseMirrorPlugins","char","allowSpaces","startOfLine","pluginKey","allow","range","$from","doc","resolve","isRootDepth","depth","isParagraph","parent","type","isStartOfNode","textContent","charAt","textLength","length","isInColumn","isActive","afterContent","substring","indexOf","isValidAfterContent","endsWith","command","props","action","items","query","GROUPS","default","withFilteredCommands","map","group","commands","filter","item","labelNormalized","label","toLowerCase","trim","queryNormalized","aliases","alias","includes","shouldBeHidden","withoutEmptyGroups","withEnabledSettings","isEnabled","render","component","scrollHandler","onStart","active","view","editorNode","dom","getReferenceClientRect","clientRect","rect","yPos","y","top","element","offsetHeight","window","innerHeight","diff","editorXOffset","getBoundingClientRect","x","boundigClient","DOMRect","width","height","setProps","parentElement","addEventListener","appendTo","document","body","show","onUpdate","updateProps","left","right","bottom","onKeyDown","event","key","hide","isShown","ref","onExit","removeEventListener","userPrompt","destroy","addStorage","title"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/AICommand.ts"],"sourcesContent":["'use client'\r\nimport { Editor, Extension } from '@tiptap/core'\r\nimport { PluginKey } from '@tiptap/pm/state'\r\nimport { ReactRenderer } from '@tiptap/react'\r\nimport Suggestion, { SuggestionKeyDownProps, SuggestionProps } from '@tiptap/suggestion'\r\nimport tippy from 'tippy.js'\r\n\r\nimport AIMenuList from './AIMenuList.js'\r\n// import { AICommandPanel } from \"../../features/panels/AICommandPanel/AICommandPanel.js\";\r\n\r\nconst extensionName = 'aiCommand'\r\n\r\nlet popup: any\r\nlet popupSelection: { from: number; to: number }\r\n\r\nexport const AICommand = Extension.create({\r\n name: extensionName,\r\n\r\n priority: 200,\r\n\r\n onCreate() {},\r\n\r\n addProseMirrorPlugins() {\r\n return [\r\n Suggestion({\r\n editor: this.editor,\r\n char: ' ',\r\n allowSpaces: false,\r\n startOfLine: true,\r\n pluginKey: new PluginKey(extensionName),\r\n allow: ({ state, range }) => {\r\n const $from = state.doc.resolve(range.from)\r\n const isRootDepth = $from.depth === 1\r\n const isParagraph = $from.parent.type.name === 'paragraph'\r\n const isStartOfNode = $from.parent.textContent?.charAt(0) === ' '\r\n const textLength = $from.parent.textContent?.length\r\n\r\n // TODO\r\n const isInColumn = this.editor.isActive('column')\r\n\r\n const afterContent = $from.parent.textContent?.substring(\r\n $from.parent.textContent?.indexOf(' '),\r\n )\r\n const isValidAfterContent = !afterContent?.endsWith(' ')\r\n return (\r\n ((isRootDepth && isParagraph && isStartOfNode) ||\r\n (isInColumn && isParagraph && isStartOfNode)) &&\r\n isValidAfterContent &&\r\n textLength === 1\r\n )\r\n },\r\n command: ({ editor, props }: { editor: Editor; props: any }) => {\r\n // const { view, state } = editor;\r\n // const { $head, $from } = view.state.selection;\r\n\r\n // const end = $from.pos;\r\n // const from = $head?.nodeBefore\r\n // ? end -\r\n // ($head.nodeBefore.text?.substring(\r\n // $head.nodeBefore.text?.indexOf(\" \")\r\n // ).length ?? 0)\r\n // : $from.start();\r\n\r\n // const tr = state.tr.deleteRange(from, end);\r\n // view.dispatch(tr);\r\n\r\n props.action(editor)\r\n // view.focus();\r\n },\r\n items: async ({ query }: { query: string }) => {\r\n const GROUPS = (await import('./groups.js')).default\r\n const withFilteredCommands = GROUPS.map((group) => ({\r\n ...group,\r\n commands: group.commands\r\n .filter((item) => {\r\n const labelNormalized = item.label.toLowerCase().trim()\r\n const queryNormalized = query.toLowerCase().trim()\r\n\r\n if (item.aliases) {\r\n const aliases = item.aliases.map((alias) => alias.toLowerCase().trim())\r\n\r\n return (\r\n labelNormalized.includes(queryNormalized) || aliases.includes(queryNormalized)\r\n )\r\n }\r\n\r\n return labelNormalized.includes(queryNormalized)\r\n })\r\n .filter((command) =>\r\n command.shouldBeHidden ? !command.shouldBeHidden(this.editor) : true,\r\n ),\r\n }))\r\n\r\n const withoutEmptyGroups = withFilteredCommands.filter((group) => {\r\n if (group.commands.length > 0) {\r\n return true\r\n }\r\n\r\n return false\r\n })\r\n\r\n const withEnabledSettings = withoutEmptyGroups.map((group) => ({\r\n ...group,\r\n commands: group.commands.map((command) => ({\r\n ...command,\r\n isEnabled: true,\r\n })),\r\n }))\r\n\r\n return withEnabledSettings\r\n },\r\n render: () => {\r\n let component: any\r\n\r\n let scrollHandler: (() => void) | null = null\r\n\r\n return {\r\n onStart: (props: SuggestionProps) => {\r\n const editor = props.editor\r\n\r\n const t = tippy as any\r\n popup = t('body', {\r\n interactive: true,\r\n trigger: 'manual',\r\n placement: 'bottom-start',\r\n theme: 'slash-command',\r\n // maxWidth: \"16rem\",\r\n offset: [0, -16],\r\n popperOptions: {\r\n strategy: 'fixed',\r\n modifiers: [\r\n {\r\n name: 'flip',\r\n enabled: false,\r\n },\r\n ],\r\n },\r\n editor: editor,\r\n onHide(instance) {\r\n try {\r\n const editorRef = instance.props.editor\r\n const completion = editorRef?.storage?.aiCommand?.completion ?? []\r\n const selection = editorRef?.state?.selection\r\n\r\n if (!completion || completion === '') {\r\n return\r\n }\r\n editorRef\r\n ?.chain()\r\n .focus()\r\n .insertContentAt(\r\n { from: popupSelection.from - 1, to: popupSelection.to },\r\n ' ',\r\n )\r\n .insertContentAt(popupSelection.to, completion)\r\n .run()\r\n\r\n props.editor.storage.aiCommand.completion = ''\r\n } catch (e) {\r\n console.log('Error', e)\r\n }\r\n },\r\n })\r\n component = new ReactRenderer(AIMenuList, {\r\n props,\r\n editor: props.editor,\r\n })\r\n props.editor.storage.aiCommand.active = true\r\n const { view } = props.editor\r\n\r\n const editorNode = view.dom as HTMLElement\r\n\r\n const getReferenceClientRect = () => {\r\n if (!props.clientRect) {\r\n return props.editor.storage[extensionName].rect\r\n }\r\n\r\n const rect = props.clientRect()\r\n\r\n if (!rect) {\r\n return props.editor.storage[extensionName].rect\r\n }\r\n\r\n let yPos = rect.y\r\n\r\n if (rect.top + component.element.offsetHeight + 40 > window.innerHeight) {\r\n const diff = rect.top + component.element.offsetHeight - window.innerHeight + 40\r\n yPos = rect.y - diff\r\n }\r\n\r\n // Account for when the editor is bound inside a container that doesn't go all the way to the edge of the screen\r\n const editorXOffset = editorNode.getBoundingClientRect().x\r\n const boundigClient = editorNode.getBoundingClientRect()\r\n\r\n return new DOMRect(rect.x, yPos, boundigClient.width, rect.height)\r\n }\r\n\r\n scrollHandler = () => {\r\n popup?.[0].setProps({\r\n getReferenceClientRect,\r\n })\r\n }\r\n\r\n view.dom.parentElement?.addEventListener('scroll', scrollHandler)\r\n\r\n popup?.[0].setProps({\r\n getReferenceClientRect,\r\n appendTo: () => document.body,\r\n content: component?.element,\r\n })\r\n\r\n const selection = this?.editor?.state?.selection\r\n popupSelection = { from: selection?.from, to: selection?.to }\r\n\r\n popup?.[0].show()\r\n },\r\n\r\n onUpdate: (props: SuggestionProps) => {\r\n component?.updateProps(props)\r\n\r\n const { view } = props.editor\r\n\r\n const editorNode = view.dom as HTMLElement\r\n\r\n const getReferenceClientRect = () => {\r\n if (!props.clientRect) {\r\n return props.editor.storage[extensionName].rect\r\n }\r\n\r\n const rect = props.clientRect()\r\n\r\n if (!rect) {\r\n return props.editor.storage[extensionName].rect\r\n }\r\n\r\n // Account for when the editor is bound inside a container that doesn't go all the way to the edge of the screen\r\n return new DOMRect(rect.x, rect.y, rect.width, rect.height)\r\n }\r\n\r\n let scrollHandler = () => {\r\n popup?.[0].setProps({\r\n getReferenceClientRect,\r\n })\r\n }\r\n\r\n view.dom.parentElement?.addEventListener('scroll', scrollHandler)\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n props.editor.storage[extensionName].rect = props.clientRect\r\n ? getReferenceClientRect()\r\n : {\r\n width: 0,\r\n height: 0,\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n }\r\n popup?.[0].setProps({\r\n getReferenceClientRect,\r\n })\r\n },\r\n\r\n onKeyDown: (props: SuggestionKeyDownProps) => {\r\n if (props.event.key === 'Escape') {\r\n popup?.[0].hide()\r\n\r\n return true\r\n }\r\n\r\n if (!popup?.[0].state.isShown) {\r\n popup?.[0].show()\r\n }\r\n\r\n return component?.ref?.onKeyDown(props)\r\n },\r\n\r\n onExit: (props) => {\r\n if (scrollHandler) {\r\n const { view } = props.editor\r\n view.dom.parentElement?.removeEventListener('scroll', scrollHandler)\r\n }\r\n\r\n props.editor.storage.aiCommand.active = false\r\n props.editor.storage.aiCommand.userPrompt = ''\r\n props.editor.storage.aiCommand.completion = ''\r\n\r\n component?.destroy()\r\n },\r\n }\r\n },\r\n }),\r\n ]\r\n },\r\n\r\n addStorage() {\r\n return {\r\n rect: {\r\n width: 0,\r\n height: 0,\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n },\r\n userPrompt: '',\r\n completion: '',\r\n title: '',\r\n active: false,\r\n }\r\n },\r\n})\r\n\r\nexport default AICommand\r\n"],"names":["Extension","PluginKey","ReactRenderer","Suggestion","tippy","AIMenuList","extensionName","popup","popupSelection","AICommand","create","name","priority","onCreate","addProseMirrorPlugins","editor","char","allowSpaces","startOfLine","pluginKey","allow","state","range","$from","doc","resolve","from","isRootDepth","depth","isParagraph","parent","type","isStartOfNode","textContent","charAt","textLength","length","isInColumn","isActive","afterContent","substring","indexOf","isValidAfterContent","endsWith","command","props","action","items","query","GROUPS","default","withFilteredCommands","map","group","commands","filter","item","labelNormalized","label","toLowerCase","trim","queryNormalized","aliases","alias","includes","shouldBeHidden","withoutEmptyGroups","withEnabledSettings","isEnabled","render","component","scrollHandler","onStart","t","interactive","trigger","placement","theme","offset","popperOptions","strategy","modifiers","enabled","onHide","instance","editorRef","completion","storage","aiCommand","selection","chain","focus","insertContentAt","to","run","e","console","log","active","view","editorNode","dom","getReferenceClientRect","clientRect","rect","yPos","y","top","element","offsetHeight","window","innerHeight","diff","editorXOffset","getBoundingClientRect","x","boundigClient","DOMRect","width","height","setProps","parentElement","addEventListener","appendTo","document","body","content","show","onUpdate","updateProps","left","right","bottom","onKeyDown","event","key","hide","isShown","ref","onExit","removeEventListener","userPrompt","destroy","addStorage","title"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/AIMenuList.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nimport { AIMenuListProps } from \"./types.js\";\n\nimport { AICommandPanel } from \"../../features/panels/AICommandPanel/AICommandPanel.js\";\n\nexport const AIMenuList = React.forwardRef((props: AIMenuListProps, ref) => {\n const [userPrompt, setUserPrompt] = useState(\"\");\n\n if (!props.items.length) {\n return null;\n }\n\n return (\n <>\n <AICommandPanel\n editor={props?.editor as any}\n onOpenChange={() => {}}\n userPrompt={userPrompt}\n items={props?.items}\n ref={ref}\n />\n </>\n );\n});\n\nAIMenuList.displayName = \"AIMenuList\";\n\nexport default AIMenuList;\n"],"names":["React","useState","AICommandPanel","AIMenuList","forwardRef","props","ref","userPrompt","setUserPrompt","items","length","editor","onOpenChange","displayName"],"mappings":";AAAA,OAAOA,SAASC,QAAQ,QAAQ,QAAQ;AAIxC,SAASC,cAAc,QAAQ,yDAAyD;AAExF,OAAO,MAAMC,2BAAaH,MAAMI,UAAU,CAAC,CAACC,OAAwBC;IAClE,MAAM,CAACC,YAAYC,cAAc,GAAGP,SAAS;IAE7C,IAAI,CAACI,MAAMI,KAAK,CAACC,MAAM,EAAE;QACvB,OAAO;IACT;IAEA,qBACE;kBACE,cAAA,KAACR;YACCS,QAAQN,OAAOM;YACfC,cAAc,KAAO;YACrBL,YAAYA;YACZE,OAAOJ,OAAOI;YACdH,KAAKA;;;AAIb,GAAG;AAEHH,WAAWU,WAAW,GAAG;AAEzB,eAAeV,WAAW"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/AIMenuList.tsx"],"sourcesContent":["import React, { useState } from \"react\";\r\n\r\nimport { AIMenuListProps } from \"./types.js\";\r\n\r\nimport { AICommandPanel } from \"../../features/panels/AICommandPanel/AICommandPanel.js\";\r\n\r\nexport const AIMenuList = React.forwardRef((props: AIMenuListProps, ref) => {\r\n const [userPrompt, setUserPrompt] = useState(\"\");\r\n\r\n if (!props.items.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n <AICommandPanel\r\n editor={props?.editor as any}\r\n onOpenChange={() => {}}\r\n userPrompt={userPrompt}\r\n items={props?.items}\r\n ref={ref}\r\n />\r\n </>\r\n );\r\n});\r\n\r\nAIMenuList.displayName = \"AIMenuList\";\r\n\r\nexport default AIMenuList;\r\n"],"names":["React","useState","AICommandPanel","AIMenuList","forwardRef","props","ref","userPrompt","setUserPrompt","items","length","editor","onOpenChange","displayName"],"mappings":";AAAA,OAAOA,SAASC,QAAQ,QAAQ,QAAQ;AAIxC,SAASC,cAAc,QAAQ,yDAAyD;AAExF,OAAO,MAAMC,2BAAaH,MAAMI,UAAU,CAAC,CAACC,OAAwBC;IAClE,MAAM,CAACC,YAAYC,cAAc,GAAGP,SAAS;IAE7C,IAAI,CAACI,MAAMI,KAAK,CAACC,MAAM,EAAE;QACvB,OAAO;IACT;IAEA,qBACE;kBACE,cAAA,KAACR;YACCS,QAAQN,OAAOM;YACfC,cAAc,KAAO;YACrBL,YAAYA;YACZE,OAAOJ,OAAOI;YACdH,KAAKA;;;AAIb,GAAG;AAEHH,WAAWU,WAAW,GAAG;AAEzB,eAAeV,WAAW"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/CommandButton.tsx"],"sourcesContent":["import { LucideIcon } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport { Icon } from \"../../features/ui/Icon.js\";\nimport { cn } from \"../../lib/utils/index.js\";\n\nexport type CommandButtonProps = {\n active?: boolean;\n description: string;\n icon: LucideIcon;\n onClick: () => void;\n title: string;\n};\n\nexport const CommandButton = forwardRef<HTMLButtonElement, CommandButtonProps>(\n ({ active, icon, onClick, title }, ref) => {\n const wrapperClass = cn(\n \"flex text-neutral-500 items-center text-xs font-semibold justify-start p-1.5 gap-2 rounded\",\n !active && \"bg-transparent hover:bg-neutral-50 hover:text-black\",\n active && \"bg-neutral-100 text-black hover:bg-neutral-100\"\n );\n\n return (\n <button\n type=\"button\"\n ref={ref}\n onClick={onClick}\n className={wrapperClass}\n >\n <Icon icon={icon} className=\"w-3 h-3\" />\n <div className=\"flex flex-col items-start justify-start\">\n <div className=\"text-sm font-medium\">{title}</div>\n </div>\n </button>\n );\n }\n);\n\nCommandButton.displayName = \"CommandButton\";\n"],"names":["forwardRef","Icon","cn","CommandButton","active","icon","onClick","title","ref","wrapperClass","button","type","className","div","displayName"],"mappings":";AACA,SAASA,UAAU,QAAQ,QAAQ;AACnC,SAASC,IAAI,QAAQ,4BAA4B;AACjD,SAASC,EAAE,QAAQ,2BAA2B;AAU9C,OAAO,MAAMC,8BAAgBH,WAC3B,CAAC,EAAEI,MAAM,EAAEC,IAAI,EAAEC,OAAO,EAAEC,KAAK,EAAE,EAAEC;IACjC,MAAMC,eAAeP,GACnB,8FACA,CAACE,UAAU,uDACXA,UAAU;IAGZ,qBACE,MAACM;QACCC,MAAK;QACLH,KAAKA;QACLF,SAASA;QACTM,WAAWH;;0BAEX,KAACR;gBAAKI,MAAMA;gBAAMO,WAAU;;0BAC5B,KAACC;gBAAID,WAAU;0BACb,cAAA,KAACC;oBAAID,WAAU;8BAAuBL;;;;;AAI9C,GACA;AAEFJ,cAAcW,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/CommandButton.tsx"],"sourcesContent":["import { LucideIcon } from \"lucide-react\";\r\nimport { forwardRef } from \"react\";\r\nimport { Icon } from \"../../features/ui/Icon.js\";\r\nimport { cn } from \"../../lib/utils/index.js\";\r\n\r\nexport type CommandButtonProps = {\r\n active?: boolean;\r\n description: string;\r\n icon: LucideIcon;\r\n onClick: () => void;\r\n title: string;\r\n};\r\n\r\nexport const CommandButton = forwardRef<HTMLButtonElement, CommandButtonProps>(\r\n ({ active, icon, onClick, title }, ref) => {\r\n const wrapperClass = cn(\r\n \"flex text-neutral-500 items-center text-xs font-semibold justify-start p-1.5 gap-2 rounded\",\r\n !active && \"bg-transparent hover:bg-neutral-50 hover:text-black\",\r\n active && \"bg-neutral-100 text-black hover:bg-neutral-100\"\r\n );\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n ref={ref}\r\n onClick={onClick}\r\n className={wrapperClass}\r\n >\r\n <Icon icon={icon} className=\"w-3 h-3\" />\r\n <div className=\"flex flex-col items-start justify-start\">\r\n <div className=\"text-sm font-medium\">{title}</div>\r\n </div>\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nCommandButton.displayName = \"CommandButton\";\r\n"],"names":["forwardRef","Icon","cn","CommandButton","active","icon","onClick","title","ref","wrapperClass","button","type","className","div","displayName"],"mappings":";AACA,SAASA,UAAU,QAAQ,QAAQ;AACnC,SAASC,IAAI,QAAQ,4BAA4B;AACjD,SAASC,EAAE,QAAQ,2BAA2B;AAU9C,OAAO,MAAMC,8BAAgBH,WAC3B,CAAC,EAAEI,MAAM,EAAEC,IAAI,EAAEC,OAAO,EAAEC,KAAK,EAAE,EAAEC;IACjC,MAAMC,eAAeP,GACnB,8FACA,CAACE,UAAU,uDACXA,UAAU;IAGZ,qBACE,MAACM;QACCC,MAAK;QACLH,KAAKA;QACLF,SAASA;QACTM,WAAWH;;0BAEX,KAACR;gBAAKI,MAAMA;gBAAMO,WAAU;;0BAC5B,KAACC;gBAAID,WAAU;0BACb,cAAA,KAACC;oBAAID,WAAU;8BAAuBL;;;;;AAI9C,GACA;AAEFJ,cAAcW,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/groups.ts"],"sourcesContent":["import {\n Book,\n Columns2,\n Facebook,\n Heading1,\n Heading2,\n Heading3,\n Image,\n Instagram,\n Link,\n Linkedin,\n List,\n ListOrdered,\n ListTodo,\n Minus,\n Music,\n Pen,\n Quote,\n SquareCode,\n Table,\n Twitch,\n Twitter,\n Youtube,\n} from \"lucide-react\";\nimport { Group } from \"./types.js\";\nimport i18next from \"i18next\";\n\nexport const GROUPS: Group[] = [\n {\n name: \"draft\",\n title: i18next.t(\"draftWithAI\") || \"Draft with AI\",\n commands: [\n {\n name: \"brainstorm\",\n label: i18next.t(\"brainstormIdeas\") || \"Brainstorm Ideas...\",\n icon: Pen,\n description: i18next.t(\"brainstormIdeasDesc\") || \"Brainstorm ideas on \",\n action: (editor) => {\n // \"Brainstorm ideas on \"\n return \"Brainstorm ideas on \";\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n },\n {\n name: \"blog\",\n label: i18next.t(\"blogPost\") || \"Blog post...\",\n description: i18next.t(\"blogPostDesc\") || \"Blog post\",\n action: (editor) => {\n return \"Write a blog post about \";\n\n // \"Write a blog post about \"\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n icon: Pen,\n },\n {\n name: \"outline\",\n label: i18next.t(\"outline\") || \"Outline...\",\n description: i18next.t(\"outlineDesc\") || \"Outline\",\n action: (editor) => {\n return \"Write an outline about \";\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n icon: Pen,\n },\n\n {\n name: \"social\",\n label: i18next.t(\"socialMediaPost\") || \"Social Media post...\",\n icon: Pen,\n description: i18next.t(\"socialMediaPostDesc\") || \"Social Media post\",\n action: (editor) => {\n return;\n (\"Write a social media post about \");\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n },\n {\n name: \"press\",\n label: i18next.t(\"pressEelease\") || \"Press release...\",\n icon: Pen,\n description: i18next.t(\"pressEeleaseDesc\") || \"Press release\",\n action: (editor) => {\n return \"Write a press release about \";\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n },\n {\n name: \"creative\",\n label: i18next.t(\"creativeStory\") || \"Creative Story...\",\n description: i18next.t(\"creativeStoryDesc\") || \"Creative Story\",\n action: (editor) => {\n return \"Write a creative story about \";\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n icon: Pen,\n },\n {\n name: \"essay\",\n label: i18next.t(\"essay\") || \"Essay...\",\n description: i18next.t(\"essayDesc\") || \"Essay\",\n action: (editor) => {\n return \"Write an essay about \";\n // editor.chain().focus().setHeading({ level: 1 }).run();\n },\n icon: Pen,\n },\n ],\n },\n];\n\nexport default GROUPS;\n"],"names":["Pen","i18next","GROUPS","name","title","t","commands","label","icon","description","action","editor"],"mappings":"AAAA,SAgBEA,GAAG,QAOE,eAAe;AAEtB,OAAOC,aAAa,UAAU;AAE9B,OAAO,MAAMC,SAAkB;IAC7B;QACEC,MAAM;QACNC,OAAOH,QAAQI,CAAC,CAAC,kBAAkB;QACnCC,UAAU;YACR;gBACEH,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,sBAAsB;gBACvCG,MAAMR;gBACNS,aAAaR,QAAQI,CAAC,CAAC,0BAA0B;gBACjDK,QAAQ,CAACC;oBACP,0BAA0B;oBAC1B,OAAO;gBACP,yDAAyD;gBAC3D;YACF;YACA;gBACER,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,eAAe;gBAChCI,aAAaR,QAAQI,CAAC,CAAC,mBAAmB;gBAC1CK,QAAQ,CAACC;oBACP,OAAO;gBAEP,8BAA8B;gBAC9B,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;YACA;gBACEG,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,cAAc;gBAC/BI,aAAaR,QAAQI,CAAC,CAAC,kBAAkB;gBACzCK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;YAEA;gBACEG,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,sBAAsB;gBACvCG,MAAMR;gBACNS,aAAaR,QAAQI,CAAC,CAAC,0BAA0B;gBACjDK,QAAQ,CAACC;oBACP;oBACC;gBACD,yDAAyD;gBAC3D;YACF;YACA;gBACER,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,mBAAmB;gBACpCG,MAAMR;gBACNS,aAAaR,QAAQI,CAAC,CAAC,uBAAuB;gBAC9CK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;YACF;YACA;gBACER,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,oBAAoB;gBACrCI,aAAaR,QAAQI,CAAC,CAAC,wBAAwB;gBAC/CK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;YACA;gBACEG,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,YAAY;gBAC7BI,aAAaR,QAAQI,CAAC,CAAC,gBAAgB;gBACvCK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;SACD;IACH;CACD,CAAC;AAEF,eAAeE,OAAO"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/groups.ts"],"sourcesContent":["import {\r\n Book,\r\n Columns2,\r\n Facebook,\r\n Heading1,\r\n Heading2,\r\n Heading3,\r\n Image,\r\n Instagram,\r\n Link,\r\n Linkedin,\r\n List,\r\n ListOrdered,\r\n ListTodo,\r\n Minus,\r\n Music,\r\n Pen,\r\n Quote,\r\n SquareCode,\r\n Table,\r\n Twitch,\r\n Twitter,\r\n Youtube,\r\n} from \"lucide-react\";\r\nimport { Group } from \"./types.js\";\r\nimport i18next from \"i18next\";\r\n\r\nexport const GROUPS: Group[] = [\r\n {\r\n name: \"draft\",\r\n title: i18next.t(\"draftWithAI\") || \"Draft with AI\",\r\n commands: [\r\n {\r\n name: \"brainstorm\",\r\n label: i18next.t(\"brainstormIdeas\") || \"Brainstorm Ideas...\",\r\n icon: Pen,\r\n description: i18next.t(\"brainstormIdeasDesc\") || \"Brainstorm ideas on \",\r\n action: (editor) => {\r\n // \"Brainstorm ideas on \"\r\n return \"Brainstorm ideas on \";\r\n // editor.chain().focus().setHeading({ level: 1 }).run();\r\n },\r\n },\r\n {\r\n name: \"blog\",\r\n label: i18next.t(\"blogPost\") || \"Blog post...\",\r\n description: i18next.t(\"blogPostDesc\") || \"Blog post\",\r\n action: (editor) => {\r\n return \"Write a blog post about \";\r\n\r\n // \"Write a blog post about \"\r\n // editor.chain().focus().setHeading({ level: 1 }).run();\r\n },\r\n icon: Pen,\r\n },\r\n {\r\n name: \"outline\",\r\n label: i18next.t(\"outline\") || \"Outline...\",\r\n description: i18next.t(\"outlineDesc\") || \"Outline\",\r\n action: (editor) => {\r\n return \"Write an outline about \";\r\n // editor.chain().focus().setHeading({ level: 1 }).run();\r\n },\r\n icon: Pen,\r\n },\r\n\r\n {\r\n name: \"social\",\r\n label: i18next.t(\"socialMediaPost\") || \"Social Media post...\",\r\n icon: Pen,\r\n description: i18next.t(\"socialMediaPostDesc\") || \"Social Media post\",\r\n action: (editor) => {\r\n return;\r\n (\"Write a social media post about \");\r\n // editor.chain().focus().setHeading({ level: 1 }).run();\r\n },\r\n },\r\n {\r\n name: \"press\",\r\n label: i18next.t(\"pressEelease\") || \"Press release...\",\r\n icon: Pen,\r\n description: i18next.t(\"pressEeleaseDesc\") || \"Press release\",\r\n action: (editor) => {\r\n return \"Write a press release about \";\r\n // editor.chain().focus().setHeading({ level: 1 }).run();\r\n },\r\n },\r\n {\r\n name: \"creative\",\r\n label: i18next.t(\"creativeStory\") || \"Creative Story...\",\r\n description: i18next.t(\"creativeStoryDesc\") || \"Creative Story\",\r\n action: (editor) => {\r\n return \"Write a creative story about \";\r\n // editor.chain().focus().setHeading({ level: 1 }).run();\r\n },\r\n icon: Pen,\r\n },\r\n {\r\n name: \"essay\",\r\n label: i18next.t(\"essay\") || \"Essay...\",\r\n description: i18next.t(\"essayDesc\") || \"Essay\",\r\n action: (editor) => {\r\n return \"Write an essay about \";\r\n // editor.chain().focus().setHeading({ level: 1 }).run();\r\n },\r\n icon: Pen,\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport default GROUPS;\r\n"],"names":["Pen","i18next","GROUPS","name","title","t","commands","label","icon","description","action","editor"],"mappings":"AAAA,SAgBEA,GAAG,QAOE,eAAe;AAEtB,OAAOC,aAAa,UAAU;AAE9B,OAAO,MAAMC,SAAkB;IAC7B;QACEC,MAAM;QACNC,OAAOH,QAAQI,CAAC,CAAC,kBAAkB;QACnCC,UAAU;YACR;gBACEH,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,sBAAsB;gBACvCG,MAAMR;gBACNS,aAAaR,QAAQI,CAAC,CAAC,0BAA0B;gBACjDK,QAAQ,CAACC;oBACP,0BAA0B;oBAC1B,OAAO;gBACP,yDAAyD;gBAC3D;YACF;YACA;gBACER,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,eAAe;gBAChCI,aAAaR,QAAQI,CAAC,CAAC,mBAAmB;gBAC1CK,QAAQ,CAACC;oBACP,OAAO;gBAEP,8BAA8B;gBAC9B,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;YACA;gBACEG,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,cAAc;gBAC/BI,aAAaR,QAAQI,CAAC,CAAC,kBAAkB;gBACzCK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;YAEA;gBACEG,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,sBAAsB;gBACvCG,MAAMR;gBACNS,aAAaR,QAAQI,CAAC,CAAC,0BAA0B;gBACjDK,QAAQ,CAACC;oBACP;oBACC;gBACD,yDAAyD;gBAC3D;YACF;YACA;gBACER,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,mBAAmB;gBACpCG,MAAMR;gBACNS,aAAaR,QAAQI,CAAC,CAAC,uBAAuB;gBAC9CK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;YACF;YACA;gBACER,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,oBAAoB;gBACrCI,aAAaR,QAAQI,CAAC,CAAC,wBAAwB;gBAC/CK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;YACA;gBACEG,MAAM;gBACNI,OAAON,QAAQI,CAAC,CAAC,YAAY;gBAC7BI,aAAaR,QAAQI,CAAC,CAAC,gBAAgB;gBACvCK,QAAQ,CAACC;oBACP,OAAO;gBACP,yDAAyD;gBAC3D;gBACAH,MAAMR;YACR;SACD;IACH;CACD,CAAC;AAEF,eAAeE,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/index.ts"],"sourcesContent":["export * from \"./AICommand.js\";\n"],"names":[],"mappings":"AAAA,cAAc,iBAAiB"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/index.ts"],"sourcesContent":["export * from \"./AICommand.js\";\r\n"],"names":[],"mappings":"AAAA,cAAc,iBAAiB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/types.ts"],"sourcesContent":["import { Editor } from \"@tiptap/core\";\nimport { LucideIcon } from \"lucide-react\";\n\nexport interface Group {\n name: string;\n title: string;\n commands: Command[];\n}\n\nexport interface Command {\n name: string;\n label: string;\n description: string;\n aliases?: string[];\n icon: LucideIcon;\n action: (editor: Editor) => any;\n shouldBeHidden?: (editor: Editor) => boolean;\n}\n\nexport interface AIMenuListProps {\n editor: Editor;\n items: Group[];\n command: (command: Command) => void;\n}\n"],"names":[],"mappings":"AAmBA,WAIC"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AICommand/types.ts"],"sourcesContent":["import { Editor } from \"@tiptap/core\";\r\nimport { LucideIcon } from \"lucide-react\";\r\n\r\nexport interface Group {\r\n name: string;\r\n title: string;\r\n commands: Command[];\r\n}\r\n\r\nexport interface Command {\r\n name: string;\r\n label: string;\r\n description: string;\r\n aliases?: string[];\r\n icon: LucideIcon;\r\n action: (editor: Editor) => any;\r\n shouldBeHidden?: (editor: Editor) => boolean;\r\n}\r\n\r\nexport interface AIMenuListProps {\r\n editor: Editor;\r\n items: Group[];\r\n command: (command: Command) => void;\r\n}\r\n"],"names":[],"mappings":"AAmBA,WAIC"}
@@ -1,10 +1,10 @@
1
1
  import { mergeAttributes, Node, nodeInputRule } from "@tiptap/core";
2
- /**
3
- * Matches an image to a ![image](src "title") on input.
2
+ /**
3
+ * Matches an image to a ![image](src "title") on input.
4
4
  */ export const inputRegex = /(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/;
5
- /**
6
- * This extension allows you to insert images.
7
- * @see https://www.tiptap.dev/api/nodes/image
5
+ /**
6
+ * This extension allows you to insert images.
7
+ * @see https://www.tiptap.dev/api/nodes/image
8
8
  */ export const Audio = Node.create({
9
9
  name: "audio",
10
10
  addOptions () {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/Audio/Audio.ts"],"sourcesContent":["import { mergeAttributes, Node, nodeInputRule } from \"@tiptap/core\";\n\nexport interface AudioOptions {\n /**\n * Controls if the image node should be inline or not.\n * @default false\n * @example true\n */\n inline: boolean;\n\n /**\n * Controls if base64 images are allowed. Enable this if you want to allow\n * base64 image urls in the `src` attribute.\n * @default false\n * @example true\n */\n allowBase64: boolean;\n\n /**\n * HTML attributes to add to the image element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n audio: {\n /**\n * Add an image\n * @param options The image attributes\n * @example\n * editor\n * .commands\n * .setAudio({ src: 'https://tiptap.dev/logo.png', alt: 'tiptap', title: 'tiptap logo' })\n */\n setAudio: (options: {\n src: string;\n alt?: string;\n title?: string;\n poster?: string;\n }) => ReturnType;\n };\n }\n}\n\n/**\n * Matches an image to a ![image](src \"title\") on input.\n */\nexport const inputRegex =\n /(?:^|\\s)(!\\[(.+|:?)]\\((\\S+)(?:(?:\\s+)[\"'](\\S+)[\"'])?\\))$/;\n\n/**\n * This extension allows you to insert images.\n * @see https://www.tiptap.dev/api/nodes/image\n */\nexport const Audio = Node.create<AudioOptions>({\n name: \"audio\",\n\n addOptions() {\n return {\n inline: false,\n allowBase64: false,\n HTMLAttributes: {},\n };\n },\n\n inline() {\n return this.options.inline;\n },\n\n group() {\n return this.options.inline ? \"inline\" : \"block\";\n },\n\n draggable: true,\n\n addAttributes() {\n return {\n src: {\n default: null,\n },\n alt: {\n default: null,\n },\n title: {\n default: null,\n },\n poster: {\n default: null,\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: this.options.allowBase64\n ? \"audio[src]\"\n : 'audio[src]:not([src^=\"data:\"])',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n \"audio\",\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n ];\n },\n\n addCommands() {\n return {\n setAudio:\n (options) =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: options,\n });\n },\n };\n },\n\n addInputRules() {\n return [\n nodeInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: (match) => {\n const [, , alt, src, title] = match;\n\n return { src, alt, title };\n },\n }),\n ];\n },\n});\n"],"names":["mergeAttributes","Node","nodeInputRule","inputRegex","Audio","create","name","addOptions","inline","allowBase64","HTMLAttributes","options","group","draggable","addAttributes","src","default","alt","title","poster","parseHTML","tag","renderHTML","addCommands","setAudio","commands","insertContent","type","attrs","addInputRules","find","getAttributes","match"],"mappings":"AAAA,SAASA,eAAe,EAAEC,IAAI,EAAEC,aAAa,QAAQ,eAAe;AA+CpE;;CAEC,GACD,OAAO,MAAMC,aACX,2DAA2D;AAE7D;;;CAGC,GACD,OAAO,MAAMC,QAAQH,KAAKI,MAAM,CAAe;IAC7CC,MAAM;IAENC;QACE,OAAO;YACLC,QAAQ;YACRC,aAAa;YACbC,gBAAgB,CAAC;QACnB;IACF;IAEAF;QACE,OAAO,IAAI,CAACG,OAAO,CAACH,MAAM;IAC5B;IAEAI;QACE,OAAO,IAAI,CAACD,OAAO,CAACH,MAAM,GAAG,WAAW;IAC1C;IAEAK,WAAW;IAEXC;QACE,OAAO;YACLC,KAAK;gBACHC,SAAS;YACX;YACAC,KAAK;gBACHD,SAAS;YACX;YACAE,OAAO;gBACLF,SAAS;YACX;YACAG,QAAQ;gBACNH,SAAS;YACX;QACF;IACF;IAEAI;QACE,OAAO;YACL;gBACEC,KAAK,IAAI,CAACV,OAAO,CAACF,WAAW,GACzB,eACA;YACN;SACD;IACH;IAEAa,YAAW,EAAEZ,cAAc,EAAE;QAC3B,OAAO;YACL;YACAV,gBAAgB,IAAI,CAACW,OAAO,CAACD,cAAc,EAAEA;SAC9C;IACH;IAEAa;QACE,OAAO;YACLC,UACE,CAACb,UACD,CAAC,EAAEc,QAAQ,EAAE;oBACX,OAAOA,SAASC,aAAa,CAAC;wBAC5BC,MAAM,IAAI,CAACrB,IAAI;wBACfsB,OAAOjB;oBACT;gBACF;QACJ;IACF;IAEAkB;QACE,OAAO;YACL3B,cAAc;gBACZ4B,MAAM3B;gBACNwB,MAAM,IAAI,CAACA,IAAI;gBACfI,eAAe,CAACC;oBACd,MAAM,KAAKf,KAAKF,KAAKG,MAAM,GAAGc;oBAE9B,OAAO;wBAAEjB;wBAAKE;wBAAKC;oBAAM;gBAC3B;YACF;SACD;IACH;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/Audio/Audio.ts"],"sourcesContent":["import { mergeAttributes, Node, nodeInputRule } from \"@tiptap/core\";\r\n\r\nexport interface AudioOptions {\r\n /**\r\n * Controls if the image node should be inline or not.\r\n * @default false\r\n * @example true\r\n */\r\n inline: boolean;\r\n\r\n /**\r\n * Controls if base64 images are allowed. Enable this if you want to allow\r\n * base64 image urls in the `src` attribute.\r\n * @default false\r\n * @example true\r\n */\r\n allowBase64: boolean;\r\n\r\n /**\r\n * HTML attributes to add to the image element.\r\n * @default {}\r\n * @example { class: 'foo' }\r\n */\r\n HTMLAttributes: Record<string, any>;\r\n}\r\n\r\ndeclare module \"@tiptap/core\" {\r\n interface Commands<ReturnType> {\r\n audio: {\r\n /**\r\n * Add an image\r\n * @param options The image attributes\r\n * @example\r\n * editor\r\n * .commands\r\n * .setAudio({ src: 'https://tiptap.dev/logo.png', alt: 'tiptap', title: 'tiptap logo' })\r\n */\r\n setAudio: (options: {\r\n src: string;\r\n alt?: string;\r\n title?: string;\r\n poster?: string;\r\n }) => ReturnType;\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Matches an image to a ![image](src \"title\") on input.\r\n */\r\nexport const inputRegex =\r\n /(?:^|\\s)(!\\[(.+|:?)]\\((\\S+)(?:(?:\\s+)[\"'](\\S+)[\"'])?\\))$/;\r\n\r\n/**\r\n * This extension allows you to insert images.\r\n * @see https://www.tiptap.dev/api/nodes/image\r\n */\r\nexport const Audio = Node.create<AudioOptions>({\r\n name: \"audio\",\r\n\r\n addOptions() {\r\n return {\r\n inline: false,\r\n allowBase64: false,\r\n HTMLAttributes: {},\r\n };\r\n },\r\n\r\n inline() {\r\n return this.options.inline;\r\n },\r\n\r\n group() {\r\n return this.options.inline ? \"inline\" : \"block\";\r\n },\r\n\r\n draggable: true,\r\n\r\n addAttributes() {\r\n return {\r\n src: {\r\n default: null,\r\n },\r\n alt: {\r\n default: null,\r\n },\r\n title: {\r\n default: null,\r\n },\r\n poster: {\r\n default: null,\r\n },\r\n };\r\n },\r\n\r\n parseHTML() {\r\n return [\r\n {\r\n tag: this.options.allowBase64\r\n ? \"audio[src]\"\r\n : 'audio[src]:not([src^=\"data:\"])',\r\n },\r\n ];\r\n },\r\n\r\n renderHTML({ HTMLAttributes }) {\r\n return [\r\n \"audio\",\r\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\r\n ];\r\n },\r\n\r\n addCommands() {\r\n return {\r\n setAudio:\r\n (options) =>\r\n ({ commands }) => {\r\n return commands.insertContent({\r\n type: this.name,\r\n attrs: options,\r\n });\r\n },\r\n };\r\n },\r\n\r\n addInputRules() {\r\n return [\r\n nodeInputRule({\r\n find: inputRegex,\r\n type: this.type,\r\n getAttributes: (match) => {\r\n const [, , alt, src, title] = match;\r\n\r\n return { src, alt, title };\r\n },\r\n }),\r\n ];\r\n },\r\n});\r\n"],"names":["mergeAttributes","Node","nodeInputRule","inputRegex","Audio","create","name","addOptions","inline","allowBase64","HTMLAttributes","options","group","draggable","addAttributes","src","default","alt","title","poster","parseHTML","tag","renderHTML","addCommands","setAudio","commands","insertContent","type","attrs","addInputRules","find","getAttributes","match"],"mappings":"AAAA,SAASA,eAAe,EAAEC,IAAI,EAAEC,aAAa,QAAQ,eAAe;AA+CpE;;CAEC,GACD,OAAO,MAAMC,aACX,2DAA2D;AAE7D;;;CAGC,GACD,OAAO,MAAMC,QAAQH,KAAKI,MAAM,CAAe;IAC7CC,MAAM;IAENC;QACE,OAAO;YACLC,QAAQ;YACRC,aAAa;YACbC,gBAAgB,CAAC;QACnB;IACF;IAEAF;QACE,OAAO,IAAI,CAACG,OAAO,CAACH,MAAM;IAC5B;IAEAI;QACE,OAAO,IAAI,CAACD,OAAO,CAACH,MAAM,GAAG,WAAW;IAC1C;IAEAK,WAAW;IAEXC;QACE,OAAO;YACLC,KAAK;gBACHC,SAAS;YACX;YACAC,KAAK;gBACHD,SAAS;YACX;YACAE,OAAO;gBACLF,SAAS;YACX;YACAG,QAAQ;gBACNH,SAAS;YACX;QACF;IACF;IAEAI;QACE,OAAO;YACL;gBACEC,KAAK,IAAI,CAACV,OAAO,CAACF,WAAW,GACzB,eACA;YACN;SACD;IACH;IAEAa,YAAW,EAAEZ,cAAc,EAAE;QAC3B,OAAO;YACL;YACAV,gBAAgB,IAAI,CAACW,OAAO,CAACD,cAAc,EAAEA;SAC9C;IACH;IAEAa;QACE,OAAO;YACLC,UACE,CAACb,UACD,CAAC,EAAEc,QAAQ,EAAE;oBACX,OAAOA,SAASC,aAAa,CAAC;wBAC5BC,MAAM,IAAI,CAACrB,IAAI;wBACfsB,OAAOjB;oBACT;gBACF;QACJ;IACF;IAEAkB;QACE,OAAO;YACL3B,cAAc;gBACZ4B,MAAM3B;gBACNwB,MAAM,IAAI,CAACA,IAAI;gBACfI,eAAe,CAACC;oBACd,MAAM,KAAKf,KAAKF,KAAKG,MAAM,GAAGc;oBAE9B,OAAO;wBAAEjB;wBAAKE;wBAAKC;oBAAM;gBAC3B;YACF;SACD;IACH;AACF,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/Audio/index.ts"],"sourcesContent":["export * from \"./Audio.js\";\n"],"names":[],"mappings":"AAAA,cAAc,aAAa"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/Audio/index.ts"],"sourcesContent":["export * from \"./Audio.js\";\r\n"],"names":[],"mappings":"AAAA,cAAc,aAAa"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AudioBlock/AudioBlock.ts"],"sourcesContent":["\"use client\";\n\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport { mergeAttributes, Range } from \"@tiptap/core\";\n\nimport { AudioBlockView } from \"./components/AudioBlockView.js\";\nimport { Audio } from \"../Audio/Audio.js\";\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n audioBlock: {\n setAudioBlock: (attributes: {\n src: string;\n poster: string;\n assetId: string;\n playlistUrl?: string;\n }) => ReturnType;\n setAudioBlockAt: (attributes: {\n src: string;\n poster: string;\n assetId: string;\n playlistUrl?: string;\n\n pos: number | Range;\n }) => ReturnType;\n setAudioBlockAlign: (align: \"left\" | \"center\" | \"right\") => ReturnType;\n setAudioBlockWidth: (width: number) => ReturnType;\n setAudioBlockCaption: (caption: boolean) => ReturnType;\n };\n }\n}\n\nexport const AudioBlock = Audio.extend({\n name: \"audioBlock\",\n\n group: \"block\",\n\n defining: true,\n\n isolating: true,\n\n addAttributes() {\n return {\n src: {\n default: \"\",\n parseHTML: (element) => element.getAttribute(\"src\"),\n renderHTML: (attributes) => ({\n src: attributes.src,\n }),\n },\n poster: {\n default: \"\",\n parseHTML: (element) => element.getAttribute(\"poster\"),\n renderHTML: (attributes) => ({\n poster: attributes.poster,\n }),\n },\n playlistUrl: {\n default: \"\",\n parseHTML: (element) => element.getAttribute(\"data-playlist-url\"),\n renderHTML: (attributes) => ({\n \"data-playlist-url\": attributes.playlistUrl,\n }),\n },\n width: {\n default: \"100%\",\n parseHTML: (element) => element.getAttribute(\"data-width\"),\n renderHTML: (attributes) => ({\n \"data-width\": attributes.width,\n }),\n },\n align: {\n default: \"center\",\n parseHTML: (element) => element.getAttribute(\"data-align\"),\n renderHTML: (attributes) => ({\n \"data-align\": attributes.align,\n }),\n },\n alt: {\n default: undefined,\n parseHTML: (element) => element.getAttribute(\"alt\"),\n renderHTML: (attributes) => ({\n alt: attributes.alt,\n }),\n },\n caption: {\n default: true,\n parseHTML: (element) => element.getAttribute(\"data-caption\") === \"true\",\n renderHTML: (attributes) => ({\n \"data-caption\": attributes.caption,\n }),\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'audio[src*=\"tiptap.dev\"]:not([src^=\"data:\"]), audio[src*=\"windows.net\"]:not([src^=\"data:\"])',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n \"audio\",\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n ];\n },\n\n addCommands() {\n return {\n setAudioBlock:\n (attrs) =>\n ({ commands }) => {\n return commands.insertContent({\n type: \"audioBlock\",\n attrs: {\n src: attrs.src,\n poster: attrs.poster,\n assetId: attrs.assetId,\n playlistUrl: attrs.playlistUrl,\n },\n });\n },\n\n setAudioBlockAt:\n (attrs) =>\n ({ commands }) => {\n return commands.insertContentAt(attrs.pos, {\n type: \"audioBlock\",\n attrs: {\n src: attrs.src,\n poster: attrs.poster,\n assetId: attrs.assetId,\n playlistUrl: attrs.playlistUrl,\n },\n });\n },\n\n setAudioBlockAlign:\n (align) =>\n ({ commands }) =>\n commands.updateAttributes(\"audioBlock\", { align }),\n\n setAudioBlockWidth:\n (width) =>\n ({ commands }) =>\n commands.updateAttributes(\"audioBlock\", {\n width: `${Math.max(0, Math.min(100, width))}%`,\n }),\n\n setAudioBlockCaption:\n (caption) =>\n ({ commands }) =>\n commands.updateAttributes(\"audioBlock\", { caption }),\n };\n },\n\n addNodeView() {\n //@ts-ignore\n return ReactNodeViewRenderer(AudioBlockView);\n },\n});\n\nexport default AudioBlock;\n"],"names":["ReactNodeViewRenderer","mergeAttributes","AudioBlockView","Audio","AudioBlock","extend","name","group","defining","isolating","addAttributes","src","default","parseHTML","element","getAttribute","renderHTML","attributes","poster","playlistUrl","width","align","alt","undefined","caption","tag","HTMLAttributes","options","addCommands","setAudioBlock","attrs","commands","insertContent","type","assetId","setAudioBlockAt","insertContentAt","pos","setAudioBlockAlign","updateAttributes","setAudioBlockWidth","Math","max","min","setAudioBlockCaption","addNodeView"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/AudioBlock/AudioBlock.ts"],"sourcesContent":["\"use client\";\r\n\r\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\r\nimport { mergeAttributes, Range } from \"@tiptap/core\";\r\n\r\nimport { AudioBlockView } from \"./components/AudioBlockView.js\";\r\nimport { Audio } from \"../Audio/Audio.js\";\r\n\r\ndeclare module \"@tiptap/core\" {\r\n interface Commands<ReturnType> {\r\n audioBlock: {\r\n setAudioBlock: (attributes: {\r\n src: string;\r\n poster: string;\r\n assetId: string;\r\n playlistUrl?: string;\r\n }) => ReturnType;\r\n setAudioBlockAt: (attributes: {\r\n src: string;\r\n poster: string;\r\n assetId: string;\r\n playlistUrl?: string;\r\n\r\n pos: number | Range;\r\n }) => ReturnType;\r\n setAudioBlockAlign: (align: \"left\" | \"center\" | \"right\") => ReturnType;\r\n setAudioBlockWidth: (width: number) => ReturnType;\r\n setAudioBlockCaption: (caption: boolean) => ReturnType;\r\n };\r\n }\r\n}\r\n\r\nexport const AudioBlock = Audio.extend({\r\n name: \"audioBlock\",\r\n\r\n group: \"block\",\r\n\r\n defining: true,\r\n\r\n isolating: true,\r\n\r\n addAttributes() {\r\n return {\r\n src: {\r\n default: \"\",\r\n parseHTML: (element) => element.getAttribute(\"src\"),\r\n renderHTML: (attributes) => ({\r\n src: attributes.src,\r\n }),\r\n },\r\n poster: {\r\n default: \"\",\r\n parseHTML: (element) => element.getAttribute(\"poster\"),\r\n renderHTML: (attributes) => ({\r\n poster: attributes.poster,\r\n }),\r\n },\r\n playlistUrl: {\r\n default: \"\",\r\n parseHTML: (element) => element.getAttribute(\"data-playlist-url\"),\r\n renderHTML: (attributes) => ({\r\n \"data-playlist-url\": attributes.playlistUrl,\r\n }),\r\n },\r\n width: {\r\n default: \"100%\",\r\n parseHTML: (element) => element.getAttribute(\"data-width\"),\r\n renderHTML: (attributes) => ({\r\n \"data-width\": attributes.width,\r\n }),\r\n },\r\n align: {\r\n default: \"center\",\r\n parseHTML: (element) => element.getAttribute(\"data-align\"),\r\n renderHTML: (attributes) => ({\r\n \"data-align\": attributes.align,\r\n }),\r\n },\r\n alt: {\r\n default: undefined,\r\n parseHTML: (element) => element.getAttribute(\"alt\"),\r\n renderHTML: (attributes) => ({\r\n alt: attributes.alt,\r\n }),\r\n },\r\n caption: {\r\n default: true,\r\n parseHTML: (element) => element.getAttribute(\"data-caption\") === \"true\",\r\n renderHTML: (attributes) => ({\r\n \"data-caption\": attributes.caption,\r\n }),\r\n },\r\n };\r\n },\r\n\r\n parseHTML() {\r\n return [\r\n {\r\n tag: 'audio[src*=\"tiptap.dev\"]:not([src^=\"data:\"]), audio[src*=\"windows.net\"]:not([src^=\"data:\"])',\r\n },\r\n ];\r\n },\r\n\r\n renderHTML({ HTMLAttributes }) {\r\n return [\r\n \"audio\",\r\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\r\n ];\r\n },\r\n\r\n addCommands() {\r\n return {\r\n setAudioBlock:\r\n (attrs) =>\r\n ({ commands }) => {\r\n return commands.insertContent({\r\n type: \"audioBlock\",\r\n attrs: {\r\n src: attrs.src,\r\n poster: attrs.poster,\r\n assetId: attrs.assetId,\r\n playlistUrl: attrs.playlistUrl,\r\n },\r\n });\r\n },\r\n\r\n setAudioBlockAt:\r\n (attrs) =>\r\n ({ commands }) => {\r\n return commands.insertContentAt(attrs.pos, {\r\n type: \"audioBlock\",\r\n attrs: {\r\n src: attrs.src,\r\n poster: attrs.poster,\r\n assetId: attrs.assetId,\r\n playlistUrl: attrs.playlistUrl,\r\n },\r\n });\r\n },\r\n\r\n setAudioBlockAlign:\r\n (align) =>\r\n ({ commands }) =>\r\n commands.updateAttributes(\"audioBlock\", { align }),\r\n\r\n setAudioBlockWidth:\r\n (width) =>\r\n ({ commands }) =>\r\n commands.updateAttributes(\"audioBlock\", {\r\n width: `${Math.max(0, Math.min(100, width))}%`,\r\n }),\r\n\r\n setAudioBlockCaption:\r\n (caption) =>\r\n ({ commands }) =>\r\n commands.updateAttributes(\"audioBlock\", { caption }),\r\n };\r\n },\r\n\r\n addNodeView() {\r\n //@ts-ignore\r\n return ReactNodeViewRenderer(AudioBlockView);\r\n },\r\n});\r\n\r\nexport default AudioBlock;\r\n"],"names":["ReactNodeViewRenderer","mergeAttributes","AudioBlockView","Audio","AudioBlock","extend","name","group","defining","isolating","addAttributes","src","default","parseHTML","element","getAttribute","renderHTML","attributes","poster","playlistUrl","width","align","alt","undefined","caption","tag","HTMLAttributes","options","addCommands","setAudioBlock","attrs","commands","insertContent","type","assetId","setAudioBlockAt","insertContentAt","pos","setAudioBlockAlign","updateAttributes","setAudioBlockWidth","Math","max","min","setAudioBlockCaption","addNodeView"],"mappings":"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"}