payload-richtext-tiptap 0.0.139 → 0.0.141

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 (47) hide show
  1. package/dist/src/fields/TiptapEditor/extensions/AudioBlock/AudioBlock.js.map +1 -1
  2. package/dist/src/fields/TiptapEditor/extensions/AudioBlock/components/AudioBlockMenu.js.map +1 -1
  3. package/dist/src/fields/TiptapEditor/extensions/FontSize/FontSize.js.map +1 -1
  4. package/dist/src/fields/TiptapEditor/extensions/Heading/Heading.js.map +1 -1
  5. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/ImageBlock.js.map +1 -1
  6. package/dist/src/fields/TiptapEditor/extensions/ImageBlock/components/ImageBlockMenu.js.map +1 -1
  7. package/dist/src/fields/TiptapEditor/extensions/InsideLinks/InsideLink.client.js.map +1 -1
  8. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/Columns.js +3 -3
  9. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/Columns.js.map +1 -1
  10. package/dist/src/fields/TiptapEditor/extensions/MultiColumn/menus/ColumnsMenu.js.map +1 -1
  11. package/dist/src/fields/TiptapEditor/extensions/SlashCommand/MenuList.js.map +1 -1
  12. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Facebook/facebook.js.map +1 -1
  13. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Instagram/instagram.js.map +1 -1
  14. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Tiktok/tiktok.js.map +1 -1
  15. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Twitter/twitter.js.map +1 -1
  16. package/dist/src/fields/TiptapEditor/extensions/SocialMedia/Youtube/youtube.js.map +1 -1
  17. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/VideoBlock.js.map +1 -1
  18. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockMenu.js.map +1 -1
  19. package/dist/src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/events.d.ts.map +1 -1
  20. package/dist/src/fields/TiptapEditor/extensions/extension-kit.d.ts +1 -1
  21. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentInlineRenderer.d.ts.map +1 -1
  22. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentInlineRenderer.js +1 -1
  23. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentInlineRenderer.js.map +1 -1
  24. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentSideRenderer.d.ts +1 -1
  25. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentSideRenderer.d.ts.map +1 -1
  26. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentSideRenderer.js +1 -1
  27. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentSideRenderer.js.map +1 -1
  28. package/dist/src/fields/TiptapEditor/extensions/serverside/EmbedContentSidebarRenderer.js.map +1 -1
  29. package/dist/src/fields/TiptapEditor/extensions/serverside/FacebookServerside.js.map +1 -1
  30. package/dist/src/fields/TiptapEditor/extensions/serverside/InstagramServerside.js.map +1 -1
  31. package/dist/src/fields/TiptapEditor/extensions/serverside/LinkedinServerside.js.map +1 -1
  32. package/dist/src/fields/TiptapEditor/extensions/serverside/TiktokServerside.js.map +1 -1
  33. package/dist/src/fields/TiptapEditor/extensions/serverside/TwitterBlockServerside.js.map +1 -1
  34. package/dist/src/fields/TiptapEditor/extensions/serverside/YouTubeServerside.js.map +1 -1
  35. package/dist/src/fields/TiptapEditor/extensions/serverside/getAssetsAspectRatio.js.map +1 -1
  36. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.js.map +1 -1
  37. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/FontSizePicker.js.map +1 -1
  38. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.d.ts.map +1 -1
  39. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js +16 -11
  40. package/dist/src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.js.map +1 -1
  41. package/dist/src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.js.map +1 -1
  42. package/dist/src/fields/TiptapEditor/features/panels/AIEditorPanel/utils.js.map +1 -1
  43. package/dist/src/fields/TiptapEditor/hooks/useBlockEditor.js.map +1 -1
  44. package/dist/src/fields/TiptapEditor/lib/tiptapSchema.d.ts +68 -68
  45. package/dist/src/fields/TiptapEditor/lib/utils/cssVar.js.map +1 -1
  46. package/dist/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +27 -30
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/VideoBlock/VideoBlock.ts"],"sourcesContent":["\"use client\";\n\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport { mergeAttributes, Range } from \"@tiptap/core\";\n\nimport { VideoBlockView } from \"./components/VideoBlockView.js\";\nimport { Video } from \"../Video/Video.js\";\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n videoBlock: {\n setVideoBlock: (attributes: {\n src: string;\n poster: string;\n assetId: string;\n playlistUrl?: string;\n title: string;\n actualWidth?: number;\n actualHeight?: number;\n }) => ReturnType;\n setVideoBlockAt: (attributes: {\n src: string;\n poster: string;\n assetId: string;\n playlistUrl?: string;\n title: string;\n pos: number | Range;\n actualWidth?: number;\n actualHeight?: number;\n }) => ReturnType;\n setVideoBlockAlign: (align: \"left\" | \"center\" | \"right\") => ReturnType;\n setVideoBlockWidth: (width: number) => ReturnType;\n setVideoBlockCaption: (caption: boolean) => ReturnType;\n };\n }\n}\n\nexport const VideoBlock = Video.extend({\n name: \"videoBlock\",\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 title: {\n default: \"\",\n parseHTML: (element) => element.getAttribute(\"title\"),\n renderHTML: (attributes) => ({\n title: attributes.title,\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 actualWidth: {\n default: 0,\n parseHTML: (element) => element.getAttribute(\"data-actual-width\"),\n renderHTML: (attributes) => ({\n \"data-actual-width\": attributes.actualWidth,\n }),\n },\n actualHeight: {\n default: 0,\n parseHTML: (element) => element.getAttribute(\"data-actual-height\"),\n renderHTML: (attributes) => ({\n \"data-actual-height\": attributes.actualHeight,\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: 'video[src*=\"tiptap.dev\"]:not([src^=\"data:\"]), video[src*=\"windows.net\"]:not([src^=\"data:\"])',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n { class: \"imageBlock\" },\n [\"video\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)],\n [\n \"caption\",\n mergeAttributes(\n {\n class:\n \"text-center text-gray-400 w-full h-16 mb-2 placeholder-black p-1 text-sm border-0 rounded appearance-none\",\n },\n { defaultValue: HTMLAttributes.title || HTMLAttributes.caption }\n ),\n HTMLAttributes.title || HTMLAttributes.caption,\n ],\n ];\n },\n\n addCommands() {\n return {\n setVideoBlock:\n (attrs) =>\n ({ commands }) => {\n return commands.insertContent({\n type: \"videoBlock\",\n attrs: {\n src: attrs.src,\n poster: attrs.poster,\n assetId: attrs.assetId,\n playlistUrl: attrs.playlistUrl,\n title: attrs.title,\n actualWidth: attrs.actualWidth,\n actualHeight: attrs.actualHeight,\n },\n });\n },\n\n setVideoBlockAt:\n (attrs) =>\n ({ commands }) => {\n return commands.insertContentAt(attrs.pos, {\n type: \"videoBlock\",\n attrs: {\n src: attrs.src,\n poster: attrs.poster,\n assetId: attrs.assetId,\n playlistUrl: attrs.playlistUrl,\n title: attrs.title,\n actualWidth: attrs.actualWidth,\n actualHeight: attrs.actualHeight,\n },\n });\n },\n\n setVideoBlockAlign:\n (align) =>\n ({ commands }) =>\n commands.updateAttributes(\"videoBlock\", { align }),\n\n setVideoBlockWidth:\n (width) =>\n ({ commands }) =>\n commands.updateAttributes(\"videoBlock\", {\n width: `${Math.max(0, Math.min(100, width))}%`,\n }),\n\n setVideoBlockCaption:\n (caption) =>\n ({ commands }) =>\n commands.updateAttributes(\"videoBlock\", { caption }),\n };\n },\n\n addNodeView() {\n //@ts-ignore\n return ReactNodeViewRenderer(VideoBlockView);\n },\n});\n\nexport default VideoBlock;\n"],"names":["ReactNodeViewRenderer","mergeAttributes","VideoBlockView","Video","VideoBlock","extend","name","group","defining","isolating","addAttributes","src","default","parseHTML","element","getAttribute","renderHTML","attributes","title","poster","playlistUrl","width","actualWidth","actualHeight","align","alt","undefined","caption","tag","HTMLAttributes","class","options","defaultValue","addCommands","setVideoBlock","attrs","commands","insertContent","type","assetId","setVideoBlockAt","insertContentAt","pos","setVideoBlockAlign","updateAttributes","setVideoBlockWidth","Math","max","min","setVideoBlockCaption","addNodeView"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/VideoBlock/VideoBlock.ts"],"sourcesContent":["\"use client\";\n\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport { mergeAttributes, Range } from \"@tiptap/core\";\n\nimport { VideoBlockView } from \"./components/VideoBlockView.js\";\nimport { Video } from \"../Video/Video.js\";\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n videoBlock: {\n setVideoBlock: (attributes: {\n src: string;\n poster: string;\n assetId: string;\n playlistUrl?: string;\n title: string;\n actualWidth?: number;\n actualHeight?: number;\n }) => ReturnType;\n setVideoBlockAt: (attributes: {\n src: string;\n poster: string;\n assetId: string;\n playlistUrl?: string;\n title: string;\n pos: number | Range;\n actualWidth?: number;\n actualHeight?: number;\n }) => ReturnType;\n setVideoBlockAlign: (align: \"left\" | \"center\" | \"right\") => ReturnType;\n setVideoBlockWidth: (width: number) => ReturnType;\n setVideoBlockCaption: (caption: boolean) => ReturnType;\n };\n }\n}\n\nexport const VideoBlock = Video.extend({\n name: \"videoBlock\",\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 title: {\n default: \"\",\n parseHTML: (element) => element.getAttribute(\"title\"),\n renderHTML: (attributes) => ({\n title: attributes.title,\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 actualWidth: {\n default: 0,\n parseHTML: (element) => element.getAttribute(\"data-actual-width\"),\n renderHTML: (attributes) => ({\n \"data-actual-width\": attributes.actualWidth,\n }),\n },\n actualHeight: {\n default: 0,\n parseHTML: (element) => element.getAttribute(\"data-actual-height\"),\n renderHTML: (attributes) => ({\n \"data-actual-height\": attributes.actualHeight,\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: 'video[src*=\"tiptap.dev\"]:not([src^=\"data:\"]), video[src*=\"windows.net\"]:not([src^=\"data:\"])',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n { class: \"imageBlock\" },\n [\"video\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)],\n [\n \"caption\",\n mergeAttributes(\n {\n class:\n \"text-center text-gray-400 w-full h-16 mb-2 placeholder-black p-1 text-sm border-0 rounded appearance-none\",\n },\n { defaultValue: HTMLAttributes.title || HTMLAttributes.caption }\n ),\n HTMLAttributes.title || HTMLAttributes.caption,\n ],\n ];\n },\n\n addCommands() {\n return {\n setVideoBlock:\n (attrs) =>\n ({ commands }) => {\n return commands.insertContent({\n type: \"videoBlock\",\n attrs: {\n src: attrs.src,\n poster: attrs.poster,\n assetId: attrs.assetId,\n playlistUrl: attrs.playlistUrl,\n title: attrs.title,\n actualWidth: attrs.actualWidth,\n actualHeight: attrs.actualHeight,\n },\n });\n },\n\n setVideoBlockAt:\n (attrs) =>\n ({ commands }) => {\n return commands.insertContentAt(attrs.pos, {\n type: \"videoBlock\",\n attrs: {\n src: attrs.src,\n poster: attrs.poster,\n assetId: attrs.assetId,\n playlistUrl: attrs.playlistUrl,\n title: attrs.title,\n actualWidth: attrs.actualWidth,\n actualHeight: attrs.actualHeight,\n },\n });\n },\n\n setVideoBlockAlign:\n (align) =>\n ({ commands }) =>\n commands.updateAttributes(\"videoBlock\", { align }),\n\n setVideoBlockWidth:\n (width) =>\n ({ commands }) =>\n commands.updateAttributes(\"videoBlock\", {\n width: `${Math.max(0, Math.min(100, width))}%`,\n }),\n\n setVideoBlockCaption:\n (caption) =>\n ({ commands }) =>\n commands.updateAttributes(\"videoBlock\", { caption }),\n };\n },\n\n addNodeView() {\n //@ts-ignore\n return ReactNodeViewRenderer(VideoBlockView);\n },\n});\n\nexport default VideoBlock;\n"],"names":["ReactNodeViewRenderer","mergeAttributes","VideoBlockView","Video","VideoBlock","extend","name","group","defining","isolating","addAttributes","src","default","parseHTML","element","getAttribute","renderHTML","attributes","title","poster","playlistUrl","width","actualWidth","actualHeight","align","alt","undefined","caption","tag","HTMLAttributes","class","options","defaultValue","addCommands","setVideoBlock","attrs","commands","insertContent","type","assetId","setVideoBlockAt","insertContentAt","pos","setVideoBlockAlign","updateAttributes","setVideoBlockWidth","Math","max","min","setVideoBlockCaption","addNodeView"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockMenu.tsx"],"sourcesContent":["import { BubbleMenu as BaseBubbleMenu } from \"@tiptap/react\";\nimport { ReactNode, useCallback, useRef } from \"react\";\nimport { Instance, sticky } from \"tippy.js\";\nimport { v4 as uuid } from \"uuid\";\n\nimport {\n AlignHorizontalDistributeCenter,\n AlignHorizontalDistributeEnd,\n AlignHorizontalDistributeStart,\n Pencil,\n PencilOff,\n} from \"lucide-react\";\nimport { MenuProps } from \"../../../features/menus/types.js\";\nimport { Icon } from \"../../../features/ui/Icon.js\";\nimport { Toolbar } from \"../../../features/ui/Toolbar.js\";\nimport { getRenderContainer } from \"../../../lib/utils/index.js\";\nimport { VideoBlockWidth } from \"./VideoBlockWidth.js\";\nimport i18next from \"i18next\";\n\nexport const VideoBlockMenu = ({ editor, appendTo }: MenuProps): ReactNode => {\n const menuRef = useRef<HTMLDivElement>(null);\n const tippyInstance = useRef<Instance | null>(null);\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor, \"node-videoBlock\");\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const shouldShow = useCallback(() => {\n const isActive = editor.isActive(\"videoBlock\");\n\n return isActive;\n }, [editor]);\n\n const onAlignVideoLeft = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setVideoBlockAlign(\"left\")\n .run();\n }, [editor]);\n\n const onAlignVideoCenter = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setVideoBlockAlign(\"center\")\n .run();\n }, [editor]);\n\n const onAlignVideoRight = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setVideoBlockAlign(\"right\")\n .run();\n }, [editor]);\n\n const onHideCaption = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setVideoBlockCaption(\n editor.isActive(\"videoBlock\", { caption: false }) ? true : false\n )\n .run();\n }, [editor]);\n\n const onWidthChange = useCallback(\n (value: number) => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setVideoBlockWidth(value)\n .run();\n },\n [editor]\n );\n\n return (\n <BaseBubbleMenu\n editor={editor}\n pluginKey={`videoBlockMenu-${uuid()}`}\n shouldShow={shouldShow}\n updateDelay={0}\n tippyOptions={{\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: \"flip\", enabled: false }],\n },\n getReferenceClientRect,\n onCreate: (instance: Instance) => {\n tippyInstance.current = instance;\n },\n appendTo: () => {\n return appendTo?.current;\n },\n plugins: [sticky],\n sticky: \"popper\",\n }}\n >\n <Toolbar.Wrapper shouldShowContent={shouldShow()} ref={menuRef}>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"toggleCaption\") || \"Hide/Show caption\"}\n active={editor.isActive(\"videoBlock\", { caption: false })}\n onClick={onHideCaption}\n >\n <Icon\n icon={\n editor.isActive(\"videoBlock\", { caption: false })\n ? PencilOff\n : Pencil\n }\n />\n </Toolbar.Button>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignVideoLeft\") || \"Align video left\"}\n active={editor.isActive(\"videoBlock\", { align: \"left\" })}\n onClick={onAlignVideoLeft}\n >\n <Icon icon={AlignHorizontalDistributeStart} />\n </Toolbar.Button>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignVideoCenter\") || \"Align video center\"}\n active={editor.isActive(\"videoBlock\", { align: \"center\" })}\n onClick={onAlignVideoCenter}\n >\n <Icon icon={AlignHorizontalDistributeCenter} />\n </Toolbar.Button>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignVideoRight\") || \"Align video right\"}\n active={editor.isActive(\"videoBlock\", { align: \"right\" })}\n onClick={onAlignVideoRight}\n >\n <Icon icon={AlignHorizontalDistributeEnd} />\n </Toolbar.Button>\n <Toolbar.Divider />\n <VideoBlockWidth\n onChange={onWidthChange}\n value={parseInt(editor.getAttributes(\"videoBlock\").width)}\n />\n </Toolbar.Wrapper>\n </BaseBubbleMenu>\n );\n};\n\nexport default VideoBlockMenu;\n"],"names":["BubbleMenu","BaseBubbleMenu","useCallback","useRef","sticky","v4","uuid","AlignHorizontalDistributeCenter","AlignHorizontalDistributeEnd","AlignHorizontalDistributeStart","Pencil","PencilOff","Icon","Toolbar","getRenderContainer","VideoBlockWidth","i18next","VideoBlockMenu","editor","appendTo","menuRef","tippyInstance","getReferenceClientRect","renderContainer","rect","getBoundingClientRect","DOMRect","shouldShow","isActive","onAlignVideoLeft","chain","focus","undefined","scrollIntoView","setVideoBlockAlign","run","onAlignVideoCenter","onAlignVideoRight","onHideCaption","setVideoBlockCaption","caption","onWidthChange","value","setVideoBlockWidth","pluginKey","updateDelay","tippyOptions","offset","popperOptions","modifiers","name","enabled","onCreate","instance","current","plugins","Wrapper","shouldShowContent","ref","Button","type","tooltip","t","active","onClick","icon","align","Divider","onChange","parseInt","getAttributes","width"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/extensions/VideoBlock/components/VideoBlockMenu.tsx"],"sourcesContent":["import { BubbleMenu as BaseBubbleMenu } from \"@tiptap/react\";\nimport { ReactNode, useCallback, useRef } from \"react\";\nimport { Instance, sticky } from \"tippy.js\";\nimport { v4 as uuid } from \"uuid\";\n\nimport {\n AlignHorizontalDistributeCenter,\n AlignHorizontalDistributeEnd,\n AlignHorizontalDistributeStart,\n Pencil,\n PencilOff,\n} from \"lucide-react\";\nimport { MenuProps } from \"../../../features/menus/types.js\";\nimport { Icon } from \"../../../features/ui/Icon.js\";\nimport { Toolbar } from \"../../../features/ui/Toolbar.js\";\nimport { getRenderContainer } from \"../../../lib/utils/index.js\";\nimport { VideoBlockWidth } from \"./VideoBlockWidth.js\";\nimport i18next from \"i18next\";\n\nexport const VideoBlockMenu = ({ editor, appendTo }: MenuProps): ReactNode => {\n const menuRef = useRef<HTMLDivElement>(null);\n const tippyInstance = useRef<Instance | null>(null);\n\n const getReferenceClientRect = useCallback(() => {\n const renderContainer = getRenderContainer(editor, \"node-videoBlock\");\n const rect =\n renderContainer?.getBoundingClientRect() ||\n new DOMRect(-1000, -1000, 0, 0);\n\n return rect;\n }, [editor]);\n\n const shouldShow = useCallback(() => {\n const isActive = editor.isActive(\"videoBlock\");\n\n return isActive;\n }, [editor]);\n\n const onAlignVideoLeft = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setVideoBlockAlign(\"left\")\n .run();\n }, [editor]);\n\n const onAlignVideoCenter = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setVideoBlockAlign(\"center\")\n .run();\n }, [editor]);\n\n const onAlignVideoRight = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setVideoBlockAlign(\"right\")\n .run();\n }, [editor]);\n\n const onHideCaption = useCallback(() => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setVideoBlockCaption(\n editor.isActive(\"videoBlock\", { caption: false }) ? true : false\n )\n .run();\n }, [editor]);\n\n const onWidthChange = useCallback(\n (value: number) => {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .setVideoBlockWidth(value)\n .run();\n },\n [editor]\n );\n\n return (\n <BaseBubbleMenu\n editor={editor}\n pluginKey={`videoBlockMenu-${uuid()}`}\n shouldShow={shouldShow}\n updateDelay={0}\n tippyOptions={{\n offset: [0, 8],\n popperOptions: {\n modifiers: [{ name: \"flip\", enabled: false }],\n },\n getReferenceClientRect,\n onCreate: (instance: Instance) => {\n tippyInstance.current = instance;\n },\n appendTo: () => {\n return appendTo?.current;\n },\n plugins: [sticky],\n sticky: \"popper\",\n }}\n >\n <Toolbar.Wrapper shouldShowContent={shouldShow()} ref={menuRef}>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"toggleCaption\") || \"Hide/Show caption\"}\n active={editor.isActive(\"videoBlock\", { caption: false })}\n onClick={onHideCaption}\n >\n <Icon\n icon={\n editor.isActive(\"videoBlock\", { caption: false })\n ? PencilOff\n : Pencil\n }\n />\n </Toolbar.Button>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignVideoLeft\") || \"Align video left\"}\n active={editor.isActive(\"videoBlock\", { align: \"left\" })}\n onClick={onAlignVideoLeft}\n >\n <Icon icon={AlignHorizontalDistributeStart} />\n </Toolbar.Button>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignVideoCenter\") || \"Align video center\"}\n active={editor.isActive(\"videoBlock\", { align: \"center\" })}\n onClick={onAlignVideoCenter}\n >\n <Icon icon={AlignHorizontalDistributeCenter} />\n </Toolbar.Button>\n <Toolbar.Button\n type=\"button\"\n tooltip={i18next.t(\"alignVideoRight\") || \"Align video right\"}\n active={editor.isActive(\"videoBlock\", { align: \"right\" })}\n onClick={onAlignVideoRight}\n >\n <Icon icon={AlignHorizontalDistributeEnd} />\n </Toolbar.Button>\n <Toolbar.Divider />\n <VideoBlockWidth\n onChange={onWidthChange}\n value={parseInt(editor.getAttributes(\"videoBlock\").width)}\n />\n </Toolbar.Wrapper>\n </BaseBubbleMenu>\n );\n};\n\nexport default VideoBlockMenu;\n"],"names":["BubbleMenu","BaseBubbleMenu","useCallback","useRef","sticky","v4","uuid","AlignHorizontalDistributeCenter","AlignHorizontalDistributeEnd","AlignHorizontalDistributeStart","Pencil","PencilOff","Icon","Toolbar","getRenderContainer","VideoBlockWidth","i18next","VideoBlockMenu","editor","appendTo","menuRef","tippyInstance","getReferenceClientRect","renderContainer","rect","getBoundingClientRect","DOMRect","shouldShow","isActive","onAlignVideoLeft","chain","focus","undefined","scrollIntoView","setVideoBlockAlign","run","onAlignVideoCenter","onAlignVideoRight","onHideCaption","setVideoBlockCaption","caption","onWidthChange","value","setVideoBlockWidth","pluginKey","updateDelay","tippyOptions","offset","popperOptions","modifiers","name","enabled","onCreate","instance","current","plugins","Wrapper","shouldShowContent","ref","Button","type","tooltip","t","active","onClick","icon","align","Divider","onChange","parseInt","getAttributes","width"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/events.js"],"names":[],"mappings":"AAAA,mDAAoD;AACpD,iDAAkD;AAClD,4DAA6D"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/fields/TiptapEditor/extensions/VideoBlock/components/videojs/quality-selector/events.js"],"names":[],"mappings":"AAAA,gCAAiC,kBAAkB,CAAC;AACpD,+BAAgC,iBAAiB,CAAC;AAClD,qCAAsC,sBAAsB,CAAC"}
@@ -3,6 +3,6 @@ interface ExtensionKitProps {
3
3
  openAssetHQHandler: openAssetHQType;
4
4
  dir?: "ltr" | "rtl";
5
5
  }
6
- export declare const ExtensionKit: ({ dir, openAssetHQHandler, }: ExtensionKitProps) => (import("@tiptap/core").Node<any, any> | import("@tiptap/core").Extension<any, any> | import("@tiptap/core").Mark<import("@tiptap/extension-subscript").SubscriptExtensionOptions, any>)[];
6
+ export declare const ExtensionKit: ({ dir, openAssetHQHandler, }: ExtensionKitProps) => (import("@tiptap/core").Extension<any, any> | import("@tiptap/core").Node<any, any> | import("@tiptap/core").Mark<import("@tiptap/extension-subscript").SubscriptExtensionOptions, any>)[];
7
7
  export default ExtensionKit;
8
8
  //# sourceMappingURL=extension-kit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmbedContentInlineRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/EmbedContentInlineRenderer.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,0BAA0B,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;;;CAAA,+BAyBlE"}
1
+ {"version":3,"file":"EmbedContentInlineRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/EmbedContentInlineRenderer.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,0BAA0B,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;;;CAAA,+BA6BlE"}
@@ -17,7 +17,7 @@ export function EmbedContentInlineRenderer({ body, getVideoAspect }) {
17
17
  }, []);
18
18
  if (!mounted) return null;
19
19
  return /*#__PURE__*/ _jsx(_Fragment, {
20
- children: body.content.filter((content)=>content?.attrs?.["data-id"]).map((content)=>{
20
+ children: body.content.filter((content)=>typeof content?.attrs?.["data-id"] === "number" || typeof content?.attrs?.["data-id"] === "string").map((content)=>{
21
21
  return /*#__PURE__*/ _jsx(CustomPortal, {
22
22
  container: document?.querySelector(`[data-id='${content.attrs["data-id"]}']`),
23
23
  content: content,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/EmbedContentInlineRenderer.tsx"],"sourcesContent":["\"use client\";\n\nimport { Portal } from \"@radix-ui/react-portal\";\nimport { ComponentProps, memo, useEffect, useState } from \"react\";\n\nimport { renderEmbedContent } from \"./RenderEmbedClientSide.js\";\n\nconst CustomPortal = memo(\n ({\n content,\n getVideoAspect,\n ...props\n }: ComponentProps<typeof Portal> & { getVideoAspect }) => {\n useEffect(() => {}, []);\n return (\n <Portal {...props}>{renderEmbedContent(content, getVideoAspect)}</Portal>\n );\n }\n);\n\nexport function EmbedContentInlineRenderer({ body, getVideoAspect }) {\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n return (\n <>\n {body.content\n .filter((content) => content?.attrs?.[\"data-id\"])\n .map((content) => {\n return (\n <CustomPortal\n key={`embed-content-inline-${content.attrs[\"data-id\"]}-${content.attrs.key}`}\n container={document?.querySelector(\n `[data-id='${content.attrs[\"data-id\"]}']`\n )}\n content={content}\n getVideoAspect={getVideoAspect}\n />\n );\n })}\n </>\n );\n}\n"],"names":["Portal","memo","useEffect","useState","renderEmbedContent","CustomPortal","content","getVideoAspect","props","EmbedContentInlineRenderer","body","mounted","setMounted","filter","attrs","map","container","document","querySelector","key"],"mappings":"AAAA;;AAEA,SAASA,MAAM,QAAQ,yBAAyB;AAChD,SAAyBC,IAAI,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAElE,SAASC,kBAAkB,QAAQ,6BAA6B;AAEhE,MAAMC,6BAAeJ,KACnB,CAAC,EACCK,OAAO,EACPC,cAAc,EACd,GAAGC,OACgD;IACnDN,UAAU,KAAO,GAAG,EAAE;IACtB,qBACE,KAACF;QAAQ,GAAGQ,KAAK;kBAAGJ,mBAAmBE,SAASC;;AAEpD;AAGF,OAAO,SAASE,2BAA2B,EAAEC,IAAI,EAAEH,cAAc,EAAE;IACjE,MAAM,CAACI,SAASC,WAAW,GAAGT,SAAS;IACvCD,UAAU;QACRU,WAAW;IACb,GAAG,EAAE;IAEL,IAAI,CAACD,SAAS,OAAO;IACrB,qBACE;kBACGD,KAAKJ,OAAO,CACVO,MAAM,CAAC,CAACP,UAAYA,SAASQ,OAAO,CAAC,UAAU,EAC/CC,GAAG,CAAC,CAACT;YACJ,qBACE,KAACD;gBAECW,WAAWC,UAAUC,cACnB,CAAC,UAAU,EAAEZ,QAAQQ,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBAE3CR,SAASA;gBACTC,gBAAgBA;eALX,CAAC,qBAAqB,EAAED,QAAQQ,KAAK,CAAC,UAAU,CAAC,CAAC,EAAER,QAAQQ,KAAK,CAACK,GAAG,CAAC,CAAC;QAQlF;;AAGR"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/EmbedContentInlineRenderer.tsx"],"sourcesContent":["\"use client\";\n\nimport { Portal } from \"@radix-ui/react-portal\";\nimport { ComponentProps, memo, useEffect, useState } from \"react\";\n\nimport { renderEmbedContent } from \"./RenderEmbedClientSide.js\";\n\nconst CustomPortal = memo(\n ({\n content,\n getVideoAspect,\n ...props\n }: ComponentProps<typeof Portal> & { getVideoAspect }) => {\n useEffect(() => {}, []);\n return (\n <Portal {...props}>{renderEmbedContent(content, getVideoAspect)}</Portal>\n );\n }\n);\n\nexport function EmbedContentInlineRenderer({ body, getVideoAspect }) {\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n return (\n <>\n {body.content\n .filter(\n (content) =>\n typeof content?.attrs?.[\"data-id\"] === \"number\" ||\n typeof content?.attrs?.[\"data-id\"] === \"string\"\n )\n .map((content) => {\n return (\n <CustomPortal\n key={`embed-content-inline-${content.attrs[\"data-id\"]}-${content.attrs.key}`}\n container={document?.querySelector(\n `[data-id='${content.attrs[\"data-id\"]}']`\n )}\n content={content}\n getVideoAspect={getVideoAspect}\n />\n );\n })}\n </>\n );\n}\n"],"names":["Portal","memo","useEffect","useState","renderEmbedContent","CustomPortal","content","getVideoAspect","props","EmbedContentInlineRenderer","body","mounted","setMounted","filter","attrs","map","container","document","querySelector","key"],"mappings":"AAAA;;AAEA,SAASA,MAAM,QAAQ,yBAAyB;AAChD,SAAyBC,IAAI,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAElE,SAASC,kBAAkB,QAAQ,6BAA6B;AAEhE,MAAMC,6BAAeJ,KACnB,CAAC,EACCK,OAAO,EACPC,cAAc,EACd,GAAGC,OACgD;IACnDN,UAAU,KAAO,GAAG,EAAE;IACtB,qBACE,KAACF;QAAQ,GAAGQ,KAAK;kBAAGJ,mBAAmBE,SAASC;;AAEpD;AAGF,OAAO,SAASE,2BAA2B,EAAEC,IAAI,EAAEH,cAAc,EAAE;IACjE,MAAM,CAACI,SAASC,WAAW,GAAGT,SAAS;IACvCD,UAAU;QACRU,WAAW;IACb,GAAG,EAAE;IAEL,IAAI,CAACD,SAAS,OAAO;IACrB,qBACE;kBACGD,KAAKJ,OAAO,CACVO,MAAM,CACL,CAACP,UACC,OAAOA,SAASQ,OAAO,CAAC,UAAU,KAAK,YACvC,OAAOR,SAASQ,OAAO,CAAC,UAAU,KAAK,UAE1CC,GAAG,CAAC,CAACT;YACJ,qBACE,KAACD;gBAECW,WAAWC,UAAUC,cACnB,CAAC,UAAU,EAAEZ,QAAQQ,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBAE3CR,SAASA;gBACTC,gBAAgBA;eALX,CAAC,qBAAqB,EAAED,QAAQQ,KAAK,CAAC,UAAU,CAAC,CAAC,EAAER,QAAQQ,KAAK,CAACK,GAAG,EAAE;QAQlF;;AAGR"}
@@ -1,4 +1,4 @@
1
- export declare function EmbedContentSideRenderer({ body, getVideoAspect, }: {
1
+ export declare function EmbedContentSideRenderer({ body, getVideoAspect }: {
2
2
  body: any;
3
3
  getVideoAspect: any;
4
4
  }): import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"EmbedContentSideRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/EmbedContentSideRenderer.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,wBAAwB,CAAC,EACvC,IAAI,EACJ,cAAc,GACf;;;CAAA,+BA0BA"}
1
+ {"version":3,"file":"EmbedContentSideRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/EmbedContentSideRenderer.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,wBAAwB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;;;CAAA,+BA8BhE"}
@@ -17,7 +17,7 @@ export function EmbedContentSideRenderer({ body, getVideoAspect }) {
17
17
  }, []);
18
18
  if (!mounted) return null;
19
19
  return /*#__PURE__*/ _jsx(_Fragment, {
20
- children: body.content.filter((content)=>content?.attrs?.["data-id"]).filter((content)=>content?.attrs?.side).map((content)=>{
20
+ children: body.content.filter((content)=>typeof content?.attrs?.["data-id"] === "number" || typeof content?.attrs?.["data-id"] === "string").filter((content)=>content?.attrs?.side).map((content)=>{
21
21
  return /*#__PURE__*/ _jsx(CustomPortal, {
22
22
  container: document?.querySelector(`[data-id='${content.attrs["data-id"]}']`),
23
23
  content: content,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/EmbedContentSideRenderer.tsx"],"sourcesContent":["\"use client\";\n\nimport { Portal } from \"@radix-ui/react-portal\";\nimport { ComponentProps, memo, useEffect, useState } from \"react\";\n\nimport { renderEmbedContent } from \"./RenderEmbedClientSide.js\";\n\nconst CustomPortal = memo(\n ({\n content,\n getVideoAspect,\n ...props\n }: ComponentProps<typeof Portal> & { getVideoAspect }) => {\n useEffect(() => {}, []);\n return (\n <Portal {...props}>{renderEmbedContent(content, getVideoAspect)}</Portal>\n );\n }\n);\n\nexport function EmbedContentSideRenderer({\n body,\n getVideoAspect,\n}) {\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n return (\n <>\n {body.content\n .filter((content) => content?.attrs?.[\"data-id\"])\n .filter((content) => content?.attrs?.side)\n .map((content) => {\n return (\n <CustomPortal\n key={`embed-content-side-${content.attrs[\"data-id\"]}-${content.attrs.key}`}\n container={document?.querySelector(\n `[data-id='${content.attrs[\"data-id\"]}']`\n )}\n content={content}\n getVideoAspect={getVideoAspect}\n />\n );\n })}\n </>\n );\n}\n"],"names":["Portal","memo","useEffect","useState","renderEmbedContent","CustomPortal","content","getVideoAspect","props","EmbedContentSideRenderer","body","mounted","setMounted","filter","attrs","side","map","container","document","querySelector","key"],"mappings":"AAAA;;AAEA,SAASA,MAAM,QAAQ,yBAAyB;AAChD,SAAyBC,IAAI,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAElE,SAASC,kBAAkB,QAAQ,6BAA6B;AAEhE,MAAMC,6BAAeJ,KACnB,CAAC,EACCK,OAAO,EACPC,cAAc,EACd,GAAGC,OACgD;IACnDN,UAAU,KAAO,GAAG,EAAE;IACtB,qBACE,KAACF;QAAQ,GAAGQ,KAAK;kBAAGJ,mBAAmBE,SAASC;;AAEpD;AAGF,OAAO,SAASE,yBAAyB,EACvCC,IAAI,EACJH,cAAc,EACf;IACC,MAAM,CAACI,SAASC,WAAW,GAAGT,SAAS;IACvCD,UAAU;QACRU,WAAW;IACb,GAAG,EAAE;IAEL,IAAI,CAACD,SAAS,OAAO;IACrB,qBACE;kBACGD,KAAKJ,OAAO,CACVO,MAAM,CAAC,CAACP,UAAYA,SAASQ,OAAO,CAAC,UAAU,EAC/CD,MAAM,CAAC,CAACP,UAAYA,SAASQ,OAAOC,MACpCC,GAAG,CAAC,CAACV;YACJ,qBACE,KAACD;gBAECY,WAAWC,UAAUC,cACnB,CAAC,UAAU,EAAEb,QAAQQ,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBAE3CR,SAASA;gBACTC,gBAAgBA;eALX,CAAC,mBAAmB,EAAED,QAAQQ,KAAK,CAAC,UAAU,CAAC,CAAC,EAAER,QAAQQ,KAAK,CAACM,GAAG,CAAC,CAAC;QAQhF;;AAGR"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/EmbedContentSideRenderer.tsx"],"sourcesContent":["\"use client\";\n\nimport { Portal } from \"@radix-ui/react-portal\";\nimport { ComponentProps, memo, useEffect, useState } from \"react\";\n\nimport { renderEmbedContent } from \"./RenderEmbedClientSide.js\";\n\nconst CustomPortal = memo(\n ({\n content,\n getVideoAspect,\n ...props\n }: ComponentProps<typeof Portal> & { getVideoAspect }) => {\n useEffect(() => {}, []);\n return (\n <Portal {...props}>{renderEmbedContent(content, getVideoAspect)}</Portal>\n );\n }\n);\n\nexport function EmbedContentSideRenderer({ body, getVideoAspect }) {\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n return (\n <>\n {body.content\n .filter(\n (content) =>\n typeof content?.attrs?.[\"data-id\"] === \"number\" ||\n typeof content?.attrs?.[\"data-id\"] === \"string\"\n )\n .filter((content) => content?.attrs?.side)\n .map((content) => {\n return (\n <CustomPortal\n key={`embed-content-side-${content.attrs[\"data-id\"]}-${content.attrs.key}`}\n container={document?.querySelector(\n `[data-id='${content.attrs[\"data-id\"]}']`\n )}\n content={content}\n getVideoAspect={getVideoAspect}\n />\n );\n })}\n </>\n );\n}\n"],"names":["Portal","memo","useEffect","useState","renderEmbedContent","CustomPortal","content","getVideoAspect","props","EmbedContentSideRenderer","body","mounted","setMounted","filter","attrs","side","map","container","document","querySelector","key"],"mappings":"AAAA;;AAEA,SAASA,MAAM,QAAQ,yBAAyB;AAChD,SAAyBC,IAAI,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAElE,SAASC,kBAAkB,QAAQ,6BAA6B;AAEhE,MAAMC,6BAAeJ,KACnB,CAAC,EACCK,OAAO,EACPC,cAAc,EACd,GAAGC,OACgD;IACnDN,UAAU,KAAO,GAAG,EAAE;IACtB,qBACE,KAACF;QAAQ,GAAGQ,KAAK;kBAAGJ,mBAAmBE,SAASC;;AAEpD;AAGF,OAAO,SAASE,yBAAyB,EAAEC,IAAI,EAAEH,cAAc,EAAE;IAC/D,MAAM,CAACI,SAASC,WAAW,GAAGT,SAAS;IACvCD,UAAU;QACRU,WAAW;IACb,GAAG,EAAE;IAEL,IAAI,CAACD,SAAS,OAAO;IACrB,qBACE;kBACGD,KAAKJ,OAAO,CACVO,MAAM,CACL,CAACP,UACC,OAAOA,SAASQ,OAAO,CAAC,UAAU,KAAK,YACvC,OAAOR,SAASQ,OAAO,CAAC,UAAU,KAAK,UAE1CD,MAAM,CAAC,CAACP,UAAYA,SAASQ,OAAOC,MACpCC,GAAG,CAAC,CAACV;YACJ,qBACE,KAACD;gBAECY,WAAWC,UAAUC,cACnB,CAAC,UAAU,EAAEb,QAAQQ,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBAE3CR,SAASA;gBACTC,gBAAgBA;eALX,CAAC,mBAAmB,EAAED,QAAQQ,KAAK,CAAC,UAAU,CAAC,CAAC,EAAER,QAAQQ,KAAK,CAACM,GAAG,EAAE;QAQhF;;AAGR"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/EmbedContentSidebarRenderer.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { renderEmbedContent } from \"./RenderEmbedClientSide.js\";\nconst HEIGHT = 320;\n\nfunction getContainerElement(containerId) {\n if (typeof window === \"undefined\" || !containerId) return null;\n return document.getElementById(containerId);\n}\n\nexport function EmbedContentSidebarRenderer({\n body,\n containerId,\n getVideoAspect,\n}) {\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setMounted(true);\n }, 200);\n }, []);\n const containerEl = useRef(getContainerElement(containerId));\n if (!mounted || typeof window === \"undefined\") return null;\n if (!containerEl.current) {\n containerEl.current = getContainerElement(containerId);\n }\n let lastRenderedPixel =\n containerEl.current?.getBoundingClientRect()?.top + window.scrollY ||\n window.innerHeight;\n\n return (\n <>\n {body.content\n .filter((content) => content?.attrs?.[\"data-id\"])\n .filter((content) => content?.attrs?.side)\n .map((content) => {\n const el = document?.querySelector(\n `[data-id='${content.attrs[\"data-id\"]}']`\n );\n const relativeTopPosition = el.getBoundingClientRect().top;\n const topPosition = relativeTopPosition + window.scrollY;\n\n const tempBottomPixel = lastRenderedPixel;\n\n const marginTop = Math.max(\n 8,\n topPosition - tempBottomPixel - HEIGHT / 2\n );\n lastRenderedPixel = topPosition + HEIGHT;\n\n return (\n <div\n key={`embed-content-sidebar-${content.attrs[\"data-id\"]}-${content.attrs.key}`}\n className=\"w-full\"\n style={{ marginTop }}\n >\n {renderEmbedContent(content, getVideoAspect)}\n </div>\n );\n })}\n </>\n );\n}\n"],"names":["useEffect","useRef","useState","renderEmbedContent","HEIGHT","getContainerElement","containerId","window","document","getElementById","EmbedContentSidebarRenderer","body","getVideoAspect","mounted","setMounted","setTimeout","containerEl","current","lastRenderedPixel","getBoundingClientRect","top","scrollY","innerHeight","content","filter","attrs","side","map","el","querySelector","relativeTopPosition","topPosition","tempBottomPixel","marginTop","Math","max","div","className","style","key"],"mappings":"AAAA;;AAEA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AACpD,SAASC,kBAAkB,QAAQ,6BAA6B;AAChE,MAAMC,SAAS;AAEf,SAASC,oBAAoBC,WAAW;IACtC,IAAI,OAAOC,WAAW,eAAe,CAACD,aAAa,OAAO;IAC1D,OAAOE,SAASC,cAAc,CAACH;AACjC;AAEA,OAAO,SAASI,4BAA4B,EAC1CC,IAAI,EACJL,WAAW,EACXM,cAAc,EACf;IACC,MAAM,CAACC,SAASC,WAAW,GAAGZ,SAAS;IACvCF,UAAU;QACRe,WAAW;YACTD,WAAW;QACb,GAAG;IACL,GAAG,EAAE;IACL,MAAME,cAAcf,OAAOI,oBAAoBC;IAC/C,IAAI,CAACO,WAAW,OAAON,WAAW,aAAa,OAAO;IACtD,IAAI,CAACS,YAAYC,OAAO,EAAE;QACxBD,YAAYC,OAAO,GAAGZ,oBAAoBC;IAC5C;IACA,IAAIY,oBACFF,YAAYC,OAAO,EAAEE,yBAAyBC,MAAMb,OAAOc,OAAO,IAClEd,OAAOe,WAAW;IAEpB,qBACE;kBACGX,KAAKY,OAAO,CACVC,MAAM,CAAC,CAACD,UAAYA,SAASE,OAAO,CAAC,UAAU,EAC/CD,MAAM,CAAC,CAACD,UAAYA,SAASE,OAAOC,MACpCC,GAAG,CAAC,CAACJ;YACJ,MAAMK,KAAKpB,UAAUqB,cACnB,CAAC,UAAU,EAAEN,QAAQE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAE3C,MAAMK,sBAAsBF,GAAGT,qBAAqB,GAAGC,GAAG;YAC1D,MAAMW,cAAcD,sBAAsBvB,OAAOc,OAAO;YAExD,MAAMW,kBAAkBd;YAExB,MAAMe,YAAYC,KAAKC,GAAG,CACxB,GACAJ,cAAcC,kBAAkB5B,SAAS;YAE3Cc,oBAAoBa,cAAc3B;YAElC,qBACE,KAACgC;gBAECC,WAAU;gBACVC,OAAO;oBAAEL;gBAAU;0BAElB9B,mBAAmBoB,SAASX;eAJxB,CAAC,sBAAsB,EAAEW,QAAQE,KAAK,CAAC,UAAU,CAAC,CAAC,EAAEF,QAAQE,KAAK,CAACc,GAAG,CAAC,CAAC;QAOnF;;AAGR"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/EmbedContentSidebarRenderer.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { renderEmbedContent } from \"./RenderEmbedClientSide.js\";\nconst HEIGHT = 320;\n\nfunction getContainerElement(containerId) {\n if (typeof window === \"undefined\" || !containerId) return null;\n return document.getElementById(containerId);\n}\n\nexport function EmbedContentSidebarRenderer({\n body,\n containerId,\n getVideoAspect,\n}) {\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setMounted(true);\n }, 200);\n }, []);\n const containerEl = useRef(getContainerElement(containerId));\n if (!mounted || typeof window === \"undefined\") return null;\n if (!containerEl.current) {\n containerEl.current = getContainerElement(containerId);\n }\n let lastRenderedPixel =\n containerEl.current?.getBoundingClientRect()?.top + window.scrollY ||\n window.innerHeight;\n\n return (\n <>\n {body.content\n .filter((content) => content?.attrs?.[\"data-id\"])\n .filter((content) => content?.attrs?.side)\n .map((content) => {\n const el = document?.querySelector(\n `[data-id='${content.attrs[\"data-id\"]}']`\n );\n const relativeTopPosition = el.getBoundingClientRect().top;\n const topPosition = relativeTopPosition + window.scrollY;\n\n const tempBottomPixel = lastRenderedPixel;\n\n const marginTop = Math.max(\n 8,\n topPosition - tempBottomPixel - HEIGHT / 2\n );\n lastRenderedPixel = topPosition + HEIGHT;\n\n return (\n <div\n key={`embed-content-sidebar-${content.attrs[\"data-id\"]}-${content.attrs.key}`}\n className=\"w-full\"\n style={{ marginTop }}\n >\n {renderEmbedContent(content, getVideoAspect)}\n </div>\n );\n })}\n </>\n );\n}\n"],"names":["useEffect","useRef","useState","renderEmbedContent","HEIGHT","getContainerElement","containerId","window","document","getElementById","EmbedContentSidebarRenderer","body","getVideoAspect","mounted","setMounted","setTimeout","containerEl","current","lastRenderedPixel","getBoundingClientRect","top","scrollY","innerHeight","content","filter","attrs","side","map","el","querySelector","relativeTopPosition","topPosition","tempBottomPixel","marginTop","Math","max","div","className","style","key"],"mappings":"AAAA;;AAEA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AACpD,SAASC,kBAAkB,QAAQ,6BAA6B;AAChE,MAAMC,SAAS;AAEf,SAASC,oBAAoBC,WAAW;IACtC,IAAI,OAAOC,WAAW,eAAe,CAACD,aAAa,OAAO;IAC1D,OAAOE,SAASC,cAAc,CAACH;AACjC;AAEA,OAAO,SAASI,4BAA4B,EAC1CC,IAAI,EACJL,WAAW,EACXM,cAAc,EACf;IACC,MAAM,CAACC,SAASC,WAAW,GAAGZ,SAAS;IACvCF,UAAU;QACRe,WAAW;YACTD,WAAW;QACb,GAAG;IACL,GAAG,EAAE;IACL,MAAME,cAAcf,OAAOI,oBAAoBC;IAC/C,IAAI,CAACO,WAAW,OAAON,WAAW,aAAa,OAAO;IACtD,IAAI,CAACS,YAAYC,OAAO,EAAE;QACxBD,YAAYC,OAAO,GAAGZ,oBAAoBC;IAC5C;IACA,IAAIY,oBACFF,YAAYC,OAAO,EAAEE,yBAAyBC,MAAMb,OAAOc,OAAO,IAClEd,OAAOe,WAAW;IAEpB,qBACE;kBACGX,KAAKY,OAAO,CACVC,MAAM,CAAC,CAACD,UAAYA,SAASE,OAAO,CAAC,UAAU,EAC/CD,MAAM,CAAC,CAACD,UAAYA,SAASE,OAAOC,MACpCC,GAAG,CAAC,CAACJ;YACJ,MAAMK,KAAKpB,UAAUqB,cACnB,CAAC,UAAU,EAAEN,QAAQE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAE3C,MAAMK,sBAAsBF,GAAGT,qBAAqB,GAAGC,GAAG;YAC1D,MAAMW,cAAcD,sBAAsBvB,OAAOc,OAAO;YAExD,MAAMW,kBAAkBd;YAExB,MAAMe,YAAYC,KAAKC,GAAG,CACxB,GACAJ,cAAcC,kBAAkB5B,SAAS;YAE3Cc,oBAAoBa,cAAc3B;YAElC,qBACE,KAACgC;gBAECC,WAAU;gBACVC,OAAO;oBAAEL;gBAAU;0BAElB9B,mBAAmBoB,SAASX;eAJxB,CAAC,sBAAsB,EAAEW,QAAQE,KAAK,CAAC,UAAU,CAAC,CAAC,EAAEF,QAAQE,KAAK,CAACc,GAAG,EAAE;QAOnF;;AAGR"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/FacebookServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const FacebookServerside = Node.create({\n name: \"facebook\",\n\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"facebook\"]',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-facebook\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"facebook\",\n class: `react-renderer node-facebook ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","FacebookServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,qBAAqBF,KAAKG,MAAM,CAAC;IAC5CC,MAAM;IAENC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAkB;QACtC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,6BAA6B,EAAEE,eAAeF,KAAK,CAAC,CAAC;YAC/D;YACA;SACD;IACH;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/FacebookServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const FacebookServerside = Node.create({\n name: \"facebook\",\n\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"facebook\"]',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-facebook\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"facebook\",\n class: `react-renderer node-facebook ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","FacebookServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,qBAAqBF,KAAKG,MAAM,CAAC;IAC5CC,MAAM;IAENC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAkB;QACtC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,6BAA6B,EAAEE,eAAeF,KAAK,EAAE;YAC/D;YACA;SACD;IACH;AACF,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/InstagramServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const InstagramServerside = Node.create({\n name: \"instagram\",\n\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"instagram\"]',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-instagram\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"instagram\",\n class: `react-renderer node-instagram ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","InstagramServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,sBAAsBF,KAAKG,MAAM,CAAC;IAC7CC,MAAM;IAENC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAmB;QACvC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,8BAA8B,EAAEE,eAAeF,KAAK,CAAC,CAAC;YAChE;YACA;SACD;IACH;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/InstagramServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const InstagramServerside = Node.create({\n name: \"instagram\",\n\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"instagram\"]',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-instagram\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"instagram\",\n class: `react-renderer node-instagram ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","InstagramServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,sBAAsBF,KAAKG,MAAM,CAAC;IAC7CC,MAAM;IAENC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAmB;QACvC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,8BAA8B,EAAEE,eAAeF,KAAK,EAAE;YAChE;YACA;SACD;IACH;AACF,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/LinkedinServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const LinkedinServerside = Node.create({\n name: \"linkedin\",\n\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"linkedin\"]',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-tiktok\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"linkedin\",\n class: `react-renderer node-linkedin ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","LinkedinServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,qBAAqBF,KAAKG,MAAM,CAAC;IAC5CC,MAAM;IAENC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAgB;QACpC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,6BAA6B,EAAEE,eAAeF,KAAK,CAAC,CAAC;YAC/D;YACA;SACD;IACH;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/LinkedinServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const LinkedinServerside = Node.create({\n name: \"linkedin\",\n\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"linkedin\"]',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-tiktok\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"linkedin\",\n class: `react-renderer node-linkedin ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","LinkedinServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,qBAAqBF,KAAKG,MAAM,CAAC;IAC5CC,MAAM;IAENC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAgB;QACpC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,6BAA6B,EAAEE,eAAeF,KAAK,EAAE;YAC/D;YACA;SACD;IACH;AACF,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/TiktokServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const TiktokServerside = Node.create({\n name: \"tiktok\",\n\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"tiktok\"]',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-tiktok\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"tiktok\",\n class: `react-renderer node-tiktok ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","TiktokServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,mBAAmBF,KAAKG,MAAM,CAAC;IAC1CC,MAAM;IAENC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAgB;QACpC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,2BAA2B,EAAEE,eAAeF,KAAK,CAAC,CAAC;YAC7D;YACA;SACD;IACH;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/TiktokServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const TiktokServerside = Node.create({\n name: \"tiktok\",\n\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"tiktok\"]',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-tiktok\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"tiktok\",\n class: `react-renderer node-tiktok ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","TiktokServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,mBAAmBF,KAAKG,MAAM,CAAC;IAC1CC,MAAM;IAENC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAgB;QACpC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,2BAA2B,EAAEE,eAAeF,KAAK,EAAE;YAC7D;YACA;SACD;IACH;AACF,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/TwitterBlockServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const TwitterBlockServerside = Node.create({\n name: \"twitter\",\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"twitter\"',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-twitter\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"twitter\",\n class: `react-renderer node-twitter ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","TwitterBlockServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,yBAAyBF,KAAKG,MAAM,CAAC;IAChDC,MAAM;IACNC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAiB;QACrC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,4BAA4B,EAAEE,eAAeF,KAAK,CAAC,CAAC;YAC9D;YACA;SACD;IACH;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/TwitterBlockServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const TwitterBlockServerside = Node.create({\n name: \"twitter\",\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"twitter\"',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-twitter\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"twitter\",\n class: `react-renderer node-twitter ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","TwitterBlockServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,yBAAyBF,KAAKG,MAAM,CAAC;IAChDC,MAAM;IACNC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAiB;QACrC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,4BAA4B,EAAEE,eAAeF,KAAK,EAAE;YAC9D;YACA;SACD;IACH;AACF,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/YouTubeServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const YouTubeServerside = Node.create({\n name: \"youtube\",\n\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"youtube\"]',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-youtube\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"youtube\",\n class: `react-renderer node-youtube ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","YouTubeServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,oBAAoBF,KAAKG,MAAM,CAAC;IAC3CC,MAAM;IAENC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAiB;QACrC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,4BAA4B,EAAEE,eAAeF,KAAK,CAAC,CAAC;YAC9D;YACA;SACD;IACH;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/YouTubeServerside.ts"],"sourcesContent":["import { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport const YouTubeServerside = Node.create({\n name: \"youtube\",\n\n group: \"block\",\n content: \"inline*\",\n\n parseHTML() {\n return [\n {\n tag: 'a[data-type=\"youtube\"]',\n },\n ];\n },\n addAttributes() {\n return {\n url: { default: null },\n \"data-id\": { default: null },\n class: { default: \"inline-youtube\" },\n };\n },\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"youtube\",\n class: `react-renderer node-youtube ${HTMLAttributes.class}`,\n }),\n 0,\n ];\n },\n});\n"],"names":["Node","mergeAttributes","YouTubeServerside","create","name","group","content","parseHTML","tag","addAttributes","url","default","class","renderHTML","HTMLAttributes"],"mappings":"AAAA,SAASA,IAAI,EAAEC,eAAe,QAAQ,eAAe;AAErD,OAAO,MAAMC,oBAAoBF,KAAKG,MAAM,CAAC;IAC3CC,MAAM;IAENC,OAAO;IACPC,SAAS;IAETC;QACE,OAAO;YACL;gBACEC,KAAK;YACP;SACD;IACH;IACAC;QACE,OAAO;YACLC,KAAK;gBAAEC,SAAS;YAAK;YACrB,WAAW;gBAAEA,SAAS;YAAK;YAC3BC,OAAO;gBAAED,SAAS;YAAiB;QACrC;IACF;IACAE,YAAW,EAAEC,cAAc,EAAE;QAC3B,OAAO;YACL;YACAb,gBAAgBa,gBAAgB;gBAC9B,aAAa;gBACbF,OAAO,CAAC,4BAA4B,EAAEE,eAAeF,KAAK,EAAE;YAC9D;YACA;SACD;IACH;AACF,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/getAssetsAspectRatio.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\n\nexport function useGetAssetsAspectRatio() {\n const [aspectRatio, setAspectRatio] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const calculateAspectRatio = useCallback(\n async (attrs, type, getVideoAspect) => {\n if (loading) return;\n setLoading(true);\n\n const { src, actualWidth, actualHeight } = attrs;\n if (actualWidth && actualHeight) {\n setAspectRatio(`${actualWidth} / ${actualHeight}`);\n setLoading(false);\n return;\n }\n\n if (type === \"VIDEO\" && getVideoAspect) {\n const metadata = await getVideoAspect(src);\n\n if (metadata.width && metadata.height) {\n setAspectRatio(`${metadata.width} / ${metadata.height}`);\n }\n setLoading(false);\n return;\n }\n },\n [loading]\n );\n\n return { aspectRatio, calculateAspectRatio };\n}\n"],"names":["useCallback","useState","useGetAssetsAspectRatio","aspectRatio","setAspectRatio","loading","setLoading","calculateAspectRatio","attrs","type","getVideoAspect","src","actualWidth","actualHeight","metadata","width","height"],"mappings":"AAAA,SAASA,WAAW,EAAaC,QAAQ,QAAQ,QAAQ;AAEzD,OAAO,SAASC;IACd,MAAM,CAACC,aAAaC,eAAe,GAAGH,SAAS;IAC/C,MAAM,CAACI,SAASC,WAAW,GAAGL,SAAS;IACvC,MAAMM,uBAAuBP,YAC3B,OAAOQ,OAAOC,MAAMC;QAClB,IAAIL,SAAS;QACbC,WAAW;QAEX,MAAM,EAAEK,GAAG,EAAEC,WAAW,EAAEC,YAAY,EAAE,GAAGL;QAC3C,IAAII,eAAeC,cAAc;YAC/BT,eAAe,CAAC,EAAEQ,YAAY,GAAG,EAAEC,aAAa,CAAC;YACjDP,WAAW;YACX;QACF;QAEA,IAAIG,SAAS,WAAWC,gBAAgB;YACtC,MAAMI,WAAW,MAAMJ,eAAeC;YAEtC,IAAIG,SAASC,KAAK,IAAID,SAASE,MAAM,EAAE;gBACrCZ,eAAe,CAAC,EAAEU,SAASC,KAAK,CAAC,GAAG,EAAED,SAASE,MAAM,CAAC,CAAC;YACzD;YACAV,WAAW;YACX;QACF;IACF,GACA;QAACD;KAAQ;IAGX,OAAO;QAAEF;QAAaI;IAAqB;AAC7C"}
1
+ {"version":3,"sources":["../../../../../../src/fields/TiptapEditor/extensions/serverside/getAssetsAspectRatio.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\n\nexport function useGetAssetsAspectRatio() {\n const [aspectRatio, setAspectRatio] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const calculateAspectRatio = useCallback(\n async (attrs, type, getVideoAspect) => {\n if (loading) return;\n setLoading(true);\n\n const { src, actualWidth, actualHeight } = attrs;\n if (actualWidth && actualHeight) {\n setAspectRatio(`${actualWidth} / ${actualHeight}`);\n setLoading(false);\n return;\n }\n\n if (type === \"VIDEO\" && getVideoAspect) {\n const metadata = await getVideoAspect(src);\n\n if (metadata.width && metadata.height) {\n setAspectRatio(`${metadata.width} / ${metadata.height}`);\n }\n setLoading(false);\n return;\n }\n },\n [loading]\n );\n\n return { aspectRatio, calculateAspectRatio };\n}\n"],"names":["useCallback","useState","useGetAssetsAspectRatio","aspectRatio","setAspectRatio","loading","setLoading","calculateAspectRatio","attrs","type","getVideoAspect","src","actualWidth","actualHeight","metadata","width","height"],"mappings":"AAAA,SAASA,WAAW,EAAaC,QAAQ,QAAQ,QAAQ;AAEzD,OAAO,SAASC;IACd,MAAM,CAACC,aAAaC,eAAe,GAAGH,SAAS;IAC/C,MAAM,CAACI,SAASC,WAAW,GAAGL,SAAS;IACvC,MAAMM,uBAAuBP,YAC3B,OAAOQ,OAAOC,MAAMC;QAClB,IAAIL,SAAS;QACbC,WAAW;QAEX,MAAM,EAAEK,GAAG,EAAEC,WAAW,EAAEC,YAAY,EAAE,GAAGL;QAC3C,IAAII,eAAeC,cAAc;YAC/BT,eAAe,GAAGQ,YAAY,GAAG,EAAEC,cAAc;YACjDP,WAAW;YACX;QACF;QAEA,IAAIG,SAAS,WAAWC,gBAAgB;YACtC,MAAMI,WAAW,MAAMJ,eAAeC;YAEtC,IAAIG,SAASC,KAAK,IAAID,SAASE,MAAM,EAAE;gBACrCZ,eAAe,GAAGU,SAASC,KAAK,CAAC,GAAG,EAAED,SAASE,MAAM,EAAE;YACzD;YACAV,WAAW;YACX;QACF;IACF,GACA;QAACD;KAAQ;IAGX,OAAO;QAAEF;QAAaI;IAAqB;AAC7C"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.tsx"],"sourcesContent":["import * as Dropdown from \"@radix-ui/react-dropdown-menu\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useCallback } from \"react\";\nimport {\n DropdownButton,\n DropdownCategoryTitle,\n} from \"../../../ui/Dropdown/Dropdown.js\";\nimport { Icon } from \"../../../ui/Icon.js\";\nimport { Surface } from \"../../../ui/Surface.js\";\nimport { Toolbar } from \"../../../ui/Toolbar.js\";\n\nconst FONT_FAMILY_GROUPS = [\n {\n label: \"Sans Serif\",\n options: [\n { label: \"Inter\", value: \"\" },\n { label: \"Arial\", value: \"Arial\" },\n { label: \"Helvetica\", value: \"Helvetica\" },\n ],\n },\n {\n label: \"Serif\",\n options: [\n { label: \"Times New Roman\", value: \"Times\" },\n { label: \"Garamond\", value: \"Garamond\" },\n { label: \"Georgia\", value: \"Georgia\" },\n ],\n },\n {\n label: \"Monospace\",\n options: [\n { label: \"Courier\", value: \"Courier\" },\n { label: \"Courier New\", value: \"Courier New\" },\n ],\n },\n];\n\nconst FONT_FAMILIES = FONT_FAMILY_GROUPS.flatMap((group) => [\n group.options,\n]).flat();\n\nexport type FontFamilyPickerProps = {\n onChange: (value: string) => void; // eslint-disable-line no-unused-vars\n value: string;\n};\n\nexport const FontFamilyPicker = ({\n onChange,\n value,\n}: FontFamilyPickerProps) => {\n const currentValue = FONT_FAMILIES.find((size) => size.value === value);\n const currentFontLabel = currentValue?.label.split(\" \")[0] || \"Inter\";\n\n const selectFont = useCallback(\n (font: string) => () => onChange(font),\n [onChange]\n );\n\n return (\n <Dropdown.Root>\n <Dropdown.Trigger asChild>\n <Toolbar.Button type=\"button\" active={!!currentValue?.value}>\n {currentFontLabel}\n <Icon icon={ChevronDown} className=\"w-2 h-2\" />\n </Toolbar.Button>\n </Dropdown.Trigger>\n <Dropdown.Content asChild>\n <Surface className=\"flex flex-col gap-1 px-2 py-4\">\n {FONT_FAMILY_GROUPS.map((group) => (\n <div\n className=\"mt-2.5 first:mt-0 gap-0.5 flex flex-col\"\n key={group.label}\n >\n <DropdownCategoryTitle>{group.label}</DropdownCategoryTitle>\n {group.options.map((font) => (\n <DropdownButton\n isActive={value === font.value}\n onClick={selectFont(font.value)}\n key={`${font.label}_${font.value}`}\n >\n <span style={{ fontFamily: font.value }}>{font.label}</span>\n </DropdownButton>\n ))}\n </div>\n ))}\n </Surface>\n </Dropdown.Content>\n </Dropdown.Root>\n );\n};\n"],"names":["Dropdown","ChevronDown","useCallback","DropdownButton","DropdownCategoryTitle","Icon","Surface","Toolbar","FONT_FAMILY_GROUPS","label","options","value","FONT_FAMILIES","flatMap","group","flat","FontFamilyPicker","onChange","currentValue","find","size","currentFontLabel","split","selectFont","font","Root","Trigger","asChild","Button","type","active","icon","className","Content","map","div","isActive","onClick","span","style","fontFamily"],"mappings":";AAAA,YAAYA,cAAc,gCAAgC;AAC1D,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,WAAW,QAAQ,QAAQ;AACpC,SACEC,cAAc,EACdC,qBAAqB,QAChB,mCAAmC;AAC1C,SAASC,IAAI,QAAQ,sBAAsB;AAC3C,SAASC,OAAO,QAAQ,yBAAyB;AACjD,SAASC,OAAO,QAAQ,yBAAyB;AAEjD,MAAMC,qBAAqB;IACzB;QACEC,OAAO;QACPC,SAAS;YACP;gBAAED,OAAO;gBAASE,OAAO;YAAG;YAC5B;gBAAEF,OAAO;gBAASE,OAAO;YAAQ;YACjC;gBAAEF,OAAO;gBAAaE,OAAO;YAAY;SAC1C;IACH;IACA;QACEF,OAAO;QACPC,SAAS;YACP;gBAAED,OAAO;gBAAmBE,OAAO;YAAQ;YAC3C;gBAAEF,OAAO;gBAAYE,OAAO;YAAW;YACvC;gBAAEF,OAAO;gBAAWE,OAAO;YAAU;SACtC;IACH;IACA;QACEF,OAAO;QACPC,SAAS;YACP;gBAAED,OAAO;gBAAWE,OAAO;YAAU;YACrC;gBAAEF,OAAO;gBAAeE,OAAO;YAAc;SAC9C;IACH;CACD;AAED,MAAMC,gBAAgBJ,mBAAmBK,OAAO,CAAC,CAACC,QAAU;QAC1DA,MAAMJ,OAAO;KACd,EAAEK,IAAI;AAOP,OAAO,MAAMC,mBAAmB,CAAC,EAC/BC,QAAQ,EACRN,KAAK,EACiB;IACtB,MAAMO,eAAeN,cAAcO,IAAI,CAAC,CAACC,OAASA,KAAKT,KAAK,KAAKA;IACjE,MAAMU,mBAAmBH,cAAcT,MAAMa,MAAM,IAAI,CAAC,EAAE,IAAI;IAE9D,MAAMC,aAAarB,YACjB,CAACsB,OAAiB,IAAMP,SAASO,OACjC;QAACP;KAAS;IAGZ,qBACE,MAACjB,SAASyB,IAAI;;0BACZ,KAACzB,SAAS0B,OAAO;gBAACC,OAAO;0BACvB,cAAA,MAACpB,QAAQqB,MAAM;oBAACC,MAAK;oBAASC,QAAQ,CAAC,CAACZ,cAAcP;;wBACnDU;sCACD,KAAChB;4BAAK0B,MAAM9B;4BAAa+B,WAAU;;;;;0BAGvC,KAAChC,SAASiC,OAAO;gBAACN,OAAO;0BACvB,cAAA,KAACrB;oBAAQ0B,WAAU;8BAChBxB,mBAAmB0B,GAAG,CAAC,CAACpB,sBACvB,MAACqB;4BACCH,WAAU;;8CAGV,KAAC5B;8CAAuBU,MAAML,KAAK;;gCAClCK,MAAMJ,OAAO,CAACwB,GAAG,CAAC,CAACV,qBAClB,KAACrB;wCACCiC,UAAUzB,UAAUa,KAAKb,KAAK;wCAC9B0B,SAASd,WAAWC,KAAKb,KAAK;kDAG9B,cAAA,KAAC2B;4CAAKC,OAAO;gDAAEC,YAAYhB,KAAKb,KAAK;4CAAC;sDAAIa,KAAKf,KAAK;;uCAF/C,CAAC,EAAEe,KAAKf,KAAK,CAAC,CAAC,EAAEe,KAAKb,KAAK,CAAC,CAAC;;2BAPjCG,MAAML,KAAK;;;;;AAkB9B,EAAE"}
1
+ {"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/FontFamilyPicker.tsx"],"sourcesContent":["import * as Dropdown from \"@radix-ui/react-dropdown-menu\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useCallback } from \"react\";\nimport {\n DropdownButton,\n DropdownCategoryTitle,\n} from \"../../../ui/Dropdown/Dropdown.js\";\nimport { Icon } from \"../../../ui/Icon.js\";\nimport { Surface } from \"../../../ui/Surface.js\";\nimport { Toolbar } from \"../../../ui/Toolbar.js\";\n\nconst FONT_FAMILY_GROUPS = [\n {\n label: \"Sans Serif\",\n options: [\n { label: \"Inter\", value: \"\" },\n { label: \"Arial\", value: \"Arial\" },\n { label: \"Helvetica\", value: \"Helvetica\" },\n ],\n },\n {\n label: \"Serif\",\n options: [\n { label: \"Times New Roman\", value: \"Times\" },\n { label: \"Garamond\", value: \"Garamond\" },\n { label: \"Georgia\", value: \"Georgia\" },\n ],\n },\n {\n label: \"Monospace\",\n options: [\n { label: \"Courier\", value: \"Courier\" },\n { label: \"Courier New\", value: \"Courier New\" },\n ],\n },\n];\n\nconst FONT_FAMILIES = FONT_FAMILY_GROUPS.flatMap((group) => [\n group.options,\n]).flat();\n\nexport type FontFamilyPickerProps = {\n onChange: (value: string) => void; // eslint-disable-line no-unused-vars\n value: string;\n};\n\nexport const FontFamilyPicker = ({\n onChange,\n value,\n}: FontFamilyPickerProps) => {\n const currentValue = FONT_FAMILIES.find((size) => size.value === value);\n const currentFontLabel = currentValue?.label.split(\" \")[0] || \"Inter\";\n\n const selectFont = useCallback(\n (font: string) => () => onChange(font),\n [onChange]\n );\n\n return (\n <Dropdown.Root>\n <Dropdown.Trigger asChild>\n <Toolbar.Button type=\"button\" active={!!currentValue?.value}>\n {currentFontLabel}\n <Icon icon={ChevronDown} className=\"w-2 h-2\" />\n </Toolbar.Button>\n </Dropdown.Trigger>\n <Dropdown.Content asChild>\n <Surface className=\"flex flex-col gap-1 px-2 py-4\">\n {FONT_FAMILY_GROUPS.map((group) => (\n <div\n className=\"mt-2.5 first:mt-0 gap-0.5 flex flex-col\"\n key={group.label}\n >\n <DropdownCategoryTitle>{group.label}</DropdownCategoryTitle>\n {group.options.map((font) => (\n <DropdownButton\n isActive={value === font.value}\n onClick={selectFont(font.value)}\n key={`${font.label}_${font.value}`}\n >\n <span style={{ fontFamily: font.value }}>{font.label}</span>\n </DropdownButton>\n ))}\n </div>\n ))}\n </Surface>\n </Dropdown.Content>\n </Dropdown.Root>\n );\n};\n"],"names":["Dropdown","ChevronDown","useCallback","DropdownButton","DropdownCategoryTitle","Icon","Surface","Toolbar","FONT_FAMILY_GROUPS","label","options","value","FONT_FAMILIES","flatMap","group","flat","FontFamilyPicker","onChange","currentValue","find","size","currentFontLabel","split","selectFont","font","Root","Trigger","asChild","Button","type","active","icon","className","Content","map","div","isActive","onClick","span","style","fontFamily"],"mappings":";AAAA,YAAYA,cAAc,gCAAgC;AAC1D,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,WAAW,QAAQ,QAAQ;AACpC,SACEC,cAAc,EACdC,qBAAqB,QAChB,mCAAmC;AAC1C,SAASC,IAAI,QAAQ,sBAAsB;AAC3C,SAASC,OAAO,QAAQ,yBAAyB;AACjD,SAASC,OAAO,QAAQ,yBAAyB;AAEjD,MAAMC,qBAAqB;IACzB;QACEC,OAAO;QACPC,SAAS;YACP;gBAAED,OAAO;gBAASE,OAAO;YAAG;YAC5B;gBAAEF,OAAO;gBAASE,OAAO;YAAQ;YACjC;gBAAEF,OAAO;gBAAaE,OAAO;YAAY;SAC1C;IACH;IACA;QACEF,OAAO;QACPC,SAAS;YACP;gBAAED,OAAO;gBAAmBE,OAAO;YAAQ;YAC3C;gBAAEF,OAAO;gBAAYE,OAAO;YAAW;YACvC;gBAAEF,OAAO;gBAAWE,OAAO;YAAU;SACtC;IACH;IACA;QACEF,OAAO;QACPC,SAAS;YACP;gBAAED,OAAO;gBAAWE,OAAO;YAAU;YACrC;gBAAEF,OAAO;gBAAeE,OAAO;YAAc;SAC9C;IACH;CACD;AAED,MAAMC,gBAAgBJ,mBAAmBK,OAAO,CAAC,CAACC,QAAU;QAC1DA,MAAMJ,OAAO;KACd,EAAEK,IAAI;AAOP,OAAO,MAAMC,mBAAmB,CAAC,EAC/BC,QAAQ,EACRN,KAAK,EACiB;IACtB,MAAMO,eAAeN,cAAcO,IAAI,CAAC,CAACC,OAASA,KAAKT,KAAK,KAAKA;IACjE,MAAMU,mBAAmBH,cAAcT,MAAMa,MAAM,IAAI,CAAC,EAAE,IAAI;IAE9D,MAAMC,aAAarB,YACjB,CAACsB,OAAiB,IAAMP,SAASO,OACjC;QAACP;KAAS;IAGZ,qBACE,MAACjB,SAASyB,IAAI;;0BACZ,KAACzB,SAAS0B,OAAO;gBAACC,OAAO;0BACvB,cAAA,MAACpB,QAAQqB,MAAM;oBAACC,MAAK;oBAASC,QAAQ,CAAC,CAACZ,cAAcP;;wBACnDU;sCACD,KAAChB;4BAAK0B,MAAM9B;4BAAa+B,WAAU;;;;;0BAGvC,KAAChC,SAASiC,OAAO;gBAACN,OAAO;0BACvB,cAAA,KAACrB;oBAAQ0B,WAAU;8BAChBxB,mBAAmB0B,GAAG,CAAC,CAACpB,sBACvB,MAACqB;4BACCH,WAAU;;8CAGV,KAAC5B;8CAAuBU,MAAML,KAAK;;gCAClCK,MAAMJ,OAAO,CAACwB,GAAG,CAAC,CAACV,qBAClB,KAACrB;wCACCiC,UAAUzB,UAAUa,KAAKb,KAAK;wCAC9B0B,SAASd,WAAWC,KAAKb,KAAK;kDAG9B,cAAA,KAAC2B;4CAAKC,OAAO;gDAAEC,YAAYhB,KAAKb,KAAK;4CAAC;sDAAIa,KAAKf,KAAK;;uCAF/C,GAAGe,KAAKf,KAAK,CAAC,CAAC,EAAEe,KAAKb,KAAK,EAAE;;2BAPjCG,MAAML,KAAK;;;;;AAkB9B,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/FontSizePicker.tsx"],"sourcesContent":["import * as Dropdown from \"@radix-ui/react-dropdown-menu\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useCallback, useMemo } from \"react\";\nimport { DropdownButton } from \"../../../ui/Dropdown/Dropdown.js\";\nimport { Icon } from \"../../../ui/Icon.js\";\nimport { Surface } from \"../../../ui/Surface.js\";\nimport { Toolbar } from \"../../../ui/Toolbar.js\";\nimport i18next from \"i18next\";\n\nexport type FontSizePickerProps = {\n onChange: (value: string) => void; // eslint-disable-line no-unused-vars\n value: string;\n};\n\nexport const FontSizePicker = ({ onChange, value }: FontSizePickerProps) => {\n const FONT_SIZES = useMemo(\n () => [\n { label: i18next.t(\"smaller\") || \"Smaller\", value: \"12px\" },\n { label: i18next.t(\"small\") || \"Small\", value: \"14px\" },\n { label: i18next.t(\"medium\") || \"Medium\", value: \"\" },\n { label: i18next.t(\"large\") || \"Large\", value: \"18px\" },\n { label: i18next.t(\"extraLart\") || \"Extra Large\", value: \"24px\" },\n ],\n []\n );\n const currentValue = FONT_SIZES.find((size) => size.value === value);\n const currentSizeLabel = currentValue?.label.split(\" \")[0] || \"Medium\";\n\n const selectSize = useCallback(\n (size: string) => () => onChange(size),\n [onChange]\n );\n\n return (\n <Dropdown.Root>\n <Dropdown.Trigger asChild>\n <Toolbar.Button type=\"button\" active={!!currentValue?.value}>\n {currentSizeLabel}\n <Icon icon={ChevronDown} className=\"w-2 h-2\" />\n </Toolbar.Button>\n </Dropdown.Trigger>\n <Dropdown.Content asChild>\n <Surface className=\"flex flex-col gap-1 px-2 py-4\">\n {FONT_SIZES.map((size) => (\n <DropdownButton\n isActive={value === size.value}\n onClick={selectSize(size.value)}\n key={`${size.label}_${size.value}`}\n >\n <span style={{ fontSize: size.value }}>{size.label}</span>\n </DropdownButton>\n ))}\n </Surface>\n </Dropdown.Content>\n </Dropdown.Root>\n );\n};\n"],"names":["Dropdown","ChevronDown","useCallback","useMemo","DropdownButton","Icon","Surface","Toolbar","i18next","FontSizePicker","onChange","value","FONT_SIZES","label","t","currentValue","find","size","currentSizeLabel","split","selectSize","Root","Trigger","asChild","Button","type","active","icon","className","Content","map","isActive","onClick","span","style","fontSize"],"mappings":";AAAA,YAAYA,cAAc,gCAAgC;AAC1D,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,WAAW,EAAEC,OAAO,QAAQ,QAAQ;AAC7C,SAASC,cAAc,QAAQ,mCAAmC;AAClE,SAASC,IAAI,QAAQ,sBAAsB;AAC3C,SAASC,OAAO,QAAQ,yBAAyB;AACjD,SAASC,OAAO,QAAQ,yBAAyB;AACjD,OAAOC,aAAa,UAAU;AAO9B,OAAO,MAAMC,iBAAiB,CAAC,EAAEC,QAAQ,EAAEC,KAAK,EAAuB;IACrE,MAAMC,aAAaT,QACjB,IAAM;YACJ;gBAAEU,OAAOL,QAAQM,CAAC,CAAC,cAAc;gBAAWH,OAAO;YAAO;YAC1D;gBAAEE,OAAOL,QAAQM,CAAC,CAAC,YAAY;gBAASH,OAAO;YAAO;YACtD;gBAAEE,OAAOL,QAAQM,CAAC,CAAC,aAAa;gBAAUH,OAAO;YAAG;YACpD;gBAAEE,OAAOL,QAAQM,CAAC,CAAC,YAAY;gBAASH,OAAO;YAAO;YACtD;gBAAEE,OAAOL,QAAQM,CAAC,CAAC,gBAAgB;gBAAeH,OAAO;YAAO;SACjE,EACD,EAAE;IAEJ,MAAMI,eAAeH,WAAWI,IAAI,CAAC,CAACC,OAASA,KAAKN,KAAK,KAAKA;IAC9D,MAAMO,mBAAmBH,cAAcF,MAAMM,MAAM,IAAI,CAAC,EAAE,IAAI;IAE9D,MAAMC,aAAalB,YACjB,CAACe,OAAiB,IAAMP,SAASO,OACjC;QAACP;KAAS;IAGZ,qBACE,MAACV,SAASqB,IAAI;;0BACZ,KAACrB,SAASsB,OAAO;gBAACC,OAAO;0BACvB,cAAA,MAAChB,QAAQiB,MAAM;oBAACC,MAAK;oBAASC,QAAQ,CAAC,CAACX,cAAcJ;;wBACnDO;sCACD,KAACb;4BAAKsB,MAAM1B;4BAAa2B,WAAU;;;;;0BAGvC,KAAC5B,SAAS6B,OAAO;gBAACN,OAAO;0BACvB,cAAA,KAACjB;oBAAQsB,WAAU;8BAChBhB,WAAWkB,GAAG,CAAC,CAACb,qBACf,KAACb;4BACC2B,UAAUpB,UAAUM,KAAKN,KAAK;4BAC9BqB,SAASZ,WAAWH,KAAKN,KAAK;sCAG9B,cAAA,KAACsB;gCAAKC,OAAO;oCAAEC,UAAUlB,KAAKN,KAAK;gCAAC;0CAAIM,KAAKJ,KAAK;;2BAF7C,CAAC,EAAEI,KAAKJ,KAAK,CAAC,CAAC,EAAEI,KAAKN,KAAK,CAAC,CAAC;;;;;AAShD,EAAE"}
1
+ {"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/FontSizePicker.tsx"],"sourcesContent":["import * as Dropdown from \"@radix-ui/react-dropdown-menu\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useCallback, useMemo } from \"react\";\nimport { DropdownButton } from \"../../../ui/Dropdown/Dropdown.js\";\nimport { Icon } from \"../../../ui/Icon.js\";\nimport { Surface } from \"../../../ui/Surface.js\";\nimport { Toolbar } from \"../../../ui/Toolbar.js\";\nimport i18next from \"i18next\";\n\nexport type FontSizePickerProps = {\n onChange: (value: string) => void; // eslint-disable-line no-unused-vars\n value: string;\n};\n\nexport const FontSizePicker = ({ onChange, value }: FontSizePickerProps) => {\n const FONT_SIZES = useMemo(\n () => [\n { label: i18next.t(\"smaller\") || \"Smaller\", value: \"12px\" },\n { label: i18next.t(\"small\") || \"Small\", value: \"14px\" },\n { label: i18next.t(\"medium\") || \"Medium\", value: \"\" },\n { label: i18next.t(\"large\") || \"Large\", value: \"18px\" },\n { label: i18next.t(\"extraLart\") || \"Extra Large\", value: \"24px\" },\n ],\n []\n );\n const currentValue = FONT_SIZES.find((size) => size.value === value);\n const currentSizeLabel = currentValue?.label.split(\" \")[0] || \"Medium\";\n\n const selectSize = useCallback(\n (size: string) => () => onChange(size),\n [onChange]\n );\n\n return (\n <Dropdown.Root>\n <Dropdown.Trigger asChild>\n <Toolbar.Button type=\"button\" active={!!currentValue?.value}>\n {currentSizeLabel}\n <Icon icon={ChevronDown} className=\"w-2 h-2\" />\n </Toolbar.Button>\n </Dropdown.Trigger>\n <Dropdown.Content asChild>\n <Surface className=\"flex flex-col gap-1 px-2 py-4\">\n {FONT_SIZES.map((size) => (\n <DropdownButton\n isActive={value === size.value}\n onClick={selectSize(size.value)}\n key={`${size.label}_${size.value}`}\n >\n <span style={{ fontSize: size.value }}>{size.label}</span>\n </DropdownButton>\n ))}\n </Surface>\n </Dropdown.Content>\n </Dropdown.Root>\n );\n};\n"],"names":["Dropdown","ChevronDown","useCallback","useMemo","DropdownButton","Icon","Surface","Toolbar","i18next","FontSizePicker","onChange","value","FONT_SIZES","label","t","currentValue","find","size","currentSizeLabel","split","selectSize","Root","Trigger","asChild","Button","type","active","icon","className","Content","map","isActive","onClick","span","style","fontSize"],"mappings":";AAAA,YAAYA,cAAc,gCAAgC;AAC1D,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,WAAW,EAAEC,OAAO,QAAQ,QAAQ;AAC7C,SAASC,cAAc,QAAQ,mCAAmC;AAClE,SAASC,IAAI,QAAQ,sBAAsB;AAC3C,SAASC,OAAO,QAAQ,yBAAyB;AACjD,SAASC,OAAO,QAAQ,yBAAyB;AACjD,OAAOC,aAAa,UAAU;AAO9B,OAAO,MAAMC,iBAAiB,CAAC,EAAEC,QAAQ,EAAEC,KAAK,EAAuB;IACrE,MAAMC,aAAaT,QACjB,IAAM;YACJ;gBAAEU,OAAOL,QAAQM,CAAC,CAAC,cAAc;gBAAWH,OAAO;YAAO;YAC1D;gBAAEE,OAAOL,QAAQM,CAAC,CAAC,YAAY;gBAASH,OAAO;YAAO;YACtD;gBAAEE,OAAOL,QAAQM,CAAC,CAAC,aAAa;gBAAUH,OAAO;YAAG;YACpD;gBAAEE,OAAOL,QAAQM,CAAC,CAAC,YAAY;gBAASH,OAAO;YAAO;YACtD;gBAAEE,OAAOL,QAAQM,CAAC,CAAC,gBAAgB;gBAAeH,OAAO;YAAO;SACjE,EACD,EAAE;IAEJ,MAAMI,eAAeH,WAAWI,IAAI,CAAC,CAACC,OAASA,KAAKN,KAAK,KAAKA;IAC9D,MAAMO,mBAAmBH,cAAcF,MAAMM,MAAM,IAAI,CAAC,EAAE,IAAI;IAE9D,MAAMC,aAAalB,YACjB,CAACe,OAAiB,IAAMP,SAASO,OACjC;QAACP;KAAS;IAGZ,qBACE,MAACV,SAASqB,IAAI;;0BACZ,KAACrB,SAASsB,OAAO;gBAACC,OAAO;0BACvB,cAAA,MAAChB,QAAQiB,MAAM;oBAACC,MAAK;oBAASC,QAAQ,CAAC,CAACX,cAAcJ;;wBACnDO;sCACD,KAACb;4BAAKsB,MAAM1B;4BAAa2B,WAAU;;;;;0BAGvC,KAAC5B,SAAS6B,OAAO;gBAACN,OAAO;0BACvB,cAAA,KAACjB;oBAAQsB,WAAU;8BAChBhB,WAAWkB,GAAG,CAAC,CAACb,qBACf,KAACb;4BACC2B,UAAUpB,UAAUM,KAAKN,KAAK;4BAC9BqB,SAASZ,WAAWH,KAAKN,KAAK;sCAG9B,cAAA,KAACsB;gCAAKC,OAAO;oCAAEC,UAAUlB,KAAKN,KAAK;gCAAC;0CAAIM,KAAKJ,KAAK;;2BAF7C,GAAGI,KAAKJ,KAAK,CAAC,CAAC,EAAEI,KAAKN,KAAK,EAAE;;;;;AAShD,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai-selector-commands.d.ts","sourceRoot":"","sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AA0DnD,UAAU,uBAAuB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,IAAI,CAAA;KAAE,KAC7D,IAAI,CAAA;CACV;AAED,QAAA,MAAM,kBAAkB,mCAAoC,uBAAuB,gCAgHlF,CAAA;AAED,eAAe,kBAAkB,CAAA"}
1
+ {"version":3,"file":"ai-selector-commands.d.ts","sourceRoot":"","sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAgEnD,UAAU,uBAAuB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,IAAI,CAAA;KAAE,KAC7D,IAAI,CAAA;CACV;AAED,QAAA,MAAM,kBAAkB,mCAAoC,uBAAuB,gCAgHlF,CAAA;AAED,eAAe,kBAAkB,CAAA"}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useLocale } from '@payloadcms/ui/providers/Locale';
3
3
  import * as Popover from '@radix-ui/react-popover';
4
4
  import i18next from 'i18next';
5
- import { ArrowDownWideNarrow, CheckCheck, ChevronDown, Languages, RefreshCcwDot, StepForward, WrapText } from 'lucide-react';
5
+ import { ArrowDownWideNarrow, BookText, CheckCheck, ChevronDown, Languages, RefreshCcwDot, StepForward, WrapText } from 'lucide-react';
6
6
  import { languages } from '../../../../lib/constants.js';
7
7
  import { getPrevText } from '../../../../lib/utils/index.js';
8
8
  import { DropdownCategoryTitle } from '../../../ui/Dropdown/Dropdown.js';
@@ -17,16 +17,6 @@ const options = [
17
17
  // label: 'Translate text',
18
18
  // icon: WrapText,
19
19
  // },
20
- {
21
- value: 'summarize',
22
- label: 'Summarize text',
23
- icon: WrapText
24
- },
25
- {
26
- value: 'rewrite',
27
- label: 'Rewrite into Axios',
28
- icon: WrapText
29
- },
30
20
  {
31
21
  value: 'improve',
32
22
  label: 'Improve writing',
@@ -37,6 +27,21 @@ const options = [
37
27
  label: 'Fix grammar',
38
28
  icon: CheckCheck
39
29
  },
30
+ {
31
+ value: 'rewrite_with_guidelines',
32
+ label: 'Rewrite per Editorial Guidelines',
33
+ icon: BookText
34
+ },
35
+ {
36
+ value: 'rewrite',
37
+ label: 'Rewrite into Axios',
38
+ icon: WrapText
39
+ },
40
+ {
41
+ value: 'summarize',
42
+ label: 'Summarize text',
43
+ icon: WrapText
44
+ },
40
45
  {
41
46
  value: 'shorter',
42
47
  label: 'Make shorter',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.tsx"],"sourcesContent":["import { useLocale } from '@payloadcms/ui/providers/Locale'\nimport * as Popover from '@radix-ui/react-popover'\nimport { Editor, JSONContent } from '@tiptap/react'\nimport i18next from 'i18next'\nimport {\n ArrowDownWideNarrow,\n CheckCheck,\n ChevronDown,\n Languages,\n RefreshCcwDot,\n StepForward,\n WrapText,\n} from 'lucide-react'\nimport { languages } from '../../../../lib/constants.js'\nimport { getPrevText } from '../../../../lib/utils/index.js'\nimport { DropdownCategoryTitle } from '../../../ui/Dropdown/Dropdown.js'\nimport { Icon } from '../../../ui/Icon.js'\nimport { Surface } from '../../../ui/Surface.js'\nimport { Toolbar } from '../../../ui/Toolbar.js'\nimport { useMemo } from 'react'\nimport { extractMarkdown } from '../../../../lib/extract.js'\nconst options = [\n // {\n // value: 'translate',\n // label: 'Translate text',\n // icon: WrapText,\n // },\n {\n value: 'summarize',\n label: 'Summarize text',\n icon: WrapText,\n },\n {\n value: 'rewrite',\n label: 'Rewrite into Axios',\n icon: WrapText,\n },\n {\n value: 'improve',\n label: 'Improve writing',\n icon: RefreshCcwDot,\n },\n\n {\n value: 'fix',\n label: 'Fix grammar',\n icon: CheckCheck,\n },\n {\n value: 'shorter',\n label: 'Make shorter',\n icon: ArrowDownWideNarrow,\n },\n {\n value: 'longer',\n label: 'Make longer',\n icon: WrapText,\n },\n]\n\ninterface AISelectorCommandsProps {\n editor: Editor\n messages?: JSONContent\n onSelect: (\n value: string,\n options: { option: string; language?: string; selection?: JSON },\n ) => void\n}\n\nconst AISelectorCommands = ({ messages, onSelect, editor }: AISelectorCommandsProps) => {\n const { code } = useLocale()\n const editorSelection = editor?.state?.selection?.content?.()?.content?.toJSON()\n const sortedLanguages = useMemo(() => {\n const editorLanguage = editor.storage?.aiCommand?.language\n return languages.sort((a, b) => {\n if (editorLanguage?.includes(a.value)) return -1\n if (editorLanguage?.includes(b.value)) return 1\n return 0\n })\n }, [languages, editor.storage?.aiCommand?.language])\n\n return (\n <>\n <DropdownCategoryTitle>Edit or review selection</DropdownCategoryTitle>\n {editorSelection && (\n <Popover.Root>\n <Popover.Trigger asChild>\n <Toolbar.Button\n className='gap-2 px-4 w-full flex justify-start '\n type='button'\n // active={!!states.currentHighlight}\n tooltip={i18next.t('highlightText') || 'Highlight text'}\n >\n <Icon icon={Languages} className='h-4 w-4 text-blue-500' />\n Translate text\n <span className='text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline'>\n Beta\n </span>\n <Icon icon={ChevronDown} className='h-4 w-4 text-blue-500' />\n </Toolbar.Button>\n </Popover.Trigger>\n <Popover.Content side='right' align='start' sideOffset={8} asChild>\n <Surface className='flex flex-col min-w-[15rem] p-2 max-h-[20rem] overflow-auto'>\n <DropdownCategoryTitle>Languages</DropdownCategoryTitle>\n\n {sortedLanguages.map((lang) => (\n <Toolbar.Button\n onClick={() => {\n const editorSelection = editor.state.selection.content().content.toJSON()\n\n onSelect('', {\n option: 'translate',\n language: lang.value,\n selection: editorSelection,\n })\n }}\n className='gap-2 px-4 w-full flex justify-start '\n key={lang.value}\n >\n {lang.label}\n </Toolbar.Button>\n ))}\n </Surface>\n </Popover.Content>\n </Popover.Root>\n )}\n\n {options.map((option) => (\n <Toolbar.Button\n // onSelect={(value) => {\n // const slice = editor.state.selection.content()\n // const text = editor?.storage?.markdown?.serializer.serialize(slice.content)\n // onSelect(text, option.value)\n // }}\n onClick={() => {\n const { from, to, empty } = editor.state.selection\n const editorSelection = editor.state.selection.content().content.toJSON()\n const content = messages\n ? (extractMarkdown(messages) ?? '')\n : editor.state.doc.textBetween(from, to, ' ')\n onSelect(content, {\n option: option.value,\n language: editor?.storage?.aiCommand?.language ?? code ?? 'en',\n })\n }}\n className=' gap-2 px-4 w-full flex justify-start'\n key={option.value}\n value={option.value}\n >\n <option.icon className='h-4 w-4 text-blue-500' />\n {option.label}\n <span className='text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline'>\n Beta\n </span>\n </Toolbar.Button>\n ))}\n <Toolbar.Divider horizontal />\n <DropdownCategoryTitle>Use AI to do more</DropdownCategoryTitle>\n <Toolbar.Button\n onClick={() => {\n const editorSelection = editor.state.selection.content().content.toJSON()\n\n const text = messages\n ? (extractMarkdown(messages) ?? '')\n : getPrevText(editor, { chars: 5000 })\n onSelect(text, {\n option: 'continue',\n language: editor?.storage?.aiCommand?.language ?? code ?? 'en',\n })\n }}\n value='continue'\n className='gap-2 px-4 w-full flex justify-start'\n >\n <StepForward className='h-4 w-4 text-blue-500' />\n Continue writing\n <span className='text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline'>\n Beta\n </span>\n </Toolbar.Button>\n </>\n )\n}\n\nexport default AISelectorCommands\n"],"names":["useLocale","Popover","i18next","ArrowDownWideNarrow","CheckCheck","ChevronDown","Languages","RefreshCcwDot","StepForward","WrapText","languages","getPrevText","DropdownCategoryTitle","Icon","Surface","Toolbar","useMemo","extractMarkdown","options","value","label","icon","AISelectorCommands","messages","onSelect","editor","code","editorSelection","state","selection","content","toJSON","sortedLanguages","editorLanguage","storage","aiCommand","language","sort","a","b","includes","Root","Trigger","asChild","Button","className","type","tooltip","t","span","Content","side","align","sideOffset","map","lang","onClick","option","from","to","empty","doc","textBetween","Divider","horizontal","text","chars"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../../src/fields/TiptapEditor/features/menus/TextMenu/components/ai-selector-commands.tsx"],"sourcesContent":["import { useLocale } from '@payloadcms/ui/providers/Locale'\nimport * as Popover from '@radix-ui/react-popover'\nimport { Editor, JSONContent } from '@tiptap/react'\nimport i18next from 'i18next'\nimport {\n ArrowDownWideNarrow,\n BookText,\n CheckCheck,\n ChevronDown,\n Languages,\n RefreshCcwDot,\n StepForward,\n WrapText,\n} from 'lucide-react'\nimport { languages } from '../../../../lib/constants.js'\nimport { getPrevText } from '../../../../lib/utils/index.js'\nimport { DropdownCategoryTitle } from '../../../ui/Dropdown/Dropdown.js'\nimport { Icon } from '../../../ui/Icon.js'\nimport { Surface } from '../../../ui/Surface.js'\nimport { Toolbar } from '../../../ui/Toolbar.js'\nimport { useMemo } from 'react'\nimport { extractMarkdown } from '../../../../lib/extract.js'\nconst options = [\n // {\n // value: 'translate',\n // label: 'Translate text',\n // icon: WrapText,\n // },\n {\n value: 'improve',\n label: 'Improve writing',\n icon: RefreshCcwDot,\n },\n {\n value: 'fix',\n label: 'Fix grammar',\n icon: CheckCheck,\n },\n {\n value: 'rewrite_with_guidelines',\n label: 'Rewrite per Editorial Guidelines',\n icon: BookText,\n },\n {\n value: 'rewrite',\n label: 'Rewrite into Axios',\n icon: WrapText,\n },\n\n {\n value: 'summarize',\n label: 'Summarize text',\n icon: WrapText,\n },\n {\n value: 'shorter',\n label: 'Make shorter',\n icon: ArrowDownWideNarrow,\n },\n {\n value: 'longer',\n label: 'Make longer',\n icon: WrapText,\n },\n]\n\ninterface AISelectorCommandsProps {\n editor: Editor\n messages?: JSONContent\n onSelect: (\n value: string,\n options: { option: string; language?: string; selection?: JSON },\n ) => void\n}\n\nconst AISelectorCommands = ({ messages, onSelect, editor }: AISelectorCommandsProps) => {\n const { code } = useLocale()\n const editorSelection = editor?.state?.selection?.content?.()?.content?.toJSON()\n const sortedLanguages = useMemo(() => {\n const editorLanguage = editor.storage?.aiCommand?.language\n return languages.sort((a, b) => {\n if (editorLanguage?.includes(a.value)) return -1\n if (editorLanguage?.includes(b.value)) return 1\n return 0\n })\n }, [languages, editor.storage?.aiCommand?.language])\n\n return (\n <>\n <DropdownCategoryTitle>Edit or review selection</DropdownCategoryTitle>\n {editorSelection && (\n <Popover.Root>\n <Popover.Trigger asChild>\n <Toolbar.Button\n className='gap-2 px-4 w-full flex justify-start '\n type='button'\n // active={!!states.currentHighlight}\n tooltip={i18next.t('highlightText') || 'Highlight text'}\n >\n <Icon icon={Languages} className='h-4 w-4 text-blue-500' />\n Translate text\n <span className='text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline'>\n Beta\n </span>\n <Icon icon={ChevronDown} className='h-4 w-4 text-blue-500' />\n </Toolbar.Button>\n </Popover.Trigger>\n <Popover.Content side='right' align='start' sideOffset={8} asChild>\n <Surface className='flex flex-col min-w-[15rem] p-2 max-h-[20rem] overflow-auto'>\n <DropdownCategoryTitle>Languages</DropdownCategoryTitle>\n\n {sortedLanguages.map((lang) => (\n <Toolbar.Button\n onClick={() => {\n const editorSelection = editor.state.selection.content().content.toJSON()\n\n onSelect('', {\n option: 'translate',\n language: lang.value,\n selection: editorSelection,\n })\n }}\n className='gap-2 px-4 w-full flex justify-start '\n key={lang.value}\n >\n {lang.label}\n </Toolbar.Button>\n ))}\n </Surface>\n </Popover.Content>\n </Popover.Root>\n )}\n\n {options.map((option) => (\n <Toolbar.Button\n // onSelect={(value) => {\n // const slice = editor.state.selection.content()\n // const text = editor?.storage?.markdown?.serializer.serialize(slice.content)\n // onSelect(text, option.value)\n // }}\n onClick={() => {\n const { from, to, empty } = editor.state.selection\n const editorSelection = editor.state.selection.content().content.toJSON()\n const content = messages\n ? (extractMarkdown(messages) ?? '')\n : editor.state.doc.textBetween(from, to, ' ')\n onSelect(content, {\n option: option.value,\n language: editor?.storage?.aiCommand?.language ?? code ?? 'en',\n })\n }}\n className=' gap-2 px-4 w-full flex justify-start'\n key={option.value}\n value={option.value}\n >\n <option.icon className='h-4 w-4 text-blue-500' />\n {option.label}\n <span className='text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline'>\n Beta\n </span>\n </Toolbar.Button>\n ))}\n <Toolbar.Divider horizontal />\n <DropdownCategoryTitle>Use AI to do more</DropdownCategoryTitle>\n <Toolbar.Button\n onClick={() => {\n const editorSelection = editor.state.selection.content().content.toJSON()\n\n const text = messages\n ? (extractMarkdown(messages) ?? '')\n : getPrevText(editor, { chars: 5000 })\n onSelect(text, {\n option: 'continue',\n language: editor?.storage?.aiCommand?.language ?? code ?? 'en',\n })\n }}\n value='continue'\n className='gap-2 px-4 w-full flex justify-start'\n >\n <StepForward className='h-4 w-4 text-blue-500' />\n Continue writing\n <span className='text-xs ml-1 px-2 py-0.5 bg-blue-100 text-blue-700 rounded-full dark:bg-blue-700 dark:text-blue-100 align-baseline'>\n Beta\n </span>\n </Toolbar.Button>\n </>\n )\n}\n\nexport default AISelectorCommands\n"],"names":["useLocale","Popover","i18next","ArrowDownWideNarrow","BookText","CheckCheck","ChevronDown","Languages","RefreshCcwDot","StepForward","WrapText","languages","getPrevText","DropdownCategoryTitle","Icon","Surface","Toolbar","useMemo","extractMarkdown","options","value","label","icon","AISelectorCommands","messages","onSelect","editor","code","editorSelection","state","selection","content","toJSON","sortedLanguages","editorLanguage","storage","aiCommand","language","sort","a","b","includes","Root","Trigger","asChild","Button","className","type","tooltip","t","span","Content","side","align","sideOffset","map","lang","onClick","option","from","to","empty","doc","textBetween","Divider","horizontal","text","chars"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.tsx"],"sourcesContent":["'use client'\nimport { ArrowUpCircle, Sparkles } from 'lucide-react'\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react'\nimport Markdown from 'react-markdown'\nimport TextareaAutosize from 'react-textarea-autosize'\n\nimport { useLocale } from '@payloadcms/ui/providers/Locale'\nimport { Editor } from '@tiptap/react'\n\nimport { experimental_useObject as useObject } from '@ai-sdk/react'\nimport i18next from 'i18next'\nimport { Command, Group } from '../../../extensions/AICommand/types.js'\nimport { TiptapSchema } from '../../../lib/tiptapSchema.js'\nimport { getPrevText } from '../../../lib/utils/index.js'\nimport AISelectorCommands from '../../menus/TextMenu/components/ai-selector-commands.js'\nimport CrazySpinner from '../../ui/crazy-spinner.js'\nimport { DropdownButton } from '../../ui/Dropdown/Dropdown.js'\nimport { Icon } from '../../ui/Icon.js'\nimport { ScrollArea } from '../../ui/scroll-area.js'\nimport { Surface } from '../../ui/Surface.js'\nimport { Toolbar } from '../../ui/Toolbar.js'\nimport { useExtractMarkdown } from '../AIEditorPanel/markdown.hook.js'\n\nexport type AICommandPanelProps = {\n editor: Editor\n userPrompt?: string\n onOpenChange: (value: boolean) => void\n items: Group[]\n}\n\nexport const AICommandPanel = forwardRef(\n ({ editor, onOpenChange, userPrompt, items, ...restProps }: AICommandPanelProps, ref) => {\n const [inputValue, setInputValue] = useState(userPrompt ?? '')\n const { code } = useLocale()\n const { view } = editor\n const scrollContainer = useRef<HTMLDivElement>(null)\n const activeItem = useRef<HTMLButtonElement>(null)\n const [selectedGroupIndex, setSelectedGroupIndex] = useState(0)\n const [selectedCommandIndex, setSelectedCommandIndex] = useState(0)\n\n const editorNode = view.dom as HTMLElement\n const boundigClient = editorNode.getBoundingClientRect()\n const inputRef = useRef<HTMLTextAreaElement>(null)\n\n const { object, submit, isLoading } = useObject({\n api: '/api/generate',\n schema: TiptapSchema,\n })\n\n const { markdown } = useExtractMarkdown(object)\n\n const hasCompletion = Boolean(object)\n\n const handleClick = useCallback(() => {\n if (object) {\n submit({\n prompt: '',\n body: { option: 'zap', command: inputValue, language: code ?? 'en', selection: object },\n })\n setInputValue('')\n return\n }\n\n submit({\n prompt: '',\n body: { option: 'zap', command: inputValue, language: code ?? 'en' },\n })\n setInputValue('')\n }, [code, inputValue, object, submit])\n\n useEffect(() => {\n if (userPrompt) setInputValue(userPrompt)\n }, [userPrompt])\n useEffect(() => {\n if (hasCompletion) {\n editor.storage.aiCommand.completion = object\n }\n }, [object, isLoading])\n\n useEffect(() => {\n setSelectedGroupIndex(0)\n setSelectedCommandIndex(0)\n }, [items])\n\n const selectItem = useCallback(\n (groupIndex: number, commandIndex: number) => {\n const command = items[groupIndex].commands[commandIndex]\n setInputValue(command.action(editor))\n },\n [items, editor],\n )\n\n useImperativeHandle(ref, () => ({\n onKeyDown: ({ event }: { event: React.KeyboardEvent }) => {\n if (event.key === 'ArrowDown') {\n if (!items.length) {\n return false\n }\n\n const commands = items[selectedGroupIndex].commands\n\n let newCommandIndex = selectedCommandIndex + 1\n let newGroupIndex = selectedGroupIndex\n\n if (commands.length - 1 < newCommandIndex) {\n newCommandIndex = 0\n newGroupIndex = selectedGroupIndex + 1\n }\n\n if (items.length - 1 < newGroupIndex) {\n newGroupIndex = 0\n }\n\n setSelectedCommandIndex(newCommandIndex)\n setSelectedGroupIndex(newGroupIndex)\n\n return true\n }\n\n if (event.key === 'ArrowUp') {\n if (!items.length) {\n return false\n }\n\n let newCommandIndex = selectedCommandIndex - 1\n let newGroupIndex = selectedGroupIndex\n\n if (newCommandIndex < 0) {\n newGroupIndex = selectedGroupIndex - 1\n newCommandIndex = items[newGroupIndex]?.commands.length - 1 || 0\n }\n\n if (newGroupIndex < 0) {\n newGroupIndex = items.length - 1\n newCommandIndex = items[newGroupIndex].commands.length - 1\n }\n\n setSelectedCommandIndex(newCommandIndex)\n setSelectedGroupIndex(newGroupIndex)\n\n return true\n }\n\n if (event.key === 'Enter') {\n if (!items.length || selectedGroupIndex === -1 || selectedCommandIndex === -1) {\n return false\n }\n\n selectItem(selectedGroupIndex, selectedCommandIndex)\n\n return true\n }\n\n return false\n },\n }))\n\n useEffect(() => {\n if (activeItem.current && scrollContainer.current) {\n const offsetTop = activeItem.current.offsetTop\n const offsetHeight = activeItem.current.offsetHeight\n\n scrollContainer.current.scrollTop = offsetTop - offsetHeight\n }\n }, [selectedCommandIndex, selectedGroupIndex])\n\n const createCommandClickHandler = useCallback(\n (groupIndex: number, commandIndex: number) => {\n return () => {\n selectItem(groupIndex, commandIndex)\n }\n },\n [selectItem],\n )\n\n return (\n <>\n <Surface\n className={`p-2 min-w-[20rem] flex flex-col gap-2 w-full ${\n hasCompletion ? '-mt-72' : ''\n }`}\n style={{\n width: boundigClient?.width,\n }}\n >\n <>\n {markdown && (\n <div className='flex w-full'>\n <ScrollArea className='prose p-2 px-4 prose-sm' dir={i18next.dir()}>\n <Markdown>{markdown}</Markdown>\n </ScrollArea>\n </div>\n )}\n\n {isLoading && (\n <div\n className='flex h-12 w-full items-center px-4 text-sm font-medium text-muted-foreground text-blue-500'\n style={{\n width: boundigClient?.width,\n }}\n >\n <Sparkles className='mr-2 h-4 w-4 shrink-0 ' />\n AI (Beta) is thinking\n <div className='ml-2 mt-1'>\n <CrazySpinner />\n </div>\n </div>\n )}\n\n {!isLoading && (\n <>\n <div className='flex justify-between items-center '>\n <Sparkles className='mr-2 h-4 w-4 shrink-0 text-blue-500 ' />\n <TextareaAutosize\n ref={inputRef}\n style={{ resize: 'none' }}\n className='w-full p-2 text-black bg-white rounded dark:bg-black dark:text-white focus:outline-none outline-none border-0 '\n value={inputValue}\n onChange={(e) => {\n editor.storage.aiCommand.userPrompt = e.target.value\n setInputValue(e.target.value)\n }}\n placeholder={\n hasCompletion\n ? i18next.t('tellAiPlaceholder') || 'Tell AI (Beta) what to do next'\n : i18next.t('askAiPlaceholder') || 'Ask AI (Beta) to edit or generate...'\n }\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleClick()\n }}\n />\n <Toolbar.Button onClick={handleClick}>\n <ArrowUpCircle />\n </Toolbar.Button>\n </div>\n </>\n )}\n </>\n </Surface>\n {!isLoading && (\n <Surface\n ref={scrollContainer}\n className='text-black max-h-[min(80vh,24rem)] overflow-auto flex-wrap mb-8 p-2'\n >\n <div className='grid grid-cols-1 gap-0.5'>\n {hasCompletion ? (\n <AISelectorCommands\n editor={editor}\n messages={object}\n onSelect={(value, options) => {\n if (options?.option === 'translate') {\n submit({ prompt: value, body: options })\n } else {\n submit({ prompt: value, body: { ...options, source: code } })\n }\n }}\n />\n ) : (\n items.map((group, groupIndex: number) => (\n <React.Fragment key={`${group.title}-wrapper`}>\n <div\n className='text-neutral-500 text-[0.65rem] col-[1/-1] mx-2 mt-4 font-semibold tracking-wider select-none uppercase first:mt-0.5'\n key={`${group.title}`}\n >\n {group.title}\n </div>\n {group.commands.map((command: Command, commandIndex: number) => (\n <DropdownButton\n key={`${command.label}`}\n isActive={\n selectedGroupIndex === groupIndex && selectedCommandIndex === commandIndex\n }\n onClick={createCommandClickHandler(groupIndex, commandIndex)}\n >\n <Icon icon={command.icon} className='mr-1' />\n {command.label}\n </DropdownButton>\n ))}\n </React.Fragment>\n ))\n )}\n </div>\n </Surface>\n )}\n </>\n )\n },\n)\n"],"names":["ArrowUpCircle","Sparkles","React","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","Markdown","TextareaAutosize","useLocale","experimental_useObject","useObject","i18next","TiptapSchema","AISelectorCommands","CrazySpinner","DropdownButton","Icon","ScrollArea","Surface","Toolbar","useExtractMarkdown","AICommandPanel","editor","onOpenChange","userPrompt","items","restProps","ref","inputValue","setInputValue","code","view","scrollContainer","activeItem","selectedGroupIndex","setSelectedGroupIndex","selectedCommandIndex","setSelectedCommandIndex","editorNode","dom","boundigClient","getBoundingClientRect","inputRef","object","submit","isLoading","api","schema","markdown","hasCompletion","Boolean","handleClick","prompt","body","option","command","language","selection","storage","aiCommand","completion","selectItem","groupIndex","commandIndex","commands","action","onKeyDown","event","key","length","newCommandIndex","newGroupIndex","current","offsetTop","offsetHeight","scrollTop","createCommandClickHandler","className","style","width","div","dir","resize","value","onChange","e","target","placeholder","t","autoFocus","Button","onClick","messages","onSelect","options","source","map","group","Fragment","title","isActive","icon","label"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../src/fields/TiptapEditor/features/panels/AICommandPanel/AICommandPanel.tsx"],"sourcesContent":["'use client'\nimport { ArrowUpCircle, Sparkles } from 'lucide-react'\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react'\nimport Markdown from 'react-markdown'\nimport TextareaAutosize from 'react-textarea-autosize'\n\nimport { useLocale } from '@payloadcms/ui/providers/Locale'\nimport { Editor } from '@tiptap/react'\n\nimport { experimental_useObject as useObject } from '@ai-sdk/react'\nimport i18next from 'i18next'\nimport { Command, Group } from '../../../extensions/AICommand/types.js'\nimport { TiptapSchema } from '../../../lib/tiptapSchema.js'\nimport { getPrevText } from '../../../lib/utils/index.js'\nimport AISelectorCommands from '../../menus/TextMenu/components/ai-selector-commands.js'\nimport CrazySpinner from '../../ui/crazy-spinner.js'\nimport { DropdownButton } from '../../ui/Dropdown/Dropdown.js'\nimport { Icon } from '../../ui/Icon.js'\nimport { ScrollArea } from '../../ui/scroll-area.js'\nimport { Surface } from '../../ui/Surface.js'\nimport { Toolbar } from '../../ui/Toolbar.js'\nimport { useExtractMarkdown } from '../AIEditorPanel/markdown.hook.js'\n\nexport type AICommandPanelProps = {\n editor: Editor\n userPrompt?: string\n onOpenChange: (value: boolean) => void\n items: Group[]\n}\n\nexport const AICommandPanel = forwardRef(\n ({ editor, onOpenChange, userPrompt, items, ...restProps }: AICommandPanelProps, ref) => {\n const [inputValue, setInputValue] = useState(userPrompt ?? '')\n const { code } = useLocale()\n const { view } = editor\n const scrollContainer = useRef<HTMLDivElement>(null)\n const activeItem = useRef<HTMLButtonElement>(null)\n const [selectedGroupIndex, setSelectedGroupIndex] = useState(0)\n const [selectedCommandIndex, setSelectedCommandIndex] = useState(0)\n\n const editorNode = view.dom as HTMLElement\n const boundigClient = editorNode.getBoundingClientRect()\n const inputRef = useRef<HTMLTextAreaElement>(null)\n\n const { object, submit, isLoading } = useObject({\n api: '/api/generate',\n schema: TiptapSchema,\n })\n\n const { markdown } = useExtractMarkdown(object)\n\n const hasCompletion = Boolean(object)\n\n const handleClick = useCallback(() => {\n if (object) {\n submit({\n prompt: '',\n body: { option: 'zap', command: inputValue, language: code ?? 'en', selection: object },\n })\n setInputValue('')\n return\n }\n\n submit({\n prompt: '',\n body: { option: 'zap', command: inputValue, language: code ?? 'en' },\n })\n setInputValue('')\n }, [code, inputValue, object, submit])\n\n useEffect(() => {\n if (userPrompt) setInputValue(userPrompt)\n }, [userPrompt])\n useEffect(() => {\n if (hasCompletion) {\n editor.storage.aiCommand.completion = object\n }\n }, [object, isLoading])\n\n useEffect(() => {\n setSelectedGroupIndex(0)\n setSelectedCommandIndex(0)\n }, [items])\n\n const selectItem = useCallback(\n (groupIndex: number, commandIndex: number) => {\n const command = items[groupIndex].commands[commandIndex]\n setInputValue(command.action(editor))\n },\n [items, editor],\n )\n\n useImperativeHandle(ref, () => ({\n onKeyDown: ({ event }: { event: React.KeyboardEvent }) => {\n if (event.key === 'ArrowDown') {\n if (!items.length) {\n return false\n }\n\n const commands = items[selectedGroupIndex].commands\n\n let newCommandIndex = selectedCommandIndex + 1\n let newGroupIndex = selectedGroupIndex\n\n if (commands.length - 1 < newCommandIndex) {\n newCommandIndex = 0\n newGroupIndex = selectedGroupIndex + 1\n }\n\n if (items.length - 1 < newGroupIndex) {\n newGroupIndex = 0\n }\n\n setSelectedCommandIndex(newCommandIndex)\n setSelectedGroupIndex(newGroupIndex)\n\n return true\n }\n\n if (event.key === 'ArrowUp') {\n if (!items.length) {\n return false\n }\n\n let newCommandIndex = selectedCommandIndex - 1\n let newGroupIndex = selectedGroupIndex\n\n if (newCommandIndex < 0) {\n newGroupIndex = selectedGroupIndex - 1\n newCommandIndex = items[newGroupIndex]?.commands.length - 1 || 0\n }\n\n if (newGroupIndex < 0) {\n newGroupIndex = items.length - 1\n newCommandIndex = items[newGroupIndex].commands.length - 1\n }\n\n setSelectedCommandIndex(newCommandIndex)\n setSelectedGroupIndex(newGroupIndex)\n\n return true\n }\n\n if (event.key === 'Enter') {\n if (!items.length || selectedGroupIndex === -1 || selectedCommandIndex === -1) {\n return false\n }\n\n selectItem(selectedGroupIndex, selectedCommandIndex)\n\n return true\n }\n\n return false\n },\n }))\n\n useEffect(() => {\n if (activeItem.current && scrollContainer.current) {\n const offsetTop = activeItem.current.offsetTop\n const offsetHeight = activeItem.current.offsetHeight\n\n scrollContainer.current.scrollTop = offsetTop - offsetHeight\n }\n }, [selectedCommandIndex, selectedGroupIndex])\n\n const createCommandClickHandler = useCallback(\n (groupIndex: number, commandIndex: number) => {\n return () => {\n selectItem(groupIndex, commandIndex)\n }\n },\n [selectItem],\n )\n\n return (\n <>\n <Surface\n className={`p-2 min-w-[20rem] flex flex-col gap-2 w-full ${\n hasCompletion ? '-mt-72' : ''\n }`}\n style={{\n width: boundigClient?.width,\n }}\n >\n <>\n {markdown && (\n <div className='flex w-full'>\n <ScrollArea className='prose p-2 px-4 prose-sm' dir={i18next.dir()}>\n <Markdown>{markdown}</Markdown>\n </ScrollArea>\n </div>\n )}\n\n {isLoading && (\n <div\n className='flex h-12 w-full items-center px-4 text-sm font-medium text-muted-foreground text-blue-500'\n style={{\n width: boundigClient?.width,\n }}\n >\n <Sparkles className='mr-2 h-4 w-4 shrink-0 ' />\n AI (Beta) is thinking\n <div className='ml-2 mt-1'>\n <CrazySpinner />\n </div>\n </div>\n )}\n\n {!isLoading && (\n <>\n <div className='flex justify-between items-center '>\n <Sparkles className='mr-2 h-4 w-4 shrink-0 text-blue-500 ' />\n <TextareaAutosize\n ref={inputRef}\n style={{ resize: 'none' }}\n className='w-full p-2 text-black bg-white rounded dark:bg-black dark:text-white focus:outline-none outline-none border-0 '\n value={inputValue}\n onChange={(e) => {\n editor.storage.aiCommand.userPrompt = e.target.value\n setInputValue(e.target.value)\n }}\n placeholder={\n hasCompletion\n ? i18next.t('tellAiPlaceholder') || 'Tell AI (Beta) what to do next'\n : i18next.t('askAiPlaceholder') || 'Ask AI (Beta) to edit or generate...'\n }\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleClick()\n }}\n />\n <Toolbar.Button onClick={handleClick}>\n <ArrowUpCircle />\n </Toolbar.Button>\n </div>\n </>\n )}\n </>\n </Surface>\n {!isLoading && (\n <Surface\n ref={scrollContainer}\n className='text-black max-h-[min(80vh,24rem)] overflow-auto flex-wrap mb-8 p-2'\n >\n <div className='grid grid-cols-1 gap-0.5'>\n {hasCompletion ? (\n <AISelectorCommands\n editor={editor}\n messages={object}\n onSelect={(value, options) => {\n if (options?.option === 'translate') {\n submit({ prompt: value, body: options })\n } else {\n submit({ prompt: value, body: { ...options, source: code } })\n }\n }}\n />\n ) : (\n items.map((group, groupIndex: number) => (\n <React.Fragment key={`${group.title}-wrapper`}>\n <div\n className='text-neutral-500 text-[0.65rem] col-[1/-1] mx-2 mt-4 font-semibold tracking-wider select-none uppercase first:mt-0.5'\n key={`${group.title}`}\n >\n {group.title}\n </div>\n {group.commands.map((command: Command, commandIndex: number) => (\n <DropdownButton\n key={`${command.label}`}\n isActive={\n selectedGroupIndex === groupIndex && selectedCommandIndex === commandIndex\n }\n onClick={createCommandClickHandler(groupIndex, commandIndex)}\n >\n <Icon icon={command.icon} className='mr-1' />\n {command.label}\n </DropdownButton>\n ))}\n </React.Fragment>\n ))\n )}\n </div>\n </Surface>\n )}\n </>\n )\n },\n)\n"],"names":["ArrowUpCircle","Sparkles","React","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","Markdown","TextareaAutosize","useLocale","experimental_useObject","useObject","i18next","TiptapSchema","AISelectorCommands","CrazySpinner","DropdownButton","Icon","ScrollArea","Surface","Toolbar","useExtractMarkdown","AICommandPanel","editor","onOpenChange","userPrompt","items","restProps","ref","inputValue","setInputValue","code","view","scrollContainer","activeItem","selectedGroupIndex","setSelectedGroupIndex","selectedCommandIndex","setSelectedCommandIndex","editorNode","dom","boundigClient","getBoundingClientRect","inputRef","object","submit","isLoading","api","schema","markdown","hasCompletion","Boolean","handleClick","prompt","body","option","command","language","selection","storage","aiCommand","completion","selectItem","groupIndex","commandIndex","commands","action","onKeyDown","event","key","length","newCommandIndex","newGroupIndex","current","offsetTop","offsetHeight","scrollTop","createCommandClickHandler","className","style","width","div","dir","resize","value","onChange","e","target","placeholder","t","autoFocus","Button","onClick","messages","onSelect","options","source","map","group","Fragment","title","isActive","icon","label"],"mappings":"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"}