@oml/markdown 0.8.0 → 0.10.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.
Files changed (33) hide show
  1. package/out/md/md-executor.js +2 -9
  2. package/out/md/md-executor.js.map +1 -1
  3. package/out/md/md-runtime.js +2 -26
  4. package/out/md/md-runtime.js.map +1 -1
  5. package/out/renderers/diagram-renderer.js +2 -8
  6. package/out/renderers/diagram-renderer.js.map +1 -1
  7. package/out/renderers/graph-renderer.js +5 -9
  8. package/out/renderers/graph-renderer.js.map +1 -1
  9. package/out/renderers/renderer.d.ts +3 -0
  10. package/out/renderers/renderer.js +53 -0
  11. package/out/renderers/renderer.js.map +1 -1
  12. package/out/renderers/table-renderer.d.ts +0 -1
  13. package/out/renderers/table-renderer.js.map +1 -1
  14. package/out/renderers/text-renderer.d.ts +0 -1
  15. package/out/renderers/text-renderer.js +2 -9
  16. package/out/renderers/text-renderer.js.map +1 -1
  17. package/out/renderers/wikilink-utils.js +3 -10
  18. package/out/renderers/wikilink-utils.js.map +1 -1
  19. package/out/static/browser-runtime.bundle.js +788 -6169
  20. package/out/static/browser-runtime.bundle.js.map +4 -4
  21. package/out/static/browser-runtime.js +3 -0
  22. package/out/static/browser-runtime.js.map +1 -1
  23. package/package.json +2 -2
  24. package/src/md/md-executor.ts +2 -9
  25. package/src/md/md-runtime.ts +2 -28
  26. package/src/renderers/diagram-renderer.ts +2 -6
  27. package/src/renderers/graph-renderer.ts +5 -9
  28. package/src/renderers/renderer.ts +66 -0
  29. package/src/renderers/table-renderer.ts +0 -1
  30. package/src/renderers/text-renderer.ts +2 -7
  31. package/src/renderers/wikilink-utils.ts +4 -10
  32. package/src/static/browser-runtime.ts +3 -0
  33. package/src/static/markdown-webview.css +1361 -0
@@ -0,0 +1,1361 @@
1
+ /* Copyright (c) 2026 Modelware. All rights reserved. */
2
+
3
+ html,
4
+ body {
5
+ font-family: var(--markdown-font-family, -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", system-ui, "Ubuntu", "Droid Sans", sans-serif);
6
+ font-size: var(--markdown-font-size, 14px);
7
+ padding: 0 26px;
8
+ line-height: var(--markdown-line-height, 22px);
9
+ word-wrap: break-word;
10
+ color: var(--vscode-editor-foreground, var(--oml-static-foreground, #24292f));
11
+ background: var(--vscode-editor-background, var(--oml-static-background, #ffffff));
12
+ }
13
+
14
+ body {
15
+ padding-top: 1em;
16
+ }
17
+
18
+ /* Static-page theme tokens used by renderers when VS Code tokens are unavailable. */
19
+ :root {
20
+ --oml-static-foreground: #24292f;
21
+ --oml-static-background: #ffffff;
22
+ --oml-static-muted: #57606a;
23
+ --oml-static-border: #d0d7de;
24
+ --oml-static-link: #0969da;
25
+ }
26
+
27
+ @media (prefers-color-scheme: dark) {
28
+ :root {
29
+ --oml-static-foreground: #e6edf3;
30
+ --oml-static-background: #0d1117;
31
+ --oml-static-muted: #8b949e;
32
+ --oml-static-border: #30363d;
33
+ --oml-static-link: #58a6ff;
34
+ }
35
+ }
36
+
37
+ h1,
38
+ h2,
39
+ h3,
40
+ h4,
41
+ h5,
42
+ h6,
43
+ p,
44
+ ol,
45
+ ul,
46
+ pre {
47
+ margin-top: 0;
48
+ }
49
+
50
+ h1,
51
+ h2,
52
+ h3,
53
+ h4,
54
+ h5,
55
+ h6 {
56
+ font-weight: 600;
57
+ margin-top: 24px;
58
+ margin-bottom: 16px;
59
+ line-height: 1.25;
60
+ }
61
+
62
+ #code-csp-warning {
63
+ position: fixed;
64
+ top: 0;
65
+ right: 0;
66
+ color: #fff;
67
+ margin: 16px;
68
+ text-align: center;
69
+ font-size: 12px;
70
+ font-family: sans-serif;
71
+ background-color: #444;
72
+ cursor: pointer;
73
+ padding: 6px;
74
+ box-shadow: 1px 1px 1px rgb(0 0 0 / 25%);
75
+ }
76
+
77
+ #code-csp-warning:hover {
78
+ text-decoration: none;
79
+ background-color: #007acc;
80
+ box-shadow: 2px 2px 2px rgb(0 0 0 / 25%);
81
+ }
82
+
83
+ body.scrollBeyondLastLine {
84
+ margin-bottom: calc(100vh - 22px);
85
+ }
86
+
87
+ body.showEditorSelection .code-line {
88
+ position: relative;
89
+ }
90
+
91
+ body.showEditorSelection :not(tr, ul, ol).code-active-line::before,
92
+ body.showEditorSelection :not(tr, ul, ol).code-line:hover::before {
93
+ content: "";
94
+ display: block;
95
+ position: absolute;
96
+ top: 0;
97
+ left: -12px;
98
+ height: 100%;
99
+ }
100
+
101
+ .vscode-high-contrast.showEditorSelection :not(tr, ul, ol).code-line .code-line:hover::before {
102
+ border-left: none;
103
+ }
104
+
105
+ body.showEditorSelection li.code-active-line::before,
106
+ body.showEditorSelection li.code-line:hover::before {
107
+ left: -30px;
108
+ }
109
+
110
+ .vscode-light.showEditorSelection .code-active-line::before {
111
+ border-left: 3px solid rgb(0 0 0 / 15%);
112
+ }
113
+
114
+ .vscode-light.showEditorSelection .code-line:hover::before {
115
+ border-left: 3px solid rgb(0 0 0 / 40%);
116
+ }
117
+
118
+ .vscode-dark.showEditorSelection .code-active-line::before {
119
+ border-left: 3px solid rgb(255 255 255 / 40%);
120
+ }
121
+
122
+ .vscode-dark.showEditorSelection .code-line:hover::before {
123
+ border-left: 3px solid rgb(255 255 255 / 60%);
124
+ }
125
+
126
+ .vscode-high-contrast.showEditorSelection .code-active-line::before {
127
+ border-left: 3px solid rgb(255 160 0 / 70%);
128
+ }
129
+
130
+ .vscode-high-contrast.showEditorSelection .code-line:hover::before {
131
+ border-left: 3px solid rgb(255 160 0);
132
+ }
133
+
134
+ sub,
135
+ sup {
136
+ line-height: 0;
137
+ }
138
+
139
+ ul ul:first-child,
140
+ ul ol:first-child,
141
+ ol ul:first-child,
142
+ ol ol:first-child {
143
+ margin-bottom: 0;
144
+ }
145
+
146
+ img,
147
+ video {
148
+ max-width: 100%;
149
+ max-height: 100%;
150
+ }
151
+
152
+ a {
153
+ color: var(--vscode-textLink-foreground);
154
+ text-decoration: none;
155
+ }
156
+
157
+ a:hover {
158
+ text-decoration: underline;
159
+ }
160
+
161
+ a:focus,
162
+ input:focus,
163
+ select:focus,
164
+ textarea:focus {
165
+ outline: 1px solid -webkit-focus-ring-color;
166
+ outline-offset: -1px;
167
+ }
168
+
169
+ p {
170
+ margin-bottom: 16px;
171
+ }
172
+
173
+ li p {
174
+ margin-bottom: 0.7em;
175
+ }
176
+
177
+ ul,
178
+ ol {
179
+ margin-bottom: 0.7em;
180
+ }
181
+
182
+ hr {
183
+ border: 0;
184
+ height: 1px;
185
+ border-bottom: 1px solid;
186
+ }
187
+
188
+ h1 {
189
+ font-size: 2em;
190
+ margin-top: 0;
191
+ padding-bottom: 0.3em;
192
+ border-bottom-width: 1px;
193
+ border-bottom-style: solid;
194
+ }
195
+
196
+ h2 {
197
+ font-size: 1.5em;
198
+ padding-bottom: 0.3em;
199
+ border-bottom-width: 1px;
200
+ border-bottom-style: solid;
201
+ }
202
+
203
+ h3 {
204
+ font-size: 1.25em;
205
+ }
206
+
207
+ h4 {
208
+ font-size: 1em;
209
+ }
210
+
211
+ h5 {
212
+ font-size: 0.875em;
213
+ }
214
+
215
+ h6 {
216
+ font-size: 0.85em;
217
+ }
218
+
219
+ table {
220
+ border-collapse: collapse;
221
+ margin-bottom: 0.7em;
222
+ }
223
+
224
+ th {
225
+ text-align: left;
226
+ border-bottom: 1px solid;
227
+ }
228
+
229
+ th,
230
+ td {
231
+ padding: 5px 10px;
232
+ }
233
+
234
+ table > tbody > tr + tr > td {
235
+ border-top: 1px solid;
236
+ }
237
+
238
+ blockquote {
239
+ margin: 0;
240
+ padding: 0 16px 0 10px;
241
+ border-left-width: 5px;
242
+ border-left-style: solid;
243
+ border-radius: 2px;
244
+ }
245
+
246
+ code {
247
+ font-family: var(--vscode-editor-font-family, "SF Mono", Monaco, Menlo, Consolas, "Ubuntu Mono", "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace);
248
+ font-size: 1em;
249
+ line-height: 1.357em;
250
+ }
251
+
252
+ body.wordWrap pre {
253
+ white-space: pre-wrap;
254
+ }
255
+
256
+ pre:not(.hljs),
257
+ pre.hljs code > div {
258
+ padding: 16px;
259
+ border-radius: 3px;
260
+ overflow: auto;
261
+ }
262
+
263
+ pre code {
264
+ display: inline-block;
265
+ color: var(--vscode-editor-foreground);
266
+ tab-size: 4;
267
+ background: none;
268
+ }
269
+
270
+ pre {
271
+ background-color: var(--vscode-textCodeBlock-background);
272
+ border: 1px solid var(--vscode-widget-border);
273
+ }
274
+
275
+ .vscode-high-contrast h1 {
276
+ border-color: #000;
277
+ }
278
+
279
+ .vscode-light th {
280
+ border-color: rgb(0 0 0 / 69%);
281
+ }
282
+
283
+ .oml-md-result {
284
+ margin-top: 8px;
285
+ margin-bottom: 18px;
286
+ border: 1px solid var(--vscode-editorWidget-border);
287
+ border-radius: 6px;
288
+ background: var(--vscode-editorWidget-background);
289
+ overflow: auto;
290
+ }
291
+
292
+ .oml-md-result-table {
293
+ border: none;
294
+ background: transparent;
295
+ border-radius: 0;
296
+ overflow: visible;
297
+ }
298
+
299
+ .oml-md-result-plain {
300
+ border: none;
301
+ background: transparent;
302
+ border-radius: 0;
303
+ overflow: visible;
304
+ }
305
+
306
+ .oml-md-result-message {
307
+ padding: 10px 12px;
308
+ font-size: 12px;
309
+ }
310
+
311
+ .oml-md-result-error {
312
+ border-color: var(--vscode-inputValidation-errorBorder);
313
+ background: var(--vscode-inputValidation-errorBackground);
314
+ }
315
+
316
+ .oml-md-result-unimplemented {
317
+ border-color: var(--vscode-inputValidation-warningBorder);
318
+ background: var(--vscode-inputValidation-warningBackground);
319
+ }
320
+
321
+ .oml-md-table-wrapper {
322
+ overflow: auto;
323
+ border: 1px solid var(--vscode-editorWidget-border);
324
+ border-radius: 4px;
325
+ }
326
+
327
+ .oml-md-table {
328
+ width: 100%;
329
+ border-collapse: collapse;
330
+ font-size: 12px;
331
+ margin: 0;
332
+ table-layout: auto;
333
+ }
334
+
335
+ .oml-md-table thead th {
336
+ text-align: left;
337
+ font-weight: 600;
338
+ border-bottom: 1px solid var(--vscode-editorWidget-border);
339
+ padding: 8px 10px;
340
+ background: var(--vscode-editor-background);
341
+ cursor: pointer;
342
+ position: sticky;
343
+ top: 0;
344
+ z-index: 1;
345
+ user-select: none;
346
+ }
347
+
348
+ .oml-md-table tbody td {
349
+ border-bottom: 1px solid var(--vscode-editorWidget-border);
350
+ padding: 6px 10px;
351
+ vertical-align: top;
352
+ }
353
+
354
+ .vscode-dark th {
355
+ border-color: rgb(255 255 255 / 69%);
356
+ }
357
+
358
+ .vscode-light h1,
359
+ .vscode-light h2,
360
+ .vscode-light hr,
361
+ .vscode-light td {
362
+ border-color: rgb(0 0 0 / 18%);
363
+ }
364
+
365
+ .oml-md-result .table-root {
366
+ display: flex;
367
+ flex-direction: column;
368
+ gap: 0.5rem;
369
+ }
370
+
371
+ .oml-md-result .table-controls {
372
+ display: flex;
373
+ justify-content: space-between;
374
+ align-items: center;
375
+ gap: 0;
376
+ flex-wrap: wrap;
377
+ padding: 0;
378
+ }
379
+
380
+ .oml-md-result .table-controls-left,
381
+ .oml-md-result .table-controls-right {
382
+ display: flex;
383
+ align-items: center;
384
+ gap: 0.5rem;
385
+ }
386
+
387
+ .oml-md-result .table-controls-right {
388
+ justify-content: flex-end;
389
+ flex: 1;
390
+ min-width: 0;
391
+ gap: 0.6rem;
392
+ }
393
+
394
+ .oml-md-result .table-editor-root .table-operations-controls {
395
+ display: inline-flex;
396
+ align-items: center;
397
+ gap: 0.25rem;
398
+ }
399
+
400
+ .oml-md-result .table-editor-root .table-operations-controls button {
401
+ width: 1.6rem;
402
+ height: 1.6rem;
403
+ padding: 0;
404
+ border-radius: 999px;
405
+ border: 1px solid var(--vscode-dropdown-border, var(--vscode-editorWidget-border));
406
+ background: transparent;
407
+ color: var(--vscode-foreground);
408
+ line-height: 1;
409
+ font-size: 1rem;
410
+ cursor: pointer;
411
+ }
412
+
413
+ .oml-md-result .table-editor-root .table-operations-controls button:hover {
414
+ background: var(--vscode-toolbar-hoverBackground);
415
+ }
416
+
417
+ .oml-md-result .table-editor-root .table-operations-remove { order: 0; }
418
+ .oml-md-result .table-editor-root .table-operations-add { order: 1; }
419
+ .oml-md-result .table-editor-root .table-operations-link { order: 2; }
420
+ .oml-md-result .table-editor-root .table-operations-ai { order: 3; }
421
+ .oml-md-result .table-editor-root .table-operations-undo { order: 4; }
422
+ .oml-md-result .table-editor-root .table-operations-redo { order: 5; }
423
+ .oml-md-result .table-editor-root .table-operations-validate { order: 6; }
424
+
425
+ .oml-md-result .table-editor-root .table-validation-inline-status {
426
+ display: inline-flex;
427
+ align-items: center;
428
+ min-height: 1.6rem;
429
+ margin-left: 0.2rem;
430
+ font-size: 0.85rem;
431
+ order: 7;
432
+ }
433
+
434
+ .oml-md-result .table-editor-root .table-validation-success {
435
+ color: var(--vscode-testing-iconPassed, var(--vscode-charts-green));
436
+ font-weight: 600;
437
+ }
438
+
439
+ .oml-md-result .table-editor-root .table-validation-problems-link {
440
+ color: var(--vscode-inputValidation-errorForeground, var(--vscode-errorForeground));
441
+ text-decoration: underline;
442
+ font-weight: 600;
443
+ cursor: pointer;
444
+ }
445
+
446
+ .oml-validation-dialog {
447
+ width: min(860px, 92vw);
448
+ }
449
+
450
+ .oml-validation-body {
451
+ max-height: 58vh;
452
+ overflow: auto;
453
+ }
454
+
455
+ .oml-validation-table {
456
+ width: 100%;
457
+ border-collapse: collapse;
458
+ }
459
+
460
+ .oml-validation-table th,
461
+ .oml-validation-table td {
462
+ border: 1px solid var(--vscode-editorWidget-border);
463
+ padding: 6px 8px;
464
+ vertical-align: top;
465
+ text-align: left;
466
+ }
467
+
468
+ .oml-validation-table th {
469
+ background: var(--vscode-editor-inactiveSelectionBackground);
470
+ }
471
+
472
+ .oml-validation-description {
473
+ white-space: normal;
474
+ }
475
+
476
+ .oml-md-result .table-pagesize {
477
+ background: var(--vscode-dropdown-background);
478
+ color: var(--vscode-dropdown-foreground);
479
+ border: 1px solid var(--vscode-dropdown-border);
480
+ padding: 2px 4px;
481
+ border-radius: 0;
482
+ font-size: 0.875rem;
483
+ font-family: var(--markdown-font-family, -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", system-ui, "Ubuntu", "Droid Sans", sans-serif);
484
+ }
485
+
486
+ .oml-md-result .tree-filter {
487
+ flex: 1;
488
+ min-width: 8ch;
489
+ max-width: 300px;
490
+ padding: 4px 8px;
491
+ background: var(--vscode-input-background);
492
+ color: var(--vscode-input-foreground);
493
+ border: 1px solid var(--vscode-input-border);
494
+ border-radius: 2px;
495
+ outline: none;
496
+ box-sizing: border-box;
497
+ }
498
+
499
+ .oml-md-result .tree-filter:focus {
500
+ border-color: var(--vscode-focusBorder);
501
+ }
502
+
503
+ .oml-md-result .tree-download-btn {
504
+ display: inline-flex;
505
+ align-items: center;
506
+ justify-content: center;
507
+ width: 24px;
508
+ height: 24px;
509
+ padding: 0;
510
+ border: none;
511
+ background: transparent;
512
+ color: var(--vscode-foreground);
513
+ cursor: pointer;
514
+ border-radius: 3px;
515
+ }
516
+
517
+ .oml-md-result .tree-download-btn:hover {
518
+ background: var(--vscode-toolbar-hoverBackground);
519
+ }
520
+
521
+ .oml-md-result .table-results-table-container {
522
+ overflow: auto;
523
+ border: 1px solid var(--vscode-editorWidget-border, #d0d7de);
524
+ }
525
+
526
+ .oml-md-result .table-results-table {
527
+ display: flex;
528
+ flex-direction: column;
529
+ min-width: 100%;
530
+ width: fit-content;
531
+ }
532
+
533
+ .oml-md-result .table-header-row,
534
+ .oml-md-result .table-row {
535
+ display: grid;
536
+ grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
537
+ }
538
+
539
+ .oml-md-result .table-header-cell,
540
+ .oml-md-result .table-cell {
541
+ display: block;
542
+ box-sizing: border-box;
543
+ padding: 6px 8px;
544
+ border-bottom: 1px solid var(--vscode-editorWidget-border, #d0d7de);
545
+ white-space: nowrap;
546
+ overflow: hidden;
547
+ text-overflow: ellipsis;
548
+ text-align: left;
549
+ }
550
+
551
+ .oml-md-result .table-header-row > .table-header-cell:not(:last-child),
552
+ .oml-md-result .table-row > .table-cell:not(:last-child) {
553
+ border-right: 1px solid var(--vscode-editorWidget-border, #d0d7de);
554
+ }
555
+
556
+ /* Default zebra/hover for non-VS Code host pages (e.g. static HTML). */
557
+ .oml-md-result .table-body .table-row:nth-child(even) .table-cell {
558
+ background: rgb(0 0 0 / 4%);
559
+ }
560
+
561
+ .oml-md-result .table-body .table-row:hover .table-cell {
562
+ background: rgb(173 216 230 / 45%);
563
+ }
564
+
565
+ .vscode-light .oml-md-result .table-body .table-row:nth-child(even) .table-cell,
566
+ .vscode-high-contrast-light .oml-md-result .table-body .table-row:nth-child(even) .table-cell {
567
+ background: rgb(0 0 0 / 4%);
568
+ }
569
+
570
+ .vscode-dark .oml-md-result .table-body .table-row:nth-child(even) .table-cell,
571
+ .vscode-high-contrast .oml-md-result .table-body .table-row:nth-child(even) .table-cell {
572
+ background: rgb(255 255 255 / 4%);
573
+ }
574
+
575
+ .oml-md-result .table-body .table-row .table-cell {
576
+ transition: background-color 120ms ease-in-out;
577
+ }
578
+
579
+ .vscode-light .oml-md-result .table-body .table-row:hover .table-cell,
580
+ .vscode-high-contrast-light .oml-md-result .table-body .table-row:hover .table-cell {
581
+ background: rgb(173 216 230 / 45%);
582
+ }
583
+
584
+ .vscode-dark .oml-md-result .table-body .table-row:hover .table-cell,
585
+ .vscode-high-contrast .oml-md-result .table-body .table-row:hover .table-cell {
586
+ background: rgb(135 206 250 / 22%);
587
+ }
588
+
589
+ .oml-md-result .matrix-root .table-body .table-row:hover .table-cell {
590
+ background: transparent;
591
+ }
592
+
593
+ /* Matrix: highlight the hovered cell only. */
594
+ .oml-md-result .matrix-root .table-body .table-row .table-cell:hover {
595
+ background: rgb(173 216 230 / 45%);
596
+ }
597
+
598
+ .vscode-light .oml-md-result .matrix-root .table-body .table-row .table-cell:hover,
599
+ .vscode-high-contrast-light .oml-md-result .matrix-root .table-body .table-row .table-cell:hover {
600
+ background: rgb(173 216 230 / 45%);
601
+ }
602
+
603
+ .vscode-dark .oml-md-result .matrix-root .table-body .table-row .table-cell:hover,
604
+ .vscode-high-contrast .oml-md-result .matrix-root .table-body .table-row .table-cell:hover {
605
+ background: rgb(135 206 250 / 22%);
606
+ }
607
+
608
+ .oml-md-result .table-header-cell {
609
+ font-weight: 600;
610
+ user-select: none;
611
+ cursor: pointer;
612
+ position: sticky;
613
+ top: 0;
614
+ z-index: 1;
615
+ background: var(--vscode-editor-background);
616
+ padding-right: 16px;
617
+ }
618
+
619
+ .oml-md-result .table-header-label {
620
+ display: block;
621
+ overflow: hidden;
622
+ text-overflow: ellipsis;
623
+ }
624
+
625
+ .oml-md-result .table-column-resize-handle {
626
+ position: absolute;
627
+ top: 0;
628
+ right: -3px;
629
+ width: 8px;
630
+ height: 100%;
631
+ cursor: col-resize;
632
+ z-index: 2;
633
+ }
634
+
635
+ .oml-md-result .table-column-resize-handle::before {
636
+ content: '';
637
+ position: absolute;
638
+ top: 20%;
639
+ bottom: 20%;
640
+ left: 50%;
641
+ width: 1px;
642
+ transform: translateX(-50%);
643
+ background: transparent;
644
+ transition: background-color 120ms ease-in-out;
645
+ }
646
+
647
+ .oml-md-result .table-header-cell:hover .table-column-resize-handle::before {
648
+ background: var(--vscode-editorWidget-border, #d0d7de);
649
+ }
650
+
651
+ .oml-md-result .table-resizing,
652
+ .oml-md-result .table-resizing * {
653
+ cursor: col-resize !important;
654
+ }
655
+
656
+ .oml-md-result .table-value {
657
+ display: flex;
658
+ gap: 0.35rem;
659
+ flex-wrap: wrap;
660
+ }
661
+
662
+ .oml-md-result .table-editor-root .table-row-checkbox {
663
+ display: flex;
664
+ align-items: center;
665
+ gap: 0.5rem;
666
+ min-width: 0;
667
+ }
668
+
669
+ .oml-md-result .table-editor-root .table-row-checkbox > .table-value {
670
+ min-width: 0;
671
+ }
672
+
673
+ .oml-md-result .table-value-part {
674
+ display: inline;
675
+ }
676
+
677
+ .oml-md-result .table-link,
678
+ .oml-md-result .wikilink {
679
+ color: var(--table-link-foreground, var(--vscode-textLink-foreground));
680
+ text-decoration: none;
681
+ border-bottom: 1px dotted currentColor;
682
+ }
683
+
684
+ .oml-md-result .table-link:hover,
685
+ .oml-md-result .wikilink:hover {
686
+ border-bottom-style: solid;
687
+ }
688
+
689
+ .oml-md-result .table-footer {
690
+ padding: 0 0.5rem 5px;
691
+ display: flex;
692
+ justify-content: space-between;
693
+ align-items: center;
694
+ gap: 0.75rem;
695
+ }
696
+
697
+ .oml-md-result .table-info-bar {
698
+ font-size: 0.85rem;
699
+ color: var(--vscode-editorWidget-foreground);
700
+ text-align: left;
701
+ flex: 1;
702
+ }
703
+
704
+ .oml-md-result .table-footer-pagination {
705
+ display: flex;
706
+ align-items: center;
707
+ gap: 0.5rem;
708
+ margin-left: auto;
709
+ }
710
+
711
+ .oml-md-result .table-pagination {
712
+ display: flex;
713
+ align-items: center;
714
+ gap: 0.5rem;
715
+ }
716
+
717
+ .oml-md-result .table-page-btn {
718
+ display: inline-flex;
719
+ align-items: center;
720
+ justify-content: center;
721
+ width: 24px;
722
+ height: 24px;
723
+ border: 1px solid var(--vscode-input-border);
724
+ border-radius: 50%;
725
+ background: transparent;
726
+ color: var(--vscode-foreground);
727
+ cursor: pointer;
728
+ font-size: 1rem;
729
+ font-weight: 600;
730
+ line-height: 1;
731
+ padding: 0;
732
+ box-sizing: border-box;
733
+ }
734
+
735
+ .oml-md-result .table-page-btn:hover:not(:disabled) {
736
+ background: var(--vscode-toolbar-hoverBackground);
737
+ }
738
+
739
+ .oml-md-result .table-page-btn:disabled {
740
+ opacity: 0.5;
741
+ cursor: not-allowed;
742
+ }
743
+
744
+ .oml-md-result .table-page-label {
745
+ min-width: 36px;
746
+ text-align: center;
747
+ }
748
+
749
+ .oml-md-result .graph-canvas-root {
750
+ position: relative;
751
+ width: 100%;
752
+ resize: none;
753
+ overflow: auto;
754
+ max-height: none !important;
755
+ border: 1px solid var(--vscode-editorWidget-border);
756
+ background: var(--vscode-editor-background);
757
+ }
758
+
759
+ .oml-md-result .diagram-canvas-root {
760
+ height: var(--oml-diagram-height, 920px);
761
+ min-height: var(--oml-diagram-min-height, 220px);
762
+ max-height: none !important;
763
+ resize: none;
764
+ }
765
+
766
+ .oml-md-result .canvas-resize-handle {
767
+ position: absolute;
768
+ bottom: 0;
769
+ left: 0;
770
+ right: 0;
771
+ height: 8px;
772
+ cursor: row-resize;
773
+ z-index: 20;
774
+ user-select: none;
775
+ touch-action: none;
776
+ }
777
+
778
+ .oml-md-result .canvas-resize-handle::after {
779
+ content: '';
780
+ position: absolute;
781
+ left: 50%;
782
+ top: 50%;
783
+ transform: translate(-50%, -50%);
784
+ width: 36px;
785
+ height: 4px;
786
+ border-radius: 2px;
787
+ background: var(--vscode-scrollbarSlider-background, rgba(100, 100, 100, 0.4));
788
+ opacity: 0;
789
+ transition: opacity 120ms;
790
+ }
791
+
792
+ .oml-md-result .graph-canvas-root:hover .canvas-resize-handle::after,
793
+ .oml-md-result .diagram-canvas-root:hover .canvas-resize-handle::after,
794
+ .oml-md-result .canvas-resize-handle:hover::after {
795
+ opacity: 1;
796
+ }
797
+
798
+ .oml-md-result .diagram-canvas-root .x6-graph,
799
+ .oml-md-result .diagram-canvas-root .x6-graph-svg,
800
+ .oml-md-result .diagram-canvas-root .x6-svg-stage,
801
+ .oml-md-result .diagram-canvas-root .x6-svg,
802
+ .oml-md-result .diagram-canvas-root svg {
803
+ width: 100%;
804
+ height: 100%;
805
+ background: var(--vscode-editor-background);
806
+ overflow: visible !important;
807
+ }
808
+
809
+ .oml-md-result .diagram-canvas-root .x6-edge .x6-edge-path {
810
+ pointer-events: stroke;
811
+ }
812
+
813
+ .oml-md-result .graph-corner-hotspot {
814
+ position: absolute;
815
+ top: 0;
816
+ right: 0;
817
+ width: 220px;
818
+ height: 64px;
819
+ z-index: 4;
820
+ }
821
+
822
+ .oml-md-result .graph-corner-toolbar {
823
+ position: absolute;
824
+ top: 8px;
825
+ right: 8px;
826
+ display: flex;
827
+ align-items: center;
828
+ gap: 6px;
829
+ padding: 6px;
830
+ border: 1px solid var(--vscode-editorWidget-border);
831
+ border-radius: 6px;
832
+ background: var(--vscode-editor-background);
833
+ box-shadow: 0 2px 8px rgb(0 0 0 / 20%);
834
+ opacity: 0;
835
+ pointer-events: none;
836
+ transform: translateY(-4px);
837
+ transition: opacity 120ms ease, transform 120ms ease;
838
+ z-index: 5;
839
+ }
840
+
841
+ .oml-md-result .graph-canvas-root.graph-toolbar-visible .graph-corner-toolbar {
842
+ opacity: 1;
843
+ pointer-events: auto;
844
+ transform: translateY(0);
845
+ }
846
+
847
+ .oml-md-result .graph-corner-toolbar .graph-filter {
848
+ width: 170px;
849
+ max-width: 170px;
850
+ margin: 0;
851
+ }
852
+
853
+ .oml-md-result-list {
854
+ margin: 0;
855
+ padding-left: 1.25rem;
856
+ }
857
+
858
+ .oml-md-result-list > li + li {
859
+ margin-top: 0.35rem;
860
+ }
861
+
862
+ .oml-md-result-list > li {
863
+ overflow-wrap: anywhere;
864
+ }
865
+
866
+ .oml-md-result-list > li::marker {
867
+ color: var(--oml-list-marker-color, currentColor);
868
+ font-size: var(--oml-list-marker-font-size, inherit);
869
+ font-weight: var(--oml-list-marker-font-weight, inherit);
870
+ font-style: var(--oml-list-marker-font-style, inherit);
871
+ }
872
+
873
+ .oml-md-result-list > li .wikilink {
874
+ overflow-wrap: anywhere;
875
+ word-break: break-word;
876
+ }
877
+
878
+ .oml-md-result-text > p {
879
+ margin: 0;
880
+ }
881
+
882
+ .oml-md-result-text > p + p {
883
+ margin-top: 0.5rem;
884
+ }
885
+
886
+ .vscode-dark h1,
887
+ .vscode-dark h2,
888
+ .vscode-dark hr,
889
+ .vscode-dark td {
890
+ border-color: rgb(255 255 255 / 18%);
891
+ }
892
+
893
+ .oml-md-context-menu {
894
+ position: fixed;
895
+ z-index: 9999;
896
+ min-width: 172px;
897
+ padding: 4px;
898
+ border: 1px solid var(--vscode-menu-border, var(--vscode-editorWidget-border));
899
+ border-radius: 6px;
900
+ background: var(--vscode-menu-background, var(--vscode-editor-background));
901
+ box-shadow: 0 4px 12px rgb(0 0 0 / 28%);
902
+ }
903
+
904
+ .oml-md-context-item {
905
+ width: 100%;
906
+ border: 0;
907
+ border-radius: 4px;
908
+ padding: 6px 10px;
909
+ text-align: left;
910
+ background: transparent;
911
+ color: var(--vscode-menu-foreground, var(--vscode-editor-foreground));
912
+ cursor: pointer;
913
+ font: inherit;
914
+ }
915
+
916
+ .oml-md-context-item:hover {
917
+ background: var(--vscode-menu-selectionBackground, var(--vscode-list-hoverBackground));
918
+ color: var(--vscode-menu-selectionForeground, var(--vscode-editor-foreground));
919
+ }
920
+
921
+ .oml-md-context-item.is-active {
922
+ background: var(--vscode-menu-selectionBackground, var(--vscode-list-hoverBackground));
923
+ color: var(--vscode-menu-selectionForeground, var(--vscode-editor-foreground));
924
+ }
925
+
926
+ /* Match editor-controller link/type picker styles */
927
+ .oml-link-dropdown-container {
928
+ position: fixed;
929
+ z-index: 9999;
930
+ margin-top: 4px;
931
+ background: var(--vscode-editorWidget-background);
932
+ border: 1px solid var(--vscode-editorWidget-border);
933
+ border-radius: 6px;
934
+ box-shadow: 0 8px 16px rgb(0 0 0 / 25%);
935
+ display: flex;
936
+ flex-direction: column;
937
+ width: 250px;
938
+ padding: 8px;
939
+ gap: 6px;
940
+ }
941
+
942
+ .oml-link-input {
943
+ width: 100%;
944
+ box-sizing: border-box;
945
+ background: var(--vscode-input-background);
946
+ border: 1px solid var(--vscode-input-border);
947
+ border-radius: 4px;
948
+ color: var(--vscode-input-foreground);
949
+ font-family: inherit;
950
+ font-size: 0.85rem;
951
+ padding: 4px 6px;
952
+ }
953
+
954
+ .oml-link-input:focus {
955
+ outline: 1px solid var(--vscode-focusBorder);
956
+ border-color: var(--vscode-focusBorder);
957
+ }
958
+
959
+ .table-operations-type-dropdown {
960
+ position: fixed;
961
+ top: 0;
962
+ left: 0;
963
+ z-index: 6;
964
+ min-width: 160px;
965
+ background: var(--vscode-editorWidget-background);
966
+ border: 1px solid var(--vscode-editorWidget-border);
967
+ border-radius: 8px;
968
+ box-shadow: 0 12px 24px rgba(0, 0, 0, 0.2);
969
+ padding: 6px;
970
+ display: flex;
971
+ flex-direction: column;
972
+ gap: 4px;
973
+ }
974
+
975
+ .table-operations-type-option {
976
+ display: block;
977
+ width: 100%;
978
+ text-align: left;
979
+ padding: 6px 8px;
980
+ border: 1px solid transparent;
981
+ border-radius: 6px;
982
+ background: transparent;
983
+ color: var(--vscode-foreground);
984
+ cursor: pointer;
985
+ font-size: 0.85rem;
986
+ }
987
+
988
+ .table-operations-type-option:hover {
989
+ background: var(--vscode-toolbar-hoverBackground);
990
+ }
991
+
992
+ .table-operations-type-option.is-active {
993
+ background: var(--vscode-toolbar-hoverBackground);
994
+ }
995
+
996
+ .oml-properties-relation-dropdown {
997
+ position: absolute;
998
+ z-index: 10;
999
+ max-height: 220px;
1000
+ overflow-y: auto;
1001
+ padding: 6px 0;
1002
+ border-radius: 8px;
1003
+ border: 1px solid var(--vscode-widget-border);
1004
+ background: var(--vscode-editorWidget-background);
1005
+ box-shadow: 0 6px 18px rgb(0 0 0 / 20%);
1006
+ }
1007
+
1008
+ .oml-properties-relation-option {
1009
+ display: block;
1010
+ width: 100%;
1011
+ text-align: left;
1012
+ padding: 6px 12px;
1013
+ border: none;
1014
+ background: transparent;
1015
+ color: var(--vscode-editorWidget-foreground);
1016
+ font-family: var(--vscode-font-family);
1017
+ font-size: 0.95rem;
1018
+ cursor: pointer;
1019
+ }
1020
+
1021
+ .oml-link-dropdown-container .oml-properties-relation-option {
1022
+ border: none;
1023
+ }
1024
+
1025
+ .oml-properties-relation-option:hover {
1026
+ background: var(--vscode-list-hoverBackground);
1027
+ }
1028
+
1029
+ .oml-properties-relation-option.is-active {
1030
+ background: var(--vscode-list-activeSelectionBackground);
1031
+ color: var(--vscode-list-activeSelectionForeground);
1032
+ }
1033
+
1034
+ .oml-md-rename-overlay {
1035
+ position: fixed;
1036
+ inset: 0;
1037
+ z-index: 10000;
1038
+ display: flex;
1039
+ align-items: center;
1040
+ justify-content: center;
1041
+ background: rgb(0 0 0 / 28%);
1042
+ }
1043
+
1044
+ .oml-md-rename-dialog {
1045
+ min-width: 360px;
1046
+ max-width: min(560px, calc(100vw - 36px));
1047
+ padding: 14px;
1048
+ border: 1px solid var(--vscode-editorWidget-border);
1049
+ border-radius: 8px;
1050
+ background: var(--vscode-editor-background);
1051
+ box-shadow: 0 8px 30px rgb(0 0 0 / 35%);
1052
+ }
1053
+
1054
+ .oml-md-rename-title {
1055
+ margin: 0 0 10px;
1056
+ font-size: 14px;
1057
+ font-weight: 600;
1058
+ }
1059
+
1060
+ .oml-md-rename-input {
1061
+ width: 100%;
1062
+ box-sizing: border-box;
1063
+ padding: 7px 8px;
1064
+ border: 1px solid var(--vscode-input-border, var(--vscode-editorWidget-border));
1065
+ border-radius: 5px;
1066
+ background: var(--vscode-input-background, var(--vscode-editor-background));
1067
+ color: var(--vscode-input-foreground, var(--vscode-editor-foreground));
1068
+ }
1069
+
1070
+ .oml-md-rename-actions {
1071
+ display: flex;
1072
+ justify-content: flex-end;
1073
+ gap: 8px;
1074
+ margin-top: 12px;
1075
+ }
1076
+
1077
+ .oml-md-rename-button {
1078
+ padding: 6px 12px;
1079
+ border: 1px solid var(--vscode-button-secondaryBorder, var(--vscode-editorWidget-border));
1080
+ border-radius: 5px;
1081
+ background: var(--vscode-button-secondaryBackground, transparent);
1082
+ color: var(--vscode-button-secondaryForeground, var(--vscode-editor-foreground));
1083
+ cursor: pointer;
1084
+ }
1085
+
1086
+ .oml-md-rename-button.primary {
1087
+ border-color: var(--vscode-button-border, transparent);
1088
+ background: var(--vscode-button-background);
1089
+ color: var(--vscode-button-foreground);
1090
+ }
1091
+
1092
+ .oml-properties-overlay {
1093
+ position: fixed;
1094
+ inset: 0;
1095
+ background: rgba(10, 10, 10, 0.4);
1096
+ display: none;
1097
+ align-items: center;
1098
+ justify-content: center;
1099
+ z-index: 1002;
1100
+ }
1101
+
1102
+ .oml-properties-dialog {
1103
+ width: min(620px, 88vw);
1104
+ max-height: 80vh;
1105
+ background: var(--vscode-editorWidget-background);
1106
+ border: 1px solid var(--vscode-editorWidget-border);
1107
+ border-radius: 14px;
1108
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.45);
1109
+ display: flex;
1110
+ flex-direction: column;
1111
+ overflow: hidden;
1112
+ }
1113
+
1114
+ .oml-properties-header {
1115
+ display: flex;
1116
+ align-items: center;
1117
+ justify-content: space-between;
1118
+ padding: 16px 20px 10px 20px;
1119
+ border-bottom: 1px solid var(--vscode-editorWidget-border);
1120
+ }
1121
+
1122
+ .oml-properties-title {
1123
+ margin: 0;
1124
+ font-size: 1rem;
1125
+ font-weight: 600;
1126
+ }
1127
+
1128
+ .oml-properties-body {
1129
+ padding: 16px 20px 20px 20px;
1130
+ display: flex;
1131
+ flex-direction: column;
1132
+ gap: 4px;
1133
+ overflow-y: auto;
1134
+ max-height: 55vh;
1135
+ }
1136
+
1137
+ .oml-properties-actions {
1138
+ display: flex;
1139
+ gap: 8px;
1140
+ margin-left: auto;
1141
+ }
1142
+
1143
+ .oml-properties-cancel,
1144
+ .oml-properties-confirm {
1145
+ border-radius: 6px;
1146
+ border: 1px solid var(--vscode-button-border, transparent);
1147
+ padding: 6px 12px;
1148
+ font-size: 0.85rem;
1149
+ }
1150
+
1151
+ .oml-properties-cancel {
1152
+ background: var(--vscode-button-secondaryBackground);
1153
+ color: var(--vscode-button-secondaryForeground);
1154
+ }
1155
+
1156
+ .oml-properties-confirm {
1157
+ background: var(--vscode-button-background);
1158
+ color: var(--vscode-button-foreground);
1159
+ }
1160
+
1161
+ .oml-properties-empty {
1162
+ color: var(--vscode-descriptionForeground);
1163
+ font-size: 0.85rem;
1164
+ }
1165
+
1166
+ .oml-properties-row {
1167
+ display: grid;
1168
+ grid-template-columns: minmax(96px, 130px) 1fr;
1169
+ gap: 4px;
1170
+ align-items: center;
1171
+ margin-bottom: 0;
1172
+ }
1173
+
1174
+ .oml-properties-label {
1175
+ display: inline-flex;
1176
+ align-items: center;
1177
+ gap: 10px;
1178
+ color: var(--vscode-foreground);
1179
+ font-weight: 500;
1180
+ opacity: 0.85;
1181
+ font-family: var(--vscode-font-family);
1182
+ font-size: 1rem;
1183
+ }
1184
+
1185
+ .oml-properties-required {
1186
+ color: var(--vscode-errorForeground);
1187
+ font-weight: 700;
1188
+ }
1189
+
1190
+ .oml-properties-value {
1191
+ display: flex;
1192
+ flex-wrap: wrap;
1193
+ gap: 8px;
1194
+ min-width: 0;
1195
+ }
1196
+
1197
+ .oml-properties-value > * {
1198
+ flex: 1 1 100%;
1199
+ align-self: stretch;
1200
+ min-width: 0;
1201
+ }
1202
+
1203
+ .oml-properties-input,
1204
+ .oml-properties-textarea {
1205
+ width: 100%;
1206
+ box-sizing: border-box;
1207
+ border-radius: 8px;
1208
+ border: 1px solid var(--vscode-input-border);
1209
+ background: var(--vscode-input-background);
1210
+ color: var(--vscode-foreground);
1211
+ padding: 8px 10px;
1212
+ font-family: var(--vscode-font-family);
1213
+ font-size: 1rem;
1214
+ font-weight: 500;
1215
+ opacity: 0.85;
1216
+ }
1217
+
1218
+ .oml-input-field {
1219
+ position: relative;
1220
+ display: flex;
1221
+ width: 100%;
1222
+ flex: 1 1 100%;
1223
+ min-width: 0;
1224
+ }
1225
+
1226
+ .oml-input-field > .oml-properties-input {
1227
+ flex: 1 1 auto;
1228
+ min-width: 0;
1229
+ }
1230
+
1231
+ .oml-input-invalid {
1232
+ border-color: var(--vscode-input-border);
1233
+ }
1234
+
1235
+ .oml-input-squiggle {
1236
+ position: absolute;
1237
+ left: 10px;
1238
+ right: 10px;
1239
+ top: 9px;
1240
+ pointer-events: none;
1241
+ color: transparent;
1242
+ white-space: pre;
1243
+ font-family: var(--vscode-font-family);
1244
+ font-size: 1rem;
1245
+ font-weight: 500;
1246
+ line-height: 1.4;
1247
+ overflow: hidden;
1248
+ text-decoration-line: underline;
1249
+ text-decoration-style: wavy;
1250
+ text-decoration-color: var(--vscode-errorForeground);
1251
+ text-decoration-thickness: 1.5px;
1252
+ text-underline-offset: 2px;
1253
+ }
1254
+
1255
+ .oml-md-rename-button:disabled,
1256
+ .oml-properties-confirm:disabled {
1257
+ opacity: 0.6;
1258
+ cursor: not-allowed;
1259
+ }
1260
+
1261
+ .oml-properties-static {
1262
+ width: 100%;
1263
+ color: var(--vscode-foreground);
1264
+ padding: 8px 10px;
1265
+ font-family: var(--vscode-font-family);
1266
+ font-size: 1rem;
1267
+ font-weight: 500;
1268
+ opacity: 0.85;
1269
+ }
1270
+
1271
+ .oml-properties-select {
1272
+ width: 100%;
1273
+ box-sizing: border-box;
1274
+ border-radius: 8px;
1275
+ border: 1px solid var(--vscode-input-border);
1276
+ background: var(--vscode-input-background);
1277
+ color: var(--vscode-foreground);
1278
+ padding: 6px 8px;
1279
+ font-family: var(--vscode-font-family);
1280
+ font-size: 1rem;
1281
+ font-weight: 500;
1282
+ opacity: 0.85;
1283
+ }
1284
+
1285
+ .oml-scalar-candidate-field {
1286
+ width: 100%;
1287
+ min-width: 0;
1288
+ }
1289
+
1290
+ .oml-properties-checkbox {
1291
+ width: 18px;
1292
+ height: 18px;
1293
+ }
1294
+
1295
+ .oml-properties-textarea {
1296
+ min-height: 88px;
1297
+ resize: vertical;
1298
+ }
1299
+
1300
+ .oml-properties-chip-list {
1301
+ display: flex;
1302
+ flex-wrap: wrap;
1303
+ gap: 8px;
1304
+ }
1305
+
1306
+ .oml-properties-relation {
1307
+ position: relative;
1308
+ display: flex;
1309
+ flex-wrap: wrap;
1310
+ gap: 8px;
1311
+ align-items: center;
1312
+ width: 100%;
1313
+ min-height: 38px;
1314
+ padding: 6px 8px;
1315
+ border-radius: 8px;
1316
+ border: 1px solid var(--vscode-input-border);
1317
+ background: var(--vscode-input-background);
1318
+ }
1319
+
1320
+ .oml-properties-relation-input {
1321
+ border: none;
1322
+ background: transparent;
1323
+ color: var(--vscode-foreground);
1324
+ font-family: var(--vscode-font-family);
1325
+ font-size: 1rem;
1326
+ font-weight: 500;
1327
+ opacity: 0.85;
1328
+ flex: 1;
1329
+ min-width: 160px;
1330
+ }
1331
+
1332
+ .oml-properties-relation-input:focus {
1333
+ outline: none;
1334
+ }
1335
+
1336
+ .oml-properties-chip {
1337
+ display: inline-flex;
1338
+ align-items: center;
1339
+ gap: 6px;
1340
+ padding: 6px 10px;
1341
+ border-radius: 999px;
1342
+ background: var(--vscode-badge-background, color-mix(in srgb, var(--vscode-editor-background) 78%, var(--vscode-foreground) 22%));
1343
+ border: 1px solid var(--vscode-contrastBorder, color-mix(in srgb, var(--vscode-foreground) 30%, transparent));
1344
+ color: var(--vscode-textLink-foreground);
1345
+ font-weight: 500;
1346
+ font-size: 0.85rem;
1347
+ }
1348
+
1349
+ .oml-properties-link {
1350
+ color: inherit;
1351
+ text-decoration: underline;
1352
+ }
1353
+
1354
+ .oml-properties-chip-close-btn {
1355
+ border: none;
1356
+ background: transparent;
1357
+ color: inherit;
1358
+ cursor: pointer;
1359
+ font-size: 0.95rem;
1360
+ opacity: 0.7;
1361
+ }