@jotx-labs/editor 2.4.138 → 2.4.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 (57) hide show
  1. package/dist/components/Brand/JotxLogo.d.ts +9 -0
  2. package/dist/components/Brand/JotxLogo.d.ts.map +1 -0
  3. package/dist/components/Brand/JotxLogo.js +11 -0
  4. package/dist/components/Brand/JotxLogo.js.map +1 -0
  5. package/dist/components/DocumentHeader/DocumentHeader.d.ts +21 -0
  6. package/dist/components/DocumentHeader/DocumentHeader.d.ts.map +1 -0
  7. package/dist/components/DocumentHeader/DocumentHeader.js +83 -0
  8. package/dist/components/DocumentHeader/DocumentHeader.js.map +1 -0
  9. package/dist/components/DocumentHeader/ExportMenu.d.ts +11 -0
  10. package/dist/components/DocumentHeader/ExportMenu.d.ts.map +1 -0
  11. package/dist/components/DocumentHeader/ExportMenu.js +244 -0
  12. package/dist/components/DocumentHeader/ExportMenu.js.map +1 -0
  13. package/dist/components/DocumentHeader/ViewOptions.d.ts +6 -0
  14. package/dist/components/DocumentHeader/ViewOptions.d.ts.map +1 -0
  15. package/dist/components/DocumentHeader/ViewOptions.js +73 -0
  16. package/dist/components/DocumentHeader/ViewOptions.js.map +1 -0
  17. package/dist/components/GraphView/GraphView.d.ts +33 -0
  18. package/dist/components/GraphView/GraphView.d.ts.map +1 -0
  19. package/dist/components/GraphView/GraphView.js +234 -0
  20. package/dist/components/GraphView/GraphView.js.map +1 -0
  21. package/dist/extensions/ButtonNode 2.js +59 -0
  22. package/dist/extensions/ButtonNode.d 2.ts +7 -0
  23. package/dist/extensions/ButtonNode.d.ts 2.map +1 -0
  24. package/dist/extensions/ButtonNode.js 2.map +1 -0
  25. package/dist/extensions/CardNode 2.js +64 -0
  26. package/dist/extensions/CardNode.d 2.ts +7 -0
  27. package/dist/extensions/CardNode.d.ts 2.map +1 -0
  28. package/dist/extensions/CardNode.js 2.map +1 -0
  29. package/dist/extensions/GridCardNode.d 2.ts +7 -0
  30. package/dist/extensions/GridCardNode.d.ts 2.map +1 -0
  31. package/dist/extensions/GridCardNode.js 2.map +1 -0
  32. package/dist/extensions/ImageNode.d.ts 2.map +1 -0
  33. package/dist/extensions/LinkNode.js 2.map +1 -0
  34. package/dist/extensions/SearchExtension.d 2.ts +40 -0
  35. package/dist/extensions/SearchExtension.d.ts 2.map +1 -0
  36. package/dist/extensions/SearchExtension.js 2.map +1 -0
  37. package/dist/extensions/SectionNode 2.js +58 -0
  38. package/dist/extensions/SectionNode.d 2.ts +11 -0
  39. package/dist/extensions/SectionNode.d.ts 2.map +1 -0
  40. package/dist/extensions/SectionNode.js 2.map +1 -0
  41. package/dist/extensions/ToggleNode 2.js +58 -0
  42. package/dist/extensions/ToggleNode.d 2.ts +11 -0
  43. package/dist/extensions/ToggleNode.d.ts 2.map +1 -0
  44. package/dist/extensions/ToggleNode.js 2.map +1 -0
  45. package/dist/index 2.js +128 -0
  46. package/dist/index.d 2.ts +59 -0
  47. package/dist/index.d.ts +5 -0
  48. package/dist/index.d.ts 2.map +1 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +13 -1
  51. package/dist/index.js 2.map +1 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/styles/DocumentHeader.css +294 -0
  54. package/dist/styles/GraphView.css +220 -0
  55. package/package.json +5 -4
  56. package/src/styles/DocumentHeader.css +294 -0
  57. package/src/styles/GraphView.css +220 -0
@@ -0,0 +1,9 @@
1
+ export interface JotxLogoProps {
2
+ size?: number;
3
+ className?: string;
4
+ }
5
+ /**
6
+ * Monochrome jotx logo (theme-invertable): uses currentColor.
7
+ */
8
+ export declare function JotxLogo({ size, className }: JotxLogoProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=JotxLogo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JotxLogo.d.ts","sourceRoot":"","sources":["../../../src/components/Brand/JotxLogo.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,IAAS,EAAE,SAAS,EAAE,EAAE,aAAa,2CAqC/D"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JotxLogo = JotxLogo;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ /**
6
+ * Monochrome jotx logo (theme-invertable): uses currentColor.
7
+ */
8
+ function JotxLogo({ size = 28, className }) {
9
+ return ((0, jsx_runtime_1.jsxs)("svg", { className: className, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 256 256", width: size, height: size, role: "img", "aria-label": "jotx", fill: "none", children: [(0, jsx_runtime_1.jsx)("rect", { x: "36", y: "36", width: "184", height: "184", rx: "44", stroke: "currentColor", strokeWidth: "18" }), (0, jsx_runtime_1.jsx)("text", { x: "128", y: "140", textAnchor: "middle", dominantBaseline: "middle", fill: "currentColor", fontSize: "124", fontWeight: "700", fontStyle: "italic", fontFamily: `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace`, transform: "translate(128 140) skewX(-10) translate(-128 -140)", children: "j" })] }));
10
+ }
11
+ //# sourceMappingURL=JotxLogo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JotxLogo.js","sourceRoot":"","sources":["../../../src/components/Brand/JotxLogo.tsx"],"names":[],"mappings":";;AAUA,4BAqCC;;AAxCD;;GAEG;AACH,SAAgB,QAAQ,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAiB;IAC9D,OAAO,CACL,iCACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAC,4BAA4B,EAClC,OAAO,EAAC,aAAa,EACrB,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,IAAI,EAAC,KAAK,gBACC,MAAM,EACjB,IAAI,EAAC,MAAM,aAEX,iCACE,CAAC,EAAC,IAAI,EACN,CAAC,EAAC,IAAI,EACN,KAAK,EAAC,KAAK,EACX,MAAM,EAAC,KAAK,EACZ,EAAE,EAAC,IAAI,EACP,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,IAAI,GAChB,EACF,iCACE,CAAC,EAAC,KAAK,EACP,CAAC,EAAC,KAAK,EACP,UAAU,EAAC,QAAQ,EACnB,gBAAgB,EAAC,QAAQ,EACzB,IAAI,EAAC,cAAc,EACnB,QAAQ,EAAC,KAAK,EACd,UAAU,EAAC,KAAK,EAChB,SAAS,EAAC,QAAQ,EAClB,UAAU,EAAE,oGAAoG,EAChH,SAAS,EAAC,oDAAoD,kBAGzD,IACH,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Document Header - Always visible, even for empty files
3
+ * Supports custom logo, title editing, export, share, print
4
+ */
5
+ import '../../styles/DocumentHeader.css';
6
+ export interface DocumentHeaderProps {
7
+ documentId: string;
8
+ documentUri?: string;
9
+ documentType: 'page' | 'meeting' | 'tasklist';
10
+ contentType?: string;
11
+ title?: string;
12
+ icon?: string;
13
+ logoUrl?: string;
14
+ onTitleChange?: (title: string) => void;
15
+ onIconChange?: (icon: string) => void;
16
+ onContentTypeChange?: (type: string) => void;
17
+ onOpenGraph?: () => void;
18
+ onCopyHelpFiles?: () => void;
19
+ }
20
+ export declare function DocumentHeader({ documentId, documentUri, documentType, contentType, title, onTitleChange, onContentTypeChange, onOpenGraph, onCopyHelpFiles }: DocumentHeaderProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=DocumentHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentHeader.d.ts","sourceRoot":"","sources":["../../../src/components/DocumentHeader/DocumentHeader.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,iCAAiC,CAAA;AAExC,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;CAC7B;AAiBD,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,KAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,eAAe,EAChB,EAAE,mBAAmB,2CAsJrB"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DocumentHeader = DocumentHeader;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ /**
6
+ * Document Header - Always visible, even for empty files
7
+ * Supports custom logo, title editing, export, share, print
8
+ */
9
+ const react_1 = require("react");
10
+ const lucide_react_1 = require("lucide-react");
11
+ const JotxLogo_1 = require("../Brand/JotxLogo");
12
+ const ViewOptions_1 = require("./ViewOptions");
13
+ const ExportMenu_1 = require("./ExportMenu");
14
+ require("../../styles/DocumentHeader.css");
15
+ const CREATIVE_TYPES = [
16
+ { value: 'page', label: 'Page', icon: lucide_react_1.FileText, group: 'General' },
17
+ { value: 'article', label: 'Article', icon: lucide_react_1.FileText, group: 'General' },
18
+ { value: 'documentation', label: 'Documentation', icon: lucide_react_1.Book, group: 'General' },
19
+ { value: 'report', label: 'Report', icon: lucide_react_1.FileSpreadsheet, group: 'General' },
20
+ { value: 'spec', label: 'Specification', icon: lucide_react_1.FileCode, group: 'Planning' },
21
+ { value: 'dashboard', label: 'Dashboard', icon: lucide_react_1.LayoutDashboard, group: 'Planning' },
22
+ { value: 'roadmap', label: 'Roadmap', icon: lucide_react_1.Flag, group: 'Planning' },
23
+ { value: 'brainstorm', label: 'Brainstorm', icon: lucide_react_1.Lightbulb, group: 'Creative' },
24
+ { value: 'journal', label: 'Journal', icon: lucide_react_1.PenTool, group: 'Creative' },
25
+ { value: 'meeting', label: 'Meeting', icon: lucide_react_1.Users, group: 'Functional' },
26
+ { value: 'tasklist', label: 'Task List', icon: lucide_react_1.CheckSquare, group: 'Functional' },
27
+ { value: 'process', label: 'Process', icon: lucide_react_1.GitBranch, group: 'Process' },
28
+ ];
29
+ function DocumentHeader({ documentId, documentUri, documentType, contentType, title = 'Untitled', onTitleChange, onContentTypeChange, onOpenGraph, onCopyHelpFiles }) {
30
+ const [isEditingTitle, setIsEditingTitle] = (0, react_1.useState)(false);
31
+ const [editedTitle, setEditedTitle] = (0, react_1.useState)(title);
32
+ const [isTypeMenuOpen, setIsTypeMenuOpen] = (0, react_1.useState)(false);
33
+ const titleInputRef = (0, react_1.useRef)(null);
34
+ const menuRef = (0, react_1.useRef)(null);
35
+ (0, react_1.useEffect)(() => {
36
+ setEditedTitle(title);
37
+ }, [title]);
38
+ (0, react_1.useEffect)(() => {
39
+ if (isEditingTitle && titleInputRef.current) {
40
+ titleInputRef.current.focus();
41
+ titleInputRef.current.select();
42
+ }
43
+ }, [isEditingTitle]);
44
+ // Click outside to close menu
45
+ (0, react_1.useEffect)(() => {
46
+ const handleClickOutside = (event) => {
47
+ if (menuRef.current && !menuRef.current.contains(event.target)) {
48
+ setIsTypeMenuOpen(false);
49
+ }
50
+ };
51
+ document.addEventListener('mousedown', handleClickOutside);
52
+ return () => document.removeEventListener('mousedown', handleClickOutside);
53
+ }, []);
54
+ const handleTitleBlur = () => {
55
+ setIsEditingTitle(false);
56
+ if (editedTitle.trim() && editedTitle !== title) {
57
+ onTitleChange?.(editedTitle.trim());
58
+ }
59
+ else {
60
+ setEditedTitle(title);
61
+ }
62
+ };
63
+ const handleTitleKeyDown = (e) => {
64
+ if (e.key === 'Enter') {
65
+ handleTitleBlur();
66
+ }
67
+ else if (e.key === 'Escape') {
68
+ setEditedTitle(title);
69
+ setIsEditingTitle(false);
70
+ }
71
+ };
72
+ // Resolve current active type information
73
+ // If contentType (metadata) is set, use it. Otherwise fallback to documentType.
74
+ const currentTypeValue = contentType || documentType;
75
+ const currentTypeDef = CREATIVE_TYPES.find(t => t.value === currentTypeValue) ||
76
+ CREATIVE_TYPES.find(t => t.value === 'page');
77
+ const Icon = currentTypeDef.icon;
78
+ return ((0, jsx_runtime_1.jsxs)("header", { className: "jotx-header", children: [(0, jsx_runtime_1.jsxs)("div", { className: "jotx-header-left", children: [(0, jsx_runtime_1.jsx)("div", { className: "jotx-header-logo", children: (0, jsx_runtime_1.jsx)(JotxLogo_1.JotxLogo, { className: "jotx-header-logo-svg", size: 28 }) }), (0, jsx_runtime_1.jsxs)("div", { className: "jotx-header-type-container", ref: menuRef, children: [(0, jsx_runtime_1.jsxs)("button", { className: "jotx-header-type-button", onClick: () => setIsTypeMenuOpen(!isTypeMenuOpen), title: "Change Document Type", children: [(0, jsx_runtime_1.jsx)(Icon, { size: 16, className: "jotx-header-type-icon" }), (0, jsx_runtime_1.jsx)("span", { className: "jotx-header-type-label", children: currentTypeDef.label }), (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: 12, className: "jotx-header-type-chevron" })] }), isTypeMenuOpen && ((0, jsx_runtime_1.jsxs)("div", { className: "jotx-header-type-menu", children: [(0, jsx_runtime_1.jsx)("div", { className: "jotx-type-menu-header", children: "Change Type" }), (0, jsx_runtime_1.jsx)("div", { className: "jotx-type-menu-list", children: CREATIVE_TYPES.map((type) => ((0, jsx_runtime_1.jsxs)("button", { className: `jotx-type-menu-item ${currentTypeValue === type.value ? 'active' : ''}`, onClick: () => {
79
+ onContentTypeChange?.(type.value);
80
+ setIsTypeMenuOpen(false);
81
+ }, children: [(0, jsx_runtime_1.jsx)(type.icon, { size: 16 }), (0, jsx_runtime_1.jsx)("span", { children: type.label })] }, type.value))) })] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "jotx-header-title-container", children: isEditingTitle ? ((0, jsx_runtime_1.jsx)("input", { ref: titleInputRef, type: "text", className: "jotx-header-title-input", value: editedTitle, onChange: (e) => setEditedTitle(e.target.value), onBlur: handleTitleBlur, onKeyDown: handleTitleKeyDown, placeholder: "Untitled" })) : ((0, jsx_runtime_1.jsx)("h1", { className: "jotx-header-title", onClick: () => setIsEditingTitle(true), title: "Click to edit title", children: title })) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "jotx-header-right", children: [(0, jsx_runtime_1.jsx)(ExportMenu_1.ExportMenu, { documentId: documentId, documentTitle: title }), onOpenGraph && ((0, jsx_runtime_1.jsx)("button", { className: "jotx-header-graph-btn", onClick: onOpenGraph, title: "Open Knowledge Graph", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Network, { size: 18 }) })), onCopyHelpFiles && ((0, jsx_runtime_1.jsx)("button", { className: "jotx-header-help-btn", onClick: onCopyHelpFiles, title: "Copy Help Files to Workspace", children: (0, jsx_runtime_1.jsx)(lucide_react_1.HelpCircle, { size: 18 }) })), (0, jsx_runtime_1.jsx)(ViewOptions_1.ViewOptions, {})] })] }));
82
+ }
83
+ //# sourceMappingURL=DocumentHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentHeader.js","sourceRoot":"","sources":["../../../src/components/DocumentHeader/DocumentHeader.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Export Menu - Web Browser Version
3
+ * Download as Markdown, PDF (via browser-native APIs)
4
+ */
5
+ import './ExportMenu.css';
6
+ export interface ExportMenuProps {
7
+ documentId: string;
8
+ documentTitle?: string;
9
+ }
10
+ export declare function ExportMenu({ documentId, documentTitle }: ExportMenuProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=ExportMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportMenu.d.ts","sourceRoot":"","sources":["../../../src/components/DocumentHeader/ExportMenu.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,kBAAkB,CAAA;AAEzB,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,UAAU,CAAC,EAAE,UAAU,EAAE,aAA0B,EAAE,EAAE,eAAe,2CAgNrF"}
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ExportMenu = ExportMenu;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ /**
39
+ * Export Menu - Web Browser Version
40
+ * Download as Markdown, PDF (via browser-native APIs)
41
+ */
42
+ const react_1 = require("react");
43
+ const lucide_react_1 = require("lucide-react");
44
+ require("./ExportMenu.css");
45
+ function ExportMenu({ documentId, documentTitle = 'Untitled' }) {
46
+ const [isOpen, setIsOpen] = (0, react_1.useState)(false);
47
+ const [isExporting, setIsExporting] = (0, react_1.useState)(false);
48
+ const menuRef = (0, react_1.useRef)(null);
49
+ (0, react_1.useEffect)(() => {
50
+ const handleClickOutside = (e) => {
51
+ if (menuRef.current && !menuRef.current.contains(e.target)) {
52
+ setIsOpen(false);
53
+ }
54
+ };
55
+ if (isOpen) {
56
+ document.addEventListener('mousedown', handleClickOutside);
57
+ return () => document.removeEventListener('mousedown', handleClickOutside);
58
+ }
59
+ }, [isOpen]);
60
+ /**
61
+ * Download a file via browser-native API
62
+ */
63
+ const downloadFile = (content, filename, mimeType) => {
64
+ const blob = typeof content === 'string' ? new Blob([content], { type: mimeType }) : content;
65
+ const url = URL.createObjectURL(blob);
66
+ const a = document.createElement('a');
67
+ a.href = url;
68
+ a.download = filename;
69
+ document.body.appendChild(a);
70
+ a.click();
71
+ document.body.removeChild(a);
72
+ URL.revokeObjectURL(url);
73
+ };
74
+ /**
75
+ * Export to Markdown
76
+ */
77
+ const exportMarkdown = async () => {
78
+ try {
79
+ setIsExporting(true);
80
+ setIsOpen(false);
81
+ const prosemirror = document.querySelector('.ProseMirror');
82
+ if (!prosemirror) {
83
+ throw new Error('Editor not found');
84
+ }
85
+ // Simple HTML to Markdown conversion
86
+ const html = prosemirror.innerHTML;
87
+ const markdown = htmlToMarkdown(html);
88
+ const filename = `${documentTitle.replace(/[^a-z0-9]/gi, '_')}.md`;
89
+ downloadFile(markdown, filename, 'text/markdown');
90
+ console.log('✅ Markdown exported:', filename);
91
+ }
92
+ catch (error) {
93
+ console.error('Markdown export failed:', error);
94
+ }
95
+ finally {
96
+ setIsExporting(false);
97
+ }
98
+ };
99
+ /**
100
+ * Export to PDF using jsPDF + html2canvas
101
+ */
102
+ const exportPDF = async () => {
103
+ try {
104
+ setIsExporting(true);
105
+ setIsOpen(false);
106
+ // Dynamically import jsPDF and html2canvas
107
+ const { default: jsPDF } = await Promise.resolve().then(() => __importStar(require('jspdf')));
108
+ const html2canvas = (await Promise.resolve().then(() => __importStar(require('html2canvas')))).default;
109
+ // Find the ProseMirror element
110
+ const element = document.querySelector('.ProseMirror');
111
+ if (!element) {
112
+ throw new Error('Editor not found');
113
+ }
114
+ console.log('🔄 Generating PDF using jsPDF...');
115
+ // Clone content for PDF capture without affecting the real DOM
116
+ const offscreenContainer = document.createElement('div');
117
+ offscreenContainer.style.cssText = `
118
+ position: absolute;
119
+ left: -9999px;
120
+ top: 0;
121
+ width: 800px;
122
+ height: auto;
123
+ overflow: visible;
124
+ background: white;
125
+ padding: 40px;
126
+ `;
127
+ const clone = element.cloneNode(true);
128
+ clone.style.cssText = `
129
+ height: auto !important;
130
+ max-height: none !important;
131
+ overflow: visible !important;
132
+ min-height: 0 !important;
133
+ `;
134
+ offscreenContainer.appendChild(clone);
135
+ document.body.appendChild(offscreenContainer);
136
+ // Wait for reflow
137
+ await new Promise(r => setTimeout(r, 200));
138
+ const fullHeight = clone.scrollHeight || clone.offsetHeight;
139
+ // Create canvas from the clone
140
+ const canvas = await html2canvas(clone, {
141
+ scale: 2,
142
+ useCORS: true,
143
+ logging: false,
144
+ backgroundColor: '#ffffff',
145
+ height: fullHeight,
146
+ windowHeight: fullHeight + 100,
147
+ scrollY: 0,
148
+ scrollX: 0
149
+ });
150
+ // Remove offscreen container
151
+ document.body.removeChild(offscreenContainer);
152
+ // Create PDF
153
+ const imgData = canvas.toDataURL('image/png');
154
+ const pdf = new jsPDF({
155
+ orientation: 'portrait',
156
+ unit: 'mm',
157
+ format: 'a4'
158
+ });
159
+ const pdfWidth = pdf.internal.pageSize.getWidth();
160
+ const pdfHeight = pdf.internal.pageSize.getHeight();
161
+ const imgWidth = pdfWidth - 20; // 10mm margin on each side
162
+ const imgHeight = (canvas.height * imgWidth) / canvas.width;
163
+ const xOffset = 10; // 10mm left margin
164
+ let heightLeft = imgHeight;
165
+ let position = 10; // Start with 10mm top margin
166
+ // Add first page
167
+ pdf.addImage(imgData, 'PNG', xOffset, position, imgWidth, imgHeight);
168
+ heightLeft -= (pdfHeight - 20);
169
+ // Add additional pages if needed
170
+ while (heightLeft > 0) {
171
+ pdf.addPage();
172
+ position = -(imgHeight - heightLeft) + 10;
173
+ pdf.addImage(imgData, 'PNG', xOffset, position, imgWidth, imgHeight);
174
+ heightLeft -= (pdfHeight - 20);
175
+ }
176
+ // Download PDF
177
+ const pdfBlob = pdf.output('blob');
178
+ const filename = `${documentTitle.replace(/[^a-z0-9]/gi, '_')}.pdf`;
179
+ downloadFile(pdfBlob, filename, 'application/pdf');
180
+ console.log('✅ PDF exported:', filename);
181
+ }
182
+ catch (error) {
183
+ console.error('PDF export failed:', error);
184
+ }
185
+ finally {
186
+ setIsExporting(false);
187
+ }
188
+ };
189
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "jotx-export-menu", ref: menuRef, children: [(0, jsx_runtime_1.jsx)("button", { className: "jotx-header-button", onClick: () => setIsOpen(!isOpen), title: "Download document", disabled: isExporting, children: isExporting ? ((0, jsx_runtime_1.jsx)("span", { style: { fontSize: '12px' }, children: "Exporting..." })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.Download, { size: 16 })) }), isOpen && !isExporting && ((0, jsx_runtime_1.jsxs)("div", { className: "jotx-export-dropdown", children: [(0, jsx_runtime_1.jsx)("div", { className: "jotx-export-header", children: "Download as" }), (0, jsx_runtime_1.jsxs)("button", { className: "jotx-export-item", onClick: exportPDF, title: "Export to PDF", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.FileDown, { size: 16 }), (0, jsx_runtime_1.jsx)("span", { children: "PDF Document" }), (0, jsx_runtime_1.jsx)("span", { className: "jotx-export-badge", children: ".pdf" })] }), (0, jsx_runtime_1.jsxs)("button", { className: "jotx-export-item", onClick: exportMarkdown, title: "Export to Markdown", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.FileText, { size: 16 }), (0, jsx_runtime_1.jsx)("span", { children: "Markdown" }), (0, jsx_runtime_1.jsx)("span", { className: "jotx-export-badge", children: ".md" })] })] }))] }));
190
+ }
191
+ /**
192
+ * Simple HTML to Markdown converter
193
+ */
194
+ function htmlToMarkdown(html) {
195
+ let md = html;
196
+ // Headers
197
+ md = md.replace(/<h1[^>]*>(.*?)<\/h1>/gi, '# $1\n\n');
198
+ md = md.replace(/<h2[^>]*>(.*?)<\/h2>/gi, '## $1\n\n');
199
+ md = md.replace(/<h3[^>]*>(.*?)<\/h3>/gi, '### $1\n\n');
200
+ md = md.replace(/<h4[^>]*>(.*?)<\/h4>/gi, '#### $1\n\n');
201
+ md = md.replace(/<h5[^>]*>(.*?)<\/h5>/gi, '##### $1\n\n');
202
+ md = md.replace(/<h6[^>]*>(.*?)<\/h6>/gi, '###### $1\n\n');
203
+ // Bold and italic
204
+ md = md.replace(/<strong[^>]*>(.*?)<\/strong>/gi, '**$1**');
205
+ md = md.replace(/<b[^>]*>(.*?)<\/b>/gi, '**$1**');
206
+ md = md.replace(/<em[^>]*>(.*?)<\/em>/gi, '*$1*');
207
+ md = md.replace(/<i[^>]*>(.*?)<\/i>/gi, '*$1*');
208
+ // Code
209
+ md = md.replace(/<code[^>]*>(.*?)<\/code>/gi, '`$1`');
210
+ md = md.replace(/<pre[^>]*><code[^>]*>(.*?)<\/code><\/pre>/gis, '```\n$1\n```\n\n');
211
+ // Links
212
+ md = md.replace(/<a[^>]*href="([^"]*)"[^>]*>(.*?)<\/a>/gi, '[$2]($1)');
213
+ // Images
214
+ md = md.replace(/<img[^>]*src="([^"]*)"[^>]*alt="([^"]*)"[^>]*>/gi, '![$2]($1)');
215
+ md = md.replace(/<img[^>]*src="([^"]*)"[^>]*>/gi, '![]($1)');
216
+ // Lists
217
+ md = md.replace(/<ul[^>]*>/gi, '\n');
218
+ md = md.replace(/<\/ul>/gi, '\n');
219
+ md = md.replace(/<ol[^>]*>/gi, '\n');
220
+ md = md.replace(/<\/ol>/gi, '\n');
221
+ md = md.replace(/<li[^>]*>(.*?)<\/li>/gi, '- $1\n');
222
+ // Paragraphs
223
+ md = md.replace(/<p[^>]*>(.*?)<\/p>/gis, '$1\n\n');
224
+ // Line breaks
225
+ md = md.replace(/<br\s*\/?>/gi, '\n');
226
+ // Horizontal rules
227
+ md = md.replace(/<hr[^>]*>/gi, '\n---\n\n');
228
+ // Blockquotes
229
+ md = md.replace(/<blockquote[^>]*>(.*?)<\/blockquote>/gis, '> $1\n\n');
230
+ // Remove remaining HTML tags
231
+ md = md.replace(/<[^>]+>/g, '');
232
+ // Decode HTML entities
233
+ md = md.replace(/&nbsp;/g, ' ');
234
+ md = md.replace(/&amp;/g, '&');
235
+ md = md.replace(/&lt;/g, '<');
236
+ md = md.replace(/&gt;/g, '>');
237
+ md = md.replace(/&quot;/g, '"');
238
+ md = md.replace(/&#39;/g, "'");
239
+ // Clean up extra whitespace
240
+ md = md.replace(/\n{3,}/g, '\n\n');
241
+ md = md.trim();
242
+ return md;
243
+ }
244
+ //# sourceMappingURL=ExportMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportMenu.js","sourceRoot":"","sources":["../../../src/components/DocumentHeader/ExportMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * View Options - Font size, width, etc.
3
+ */
4
+ import './ViewOptions.css';
5
+ export declare function ViewOptions(): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=ViewOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewOptions.d.ts","sourceRoot":"","sources":["../../../src/components/DocumentHeader/ViewOptions.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,mBAAmB,CAAA;AAK1B,wBAAgB,WAAW,4CAyH1B"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ViewOptions = ViewOptions;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ /**
6
+ * View Options - Font size, width, etc.
7
+ */
8
+ const react_1 = require("react");
9
+ const lucide_react_1 = require("lucide-react");
10
+ require("./ViewOptions.css");
11
+ const LS_FONT_SIZE = 'jotx_view_fontSize';
12
+ const LS_MAX_WIDTH = 'jotx_view_maxWidth';
13
+ function ViewOptions() {
14
+ const [isOpen, setIsOpen] = (0, react_1.useState)(false);
15
+ const [fontSize, setFontSize] = (0, react_1.useState)(() => {
16
+ const raw = localStorage.getItem(LS_FONT_SIZE);
17
+ const n = raw ? Number(raw) : 16;
18
+ return Number.isFinite(n) ? n : 16;
19
+ });
20
+ const [maxWidth, setMaxWidth] = (0, react_1.useState)(() => {
21
+ const raw = localStorage.getItem(LS_MAX_WIDTH);
22
+ const n = raw ? Number(raw) : 900;
23
+ return Number.isFinite(n) ? n : 900;
24
+ });
25
+ const menuRef = (0, react_1.useRef)(null);
26
+ (0, react_1.useEffect)(() => {
27
+ const handleClickOutside = (event) => {
28
+ if (menuRef.current && !menuRef.current.contains(event.target)) {
29
+ setIsOpen(false);
30
+ }
31
+ };
32
+ if (isOpen) {
33
+ document.addEventListener('mousedown', handleClickOutside);
34
+ }
35
+ return () => {
36
+ document.removeEventListener('mousedown', handleClickOutside);
37
+ };
38
+ }, [isOpen]);
39
+ (0, react_1.useEffect)(() => {
40
+ // web-theme.css defines these vars with `!important` to force dark mode.
41
+ // So we must set them with important priority too, otherwise slider changes have no effect.
42
+ document.documentElement.style.setProperty('--jotx-editor-fontSize', `${fontSize}px`, 'important');
43
+ localStorage.setItem(LS_FONT_SIZE, String(fontSize));
44
+ // Bulletproof fallback: apply directly to editor DOM (covers any CSS override/caching issues).
45
+ const size = `${fontSize}px`;
46
+ document.querySelectorAll('.jotx-editor-content, .ProseMirror').forEach((el) => {
47
+ el.style.setProperty('font-size', size, 'important');
48
+ });
49
+ }, [fontSize]);
50
+ (0, react_1.useEffect)(() => {
51
+ document.documentElement.style.setProperty('--jotx-editor-maxWidth', `${maxWidth}px`, 'important');
52
+ localStorage.setItem(LS_MAX_WIDTH, String(maxWidth));
53
+ // Bulletproof fallback: apply directly to layout containers.
54
+ // We set BOTH width and max-width so flexbox "stretch" cannot hide the effect.
55
+ const w = `${maxWidth}px`;
56
+ const wMin = `min(100%, ${w})`;
57
+ document.querySelectorAll('.jotx-editor-wrapper, .jotx-editor-container, .jotx-header-content').forEach((el) => {
58
+ el.style.setProperty('width', wMin, 'important');
59
+ el.style.setProperty('max-width', w, 'important');
60
+ el.style.setProperty('margin-left', 'auto', 'important');
61
+ el.style.setProperty('margin-right', 'auto', 'important');
62
+ // Prevent a flex parent from stretching this item in a way that masks width changes.
63
+ el.style.setProperty('flex', '0 1 auto', 'important');
64
+ });
65
+ }, [maxWidth]);
66
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "jotx-view-options", ref: menuRef, children: [(0, jsx_runtime_1.jsx)("button", { className: "jotx-header-button", onClick: () => setIsOpen(!isOpen), title: "View Options", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Settings, { size: 16 }) }), isOpen && ((0, jsx_runtime_1.jsxs)("div", { className: "jotx-view-dropdown", children: [(0, jsx_runtime_1.jsx)("div", { className: "jotx-view-header", children: "View Options" }), (0, jsx_runtime_1.jsxs)("div", { className: "jotx-view-section", children: [(0, jsx_runtime_1.jsxs)("label", { className: "jotx-view-label", children: ["Font Size: ", fontSize, "px"] }), (0, jsx_runtime_1.jsx)("input", { type: "range", min: "12", max: "24", value: fontSize, onChange: (e) => setFontSize(Number(e.target.value)), className: "jotx-view-slider" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "jotx-view-section", children: [(0, jsx_runtime_1.jsxs)("label", { className: "jotx-view-label", children: ["Max Width: ", maxWidth, "px"] }), (0, jsx_runtime_1.jsx)("input", { type: "range", min: "600", max: "1600", step: "50", value: maxWidth, onChange: (e) => setMaxWidth(Number(e.target.value)), className: "jotx-view-slider" })] }), (0, jsx_runtime_1.jsx)("div", { className: "jotx-view-divider" }), (0, jsx_runtime_1.jsx)("button", { className: "jotx-view-reset", onClick: () => {
67
+ setFontSize(16);
68
+ setMaxWidth(900);
69
+ localStorage.removeItem(LS_FONT_SIZE);
70
+ localStorage.removeItem(LS_MAX_WIDTH);
71
+ }, children: "Reset to Defaults" })] }))] }));
72
+ }
73
+ //# sourceMappingURL=ViewOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewOptions.js","sourceRoot":"","sources":["../../../src/components/DocumentHeader/ViewOptions.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * GraphView - D3.js Force-Directed Knowledge Graph Visualization
3
+ * Browser-based component for web application
4
+ */
5
+ import '../../styles/GraphView.css';
6
+ export interface GraphData {
7
+ nodes: Array<{
8
+ id: string;
9
+ label: string;
10
+ type: string;
11
+ nodeKind: string;
12
+ path: string;
13
+ metadata?: Record<string, any>;
14
+ }>;
15
+ edges: Array<{
16
+ source: string;
17
+ target: string;
18
+ type: string;
19
+ }>;
20
+ }
21
+ export interface GraphViewProps {
22
+ isOpen: boolean;
23
+ onClose: () => void;
24
+ focusedDocumentPath?: string;
25
+ graphData: GraphData;
26
+ stats?: {
27
+ documents: number;
28
+ blocks: number;
29
+ edges: number;
30
+ };
31
+ }
32
+ export declare function GraphView({ isOpen, onClose, focusedDocumentPath, graphData, stats: propStats }: GraphViewProps): import("react/jsx-runtime").JSX.Element;
33
+ //# sourceMappingURL=GraphView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphView.d.ts","sourceRoot":"","sources":["../../../src/components/GraphView/GraphView.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,4BAA4B,CAAA;AAGnC,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,KAAK,CAAC;QACT,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KACjC,CAAC,CAAA;IACF,KAAK,EAAE,KAAK,CAAC;QACT,MAAM,EAAE,MAAM,CAAA;QACd,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;KACf,CAAC,CAAA;CACL;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/D;AAyCD,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,2CAkR9G"}