@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.
Files changed (261) hide show
  1. package/dist/bridge/BridgeContext.d.ts +14 -0
  2. package/dist/bridge/BridgeContext.d.ts.map +1 -0
  3. package/dist/bridge/BridgeContext.js +20 -0
  4. package/dist/bridge/BridgeContext.js.map +1 -0
  5. package/dist/bridge/bridge-utils.d.ts +24 -0
  6. package/dist/bridge/bridge-utils.d.ts.map +1 -0
  7. package/dist/bridge/bridge-utils.js +77 -0
  8. package/dist/bridge/bridge-utils.js.map +1 -0
  9. package/dist/bridge/types.d.ts +34 -0
  10. package/dist/bridge/types.d.ts.map +1 -0
  11. package/dist/bridge/types.js +27 -0
  12. package/dist/bridge/types.js.map +1 -0
  13. package/dist/bridge/vscode-api.d.ts +13 -0
  14. package/dist/bridge/vscode-api.d.ts.map +1 -0
  15. package/dist/bridge/vscode-api.js +27 -0
  16. package/dist/bridge/vscode-api.js.map +1 -0
  17. package/dist/components/AttachBlockNodeView.d.ts +2 -0
  18. package/dist/components/AttachBlockNodeView.d.ts.map +1 -0
  19. package/dist/components/AttachBlockNodeView.js +37 -0
  20. package/dist/components/AttachBlockNodeView.js.map +1 -0
  21. package/dist/components/BlockMenu.d.ts +11 -0
  22. package/dist/components/BlockMenu.d.ts.map +1 -0
  23. package/dist/components/BlockMenu.js +344 -0
  24. package/dist/components/BlockMenu.js.map +1 -0
  25. package/dist/components/ButtonNodeView.d.ts +17 -0
  26. package/dist/components/ButtonNodeView.d.ts.map +1 -0
  27. package/dist/components/ButtonNodeView.js +55 -0
  28. package/dist/components/ButtonNodeView.js.map +1 -0
  29. package/dist/components/CardNodeView.d.ts +18 -0
  30. package/dist/components/CardNodeView.d.ts.map +1 -0
  31. package/dist/components/CardNodeView.js +46 -0
  32. package/dist/components/CardNodeView.js.map +1 -0
  33. package/dist/components/ChartNodeView.d.ts +4 -0
  34. package/dist/components/ChartNodeView.d.ts.map +1 -0
  35. package/dist/components/ChartNodeView.js +247 -0
  36. package/dist/components/ChartNodeView.js.map +1 -0
  37. package/dist/components/CodeBlockNodeView.d.ts +4 -0
  38. package/dist/components/CodeBlockNodeView.d.ts.map +1 -0
  39. package/dist/components/CodeBlockNodeView.js +105 -0
  40. package/dist/components/CodeBlockNodeView.js.map +1 -0
  41. package/dist/components/CodeReferenceNodeView.d.ts +4 -0
  42. package/dist/components/CodeReferenceNodeView.d.ts.map +1 -0
  43. package/dist/components/CodeReferenceNodeView.js +71 -0
  44. package/dist/components/CodeReferenceNodeView.js.map +1 -0
  45. package/dist/components/DateTimeNodeView.d.ts +3 -0
  46. package/dist/components/DateTimeNodeView.d.ts.map +1 -0
  47. package/dist/components/DateTimeNodeView.js +55 -0
  48. package/dist/components/DateTimeNodeView.js.map +1 -0
  49. package/dist/components/EditorRibbon.d.ts +13 -0
  50. package/dist/components/EditorRibbon.d.ts.map +1 -0
  51. package/dist/components/EditorRibbon.js +12 -0
  52. package/dist/components/EditorRibbon.js.map +1 -0
  53. package/dist/components/FloatImageBlockNodeView.d.ts +6 -0
  54. package/dist/components/FloatImageBlockNodeView.d.ts.map +1 -0
  55. package/dist/components/FloatImageBlockNodeView.js +96 -0
  56. package/dist/components/FloatImageBlockNodeView.js.map +1 -0
  57. package/dist/components/GridCardNodeView.d.ts +13 -0
  58. package/dist/components/GridCardNodeView.d.ts.map +1 -0
  59. package/dist/components/GridCardNodeView.js +31 -0
  60. package/dist/components/GridCardNodeView.js.map +1 -0
  61. package/dist/components/ImageBlockNodeView.d.ts +7 -0
  62. package/dist/components/ImageBlockNodeView.d.ts.map +1 -0
  63. package/dist/components/ImageBlockNodeView.js +132 -0
  64. package/dist/components/ImageBlockNodeView.js.map +1 -0
  65. package/dist/components/ImageToolbar.d.ts +6 -0
  66. package/dist/components/ImageToolbar.d.ts.map +1 -0
  67. package/dist/components/ImageToolbar.js +67 -0
  68. package/dist/components/ImageToolbar.js.map +1 -0
  69. package/dist/components/JotxEditor.d.ts +17 -0
  70. package/dist/components/JotxEditor.d.ts.map +1 -0
  71. package/dist/components/JotxEditor.js +1121 -0
  72. package/dist/components/JotxEditor.js.map +1 -0
  73. package/dist/components/JotxLinkNodeView.d.ts +4 -0
  74. package/dist/components/JotxLinkNodeView.d.ts.map +1 -0
  75. package/dist/components/JotxLinkNodeView.js +123 -0
  76. package/dist/components/JotxLinkNodeView.js.map +1 -0
  77. package/dist/components/LinkDialog.d.ts +14 -0
  78. package/dist/components/LinkDialog.d.ts.map +1 -0
  79. package/dist/components/LinkDialog.js +33 -0
  80. package/dist/components/LinkDialog.js.map +1 -0
  81. package/dist/components/MathNodeView.d.ts +3 -0
  82. package/dist/components/MathNodeView.d.ts.map +1 -0
  83. package/dist/components/MathNodeView.js +67 -0
  84. package/dist/components/MathNodeView.js.map +1 -0
  85. package/dist/components/MermaidNodeView.d.ts +4 -0
  86. package/dist/components/MermaidNodeView.d.ts.map +1 -0
  87. package/dist/components/MermaidNodeView.js +442 -0
  88. package/dist/components/MermaidNodeView.js.map +1 -0
  89. package/dist/components/NodePickerDialog.d.ts +12 -0
  90. package/dist/components/NodePickerDialog.d.ts.map +1 -0
  91. package/dist/components/NodePickerDialog.js +90 -0
  92. package/dist/components/NodePickerDialog.js.map +1 -0
  93. package/dist/components/ReadonlyBlockRenderer.d.ts +13 -0
  94. package/dist/components/ReadonlyBlockRenderer.d.ts.map +1 -0
  95. package/dist/components/ReadonlyBlockRenderer.js +78 -0
  96. package/dist/components/ReadonlyBlockRenderer.js.map +1 -0
  97. package/dist/components/ReadonlyMermaid.d.ts +10 -0
  98. package/dist/components/ReadonlyMermaid.d.ts.map +1 -0
  99. package/dist/components/ReadonlyMermaid.js +70 -0
  100. package/dist/components/ReadonlyMermaid.js.map +1 -0
  101. package/dist/components/SearchBar.d.ts +16 -0
  102. package/dist/components/SearchBar.d.ts.map +1 -0
  103. package/dist/components/SearchBar.js +52 -0
  104. package/dist/components/SearchBar.js.map +1 -0
  105. package/dist/components/SectionNodeView.d.ts +4 -0
  106. package/dist/components/SectionNodeView.d.ts.map +1 -0
  107. package/dist/components/SectionNodeView.js +39 -0
  108. package/dist/components/SectionNodeView.js.map +1 -0
  109. package/dist/components/SlashMenu.d.ts +21 -0
  110. package/dist/components/SlashMenu.d.ts.map +1 -0
  111. package/dist/components/SlashMenu.js +356 -0
  112. package/dist/components/SlashMenu.js.map +1 -0
  113. package/dist/components/TableToolbar.d.ts +10 -0
  114. package/dist/components/TableToolbar.d.ts.map +1 -0
  115. package/dist/components/TableToolbar.js +189 -0
  116. package/dist/components/TableToolbar.js.map +1 -0
  117. package/dist/components/ToggleNodeView.d.ts +4 -0
  118. package/dist/components/ToggleNodeView.d.ts.map +1 -0
  119. package/dist/components/ToggleNodeView.js +39 -0
  120. package/dist/components/ToggleNodeView.js.map +1 -0
  121. package/dist/components/UrlInputDialog.d.ts +13 -0
  122. package/dist/components/UrlInputDialog.d.ts.map +1 -0
  123. package/dist/components/UrlInputDialog.js +39 -0
  124. package/dist/components/UrlInputDialog.js.map +1 -0
  125. package/dist/components/VideoBlockNodeView.d.ts +12 -0
  126. package/dist/components/VideoBlockNodeView.d.ts.map +1 -0
  127. package/dist/components/VideoBlockNodeView.js +97 -0
  128. package/dist/components/VideoBlockNodeView.js.map +1 -0
  129. package/dist/contexts/NodeManagerContext.d.ts +34 -0
  130. package/dist/contexts/NodeManagerContext.d.ts.map +1 -0
  131. package/dist/contexts/NodeManagerContext.js +31 -0
  132. package/dist/contexts/NodeManagerContext.js.map +1 -0
  133. package/dist/extensions/AttachNode.d.ts +7 -0
  134. package/dist/extensions/AttachNode.d.ts.map +1 -0
  135. package/dist/extensions/AttachNode.js +50 -0
  136. package/dist/extensions/AttachNode.js.map +1 -0
  137. package/dist/extensions/BlockOpsExtension.d.ts +17 -0
  138. package/dist/extensions/BlockOpsExtension.d.ts.map +1 -0
  139. package/dist/extensions/BlockOpsExtension.js +248 -0
  140. package/dist/extensions/BlockOpsExtension.js.map +1 -0
  141. package/dist/extensions/ButtonNode.d.ts +7 -0
  142. package/dist/extensions/ButtonNode.d.ts.map +1 -0
  143. package/dist/extensions/ButtonNode.js +59 -0
  144. package/dist/extensions/ButtonNode.js.map +1 -0
  145. package/dist/extensions/CalloutActionsExtension.d.ts +3 -0
  146. package/dist/extensions/CalloutActionsExtension.d.ts.map +1 -0
  147. package/dist/extensions/CalloutActionsExtension.js +41 -0
  148. package/dist/extensions/CalloutActionsExtension.js.map +1 -0
  149. package/dist/extensions/CalloutNode.d.ts +7 -0
  150. package/dist/extensions/CalloutNode.d.ts.map +1 -0
  151. package/dist/extensions/CalloutNode.js +48 -0
  152. package/dist/extensions/CalloutNode.js.map +1 -0
  153. package/dist/extensions/CardNode.d.ts +7 -0
  154. package/dist/extensions/CardNode.d.ts.map +1 -0
  155. package/dist/extensions/CardNode.js +64 -0
  156. package/dist/extensions/CardNode.js.map +1 -0
  157. package/dist/extensions/ChartNode.d.ts +3 -0
  158. package/dist/extensions/ChartNode.d.ts.map +1 -0
  159. package/dist/extensions/ChartNode.js +60 -0
  160. package/dist/extensions/ChartNode.js.map +1 -0
  161. package/dist/extensions/CodeBlockNode.d.ts +7 -0
  162. package/dist/extensions/CodeBlockNode.d.ts.map +1 -0
  163. package/dist/extensions/CodeBlockNode.js +57 -0
  164. package/dist/extensions/CodeBlockNode.js.map +1 -0
  165. package/dist/extensions/CodeReferenceNode.d.ts +3 -0
  166. package/dist/extensions/CodeReferenceNode.d.ts.map +1 -0
  167. package/dist/extensions/CodeReferenceNode.js +46 -0
  168. package/dist/extensions/CodeReferenceNode.js.map +1 -0
  169. package/dist/extensions/DateTimeNode.d.ts +3 -0
  170. package/dist/extensions/DateTimeNode.d.ts.map +1 -0
  171. package/dist/extensions/DateTimeNode.js +43 -0
  172. package/dist/extensions/DateTimeNode.js.map +1 -0
  173. package/dist/extensions/FloatImageBlockNode.d.ts +7 -0
  174. package/dist/extensions/FloatImageBlockNode.d.ts.map +1 -0
  175. package/dist/extensions/FloatImageBlockNode.js +73 -0
  176. package/dist/extensions/FloatImageBlockNode.js.map +1 -0
  177. package/dist/extensions/GridCardNode.d.ts +7 -0
  178. package/dist/extensions/GridCardNode.d.ts.map +1 -0
  179. package/dist/extensions/GridCardNode.js +56 -0
  180. package/dist/extensions/GridCardNode.js.map +1 -0
  181. package/dist/extensions/ImageBlockNode.d.ts +7 -0
  182. package/dist/extensions/ImageBlockNode.d.ts.map +1 -0
  183. package/dist/extensions/ImageBlockNode.js +76 -0
  184. package/dist/extensions/ImageBlockNode.js.map +1 -0
  185. package/dist/extensions/ImageNode.d.ts +10 -0
  186. package/dist/extensions/ImageNode.d.ts.map +1 -0
  187. package/dist/extensions/ImageNode.js +67 -0
  188. package/dist/extensions/ImageNode.js.map +1 -0
  189. package/dist/extensions/JotxLinkNode.d.ts +3 -0
  190. package/dist/extensions/JotxLinkNode.d.ts.map +1 -0
  191. package/dist/extensions/JotxLinkNode.js +43 -0
  192. package/dist/extensions/JotxLinkNode.js.map +1 -0
  193. package/dist/extensions/JotxTable.d.ts +9 -0
  194. package/dist/extensions/JotxTable.d.ts.map +1 -0
  195. package/dist/extensions/JotxTable.js +40 -0
  196. package/dist/extensions/JotxTable.js.map +1 -0
  197. package/dist/extensions/LinkNode.d.ts +7 -0
  198. package/dist/extensions/LinkNode.d.ts.map +1 -0
  199. package/dist/extensions/LinkNode.js +54 -0
  200. package/dist/extensions/LinkNode.js.map +1 -0
  201. package/dist/extensions/MathNode.d.ts +3 -0
  202. package/dist/extensions/MathNode.d.ts.map +1 -0
  203. package/dist/extensions/MathNode.js +61 -0
  204. package/dist/extensions/MathNode.js.map +1 -0
  205. package/dist/extensions/MermaidNode.d.ts +3 -0
  206. package/dist/extensions/MermaidNode.d.ts.map +1 -0
  207. package/dist/extensions/MermaidNode.js +59 -0
  208. package/dist/extensions/MermaidNode.js.map +1 -0
  209. package/dist/extensions/SearchExtension.d.ts +40 -0
  210. package/dist/extensions/SearchExtension.d.ts.map +1 -0
  211. package/dist/extensions/SearchExtension.js +186 -0
  212. package/dist/extensions/SearchExtension.js.map +1 -0
  213. package/dist/extensions/SectionNode.d.ts +11 -0
  214. package/dist/extensions/SectionNode.d.ts.map +1 -0
  215. package/dist/extensions/SectionNode.js +58 -0
  216. package/dist/extensions/SectionNode.js.map +1 -0
  217. package/dist/extensions/SlashMenuExtension.d.ts +17 -0
  218. package/dist/extensions/SlashMenuExtension.d.ts.map +1 -0
  219. package/dist/extensions/SlashMenuExtension.js +146 -0
  220. package/dist/extensions/SlashMenuExtension.js.map +1 -0
  221. package/dist/extensions/SpellCheckExtension.d.ts +14 -0
  222. package/dist/extensions/SpellCheckExtension.d.ts.map +1 -0
  223. package/dist/extensions/SpellCheckExtension.js +278 -0
  224. package/dist/extensions/SpellCheckExtension.js.map +1 -0
  225. package/dist/extensions/TableFilterExtension.d.ts +12 -0
  226. package/dist/extensions/TableFilterExtension.d.ts.map +1 -0
  227. package/dist/extensions/TableFilterExtension.js +75 -0
  228. package/dist/extensions/TableFilterExtension.js.map +1 -0
  229. package/dist/extensions/ToggleNode.d.ts +11 -0
  230. package/dist/extensions/ToggleNode.d.ts.map +1 -0
  231. package/dist/extensions/ToggleNode.js +58 -0
  232. package/dist/extensions/ToggleNode.js.map +1 -0
  233. package/dist/extensions/VideoBlockNode.d.ts +7 -0
  234. package/dist/extensions/VideoBlockNode.d.ts.map +1 -0
  235. package/dist/extensions/VideoBlockNode.js +95 -0
  236. package/dist/extensions/VideoBlockNode.js.map +1 -0
  237. package/dist/extensions/formatting.d.ts +2 -0
  238. package/dist/extensions/formatting.d.ts.map +1 -0
  239. package/dist/extensions/formatting.js +10 -0
  240. package/dist/extensions/formatting.js.map +1 -0
  241. package/dist/index.d.ts +61 -0
  242. package/dist/index.d.ts.map +1 -0
  243. package/dist/index.js +132 -0
  244. package/dist/index.js.map +1 -0
  245. package/dist/services/ImageStorage.d.ts +38 -0
  246. package/dist/services/ImageStorage.d.ts.map +1 -0
  247. package/dist/services/ImageStorage.js +32 -0
  248. package/dist/services/ImageStorage.js.map +1 -0
  249. package/dist/services/SpellCheckService 2.d.ts +50 -0
  250. package/dist/services/SpellCheckService 2.d.ts.map +1 -0
  251. package/dist/services/SpellCheckService 2.js +131 -0
  252. package/dist/services/SpellCheckService 2.js.map +1 -0
  253. package/dist/services/SpellCheckService.d.ts +50 -0
  254. package/dist/services/SpellCheckService.d.ts.map +1 -0
  255. package/dist/services/SpellCheckService.js +131 -0
  256. package/dist/services/SpellCheckService.js.map +1 -0
  257. package/dist/utils/logger.d.ts +14 -0
  258. package/dist/utils/logger.d.ts.map +1 -0
  259. package/dist/utils/logger.js +25 -0
  260. package/dist/utils/logger.js.map +1 -0
  261. package/package.json +56 -0
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BlockOpsExtension = void 0;
4
+ exports.hasBlockInClipboard = hasBlockInClipboard;
5
+ const core_1 = require("@tiptap/core");
6
+ const prosemirror_state_1 = require("prosemirror-state");
7
+ const logger_1 = require("../utils/logger");
8
+ // Store for block-aware clipboard
9
+ let blockClipboard = null;
10
+ function findTopLevelBlockFromState(state) {
11
+ const { selection, doc } = state;
12
+ // Handle NodeSelection (used for atom nodes like images, videos)
13
+ if (selection instanceof prosemirror_state_1.NodeSelection) {
14
+ const node = selection.node;
15
+ const from = selection.from;
16
+ const to = selection.to;
17
+ // Check if this is a top-level node (direct child of doc)
18
+ const $pos = doc.resolve(from);
19
+ if ($pos.depth === 1 || ($pos.parent && $pos.parent.type.name === 'doc')) {
20
+ // It's a top-level node
21
+ const index = $pos.index(0);
22
+ return { depth: 1, index, from, to, node, parent: doc };
23
+ }
24
+ // Walk up to find top-level parent
25
+ for (let d = $pos.depth; d > 0; d--) {
26
+ const parentNode = $pos.node(d - 1);
27
+ if (parentNode && parentNode.type?.name === 'doc') {
28
+ const actualNode = $pos.node(d);
29
+ const index = $pos.index(d - 1);
30
+ const actualFrom = $pos.before(d);
31
+ const actualTo = $pos.after(d);
32
+ return { depth: d, index, from: actualFrom, to: actualTo, node: actualNode, parent: parentNode };
33
+ }
34
+ }
35
+ }
36
+ // Handle TextSelection (normal cursor selection)
37
+ const { $from } = selection;
38
+ // Find a node whose parent is the doc (top-level block)
39
+ for (let d = $from.depth; d > 0; d--) {
40
+ const node = $from.node(d);
41
+ const parent = $from.node(d - 1);
42
+ if (parent && parent.type?.name === 'doc') {
43
+ // CRITICAL FIX: Use $from.index(d - 1) to get the correct index
44
+ // This gives us the index of node at depth d within its parent
45
+ const index = $from.index(d - 1);
46
+ const from = $from.before(d);
47
+ const to = $from.after(d);
48
+ return { depth: d, index, from, to, node, parent };
49
+ }
50
+ }
51
+ return null;
52
+ }
53
+ function moveBlockTr(state, dir) {
54
+ const info = findTopLevelBlockFromState(state);
55
+ if (!info)
56
+ return null;
57
+ const tr = state.tr;
58
+ const parent = info.parent;
59
+ const index = info.index;
60
+ // Validate bounds
61
+ if (dir === 'up' && index <= 0)
62
+ return null;
63
+ if (dir === 'down' && index >= parent.childCount - 1)
64
+ return null;
65
+ const node = info.node;
66
+ const from = info.from;
67
+ const to = info.to;
68
+ if (dir === 'up') {
69
+ // Moving up: swap with previous block
70
+ const prevNode = parent.child(index - 1);
71
+ const prevFrom = from - prevNode.nodeSize;
72
+ // Delete current block first
73
+ tr.delete(from, to);
74
+ // Insert at the position where prev block started
75
+ tr.insert(prevFrom, node);
76
+ // Set cursor to the moved block
77
+ const newPos = prevFrom + 1;
78
+ tr.setSelection(prosemirror_state_1.TextSelection.near(tr.doc.resolve(newPos), 1));
79
+ }
80
+ else {
81
+ // Moving down: swap with next block
82
+ const nextNode = parent.child(index + 1);
83
+ // Delete current block first
84
+ tr.delete(from, to);
85
+ // After deletion, next block shifts to 'from' position
86
+ // Insert after the next block (which is now at 'from')
87
+ const insertPos = from + nextNode.nodeSize;
88
+ tr.insert(insertPos, node);
89
+ // Set cursor to the moved block
90
+ const newPos = insertPos + 1;
91
+ tr.setSelection(prosemirror_state_1.TextSelection.near(tr.doc.resolve(newPos), 1));
92
+ }
93
+ return tr.scrollIntoView();
94
+ }
95
+ function duplicateBlockTr(state) {
96
+ const info = findTopLevelBlockFromState(state);
97
+ if (!info)
98
+ return null;
99
+ const tr = state.tr;
100
+ const node = info.node;
101
+ const insertPos = info.to;
102
+ tr.insert(insertPos, node.copy(node.content));
103
+ tr.setSelection(prosemirror_state_1.TextSelection.near(tr.doc.resolve(insertPos + 1), 1));
104
+ return tr.scrollIntoView();
105
+ }
106
+ function deleteBlockTr(state) {
107
+ const info = findTopLevelBlockFromState(state);
108
+ if (!info)
109
+ return null;
110
+ const tr = state.tr;
111
+ tr.delete(info.from, info.to);
112
+ // Ensure doc is never empty
113
+ if (tr.doc.childCount === 0) {
114
+ tr.insert(0, state.schema.nodes.paragraph.createAndFill());
115
+ }
116
+ tr.setSelection(prosemirror_state_1.TextSelection.near(tr.doc.resolve(Math.min(info.from, tr.doc.content.size)), 1));
117
+ return tr.scrollIntoView();
118
+ }
119
+ function copyBlock(state) {
120
+ const info = findTopLevelBlockFromState(state);
121
+ if (!info)
122
+ return false;
123
+ // Store the actual ProseMirror node for block-aware paste
124
+ blockClipboard = info.node.copy(info.node.content);
125
+ // Also copy as plain text to system clipboard as fallback
126
+ let text = '';
127
+ info.node.descendants((child) => {
128
+ if (child.isText) {
129
+ text += child.text;
130
+ }
131
+ else if (child.isBlock && text.length > 0) {
132
+ text += '\n';
133
+ }
134
+ });
135
+ navigator.clipboard.writeText(text.trim()).catch(err => {
136
+ logger_1.logger.error('Failed to copy to clipboard:', err);
137
+ });
138
+ logger_1.logger.log('✅ Block copied (type:', info.node.type.name, ')');
139
+ return true;
140
+ }
141
+ function pasteBlockTr(state) {
142
+ if (!blockClipboard)
143
+ return null;
144
+ const info = findTopLevelBlockFromState(state);
145
+ if (!info)
146
+ return null;
147
+ const tr = state.tr;
148
+ // Insert the copied block after the current block
149
+ const insertPos = info.to;
150
+ tr.insert(insertPos, blockClipboard.copy(blockClipboard.content));
151
+ tr.setSelection(prosemirror_state_1.TextSelection.near(tr.doc.resolve(insertPos + 1), 1));
152
+ logger_1.logger.log('✅ Block pasted (type:', blockClipboard.type.name, ')');
153
+ return tr.scrollIntoView();
154
+ }
155
+ function hasBlockInClipboard() {
156
+ return blockClipboard !== null;
157
+ }
158
+ exports.BlockOpsExtension = core_1.Extension.create({
159
+ name: 'jotxBlockOps',
160
+ addCommands() {
161
+ return {
162
+ jotxMoveBlockUp: () => ({ state, dispatch }) => {
163
+ const tr = moveBlockTr(state, 'up');
164
+ if (!tr)
165
+ return false;
166
+ dispatch?.(tr);
167
+ return true;
168
+ },
169
+ jotxMoveBlockDown: () => ({ state, dispatch }) => {
170
+ const tr = moveBlockTr(state, 'down');
171
+ if (!tr)
172
+ return false;
173
+ dispatch?.(tr);
174
+ return true;
175
+ },
176
+ jotxDuplicateBlock: () => ({ state, dispatch }) => {
177
+ const tr = duplicateBlockTr(state);
178
+ if (!tr)
179
+ return false;
180
+ dispatch?.(tr);
181
+ return true;
182
+ },
183
+ jotxDeleteBlock: () => ({ state, dispatch }) => {
184
+ const tr = deleteBlockTr(state);
185
+ if (!tr)
186
+ return false;
187
+ dispatch?.(tr);
188
+ return true;
189
+ },
190
+ jotxCopyBlock: () => ({ state }) => {
191
+ return copyBlock(state);
192
+ },
193
+ jotxPasteBlock: () => ({ state, dispatch }) => {
194
+ const tr = pasteBlockTr(state);
195
+ if (!tr)
196
+ return false;
197
+ dispatch?.(tr);
198
+ return true;
199
+ }
200
+ };
201
+ },
202
+ addKeyboardShortcuts() {
203
+ return {
204
+ // Move the current top-level block
205
+ 'Mod-Shift-ArrowUp': () => {
206
+ const tr = moveBlockTr(this.editor.state, 'up');
207
+ if (!tr)
208
+ return false;
209
+ this.editor.view.dispatch(tr);
210
+ return true;
211
+ },
212
+ 'Mod-Shift-ArrowDown': () => {
213
+ const tr = moveBlockTr(this.editor.state, 'down');
214
+ if (!tr)
215
+ return false;
216
+ this.editor.view.dispatch(tr);
217
+ return true;
218
+ },
219
+ // Duplicate current top-level block
220
+ 'Mod-Shift-D': () => {
221
+ const tr = duplicateBlockTr(this.editor.state);
222
+ if (!tr)
223
+ return false;
224
+ this.editor.view.dispatch(tr);
225
+ return true;
226
+ },
227
+ // Delete current top-level block
228
+ 'Mod-Shift-X': () => {
229
+ const tr = deleteBlockTr(this.editor.state);
230
+ if (!tr)
231
+ return false;
232
+ this.editor.view.dispatch(tr);
233
+ return true;
234
+ },
235
+ // Copy block (preserves block type)
236
+ 'Mod-Shift-C': () => copyBlock(this.editor.state),
237
+ // Paste block (preserves block type)
238
+ 'Mod-Shift-V': () => {
239
+ const tr = pasteBlockTr(this.editor.state);
240
+ if (!tr)
241
+ return false;
242
+ this.editor.view.dispatch(tr);
243
+ return true;
244
+ }
245
+ };
246
+ }
247
+ });
248
+ //# sourceMappingURL=BlockOpsExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockOpsExtension.js","sourceRoot":"","sources":["../../src/extensions/BlockOpsExtension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Node } from '@tiptap/core';
2
+ /**
3
+ * Button node for navigation
4
+ * Renders as a clickable button that navigates to linked file
5
+ */
6
+ export declare const ButtonNode: Node<any, any>;
7
+ //# sourceMappingURL=ButtonNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonNode.d.ts","sourceRoot":"","sources":["../../src/extensions/ButtonNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,cAAc,CAAA;AAIpD;;;GAGG;AACH,eAAO,MAAM,UAAU,gBAmDrB,CAAA"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ButtonNode = void 0;
4
+ const core_1 = require("@tiptap/core");
5
+ const react_1 = require("@tiptap/react");
6
+ const ButtonNodeView_1 = require("../components/ButtonNodeView");
7
+ /**
8
+ * Button node for navigation
9
+ * Renders as a clickable button that navigates to linked file
10
+ */
11
+ exports.ButtonNode = core_1.Node.create({
12
+ name: 'button',
13
+ group: 'block',
14
+ content: '',
15
+ defining: true,
16
+ addAttributes() {
17
+ return {
18
+ label: { default: '' },
19
+ link: { default: '' },
20
+ style: { default: 'primary' },
21
+ align: { default: 'left' },
22
+ blockId: { default: null }
23
+ };
24
+ },
25
+ parseHTML() {
26
+ return [
27
+ {
28
+ tag: 'div[data-type="button"]',
29
+ getAttrs: (node) => {
30
+ if (!(node instanceof HTMLElement))
31
+ return false;
32
+ return {
33
+ label: node.getAttribute('data-label') || '',
34
+ link: node.getAttribute('data-link') || '',
35
+ style: node.getAttribute('data-style') || 'primary',
36
+ align: node.getAttribute('data-align') || 'left'
37
+ };
38
+ }
39
+ }
40
+ ];
41
+ },
42
+ renderHTML({ HTMLAttributes }) {
43
+ return [
44
+ 'div',
45
+ (0, core_1.mergeAttributes)(HTMLAttributes, {
46
+ 'data-type': 'button',
47
+ 'data-label': HTMLAttributes.label || '',
48
+ 'data-link': HTMLAttributes.link || '',
49
+ 'data-style': HTMLAttributes.style || 'primary',
50
+ 'data-align': HTMLAttributes.align || 'left'
51
+ }),
52
+ 0
53
+ ];
54
+ },
55
+ addNodeView() {
56
+ return (0, react_1.ReactNodeViewRenderer)(ButtonNodeView_1.ButtonNodeView);
57
+ }
58
+ });
59
+ //# sourceMappingURL=ButtonNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonNode.js","sourceRoot":"","sources":["../../src/extensions/ButtonNode.ts"],"names":[],"mappings":";;;AAAA,uCAAoD;AACpD,yCAAqD;AACrD,iEAA6D;AAE7D;;;GAGG;AACU,QAAA,UAAU,GAAG,WAAI,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,QAAQ;IAEd,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,IAAI;IAEd,aAAa;QACT,OAAO;YACH,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACtB,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACrB,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;YAC7B,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;YAC1B,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SAC7B,CAAA;IACL,CAAC;IAED,SAAS;QACL,OAAO;YACH;gBACI,GAAG,EAAE,yBAAyB;gBAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;oBACf,IAAI,CAAC,CAAC,IAAI,YAAY,WAAW,CAAC;wBAAE,OAAO,KAAK,CAAA;oBAChD,OAAO;wBACH,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE;wBAC5C,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;wBAC1C,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,SAAS;wBACnD,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,MAAM;qBACnD,CAAA;gBACL,CAAC;aACJ;SACJ,CAAA;IACL,CAAC;IAED,UAAU,CAAC,EAAE,cAAc,EAAE;QACzB,OAAO;YACH,KAAK;YACL,IAAA,sBAAe,EAAC,cAAc,EAAE;gBAC5B,WAAW,EAAE,QAAQ;gBACrB,YAAY,EAAE,cAAc,CAAC,KAAK,IAAI,EAAE;gBACxC,WAAW,EAAE,cAAc,CAAC,IAAI,IAAI,EAAE;gBACtC,YAAY,EAAE,cAAc,CAAC,KAAK,IAAI,SAAS;gBAC/C,YAAY,EAAE,cAAc,CAAC,KAAK,IAAI,MAAM;aAC/C,CAAC;YACF,CAAC;SACJ,CAAA;IACL,CAAC;IAED,WAAW;QACP,OAAO,IAAA,6BAAqB,EAAC,+BAAc,CAAC,CAAA;IAChD,CAAC;CACJ,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Extension } from '@tiptap/core';
2
+ export declare const CalloutActionsExtension: Extension<any, any>;
3
+ //# sourceMappingURL=CalloutActionsExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalloutActionsExtension.d.ts","sourceRoot":"","sources":["../../src/extensions/CalloutActionsExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAmBxC,eAAO,MAAM,uBAAuB,qBAqBlC,CAAA"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CalloutActionsExtension = void 0;
4
+ const core_1 = require("@tiptap/core");
5
+ function setVariant(editor, variant) {
6
+ const { state, view } = editor;
7
+ const { $from } = state.selection;
8
+ for (let d = $from.depth; d > 0; d--) {
9
+ const node = $from.node(d);
10
+ if (node.type?.name === 'callout') {
11
+ const pos = $from.before(d);
12
+ const tr = state.tr.setNodeMarkup(pos, undefined, { ...(node.attrs || {}), variant });
13
+ view.dispatch(tr);
14
+ editor.commands.focus();
15
+ return true;
16
+ }
17
+ }
18
+ return false;
19
+ }
20
+ exports.CalloutActionsExtension = core_1.Extension.create({
21
+ name: 'jotxCalloutActions',
22
+ addKeyboardShortcuts() {
23
+ return {
24
+ // Wrap selection in a callout (info)
25
+ 'Mod-Shift-A': () => {
26
+ try {
27
+ return this.editor.chain().focus().wrapIn('callout', { variant: 'info' }).run();
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ },
33
+ // Change callout variant (when cursor is inside a callout)
34
+ 'Mod-Alt-1': () => setVariant(this.editor, 'info'),
35
+ 'Mod-Alt-2': () => setVariant(this.editor, 'warning'),
36
+ 'Mod-Alt-3': () => setVariant(this.editor, 'success'),
37
+ 'Mod-Alt-4': () => setVariant(this.editor, 'danger')
38
+ };
39
+ }
40
+ });
41
+ //# sourceMappingURL=CalloutActionsExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalloutActionsExtension.js","sourceRoot":"","sources":["../../src/extensions/CalloutActionsExtension.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AAExC,SAAS,UAAU,CAAC,MAAW,EAAE,OAAkD;IACjF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,SAAS,CAAA;IAEjC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;YACrF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YACjB,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;YACvB,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAEY,QAAA,uBAAuB,GAAG,gBAAS,CAAC,MAAM,CAAC;IACtD,IAAI,EAAE,oBAAoB;IAE1B,oBAAoB;QAClB,OAAO;YACL,qCAAqC;YACrC,aAAa,EAAE,GAAG,EAAE;gBAClB,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAA;gBACjF,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAA;gBACd,CAAC;YACH,CAAC;YAED,2DAA2D;YAC3D,WAAW,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;YAClD,WAAW,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;YACrD,WAAW,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;YACrD,WAAW,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;SACrD,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { Node } from '@tiptap/core';
2
+ /**
3
+ * Callout block node
4
+ * Renders as: <div data-type="callout" data-variant="info|warning|success|danger">...</div>
5
+ */
6
+ export declare const CalloutNode: Node<any, any>;
7
+ //# sourceMappingURL=CalloutNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalloutNode.d.ts","sourceRoot":"","sources":["../../src/extensions/CalloutNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,cAAc,CAAA;AAEpD;;;GAGG;AACH,eAAO,MAAM,WAAW,gBAyCtB,CAAA"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CalloutNode = void 0;
4
+ const core_1 = require("@tiptap/core");
5
+ /**
6
+ * Callout block node
7
+ * Renders as: <div data-type="callout" data-variant="info|warning|success|danger">...</div>
8
+ */
9
+ exports.CalloutNode = core_1.Node.create({
10
+ name: 'callout',
11
+ group: 'block',
12
+ content: 'block+',
13
+ defining: true,
14
+ addAttributes() {
15
+ return {
16
+ variant: {
17
+ default: 'info'
18
+ }
19
+ };
20
+ },
21
+ parseHTML() {
22
+ return [
23
+ {
24
+ tag: 'div[data-type="callout"]',
25
+ getAttrs: (node) => {
26
+ if (!(node instanceof HTMLElement))
27
+ return false;
28
+ return {
29
+ variant: node.getAttribute('data-variant') || 'info'
30
+ };
31
+ }
32
+ }
33
+ ];
34
+ },
35
+ renderHTML({ HTMLAttributes }) {
36
+ const variant = HTMLAttributes.variant || 'info';
37
+ return [
38
+ 'div',
39
+ (0, core_1.mergeAttributes)(HTMLAttributes, {
40
+ // ensure styling + serializer can read it reliably
41
+ 'data-type': 'callout',
42
+ 'data-variant': variant
43
+ }),
44
+ 0
45
+ ];
46
+ }
47
+ });
48
+ //# sourceMappingURL=CalloutNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalloutNode.js","sourceRoot":"","sources":["../../src/extensions/CalloutNode.ts"],"names":[],"mappings":";;;AAAA,uCAAoD;AAEpD;;;GAGG;AACU,QAAA,WAAW,GAAG,WAAI,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,SAAS;IAEf,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,IAAI;IAEd,aAAa;QACX,OAAO;YACL,OAAO,EAAE;gBACP,OAAO,EAAE,MAAM;aAChB;SACF,CAAA;IACH,CAAC;IAED,SAAS;QACP,OAAO;YACL;gBACE,GAAG,EAAE,0BAA0B;gBAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;oBACjB,IAAI,CAAC,CAAC,IAAI,YAAY,WAAW,CAAC;wBAAE,OAAO,KAAK,CAAA;oBAChD,OAAO;wBACL,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,MAAM;qBACrD,CAAA;gBACH,CAAC;aACF;SACF,CAAA;IACH,CAAC;IAED,UAAU,CAAC,EAAE,cAAc,EAAE;QAC3B,MAAM,OAAO,GAAI,cAAsB,CAAC,OAAO,IAAI,MAAM,CAAA;QACzD,OAAO;YACL,KAAK;YACL,IAAA,sBAAe,EAAC,cAAc,EAAE;gBAC9B,mDAAmD;gBACnD,WAAW,EAAE,SAAS;gBACtB,cAAc,EAAE,OAAO;aACxB,CAAC;YACF,CAAC;SACF,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { Node } from '@tiptap/core';
2
+ /**
3
+ * Card node - child of GridCard
4
+ * Contains title, value, icon, color, link
5
+ */
6
+ export declare const CardNode: Node<any, any>;
7
+ //# sourceMappingURL=CardNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardNode.d.ts","sourceRoot":"","sources":["../../src/extensions/CardNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,cAAc,CAAA;AAIpD;;;GAGG;AACH,eAAO,MAAM,QAAQ,gBAwDnB,CAAA"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CardNode = void 0;
4
+ const core_1 = require("@tiptap/core");
5
+ const react_1 = require("@tiptap/react");
6
+ const CardNodeView_1 = require("../components/CardNodeView");
7
+ /**
8
+ * Card node - child of GridCard
9
+ * Contains title, value, icon, color, link
10
+ */
11
+ exports.CardNode = core_1.Node.create({
12
+ name: 'card',
13
+ // NOT in 'block' group - cards are only children of gridcard, not standalone
14
+ content: '',
15
+ defining: false,
16
+ selectable: false, // Don't allow individual card selection
17
+ draggable: false, // Cards can't be dragged individually
18
+ addAttributes() {
19
+ return {
20
+ title: { default: '' },
21
+ value: { default: '' },
22
+ icon: { default: '' },
23
+ color: { default: 'teal' },
24
+ link: { default: '' },
25
+ blockId: { default: null }
26
+ };
27
+ },
28
+ parseHTML() {
29
+ return [
30
+ {
31
+ tag: 'div[data-type="card"]',
32
+ getAttrs: (node) => {
33
+ if (!(node instanceof HTMLElement))
34
+ return false;
35
+ return {
36
+ title: node.getAttribute('data-title') || '',
37
+ value: node.getAttribute('data-value') || '',
38
+ icon: node.getAttribute('data-icon') || '',
39
+ color: node.getAttribute('data-color') || 'teal',
40
+ link: node.getAttribute('data-link') || ''
41
+ };
42
+ }
43
+ }
44
+ ];
45
+ },
46
+ renderHTML({ HTMLAttributes }) {
47
+ return [
48
+ 'div',
49
+ (0, core_1.mergeAttributes)(HTMLAttributes, {
50
+ 'data-type': 'card',
51
+ 'data-title': HTMLAttributes.title || '',
52
+ 'data-value': HTMLAttributes.value || '',
53
+ 'data-icon': HTMLAttributes.icon || '',
54
+ 'data-color': HTMLAttributes.color || 'teal',
55
+ 'data-link': HTMLAttributes.link || ''
56
+ }),
57
+ 0
58
+ ];
59
+ },
60
+ addNodeView() {
61
+ return (0, react_1.ReactNodeViewRenderer)(CardNodeView_1.CardNodeView);
62
+ }
63
+ });
64
+ //# sourceMappingURL=CardNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardNode.js","sourceRoot":"","sources":["../../src/extensions/CardNode.ts"],"names":[],"mappings":";;;AAAA,uCAAoD;AACpD,yCAAqD;AACrD,6DAAyD;AAEzD;;;GAGG;AACU,QAAA,QAAQ,GAAG,WAAI,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,MAAM;IAEZ,6EAA6E;IAC7E,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,KAAK;IACf,UAAU,EAAE,KAAK,EAAE,wCAAwC;IAC3D,SAAS,EAAE,KAAK,EAAG,sCAAsC;IAEzD,aAAa;QACT,OAAO;YACH,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACtB,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACtB,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACrB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;YAC1B,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACrB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SAC7B,CAAA;IACL,CAAC;IAED,SAAS;QACL,OAAO;YACH;gBACI,GAAG,EAAE,uBAAuB;gBAC5B,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;oBACf,IAAI,CAAC,CAAC,IAAI,YAAY,WAAW,CAAC;wBAAE,OAAO,KAAK,CAAA;oBAChD,OAAO;wBACH,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE;wBAC5C,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE;wBAC5C,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;wBAC1C,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,MAAM;wBAChD,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;qBAC7C,CAAA;gBACL,CAAC;aACJ;SACJ,CAAA;IACL,CAAC;IAED,UAAU,CAAC,EAAE,cAAc,EAAE;QACzB,OAAO;YACH,KAAK;YACL,IAAA,sBAAe,EAAC,cAAc,EAAE;gBAC5B,WAAW,EAAE,MAAM;gBACnB,YAAY,EAAE,cAAc,CAAC,KAAK,IAAI,EAAE;gBACxC,YAAY,EAAE,cAAc,CAAC,KAAK,IAAI,EAAE;gBACxC,WAAW,EAAE,cAAc,CAAC,IAAI,IAAI,EAAE;gBACtC,YAAY,EAAE,cAAc,CAAC,KAAK,IAAI,MAAM;gBAC5C,WAAW,EAAE,cAAc,CAAC,IAAI,IAAI,EAAE;aACzC,CAAC;YACF,CAAC;SACJ,CAAA;IACL,CAAC;IAED,WAAW;QACP,OAAO,IAAA,6BAAqB,EAAC,2BAAY,CAAC,CAAA;IAC9C,CAAC;CACJ,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Node } from '@tiptap/core';
2
+ export declare const ChartNode: Node<any, any>;
3
+ //# sourceMappingURL=ChartNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartNode.d.ts","sourceRoot":"","sources":["../../src/extensions/ChartNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,cAAc,CAAA;AAIpD,eAAO,MAAM,SAAS,gBAwDpB,CAAA"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChartNode = void 0;
4
+ const core_1 = require("@tiptap/core");
5
+ const react_1 = require("@tiptap/react");
6
+ const ChartNodeView_1 = require("../components/ChartNodeView");
7
+ exports.ChartNode = core_1.Node.create({
8
+ name: 'chart',
9
+ group: 'block',
10
+ atom: true,
11
+ isolating: true,
12
+ addAttributes() {
13
+ return {
14
+ title: {
15
+ default: '',
16
+ parseHTML: (element) => element.getAttribute('data-title') || ''
17
+ },
18
+ chartType: {
19
+ default: 'bar',
20
+ parseHTML: (element) => element.getAttribute('data-chart-type') || 'bar'
21
+ },
22
+ json: {
23
+ default: '',
24
+ parseHTML: (element) => {
25
+ const script = element.querySelector?.('script[type="application/json"]');
26
+ const raw = script?.textContent || '';
27
+ // Auto-repair older saves where JSON was HTML-escaped into entities.
28
+ return raw
29
+ .replace(/&quot;/g, '"')
30
+ .replace(/&#0?39;/g, "'")
31
+ .replace(/&gt;/g, '>')
32
+ .replace(/&lt;/g, '<')
33
+ .replace(/&amp;/g, '&');
34
+ }
35
+ },
36
+ showSource: {
37
+ default: false,
38
+ parseHTML: (element) => element.getAttribute('data-show-source') === 'true'
39
+ }
40
+ };
41
+ },
42
+ parseHTML() {
43
+ return [{ tag: 'div[data-type="chart"]' }];
44
+ },
45
+ renderHTML({ node, HTMLAttributes }) {
46
+ return [
47
+ 'div',
48
+ (0, core_1.mergeAttributes)(HTMLAttributes, {
49
+ 'data-type': 'chart',
50
+ 'data-chart-type': (node.attrs.chartType || 'bar').toString(),
51
+ 'data-show-source': (node.attrs.showSource || false).toString()
52
+ }),
53
+ ['script', { type: 'application/json' }, (node.attrs.json || '').toString()]
54
+ ];
55
+ },
56
+ addNodeView() {
57
+ return (0, react_1.ReactNodeViewRenderer)(ChartNodeView_1.ChartNodeView);
58
+ }
59
+ });
60
+ //# sourceMappingURL=ChartNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartNode.js","sourceRoot":"","sources":["../../src/extensions/ChartNode.ts"],"names":[],"mappings":";;;AAAA,uCAAoD;AACpD,yCAAqD;AACrD,+DAA2D;AAE9C,QAAA,SAAS,GAAG,WAAI,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,IAAI;IAEf,aAAa;QACX,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE;aACjE;YACD,SAAS,EAAE;gBACT,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,KAAK;aACzE;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;oBACrB,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,iCAAiC,CAA6B,CAAA;oBACrG,MAAM,GAAG,GAAG,MAAM,EAAE,WAAW,IAAI,EAAE,CAAA;oBACrC,qEAAqE;oBACrE,OAAO,GAAG;yBACP,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;yBACvB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;yBACxB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;yBACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;yBACrB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;gBAC3B,CAAC;aACF;YACD,UAAU,EAAE;gBACV,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,MAAM;aAC5E;SACF,CAAA;IACH,CAAC;IAED,SAAS;QACP,OAAO,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;QACjC,OAAO;YACL,KAAK;YACL,IAAA,sBAAe,EAAC,cAAc,EAAE;gBAC9B,WAAW,EAAE,OAAO;gBACpB,iBAAiB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE;gBAC7D,kBAAkB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE;aAChE,CAAC;YACF,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;SAC7E,CAAA;IACH,CAAC;IAED,WAAW;QACT,OAAO,IAAA,6BAAqB,EAAC,6BAAa,CAAC,CAAA;IAC7C,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Code block with:
3
+ * - persistent `language` attribute (roundtrips via <code class="language-...">)
4
+ * - NodeView UI header (language selector + copy)
5
+ */
6
+ export declare const CodeBlockNode: import("@tiptap/core").Node<import("@tiptap/extension-code-block").CodeBlockOptions, any>;
7
+ //# sourceMappingURL=CodeBlockNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeBlockNode.d.ts","sourceRoot":"","sources":["../../src/extensions/CodeBlockNode.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,eAAO,MAAM,aAAa,2FA2CxB,CAAA"}