@oml/markdown 0.9.0 → 0.11.0
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/out/md/md-executor.js +2 -9
- package/out/md/md-executor.js.map +1 -1
- package/out/md/md-runtime.js +2 -26
- package/out/md/md-runtime.js.map +1 -1
- package/out/renderers/chart-renderer.js +72 -4
- package/out/renderers/chart-renderer.js.map +1 -1
- package/out/renderers/diagram-renderer.js +738 -252
- package/out/renderers/diagram-renderer.js.map +1 -1
- package/out/renderers/graph-renderer.js +5 -9
- package/out/renderers/graph-renderer.js.map +1 -1
- package/out/renderers/renderer.d.ts +3 -0
- package/out/renderers/renderer.js +53 -0
- package/out/renderers/renderer.js.map +1 -1
- package/out/renderers/table-renderer.d.ts +8 -1
- package/out/renderers/table-renderer.js +22 -1
- package/out/renderers/table-renderer.js.map +1 -1
- package/out/renderers/text-renderer.d.ts +0 -1
- package/out/renderers/text-renderer.js +2 -9
- package/out/renderers/text-renderer.js.map +1 -1
- package/out/renderers/wikilink-utils.js +3 -10
- package/out/renderers/wikilink-utils.js.map +1 -1
- package/out/static/browser-runtime.bundle.js +1591 -6408
- package/out/static/browser-runtime.bundle.js.map +4 -4
- package/out/static/browser-runtime.js +3 -0
- package/out/static/browser-runtime.js.map +1 -1
- package/package.json +2 -2
- package/src/md/md-executor.ts +2 -9
- package/src/md/md-runtime.ts +2 -28
- package/src/renderers/chart-renderer.ts +93 -2
- package/src/renderers/diagram-renderer.ts +799 -258
- package/src/renderers/graph-renderer.ts +5 -9
- package/src/renderers/renderer.ts +66 -0
- package/src/renderers/table-renderer.ts +39 -3
- package/src/renderers/text-renderer.ts +2 -7
- package/src/renderers/wikilink-utils.ts +4 -10
- package/src/static/browser-runtime.ts +3 -0
- package/src/static/markdown-webview.css +1361 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Copyright (c) 2026 Modelware. All rights reserved.
|
|
2
2
|
import { createMarkdownRendererRegistry } from '../renderers/registry.js';
|
|
3
|
+
import { setIriLabelSnapshot } from '../renderers/renderer.js';
|
|
3
4
|
const SUPPORTED = new Set(['table', 'tree', 'graph', 'chart', 'diagram', 'list', 'text', 'matrix', 'table-editor']);
|
|
4
5
|
function parseJsonNode(id, fallback) {
|
|
5
6
|
const node = document.getElementById(id);
|
|
@@ -174,6 +175,8 @@ async function applyExecutionResults() {
|
|
|
174
175
|
const wikilinkIndex = parseJsonNode('oml-md-wikilink-index', {});
|
|
175
176
|
const iriAliasIndex = parseJsonNode('oml-md-wikilink-iri-aliases', {});
|
|
176
177
|
const wikilinkConfig = parseJsonNode('oml-md-wikilink-config', { linkingEnabled: false });
|
|
178
|
+
const memberLabelSnapshot = parseJsonNode('oml-md-member-labels', {});
|
|
179
|
+
setIriLabelSnapshot(memberLabelSnapshot);
|
|
177
180
|
const linkingEnabled = Boolean(wikilinkConfig?.linkingEnabled);
|
|
178
181
|
// Resolve wikilinks in regular markdown content (outside code-block panels).
|
|
179
182
|
applyWikilinks(document, wikilinkIndex, iriAliasIndex, linkingEnabled);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-runtime.js","sourceRoot":"","sources":["../../src/static/browser-runtime.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-runtime.js","sourceRoot":"","sources":["../../src/static/browser-runtime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oml/markdown",
|
|
3
3
|
"description": "Markdown runtime and execution contracts for OML",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=20.10.0",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@antv/x6": "^3.1.6",
|
|
58
58
|
"@dagrejs/dagre": "^2.0.4",
|
|
59
|
-
"@oml/owl": "0.
|
|
59
|
+
"@oml/owl": "0.11.0",
|
|
60
60
|
"chart.js": "^4.4.0",
|
|
61
61
|
"markdown-it": "^14.1.1",
|
|
62
62
|
"reflect-metadata": "^0.2.2",
|
package/src/md/md-executor.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { deriveSelectQueryFromShape, type OwlConstructResult, type OwlQueryResult } from '@oml/owl';
|
|
4
4
|
import type { Term } from '@rdfjs/types';
|
|
5
|
+
import { displayLabelFromIri } from '../renderers/renderer.js';
|
|
5
6
|
import type { MdBlockExecutionResult, MdExecuteBlocksParams, MdExecuteBlocksResult } from './md-execution.js';
|
|
6
7
|
|
|
7
8
|
export interface MarkdownExecutionBackend {
|
|
@@ -582,15 +583,7 @@ function uniqueVariableName(base: string, used: ReadonlySet<string>): string {
|
|
|
582
583
|
}
|
|
583
584
|
|
|
584
585
|
function localName(iri: string): string {
|
|
585
|
-
|
|
586
|
-
if (hash >= 0 && hash < iri.length - 1) {
|
|
587
|
-
return iri.slice(hash + 1);
|
|
588
|
-
}
|
|
589
|
-
const slash = iri.lastIndexOf('/');
|
|
590
|
-
if (slash >= 0 && slash < iri.length - 1) {
|
|
591
|
-
return iri.slice(slash + 1);
|
|
592
|
-
}
|
|
593
|
-
return iri;
|
|
586
|
+
return displayLabelFromIri(iri);
|
|
594
587
|
}
|
|
595
588
|
|
|
596
589
|
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
package/src/md/md-runtime.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import MarkdownIt from 'markdown-it';
|
|
4
4
|
import type { RuleInline } from 'markdown-it/lib/parser_inline.mjs';
|
|
5
|
+
import { displayLabelFromIri } from '../renderers/renderer.js';
|
|
5
6
|
import { extractLeadingFrontMatter, stripLeadingFrontMatter } from './md-frontmatter.js';
|
|
6
7
|
import { MarkdownHandlerRegistry } from './md-registry.js';
|
|
7
8
|
import { parseYamlMap } from './md-yaml.js';
|
|
@@ -97,7 +98,7 @@ const wikilinkRule: RuleInline = (state, silent): boolean => {
|
|
|
97
98
|
}
|
|
98
99
|
|
|
99
100
|
if (!silent) {
|
|
100
|
-
const label =
|
|
101
|
+
const label = displayLabelFromIri(iri);
|
|
101
102
|
const open = state.push('link_open', 'a', 1);
|
|
102
103
|
open.attrSet('class', 'wikilink');
|
|
103
104
|
open.attrSet('iri', iri);
|
|
@@ -114,33 +115,6 @@ const wikilinkRule: RuleInline = (state, silent): boolean => {
|
|
|
114
115
|
return true;
|
|
115
116
|
};
|
|
116
117
|
|
|
117
|
-
function deriveWikiLabel(iri: string): string {
|
|
118
|
-
const normalized = iri.trim().replace(/^<|>$/g, '');
|
|
119
|
-
if (!normalized) {
|
|
120
|
-
return iri;
|
|
121
|
-
}
|
|
122
|
-
const fragment = normalized.split('#').pop() ?? '';
|
|
123
|
-
if (fragment && normalized.includes('#')) {
|
|
124
|
-
return decodeLabelPart(fragment);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const withoutQuery = normalized.split('?')[0];
|
|
128
|
-
const pathParts = withoutQuery.replace(/\/+$/, '').split('/');
|
|
129
|
-
const lastSegment = pathParts[pathParts.length - 1] ?? '';
|
|
130
|
-
if (lastSegment) {
|
|
131
|
-
return decodeLabelPart(lastSegment);
|
|
132
|
-
}
|
|
133
|
-
return normalized;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
function decodeLabelPart(value: string): string {
|
|
137
|
-
try {
|
|
138
|
-
return decodeURIComponent(value);
|
|
139
|
-
} catch {
|
|
140
|
-
return value;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
118
|
function parseBlockOptions(content: string): { content: string; options?: Record<string, unknown> } {
|
|
145
119
|
const normalized = content.replace(/^\uFEFF/, '');
|
|
146
120
|
const match = /^(---\s*\r?\n[\s\S]*?\r?\n---\s*\r?\n?)([\s\S]*)$/.exec(normalized);
|
|
@@ -76,7 +76,15 @@ export class ChartMarkdownBlockRenderer extends QueryMarkdownBlockRenderer {
|
|
|
76
76
|
const canvasEl = document.createElement('canvas');
|
|
77
77
|
chartRoot.appendChild(canvasEl);
|
|
78
78
|
|
|
79
|
-
initializeChartWhenReady(
|
|
79
|
+
initializeChartWhenReady(
|
|
80
|
+
chartRoot,
|
|
81
|
+
canvasEl,
|
|
82
|
+
payload.columns,
|
|
83
|
+
payload.rows,
|
|
84
|
+
parsed,
|
|
85
|
+
container,
|
|
86
|
+
(content) => this.requestTextFileDownload(content, 'chart', 'csv')
|
|
87
|
+
);
|
|
80
88
|
|
|
81
89
|
return container;
|
|
82
90
|
}
|
|
@@ -91,6 +99,7 @@ function initializeChartWhenReady(
|
|
|
91
99
|
rows: string[][],
|
|
92
100
|
parsed: ParsedChartOptions,
|
|
93
101
|
messageContainer: HTMLElement,
|
|
102
|
+
downloadCsv: (content: string) => void,
|
|
94
103
|
): void {
|
|
95
104
|
const maxAttempts = 20;
|
|
96
105
|
let attempts = 0;
|
|
@@ -100,7 +109,7 @@ function initializeChartWhenReady(
|
|
|
100
109
|
if (attempts < maxAttempts) requestAnimationFrame(tryInit);
|
|
101
110
|
return;
|
|
102
111
|
}
|
|
103
|
-
void doChartInit(chartRoot, canvasEl, columns, rows, parsed).catch((err) => {
|
|
112
|
+
void doChartInit(chartRoot, canvasEl, columns, rows, parsed, downloadCsv).catch((err) => {
|
|
104
113
|
const detail = err instanceof Error ? err.message : String(err);
|
|
105
114
|
const msg = document.createElement('div');
|
|
106
115
|
msg.className = 'oml-md-result-message';
|
|
@@ -117,6 +126,7 @@ async function doChartInit(
|
|
|
117
126
|
columns: string[],
|
|
118
127
|
rows: string[][],
|
|
119
128
|
parsed: ParsedChartOptions,
|
|
129
|
+
downloadCsv: (content: string) => void,
|
|
120
130
|
): Promise<void> {
|
|
121
131
|
const ChartCtor = await loadChartJs();
|
|
122
132
|
let chart: any = null;
|
|
@@ -131,6 +141,7 @@ async function doChartInit(
|
|
|
131
141
|
};
|
|
132
142
|
|
|
133
143
|
buildAndRender();
|
|
144
|
+
installChartToolbar(chartRoot, columns, rows, downloadCsv);
|
|
134
145
|
|
|
135
146
|
// Resize the canvas whenever the host element resizes.
|
|
136
147
|
const resizeObserver = new ResizeObserver(() => {
|
|
@@ -215,6 +226,86 @@ async function doChartInit(
|
|
|
215
226
|
resizeHandle.addEventListener('pointercancel', onResizePointerEnd);
|
|
216
227
|
}
|
|
217
228
|
|
|
229
|
+
function installChartToolbar(
|
|
230
|
+
chartRoot: HTMLElement,
|
|
231
|
+
columns: string[],
|
|
232
|
+
rows: string[][],
|
|
233
|
+
downloadCsv: (content: string) => void
|
|
234
|
+
): void {
|
|
235
|
+
if (chartRoot.querySelector('.graph-corner-toolbar')) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
const hotspot = document.createElement('div');
|
|
240
|
+
hotspot.className = 'graph-corner-hotspot';
|
|
241
|
+
chartRoot.appendChild(hotspot);
|
|
242
|
+
|
|
243
|
+
const toolbar = document.createElement('div');
|
|
244
|
+
toolbar.className = 'graph-corner-toolbar';
|
|
245
|
+
const downloadButton = createDownloadButton();
|
|
246
|
+
downloadButton.addEventListener('click', () => {
|
|
247
|
+
downloadCsv(toCsv(columns, rows));
|
|
248
|
+
});
|
|
249
|
+
toolbar.appendChild(downloadButton);
|
|
250
|
+
chartRoot.appendChild(toolbar);
|
|
251
|
+
|
|
252
|
+
let hideTimer = 0;
|
|
253
|
+
const showToolbar = () => {
|
|
254
|
+
if (hideTimer) {
|
|
255
|
+
window.clearTimeout(hideTimer);
|
|
256
|
+
hideTimer = 0;
|
|
257
|
+
}
|
|
258
|
+
chartRoot.classList.add('graph-toolbar-visible');
|
|
259
|
+
};
|
|
260
|
+
const scheduleHideToolbar = () => {
|
|
261
|
+
hideTimer = window.setTimeout(() => {
|
|
262
|
+
chartRoot.classList.remove('graph-toolbar-visible');
|
|
263
|
+
hideTimer = 0;
|
|
264
|
+
}, 120);
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
hotspot.addEventListener('mouseenter', showToolbar);
|
|
268
|
+
toolbar.addEventListener('mouseenter', showToolbar);
|
|
269
|
+
hotspot.addEventListener('mouseleave', scheduleHideToolbar);
|
|
270
|
+
toolbar.addEventListener('mouseleave', scheduleHideToolbar);
|
|
271
|
+
|
|
272
|
+
const swallowPointer = (event: Event) => {
|
|
273
|
+
event.stopPropagation();
|
|
274
|
+
};
|
|
275
|
+
toolbar.addEventListener('pointerdown', swallowPointer, true);
|
|
276
|
+
toolbar.addEventListener('mousedown', swallowPointer, true);
|
|
277
|
+
downloadButton.addEventListener('pointerdown', swallowPointer, true);
|
|
278
|
+
downloadButton.addEventListener('mousedown', swallowPointer, true);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function createDownloadButton(): HTMLButtonElement {
|
|
282
|
+
const downloadButton = document.createElement('button');
|
|
283
|
+
downloadButton.className = 'tree-download-btn';
|
|
284
|
+
downloadButton.title = 'Download CSV';
|
|
285
|
+
downloadButton.setAttribute('aria-label', 'Download CSV');
|
|
286
|
+
const iconSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
287
|
+
iconSvg.setAttribute('viewBox', '0 0 24 24');
|
|
288
|
+
iconSvg.setAttribute('width', '20');
|
|
289
|
+
iconSvg.setAttribute('height', '20');
|
|
290
|
+
iconSvg.setAttribute('aria-hidden', 'true');
|
|
291
|
+
iconSvg.setAttribute('focusable', 'false');
|
|
292
|
+
iconSvg.style.fill = 'currentColor';
|
|
293
|
+
const iconPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');
|
|
294
|
+
iconPath.setAttribute('d', 'M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z');
|
|
295
|
+
iconSvg.appendChild(iconPath);
|
|
296
|
+
downloadButton.appendChild(iconSvg);
|
|
297
|
+
return downloadButton;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
function toCsv(columns: string[], rows: string[][]): string {
|
|
301
|
+
const escape = (value: string): string => `"${String(value ?? '').replace(/"/g, '""')}"`;
|
|
302
|
+
const lines = [columns.map(escape).join(',')];
|
|
303
|
+
for (const row of rows) {
|
|
304
|
+
lines.push(columns.map((_, index) => escape(row[index] ?? '')).join(','));
|
|
305
|
+
}
|
|
306
|
+
return lines.join('\n');
|
|
307
|
+
}
|
|
308
|
+
|
|
218
309
|
// --- Chart.js loader ---
|
|
219
310
|
|
|
220
311
|
async function loadChartJs(): Promise<new (canvas: HTMLCanvasElement, config: unknown) => any> {
|