@jotx-labs/editor 2.4.130
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/bridge/BridgeContext.d.ts +14 -0
- package/dist/bridge/BridgeContext.d.ts.map +1 -0
- package/dist/bridge/BridgeContext.js +20 -0
- package/dist/bridge/BridgeContext.js.map +1 -0
- package/dist/bridge/bridge-utils.d.ts +24 -0
- package/dist/bridge/bridge-utils.d.ts.map +1 -0
- package/dist/bridge/bridge-utils.js +77 -0
- package/dist/bridge/bridge-utils.js.map +1 -0
- package/dist/bridge/types.d.ts +34 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +27 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/bridge/vscode-api.d.ts +13 -0
- package/dist/bridge/vscode-api.d.ts.map +1 -0
- package/dist/bridge/vscode-api.js +27 -0
- package/dist/bridge/vscode-api.js.map +1 -0
- package/dist/components/AttachBlockNodeView.d.ts +2 -0
- package/dist/components/AttachBlockNodeView.d.ts.map +1 -0
- package/dist/components/AttachBlockNodeView.js +37 -0
- package/dist/components/AttachBlockNodeView.js.map +1 -0
- package/dist/components/BlockMenu.d.ts +11 -0
- package/dist/components/BlockMenu.d.ts.map +1 -0
- package/dist/components/BlockMenu.js +344 -0
- package/dist/components/BlockMenu.js.map +1 -0
- package/dist/components/ButtonNodeView.d.ts +17 -0
- package/dist/components/ButtonNodeView.d.ts.map +1 -0
- package/dist/components/ButtonNodeView.js +55 -0
- package/dist/components/ButtonNodeView.js.map +1 -0
- package/dist/components/CardNodeView.d.ts +18 -0
- package/dist/components/CardNodeView.d.ts.map +1 -0
- package/dist/components/CardNodeView.js +46 -0
- package/dist/components/CardNodeView.js.map +1 -0
- package/dist/components/ChartNodeView.d.ts +4 -0
- package/dist/components/ChartNodeView.d.ts.map +1 -0
- package/dist/components/ChartNodeView.js +247 -0
- package/dist/components/ChartNodeView.js.map +1 -0
- package/dist/components/CodeBlockNodeView.d.ts +4 -0
- package/dist/components/CodeBlockNodeView.d.ts.map +1 -0
- package/dist/components/CodeBlockNodeView.js +105 -0
- package/dist/components/CodeBlockNodeView.js.map +1 -0
- package/dist/components/CodeReferenceNodeView.d.ts +4 -0
- package/dist/components/CodeReferenceNodeView.d.ts.map +1 -0
- package/dist/components/CodeReferenceNodeView.js +71 -0
- package/dist/components/CodeReferenceNodeView.js.map +1 -0
- package/dist/components/DateTimeNodeView.d.ts +3 -0
- package/dist/components/DateTimeNodeView.d.ts.map +1 -0
- package/dist/components/DateTimeNodeView.js +55 -0
- package/dist/components/DateTimeNodeView.js.map +1 -0
- package/dist/components/EditorRibbon.d.ts +13 -0
- package/dist/components/EditorRibbon.d.ts.map +1 -0
- package/dist/components/EditorRibbon.js +12 -0
- package/dist/components/EditorRibbon.js.map +1 -0
- package/dist/components/FloatImageBlockNodeView.d.ts +6 -0
- package/dist/components/FloatImageBlockNodeView.d.ts.map +1 -0
- package/dist/components/FloatImageBlockNodeView.js +96 -0
- package/dist/components/FloatImageBlockNodeView.js.map +1 -0
- package/dist/components/GridCardNodeView.d.ts +13 -0
- package/dist/components/GridCardNodeView.d.ts.map +1 -0
- package/dist/components/GridCardNodeView.js +31 -0
- package/dist/components/GridCardNodeView.js.map +1 -0
- package/dist/components/ImageBlockNodeView.d.ts +7 -0
- package/dist/components/ImageBlockNodeView.d.ts.map +1 -0
- package/dist/components/ImageBlockNodeView.js +132 -0
- package/dist/components/ImageBlockNodeView.js.map +1 -0
- package/dist/components/ImageToolbar.d.ts +6 -0
- package/dist/components/ImageToolbar.d.ts.map +1 -0
- package/dist/components/ImageToolbar.js +67 -0
- package/dist/components/ImageToolbar.js.map +1 -0
- package/dist/components/JotxEditor.d.ts +17 -0
- package/dist/components/JotxEditor.d.ts.map +1 -0
- package/dist/components/JotxEditor.js +1121 -0
- package/dist/components/JotxEditor.js.map +1 -0
- package/dist/components/JotxLinkNodeView.d.ts +4 -0
- package/dist/components/JotxLinkNodeView.d.ts.map +1 -0
- package/dist/components/JotxLinkNodeView.js +123 -0
- package/dist/components/JotxLinkNodeView.js.map +1 -0
- package/dist/components/LinkDialog.d.ts +14 -0
- package/dist/components/LinkDialog.d.ts.map +1 -0
- package/dist/components/LinkDialog.js +33 -0
- package/dist/components/LinkDialog.js.map +1 -0
- package/dist/components/MathNodeView.d.ts +3 -0
- package/dist/components/MathNodeView.d.ts.map +1 -0
- package/dist/components/MathNodeView.js +67 -0
- package/dist/components/MathNodeView.js.map +1 -0
- package/dist/components/MermaidNodeView.d.ts +4 -0
- package/dist/components/MermaidNodeView.d.ts.map +1 -0
- package/dist/components/MermaidNodeView.js +442 -0
- package/dist/components/MermaidNodeView.js.map +1 -0
- package/dist/components/NodePickerDialog.d.ts +12 -0
- package/dist/components/NodePickerDialog.d.ts.map +1 -0
- package/dist/components/NodePickerDialog.js +90 -0
- package/dist/components/NodePickerDialog.js.map +1 -0
- package/dist/components/ReadonlyBlockRenderer.d.ts +13 -0
- package/dist/components/ReadonlyBlockRenderer.d.ts.map +1 -0
- package/dist/components/ReadonlyBlockRenderer.js +78 -0
- package/dist/components/ReadonlyBlockRenderer.js.map +1 -0
- package/dist/components/ReadonlyMermaid.d.ts +10 -0
- package/dist/components/ReadonlyMermaid.d.ts.map +1 -0
- package/dist/components/ReadonlyMermaid.js +70 -0
- package/dist/components/ReadonlyMermaid.js.map +1 -0
- package/dist/components/SearchBar.d.ts +16 -0
- package/dist/components/SearchBar.d.ts.map +1 -0
- package/dist/components/SearchBar.js +52 -0
- package/dist/components/SearchBar.js.map +1 -0
- package/dist/components/SectionNodeView.d.ts +4 -0
- package/dist/components/SectionNodeView.d.ts.map +1 -0
- package/dist/components/SectionNodeView.js +39 -0
- package/dist/components/SectionNodeView.js.map +1 -0
- package/dist/components/SlashMenu.d.ts +21 -0
- package/dist/components/SlashMenu.d.ts.map +1 -0
- package/dist/components/SlashMenu.js +356 -0
- package/dist/components/SlashMenu.js.map +1 -0
- package/dist/components/TableToolbar.d.ts +10 -0
- package/dist/components/TableToolbar.d.ts.map +1 -0
- package/dist/components/TableToolbar.js +189 -0
- package/dist/components/TableToolbar.js.map +1 -0
- package/dist/components/ToggleNodeView.d.ts +4 -0
- package/dist/components/ToggleNodeView.d.ts.map +1 -0
- package/dist/components/ToggleNodeView.js +39 -0
- package/dist/components/ToggleNodeView.js.map +1 -0
- package/dist/components/UrlInputDialog.d.ts +13 -0
- package/dist/components/UrlInputDialog.d.ts.map +1 -0
- package/dist/components/UrlInputDialog.js +39 -0
- package/dist/components/UrlInputDialog.js.map +1 -0
- package/dist/components/VideoBlockNodeView.d.ts +12 -0
- package/dist/components/VideoBlockNodeView.d.ts.map +1 -0
- package/dist/components/VideoBlockNodeView.js +97 -0
- package/dist/components/VideoBlockNodeView.js.map +1 -0
- package/dist/contexts/NodeManagerContext.d.ts +34 -0
- package/dist/contexts/NodeManagerContext.d.ts.map +1 -0
- package/dist/contexts/NodeManagerContext.js +31 -0
- package/dist/contexts/NodeManagerContext.js.map +1 -0
- package/dist/extensions/AttachNode.d.ts +7 -0
- package/dist/extensions/AttachNode.d.ts.map +1 -0
- package/dist/extensions/AttachNode.js +50 -0
- package/dist/extensions/AttachNode.js.map +1 -0
- package/dist/extensions/BlockOpsExtension.d.ts +17 -0
- package/dist/extensions/BlockOpsExtension.d.ts.map +1 -0
- package/dist/extensions/BlockOpsExtension.js +248 -0
- package/dist/extensions/BlockOpsExtension.js.map +1 -0
- package/dist/extensions/ButtonNode.d.ts +7 -0
- package/dist/extensions/ButtonNode.d.ts.map +1 -0
- package/dist/extensions/ButtonNode.js +59 -0
- package/dist/extensions/ButtonNode.js.map +1 -0
- package/dist/extensions/CalloutActionsExtension.d.ts +3 -0
- package/dist/extensions/CalloutActionsExtension.d.ts.map +1 -0
- package/dist/extensions/CalloutActionsExtension.js +41 -0
- package/dist/extensions/CalloutActionsExtension.js.map +1 -0
- package/dist/extensions/CalloutNode.d.ts +7 -0
- package/dist/extensions/CalloutNode.d.ts.map +1 -0
- package/dist/extensions/CalloutNode.js +48 -0
- package/dist/extensions/CalloutNode.js.map +1 -0
- package/dist/extensions/CardNode.d.ts +7 -0
- package/dist/extensions/CardNode.d.ts.map +1 -0
- package/dist/extensions/CardNode.js +64 -0
- package/dist/extensions/CardNode.js.map +1 -0
- package/dist/extensions/ChartNode.d.ts +3 -0
- package/dist/extensions/ChartNode.d.ts.map +1 -0
- package/dist/extensions/ChartNode.js +60 -0
- package/dist/extensions/ChartNode.js.map +1 -0
- package/dist/extensions/CodeBlockNode.d.ts +7 -0
- package/dist/extensions/CodeBlockNode.d.ts.map +1 -0
- package/dist/extensions/CodeBlockNode.js +57 -0
- package/dist/extensions/CodeBlockNode.js.map +1 -0
- package/dist/extensions/CodeReferenceNode.d.ts +3 -0
- package/dist/extensions/CodeReferenceNode.d.ts.map +1 -0
- package/dist/extensions/CodeReferenceNode.js +46 -0
- package/dist/extensions/CodeReferenceNode.js.map +1 -0
- package/dist/extensions/DateTimeNode.d.ts +3 -0
- package/dist/extensions/DateTimeNode.d.ts.map +1 -0
- package/dist/extensions/DateTimeNode.js +43 -0
- package/dist/extensions/DateTimeNode.js.map +1 -0
- package/dist/extensions/FloatImageBlockNode.d.ts +7 -0
- package/dist/extensions/FloatImageBlockNode.d.ts.map +1 -0
- package/dist/extensions/FloatImageBlockNode.js +73 -0
- package/dist/extensions/FloatImageBlockNode.js.map +1 -0
- package/dist/extensions/GridCardNode.d.ts +7 -0
- package/dist/extensions/GridCardNode.d.ts.map +1 -0
- package/dist/extensions/GridCardNode.js +56 -0
- package/dist/extensions/GridCardNode.js.map +1 -0
- package/dist/extensions/ImageBlockNode.d.ts +7 -0
- package/dist/extensions/ImageBlockNode.d.ts.map +1 -0
- package/dist/extensions/ImageBlockNode.js +76 -0
- package/dist/extensions/ImageBlockNode.js.map +1 -0
- package/dist/extensions/ImageNode.d.ts +10 -0
- package/dist/extensions/ImageNode.d.ts.map +1 -0
- package/dist/extensions/ImageNode.js +67 -0
- package/dist/extensions/ImageNode.js.map +1 -0
- package/dist/extensions/JotxLinkNode.d.ts +3 -0
- package/dist/extensions/JotxLinkNode.d.ts.map +1 -0
- package/dist/extensions/JotxLinkNode.js +43 -0
- package/dist/extensions/JotxLinkNode.js.map +1 -0
- package/dist/extensions/JotxTable.d.ts +9 -0
- package/dist/extensions/JotxTable.d.ts.map +1 -0
- package/dist/extensions/JotxTable.js +40 -0
- package/dist/extensions/JotxTable.js.map +1 -0
- package/dist/extensions/LinkNode.d.ts +7 -0
- package/dist/extensions/LinkNode.d.ts.map +1 -0
- package/dist/extensions/LinkNode.js +54 -0
- package/dist/extensions/LinkNode.js.map +1 -0
- package/dist/extensions/MathNode.d.ts +3 -0
- package/dist/extensions/MathNode.d.ts.map +1 -0
- package/dist/extensions/MathNode.js +61 -0
- package/dist/extensions/MathNode.js.map +1 -0
- package/dist/extensions/MermaidNode.d.ts +3 -0
- package/dist/extensions/MermaidNode.d.ts.map +1 -0
- package/dist/extensions/MermaidNode.js +59 -0
- package/dist/extensions/MermaidNode.js.map +1 -0
- package/dist/extensions/SearchExtension.d.ts +40 -0
- package/dist/extensions/SearchExtension.d.ts.map +1 -0
- package/dist/extensions/SearchExtension.js +186 -0
- package/dist/extensions/SearchExtension.js.map +1 -0
- package/dist/extensions/SectionNode.d.ts +11 -0
- package/dist/extensions/SectionNode.d.ts.map +1 -0
- package/dist/extensions/SectionNode.js +58 -0
- package/dist/extensions/SectionNode.js.map +1 -0
- package/dist/extensions/SlashMenuExtension.d.ts +17 -0
- package/dist/extensions/SlashMenuExtension.d.ts.map +1 -0
- package/dist/extensions/SlashMenuExtension.js +146 -0
- package/dist/extensions/SlashMenuExtension.js.map +1 -0
- package/dist/extensions/SpellCheckExtension.d.ts +14 -0
- package/dist/extensions/SpellCheckExtension.d.ts.map +1 -0
- package/dist/extensions/SpellCheckExtension.js +278 -0
- package/dist/extensions/SpellCheckExtension.js.map +1 -0
- package/dist/extensions/TableFilterExtension.d.ts +12 -0
- package/dist/extensions/TableFilterExtension.d.ts.map +1 -0
- package/dist/extensions/TableFilterExtension.js +75 -0
- package/dist/extensions/TableFilterExtension.js.map +1 -0
- package/dist/extensions/ToggleNode.d.ts +11 -0
- package/dist/extensions/ToggleNode.d.ts.map +1 -0
- package/dist/extensions/ToggleNode.js +58 -0
- package/dist/extensions/ToggleNode.js.map +1 -0
- package/dist/extensions/VideoBlockNode.d.ts +7 -0
- package/dist/extensions/VideoBlockNode.d.ts.map +1 -0
- package/dist/extensions/VideoBlockNode.js +95 -0
- package/dist/extensions/VideoBlockNode.js.map +1 -0
- package/dist/extensions/formatting.d.ts +2 -0
- package/dist/extensions/formatting.d.ts.map +1 -0
- package/dist/extensions/formatting.js +10 -0
- package/dist/extensions/formatting.js.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +132 -0
- package/dist/index.js.map +1 -0
- package/dist/services/ImageStorage.d.ts +38 -0
- package/dist/services/ImageStorage.d.ts.map +1 -0
- package/dist/services/ImageStorage.js +32 -0
- package/dist/services/ImageStorage.js.map +1 -0
- package/dist/services/SpellCheckService 2.d.ts +50 -0
- package/dist/services/SpellCheckService 2.d.ts.map +1 -0
- package/dist/services/SpellCheckService 2.js +131 -0
- package/dist/services/SpellCheckService 2.js.map +1 -0
- package/dist/services/SpellCheckService.d.ts +50 -0
- package/dist/services/SpellCheckService.d.ts.map +1 -0
- package/dist/services/SpellCheckService.js +131 -0
- package/dist/services/SpellCheckService.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +25 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChartNodeView = ChartNodeView;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const react_2 = require("@tiptap/react");
|
|
7
|
+
const chart_js_1 = require("chart.js");
|
|
8
|
+
const lucide_react_1 = require("lucide-react");
|
|
9
|
+
require("./ChartNodeView.css");
|
|
10
|
+
chart_js_1.Chart.register(...chart_js_1.registerables);
|
|
11
|
+
function getCssVar(name, fallback) {
|
|
12
|
+
try {
|
|
13
|
+
const cs = getComputedStyle(document.documentElement);
|
|
14
|
+
return (cs.getPropertyValue(name)?.trim() || fallback).toString();
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return fallback;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function hexToRgba(hex, alpha) {
|
|
21
|
+
const h = (hex || '').trim().replace('#', '');
|
|
22
|
+
if (h.length !== 6)
|
|
23
|
+
return `rgba(99, 102, 241, ${alpha})`;
|
|
24
|
+
const r = parseInt(h.slice(0, 2), 16);
|
|
25
|
+
const g = parseInt(h.slice(2, 4), 16);
|
|
26
|
+
const b = parseInt(h.slice(4, 6), 16);
|
|
27
|
+
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
|
|
28
|
+
}
|
|
29
|
+
function computeSuggestedMax(data) {
|
|
30
|
+
try {
|
|
31
|
+
const ds = Array.isArray(data?.datasets) ? data.datasets : [];
|
|
32
|
+
const vals = [];
|
|
33
|
+
for (const d of ds) {
|
|
34
|
+
const arr = Array.isArray(d?.data) ? d.data : [];
|
|
35
|
+
for (const v of arr) {
|
|
36
|
+
const n = typeof v === 'number' ? v : parseFloat(String(v));
|
|
37
|
+
if (Number.isFinite(n))
|
|
38
|
+
vals.push(n);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (vals.length === 0)
|
|
42
|
+
return undefined;
|
|
43
|
+
const max = Math.max(...vals);
|
|
44
|
+
if (!Number.isFinite(max))
|
|
45
|
+
return undefined;
|
|
46
|
+
const step = max <= 10 ? 2 : 10;
|
|
47
|
+
return Math.ceil(max / step) * step;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function applyDefaultStyles(chartType, data) {
|
|
54
|
+
const primary = getCssVar('--jotx-primary', '#4f46e5');
|
|
55
|
+
const text = getCssVar('--jotx-text', '#e5e7eb');
|
|
56
|
+
const text2 = getCssVar('--jotx-textSecondary', '#cbd5e1');
|
|
57
|
+
const border = getCssVar('--jotx-border', '#334155');
|
|
58
|
+
const bg = getCssVar('--jotx-background', '#0b1220');
|
|
59
|
+
const datasets = Array.isArray(data?.datasets) ? data.datasets : [];
|
|
60
|
+
const labels = Array.isArray(data?.labels) ? data.labels : [];
|
|
61
|
+
const defaultPiePalette = (count) => {
|
|
62
|
+
// A readable palette in both dark/light themes.
|
|
63
|
+
const base = [
|
|
64
|
+
'#60a5fa', // blue
|
|
65
|
+
'#34d399', // green
|
|
66
|
+
'#fbbf24', // amber
|
|
67
|
+
'#f87171', // red
|
|
68
|
+
'#a78bfa', // purple
|
|
69
|
+
'#22d3ee', // cyan
|
|
70
|
+
'#fb7185', // pink
|
|
71
|
+
'#4ade80' // lime
|
|
72
|
+
];
|
|
73
|
+
const out = [];
|
|
74
|
+
for (let i = 0; i < Math.max(1, count); i++) {
|
|
75
|
+
out.push(base[i % base.length]);
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
};
|
|
79
|
+
// Gentle defaults for readability; only fill missing values.
|
|
80
|
+
for (const ds of datasets) {
|
|
81
|
+
if (chartType === 'radar') {
|
|
82
|
+
ds.borderColor = ds.borderColor ?? primary;
|
|
83
|
+
ds.backgroundColor = ds.backgroundColor ?? hexToRgba(primary, 0.18);
|
|
84
|
+
ds.pointBackgroundColor = ds.pointBackgroundColor ?? primary;
|
|
85
|
+
ds.pointBorderColor = ds.pointBorderColor ?? bg;
|
|
86
|
+
ds.pointHoverBackgroundColor = ds.pointHoverBackgroundColor ?? primary;
|
|
87
|
+
ds.pointHoverBorderColor = ds.pointHoverBorderColor ?? bg;
|
|
88
|
+
ds.borderWidth = ds.borderWidth ?? 2;
|
|
89
|
+
ds.pointRadius = ds.pointRadius ?? 3;
|
|
90
|
+
ds.pointHoverRadius = ds.pointHoverRadius ?? 5;
|
|
91
|
+
}
|
|
92
|
+
else if (chartType === 'pie') {
|
|
93
|
+
// Remove slice borders (and legend swatch borders) for a clean fill look.
|
|
94
|
+
ds.borderWidth = 0;
|
|
95
|
+
ds.borderColor = 'transparent';
|
|
96
|
+
// If caller didn't provide slice colors, apply a default palette.
|
|
97
|
+
// (Without this, Chart.js defaults can look black in our themed webview.)
|
|
98
|
+
const hasBg = Array.isArray(ds.backgroundColor) ? ds.backgroundColor.length > 0 : typeof ds.backgroundColor === 'string' ? !!ds.backgroundColor : false;
|
|
99
|
+
if (!hasBg) {
|
|
100
|
+
const n = labels.length || (Array.isArray(ds.data) ? ds.data.length : 0) || 1;
|
|
101
|
+
ds.backgroundColor = defaultPiePalette(n);
|
|
102
|
+
ds.hoverBackgroundColor = ds.hoverBackgroundColor ?? ds.backgroundColor;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else if (chartType === 'bar') {
|
|
106
|
+
ds.backgroundColor = ds.backgroundColor ?? hexToRgba(primary, 0.28);
|
|
107
|
+
ds.borderColor = ds.borderColor ?? hexToRgba(primary, 0.75);
|
|
108
|
+
ds.borderWidth = ds.borderWidth ?? 1;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
colors: { primary, text, text2, border, bg },
|
|
113
|
+
data: { ...data, datasets }
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function defaultChartJson(type) {
|
|
117
|
+
if (type === 'pie') {
|
|
118
|
+
return JSON.stringify({
|
|
119
|
+
labels: ['A', 'B', 'C'],
|
|
120
|
+
datasets: [{ label: 'Share', data: [30, 45, 25] }]
|
|
121
|
+
}, null, 2);
|
|
122
|
+
}
|
|
123
|
+
if (type === 'radar') {
|
|
124
|
+
return JSON.stringify({
|
|
125
|
+
labels: ['Speed', 'Quality', 'Cost', 'DX', 'Reliability'],
|
|
126
|
+
datasets: [{ label: 'Score', data: [70, 80, 60, 85, 75] }]
|
|
127
|
+
}, null, 2);
|
|
128
|
+
}
|
|
129
|
+
// bar default
|
|
130
|
+
return JSON.stringify({
|
|
131
|
+
labels: ['Jan', 'Feb', 'Mar', 'Apr'],
|
|
132
|
+
datasets: [{ label: 'Events', data: [12, 19, 8, 15] }]
|
|
133
|
+
}, null, 2);
|
|
134
|
+
}
|
|
135
|
+
function ChartNodeView({ node, updateAttributes, selected }) {
|
|
136
|
+
const canvasRef = (0, react_1.useRef)(null);
|
|
137
|
+
const chartRef = (0, react_1.useRef)(null);
|
|
138
|
+
// Determine if source should be shown. Default to attribute, but if it's a new empty/default node, show it.
|
|
139
|
+
// Read directly from node.attrs to make it reactive
|
|
140
|
+
const showSource = node.attrs.showSource || false;
|
|
141
|
+
(0, react_1.useEffect)(() => {
|
|
142
|
+
const currentJson = (node.attrs.json || '').toString();
|
|
143
|
+
const isNew = !currentJson || currentJson === defaultChartJson((node.attrs.chartType || 'bar').toString());
|
|
144
|
+
if (isNew && !showSource) {
|
|
145
|
+
updateAttributes({ showSource: true });
|
|
146
|
+
}
|
|
147
|
+
}, []);
|
|
148
|
+
const setShowSource = (val) => {
|
|
149
|
+
const current = node.attrs.showSource || false;
|
|
150
|
+
const next = typeof val === 'function' ? val(current) : val;
|
|
151
|
+
updateAttributes({ showSource: next });
|
|
152
|
+
};
|
|
153
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
154
|
+
const chartType = (node.attrs.chartType || 'bar').toString();
|
|
155
|
+
const json = (node.attrs.json || '').toString() || defaultChartJson(chartType);
|
|
156
|
+
const id = (0, react_1.useMemo)(() => `chart_${Math.random().toString(36).slice(2)}`, []);
|
|
157
|
+
(0, react_1.useEffect)(() => {
|
|
158
|
+
// hydrate default json once if empty
|
|
159
|
+
if (!node.attrs.json) {
|
|
160
|
+
updateAttributes({ json });
|
|
161
|
+
}
|
|
162
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
163
|
+
}, []);
|
|
164
|
+
(0, react_1.useEffect)(() => {
|
|
165
|
+
const el = canvasRef.current;
|
|
166
|
+
if (!el)
|
|
167
|
+
return;
|
|
168
|
+
const ctx = el.getContext('2d');
|
|
169
|
+
if (!ctx)
|
|
170
|
+
return;
|
|
171
|
+
try {
|
|
172
|
+
const parsedRaw = JSON.parse(json);
|
|
173
|
+
const themed = applyDefaultStyles(chartType, parsedRaw);
|
|
174
|
+
const parsed = themed.data;
|
|
175
|
+
const { text, text2, border } = themed.colors;
|
|
176
|
+
const suggestedMax = chartType === 'radar' ? computeSuggestedMax(parsed) : undefined;
|
|
177
|
+
setError(null);
|
|
178
|
+
chartRef.current?.destroy();
|
|
179
|
+
chartRef.current = new chart_js_1.Chart(ctx, {
|
|
180
|
+
type: chartType,
|
|
181
|
+
data: parsed,
|
|
182
|
+
options: {
|
|
183
|
+
responsive: true,
|
|
184
|
+
maintainAspectRatio: false,
|
|
185
|
+
animation: { duration: 180 },
|
|
186
|
+
layout: { padding: chartType === 'radar' ? 16 : 10 },
|
|
187
|
+
plugins: {
|
|
188
|
+
legend: {
|
|
189
|
+
display: true,
|
|
190
|
+
labels: {
|
|
191
|
+
color: text2,
|
|
192
|
+
boxWidth: 14,
|
|
193
|
+
boxHeight: 8,
|
|
194
|
+
// Pie legend should be solid color swatches (no borders). Point-style looks odd here.
|
|
195
|
+
usePointStyle: chartType === 'pie' ? false : true
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
...(chartType === 'radar'
|
|
200
|
+
? {
|
|
201
|
+
scales: {
|
|
202
|
+
r: {
|
|
203
|
+
beginAtZero: true,
|
|
204
|
+
suggestedMax,
|
|
205
|
+
grid: {
|
|
206
|
+
color: hexToRgba(border, 0.45),
|
|
207
|
+
circular: true
|
|
208
|
+
},
|
|
209
|
+
angleLines: {
|
|
210
|
+
color: hexToRgba(border, 0.55)
|
|
211
|
+
},
|
|
212
|
+
pointLabels: {
|
|
213
|
+
color: text,
|
|
214
|
+
font: { size: 12, weight: '600' },
|
|
215
|
+
padding: 6
|
|
216
|
+
},
|
|
217
|
+
ticks: {
|
|
218
|
+
display: false
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
elements: {
|
|
223
|
+
line: { tension: 0.25 }
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
: {})
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
catch (e) {
|
|
231
|
+
chartRef.current?.destroy();
|
|
232
|
+
chartRef.current = null;
|
|
233
|
+
setError(e?.message || 'Invalid chart JSON');
|
|
234
|
+
}
|
|
235
|
+
return () => {
|
|
236
|
+
// keep chart alive between renders; only destroy on unmount
|
|
237
|
+
};
|
|
238
|
+
}, [chartType, json, id]);
|
|
239
|
+
(0, react_1.useEffect)(() => {
|
|
240
|
+
return () => {
|
|
241
|
+
chartRef.current?.destroy();
|
|
242
|
+
chartRef.current = null;
|
|
243
|
+
};
|
|
244
|
+
}, []);
|
|
245
|
+
return ((0, jsx_runtime_1.jsxs)(react_2.NodeViewWrapper, { className: "jotx-chart", "data-type": "chart", "data-chart-type": chartType, "data-selected": selected ? 'true' : 'false', children: [(0, jsx_runtime_1.jsxs)("div", { className: "jotx-chart-header", children: [(0, jsx_runtime_1.jsx)("div", { className: "jotx-chart-title", children: "Chart" }), (0, jsx_runtime_1.jsx)("input", { type: "text", className: "jotx-block-title-input", placeholder: "Title (shown in graph)...", value: (node.attrs.title || '').toString(), onChange: (e) => updateAttributes({ title: e.target.value }) }), (0, jsx_runtime_1.jsxs)("div", { className: "jotx-chart-type", children: [(0, jsx_runtime_1.jsx)("button", { className: `jotx-chart-type-btn ${chartType === 'bar' ? 'active' : ''}`, onMouseDown: (e) => e.preventDefault(), onClick: () => updateAttributes({ chartType: 'bar', json: node.attrs.json || defaultChartJson('bar') }), title: "Bar", children: (0, jsx_runtime_1.jsx)(lucide_react_1.BarChart3, { size: 16 }) }), (0, jsx_runtime_1.jsx)("button", { className: `jotx-chart-type-btn ${chartType === 'pie' ? 'active' : ''}`, onMouseDown: (e) => e.preventDefault(), onClick: () => updateAttributes({ chartType: 'pie', json: node.attrs.json || defaultChartJson('pie') }), title: "Pie", children: (0, jsx_runtime_1.jsx)(lucide_react_1.PieChart, { size: 16 }) }), (0, jsx_runtime_1.jsx)("button", { className: `jotx-chart-type-btn ${chartType === 'radar' ? 'active' : ''}`, onMouseDown: (e) => e.preventDefault(), onClick: () => updateAttributes({ chartType: 'radar', json: node.attrs.json || defaultChartJson('radar') }), title: "Radar", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Radar, { size: 16 }) })] }), (0, jsx_runtime_1.jsx)("button", { className: "jotx-chart-settings", onMouseDown: (e) => e.preventDefault(), onClick: () => setShowSource((s) => !s), title: (node.attrs.showSource || false) ? "Hide Source" : "Show Source", children: (node.attrs.showSource || false) ? (0, jsx_runtime_1.jsx)(lucide_react_1.EyeOff, { size: 16 }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Eye, { size: 16 }) })] }), error ? (0, jsx_runtime_1.jsx)("div", { className: "jotx-chart-error", children: error }) : null, (0, jsx_runtime_1.jsx)("div", { className: "jotx-chart-canvasWrap", children: (0, jsx_runtime_1.jsx)("canvas", { ref: canvasRef }) }), (node.attrs.showSource || false) ? ((0, jsx_runtime_1.jsxs)("div", { className: "jotx-chart-editor", children: [(0, jsx_runtime_1.jsx)("div", { className: "jotx-chart-editorHint", children: "Edit JSON (labels + datasets)" }), (0, jsx_runtime_1.jsx)("textarea", { value: json, onChange: (e) => updateAttributes({ json: e.target.value }), spellCheck: false })] })) : null] }));
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=ChartNodeView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartNodeView.js","sourceRoot":"","sources":["../../src/components/ChartNodeView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeBlockNodeView.d.ts","sourceRoot":"","sources":["../../src/components/CodeBlockNodeView.tsx"],"names":[],"mappings":"AACA,OAAO,EAAmB,aAAa,EAAmB,MAAM,eAAe,CAAA;AAG/E,OAAO,yBAAyB,CAAA;AA8ChC,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,aAAa,2CAsGlF"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodeBlockNodeView = CodeBlockNodeView;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const react_2 = require("@tiptap/react");
|
|
7
|
+
const lucide_react_1 = require("lucide-react");
|
|
8
|
+
const vscode_api_1 = require("../bridge/vscode-api");
|
|
9
|
+
require("./CodeBlockNodeView.css");
|
|
10
|
+
const LANGUAGES = [
|
|
11
|
+
'typescript',
|
|
12
|
+
'javascript',
|
|
13
|
+
'json',
|
|
14
|
+
'yaml',
|
|
15
|
+
'markdown',
|
|
16
|
+
'bash',
|
|
17
|
+
'shell',
|
|
18
|
+
'python',
|
|
19
|
+
'go',
|
|
20
|
+
'java',
|
|
21
|
+
'c',
|
|
22
|
+
'cpp',
|
|
23
|
+
'rust',
|
|
24
|
+
'sql',
|
|
25
|
+
'html',
|
|
26
|
+
'css',
|
|
27
|
+
'text'
|
|
28
|
+
];
|
|
29
|
+
async function copyToClipboard(text) {
|
|
30
|
+
try {
|
|
31
|
+
await navigator.clipboard.writeText(text);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// fallback
|
|
36
|
+
try {
|
|
37
|
+
const ta = document.createElement('textarea');
|
|
38
|
+
ta.value = text;
|
|
39
|
+
ta.style.position = 'fixed';
|
|
40
|
+
ta.style.left = '-9999px';
|
|
41
|
+
ta.style.top = '0';
|
|
42
|
+
document.body.appendChild(ta);
|
|
43
|
+
ta.focus();
|
|
44
|
+
ta.select();
|
|
45
|
+
const ok = document.execCommand('copy');
|
|
46
|
+
document.body.removeChild(ta);
|
|
47
|
+
return ok;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function CodeBlockNodeView({ node, updateAttributes, editor }) {
|
|
55
|
+
const lang = (node?.attrs?.language || 'typescript').toString();
|
|
56
|
+
const [copied, setCopied] = (0, react_1.useState)(false);
|
|
57
|
+
const [running, setRunning] = (0, react_1.useState)(false);
|
|
58
|
+
const languageOptions = (0, react_1.useMemo)(() => {
|
|
59
|
+
// Keep current lang even if not in list (future-proof)
|
|
60
|
+
const set = new Set(LANGUAGES);
|
|
61
|
+
if (lang && !set.has(lang))
|
|
62
|
+
return [lang, ...LANGUAGES];
|
|
63
|
+
return LANGUAGES;
|
|
64
|
+
}, [lang]);
|
|
65
|
+
const onCopy = async () => {
|
|
66
|
+
const text = node.textContent || '';
|
|
67
|
+
const ok = await copyToClipboard(text);
|
|
68
|
+
if (!ok)
|
|
69
|
+
return;
|
|
70
|
+
setCopied(true);
|
|
71
|
+
window.setTimeout(() => setCopied(false), 900);
|
|
72
|
+
};
|
|
73
|
+
const onRun = () => {
|
|
74
|
+
const text = node.textContent || '';
|
|
75
|
+
if (!text.trim())
|
|
76
|
+
return;
|
|
77
|
+
setRunning(true);
|
|
78
|
+
const vscode = (0, vscode_api_1.getVSCodeAPI)();
|
|
79
|
+
vscode.postMessage({
|
|
80
|
+
type: 'runCode',
|
|
81
|
+
language: lang,
|
|
82
|
+
code: text
|
|
83
|
+
});
|
|
84
|
+
// Reset icon after a short delay
|
|
85
|
+
setTimeout(() => setRunning(false), 1000);
|
|
86
|
+
};
|
|
87
|
+
return ((0, jsx_runtime_1.jsxs)(react_2.NodeViewWrapper, { className: "jotx-codeblock", "data-type": "codeblock", "data-language": lang, children: [(0, jsx_runtime_1.jsxs)("div", { className: "jotx-codeblock-header", contentEditable: false, children: [(0, jsx_runtime_1.jsxs)("div", { className: "jotx-codeblock-lang", children: [(0, jsx_runtime_1.jsx)("span", { className: "jotx-codeblock-langLabel", children: "Code" }), (0, jsx_runtime_1.jsx)("select", { className: "jotx-codeblock-select", value: lang,
|
|
88
|
+
// Don't preventDefault here — it breaks opening the native dropdown.
|
|
89
|
+
// Just stop propagation so ProseMirror doesn't treat it as an editor click.
|
|
90
|
+
onMouseDown: (e) => e.stopPropagation(), onChange: (e) => {
|
|
91
|
+
const next = e.target.value;
|
|
92
|
+
updateAttributes({ language: next });
|
|
93
|
+
// Don't force focus immediately; it can cancel the dropdown selection on some platforms.
|
|
94
|
+
window.setTimeout(() => editor?.commands?.focus(), 0);
|
|
95
|
+
}, "aria-label": "Code language", children: languageOptions.map((l) => ((0, jsx_runtime_1.jsx)("option", { value: l, children: l }, l))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "jotx-codeblock-actions", children: [(0, jsx_runtime_1.jsx)("button", { className: "jotx-codeblock-btn", title: "Run Code", onMouseDown: (e) => e.preventDefault(), onClick: (e) => {
|
|
96
|
+
e.preventDefault();
|
|
97
|
+
e.stopPropagation();
|
|
98
|
+
onRun();
|
|
99
|
+
}, style: { marginRight: '4px' }, children: running ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 16 }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Play, { size: 16 }) }), (0, jsx_runtime_1.jsx)("button", { className: "jotx-codeblock-btn", title: copied ? 'Copied' : 'Copy', onMouseDown: (e) => e.preventDefault(), onClick: (e) => {
|
|
100
|
+
e.preventDefault();
|
|
101
|
+
e.stopPropagation();
|
|
102
|
+
onCopy();
|
|
103
|
+
}, children: copied ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 16 }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { size: 16 }) })] })] }), (0, jsx_runtime_1.jsx)("pre", { className: "jotx-codeblock-pre", children: (0, jsx_runtime_1.jsx)("code", { children: (0, jsx_runtime_1.jsx)(react_2.NodeViewContent, { ...{ as: 'code' } }) }) })] }));
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=CodeBlockNodeView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeBlockNodeView.js","sourceRoot":"","sources":["../../src/components/CodeBlockNodeView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { NodeViewProps } from '@tiptap/react';
|
|
2
|
+
import './CodeBlockNodeView.css';
|
|
3
|
+
export declare function CodeReferenceNodeView({ node, updateAttributes, editor, getPos }: NodeViewProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=CodeReferenceNodeView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeReferenceNodeView.d.ts","sourceRoot":"","sources":["../../src/components/CodeReferenceNodeView.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAmB,MAAM,eAAe,CAAA;AAG9D,OAAO,yBAAyB,CAAA;AAEhC,wBAAgB,qBAAqB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,aAAa,2CA+J9F"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodeReferenceNodeView = CodeReferenceNodeView;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const react_2 = require("@tiptap/react");
|
|
7
|
+
const lucide_react_1 = require("lucide-react");
|
|
8
|
+
const vscode_api_1 = require("../bridge/vscode-api");
|
|
9
|
+
require("./CodeBlockNodeView.css"); // Reuse styles
|
|
10
|
+
function CodeReferenceNodeView({ node, updateAttributes, editor, getPos }) {
|
|
11
|
+
const { path, lines, language } = node.attrs;
|
|
12
|
+
const [isConfiguring, setIsConfiguring] = (0, react_1.useState)(!path);
|
|
13
|
+
const [content, setContent] = (0, react_1.useState)('');
|
|
14
|
+
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
15
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
16
|
+
const fetchContent = () => {
|
|
17
|
+
if (!path)
|
|
18
|
+
return;
|
|
19
|
+
setLoading(true);
|
|
20
|
+
setError(null);
|
|
21
|
+
const vscode = (0, vscode_api_1.getVSCodeAPI)();
|
|
22
|
+
const requestId = `ref_${Date.now()}`;
|
|
23
|
+
vscode.postMessage({
|
|
24
|
+
type: 'getFileContent',
|
|
25
|
+
path,
|
|
26
|
+
lines,
|
|
27
|
+
requestId
|
|
28
|
+
});
|
|
29
|
+
const handleMessage = (event) => {
|
|
30
|
+
const message = event.data;
|
|
31
|
+
if (message.type === 'fileContent' && message.requestId === requestId) {
|
|
32
|
+
setLoading(false);
|
|
33
|
+
if (message.error) {
|
|
34
|
+
setError(message.error);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
const newContent = message.content || '';
|
|
38
|
+
setContent(newContent);
|
|
39
|
+
// Sync to Tiptap Model so it saves
|
|
40
|
+
if (editor && typeof getPos === 'function') {
|
|
41
|
+
const pos = getPos();
|
|
42
|
+
const currentNodeContent = node.textContent;
|
|
43
|
+
if (currentNodeContent !== newContent) {
|
|
44
|
+
editor.commands.command(({ tr, dispatch }) => {
|
|
45
|
+
if (dispatch) {
|
|
46
|
+
const nodeSize = node.nodeSize;
|
|
47
|
+
// Replace content range [pos + 1, pos + nodeSize - 1] with new text
|
|
48
|
+
tr.replaceWith(pos + 1, pos + nodeSize - 1, editor.schema.text(newContent));
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
window.removeEventListener('message', handleMessage);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
window.addEventListener('message', handleMessage);
|
|
60
|
+
};
|
|
61
|
+
(0, react_1.useEffect)(() => {
|
|
62
|
+
if (!isConfiguring) {
|
|
63
|
+
fetchContent();
|
|
64
|
+
}
|
|
65
|
+
}, [path, lines, isConfiguring]);
|
|
66
|
+
const handleSave = () => {
|
|
67
|
+
setIsConfiguring(false);
|
|
68
|
+
};
|
|
69
|
+
return ((0, jsx_runtime_1.jsxs)(react_2.NodeViewWrapper, { className: "jotx-codeblock", "data-type": "codeReference", children: [(0, jsx_runtime_1.jsxs)("div", { className: "jotx-codeblock-header", contentEditable: false, style: { background: 'var(--jotx-backgroundSecondary)', borderBottom: '1px solid var(--jotx-border)', display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '0 8px' }, children: [(0, jsx_runtime_1.jsxs)("div", { className: "jotx-codeblock-lang", style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.FileCode, { size: 14, className: "jotx-icon" }), !isConfiguring ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("span", { style: { fontSize: '11px', fontFamily: 'var(--vscode-editor-font-family)', fontWeight: 500, opacity: 0.8 }, children: [path.split('/').pop(), " ", lines ? `:${lines}` : ''] }), language && ((0, jsx_runtime_1.jsx)("span", { style: { fontSize: '9px', opacity: 0.5, marginLeft: '4px', textTransform: 'uppercase', background: 'var(--jotx-background)', padding: '1px 4px', borderRadius: '3px' }, children: language }))] })) : ((0, jsx_runtime_1.jsx)("span", { style: { fontSize: '12px', fontWeight: 600 }, children: "Configure Reference" }))] }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center' }, children: [!isConfiguring && ((0, jsx_runtime_1.jsx)("button", { onClick: fetchContent, style: { background: 'none', border: 'none', color: 'inherit', cursor: 'pointer', padding: '4px', opacity: 0.4 }, children: (0, jsx_runtime_1.jsx)(lucide_react_1.RefreshCw, { size: 12, className: loading ? 'animate-spin' : '' }) })), (0, jsx_runtime_1.jsx)("button", { onClick: () => setIsConfiguring(!isConfiguring), style: { background: 'none', border: 'none', color: 'inherit', cursor: 'pointer', padding: '4px', opacity: 0.6 }, children: isConfiguring ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 14 }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Settings, { size: 14 }) })] })] }), isConfiguring ? ((0, jsx_runtime_1.jsxs)("div", { className: "jotx-codeblock-config", style: { padding: '12px', background: 'var(--jotx-background)', display: 'flex', flexDirection: 'column', gap: '8px' }, contentEditable: false, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: '4px' }, children: [(0, jsx_runtime_1.jsx)("label", { style: { fontSize: '10px', opacity: 0.7, textTransform: 'uppercase' }, children: "File Path (relative to root)" }), (0, jsx_runtime_1.jsx)("input", { type: "text", value: path, onChange: (e) => updateAttributes({ path: e.target.value }), placeholder: "e.g. src/utils.ts", style: { background: 'var(--jotx-backgroundSecondary)', border: '1px solid var(--jotx-border)', color: 'inherit', padding: '4px 8px', borderRadius: '4px', fontSize: '12px', outline: 'none' } })] }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', gap: '12px' }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: '4px', flex: 1 }, children: [(0, jsx_runtime_1.jsx)("label", { style: { fontSize: '10px', opacity: 0.7, textTransform: 'uppercase' }, children: "Lines" }), (0, jsx_runtime_1.jsx)("input", { type: "text", value: lines, onChange: (e) => updateAttributes({ lines: e.target.value }), placeholder: "e.g. 10-20 or 5", style: { background: 'var(--jotx-backgroundSecondary)', border: '1px solid var(--jotx-border)', color: 'inherit', padding: '4px 8px', borderRadius: '4px', fontSize: '12px', outline: 'none' } })] }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: '4px', flex: 1 }, children: [(0, jsx_runtime_1.jsx)("label", { style: { fontSize: '10px', opacity: 0.7, textTransform: 'uppercase' }, children: "Language" }), (0, jsx_runtime_1.jsx)("input", { type: "text", value: language, onChange: (e) => updateAttributes({ language: e.target.value }), placeholder: "typescript, python, etc.", style: { background: 'var(--jotx-backgroundSecondary)', border: '1px solid var(--jotx-border)', color: 'inherit', padding: '4px 8px', borderRadius: '4px', fontSize: '12px', outline: 'none' } })] })] }), (0, jsx_runtime_1.jsx)("button", { onClick: handleSave, style: { background: 'var(--vscode-button-background)', color: 'var(--vscode-button-foreground)', border: 'none', padding: '6px', borderRadius: '4px', fontSize: '12px', cursor: 'pointer', marginTop: '4px', fontWeight: 600 }, children: "Apply Changes" })] })) : ((0, jsx_runtime_1.jsxs)("div", { style: { position: 'relative' }, children: [loading && (0, jsx_runtime_1.jsx)("div", { style: { position: 'absolute', inset: 0, background: 'rgba(0,0,0,0.1)', display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: '11px', opacity: 0.6 }, children: "Loading..." }), error ? ((0, jsx_runtime_1.jsxs)("div", { style: { padding: '20px', fontSize: '12px', color: 'var(--vscode-errorForeground)', background: 'var(--jotx-background)' }, children: ["Error: ", error] })) : ((0, jsx_runtime_1.jsx)("pre", { className: "jotx-codeblock-pre", style: { margin: 0, maxHeight: '400px', overflowY: 'auto' }, children: (0, jsx_runtime_1.jsx)("code", { style: { fontSize: '12px', fontFamily: 'var(--vscode-editor-font-family)' }, children: content || '// No content or file empty' }) }))] }))] }));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=CodeReferenceNodeView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeReferenceNodeView.js","sourceRoot":"","sources":["../../src/components/CodeReferenceNodeView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateTimeNodeView.d.ts","sourceRoot":"","sources":["../../src/components/DateTimeNodeView.tsx"],"names":[],"mappings":"AAGA,OAAO,wBAAwB,CAAA;AAiB/B,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,GAAG,2CAwE/D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DateTimeNodeView = DateTimeNodeView;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const react_2 = require("@tiptap/react");
|
|
7
|
+
const lucide_react_1 = require("lucide-react");
|
|
8
|
+
require("./DateTimeNodeView.css");
|
|
9
|
+
function formatDisplay(mode, value) {
|
|
10
|
+
const v = (value || '').trim();
|
|
11
|
+
if (!v)
|
|
12
|
+
return 'Pick date/time';
|
|
13
|
+
// For simplicity + stability, display the raw value (datetime-local style) but nicer spacing.
|
|
14
|
+
if (mode === 'datetime')
|
|
15
|
+
return v.replace('T', ' ');
|
|
16
|
+
return v;
|
|
17
|
+
}
|
|
18
|
+
function clampMode(m) {
|
|
19
|
+
if (m === 'date' || m === 'time' || m === 'datetime')
|
|
20
|
+
return m;
|
|
21
|
+
return 'datetime';
|
|
22
|
+
}
|
|
23
|
+
function DateTimeNodeView({ node, updateAttributes }) {
|
|
24
|
+
const mode = clampMode((node?.attrs?.mode || 'datetime').toString());
|
|
25
|
+
const value = (node?.attrs?.value || '').toString();
|
|
26
|
+
/* State managed directly via props now */
|
|
27
|
+
const [open, setOpen] = (0, react_1.useState)(false);
|
|
28
|
+
const wrapRef = (0, react_1.useRef)(null);
|
|
29
|
+
// Close on outside click
|
|
30
|
+
(0, react_1.useEffect)(() => {
|
|
31
|
+
if (!open)
|
|
32
|
+
return;
|
|
33
|
+
const onDown = (e) => {
|
|
34
|
+
const t = e.target;
|
|
35
|
+
if (wrapRef.current && t && !wrapRef.current.contains(t))
|
|
36
|
+
setOpen(false);
|
|
37
|
+
};
|
|
38
|
+
window.addEventListener('mousedown', onDown);
|
|
39
|
+
return () => window.removeEventListener('mousedown', onDown);
|
|
40
|
+
}, [open]);
|
|
41
|
+
const inputType = (0, react_1.useMemo)(() => {
|
|
42
|
+
if (mode === 'date')
|
|
43
|
+
return 'date';
|
|
44
|
+
if (mode === 'time')
|
|
45
|
+
return 'time';
|
|
46
|
+
return 'datetime-local';
|
|
47
|
+
}, [mode]);
|
|
48
|
+
return ((0, jsx_runtime_1.jsxs)(react_2.NodeViewWrapper, { ref: wrapRef, className: "jotx-datetime-node", "data-type": "datetime", children: [(0, jsx_runtime_1.jsxs)("button", { className: "jotx-datetime-pill", onMouseDown: (e) => e.preventDefault(), onClick: () => setOpen((v) => !v), title: "Date/Time", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CalendarClock, { size: 16 }), (0, jsx_runtime_1.jsx)("span", { className: "jotx-datetime-text", children: formatDisplay(mode, value) })] }), open && ((0, jsx_runtime_1.jsxs)("div", { className: "jotx-datetime-popover", onMouseDown: (e) => e.stopPropagation(), children: [(0, jsx_runtime_1.jsxs)("div", { className: "jotx-datetime-row", children: [(0, jsx_runtime_1.jsx)("span", { className: "jotx-datetime-label", children: "Mode" }), (0, jsx_runtime_1.jsxs)("select", { className: "jotx-datetime-select", value: mode, onChange: (e) => {
|
|
49
|
+
const newMode = clampMode(e.target.value);
|
|
50
|
+
updateAttributes({ mode: newMode });
|
|
51
|
+
}, children: [(0, jsx_runtime_1.jsx)("option", { value: "datetime", children: "Date + Time" }), (0, jsx_runtime_1.jsx)("option", { value: "date", children: "Date" }), (0, jsx_runtime_1.jsx)("option", { value: "time", children: "Time" })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "jotx-datetime-row", children: [(0, jsx_runtime_1.jsx)("span", { className: "jotx-datetime-label", children: "Value" }), (0, jsx_runtime_1.jsx)("input", { className: "jotx-datetime-input", type: inputType, value: value, onChange: (e) => {
|
|
52
|
+
updateAttributes({ value: e.target.value });
|
|
53
|
+
} })] })] }))] }));
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=DateTimeNodeView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateTimeNodeView.js","sourceRoot":"","sources":["../../src/components/DateTimeNodeView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EditorRibbon - Toolbar ribbon for the editor
|
|
3
|
+
* This is a stub that can be customized per platform
|
|
4
|
+
*/
|
|
5
|
+
export type EditorContext = 'paragraph' | 'heading' | 'list' | 'table' | 'code' | 'image' | 'callout' | 'mermaid' | 'chart' | 'math';
|
|
6
|
+
export interface EditorRibbonProps {
|
|
7
|
+
editor: any;
|
|
8
|
+
context: EditorContext;
|
|
9
|
+
expanded?: boolean;
|
|
10
|
+
onToggleExpand?: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function EditorRibbon({ editor: _editor, context: _context, expanded, onToggleExpand: _onToggleExpand }: EditorRibbonProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=EditorRibbon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditorRibbon.d.ts","sourceRoot":"","sources":["../../src/components/EditorRibbon.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,aAAa,GACnB,WAAW,GACX,SAAS,GACT,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,GACP,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,CAAA;AAGZ,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,GAAG,CAAA;IACX,OAAO,EAAE,aAAa,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;CAC9B;AAED,wBAAgB,YAAY,CAAC,EACzB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,QAAQ,EACjB,QAAgB,EAChB,cAAc,EAAE,eAAe,EAClC,EAAE,iBAAiB,2CAWnB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EditorRibbon = EditorRibbon;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
function EditorRibbon({ editor: _editor, context: _context, expanded = false, onToggleExpand: _onToggleExpand }) {
|
|
6
|
+
if (!expanded) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
// Stub implementation - platform-specific implementations can override
|
|
10
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "editor-ribbon", style: { display: 'none' } }));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=EditorRibbon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditorRibbon.js","sourceRoot":"","sources":["../../src/components/EditorRibbon.tsx"],"names":[],"mappings":";;AA2BA,oCAgBC;;AAhBD,SAAgB,YAAY,CAAC,EACzB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,QAAQ,EACjB,QAAQ,GAAG,KAAK,EAChB,cAAc,EAAE,eAAe,EACf;IAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACf,CAAC;IAED,uEAAuE;IACvE,OAAO,CACH,gCAAK,SAAS,EAAC,eAAe,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAEnD,CACT,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Float Image Block NodeView - CONTAINER with floating image + editable content
|
|
3
|
+
*/
|
|
4
|
+
import { NodeViewProps } from '@tiptap/react';
|
|
5
|
+
export declare function FloatImageBlockNodeView({ node, updateAttributes, selected }: NodeViewProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=FloatImageBlockNodeView.d.ts.map
|