vantage-md 0.5.5 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,32 +1,31 @@
1
- import { Root } from 'hast';
2
- import { Plugin, PluggableList } from 'unified';
3
- import { defaultSchema } from 'rehype-sanitize';
4
-
1
+ import { PluggableList, Plugin } from "unified";
2
+ import { defaultSchema } from "rehype-sanitize";
3
+ //#region src/renderMarkdown.d.ts
5
4
  /**
6
5
  * Framework-agnostic markdown -> HTML rendering pipeline.
7
6
  * Uses the same remark/rehype chain as the Vantage viewer.
8
7
  */
9
8
  interface RenderOptions {
10
- /** Enable GFM tables, strikethrough, task lists (default: true) */
11
- gfm?: boolean;
12
- /** Enable KaTeX math rendering (default: true) */
13
- math?: boolean;
14
- /** Enable syntax highlighting (default: true) */
15
- highlight?: boolean;
16
- /** Add data-source-line attributes for line anchors (default: true) */
17
- sourceLines?: boolean;
18
- /** Enable XSS sanitization (default: true) */
19
- sanitize?: boolean;
20
- /** Parse and strip frontmatter (default: true) */
21
- frontmatter?: boolean;
9
+ /** Enable GFM tables, strikethrough, task lists (default: true) */
10
+ gfm?: boolean;
11
+ /** Enable KaTeX math rendering (default: true) */
12
+ math?: boolean;
13
+ /** Enable syntax highlighting (default: true) */
14
+ highlight?: boolean;
15
+ /** Add data-source-line attributes for line anchors (default: true) */
16
+ sourceLines?: boolean;
17
+ /** Enable XSS sanitization (default: true) */
18
+ sanitize?: boolean;
19
+ /** Parse and strip frontmatter (default: true) */
20
+ frontmatter?: boolean;
22
21
  }
23
22
  interface RenderResult {
24
- /** The rendered HTML string */
25
- html: string;
26
- /** Parsed frontmatter (empty object if none or disabled) */
27
- frontmatter: Record<string, unknown>;
28
- /** The markdown body with frontmatter stripped */
29
- body: string;
23
+ /** The rendered HTML string */
24
+ html: string;
25
+ /** Parsed frontmatter (empty object if none or disabled) */
26
+ frontmatter: Record<string, unknown>;
27
+ /** The markdown body with frontmatter stripped */
28
+ body: string;
30
29
  }
31
30
  /**
32
31
  * Render a markdown string to HTML using the full Vantage pipeline.
@@ -45,48 +44,1000 @@ interface RenderResult {
45
44
  * Use the React `<MarkdownViewer>` component for client-side mermaid rendering.
46
45
  */
47
46
  declare function renderMarkdown(content: string, options?: RenderOptions): Promise<RenderResult>;
48
-
47
+ //#endregion
48
+ //#region ../../node_modules/@types/unist/index.d.ts
49
+ // ## Interfaces
49
50
  /**
50
- * Rehype plugin that adds `data-source-line` attributes to block-level
51
- * elements based on their position in the original markdown source.
51
+ * Info associated with nodes by the ecosystem.
52
52
  *
53
- * This enables GitHub-style line anchors (#L42, #L42-L50) by giving
54
- * each rendered block a traceable line number from the source.
53
+ * This space is guaranteed to never be specified by unist or specifications
54
+ * implementing unist.
55
+ * But you can use it in utilities and plugins to store data.
56
+ *
57
+ * This type can be augmented to register custom data.
58
+ * For example:
59
+ *
60
+ * ```ts
61
+ * declare module 'unist' {
62
+ * interface Data {
63
+ * // `someNode.data.myId` is typed as `number | undefined`
64
+ * myId?: number | undefined
65
+ * }
66
+ * }
67
+ * ```
55
68
  */
56
-
57
- interface RehypeSourceLinesOptions {
58
- /**
59
- * Lines stripped off the front of the file before parsing — frontmatter,
60
- * essentially. Added to every emitted line number so `data-source-line`
61
- * names a line in the *file* rather than in the parsed body, which is what
62
- * a `#L42` link written against the file means. Defaults to 0.
63
- */
64
- offset?: number;
69
+ interface Data$1 {}
70
+ /**
71
+ * One place in a source file.
72
+ */
73
+ interface Point {
74
+ /**
75
+ * Line in a source file (1-indexed integer).
76
+ */
77
+ line: number;
78
+ /**
79
+ * Column in a source file (1-indexed integer).
80
+ */
81
+ column: number;
82
+ /**
83
+ * Character in a source file (0-indexed integer).
84
+ */
85
+ offset?: number | undefined;
86
+ }
87
+ /**
88
+ * Position of a node in a source document.
89
+ *
90
+ * A position is a range between two points.
91
+ */
92
+ interface Position {
93
+ /**
94
+ * Place of the first character of the parsed source region.
95
+ */
96
+ start: Point;
97
+ /**
98
+ * Place of the first character after the parsed source region.
99
+ */
100
+ end: Point;
65
101
  }
66
- declare const rehypeSourceLines: Plugin<[RehypeSourceLinesOptions?], Root>;
67
-
68
102
  /**
69
- * Rehype plugin that compiles `<!-- vantage: … -->` directives into
70
- * `data-vantage-*` attributes on the block that follows them.
103
+ * Abstract unist node.
71
104
  *
72
- * It has to run between `rehype-raw` — which turns the comment into a hast node
73
- * — and `rehype-sanitize`, which deletes every comment node. That is the only
74
- * window in which the information exists (`docs/reference/inline-markup.md`, "Where the plugin runs"),
75
- * and `pipeline.ts` is where the slot is spelled out.
105
+ * The syntactic unit in unist syntax trees are called nodes.
76
106
  *
77
- * The grammar and the vocabulary live in `./vantageDirectives.js`, which the
78
- * CLI checker imports too: one parser, two callers, so a directive cannot mean
79
- * one thing in the viewer and another in the tool that validates it (D5).
107
+ * This interface is supposed to be extended.
108
+ * If you can use {@link Literal} or {@link Parent}, you should.
109
+ * But for example in markdown, a `thematicBreak` (`***`), is neither literal
110
+ * nor parent, but still a node.
111
+ */
112
+ interface Node$1 {
113
+ /**
114
+ * Node type.
115
+ */
116
+ type: string;
117
+ /**
118
+ * Info from the ecosystem.
119
+ */
120
+ data?: Data$1 | undefined;
121
+ /**
122
+ * Position of a node in a source document.
123
+ *
124
+ * Nodes that are generated (not in the original source document) must not
125
+ * have a position.
126
+ */
127
+ position?: Position | undefined;
128
+ }
129
+ //#endregion
130
+ //#region ../../node_modules/@types/hast/index.d.ts
131
+ // ## Interfaces
132
+ /**
133
+ * Info associated with hast nodes by the ecosystem.
134
+ *
135
+ * This space is guaranteed to never be specified by unist or hast.
136
+ * But you can use it in utilities and plugins to store data.
137
+ *
138
+ * This type can be augmented to register custom data.
139
+ * For example:
140
+ *
141
+ * ```ts
142
+ * declare module 'hast' {
143
+ * interface Data {
144
+ * // `someNode.data.myId` is typed as `number | undefined`
145
+ * myId?: number | undefined
146
+ * }
147
+ * }
148
+ * ```
149
+ */
150
+ interface Data extends Data$1 {}
151
+ /**
152
+ * Info associated with an element.
153
+ */
154
+ interface Properties {
155
+ abbr?: string | undefined;
156
+ about?: Array<string> | undefined;
157
+ accentHeight?: number | string | undefined;
158
+ accept?: Array<string> | undefined;
159
+ acceptCharset?: Array<string> | undefined;
160
+ accessKey?: Array<string> | undefined;
161
+ accumulate?: string | undefined;
162
+ action?: string | undefined;
163
+ additive?: string | undefined;
164
+ align?: string | undefined;
165
+ alignmentBaseline?: string | undefined;
166
+ aLink?: string | undefined;
167
+ allow?: string | undefined;
168
+ allowFullScreen?: boolean | string | undefined;
169
+ allowPaymentRequest?: boolean | string | undefined;
170
+ allowTransparency?: string | undefined;
171
+ allowUserMedia?: boolean | string | undefined;
172
+ alpha?: boolean | string | undefined;
173
+ alphabetic?: number | string | undefined;
174
+ alt?: string | undefined;
175
+ amplitude?: number | string | undefined;
176
+ arabicForm?: string | undefined;
177
+ archive?: Array<string> | undefined;
178
+ ariaActiveDescendant?: string | undefined;
179
+ ariaAtomic?: "false" | "true" | (string & {}) | undefined;
180
+ ariaAutoComplete?: string | undefined;
181
+ ariaBusy?: "false" | "true" | (string & {}) | undefined;
182
+ ariaChecked?: "false" | "true" | (string & {}) | undefined;
183
+ ariaColCount?: number | string | undefined;
184
+ ariaColIndex?: number | string | undefined;
185
+ ariaColSpan?: number | string | undefined;
186
+ ariaControls?: Array<string> | undefined;
187
+ ariaCurrent?: string | undefined;
188
+ ariaDescribedBy?: Array<string> | undefined;
189
+ ariaDetails?: string | undefined;
190
+ ariaDisabled?: "false" | "true" | (string & {}) | undefined;
191
+ ariaDropEffect?: Array<string> | undefined;
192
+ ariaErrorMessage?: string | undefined;
193
+ ariaExpanded?: "false" | "true" | (string & {}) | undefined;
194
+ ariaFlowTo?: Array<string> | undefined;
195
+ ariaGrabbed?: "false" | "true" | (string & {}) | undefined;
196
+ ariaHasPopup?: string | undefined;
197
+ ariaHidden?: "false" | "true" | (string & {}) | undefined;
198
+ ariaInvalid?: string | undefined;
199
+ ariaKeyShortcuts?: string | undefined;
200
+ ariaLabel?: string | undefined;
201
+ ariaLabelledBy?: Array<string> | undefined;
202
+ ariaLevel?: number | string | undefined;
203
+ ariaLive?: string | undefined;
204
+ ariaModal?: "false" | "true" | (string & {}) | undefined;
205
+ ariaMultiLine?: "false" | "true" | (string & {}) | undefined;
206
+ ariaMultiSelectable?: "false" | "true" | (string & {}) | undefined;
207
+ ariaOrientation?: string | undefined;
208
+ ariaOwns?: Array<string> | undefined;
209
+ ariaPlaceholder?: string | undefined;
210
+ ariaPosInSet?: number | string | undefined;
211
+ ariaPressed?: "false" | "true" | (string & {}) | undefined;
212
+ ariaReadOnly?: "false" | "true" | (string & {}) | undefined;
213
+ ariaRelevant?: string | undefined;
214
+ ariaRequired?: "false" | "true" | (string & {}) | undefined;
215
+ ariaRoleDescription?: Array<string> | undefined;
216
+ ariaRowCount?: number | string | undefined;
217
+ ariaRowIndex?: number | string | undefined;
218
+ ariaRowSpan?: number | string | undefined;
219
+ ariaSelected?: "false" | "true" | (string & {}) | undefined;
220
+ ariaSetSize?: number | string | undefined;
221
+ ariaSort?: string | undefined;
222
+ ariaValueMax?: number | string | undefined;
223
+ ariaValueMin?: number | string | undefined;
224
+ ariaValueNow?: number | string | undefined;
225
+ ariaValueText?: string | undefined;
226
+ as?: string | undefined;
227
+ ascent?: number | string | undefined;
228
+ async?: boolean | string | undefined;
229
+ attributeName?: string | undefined;
230
+ attributeType?: string | undefined;
231
+ autoCapitalize?: string | undefined;
232
+ autoComplete?: Array<string> | undefined;
233
+ autoCorrect?: string | undefined;
234
+ autoFocus?: boolean | string | undefined;
235
+ autoPlay?: boolean | string | undefined;
236
+ autoSave?: string | undefined;
237
+ axis?: string | undefined;
238
+ azimuth?: number | string | undefined;
239
+ background?: string | undefined;
240
+ bandwidth?: string | undefined;
241
+ baseFrequency?: string | undefined;
242
+ baselineShift?: string | undefined;
243
+ baseProfile?: string | undefined;
244
+ bbox?: string | undefined;
245
+ begin?: string | undefined;
246
+ bgColor?: string | undefined;
247
+ bias?: number | string | undefined;
248
+ blocking?: Array<string> | undefined;
249
+ border?: number | string | undefined;
250
+ borderColor?: string | undefined;
251
+ bottomMargin?: number | string | undefined;
252
+ by?: string | undefined;
253
+ calcMode?: string | undefined;
254
+ capHeight?: number | string | undefined;
255
+ capture?: string | undefined;
256
+ cellPadding?: string | undefined;
257
+ cellSpacing?: string | undefined;
258
+ char?: string | undefined;
259
+ charOff?: string | undefined;
260
+ charSet?: string | undefined;
261
+ checked?: boolean | string | undefined;
262
+ cite?: string | undefined;
263
+ classId?: string | undefined;
264
+ className?: Array<string> | undefined;
265
+ clear?: string | undefined;
266
+ clip?: string | undefined;
267
+ clipPath?: string | undefined;
268
+ clipPathUnits?: string | undefined;
269
+ clipRule?: string | undefined;
270
+ closedBy?: string | undefined;
271
+ code?: string | undefined;
272
+ codeBase?: string | undefined;
273
+ codeType?: string | undefined;
274
+ color?: string | undefined;
275
+ colorInterpolation?: string | undefined;
276
+ colorInterpolationFilters?: string | undefined;
277
+ colorProfile?: string | undefined;
278
+ colorRendering?: string | undefined;
279
+ colorSpace?: string | undefined;
280
+ cols?: number | string | undefined;
281
+ colSpan?: number | string | undefined;
282
+ command?: string | undefined;
283
+ commandFor?: string | undefined;
284
+ compact?: boolean | string | undefined;
285
+ content?: string | undefined;
286
+ contentEditable?: "false" | "true" | (string & {}) | undefined;
287
+ contentScriptType?: string | undefined;
288
+ contentStyleType?: string | undefined;
289
+ controls?: boolean | string | undefined;
290
+ controlsList?: Array<string> | undefined;
291
+ coords?: Array<number | string> | undefined;
292
+ credentialless?: boolean | string | undefined;
293
+ crossOrigin?: string | undefined;
294
+ cursor?: string | undefined;
295
+ cx?: string | undefined;
296
+ cy?: string | undefined;
297
+ d?: string | undefined;
298
+ data?: string | undefined;
299
+ dataType?: string | undefined;
300
+ dateTime?: string | undefined;
301
+ declare?: boolean | string | undefined;
302
+ decoding?: string | undefined;
303
+ default?: boolean | string | undefined;
304
+ defaultAction?: string | undefined;
305
+ defer?: boolean | string | undefined;
306
+ descent?: number | string | undefined;
307
+ diffuseConstant?: number | string | undefined;
308
+ dir?: string | undefined;
309
+ direction?: string | undefined;
310
+ dirName?: string | undefined;
311
+ disabled?: boolean | string | undefined;
312
+ disablePictureInPicture?: boolean | string | undefined;
313
+ disableRemotePlayback?: boolean | string | undefined;
314
+ display?: string | undefined;
315
+ divisor?: number | string | undefined;
316
+ dominantBaseline?: string | undefined;
317
+ download?: boolean | string | undefined;
318
+ draggable?: "false" | "true" | (string & {}) | undefined;
319
+ dur?: string | undefined;
320
+ dx?: string | undefined;
321
+ dy?: string | undefined;
322
+ edgeMode?: string | undefined;
323
+ editable?: string | undefined;
324
+ elevation?: number | string | undefined;
325
+ enableBackground?: string | undefined;
326
+ encType?: string | undefined;
327
+ end?: string | undefined;
328
+ enterKeyHint?: string | undefined;
329
+ event?: string | undefined;
330
+ exponent?: number | string | undefined;
331
+ exportParts?: Array<string> | undefined;
332
+ externalResourcesRequired?: string | undefined;
333
+ face?: string | undefined;
334
+ fetchPriority?: string | undefined;
335
+ fill?: string | undefined;
336
+ fillOpacity?: number | string | undefined;
337
+ fillRule?: string | undefined;
338
+ filter?: string | undefined;
339
+ filterRes?: string | undefined;
340
+ filterUnits?: string | undefined;
341
+ floodColor?: string | undefined;
342
+ floodOpacity?: string | undefined;
343
+ focusable?: string | undefined;
344
+ focusHighlight?: string | undefined;
345
+ fontFamily?: string | undefined;
346
+ fontSize?: string | undefined;
347
+ fontSizeAdjust?: string | undefined;
348
+ fontStretch?: string | undefined;
349
+ fontStyle?: string | undefined;
350
+ fontVariant?: string | undefined;
351
+ fontWeight?: string | undefined;
352
+ form?: string | undefined;
353
+ formAction?: string | undefined;
354
+ format?: string | undefined;
355
+ formEncType?: string | undefined;
356
+ formMethod?: string | undefined;
357
+ formNoValidate?: boolean | string | undefined;
358
+ formTarget?: string | undefined;
359
+ fr?: string | undefined;
360
+ frame?: string | undefined;
361
+ frameBorder?: string | undefined;
362
+ from?: string | undefined;
363
+ fx?: string | undefined;
364
+ fy?: string | undefined;
365
+ g1?: Array<string> | undefined;
366
+ g2?: Array<string> | undefined;
367
+ glyphName?: Array<string> | undefined;
368
+ glyphOrientationHorizontal?: string | undefined;
369
+ glyphOrientationVertical?: string | undefined;
370
+ glyphRef?: string | undefined;
371
+ gradientTransform?: string | undefined;
372
+ gradientUnits?: string | undefined;
373
+ handler?: string | undefined;
374
+ hanging?: number | string | undefined;
375
+ hatchContentUnits?: string | undefined;
376
+ hatchUnits?: string | undefined;
377
+ headers?: Array<string> | undefined;
378
+ height?: number | string | undefined;
379
+ hidden?: boolean | string | undefined;
380
+ high?: number | string | undefined;
381
+ horizAdvX?: number | string | undefined;
382
+ horizOriginX?: number | string | undefined;
383
+ horizOriginY?: number | string | undefined;
384
+ href?: string | undefined;
385
+ hrefLang?: string | undefined;
386
+ hSpace?: number | string | undefined;
387
+ htmlFor?: Array<string> | undefined;
388
+ httpEquiv?: Array<string> | undefined;
389
+ id?: string | undefined;
390
+ ideographic?: number | string | undefined;
391
+ imageRendering?: string | undefined;
392
+ imageSizes?: string | undefined;
393
+ imageSrcSet?: string | undefined;
394
+ in?: string | undefined;
395
+ in2?: string | undefined;
396
+ inert?: boolean | string | undefined;
397
+ initialVisibility?: string | undefined;
398
+ inputMode?: string | undefined;
399
+ integrity?: string | undefined;
400
+ intercept?: number | string | undefined;
401
+ is?: string | undefined;
402
+ isMap?: boolean | string | undefined;
403
+ itemId?: string | undefined;
404
+ itemProp?: Array<string> | undefined;
405
+ itemRef?: Array<string> | undefined;
406
+ itemScope?: boolean | string | undefined;
407
+ itemType?: Array<string> | undefined;
408
+ k?: number | string | undefined;
409
+ k1?: number | string | undefined;
410
+ k2?: number | string | undefined;
411
+ k3?: number | string | undefined;
412
+ k4?: number | string | undefined;
413
+ kernelMatrix?: Array<string> | undefined;
414
+ kernelUnitLength?: string | undefined;
415
+ kerning?: string | undefined;
416
+ keyPoints?: string | undefined;
417
+ keySplines?: string | undefined;
418
+ keyTimes?: string | undefined;
419
+ kind?: string | undefined;
420
+ label?: string | undefined;
421
+ lang?: string | undefined;
422
+ language?: string | undefined;
423
+ leftMargin?: number | string | undefined;
424
+ lengthAdjust?: string | undefined;
425
+ letterSpacing?: string | undefined;
426
+ lightingColor?: string | undefined;
427
+ limitingConeAngle?: number | string | undefined;
428
+ link?: string | undefined;
429
+ list?: string | undefined;
430
+ loading?: string | undefined;
431
+ local?: string | undefined;
432
+ longDesc?: string | undefined;
433
+ loop?: boolean | string | undefined;
434
+ low?: number | string | undefined;
435
+ lowSrc?: string | undefined;
436
+ manifest?: string | undefined;
437
+ marginHeight?: number | string | undefined;
438
+ marginWidth?: number | string | undefined;
439
+ markerEnd?: string | undefined;
440
+ markerHeight?: string | undefined;
441
+ markerMid?: string | undefined;
442
+ markerStart?: string | undefined;
443
+ markerUnits?: string | undefined;
444
+ markerWidth?: string | undefined;
445
+ mask?: string | undefined;
446
+ maskContentUnits?: string | undefined;
447
+ maskType?: string | undefined;
448
+ maskUnits?: string | undefined;
449
+ mathematical?: string | undefined;
450
+ max?: string | undefined;
451
+ maxLength?: number | string | undefined;
452
+ media?: string | undefined;
453
+ mediaCharacterEncoding?: string | undefined;
454
+ mediaContentEncodings?: string | undefined;
455
+ mediaSize?: number | string | undefined;
456
+ mediaTime?: string | undefined;
457
+ method?: string | undefined;
458
+ min?: string | undefined;
459
+ minLength?: number | string | undefined;
460
+ mode?: string | undefined;
461
+ multiple?: boolean | string | undefined;
462
+ muted?: boolean | string | undefined;
463
+ name?: string | undefined;
464
+ navDown?: string | undefined;
465
+ navDownLeft?: string | undefined;
466
+ navDownRight?: string | undefined;
467
+ navLeft?: string | undefined;
468
+ navNext?: string | undefined;
469
+ navPrev?: string | undefined;
470
+ navRight?: string | undefined;
471
+ navUp?: string | undefined;
472
+ navUpLeft?: string | undefined;
473
+ navUpRight?: string | undefined;
474
+ noHref?: boolean | string | undefined;
475
+ noModule?: boolean | string | undefined;
476
+ nonce?: string | undefined;
477
+ noResize?: boolean | string | undefined;
478
+ noShade?: boolean | string | undefined;
479
+ noValidate?: boolean | string | undefined;
480
+ noWrap?: boolean | string | undefined;
481
+ numOctaves?: string | undefined;
482
+ object?: string | undefined;
483
+ observer?: string | undefined;
484
+ offset?: string | undefined;
485
+ onAbort?: string | undefined;
486
+ onActivate?: string | undefined;
487
+ onAfterPrint?: string | undefined;
488
+ onAuxClick?: string | undefined;
489
+ onBeforeMatch?: string | undefined;
490
+ onBeforePrint?: string | undefined;
491
+ onBeforeToggle?: string | undefined;
492
+ onBeforeUnload?: string | undefined;
493
+ onBegin?: string | undefined;
494
+ onBlur?: string | undefined;
495
+ onCancel?: string | undefined;
496
+ onCanPlay?: string | undefined;
497
+ onCanPlayThrough?: string | undefined;
498
+ onChange?: string | undefined;
499
+ onClick?: string | undefined;
500
+ onClose?: string | undefined;
501
+ onContextLost?: string | undefined;
502
+ onContextMenu?: string | undefined;
503
+ onContextRestored?: string | undefined;
504
+ onCopy?: string | undefined;
505
+ onCueChange?: string | undefined;
506
+ onCut?: string | undefined;
507
+ onDblClick?: string | undefined;
508
+ onDrag?: string | undefined;
509
+ onDragEnd?: string | undefined;
510
+ onDragEnter?: string | undefined;
511
+ onDragExit?: string | undefined;
512
+ onDragLeave?: string | undefined;
513
+ onDragOver?: string | undefined;
514
+ onDragStart?: string | undefined;
515
+ onDrop?: string | undefined;
516
+ onDurationChange?: string | undefined;
517
+ onEmptied?: string | undefined;
518
+ onEnd?: string | undefined;
519
+ onEnded?: string | undefined;
520
+ onError?: string | undefined;
521
+ onFocus?: string | undefined;
522
+ onFocusIn?: string | undefined;
523
+ onFocusOut?: string | undefined;
524
+ onFormData?: string | undefined;
525
+ onHashChange?: string | undefined;
526
+ onInput?: string | undefined;
527
+ onInvalid?: string | undefined;
528
+ onKeyDown?: string | undefined;
529
+ onKeyPress?: string | undefined;
530
+ onKeyUp?: string | undefined;
531
+ onLanguageChange?: string | undefined;
532
+ onLoad?: string | undefined;
533
+ onLoadedData?: string | undefined;
534
+ onLoadedMetadata?: string | undefined;
535
+ onLoadEnd?: string | undefined;
536
+ onLoadStart?: string | undefined;
537
+ onMessage?: string | undefined;
538
+ onMessageError?: string | undefined;
539
+ onMouseDown?: string | undefined;
540
+ onMouseEnter?: string | undefined;
541
+ onMouseLeave?: string | undefined;
542
+ onMouseMove?: string | undefined;
543
+ onMouseOut?: string | undefined;
544
+ onMouseOver?: string | undefined;
545
+ onMouseUp?: string | undefined;
546
+ onMouseWheel?: string | undefined;
547
+ onOffline?: string | undefined;
548
+ onOnline?: string | undefined;
549
+ onPageHide?: string | undefined;
550
+ onPageShow?: string | undefined;
551
+ onPaste?: string | undefined;
552
+ onPause?: string | undefined;
553
+ onPlay?: string | undefined;
554
+ onPlaying?: string | undefined;
555
+ onPopState?: string | undefined;
556
+ onProgress?: string | undefined;
557
+ onRateChange?: string | undefined;
558
+ onRejectionHandled?: string | undefined;
559
+ onRepeat?: string | undefined;
560
+ onReset?: string | undefined;
561
+ onResize?: string | undefined;
562
+ onScroll?: string | undefined;
563
+ onScrollEnd?: string | undefined;
564
+ onSecurityPolicyViolation?: string | undefined;
565
+ onSeeked?: string | undefined;
566
+ onSeeking?: string | undefined;
567
+ onSelect?: string | undefined;
568
+ onShow?: string | undefined;
569
+ onSlotChange?: string | undefined;
570
+ onStalled?: string | undefined;
571
+ onStorage?: string | undefined;
572
+ onSubmit?: string | undefined;
573
+ onSuspend?: string | undefined;
574
+ onTimeUpdate?: string | undefined;
575
+ onToggle?: string | undefined;
576
+ onUnhandledRejection?: string | undefined;
577
+ onUnload?: string | undefined;
578
+ onVolumeChange?: string | undefined;
579
+ onWaiting?: string | undefined;
580
+ onWheel?: string | undefined;
581
+ onZoom?: string | undefined;
582
+ opacity?: string | undefined;
583
+ open?: boolean | string | undefined;
584
+ operator?: string | undefined;
585
+ optimum?: number | string | undefined;
586
+ order?: string | undefined;
587
+ orient?: string | undefined;
588
+ orientation?: string | undefined;
589
+ origin?: string | undefined;
590
+ overflow?: string | undefined;
591
+ overlay?: string | undefined;
592
+ overlinePosition?: number | string | undefined;
593
+ overlineThickness?: number | string | undefined;
594
+ paintOrder?: string | undefined;
595
+ panose1?: string | undefined;
596
+ part?: Array<string> | undefined;
597
+ path?: string | undefined;
598
+ pathLength?: number | string | undefined;
599
+ pattern?: string | undefined;
600
+ patternContentUnits?: string | undefined;
601
+ patternTransform?: string | undefined;
602
+ patternUnits?: string | undefined;
603
+ phase?: string | undefined;
604
+ ping?: Array<string> | undefined;
605
+ pitch?: string | undefined;
606
+ placeholder?: string | undefined;
607
+ playbackOrder?: string | undefined;
608
+ playsInline?: boolean | string | undefined;
609
+ pointerEvents?: string | undefined;
610
+ points?: string | undefined;
611
+ pointsAtX?: number | string | undefined;
612
+ pointsAtY?: number | string | undefined;
613
+ pointsAtZ?: number | string | undefined;
614
+ popover?: string | undefined;
615
+ popoverTarget?: string | undefined;
616
+ popoverTargetAction?: string | undefined;
617
+ poster?: string | undefined;
618
+ prefix?: string | undefined;
619
+ preload?: string | undefined;
620
+ preserveAlpha?: string | undefined;
621
+ preserveAspectRatio?: string | undefined;
622
+ primitiveUnits?: string | undefined;
623
+ profile?: string | undefined;
624
+ prompt?: string | undefined;
625
+ propagate?: string | undefined;
626
+ property?: string | Array<string> | undefined;
627
+ r?: string | undefined;
628
+ radius?: string | undefined;
629
+ readOnly?: boolean | string | undefined;
630
+ referrerPolicy?: string | undefined;
631
+ refX?: string | undefined;
632
+ refY?: string | undefined;
633
+ rel?: Array<string> | undefined;
634
+ renderingIntent?: string | undefined;
635
+ repeatCount?: string | undefined;
636
+ repeatDur?: string | undefined;
637
+ required?: boolean | string | undefined;
638
+ requiredExtensions?: Array<string> | undefined;
639
+ requiredFeatures?: Array<string> | undefined;
640
+ requiredFonts?: Array<string> | undefined;
641
+ requiredFormats?: Array<string> | undefined;
642
+ resource?: string | undefined;
643
+ restart?: string | undefined;
644
+ result?: string | undefined;
645
+ results?: number | string | undefined;
646
+ rev?: string | Array<string> | undefined;
647
+ reversed?: boolean | string | undefined;
648
+ rightMargin?: number | string | undefined;
649
+ role?: string | undefined;
650
+ rotate?: string | undefined;
651
+ rows?: number | string | undefined;
652
+ rowSpan?: number | string | undefined;
653
+ rules?: string | undefined;
654
+ rx?: string | undefined;
655
+ ry?: string | undefined;
656
+ sandbox?: Array<string> | undefined;
657
+ scale?: string | undefined;
658
+ scheme?: string | undefined;
659
+ scope?: string | undefined;
660
+ scoped?: boolean | string | undefined;
661
+ scrolling?: "false" | "true" | (string & {}) | undefined;
662
+ seamless?: boolean | string | undefined;
663
+ security?: string | undefined;
664
+ seed?: string | undefined;
665
+ selected?: boolean | string | undefined;
666
+ shadowRootClonable?: boolean | string | undefined;
667
+ shadowRootCustomElementRegistry?: boolean | string | undefined;
668
+ shadowRootDelegatesFocus?: boolean | string | undefined;
669
+ shadowRootMode?: string | undefined;
670
+ shadowRootSerializable?: boolean | string | undefined;
671
+ shape?: string | undefined;
672
+ shapeRendering?: string | undefined;
673
+ side?: string | undefined;
674
+ size?: number | string | undefined;
675
+ sizes?: string | undefined;
676
+ slope?: string | undefined;
677
+ slot?: string | undefined;
678
+ snapshotTime?: string | undefined;
679
+ spacing?: string | undefined;
680
+ span?: number | string | undefined;
681
+ specularConstant?: number | string | undefined;
682
+ specularExponent?: number | string | undefined;
683
+ spellCheck?: "false" | "true" | (string & {}) | undefined;
684
+ spreadMethod?: string | undefined;
685
+ src?: string | undefined;
686
+ srcDoc?: string | undefined;
687
+ srcLang?: string | undefined;
688
+ srcSet?: string | undefined;
689
+ standby?: string | undefined;
690
+ start?: number | string | undefined;
691
+ startOffset?: string | undefined;
692
+ stdDeviation?: string | undefined;
693
+ stemh?: string | undefined;
694
+ stemv?: string | undefined;
695
+ step?: string | undefined;
696
+ stitchTiles?: string | undefined;
697
+ stopColor?: string | undefined;
698
+ stopOpacity?: string | undefined;
699
+ strikethroughPosition?: number | string | undefined;
700
+ strikethroughThickness?: number | string | undefined;
701
+ string?: string | undefined;
702
+ stroke?: string | undefined;
703
+ strokeDashArray?: Array<string> | undefined;
704
+ strokeDashOffset?: string | undefined;
705
+ strokeLineCap?: string | undefined;
706
+ strokeLineJoin?: string | undefined;
707
+ strokeMiterLimit?: number | string | undefined;
708
+ strokeOpacity?: number | string | undefined;
709
+ strokeWidth?: string | undefined;
710
+ style?: string | undefined;
711
+ summary?: string | undefined;
712
+ surfaceScale?: number | string | undefined;
713
+ syncBehavior?: string | undefined;
714
+ syncBehaviorDefault?: string | undefined;
715
+ syncMaster?: string | undefined;
716
+ syncTolerance?: string | undefined;
717
+ syncToleranceDefault?: string | undefined;
718
+ systemLanguage?: Array<string> | undefined;
719
+ tabIndex?: number | string | undefined;
720
+ tableValues?: string | undefined;
721
+ target?: string | undefined;
722
+ targetX?: number | string | undefined;
723
+ targetY?: number | string | undefined;
724
+ text?: string | undefined;
725
+ textAnchor?: string | undefined;
726
+ textDecoration?: string | undefined;
727
+ textLength?: string | undefined;
728
+ textRendering?: string | undefined;
729
+ timelineBegin?: string | undefined;
730
+ title?: string | undefined;
731
+ to?: string | undefined;
732
+ topMargin?: number | string | undefined;
733
+ transform?: string | undefined;
734
+ transformBehavior?: string | undefined;
735
+ transformOrigin?: string | undefined;
736
+ translate?: string | undefined;
737
+ type?: string | undefined;
738
+ typeMustMatch?: boolean | string | undefined;
739
+ typeOf?: Array<string> | undefined;
740
+ u1?: string | undefined;
741
+ u2?: string | undefined;
742
+ underlinePosition?: number | string | undefined;
743
+ underlineThickness?: number | string | undefined;
744
+ unicode?: string | undefined;
745
+ unicodeBidi?: string | undefined;
746
+ unicodeRange?: string | undefined;
747
+ unitsPerEm?: number | string | undefined;
748
+ unselectable?: string | undefined;
749
+ useMap?: string | undefined;
750
+ vAlign?: string | undefined;
751
+ vAlphabetic?: number | string | undefined;
752
+ value?: "false" | "true" | (string & {}) | undefined;
753
+ values?: string | undefined;
754
+ valueType?: string | undefined;
755
+ vectorEffect?: string | undefined;
756
+ version?: string | undefined;
757
+ vertAdvY?: number | string | undefined;
758
+ vertOriginX?: number | string | undefined;
759
+ vertOriginY?: number | string | undefined;
760
+ vHanging?: number | string | undefined;
761
+ vIdeographic?: number | string | undefined;
762
+ viewBox?: string | undefined;
763
+ viewTarget?: string | undefined;
764
+ visibility?: string | undefined;
765
+ vLink?: string | undefined;
766
+ vMathematical?: number | string | undefined;
767
+ vSpace?: number | string | undefined;
768
+ width?: number | string | undefined;
769
+ widths?: string | undefined;
770
+ wordSpacing?: string | undefined;
771
+ wrap?: string | undefined;
772
+ writingMode?: string | undefined;
773
+ writingSuggestions?: string | undefined;
774
+ x?: string | undefined;
775
+ x1?: string | undefined;
776
+ x2?: string | undefined;
777
+ xChannelSelector?: string | undefined;
778
+ xHeight?: number | string | undefined;
779
+ xLinkActuate?: string | undefined;
780
+ xLinkArcRole?: string | undefined;
781
+ xLinkHref?: string | undefined;
782
+ xLinkRole?: string | undefined;
783
+ xLinkShow?: string | undefined;
784
+ xLinkTitle?: string | undefined;
785
+ xLinkType?: string | undefined;
786
+ xmlBase?: string | undefined;
787
+ xmlLang?: string | undefined;
788
+ xmlns?: string | undefined;
789
+ xmlnsXLink?: string | undefined;
790
+ xmlSpace?: string | undefined;
791
+ y?: string | undefined;
792
+ y1?: string | undefined;
793
+ y2?: string | undefined;
794
+ yChannelSelector?: string | undefined;
795
+ z?: string | undefined;
796
+ zoomAndPan?: string | undefined;
797
+ [PropertyName: string]: boolean | number | string | null | undefined | Array<string | number>;
798
+ }
799
+ // ## Content maps
800
+ /**
801
+ * Union of registered hast nodes that can occur in {@link Element}.
80
802
  *
81
- * Nothing here throws and nothing logs. An unknown name drops the whole
82
- * directive, an unknown key or value drops that pair only, and a directive with
83
- * no block after it does nothing at all (P3/D2/D6). The comment node is left
84
- * where it is: the sanitiser removes it, which is why no Vantage-specific
85
- * markup other than these attributes ever reaches the DOM.
803
+ * To register mote custom hast nodes, add them to {@link ElementContentMap}.
804
+ * They will be automatically added here.
86
805
  */
87
-
806
+ type ElementContent = ElementContentMap[keyof ElementContentMap];
807
+ /**
808
+ * Registry of all hast nodes that can occur as children of {@link Element}.
809
+ *
810
+ * For a union of all {@link Element} children, see {@link ElementContent}.
811
+ */
812
+ interface ElementContentMap {
813
+ comment: Comment;
814
+ element: Element;
815
+ text: Text;
816
+ }
817
+ /**
818
+ * Union of registered hast nodes that can occur in {@link Root}.
819
+ *
820
+ * To register custom hast nodes, add them to {@link RootContentMap}.
821
+ * They will be automatically added here.
822
+ */
823
+ type RootContent = RootContentMap[keyof RootContentMap];
824
+ /**
825
+ * Registry of all hast nodes that can occur as children of {@link Root}.
826
+ *
827
+ * > 👉 **Note**: {@link Root} does not need to be an entire document.
828
+ * > it can also be a fragment.
829
+ *
830
+ * For a union of all {@link Root} children, see {@link RootContent}.
831
+ */
832
+ interface RootContentMap {
833
+ comment: Comment;
834
+ doctype: Doctype;
835
+ element: Element;
836
+ text: Text;
837
+ }
838
+ // ## Abstract nodes
839
+ /**
840
+ * Abstract hast node.
841
+ *
842
+ * This interface is supposed to be extended.
843
+ * If you can use {@link Literal} or {@link Parent}, you should.
844
+ * But for example in HTML, a `Doctype` is neither literal nor parent, but
845
+ * still a node.
846
+ *
847
+ * To register custom hast nodes, add them to {@link RootContentMap} and other
848
+ * places where relevant (such as {@link ElementContentMap}).
849
+ *
850
+ * For a union of all registered hast nodes, see {@link Nodes}.
851
+ */
852
+ interface Node extends Node$1 {
853
+ /**
854
+ * Info from the ecosystem.
855
+ */
856
+ data?: Data | undefined;
857
+ }
858
+ /**
859
+ * Abstract hast node that contains the smallest possible value.
860
+ *
861
+ * This interface is supposed to be extended if you make custom hast nodes.
862
+ *
863
+ * For a union of all registered hast literals, see {@link Literals}.
864
+ */
865
+ interface Literal extends Node {
866
+ /**
867
+ * Plain-text value.
868
+ */
869
+ value: string;
870
+ }
871
+ /**
872
+ * Abstract hast node that contains other hast nodes (*children*).
873
+ *
874
+ * This interface is supposed to be extended if you make custom hast nodes.
875
+ *
876
+ * For a union of all registered hast parents, see {@link Parents}.
877
+ */
878
+ interface Parent extends Node {
879
+ /**
880
+ * List of children.
881
+ */
882
+ children: RootContent[];
883
+ }
884
+ // ## Concrete nodes
885
+ /**
886
+ * HTML comment.
887
+ */
888
+ interface Comment extends Literal {
889
+ /**
890
+ * Node type of HTML comments in hast.
891
+ */
892
+ type: "comment";
893
+ /**
894
+ * Data associated with the comment.
895
+ */
896
+ data?: CommentData | undefined;
897
+ }
898
+ /**
899
+ * Info associated with hast comments by the ecosystem.
900
+ */
901
+ interface CommentData extends Data {}
902
+ /**
903
+ * HTML document type.
904
+ */
905
+ interface Doctype extends Node$1 {
906
+ /**
907
+ * Node type of HTML document types in hast.
908
+ */
909
+ type: "doctype";
910
+ /**
911
+ * Data associated with the doctype.
912
+ */
913
+ data?: DoctypeData | undefined;
914
+ }
915
+ /**
916
+ * Info associated with hast doctypes by the ecosystem.
917
+ */
918
+ interface DoctypeData extends Data {}
919
+ /**
920
+ * HTML element.
921
+ */
922
+ interface Element extends Parent {
923
+ /**
924
+ * Node type of elements.
925
+ */
926
+ type: "element";
927
+ /**
928
+ * Tag name (such as `'body'`) of the element.
929
+ */
930
+ tagName: string;
931
+ /**
932
+ * Info associated with the element.
933
+ */
934
+ properties: Properties;
935
+ /**
936
+ * Children of element.
937
+ */
938
+ children: ElementContent[];
939
+ /**
940
+ * When the `tagName` field is `'template'`, a `content` field can be
941
+ * present.
942
+ */
943
+ content?: Root | undefined;
944
+ /**
945
+ * Data associated with the element.
946
+ */
947
+ data?: ElementData | undefined;
948
+ }
949
+ /**
950
+ * Info associated with hast elements by the ecosystem.
951
+ */
952
+ interface ElementData extends Data {}
953
+ /**
954
+ * Document fragment or a whole document.
955
+ *
956
+ * Should be used as the root of a tree and must not be used as a child.
957
+ *
958
+ * Can also be used as the value for the content field on a `'template'` element.
959
+ */
960
+ interface Root extends Parent {
961
+ /**
962
+ * Node type of hast root.
963
+ */
964
+ type: "root";
965
+ /**
966
+ * Children of root.
967
+ */
968
+ children: RootContent[];
969
+ /**
970
+ * Data associated with the hast root.
971
+ */
972
+ data?: RootData | undefined;
973
+ }
974
+ /**
975
+ * Info associated with hast root nodes by the ecosystem.
976
+ */
977
+ interface RootData extends Data {}
978
+ /**
979
+ * HTML character data (plain text).
980
+ */
981
+ interface Text extends Literal {
982
+ /**
983
+ * Node type of HTML character data (plain text) in hast.
984
+ */
985
+ type: "text";
986
+ /**
987
+ * Data associated with the text.
988
+ */
989
+ data?: TextData | undefined;
990
+ }
991
+ /**
992
+ * Info associated with hast texts by the ecosystem.
993
+ */
994
+ interface TextData extends Data {}
995
+ //#endregion
996
+ //#region src/rehypeVantageAlerts.d.ts
997
+ /**
998
+ * The five GFM alert kinds, lowercased.
999
+ *
1000
+ * Deliberately *not* re-derived from `VANTAGE_TONES`: that list carries a sixth
1001
+ * token, `muted`, which is ours and is not an alert word. The overlap is the
1002
+ * point — the five that coincide share a palette — but the two vocabularies are
1003
+ * closed by different authorities and a change to one must not silently move the
1004
+ * other. A test asserts the five are a subset of the tones.
1005
+ */
1006
+ declare const VANTAGE_ALERTS: readonly ["note", "tip", "important", "warning", "caution"];
1007
+ type VantageAlert = (typeof VANTAGE_ALERTS)[number];
1008
+ /** The visible label per kind. Title case, as GitHub renders it. */
1009
+ declare const ALERT_TITLES: Readonly<Record<VantageAlert, string>>;
1010
+ /**
1011
+ * Compile `> [!KIND]` blockquotes into `data-vantage-alert="kind"`.
1012
+ *
1013
+ * Order in the chain matters twice, and both are stated in `pipeline.ts`:
1014
+ *
1015
+ * - **after `rehypeSourceLines`**, so the injected title carries no
1016
+ * `data-source-line`. That is what keeps it out of `anchorBlockWithin`, which
1017
+ * filters candidates to those with a finite line — otherwise a review comment
1018
+ * on an alert would anchor to the word "Warning" instead of to the prose.
1019
+ * - **before `rehypeSanitize`**, so nothing reaches the DOM the schema has not
1020
+ * passed. `dataVantageAlert` is allowlisted there by name *and* value, like
1021
+ * every other `data-vantage-*` attribute.
1022
+ */
1023
+ declare function rehypeVantageAlerts(): (tree: Root) => void;
1024
+ //#endregion
1025
+ //#region src/rehypeSourceLines.d.ts
1026
+ interface RehypeSourceLinesOptions {
1027
+ /**
1028
+ * Lines stripped off the front of the file before parsing — frontmatter,
1029
+ * essentially. Added to every emitted line number so `data-source-line`
1030
+ * names a line in the *file* rather than in the parsed body, which is what
1031
+ * a `#L42` link written against the file means. Defaults to 0.
1032
+ */
1033
+ offset?: number;
1034
+ }
1035
+ declare const rehypeSourceLines: Plugin<[RehypeSourceLinesOptions?], Root>;
1036
+ //#endregion
1037
+ //#region src/rehypeVantageDirectives.d.ts
88
1038
  declare const rehypeVantageDirectives: Plugin<[], Root>;
89
-
1039
+ //#endregion
1040
+ //#region src/vantageDirectives.d.ts
90
1041
  /**
91
1042
  * The directive grammar and the closed vocabulary — one parser, no renderer.
92
1043
  *
@@ -196,31 +1147,31 @@ type DirectiveVocabulary = Readonly<Record<string, KeyTable | undefined>>;
196
1147
  */
197
1148
  declare const DIRECTIVE_VOCABULARY: DirectiveVocabulary;
198
1149
  interface DirectivePair {
199
- key: string;
200
- /** The value with quotes stripped, if it was quoted. */
201
- value: string;
202
- /** Offset of `key` within the comment's inner text. */
203
- keyOffset: number;
204
- /** Offset of the value token — opening quote included — within it. */
205
- valueOffset: number;
206
- quoted: boolean;
1150
+ key: string;
1151
+ /** The value with quotes stripped, if it was quoted. */
1152
+ value: string;
1153
+ /** Offset of `key` within the comment's inner text. */
1154
+ keyOffset: number;
1155
+ /** Offset of the value token — opening quote included — within it. */
1156
+ valueOffset: number;
1157
+ quoted: boolean;
207
1158
  }
208
1159
  interface ParsedDirective {
209
- kind: "directive";
210
- name: string;
211
- /** Offset of `name` within the comment's inner text. */
212
- nameOffset: number;
213
- /** In written order, duplicates included: a checker reports them, the
214
- * renderer resolves them last-one-wins. */
215
- pairs: DirectivePair[];
1160
+ kind: "directive";
1161
+ name: string;
1162
+ /** Offset of `name` within the comment's inner text. */
1163
+ nameOffset: number;
1164
+ /** In written order, duplicates included: a checker reports them, the
1165
+ * renderer resolves them last-one-wins. */
1166
+ pairs: DirectivePair[];
216
1167
  }
217
1168
  /** Sentinel present, grammar not satisfied. The renderer ignores `reason`. */
218
1169
  interface MalformedDirective {
219
- kind: "malformed";
220
- /** One clause a checker can quote verbatim, lowercase and unpunctuated. */
221
- reason: string;
222
- /** Offset of the first character the parse could not use. */
223
- offset: number;
1170
+ kind: "malformed";
1171
+ /** One clause a checker can quote verbatim, lowercase and unpunctuated. */
1172
+ reason: string;
1173
+ /** Offset of the first character the parse could not use. */
1174
+ offset: number;
224
1175
  }
225
1176
  type DirectiveParse = ParsedDirective | MalformedDirective | null;
226
1177
  /**
@@ -240,60 +1191,30 @@ declare function hasVantageSentinel(comment: string): boolean;
240
1191
  * point at the character that broke.
241
1192
  */
242
1193
  declare function parseVantageDirective(comment: string): DirectiveParse;
243
-
244
- /**
245
- * The one definition of the Vantage remark/rehype chain.
246
- *
247
- * Three call sites render Markdown — `renderMarkdown` (string in, HTML out,
248
- * which is what the CLI checker runs), the app's `<MarkdownViewer>`, and this
249
- * package's exported `<MarkdownViewer>` — and each one used to hand-write the
250
- * same plugin list in the same order. Three copies kept in sync by hand is how
251
- * a plugin lands in the viewer and not in the checker: a document that styles
252
- * in the app and renders bare through the tool that is supposed to validate it,
253
- * with no error anywhere.
254
- *
255
- * The order is load-bearing, not incidental:
256
- *
257
- * - `rehypeRaw` first: `remark-rehype` runs with `allowDangerousHtml: true`,
258
- * so raw HTML is still a string until this plugin parses it.
259
- * - `rehypeSourceLines` before `rehypeSanitize`: `data-source-line` has to be
260
- * an allowlisted attribute on an element the sanitiser keeps.
261
- * - `rehypeSlug`, `rehypeHighlight` and `rehypeKatex` after `rehypeSanitize`.
262
- * For `rehypeSlug` this is not a preference: the sanitiser's default schema
263
- * clobbers `id` with the prefix `user-content-`, so slugging before it turns
264
- * every `#heading` link in every document into a dead anchor. For the other
265
- * two it means their output is trusted rather than filtered — KaTeX emits
266
- * inline `style` on nearly every glyph.
267
- *
268
- * Anything that reads HTML comments must sit between `rehypeRaw` and
269
- * `rehypeSanitize`: before `rehypeRaw` there are no comment nodes, and
270
- * `rehypeSanitize` deletes them. `rehypeVantageDirectives` is what occupies
271
- * that slot, and it is registered unconditionally — a renderer that skipped it
272
- * would disagree with the others about what a document means.
273
- */
274
-
1194
+ //#endregion
1195
+ //#region src/pipeline.d.ts
275
1196
  interface PipelineOptions {
276
- /** GFM tables, strikethrough, task lists (default: true) */
277
- gfm?: boolean;
278
- /** KaTeX math, `$$…$$` only (default: true) */
279
- math?: boolean;
280
- /** Syntax highlighting via highlight.js (default: true) */
281
- highlight?: boolean;
282
- /** `data-source-line` attributes for line anchors (default: true) */
283
- sourceLines?: boolean;
284
- /** XSS sanitisation (default: true) */
285
- sanitize?: boolean;
286
- /**
287
- * Lines the frontmatter consumed, added to every emitted line number so
288
- * `data-source-line` names a line in the *file* rather than in the parsed
289
- * body — which is what a `#L42` link written against the file means.
290
- * Defaults to 0. Ignored when `sourceLines` is false.
291
- */
292
- bodyLineOffset?: number;
1197
+ /** GFM tables, strikethrough, task lists (default: true) */
1198
+ gfm?: boolean;
1199
+ /** KaTeX math, `$$…$$` only (default: true) */
1200
+ math?: boolean;
1201
+ /** Syntax highlighting via highlight.js (default: true) */
1202
+ highlight?: boolean;
1203
+ /** `data-source-line` attributes for line anchors (default: true) */
1204
+ sourceLines?: boolean;
1205
+ /** XSS sanitisation (default: true) */
1206
+ sanitize?: boolean;
1207
+ /**
1208
+ * Lines the frontmatter consumed, added to every emitted line number so
1209
+ * `data-source-line` names a line in the *file* rather than in the parsed
1210
+ * body — which is what a `#L42` link written against the file means.
1211
+ * Defaults to 0. Ignored when `sourceLines` is false.
1212
+ */
1213
+ bodyLineOffset?: number;
293
1214
  }
294
1215
  interface Pipeline {
295
- remarkPlugins: PluggableList;
296
- rehypePlugins: PluggableList;
1216
+ remarkPlugins: PluggableList;
1217
+ rehypePlugins: PluggableList;
297
1218
  }
298
1219
  /**
299
1220
  * The mdast half of the chain. Exported on its own because there is a real
@@ -315,7 +1236,8 @@ declare function buildRemarkPlugins(options?: PipelineOptions): PluggableList;
315
1236
  * the chain has been built.
316
1237
  */
317
1238
  declare function buildPipeline(options?: PipelineOptions): Pipeline;
318
-
1239
+ //#endregion
1240
+ //#region src/scrollToLineAnchor.d.ts
319
1241
  /**
320
1242
  * Framework-agnostic line anchor utilities.
321
1243
  * Scroll to and highlight the elements a GitHub-style line anchor
@@ -334,7 +1256,8 @@ declare function clearLineAnchorHighlights(container: HTMLElement): void;
334
1256
  * @returns A cleanup function that removes the highlights
335
1257
  */
336
1258
  declare function scrollToLineAnchor(container: HTMLElement, hash: string): (() => void) | null;
337
-
1259
+ //#endregion
1260
+ //#region src/lineAnchor.d.ts
338
1261
  /**
339
1262
  * Parsing for GitHub-style line anchors, with no DOM in sight.
340
1263
  *
@@ -349,10 +1272,11 @@ declare function scrollToLineAnchor(container: HTMLElement, hash: string): (() =
349
1272
  * Returns null if the hash is not a line anchor.
350
1273
  */
351
1274
  declare function parseLineAnchor(hash: string): {
352
- start: number;
353
- end: number;
1275
+ start: number;
1276
+ end: number;
354
1277
  } | null;
355
-
1278
+ //#endregion
1279
+ //#region src/frontmatter.d.ts
356
1280
  /**
357
1281
  * Frontmatter parser for YAML (---) and TOML (+++) delimited content.
358
1282
  * Works in both browser and server environments.
@@ -374,61 +1298,41 @@ type FrontmatterFormat = "yaml" | "toml" | "none";
374
1298
  * of fields, which is not something a metadata card can render.
375
1299
  */
376
1300
  interface FrontmatterProblem {
377
- kind: "unterminated" | "invalid" | "not-a-mapping";
378
- /** The delimiter the document opened with. */
379
- delimiter: string;
380
- message?: string;
381
- line?: number;
382
- column?: number;
1301
+ kind: "unterminated" | "invalid" | "not-a-mapping";
1302
+ /** The delimiter the document opened with. */
1303
+ delimiter: string;
1304
+ message?: string;
1305
+ line?: number;
1306
+ column?: number;
383
1307
  }
384
1308
  interface ParsedFrontmatter {
385
- frontmatter: Record<string, unknown>;
386
- body: string;
387
- format: FrontmatterFormat;
388
- /**
389
- * How many source lines the frontmatter block consumed — the shift between a
390
- * line number in `body` and the same line in the original file:
391
- * `fileLine = bodyLine + bodyLineOffset`.
392
- *
393
- * Anything that renders `body` and reports line numbers (line anchors, review
394
- * comment anchors) has to add this back, or every number it produces points
395
- * `bodyLineOffset` lines short of the text it names.
396
- */
397
- bodyLineOffset: number;
398
- /**
399
- * Set when the document opens with a frontmatter delimiter that did not
400
- * yield a metadata table. Everything else in this result is unchanged —
401
- * this records *why*, it does not change what rendering does.
402
- */
403
- problem?: FrontmatterProblem;
1309
+ frontmatter: Record<string, unknown>;
1310
+ body: string;
1311
+ format: FrontmatterFormat;
1312
+ /**
1313
+ * How many source lines the frontmatter block consumed — the shift between a
1314
+ * line number in `body` and the same line in the original file:
1315
+ * `fileLine = bodyLine + bodyLineOffset`.
1316
+ *
1317
+ * Anything that renders `body` and reports line numbers (line anchors, review
1318
+ * comment anchors) has to add this back, or every number it produces points
1319
+ * `bodyLineOffset` lines short of the text it names.
1320
+ */
1321
+ bodyLineOffset: number;
1322
+ /**
1323
+ * Set when the document opens with a frontmatter delimiter that did not
1324
+ * yield a metadata table. Everything else in this result is unchanged —
1325
+ * this records *why*, it does not change what rendering does.
1326
+ */
1327
+ problem?: FrontmatterProblem;
404
1328
  }
405
1329
  /**
406
1330
  * Parse frontmatter from markdown content.
407
1331
  * Supports YAML (delimited by ---) and TOML (delimited by +++).
408
1332
  */
409
1333
  declare function parseFrontmatter(content: string): ParsedFrontmatter;
410
-
411
- /**
412
- * The `vantage:` frontmatter key — file-scoped chrome (`docs/reference/inline-markup.md`, "File-scoped chrome").
413
- *
414
- * One reserved key at the top level of a document's frontmatter, holding the
415
- * chrome that belongs to the *file* rather than to a section. Today that is one
416
- * thing: whether the document's lifecycle `status:` is shown as a chip above the
417
- * metadata card, instead of being buried as one row inside it.
418
- *
419
- * Read only at the top level, and **inert on every failure** (P3): an unknown
420
- * key, a value outside the closed set, or a `vantage:` that is not a table
421
- * produces no chrome, no throw and no console output. The reasons are returned
422
- * as data in `issues`, for anything that wants to report them — `vantage-check`
423
- * does, and it is the only signal an author gets. That split is exactly the one
424
- * `FrontmatterProblem` already uses in `frontmatter.ts`: the viewer reads the
425
- * value, the checker reads the reasons.
426
- *
427
- * Like `vantageDirectives.ts`, this module is imported by the CLI checker **by
428
- * relative path**, so it must stay a pure function of already-parsed data: no
429
- * hast, no React, no filesystem.
430
- */
431
-
1334
+ //#endregion
1335
+ //#region src/vantageFrontmatter.d.ts
432
1336
  /**
433
1337
  * The document lifecycle vocabulary. Closed; extending it is a code change.
434
1338
  *
@@ -462,29 +1366,29 @@ declare const DOC_STATUS_TONES: Readonly<Record<DocStatus, (typeof VANTAGE_TONES
462
1366
  * says something the document's own `status:` does not.
463
1367
  */
464
1368
  type VantageFrontmatterIssue = {
465
- kind: "not-a-table";
466
- value: unknown;
1369
+ kind: "not-a-table";
1370
+ value: unknown;
467
1371
  } | {
468
- kind: "unknown-key";
469
- key: string;
1372
+ kind: "unknown-key";
1373
+ key: string;
470
1374
  } | {
471
- kind: "bad-value";
472
- key: string;
473
- value: unknown;
474
- legal: readonly string[];
1375
+ kind: "bad-value";
1376
+ key: string;
1377
+ value: unknown;
1378
+ legal: readonly string[];
475
1379
  } | {
476
- kind: "status-chip-orphan";
477
- status: unknown;
1380
+ kind: "status-chip-orphan";
1381
+ status: unknown;
478
1382
  } | {
479
- kind: "status-chip-disagrees";
480
- chip: DocStatus;
481
- status: unknown;
1383
+ kind: "status-chip-disagrees";
1384
+ chip: DocStatus;
1385
+ status: unknown;
482
1386
  };
483
1387
  interface VantageFrontmatter {
484
- /** The chip's text, or `undefined` for no chip. */
485
- statusChip?: DocStatus;
486
- /** Why something was dropped. A viewer must never read this (P3). */
487
- issues: VantageFrontmatterIssue[];
1388
+ /** The chip's text, or `undefined` for no chip. */
1389
+ statusChip?: DocStatus;
1390
+ /** Why something was dropped. A viewer must never read this (P3). */
1391
+ issues: VantageFrontmatterIssue[];
488
1392
  }
489
1393
  /** Narrowing helper the chip and the checker both use. */
490
1394
  declare function isDocStatus(value: unknown): value is DocStatus;
@@ -495,13 +1399,8 @@ declare function isDocStatus(value: unknown): value is DocStatus;
495
1399
  * in twice gives equal results out.
496
1400
  */
497
1401
  declare function readVantageFrontmatter(frontmatter: Record<string, unknown>): VantageFrontmatter;
498
-
499
- /**
500
- * Sanitization schema for the rendering pipeline.
501
- * Allows GFM, KaTeX MathML, syntax highlighting classes, and
502
- * data-source-line attributes while blocking XSS vectors.
503
- */
504
-
1402
+ //#endregion
1403
+ //#region src/sanitize.d.ts
505
1404
  type Schema = typeof defaultSchema;
506
1405
  declare const SAFE_STYLE: RegExp;
507
1406
  /**
@@ -517,7 +1416,8 @@ declare const SAFE_STYLE: RegExp;
517
1416
  * markup") is the guard.
518
1417
  */
519
1418
  declare const sanitizeSchema: Schema;
520
-
1419
+ //#endregion
1420
+ //#region src/renderMermaidBlocks.d.ts
521
1421
  /**
522
1422
  * Client-side utility to find and render mermaid code blocks in a container.
523
1423
  *
@@ -528,10 +1428,10 @@ declare const sanitizeSchema: Schema;
528
1428
  * Framework-agnostic — works in any browser environment.
529
1429
  */
530
1430
  interface RenderMermaidOptions {
531
- /** CSS class to add to the SVG wrapper div (default: "mermaid") */
532
- className?: string;
533
- /** Called when a diagram fails to render */
534
- onError?: (code: string, error: Error) => void;
1431
+ /** CSS class to add to the SVG wrapper div (default: "mermaid") */
1432
+ className?: string;
1433
+ /** Called when a diagram fails to render */
1434
+ onError?: (code: string, error: Error) => void;
535
1435
  }
536
1436
  /**
537
1437
  * Find all `<pre><code class="language-mermaid">` blocks in a container
@@ -551,7 +1451,8 @@ interface RenderMermaidOptions {
551
1451
  * ```
552
1452
  */
553
1453
  declare function renderMermaidBlocks(container: HTMLElement, options?: RenderMermaidOptions): Promise<void>;
554
-
1454
+ //#endregion
1455
+ //#region src/resolveLinks.d.ts
555
1456
  /**
556
1457
  * Rewrite relative links in rendered markdown HTML.
557
1458
  *
@@ -560,16 +1461,16 @@ declare function renderMermaidBlocks(container: HTMLElement, options?: RenderMer
560
1461
  * without requiring a DOM — it operates on the HTML string directly.
561
1462
  */
562
1463
  interface ResolveLinkOptions {
563
- /** Base path to prepend to relative links (default: "/") */
564
- basePath?: string;
565
- /**
566
- * Custom rewriter function. Called for every relative href.
567
- * Return the rewritten href, or null to leave it unchanged.
568
- * If provided, basePath is ignored.
569
- */
570
- rewriter?: (href: string, currentPath: string) => string | null;
571
- /** Current file path — used to resolve relative references like `./other.md` */
572
- currentPath?: string;
1464
+ /** Base path to prepend to relative links (default: "/") */
1465
+ basePath?: string;
1466
+ /**
1467
+ * Custom rewriter function. Called for every relative href.
1468
+ * Return the rewritten href, or null to leave it unchanged.
1469
+ * If provided, basePath is ignored.
1470
+ */
1471
+ rewriter?: (href: string, currentPath: string) => string | null;
1472
+ /** Current file path — used to resolve relative references like `./other.md` */
1473
+ currentPath?: string;
573
1474
  }
574
1475
  /**
575
1476
  * Rewrite relative links in rendered HTML.
@@ -596,7 +1497,8 @@ interface ResolveLinkOptions {
596
1497
  * ```
597
1498
  */
598
1499
  declare function resolveLinks(html: string, options?: ResolveLinkOptions): string;
599
-
1500
+ //#endregion
1501
+ //#region src/styleGuide.d.ts
600
1502
  /**
601
1503
  * The canonical Vantage Markdown style guide.
602
1504
  *
@@ -611,6 +1513,7 @@ declare function resolveLinks(html: string, options?: ResolveLinkOptions): strin
611
1513
  * Every rule stated here should be one a checker can enforce or a renderer
612
1514
  * actually cares about — if a line is neither, it does not belong.
613
1515
  */
614
- declare const STYLE_GUIDE = "## Markdown style guide (for Vantage viewer)\n\nWhen writing or updating markdown documents that will be viewed in Vantage, follow these conventions:\n\n### Structure\n- Use headings (## and ###) to organize content \u2014 they become navigable outline anchors.\n- Keep paragraphs focused and concise. Break up dense text with subheadings, lists, or tables.\n\n### Links and cross-references\n- **Relative paths only**: Always link relative to the *current file's directory*:\n - Sibling in same folder: `[Other Doc](./other-doc.md)` or `[Other Doc](other-doc.md)`\n - Subdirectory: `[Design Doc](./design/auth.md)`\n - Parent / sibling folder: `[Overview](../overview.md)` or `[Spec](../specs/api.md)`\n- **Never use leading slashes**:\n - \u274C `[Doc](/docs/guide.md)` (breaks web routing and multi-repo scoping)\n - \u2705 `[Doc](../docs/guide.md)` or `[Doc](./guide.md)`\n- **Never use absolute filesystem paths or URI schemes**:\n - \u274C `file:///workspace/docs/guide.md`, `/workspace/docs/guide.md`, `C:\\...`\n - \u2705 `[Doc](./guide.md)` or `[Doc](../guide.md)`\n- **Always include the file extension**: Use `.md`, `.ts`, `.go`, etc. (e.g. `[Model](model.go)`).\n- **Line anchors and ranges**:\n - Link to specific lines: `[Handler](../server/api.go#L42)` or `[Range](../server/api.go#L42-L58)`\n - Same-file line anchor: `[See lines](#L10-L25)`\n - Vantage scrolls to and highlights the target lines.\n- **Section anchors**:\n - Same doc: `[Usage](#usage)`\n - Cross-doc: `[Architecture](../overview.md#system-architecture)`\n - Anchor slugs are lowercase, hyphenated, and punctuation-stripped.\n- **Backticks in links**: Place backticks inside the link label, not around the markdown link syntax:\n - \u2705 `[`config.json`](./config.json)` or `[config.json](./config.json)`\n - \u274C ``[config.json](./config.json)``\n\n### Frontmatter (Metadata)\n- Include structured metadata at the very top of docs delimited by `---` (YAML) or `+++` (TOML). Vantage renders this as a metadata card:\n```yaml\n---\ntitle: \"Feature Specification\"\nauthor: \"Agent\"\ndate: 2026-08-15\nstatus: in-review # draft | in-review | accepted | deprecated\ntags: [architecture, backend, api]\nsummary: \"Brief description of the document purpose.\"\nvantage:\n status-chip: true # show `status` as a chip above the metadata card\n---\n```\n- **Nothing may sit above the opening delimiter** \u2014 not a blank line, not an editorial comment, not a `<!-- vantage: \u2026 -->` directive. Frontmatter is recognised only at the very first byte of the file (in Vantage, on GitHub, and in every other reader), so one line above it turns the whole block into body text: a horizontal rule followed by a heading made of the raw keys, with every field lost. `vantage-check` reports it as `frontmatter/not-at-top`.\n- **`vantage:` is Vantage's own reserved key.** It holds chrome that belongs to the file rather than to a section, it never shows up in the metadata card, and every other renderer ignores it. One key today: `status-chip`.\n- **Prefer `status-chip: true`**, which shows the document's own `status:` and therefore cannot disagree with it. A literal `status-chip: accepted` is accepted too, but it is a second value that goes stale on its own \u2014 `vantage-check` reports the disagreement.\n- The chip's vocabulary is `status`'s, exactly: `draft | in-review | accepted | deprecated`, lowercase. `Draft` renders no chip at all, silently.\n\n### Mermaid diagrams\n- Use ```mermaid code blocks for flowcharts, sequence diagrams, and architecture diagrams. Vantage provides interactive zoom, pan, dark/light theme adaptation, and SVG export.\n- **Quote labels with special characters**: Always quote node labels containing parentheses, brackets, or colons to prevent syntax errors:\n```mermaid\nflowchart TD\n client[\"Client (React SPA)\"] -->|WebSocket| srv[\"Vantage Server (Go)\"]\n srv --> git[\"Git CLI (git diff)\"]\n```\n\n### Code blocks and diffs\n- Always tag fenced code blocks with language identifiers (`ts`, `go`, `python`, `bash`, `json`, `yaml`, `diff`, `sql`, etc.) for syntax highlighting.\n- For proposed code modifications, use ```diff blocks with `+` and `-` prefixes:\n```diff\n-const oldUrl = \"/api/v1\";\n+const newUrl = \"/api/v2\";\n```\n\n### Callouts and alerts\n- Use GitHub-style blockquote callouts for notes, tips, and warnings:\n> [!NOTE]\n> Background context or helpful explanation.\n\n> [!TIP]\n> Best practice advice or optimization suggestions.\n\n> [!IMPORTANT]\n> Key requirements or crucial information.\n\n> [!WARNING]\n> Urgent caution, breaking changes, or potential pitfalls.\n\n> [!CAUTION]\n> High-risk actions that could cause data loss or security issues.\n\n### Vantage directives (optional, and Vantage-only)\n\nVantage reads a few styling hints from ordinary HTML comments. Every other renderer \u2014 GitHub included \u2014 drops them, so a document has to read exactly the same without them: directives decorate, they never carry meaning. One goes on a line of its own, with a blank line after it, and applies to the block that follows:\n\n```markdown\n<!-- vantage: section tone=warning badge=stale -->\n\n## Migration path\n\nThe steps below predate the rewrite.\n```\n\n- **Three names**: `section` (the heading and everything under it), `block` (the one block after it), `oq` (one answerable Open Question).\n- **The keys and values are a closed set**: `tone` = `note | tip | important | warning | caution | muted`; `emphasis` = `strong | normal | quiet`; `badge` = `draft | stale | blocked | done | wip`; `collapsed` = `true | false`. Name a *tone*, never a colour \u2014 the theme decides what a warning looks like, in light mode, in dark mode, and in print.\n- **Use them sparingly.** One or two per document, on the sections that genuinely differ. A document where everything is toned says nothing, and a rainbow one is harder to read than a plain one.\n- **Anything outside those sets is silently ignored** \u2014 nothing breaks, and nothing styles either. Run `vantage-check` on the document: the `vantage/*` rules are the only thing that will ever tell you a directive did nothing.\n- **Always close the comment with `-->`.** Never `--!>`, and never leave it open: Markdown reads every line below an unclosed `<!--` as part of the comment, and the whole rest of the document vanishes from the page. For the same reason `-->` cannot appear *inside* a value \u2014 it ends the comment early and spills the remainder into the page as literal text.\n- **In a list, indent the directive inside the item**, with blank lines around it (below). At the start of a line between two items it ends the list and starts a second one, which changes the numbering and the spacing in every renderer \u2014 the one thing a directive must never do.\n- **A `leaning` restates the leaning; it is never \"yes\".** The one-click button in review mode files that text as a review comment, and the comment is all the agent reading it has \u2014 nobody remembers which button was clicked. `leaning=\"Yes\"` beside a two-branch question is a support ticket.\n\n```markdown\n1. **OQ-9: Queue position on re-entry.**\n\n <!-- vantage: oq id=OQ-9 leaning=\"Back of the queue \u2014 the fix might interact with what merged while it was out.\" -->\n\n _Leaning:_ Back of the queue.\n```\n\n### Tables, task lists, and math\n- **Tables**: Use standard markdown tables for structured comparisons and schemas.\n- **Task lists**: Use `- [ ]` and `- [x]` for actionable checklists and status tracking.\n- **LaTeX Math**: Use `$$...$$` for *all* KaTeX math \u2014 display blocks (`$$` alone on its own lines) and inline alike (`$$E = mc^2$$` mid-sentence).\n - Single dollars are **not** math delimiters: `$HOME` and `$100` stay literal, so prose and shell snippets are safe to write as-is.\n";
615
-
616
- export { DIRECTIVE_NAMES, DIRECTIVE_VOCABULARY, DOC_STATUSES, DOC_STATUS_TONES, type DirectivePair, type DirectiveParse, type DirectiveVocabulary, type DocStatus, type FrontmatterFormat, type FrontmatterProblem, type KeyTable, type KeyVocabulary, type MalformedDirective, type ParsedDirective, type ParsedFrontmatter, type Pipeline, type PipelineOptions, type RenderMermaidOptions, type RenderOptions, type RenderResult, type ResolveLinkOptions, SAFE_STYLE, STYLE_GUIDE, VANTAGE_BADGES, VANTAGE_COLLAPSED, VANTAGE_EMPHASIS, VANTAGE_FRONTMATTER_KEYS, VANTAGE_OQ_HOST_TARGETS, VANTAGE_RUNS, VANTAGE_SENTINEL, VANTAGE_TONES, type VantageFrontmatter, type VantageFrontmatterIssue, buildPipeline, buildRemarkPlugins, clearLineAnchorHighlights, hasVantageSentinel, isDocStatus, parseFrontmatter, parseLineAnchor, parseVantageDirective, readVantageFrontmatter, rehypeSourceLines, rehypeVantageDirectives, renderMarkdown, renderMermaidBlocks, resolveLinks, sanitizeSchema, scrollToLineAnchor };
1516
+ declare const STYLE_GUIDE = "## Markdown style guide (for Vantage viewer)\n\nWhen writing or updating markdown documents that will be viewed in Vantage, follow these conventions:\n\n### Structure\n- Use headings (## and ###) to organize content — they become navigable outline anchors.\n- Keep paragraphs focused and concise. Break up dense text with subheadings, lists, or tables.\n\n### Links and cross-references\n- **Relative paths only**: Always link relative to the *current file's directory*:\n - Sibling in same folder: `[Other Doc](./other-doc.md)` or `[Other Doc](other-doc.md)`\n - Subdirectory: `[Design Doc](./design/auth.md)`\n - Parent / sibling folder: `[Overview](../overview.md)` or `[Spec](../specs/api.md)`\n- **Never use leading slashes**:\n - ❌ `[Doc](/docs/guide.md)` (breaks web routing and multi-repo scoping)\n - ✅ `[Doc](../docs/guide.md)` or `[Doc](./guide.md)`\n- **Never use absolute filesystem paths or URI schemes**:\n - ❌ `file:///workspace/docs/guide.md`, `/workspace/docs/guide.md`, `C:\\...`\n - ✅ `[Doc](./guide.md)` or `[Doc](../guide.md)`\n- **Always include the file extension**: Use `.md`, `.ts`, `.go`, etc. (e.g. `[Model](model.go)`).\n- **Line anchors and ranges**:\n - Link to specific lines: `[Handler](../server/api.go#L42)` or `[Range](../server/api.go#L42-L58)`\n - Same-file line anchor: `[See lines](#L10-L25)`\n - Vantage scrolls to and highlights the target lines.\n- **Section anchors**:\n - Same doc: `[Usage](#usage)`\n - Cross-doc: `[Architecture](../overview.md#system-architecture)`\n - Anchor slugs are lowercase, hyphenated, and punctuation-stripped.\n- **Backticks in links**: Place backticks inside the link label, not around the markdown link syntax:\n - ✅ `[`config.json`](./config.json)` or `[config.json](./config.json)`\n - ❌ ``[config.json](./config.json)``\n\n### Frontmatter (Metadata)\n- Include structured metadata at the very top of docs delimited by `---` (YAML) or `+++` (TOML). Vantage renders this as a metadata card:\n```yaml\n---\ntitle: \"Feature Specification\"\nauthor: \"Agent\"\ndate: 2026-08-15\nstatus: in-review # draft | in-review | accepted | deprecated\ntags: [architecture, backend, api]\nsummary: \"Brief description of the document purpose.\"\nvantage:\n status-chip: true # show `status` as a chip above the metadata card\n---\n```\n- **Nothing may sit above the opening delimiter** — not a blank line, not an editorial comment, not a `<!-- vantage: … -->` directive. Frontmatter is recognised only at the very first byte of the file (in Vantage, on GitHub, and in every other reader), so one line above it turns the whole block into body text: a horizontal rule followed by a heading made of the raw keys, with every field lost. `vantage-check` reports it as `frontmatter/not-at-top`.\n- **`vantage:` is Vantage's own reserved key.** It holds chrome that belongs to the file rather than to a section, it never shows up in the metadata card, and every other renderer ignores it. One key today: `status-chip`.\n- **Prefer `status-chip: true`**, which shows the document's own `status:` and therefore cannot disagree with it. A literal `status-chip: accepted` is accepted too, but it is a second value that goes stale on its own — `vantage-check` reports the disagreement.\n- The chip's vocabulary is `status`'s, exactly: `draft | in-review | accepted | deprecated`, lowercase. `Draft` renders no chip at all, silently.\n\n### Mermaid diagrams\n- Use ```mermaid code blocks for flowcharts, sequence diagrams, and architecture diagrams. Vantage provides interactive zoom, pan, dark/light theme adaptation, and SVG export.\n- **Quote labels with special characters**: Always quote node labels containing parentheses, brackets, or colons to prevent syntax errors:\n```mermaid\nflowchart TD\n client[\"Client (React SPA)\"] -->|WebSocket| srv[\"Vantage Server (Go)\"]\n srv --> git[\"Git CLI (git diff)\"]\n```\n\n### Code blocks and diffs\n- Always tag fenced code blocks with language identifiers (`ts`, `go`, `python`, `bash`, `json`, `yaml`, `diff`, `sql`, etc.) for syntax highlighting.\n- For proposed code modifications, use ```diff blocks with `+` and `-` prefixes:\n```diff\n-const oldUrl = \"/api/v1\";\n+const newUrl = \"/api/v2\";\n```\n\n### Callouts and alerts\n- Use GitHub-style blockquote callouts for notes, tips, and warnings:\n> [!NOTE]\n> Background context or helpful explanation.\n\n> [!TIP]\n> Best practice advice or optimization suggestions.\n\n> [!IMPORTANT]\n> Key requirements or crucial information.\n\n> [!WARNING]\n> Urgent caution, breaking changes, or potential pitfalls.\n\n> [!CAUTION]\n> High-risk actions that could cause data loss or security issues.\n\n### Vantage directives (optional, and Vantage-only)\n\nVantage reads a few styling hints from ordinary HTML comments. Every other renderer — GitHub included — drops them, so a document has to read exactly the same without them: directives decorate, they never carry meaning. One goes on a line of its own, with a blank line after it, and applies to the block that follows:\n\n```markdown\n<!-- vantage: section tone=warning badge=stale -->\n\n## Migration path\n\nThe steps below predate the rewrite.\n```\n\n- **Three names**: `section` (the heading and everything under it), `block` (the one block after it), `oq` (one answerable Open Question).\n- **The keys and values are a closed set**: `tone` = `note | tip | important | warning | caution | muted`; `emphasis` = `strong | normal | quiet`; `badge` = `draft | stale | blocked | done | wip`; `collapsed` = `true | false`. Name a *tone*, never a colour — the theme decides what a warning looks like, in light mode, in dark mode, and in print.\n- **Use them sparingly.** One or two per document, on the sections that genuinely differ. A document where everything is toned says nothing, and a rainbow one is harder to read than a plain one.\n- **Anything outside those sets is silently ignored** — nothing breaks, and nothing styles either. Run `vantage-check` on the document: the `vantage/*` rules are the only thing that will ever tell you a directive did nothing.\n- **Always close the comment with `-->`.** Never `--!>`, and never leave it open: Markdown reads every line below an unclosed `<!--` as part of the comment, and the whole rest of the document vanishes from the page. For the same reason `-->` cannot appear *inside* a value — it ends the comment early and spills the remainder into the page as literal text.\n- **In a list, indent the directive inside the item**, with blank lines around it (below). At the start of a line between two items it ends the list and starts a second one, which changes the numbering and the spacing in every renderer — the one thing a directive must never do.\n- **Every open question (💬) with a stated leaning gets an `oq` directive.** The convention's prose — the emoji, the `OQ-N` id, the `_Leaning:_` line, the fill-in `**Answer:**` — produces no button on its own. Writing the convention and stopping there is the most common way this feature goes missing: the questions look complete, review mode is on, and there is nothing to click. **`vantage-check` reports it as an error** (`vantage/oq-missing`), because a question awaiting a ruling that the reviewer cannot file is not a style preference. Mark it 🔒 if it is blocked on something upstream and cannot be answered yet, or ✅ once it is decided; either state needs no directive.\n- **A `leaning` restates the leaning; it is never \"yes\".** The one-click button in review mode files that text as a review comment, and the comment is all the agent reading it has — nobody remembers which button was clicked. `leaning=\"Yes\"` beside a two-branch question is a support ticket.\n\n```markdown\n1. **OQ-9: Queue position on re-entry.**\n\n <!-- vantage: oq id=OQ-9 leaning=\"Back of the queue — the fix might interact with what merged while it was out.\" -->\n\n _Leaning:_ Back of the queue.\n```\n\n### Tables, task lists, and math\n- **Tables**: Use standard markdown tables for structured comparisons and schemas.\n- **Task lists**: Use `- [ ]` and `- [x]` for actionable checklists and status tracking.\n- **LaTeX Math**: Use `$$...$$` for *all* KaTeX math — display blocks (`$$` alone on its own lines) and inline alike (`$$E = mc^2$$` mid-sentence).\n - Single dollars are **not** math delimiters: `$HOME` and `$100` stay literal, so prose and shell snippets are safe to write as-is.\n";
1517
+ //#endregion
1518
+ export { ALERT_TITLES, DIRECTIVE_NAMES, DIRECTIVE_VOCABULARY, DOC_STATUSES, DOC_STATUS_TONES, type DirectivePair, type DirectiveParse, type DirectiveVocabulary, type DocStatus, type FrontmatterFormat, type FrontmatterProblem, type KeyTable, type KeyVocabulary, type MalformedDirective, type ParsedDirective, type ParsedFrontmatter, type Pipeline, type PipelineOptions, type RenderMermaidOptions, type RenderOptions, type RenderResult, type ResolveLinkOptions, SAFE_STYLE, STYLE_GUIDE, VANTAGE_ALERTS, VANTAGE_BADGES, VANTAGE_COLLAPSED, VANTAGE_EMPHASIS, VANTAGE_FRONTMATTER_KEYS, VANTAGE_OQ_HOST_TARGETS, VANTAGE_RUNS, VANTAGE_SENTINEL, VANTAGE_TONES, type VantageAlert, type VantageFrontmatter, type VantageFrontmatterIssue, buildPipeline, buildRemarkPlugins, clearLineAnchorHighlights, hasVantageSentinel, isDocStatus, parseFrontmatter, parseLineAnchor, parseVantageDirective, readVantageFrontmatter, rehypeSourceLines, rehypeVantageAlerts, rehypeVantageDirectives, renderMarkdown, renderMermaidBlocks, resolveLinks, sanitizeSchema, scrollToLineAnchor };
1519
+ //# sourceMappingURL=index.d.cts.map