ct-rich-text-editor 1.3.13 → 1.3.14
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/dist/{html2pdf.bundle-f58b88f5.js → html2pdf.bundle-2f6c0095.js} +2 -2
- package/dist/{html2pdf.bundle-f58b88f5.js.map → html2pdf.bundle-2f6c0095.js.map} +1 -1
- package/dist/{html2pdf.bundle.min-277f1c42.js → html2pdf.bundle.min-ebfc9495.js} +2 -2
- package/dist/{html2pdf.bundle.min-277f1c42.js.map → html2pdf.bundle.min-ebfc9495.js.map} +1 -1
- package/dist/{index-fa2d3309.js → index-61aad8a6.js} +2 -2
- package/dist/{index-fa2d3309.js.map → index-61aad8a6.js.map} +1 -1
- package/dist/{index-38cb7602.js → index-9a0b7c3b.js} +9 -9
- package/dist/{index-38cb7602.js.map → index-9a0b7c3b.js.map} +1 -1
- package/dist/{index-26434d4e.js → index-bae3a7ee.js} +2 -2
- package/dist/{index-26434d4e.js.map → index-bae3a7ee.js.map} +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -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-9a0b7c3b.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-61aad8a6.js.map
|
|
@@ -1 +1 @@
|
|
|
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]}
|
|
1
|
+
{"version":3,"file":"index-61aad8a6.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]}
|
|
@@ -202,7 +202,7 @@ const EditorTheme = "";
|
|
|
202
202
|
const PlaygroundEditorTheme = "";
|
|
203
203
|
const AIChatPlugin$1 = "";
|
|
204
204
|
const backendInstance = axios.create({
|
|
205
|
-
baseURL: "
|
|
205
|
+
baseURL: "https://api.cteditor.com/",
|
|
206
206
|
headers: {
|
|
207
207
|
"Content-Type": "application/json"
|
|
208
208
|
}
|
|
@@ -1479,7 +1479,7 @@ const AiTextTransform = async ({ content, apiKey }) => {
|
|
|
1479
1479
|
const AI_ACTION_COMMAND = createCommand(
|
|
1480
1480
|
"AI_ACTION_COMMAND"
|
|
1481
1481
|
);
|
|
1482
|
-
const ImageView = React__default.lazy(() => import("./index-
|
|
1482
|
+
const ImageView = React__default.lazy(() => import("./index-bae3a7ee.js"));
|
|
1483
1483
|
function isGoogleDocCheckboxImg(img) {
|
|
1484
1484
|
return img.parentElement != null && img.parentElement.tagName === "LI" && img.previousSibling === null && img.getAttribute("aria-roledescription") === "checkbox";
|
|
1485
1485
|
}
|
|
@@ -15272,7 +15272,7 @@ const EmbedComponent = ({ url, displayType, alignment, nodeKey }) => {
|
|
|
15272
15272
|
}
|
|
15273
15273
|
);
|
|
15274
15274
|
};
|
|
15275
|
-
const FileComponent = React$1.lazy(() => import("./index-
|
|
15275
|
+
const FileComponent = React$1.lazy(() => import("./index-61aad8a6.js"));
|
|
15276
15276
|
function convertFileElement(domNode) {
|
|
15277
15277
|
if (domNode instanceof HTMLDivElement) {
|
|
15278
15278
|
const dataUrl = domNode.getAttribute("data-lexical-file-src");
|
|
@@ -17827,7 +17827,7 @@ function ChartComponent({
|
|
|
17827
17827
|
setIsLoading(true);
|
|
17828
17828
|
const toastId = toast.loading("Updating chart...");
|
|
17829
17829
|
try {
|
|
17830
|
-
const backendUrl = "
|
|
17830
|
+
const backendUrl = "https://api.cteditor.com/".replace(/\/$/, "");
|
|
17831
17831
|
const apiKey = localStorage.getItem("apiKey") || "";
|
|
17832
17832
|
const response = await fetch(`${backendUrl}/api/chat/regenerate`, {
|
|
17833
17833
|
method: "POST",
|
|
@@ -19977,10 +19977,10 @@ const PDF_CONFIG = {
|
|
|
19977
19977
|
};
|
|
19978
19978
|
const loadHtml2Pdf = async () => {
|
|
19979
19979
|
try {
|
|
19980
|
-
const mod = await import("./html2pdf.bundle.min-
|
|
19980
|
+
const mod = await import("./html2pdf.bundle.min-ebfc9495.js").then((n) => n.h);
|
|
19981
19981
|
return (mod == null ? void 0 : mod.default) || mod;
|
|
19982
19982
|
} catch {
|
|
19983
|
-
const mod2 = await import("./html2pdf.bundle-
|
|
19983
|
+
const mod2 = await import("./html2pdf.bundle-2f6c0095.js").then((n) => n.h);
|
|
19984
19984
|
return (mod2 == null ? void 0 : mod2.default) || mod2;
|
|
19985
19985
|
}
|
|
19986
19986
|
};
|
|
@@ -25777,7 +25777,7 @@ const Toolbar = ({
|
|
|
25777
25777
|
async (metadata) => {
|
|
25778
25778
|
const toastId = toast.loading("Generating chart...");
|
|
25779
25779
|
try {
|
|
25780
|
-
const backendUrl = "
|
|
25780
|
+
const backendUrl = "https://api.cteditor.com/".replace(/\/$/, "");
|
|
25781
25781
|
const response = await fetch(`${backendUrl}/api/chat/regenerate`, {
|
|
25782
25782
|
method: "POST",
|
|
25783
25783
|
headers: {
|
|
@@ -27070,7 +27070,7 @@ class GrammarAIService {
|
|
|
27070
27070
|
__publicField(this, "apiEndpoint");
|
|
27071
27071
|
__publicField(this, "requestTimeout", REQUEST_TIMEOUT);
|
|
27072
27072
|
__publicField(this, "sentenceCache", /* @__PURE__ */ new Map());
|
|
27073
|
-
this.apiEndpoint = "
|
|
27073
|
+
this.apiEndpoint = "https://api.cteditor.com/" + apiEndpoint;
|
|
27074
27074
|
}
|
|
27075
27075
|
isSentenceCached(text) {
|
|
27076
27076
|
const hash = generateSentenceHash(text);
|
|
@@ -35861,4 +35861,4 @@ export {
|
|
|
35861
35861
|
useHtmlView as u,
|
|
35862
35862
|
verifyApiKey as v
|
|
35863
35863
|
};
|
|
35864
|
-
//# sourceMappingURL=index-
|
|
35864
|
+
//# sourceMappingURL=index-9a0b7c3b.js.map
|