ct-rich-text-editor 1.3.11 → 1.3.13
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.
- package/README.md +22 -6
- package/dist/Provider/EditorProvider.d.ts +8 -0
- package/dist/assets/style.css +118 -42
- package/dist/context/CommentContext.d.ts +12 -0
- package/dist/{html2pdf.bundle-f2c10c61.js → html2pdf.bundle-f58b88f5.js} +2 -2
- package/dist/{html2pdf.bundle-f2c10c61.js.map → html2pdf.bundle-f58b88f5.js.map} +1 -1
- package/dist/{html2pdf.bundle.min-05204c5b.js → html2pdf.bundle.min-277f1c42.js} +2 -2
- package/dist/{html2pdf.bundle.min-05204c5b.js.map → html2pdf.bundle.min-277f1c42.js.map} +1 -1
- package/dist/{index-35bfe917.js → index-26434d4e.js} +2 -2
- package/dist/{index-35bfe917.js.map → index-26434d4e.js.map} +1 -1
- package/dist/{index-ca05509b.js → index-38cb7602.js} +3666 -3333
- package/dist/index-38cb7602.js.map +1 -0
- package/dist/{index-d9c39bac.js → index-fa2d3309.js} +2 -2
- package/dist/{index-d9c39bac.js.map → index-fa2d3309.js.map} +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/pages/ConfigurableEditor/ConfigurableEditor.d.ts +7 -0
- package/dist/utils/editorStyleConverter.d.ts +8 -0
- package/package.json +1 -1
- package/dist/index-ca05509b.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
|
|
3
3
|
import { $getNodeByKey } from "lexical";
|
|
4
|
-
import { a as createLucideIcon, D as Download, T as Trash2, $ as $isFileNode } from "./index-
|
|
4
|
+
import { a as createLucideIcon, D as Download, T as Trash2, $ as $isFileNode } from "./index-38cb7602.js";
|
|
5
5
|
import "react";
|
|
6
6
|
import "axios";
|
|
7
7
|
import "@emotion/styled";
|
|
@@ -210,4 +210,4 @@ const FileView = ({ src, fileName, fileSize, nodeKey }) => {
|
|
|
210
210
|
export {
|
|
211
211
|
FileView as default
|
|
212
212
|
};
|
|
213
|
-
//# sourceMappingURL=index-
|
|
213
|
+
//# sourceMappingURL=index-fa2d3309.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-d9c39bac.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/file-archive.js","../../../node_modules/lucide-react/dist/esm/icons/file-text.js","../../../node_modules/lucide-react/dist/esm/icons/file.js","../src/components/FileView/index.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileArchive = createLucideIcon(\"FileArchive\", [\n [\"path\", { d: \"M16 22h2a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v18\", key: \"1oywqq\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"circle\", { cx: \"10\", cy: \"20\", r: \"2\", key: \"1xzdoj\" }],\n [\"path\", { d: \"M10 7V6\", key: \"dljcrl\" }],\n [\"path\", { d: \"M10 12v-1\", key: \"v7bkov\" }],\n [\"path\", { d: \"M10 18v-2\", key: \"1cjy8d\" }]\n]);\n\nexport { FileArchive as default };\n//# sourceMappingURL=file-archive.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileText = createLucideIcon(\"FileText\", [\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n]);\n\nexport { FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst File = createLucideIcon(\"File\", [\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }]\n]);\n\nexport { File as default };\n//# sourceMappingURL=file.js.map\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getNodeByKey } from \"lexical\";\nimport { Download, File as FileIcon, FileArchive, FileText, Trash2 } from \"lucide-react\";\nimport React from \"react\";\nimport { $isFileNode } from \"src/nodes/FileNode\";\n\ninterface FileViewProps {\n src: string;\n fileName: string;\n fileSize?: number;\n nodeKey: string;\n}\n\n// Helper to format file size\nconst formatFileSize = (bytes?: number): string => {\n if (!bytes) return \"\";\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n};\n\n// Helper to get file extension\nconst getFileExtension = (fileName: string): string => {\n const parts = fileName.split(\".\");\n return parts.length > 1 ? parts[parts.length - 1].toLowerCase() : \"\";\n};\n\n// Helper to get icon based on file type\nconst getFileIcon = (fileName: string) => {\n const ext = getFileExtension(fileName);\n\n if ([\"pdf\", \"doc\", \"docx\", \"txt\", \"odt\"].includes(ext)) {\n return <FileText className=\"cteditor-w-8 cteditor-h-8 cteditor-text-blue-500\" />;\n }\n if ([\"zip\", \"rar\", \"7z\", \"tar\", \"gz\"].includes(ext)) {\n return <FileArchive className=\"cteditor-w-8 cteditor-h-8 cteditor-text-orange-500\" />;\n }\n return <FileIcon className=\"cteditor-w-8 cteditor-h-8 cteditor-text-gray-500\" />;\n};\n\nconst FileView: React.FC<FileViewProps> = ({ src, fileName, fileSize, nodeKey }) => {\n const [editor] = useLexicalComposerContext();\n\n // Validate props to prevent errors\n if (!src || !fileName) {\n console.error('FileView: Missing required props', { src, fileName, fileSize, nodeKey });\n return (\n <div className=\"cteditor-inline-flex cteditor-items-center cteditor-gap-3 cteditor-px-4 cteditor-py-3 cteditor-my-2 cteditor-border cteditor-border-destructive cteditor-rounded-lg cteditor-bg-destructive/10\">\n <div className=\"cteditor-text-sm cteditor-text-destructive\">\n Error loading file\n </div>\n </div>\n );\n }\n\n const handleDownload = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n try {\n // Check if it's a data URL (base64)\n if (src.startsWith('data:')) {\n // Convert data URL to blob for proper download\n const arr = src.split(',');\n const mimeMatch = arr[0].match(/:(.*?);/);\n const mime = mimeMatch ? mimeMatch[1] : 'application/octet-stream';\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n\n const blob = new Blob([u8arr], { type: mime });\n const blobUrl = URL.createObjectURL(blob);\n\n const link = document.createElement(\"a\");\n link.href = blobUrl;\n link.download = fileName;\n link.style.display = \"none\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n // Clean up the blob URL after a delay\n setTimeout(() => URL.revokeObjectURL(blobUrl), 100);\n } else {\n // Regular URL - just download directly\n const link = document.createElement(\"a\");\n link.href = src;\n link.download = fileName;\n link.style.display = \"none\";\n link.target = \"_blank\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n } catch (error) {\n console.error(\"Error downloading file:\", error);\n // Fallback: try to open in new tab\n window.open(src, '_blank');\n }\n };\n\n const handleDeleteFile = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if ($isFileNode(node)) {\n node.remove();\n }\n });\n };\n\n return (\n <div\n className=\"cteditor-inline-flex cteditor-items-center cteditor-gap-3 cteditor-py-1 cteditor-px-2 cteditor-my-2 cteditor-border cteditor-border-border cteditor-rounded-lg cteditor-bg-background hover:cteditor-bg-accent/50 cteditor-transition-colors cteditor-cursor-pointer cteditor-max-w-md\"\n onClick={handleDownload}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleDownload(e as any);\n }\n }}\n >\n {/* File Icon */}\n <div className=\"cteditor-flex-shrink-0 *:cteditor-size-5\">\n {getFileIcon(fileName)}\n </div>\n\n {/* File Info */}\n <div className=\"cteditor-flex-1 cteditor-min-w-0\">\n <div className=\"cteditor-font-medium cteditor-text-xs cteditor-text-foreground cteditor-truncate\">\n {fileName}\n </div>\n {fileSize && (\n <div className=\"cteditor-text-xs cteditor-text-muted-foreground\">\n {formatFileSize(fileSize)}\n </div>\n )}\n </div>\n\n {/* Action Buttons - Download and Delete */}\n <div className=\"cteditor-flex cteditor-gap-1 cteditor-flex-shrink-0\">\n <button\n onClick={handleDownload}\n className=\"cteditor-p-1 cteditor-rounded-md hover:cteditor-bg-accent cteditor-transition-colors\"\n aria-label=\"Download file\"\n title=\"Download file\"\n >\n <Download className=\"cteditor-w-4 cteditor-h-4 cteditor-text-muted-foreground\" />\n </button>\n <button\n onClick={handleDeleteFile}\n className=\"cteditor-p-1 cteditor-rounded-md hover:cteditor-bg-destructive hover:cteditor-text-destructive-foreground cteditor-transition-colors\"\n aria-label=\"Delete file\"\n title=\"Delete file\"\n >\n <Trash2 className=\"cteditor-w-4 cteditor-h-4 cteditor-text-muted-foreground\" />\n </button>\n </div>\n </div>\n );\n};\n\nexport default FileView;\n"],"names":["FileIcon"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"index-fa2d3309.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/file-archive.js","../../../node_modules/lucide-react/dist/esm/icons/file-text.js","../../../node_modules/lucide-react/dist/esm/icons/file.js","../src/components/FileView/index.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileArchive = createLucideIcon(\"FileArchive\", [\n [\"path\", { d: \"M16 22h2a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v18\", key: \"1oywqq\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"circle\", { cx: \"10\", cy: \"20\", r: \"2\", key: \"1xzdoj\" }],\n [\"path\", { d: \"M10 7V6\", key: \"dljcrl\" }],\n [\"path\", { d: \"M10 12v-1\", key: \"v7bkov\" }],\n [\"path\", { d: \"M10 18v-2\", key: \"1cjy8d\" }]\n]);\n\nexport { FileArchive as default };\n//# sourceMappingURL=file-archive.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileText = createLucideIcon(\"FileText\", [\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n]);\n\nexport { FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.344.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst File = createLucideIcon(\"File\", [\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }]\n]);\n\nexport { File as default };\n//# sourceMappingURL=file.js.map\n","import { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getNodeByKey } from \"lexical\";\nimport { Download, File as FileIcon, FileArchive, FileText, Trash2 } from \"lucide-react\";\nimport React from \"react\";\nimport { $isFileNode } from \"src/nodes/FileNode\";\n\ninterface FileViewProps {\n src: string;\n fileName: string;\n fileSize?: number;\n nodeKey: string;\n}\n\n// Helper to format file size\nconst formatFileSize = (bytes?: number): string => {\n if (!bytes) return \"\";\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n};\n\n// Helper to get file extension\nconst getFileExtension = (fileName: string): string => {\n const parts = fileName.split(\".\");\n return parts.length > 1 ? parts[parts.length - 1].toLowerCase() : \"\";\n};\n\n// Helper to get icon based on file type\nconst getFileIcon = (fileName: string) => {\n const ext = getFileExtension(fileName);\n\n if ([\"pdf\", \"doc\", \"docx\", \"txt\", \"odt\"].includes(ext)) {\n return <FileText className=\"cteditor-w-8 cteditor-h-8 cteditor-text-blue-500\" />;\n }\n if ([\"zip\", \"rar\", \"7z\", \"tar\", \"gz\"].includes(ext)) {\n return <FileArchive className=\"cteditor-w-8 cteditor-h-8 cteditor-text-orange-500\" />;\n }\n return <FileIcon className=\"cteditor-w-8 cteditor-h-8 cteditor-text-gray-500\" />;\n};\n\nconst FileView: React.FC<FileViewProps> = ({ src, fileName, fileSize, nodeKey }) => {\n const [editor] = useLexicalComposerContext();\n\n // Validate props to prevent errors\n if (!src || !fileName) {\n console.error('FileView: Missing required props', { src, fileName, fileSize, nodeKey });\n return (\n <div className=\"cteditor-inline-flex cteditor-items-center cteditor-gap-3 cteditor-px-4 cteditor-py-3 cteditor-my-2 cteditor-border cteditor-border-destructive cteditor-rounded-lg cteditor-bg-destructive/10\">\n <div className=\"cteditor-text-sm cteditor-text-destructive\">\n Error loading file\n </div>\n </div>\n );\n }\n\n const handleDownload = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n try {\n // Check if it's a data URL (base64)\n if (src.startsWith('data:')) {\n // Convert data URL to blob for proper download\n const arr = src.split(',');\n const mimeMatch = arr[0].match(/:(.*?);/);\n const mime = mimeMatch ? mimeMatch[1] : 'application/octet-stream';\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n\n const blob = new Blob([u8arr], { type: mime });\n const blobUrl = URL.createObjectURL(blob);\n\n const link = document.createElement(\"a\");\n link.href = blobUrl;\n link.download = fileName;\n link.style.display = \"none\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n // Clean up the blob URL after a delay\n setTimeout(() => URL.revokeObjectURL(blobUrl), 100);\n } else {\n // Regular URL - just download directly\n const link = document.createElement(\"a\");\n link.href = src;\n link.download = fileName;\n link.style.display = \"none\";\n link.target = \"_blank\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n } catch (error) {\n console.error(\"Error downloading file:\", error);\n // Fallback: try to open in new tab\n window.open(src, '_blank');\n }\n };\n\n const handleDeleteFile = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n editor.update(() => {\n const node = $getNodeByKey(nodeKey);\n if ($isFileNode(node)) {\n node.remove();\n }\n });\n };\n\n return (\n <div\n className=\"cteditor-inline-flex cteditor-items-center cteditor-gap-3 cteditor-py-1 cteditor-px-2 cteditor-my-2 cteditor-border cteditor-border-border cteditor-rounded-lg cteditor-bg-background hover:cteditor-bg-accent/50 cteditor-transition-colors cteditor-cursor-pointer cteditor-max-w-md\"\n onClick={handleDownload}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleDownload(e as any);\n }\n }}\n >\n {/* File Icon */}\n <div className=\"cteditor-flex-shrink-0 *:cteditor-size-5\">\n {getFileIcon(fileName)}\n </div>\n\n {/* File Info */}\n <div className=\"cteditor-flex-1 cteditor-min-w-0\">\n <div className=\"cteditor-font-medium cteditor-text-xs cteditor-text-foreground cteditor-truncate\">\n {fileName}\n </div>\n {fileSize && (\n <div className=\"cteditor-text-xs cteditor-text-muted-foreground\">\n {formatFileSize(fileSize)}\n </div>\n )}\n </div>\n\n {/* Action Buttons - Download and Delete */}\n <div className=\"cteditor-flex cteditor-gap-1 cteditor-flex-shrink-0\">\n <button\n onClick={handleDownload}\n className=\"cteditor-p-1 cteditor-rounded-md hover:cteditor-bg-accent cteditor-transition-colors\"\n aria-label=\"Download file\"\n title=\"Download file\"\n >\n <Download className=\"cteditor-w-4 cteditor-h-4 cteditor-text-muted-foreground\" />\n </button>\n <button\n onClick={handleDeleteFile}\n className=\"cteditor-p-1 cteditor-rounded-md hover:cteditor-bg-destructive hover:cteditor-text-destructive-foreground cteditor-transition-colors\"\n aria-label=\"Delete file\"\n title=\"Delete file\"\n >\n <Trash2 className=\"cteditor-w-4 cteditor-h-4 cteditor-text-muted-foreground\" />\n </button>\n </div>\n </div>\n );\n};\n\nexport default FileView;\n"],"names":["FileIcon"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,4 +4,5 @@ export { default as ConfigurableEditorWithAuth } from './components/Configurable
|
|
|
4
4
|
export { default as ConfigurableEditor } from './pages/ConfigurableEditor/ConfigurableEditor';
|
|
5
5
|
export { verifyApiKey } from './api/auth';
|
|
6
6
|
export type { EditorConfigTypes } from './types';
|
|
7
|
+
export type { CurrentUser } from './Provider/EditorProvider';
|
|
7
8
|
export { editorConfig as defaultEditorConfig } from './editorConfig';
|
package/dist/index.js
CHANGED
|
@@ -7,10 +7,17 @@ import { EditorConfigTypes } from '../../types';
|
|
|
7
7
|
* ConfigurableEditor component using Lexical.
|
|
8
8
|
* Includes plugins for various functionalities such as lists, tables, and formatting.
|
|
9
9
|
*/
|
|
10
|
+
interface CurrentUser {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
email?: string;
|
|
14
|
+
avatar?: string;
|
|
15
|
+
}
|
|
10
16
|
interface ConfigurableEditorProps {
|
|
11
17
|
config: EditorConfigTypes;
|
|
12
18
|
defaultFontFamilies: string[];
|
|
13
19
|
mentionUserList: string[];
|
|
20
|
+
currentUser?: CurrentUser | null;
|
|
14
21
|
initialContent?: string;
|
|
15
22
|
onChange?: (html: string) => void;
|
|
16
23
|
apiKey?: string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LexicalEditor } from '../../node_modules/lexical';
|
|
2
|
+
/**
|
|
3
|
+
* ==========================================
|
|
4
|
+
* Main Export Hooks & Functions
|
|
5
|
+
* ==========================================
|
|
6
|
+
*/
|
|
7
|
+
export declare function useExportWithStriping(): () => string;
|
|
8
|
+
export declare function exportEditorWithStriping(editor: LexicalEditor): string;
|