@ox-content/vite-plugin 3.0.0-alpha.8 → 3.0.0-beta.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 (79) hide show
  1. package/dist/index.cjs +8898 -2585
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +2050 -221
  4. package/dist/index.d.cts.map +1 -1
  5. package/dist/index.d.mts +2050 -221
  6. package/dist/index.d.mts.map +1 -1
  7. package/dist/index.mjs +8839 -2531
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/markdown-tables.cjs +70 -0
  10. package/dist/markdown-tables.cjs.map +1 -0
  11. package/dist/markdown-tables.d.cts +22 -0
  12. package/dist/markdown-tables.d.cts.map +1 -0
  13. package/dist/markdown-tables.d.mts +22 -0
  14. package/dist/markdown-tables.d.mts.map +1 -0
  15. package/dist/markdown-tables.mjs +66 -0
  16. package/dist/markdown-tables.mjs.map +1 -0
  17. package/dist/napi.cjs +44 -0
  18. package/dist/napi.cjs.map +1 -0
  19. package/dist/napi.mjs +34 -0
  20. package/dist/napi.mjs.map +1 -0
  21. package/dist/reader-chrome-client.cjs +103 -0
  22. package/dist/reader-chrome-client.d.cts +2 -0
  23. package/dist/reader-chrome-client.d.mts +2 -0
  24. package/dist/reader-chrome-client.mjs +102 -0
  25. package/dist/reader-chrome.cjs +109 -0
  26. package/dist/reader-chrome.cjs.map +1 -0
  27. package/dist/reader-chrome.d.cts +103 -0
  28. package/dist/reader-chrome.d.mts +103 -0
  29. package/dist/reader-chrome.mjs +98 -0
  30. package/dist/reader-chrome.mjs.map +1 -0
  31. package/dist/styles/all.css +15 -0
  32. package/dist/styles/citations.css +62 -0
  33. package/dist/styles/core.css +2261 -0
  34. package/dist/styles/github.css +262 -0
  35. package/dist/styles/graphviz.css +34 -0
  36. package/dist/styles/magic-links.css +33 -0
  37. package/dist/styles/markdown-tables.css +16 -0
  38. package/dist/styles/mermaid.css +151 -0
  39. package/dist/styles/not-by-ai.css +43 -0
  40. package/dist/styles/ogp.css +170 -0
  41. package/dist/styles/reader-chrome.css +163 -0
  42. package/dist/styles/social.css +678 -0
  43. package/dist/styles/tabs.css +210 -0
  44. package/dist/styles/theme-transition.css +37 -0
  45. package/dist/styles/twitter-full.css +598 -0
  46. package/dist/styles/youtube.css +87 -0
  47. package/dist/theme-tokens.cjs +95 -0
  48. package/dist/theme-tokens.cjs.map +1 -0
  49. package/dist/theme-tokens.d.cts +72 -0
  50. package/dist/theme-tokens.d.cts.map +1 -0
  51. package/dist/theme-tokens.d.mts +72 -0
  52. package/dist/theme-tokens.d.mts.map +1 -0
  53. package/dist/theme-tokens.mjs +91 -0
  54. package/dist/theme-tokens.mjs.map +1 -0
  55. package/dist/theme-transition-client.cjs +161 -0
  56. package/dist/theme-transition-client.d.cts +21 -0
  57. package/dist/theme-transition-client.d.mts +21 -0
  58. package/dist/theme-transition-client.mjs +160 -0
  59. package/dist/twitter-client.cjs +84 -0
  60. package/dist/twitter-client.d.cts +11 -0
  61. package/dist/twitter-client.d.mts +11 -0
  62. package/dist/twitter-client.mjs +83 -0
  63. package/dist/vitepress.cjs +614 -77
  64. package/dist/vitepress.cjs.map +1 -1
  65. package/dist/vitepress.mjs +588 -65
  66. package/dist/vitepress.mjs.map +1 -1
  67. package/package.json +89 -4
  68. package/dist/api.cjs +0 -6563
  69. package/dist/api.cjs.map +0 -1
  70. package/dist/api.mjs +0 -6456
  71. package/dist/api.mjs.map +0 -1
  72. package/dist/interop.cjs +0 -31
  73. package/dist/interop.cjs.map +0 -1
  74. package/dist/interop.mjs +0 -26
  75. package/dist/interop.mjs.map +0 -1
  76. package/dist/tabs.cjs +0 -98
  77. package/dist/tabs.cjs.map +0 -1
  78. package/dist/tabs.mjs +0 -99
  79. package/dist/tabs.mjs.map +0 -1
package/dist/index.d.cts CHANGED
@@ -1,4 +1,7 @@
1
+ import { RenderThemeTokenCssOptions, ThemeTokenSource, ThemeTokens, renderThemeTokenCss, tokensToCss } from "./theme-tokens.cjs";
2
+ import { a as readerChromeIsEnabled, c as renderReaderChromeAttributes, d as resolveReaderChromeInput, f as ReaderChromeOptions, i as readerChromeCss, l as renderReaderChromeScriptTag, n as applyReaderChromeHtml, o as readerChromeNeedsJs, p as ResolvedReaderChrome, r as readerChromeAttributes, s as readerChromeScript, t as ReaderChromeInput, u as renderReaderChromeStyleTag } from "./reader-chrome.cjs";
1
3
  import { a as JSXProps, c as jsxs, d as when, i as JSXNode, l as raw, n as JSXChild, o as each, r as JSXElementType, s as jsx, t as Fragment, u as renderToString } from "./jsx-html.cjs";
4
+ import { MarkdownTableEnhancementOptions, enhanceMarkdownTables, markdownTableScrollLabel } from "./markdown-tables.cjs";
2
5
  import { EnvironmentOptions, Plugin } from "vite";
3
6
  //#region src/header-chrome.d.ts
4
7
  /**
@@ -48,18 +51,32 @@ interface ResolvedHeaderNavItem {
48
51
  /** Resolves locale maps so NAPI always receives string labels. */
49
52
  declare function resolveHeaderNavItems(items: HeaderNavItem[] | undefined, locale?: string, defaultLocale?: string): ResolvedHeaderNavItem[] | undefined;
50
53
  //#endregion
51
- //#region src/theme-tokens.d.ts
52
- /**
53
- * Free-form `--octc-*` custom properties for themes that need more than the
54
- * typed `colors` / `fonts` / `layout` fields.
55
- *
56
- * Keys are written **without** the `--octc-` prefix, so `"surface-glass"`
57
- * becomes `--octc-surface-glass`. This is the seam that keeps the two theme
58
- * axes independent: a color package can restyle code-block line markers, brand
59
- * accents, and surface textures purely through tokens, while a skin package
60
- * lays out geometry against those same tokens without knowing any color.
61
- */
62
- type ThemeTokens = Record<string, string>;
54
+ //#region src/theme-fonts.d.ts
55
+ type ThemeFontProvider = "google" | "local";
56
+ type ThemeFontStyle = "normal" | "italic";
57
+ type ThemeFontDisplay = "auto" | "block" | "swap" | "fallback" | "optional";
58
+ /** UnoCSS-inspired family descriptor. The string stack form remains valid. */
59
+ interface ThemeWebFont {
60
+ /** Family name, e.g. `"Inter"` or `"DM Mono"`. */
61
+ family: string;
62
+ /** Defaults to `"local"` when `path` is set, otherwise `"google"`. */
63
+ provider?: ThemeFontProvider;
64
+ /** File, directory, or `@fontsource/*` package. Required for `local`. */
65
+ path?: string;
66
+ weights?: number[];
67
+ styles?: ThemeFontStyle[];
68
+ subsets?: string[];
69
+ display?: ThemeFontDisplay;
70
+ /** Copy files into the SSG output and emit `@font-face`. */
71
+ selfHost?: boolean;
72
+ /** Extra families after `family` in the emitted CSS stack. */
73
+ fallbacks?: string[];
74
+ /** Preload every self-hosted face, or only these weights. */
75
+ preload?: boolean | number[];
76
+ /** Optional `unicode-range` for local faces. */
77
+ unicodeRange?: string;
78
+ }
79
+ type ThemeFontValue = string | ThemeWebFont;
63
80
  //#endregion
64
81
  //#region src/theme.d.ts
65
82
  /**
@@ -100,12 +117,17 @@ interface ThemeLayout {
100
117
  }
101
118
  /**
102
119
  * Theme font configuration.
120
+ *
121
+ * `sans` and `mono` accept a CSS stack string or a web-font object. Named
122
+ * families are extra stacks exposed as `--octc-font-<name>`.
103
123
  */
104
124
  interface ThemeFonts {
105
- /** Sans-serif font stack */
106
- sans?: string;
107
- /** Monospace font stack */
108
- mono?: string;
125
+ /** Sans-serif font stack or self-hosted family */
126
+ sans?: ThemeFontValue;
127
+ /** Monospace font stack or self-hosted family */
128
+ mono?: ThemeFontValue;
129
+ /** Additional families, exposed as `--octc-font-<name>` */
130
+ named?: Record<string, ThemeFontValue>;
109
131
  }
110
132
  /**
111
133
  * Entry page theme configuration.
@@ -211,6 +233,20 @@ interface ThemeConfig {
211
233
  * @default true
212
234
  */
213
235
  viewTransitions?: boolean;
236
+ /**
237
+ * Circular reveal for a same-document theme change.
238
+ *
239
+ * `"circle"` opts the built-in toggle into the reveal published at
240
+ * `@ox-content/vite-plugin/theme-transition/client`. Omitted or `false`
241
+ * leaves the toggle immediate.
242
+ *
243
+ * Unrelated to {@link ThemeConfig.viewTransitions}, which covers
244
+ * cross-document navigation. Browsers without View Transitions, and readers
245
+ * who ask for reduced motion, always get the immediate switch.
246
+ *
247
+ * @default false
248
+ */
249
+ toggleTransition?: false | "circle";
214
250
  /**
215
251
  * Show the right-hand "On this page" outline.
216
252
  *
@@ -285,6 +321,7 @@ interface ThemeConfig {
285
321
  interface ResolvedThemeConfig {
286
322
  name: string;
287
323
  viewTransitions: boolean;
324
+ toggleTransition: false | "circle";
288
325
  aside: boolean;
289
326
  breadcrumbs: boolean;
290
327
  headingPermalink: "hover" | "always";
@@ -355,6 +392,402 @@ declare function mergeThemes(...themes: (ThemeConfig | ThemeConfig[])[]): ThemeC
355
392
  */
356
393
  declare function resolveTheme(config?: ThemeConfig | ThemeConfig[]): ResolvedThemeConfig;
357
394
  //#endregion
395
+ //#region src/plugins/tabs.d.ts
396
+ /**
397
+ * Transform Tabs components in HTML.
398
+ */
399
+ declare function transformTabs(html: string): Promise<string>;
400
+ /**
401
+ * Generate dynamic CSS for :has() based tab switching.
402
+ * This is needed because :has() selectors need unique IDs.
403
+ */
404
+ declare function generateTabsCSS(groupCount: number): string;
405
+ //#endregion
406
+ //#region src/plugins/pm.d.ts
407
+ /**
408
+ * Package Manager Tabs Plugin
409
+ *
410
+ * Transforms <pm>npm install …</pm> blocks into a tab group with one tab per
411
+ * package manager (npm/pnpm/yarn/bun). The single npm-style command is converted
412
+ * to each package manager's equivalent natively in Rust (`transformPmEmbeds` in
413
+ * @ox-content/napi), and the result reuses the same `ox-tabs` widget markup as
414
+ * the generic `<tabs>` plugin so styling and keyboard navigation are consistent.
415
+ *
416
+ * Syncing is opt-in (off by default): when enabled, the rendered group carries a
417
+ * `data-ox-tab-group="pkg-manager"` attribute so the client runtime can keep
418
+ * every package-manager group on the page in sync via localStorage.
419
+ *
420
+ * Package-manager groups share the tab-group counter with the `<tabs>` plugin so
421
+ * `data-group` ids (and the CSS produced by `generateTabsCSS`) stay unique.
422
+ */
423
+ /** Options for {@link transformPm}. */
424
+ interface PmOptions {
425
+ /**
426
+ * Enable opt-in synced package-manager tab groups. When `true`, a
427
+ * `data-ox-tab-group="pkg-manager"` attribute is emitted so the client runtime
428
+ * syncs the active package manager across every pm group on the page and
429
+ * persists the choice in localStorage.
430
+ * @default false
431
+ */
432
+ sync?: boolean;
433
+ }
434
+ //#endregion
435
+ //#region src/plugins/youtube.d.ts
436
+ /**
437
+ * YouTube Plugin - Privacy-enhanced iframe embedding
438
+ *
439
+ * Transforms <YouTube> components into responsive iframe embeds using
440
+ * youtube-nocookie.com for enhanced privacy. A digits-only `start` attribute
441
+ * becomes `?start=` on the iframe URL.
442
+ *
443
+ * The HTML rewrite is performed in Rust (`transformYoutubeEmbeds` in
444
+ * @ox-content/napi), replacing the previous rehype parse/stringify
445
+ * round-trip. This module keeps the public TS surface and a cheap marker
446
+ * check so pages without a `<youtube>` element never cross the NAPI boundary.
447
+ */
448
+ interface YouTubeOptions {
449
+ /**
450
+ * Use privacy-enhanced mode (`youtube-nocookie.com`).
451
+ * @default true
452
+ */
453
+ privacyEnhanced?: boolean;
454
+ /**
455
+ * Default iframe aspect ratio.
456
+ * @default '16/9'
457
+ */
458
+ aspectRatio?: string;
459
+ /**
460
+ * Allow fullscreen playback.
461
+ * @default true
462
+ */
463
+ allowFullscreen?: boolean;
464
+ /**
465
+ * Lazy load the iframe.
466
+ * @default true
467
+ */
468
+ lazyLoad?: boolean;
469
+ }
470
+ /**
471
+ * Extract a YouTube video ID from a bare ID or a watch / share / embed /
472
+ * shorts URL.
473
+ *
474
+ * The rule lives in Rust so this function and the `<youtube>` rewrite below
475
+ * cannot disagree about what counts as a video: `transformYoutubeEmbeds`
476
+ * resolves IDs with the same code.
477
+ */
478
+ declare function extractVideoId(input: string): string | null;
479
+ /**
480
+ * Transform YouTube components in HTML.
481
+ */
482
+ declare function transformYouTube(html: string, options?: YouTubeOptions): Promise<string>;
483
+ //#endregion
484
+ //#region src/plugins/provider-articles.d.ts
485
+ interface ProviderArticleEmbedOptions {
486
+ /** Fetch article metadata at build time. @default true */
487
+ fetch?: boolean;
488
+ /** Metadata request timeout in milliseconds. @default 10000 */
489
+ timeout?: number;
490
+ /** Cache fetched metadata in memory for the current process. @default true */
491
+ cache?: boolean;
492
+ /** Cache TTL in milliseconds. @default 3600000 */
493
+ cacheTTL?: number;
494
+ /** Persist metadata across builds. Off by default. */
495
+ persistCache?: boolean;
496
+ /** Directory for the persistent cache. */
497
+ cacheDir?: string;
498
+ }
499
+ //#endregion
500
+ //#region src/plugins/provider-packages.d.ts
501
+ interface ProviderPackageEmbedOptions {
502
+ /** Fetch package metadata at build time. @default true */
503
+ fetch?: boolean;
504
+ /** Metadata request timeout in milliseconds. @default 10000 */
505
+ timeout?: number;
506
+ /** Cache fetched metadata in memory for the current process. @default true */
507
+ cache?: boolean;
508
+ /** Cache TTL in milliseconds. @default 3600000 */
509
+ cacheTTL?: number;
510
+ /** Persist metadata across builds. Off by default. */
511
+ persistCache?: boolean;
512
+ /** Directory for the persistent cache. */
513
+ cacheDir?: string;
514
+ }
515
+ //#endregion
516
+ //#region src/plugins/provider-playgrounds.d.ts
517
+ interface ProviderPlaygroundEmbedOptions {
518
+ /** Fetch playground metadata at build time where a public endpoint exists. @default true */
519
+ fetch?: boolean;
520
+ /** Add provider iframe URLs for supported providers. @default false */
521
+ iframe?: boolean;
522
+ /** Metadata request timeout in milliseconds. @default 10000 */
523
+ timeout?: number;
524
+ /** Cache fetched metadata in memory for the current process. @default true */
525
+ cache?: boolean;
526
+ /** Cache TTL in milliseconds. @default 3600000 */
527
+ cacheTTL?: number;
528
+ /** Persist metadata across builds. Off by default. */
529
+ persistCache?: boolean;
530
+ /** Directory for the persistent cache. */
531
+ cacheDir?: string;
532
+ }
533
+ //#endregion
534
+ //#region src/plugins/provider-videos.d.ts
535
+ interface ProviderVideoEmbedOptions {
536
+ /** Fetch public video metadata at build time where supported. @default true */
537
+ fetch?: boolean;
538
+ /** Add lazy provider iframe URLs when supported. @default false */
539
+ iframe?: boolean;
540
+ /** Twitch embed parent domain or domains. Required for Twitch iframes. */
541
+ parent?: string | string[];
542
+ /** Metadata request timeout in milliseconds. @default 10000 */
543
+ timeout?: number;
544
+ /** Cache fetched metadata in memory for the current process. @default true */
545
+ cache?: boolean;
546
+ /** Cache TTL in milliseconds. @default 3600000 */
547
+ cacheTTL?: number;
548
+ /** Persist metadata across builds. Off by default. */
549
+ persistCache?: boolean;
550
+ /** Directory for the persistent cache. */
551
+ cacheDir?: string;
552
+ }
553
+ //#endregion
554
+ //#region src/plugins/reddit/types.d.ts
555
+ interface RedditEmbedOptions {
556
+ /**
557
+ * Fetch Reddit post metadata at build time.
558
+ * @default true
559
+ */
560
+ fetch?: boolean;
561
+ /**
562
+ * Metadata request timeout in milliseconds.
563
+ * @default 10000
564
+ */
565
+ timeout?: number;
566
+ /**
567
+ * Cache fetched post metadata in memory for the current process.
568
+ * @default true
569
+ */
570
+ cache?: boolean;
571
+ /**
572
+ * Cache TTL in milliseconds. Fresh memory entries skip the network.
573
+ * @default 3600000
574
+ */
575
+ cacheTTL?: number;
576
+ /**
577
+ * User agent sent to Reddit's JSON endpoint.
578
+ * @default 'ox-content-reddit-bot/1.0 (compatible; +https://github.com/ubugeeei-prod/ox-content)'
579
+ */
580
+ userAgent?: string;
581
+ }
582
+ interface RedditPostReference {
583
+ url: string;
584
+ id?: string;
585
+ subreddit?: string;
586
+ slug?: string;
587
+ shareId?: string;
588
+ apiUrl?: string;
589
+ }
590
+ interface RedditPostImage {
591
+ url: string;
592
+ width?: number;
593
+ height?: number;
594
+ }
595
+ interface RedditPostData {
596
+ permalink: string;
597
+ subreddit: string;
598
+ title: string;
599
+ author?: string;
600
+ body?: string;
601
+ score?: number;
602
+ commentCount?: number;
603
+ createdAt?: string;
604
+ originalUrl?: string;
605
+ image?: RedditPostImage;
606
+ }
607
+ //#endregion
608
+ //#region src/plugins/reddit/transform.d.ts
609
+ declare function transformRedditEmbeds(html: string, options?: RedditEmbedOptions): Promise<string>;
610
+ //#endregion
611
+ //#region src/plugins/reddit/url.d.ts
612
+ declare function parseRedditPostReference(value: string): RedditPostReference | null;
613
+ //#endregion
614
+ //#region src/plugins/twitter/types.d.ts
615
+ interface TwitterEmbedOptions {
616
+ /** Fetch the post body, author, and media from X at build time. */
617
+ fetch?: boolean;
618
+ /** Language sent to the syndication endpoint. @default "en" */
619
+ lang?: string;
620
+ /** Request timeout in milliseconds. @default 10000 */
621
+ timeout?: number;
622
+ /** Cache syndication responses in memory and on disk. @default true */
623
+ cache?: boolean;
624
+ /** Directory used for the persistent metadata cache. @default ".cache/ox-content/twitter" */
625
+ cacheDir?: string;
626
+ /** Directory where avatars, photos, and videos are written. @default "public/ox-content/twitter" */
627
+ mediaOutputDir?: string;
628
+ /** Public URL prefix for downloaded media. @default "/ox-content/twitter" */
629
+ mediaPublicPath?: string;
630
+ /** Download MP4 video and animated GIF assets at build time. @default false */
631
+ downloadVideo?: boolean;
632
+ /** Maximum video size in bytes. Oversized assets are skipped. @default 8388608 */
633
+ maxVideoBytes?: number;
634
+ /** Fetched-card chrome. `"full"` matches sveltweet / react-tweet. @default "compact" */
635
+ appearance?: TweetAppearance;
636
+ /**
637
+ * IANA timezone for full-card timestamps.
638
+ * Invalid values fall back to UTC so build output stays deterministic.
639
+ * @default "UTC"
640
+ */
641
+ timeZone?: string;
642
+ }
643
+ type TweetAppearance = "compact" | "full";
644
+ //#endregion
645
+ //#region src/plugins/media.d.ts
646
+ interface MediaEmbedOptions {
647
+ /**
648
+ * Render `<Spotify>` embeds.
649
+ * @default false
650
+ */
651
+ spotify?: boolean;
652
+ /**
653
+ * Render `<AppleMusic>` embeds.
654
+ * @default false
655
+ */
656
+ appleMusic?: boolean;
657
+ /**
658
+ * Render `<SpeakerDeck>` embeds.
659
+ * @default false
660
+ */
661
+ speakerDeck?: boolean;
662
+ /**
663
+ * Render `<Audio>` native players.
664
+ * @default false
665
+ */
666
+ audio?: boolean;
667
+ /**
668
+ * Render `<Video>` native players.
669
+ * @default false
670
+ */
671
+ video?: boolean;
672
+ /**
673
+ * Render `<StackBlitz>` embeds.
674
+ * @default false
675
+ */
676
+ stackBlitz?: boolean;
677
+ /**
678
+ * Render `<Tweet>` / `<XPost>` static cards. Pass `{ fetch: true }` to
679
+ * resolve the post content and self-host its media at build time.
680
+ * @default false
681
+ */
682
+ twitter?: boolean | TwitterEmbedOptions;
683
+ /**
684
+ * Render `<Reddit>` static cards with build-time metadata fetch.
685
+ * @default false
686
+ */
687
+ reddit?: boolean | RedditEmbedOptions;
688
+ /**
689
+ * Render `<Bluesky>` static cards.
690
+ * @default false
691
+ */
692
+ bluesky?: boolean;
693
+ /**
694
+ * Render `<GoogleMaps>` static place cards.
695
+ * @default false
696
+ */
697
+ googleMaps?: boolean;
698
+ /**
699
+ * Render `<Qiita>` static article cards.
700
+ * Pass `{ fetch: false }` to skip metadata fetching and render a link-only card.
701
+ * @default false
702
+ */
703
+ qiita?: boolean | ProviderArticleEmbedOptions;
704
+ /**
705
+ * Render `<Zenn>` static article cards.
706
+ * Pass `{ fetch: false }` to skip metadata fetching and render a link-only card.
707
+ * @default false
708
+ */
709
+ zenn?: boolean | ProviderArticleEmbedOptions;
710
+ /**
711
+ * Render `<NpmPackage>`, `<CratesIo>`, `<PyPI>`, and `<DockerHub>` package cards.
712
+ * Pass `{ fetch: false }` to skip metadata fetching and render link-only cards.
713
+ * @default false
714
+ */
715
+ packageRegistry?: boolean | ProviderPackageEmbedOptions;
716
+ /**
717
+ * Render `<CodePen>`, `<JSFiddle>`, and `<Observable>` static playground cards.
718
+ * Pass `{ iframe: true }` to add lazy provider iframe URLs where supported.
719
+ * @default false
720
+ */
721
+ playgrounds?: boolean | ProviderPlaygroundEmbedOptions;
722
+ /**
723
+ * Render `<Vimeo>` static video cards.
724
+ * Pass `{ iframe: true }` to add lazy player iframe URLs.
725
+ * @default false
726
+ */
727
+ vimeo?: boolean | ProviderVideoEmbedOptions;
728
+ /**
729
+ * Render `<Twitch>` static video, clip, and channel cards.
730
+ * Pass `{ iframe: true, parent: "example.com" }` to add Twitch player iframes.
731
+ * @default false
732
+ */
733
+ twitch?: boolean | ProviderVideoEmbedOptions;
734
+ /**
735
+ * Render `<Discord>` static invite/message cards.
736
+ * @default false
737
+ */
738
+ discord?: boolean;
739
+ /**
740
+ * Render `<Fediverse>`, `<Mastodon>`, `<Misskey>`, and `<Mixi2>` static cards.
741
+ * @default false
742
+ */
743
+ fediverse?: boolean;
744
+ /**
745
+ * Render `<Facebook>` static post cards.
746
+ * @default false
747
+ */
748
+ facebook?: boolean;
749
+ /**
750
+ * Render `<Threads>` static post cards.
751
+ * @default false
752
+ */
753
+ threads?: boolean;
754
+ /**
755
+ * Render `<Instagram>` static post cards.
756
+ * @default false
757
+ */
758
+ instagram?: boolean;
759
+ /**
760
+ * Render `<WebContainer>` lazy placeholder blocks.
761
+ * @default false
762
+ */
763
+ webContainer?: boolean;
764
+ /**
765
+ * Render `<Loom>` recording cards.
766
+ * @default false
767
+ */
768
+ loom?: boolean;
769
+ /**
770
+ * Render `<Asciinema>` terminal-recording cards.
771
+ * @default false
772
+ */
773
+ asciinema?: boolean;
774
+ /**
775
+ * Render `<Figma>` file, design, board, and prototype cards.
776
+ * @default false
777
+ */
778
+ figma?: boolean;
779
+ /**
780
+ * Render `<Note>` note.com article cards.
781
+ * @default false
782
+ */
783
+ note?: boolean;
784
+ /**
785
+ * Render `<GoogleSlides>` deck cards.
786
+ * @default false
787
+ */
788
+ googleSlides?: boolean;
789
+ }
790
+ //#endregion
358
791
  //#region src/plugins/github/types.d.ts
359
792
  interface GitHubRepoData {
360
793
  name: string;
@@ -462,31 +895,6 @@ declare function parseGitHubPermalink(value: string): GitHubSourceRef | null;
462
895
  */
463
896
  declare function transformGitHub(html: string, repoDataMap?: Map<string, GitHubRepoData | null>, options?: GitHubOptions): Promise<string>;
464
897
  //#endregion
465
- //#region src/plugins/twitter/types.d.ts
466
- interface TwitterEmbedOptions {
467
- /** Fetch the post body, author, and media from X at build time. */
468
- fetch?: boolean;
469
- /** Language sent to the syndication endpoint. @default "en" */
470
- lang?: string;
471
- /** Request timeout in milliseconds. @default 10000 */
472
- timeout?: number;
473
- /** Cache syndication responses in memory and on disk. @default true */
474
- cache?: boolean;
475
- /** Directory used for the persistent metadata cache. @default ".cache/ox-content/twitter" */
476
- cacheDir?: string;
477
- /** Directory where avatars, photos, and videos are written. @default "public/ox-content/twitter" */
478
- mediaOutputDir?: string;
479
- /** Public URL prefix for downloaded media. @default "/ox-content/twitter" */
480
- mediaPublicPath?: string;
481
- /** Download MP4 video and animated GIF assets at build time. @default false */
482
- downloadVideo?: boolean;
483
- /** Maximum video size in bytes. Oversized assets are skipped. @default 8388608 */
484
- maxVideoBytes?: number;
485
- /** Fetched-card chrome. `"full"` matches sveltweet / react-tweet. @default "compact" */
486
- appearance?: TweetAppearance;
487
- }
488
- type TweetAppearance = "compact" | "full";
489
- //#endregion
490
898
  //#region src/plugins/ogp/types.d.ts
491
899
  interface OgpData {
492
900
  url: string;
@@ -544,90 +952,6 @@ declare function collectOgpUrls(html: string): Promise<string[]>;
544
952
  declare function prefetchOgpData(urls: string[], options?: OgpOptions): Promise<Map<string, OgpData | null>>;
545
953
  declare function transformOgp(html: string, ogpDataMap?: Map<string, OgpData | null>, options?: OgpOptions): Promise<string>;
546
954
  //#endregion
547
- //#region src/plugins/pm.d.ts
548
- /**
549
- * Package Manager Tabs Plugin
550
- *
551
- * Transforms <pm>npm install …</pm> blocks into a tab group with one tab per
552
- * package manager (npm/pnpm/yarn/bun). The single npm-style command is converted
553
- * to each package manager's equivalent natively in Rust (`transformPmEmbeds` in
554
- * @ox-content/napi), and the result reuses the same `ox-tabs` widget markup as
555
- * the generic `<tabs>` plugin so styling and keyboard navigation are consistent.
556
- *
557
- * Syncing is opt-in (off by default): when enabled, the rendered group carries a
558
- * `data-ox-tab-group="pkg-manager"` attribute so the client runtime can keep
559
- * every package-manager group on the page in sync via localStorage.
560
- *
561
- * Package-manager groups share the tab-group counter with the `<tabs>` plugin so
562
- * `data-group` ids (and the CSS produced by `generateTabsCSS`) stay unique.
563
- */
564
- /** Options for {@link transformPm}. */
565
- interface PmOptions {
566
- /**
567
- * Enable opt-in synced package-manager tab groups. When `true`, a
568
- * `data-ox-tab-group="pkg-manager"` attribute is emitted so the client runtime
569
- * syncs the active package manager across every pm group on the page and
570
- * persists the choice in localStorage.
571
- * @default false
572
- */
573
- sync?: boolean;
574
- }
575
- //#endregion
576
- //#region src/plugins/tabs.d.ts
577
- /**
578
- * Transform Tabs components in HTML.
579
- */
580
- declare function transformTabs(html: string): Promise<string>;
581
- /**
582
- * Generate dynamic CSS for :has() based tab switching.
583
- * This is needed because :has() selectors need unique IDs.
584
- */
585
- declare function generateTabsCSS(groupCount: number): string;
586
- //#endregion
587
- //#region src/plugins/youtube.d.ts
588
- /**
589
- * YouTube Plugin - Privacy-enhanced iframe embedding
590
- *
591
- * Transforms <YouTube> components into responsive iframe embeds using
592
- * youtube-nocookie.com for enhanced privacy. A digits-only `start` attribute
593
- * becomes `?start=` on the iframe URL.
594
- *
595
- * The HTML rewrite is performed in Rust (`transformYoutubeEmbeds` in
596
- * @ox-content/napi), replacing the previous rehype parse/stringify
597
- * round-trip. This module keeps the public TS surface and a cheap marker
598
- * check so pages without a `<youtube>` element never cross the NAPI boundary.
599
- */
600
- interface YouTubeOptions {
601
- /**
602
- * Use privacy-enhanced mode (`youtube-nocookie.com`).
603
- * @default true
604
- */
605
- privacyEnhanced?: boolean;
606
- /**
607
- * Default iframe aspect ratio.
608
- * @default '16/9'
609
- */
610
- aspectRatio?: string;
611
- /**
612
- * Allow fullscreen playback.
613
- * @default true
614
- */
615
- allowFullscreen?: boolean;
616
- /**
617
- * Lazy load the iframe.
618
- * @default true
619
- */
620
- lazyLoad?: boolean;
621
- }
622
- /**
623
- * Extract YouTube video ID from various URL formats.
624
- */
625
- declare function extractVideoId(input: string): string | null;
626
- /**
627
- * Transform YouTube components in HTML.
628
- */
629
- declare function transformYouTube(html: string, options?: YouTubeOptions): Promise<string>;
630
- //#endregion
631
955
  //#region src/plugins/mermaid.d.ts
632
956
  /**
633
957
  * Mermaid Plugin - Native Rust renderer via NAPI
@@ -653,35 +977,177 @@ declare function transformMermaidStatic(html: string, _options?: MermaidOptions)
653
977
  */
654
978
  declare const mermaidClientScript = "";
655
979
  //#endregion
980
+ //#region src/plugins/graphviz-renderer.d.ts
981
+ type GraphvizFailureMode = "error" | "warn";
982
+ interface GraphvizOptions {
983
+ /** Graphviz renderer command. @default 'dot' */
984
+ command?: string;
985
+ /** Extra arguments passed before `-Tsvg`. @default [] */
986
+ args?: string[];
987
+ /** Behavior when the Graphviz command is not available. @default 'error' */
988
+ missingRenderer?: GraphvizFailureMode;
989
+ /** Behavior when Graphviz rejects a DOT source. @default 'error' */
990
+ renderErrors?: GraphvizFailureMode;
991
+ /** Per-render timeout in milliseconds. @default 10000 */
992
+ timeout?: number;
993
+ /** Cache rendered SVGs in memory for this process. @default true */
994
+ cache?: boolean;
995
+ /** Cache TTL in milliseconds. @default 3600000 */
996
+ cacheTTL?: number;
997
+ }
998
+ interface ResolvedGraphvizOptions {
999
+ command: string;
1000
+ args: string[];
1001
+ missingRenderer: GraphvizFailureMode;
1002
+ renderErrors: GraphvizFailureMode;
1003
+ timeout: number;
1004
+ cache: boolean;
1005
+ cacheTTL: number;
1006
+ }
1007
+ declare function clearGraphvizCache(): void;
1008
+ declare function resolveGraphvizOptions(options: boolean | GraphvizOptions | undefined): ResolvedGraphvizOptions | false;
1009
+ //#endregion
1010
+ //#region src/plugins/graphviz.d.ts
1011
+ declare function transformGraphvizStatic(html: string, options?: boolean | GraphvizOptions | ResolvedGraphvizOptions): Promise<string>;
1012
+ //#endregion
656
1013
  //#region src/plugins/index.d.ts
657
1014
  /**
658
1015
  * Transform all plugin components in HTML.
659
1016
  * Call this during SSG build to process all plugins at once.
660
1017
  */
661
- interface TransformAllOptions {
1018
+ interface TransformAllOptions extends MediaEmbedOptions {
662
1019
  tabs?: boolean;
663
1020
  /**
664
- * Expand `<pm>` package-manager blocks into install tabs. Pass an object to
665
- * opt in to synced groups (`{ sync: true }`); syncing is off by default.
666
- * @default false
1021
+ * Expand `<pm>` package-manager blocks into install tabs. Pass an object to
1022
+ * opt in to synced groups (`{ sync: true }`); syncing is off by default.
1023
+ * @default false
1024
+ */
1025
+ pm?: boolean | PmOptions;
1026
+ youtube?: boolean;
1027
+ github?: boolean | GitHubOptions;
1028
+ ogp?: boolean | OgpOptions;
1029
+ openGraph?: boolean | OgpOptions;
1030
+ mermaid?: boolean;
1031
+ graphviz?: boolean | GraphvizOptions;
1032
+ githubToken?: string;
1033
+ }
1034
+ /**
1035
+ * Transform all enabled plugins in HTML content.
1036
+ */
1037
+ declare function transformAllPlugins(html: string, options?: TransformAllOptions): Promise<string>;
1038
+ //#endregion
1039
+ //#region src/cross-reference-types.d.ts
1040
+ type CrossReferenceKind = "figure" | "table" | "section";
1041
+ type CrossReferenceFailureMode = "error" | "warn";
1042
+ interface CrossReferenceLabelOptions {
1043
+ figure?: string;
1044
+ table?: string;
1045
+ section?: string;
1046
+ }
1047
+ interface CrossReferencesOptions {
1048
+ enabled?: boolean;
1049
+ missing?: CrossReferenceFailureMode;
1050
+ duplicates?: CrossReferenceFailureMode;
1051
+ mismatches?: CrossReferenceFailureMode;
1052
+ labels?: CrossReferenceLabelOptions;
1053
+ }
1054
+ interface ResolvedCrossReferencesOptions {
1055
+ enabled: boolean;
1056
+ missing: CrossReferenceFailureMode;
1057
+ duplicates: CrossReferenceFailureMode;
1058
+ mismatches: CrossReferenceFailureMode;
1059
+ labels: Required<CrossReferenceLabelOptions>;
1060
+ }
1061
+ interface CrossReferenceEntry {
1062
+ id: string;
1063
+ kind: CrossReferenceKind;
1064
+ number: string;
1065
+ label: string;
1066
+ text: string;
1067
+ href: string;
1068
+ title?: string;
1069
+ }
1070
+ //#endregion
1071
+ //#region src/citation-types.d.ts
1072
+ type CitationFailureMode = "error" | "warn";
1073
+ interface CitationsOptions {
1074
+ enabled?: boolean;
1075
+ bibliography?: string | string[];
1076
+ rootDir?: string;
1077
+ appendBibliography?: boolean;
1078
+ missing?: CitationFailureMode;
1079
+ duplicates?: CitationFailureMode;
1080
+ malformed?: CitationFailureMode;
1081
+ bibliographyTitle?: string;
1082
+ }
1083
+ interface ResolvedCitationsOptions {
1084
+ enabled: boolean;
1085
+ bibliography: string[];
1086
+ rootDir?: string;
1087
+ appendBibliography: boolean;
1088
+ missing: CitationFailureMode;
1089
+ duplicates: CitationFailureMode;
1090
+ malformed: CitationFailureMode;
1091
+ bibliographyTitle: string;
1092
+ }
1093
+ interface CitationReference {
1094
+ id: string;
1095
+ key: string;
1096
+ index: number;
1097
+ label: string;
1098
+ href: string;
1099
+ bibliographyId: string;
1100
+ suppressAuthor: boolean;
1101
+ }
1102
+ interface BibliographyEntry {
1103
+ key: string;
1104
+ id: string;
1105
+ index: number;
1106
+ label: string;
1107
+ title: string;
1108
+ authors: string[];
1109
+ year?: string;
1110
+ url?: string;
1111
+ doi?: string;
1112
+ html: string;
1113
+ }
1114
+ //#endregion
1115
+ //#region src/budoux-types.d.ts
1116
+ type BudouxLanguage = "ja" | "zh-hans" | "zh-hant" | "th";
1117
+ interface BudouxParser {
1118
+ parse(text: string): string[];
1119
+ }
1120
+ interface BudouxOptions {
1121
+ /**
1122
+ * Enable build-time BudouX segmentation when an options object is supplied.
1123
+ *
1124
+ * @default true
667
1125
  */
668
- pm?: boolean | PmOptions;
669
- youtube?: boolean;
670
- github?: boolean | GitHubOptions;
671
- ogp?: boolean | OgpOptions;
672
- openGraph?: boolean | OgpOptions;
673
- mermaid?: boolean;
674
- githubToken?: string;
675
- spotify?: boolean;
676
- stackBlitz?: boolean;
677
- twitter?: boolean | TwitterEmbedOptions;
678
- bluesky?: boolean;
679
- webContainer?: boolean;
1126
+ enabled?: boolean;
1127
+ /**
1128
+ * Default BudouX parser language.
1129
+ *
1130
+ * @default "ja"
1131
+ */
1132
+ language?: BudouxLanguage;
1133
+ /**
1134
+ * Separator inserted between BudouX phrases.
1135
+ *
1136
+ * @default "\u200b"
1137
+ */
1138
+ separator?: string;
1139
+ /**
1140
+ * Custom build-time parser. When supplied, ox-content does not import the
1141
+ * `budoux` package.
1142
+ */
1143
+ parser?: BudouxParser;
1144
+ }
1145
+ interface ResolvedBudouxOptions {
1146
+ enabled: boolean;
1147
+ language: BudouxLanguage;
1148
+ separator: string;
1149
+ parser?: BudouxParser;
680
1150
  }
681
- /**
682
- * Transform all enabled plugins in HTML content.
683
- */
684
- declare function transformAllPlugins(html: string, options?: TransformAllOptions): Promise<string>;
685
1151
  //#endregion
686
1152
  //#region src/page-context.d.ts
687
1153
  /**
@@ -1122,6 +1588,21 @@ interface SsgOptions {
1122
1588
  * @default '.html'
1123
1589
  */
1124
1590
  extension?: string;
1591
+ /**
1592
+ * Mount generated page routes under this path, independent from `base` and
1593
+ * `outDir`.
1594
+ *
1595
+ * `blog`, `/blog`, and `/blog/` all mount under `/blog`. Page HTML and
1596
+ * page-level assets follow the prefix. Root host files (`_redirects`,
1597
+ * `_headers`, root feeds, sitemap index) stay at `outDir`. `base` remains
1598
+ * the public deployment prefix and is not used as an output mount.
1599
+ * Frontmatter `permalink` still wins when permalinks are enabled.
1600
+ *
1601
+ * Off when omitted.
1602
+ *
1603
+ * @default undefined
1604
+ */
1605
+ routePrefix?: string;
1125
1606
  /**
1126
1607
  * Remove previously generated files from the output directory before writing
1127
1608
  * the new SSG result.
@@ -1165,8 +1646,10 @@ interface SsgOptions {
1165
1646
  *
1166
1647
  * The component owns the whole document, so `theme`, `bare` and the head
1167
1648
  * metadata options do not apply — everything from `<html>` down is yours.
1168
- * Compose one per layout with `createTheme()`, and read the current page
1169
- * through `usePageProps()` / `useSiteConfig()`.
1649
+ * `ssg.readerChrome`, when enabled, still post-processes the rendered
1650
+ * document so custom themes share the built-in code-copy and outbound-link
1651
+ * implementation. Compose one per layout with `createTheme()`, and read the
1652
+ * current page through `usePageProps()` / `useSiteConfig()`.
1170
1653
  *
1171
1654
  * ```ts
1172
1655
  * ssg: { render: createTheme({ layouts: { default: DefaultLayout } }) }
@@ -1282,7 +1765,8 @@ interface SsgOptions {
1282
1765
  *
1283
1766
  * Disabled when omitted or `false`. `true` enables all three with defaults.
1284
1767
  * An object enables the feature and can turn one control off, for example
1285
- * `{ copy: false }`.
1768
+ * `{ copy: false }`. Bare pages and `ssg.render` custom themes can use the
1769
+ * same copy and outbound-link transform without adopting the built-in theme.
1286
1770
  *
1287
1771
  * @default false
1288
1772
  */
@@ -1323,7 +1807,8 @@ interface SsgOptions {
1323
1807
  * Off by default. `true` writes a `.md` companion using the published URL
1324
1808
  * (permalink, locale, base, and output directory) and adds
1325
1809
  * `<link rel="alternate" type="text/markdown">`. An object enables the
1326
- * feature and can turn the alternate link off.
1810
+ * feature and can turn the alternate link off, or opt in to the default
1811
+ * theme's Copy as Markdown control.
1327
1812
  *
1328
1813
  * The companion is a byte-for-byte copy of the source file, including
1329
1814
  * frontmatter. Draft and unlisted pages are never written.
@@ -1414,41 +1899,6 @@ interface SsgOptions {
1414
1899
  */
1415
1900
  navigation?: SsgNavigationGroup[];
1416
1901
  }
1417
- /**
1418
- * Per-control flags for `ssg.readerChrome`.
1419
- *
1420
- * Omitted fields stay on when the feature itself is enabled.
1421
- */
1422
- interface ReaderChromeOptions {
1423
- /**
1424
- * Copy button on fenced code blocks. The clipboard is read in the browser,
1425
- * never at build time.
1426
- *
1427
- * @default true
1428
- */
1429
- copy?: boolean;
1430
- /**
1431
- * Icon and `rel="noopener noreferrer"` on outbound `http(s)` links.
1432
- * Relative, hash, and same-document links are left alone.
1433
- *
1434
- * @default true
1435
- */
1436
- externalLinks?: boolean;
1437
- /**
1438
- * Back-to-top control that appears after the page is scrolled.
1439
- *
1440
- * @default true
1441
- */
1442
- backToTop?: boolean;
1443
- }
1444
- /**
1445
- * Resolved reader chrome. `false` means no extra markup or JS.
1446
- */
1447
- type ResolvedReaderChrome = false | {
1448
- copy: boolean;
1449
- externalLinks: boolean;
1450
- backToTop: boolean;
1451
- };
1452
1902
  /**
1453
1903
  * Per-control flags for `ssg.a11y`.
1454
1904
  *
@@ -1524,6 +1974,10 @@ type ResolvedJsonLd = false | {
1524
1974
  interface ResolvedSsgOptions {
1525
1975
  enabled: boolean;
1526
1976
  extension: string;
1977
+ /**
1978
+ * Present after `resolveSsgOptions`. Omitted / empty means off.
1979
+ */
1980
+ routePrefix?: string;
1527
1981
  clean: boolean;
1528
1982
  bare: boolean;
1529
1983
  render?: ThemeComponent;
@@ -1726,6 +2180,44 @@ interface ResolvedPwaOptions {
1726
2180
  backgroundColor?: string;
1727
2181
  startUrl?: string;
1728
2182
  }
2183
+ /**
2184
+ * Opt-in self-hosted Iconify CSS for used icons.
2185
+ *
2186
+ * Off by default. When enabled, the SSG build resolves Iconify names from
2187
+ * installed `@iconify/json` or `@iconify-json/*` packages and emits CSS
2188
+ * masks so the published site does not request `api.iconify.design`.
2189
+ */
2190
+ interface IconsOptions {
2191
+ /**
2192
+ * CSS emission mode.
2193
+ * @default "css-mask"
2194
+ */
2195
+ mode?: "css-mask";
2196
+ /**
2197
+ * Class syntax. `"unocss"` emits `icon-[prefix--name]`.
2198
+ * @default "unocss"
2199
+ */
2200
+ syntax?: "unocss";
2201
+ /**
2202
+ * Glob patterns to scan, or explicit `prefix:name` icons.
2203
+ * Entries that look like Iconify names are used as-is (no scan).
2204
+ */
2205
+ include?: string[];
2206
+ /**
2207
+ * Iconify names that are always emitted, even when no source mentions them.
2208
+ */
2209
+ safelist?: string[];
2210
+ }
2211
+ /**
2212
+ * Resolved icon asset options.
2213
+ */
2214
+ interface ResolvedIconsOptions {
2215
+ enabled: boolean;
2216
+ mode: "css-mask";
2217
+ syntax: "unocss";
2218
+ include: string[];
2219
+ safelist: string[];
2220
+ }
1729
2221
  /**
1730
2222
  * Opt-in Markdown source companions written beside generated HTML.
1731
2223
  */
@@ -1735,6 +2227,13 @@ interface MarkdownSourceOptions {
1735
2227
  * @default true
1736
2228
  */
1737
2229
  alternate?: boolean;
2230
+ /**
2231
+ * Show a page-level Copy as Markdown control in the default theme.
2232
+ * The control copies or opens the published companion bytes, including
2233
+ * frontmatter. Off unless set, even when companions are enabled.
2234
+ * @default false
2235
+ */
2236
+ copy?: boolean;
1738
2237
  }
1739
2238
  /**
1740
2239
  * Resolved Markdown source-companion options.
@@ -1742,6 +2241,7 @@ interface MarkdownSourceOptions {
1742
2241
  interface ResolvedMarkdownSourceOptions {
1743
2242
  enabled: boolean;
1744
2243
  alternate: boolean;
2244
+ copy: boolean;
1745
2245
  }
1746
2246
  /**
1747
2247
  * Opt-in crawl manifests written during SSG.
@@ -1832,6 +2332,13 @@ interface CascadeOptions {
1832
2332
  interface ResolvedCascadeOptions {
1833
2333
  enabled: boolean;
1834
2334
  }
2335
+ /**
2336
+ * Host that consumes the generated `_redirects` file.
2337
+ *
2338
+ * Both values write the same `_redirects` body today. The distinct names
2339
+ * leave room for provider-specific limits and diagnostics later.
2340
+ */
2341
+ type RedirectProvider = "netlify" | "cloudflare";
1835
2342
  /**
1836
2343
  * Opt-in static redirects, aliases, and path rewrites.
1837
2344
  *
@@ -1846,10 +2353,13 @@ interface RedirectsOptions {
1846
2353
  */
1847
2354
  map?: Record<string, string>;
1848
2355
  /**
1849
- * Write a Netlify / Cloudflare `_redirects` file next to the HTML pages.
1850
- * @default false
2356
+ * Host that should receive a `_redirects` file.
2357
+ *
2358
+ * Omit the field to detect `CF_PAGES=1`, `WORKERS_CI=1`, or `NETLIFY=true`.
2359
+ * Local builds and GitHub Actions should set this explicitly. HTML redirect
2360
+ * pages are independent of this selector.
1851
2361
  */
1852
- netlify?: boolean;
2362
+ provider?: RedirectProvider;
1853
2363
  /**
1854
2364
  * Write a `_headers` Location map next to the HTML pages.
1855
2365
  * @default false
@@ -1860,6 +2370,14 @@ interface RedirectsOptions {
1860
2370
  * @default false
1861
2371
  */
1862
2372
  json?: boolean;
2373
+ /**
2374
+ * Write static HTML fallback pages for ordinary redirect sources.
2375
+ *
2376
+ * Set `false` when the selected host should consume `_redirects` directly.
2377
+ * Wildcard sources never write HTML pages because they are host-rule syntax.
2378
+ * @default true
2379
+ */
2380
+ html?: boolean;
1863
2381
  /**
1864
2382
  * Allow `http://` and `https://` destinations. `javascript:`, `data:`, and
1865
2383
  * protocol-relative `//` targets stay rejected.
@@ -1873,29 +2391,80 @@ interface RedirectsOptions {
1873
2391
  interface ResolvedRedirectsOptions {
1874
2392
  enabled: boolean;
1875
2393
  map: Record<string, string>;
1876
- netlify: boolean;
2394
+ provider?: RedirectProvider;
1877
2395
  headers: boolean;
1878
2396
  json: boolean;
2397
+ html: boolean;
1879
2398
  allowExternal: boolean;
1880
2399
  }
1881
2400
  /**
1882
2401
  * Feed file formats written during SSG.
1883
2402
  */
1884
2403
  type FeedFormat = "rss" | "atom" | "json";
2404
+ /** One feed item author accepted by programmatic feeds. */
2405
+ interface FeedItemAuthor {
2406
+ name: string;
2407
+ url?: string;
2408
+ }
2409
+ type FeedItemAuthorInput = string | FeedItemAuthor;
2410
+ /** One JSON Feed / enclosure attachment accepted by programmatic feeds. */
2411
+ interface FeedItemAttachment {
2412
+ url: string;
2413
+ mimeType?: string;
2414
+ title?: string;
2415
+ sizeInBytes?: number;
2416
+ durationInSeconds?: number;
2417
+ }
2418
+ /** One collection or programmatic item considered for a generated feed. */
2419
+ interface FeedItemInput {
2420
+ title?: string;
2421
+ description?: string;
2422
+ content?: string;
2423
+ path?: string;
2424
+ loc?: string;
2425
+ url?: string;
2426
+ id?: string;
2427
+ date?: unknown;
2428
+ lastUpdated?: unknown;
2429
+ draft?: unknown;
2430
+ unlisted?: unknown;
2431
+ author?: FeedItemAuthorInput;
2432
+ authors?: readonly FeedItemAuthorInput[];
2433
+ image?: string;
2434
+ attachments?: readonly FeedItemAttachment[];
2435
+ language?: string;
2436
+ frontmatter?: Record<string, unknown>;
2437
+ }
2438
+ interface FeedItemsResolveContext {
2439
+ name?: string;
2440
+ formats: readonly FeedFormat[];
2441
+ path: string;
2442
+ siteUrl?: string;
2443
+ siteName?: string;
2444
+ siteDescription?: string;
2445
+ base: string;
2446
+ outDir?: string;
2447
+ }
2448
+ type FeedItemsSource = readonly FeedItemInput[] | ((context: FeedItemsResolveContext) => readonly FeedItemInput[] | Promise<readonly FeedItemInput[]>);
1885
2449
  /**
1886
- * Opt-in RSS / Atom / JSON Feed files written during SSG.
2450
+ * One feed's formats, source, output path, and channel metadata.
1887
2451
  */
1888
- interface FeedsOptions {
2452
+ interface FeedChannelOptions {
1889
2453
  /**
1890
2454
  * Feed formats to write.
1891
2455
  * @default ["rss", "atom", "json"]
1892
2456
  */
1893
- formats?: FeedFormat[];
2457
+ formats?: readonly FeedFormat[];
1894
2458
  /**
1895
2459
  * Named collection to publish. Defaults to `content`, or the first
1896
2460
  * configured collection when `content` is absent.
1897
2461
  */
1898
2462
  collection?: string;
2463
+ /**
2464
+ * Programmatic items for this channel. A channel may set either
2465
+ * `collection` or `items`, not both.
2466
+ */
2467
+ items?: FeedItemsSource;
1899
2468
  /**
1900
2469
  * Maximum number of published items, newest first.
1901
2470
  * @default 20
@@ -1906,16 +2475,54 @@ interface FeedsOptions {
1906
2475
  * @default "/"
1907
2476
  */
1908
2477
  path?: string;
2478
+ /** Channel title. Defaults to the SSG site name. */
2479
+ title?: string;
2480
+ /** Channel description. Defaults to the SSG site description. */
2481
+ description?: string;
2482
+ /** Channel language (`en`, `ja`, …). Omitted when unset. */
2483
+ language?: string;
2484
+ /** Channel image URL (RSS image / Atom logo / JSON Feed icon). */
2485
+ image?: string;
2486
+ /** Favicon URL (Atom icon / JSON Feed favicon). */
2487
+ favicon?: string;
2488
+ /** Copyright / rights notice. Omitted from JSON Feed. */
2489
+ copyright?: string;
1909
2490
  }
1910
2491
  /**
1911
- * Resolved feed options.
2492
+ * Opt-in RSS / Atom / JSON Feed files written during SSG.
2493
+ *
2494
+ * A single object is one default feed. A named record or array writes
2495
+ * multiple feeds with their own paths and channel metadata.
1912
2496
  */
1913
- interface ResolvedFeedsOptions {
1914
- enabled: boolean;
1915
- formats: FeedFormat[];
2497
+ type FeedsOptions = FeedChannelOptions | readonly FeedChannelOptions[] | {
2498
+ [name: string]: FeedChannelOptions;
2499
+ };
2500
+ /**
2501
+ * One resolved feed channel.
2502
+ */
2503
+ interface ResolvedFeedChannel {
2504
+ name?: string;
2505
+ formats: readonly FeedFormat[];
1916
2506
  collection?: string;
2507
+ items?: FeedItemsSource;
1917
2508
  limit: number;
1918
2509
  path: string;
2510
+ title?: string;
2511
+ description?: string;
2512
+ language?: string;
2513
+ image?: string;
2514
+ favicon?: string;
2515
+ copyright?: string;
2516
+ }
2517
+ /**
2518
+ * Resolved feed options.
2519
+ *
2520
+ * Legacy `true` / single-object configs keep one channel on the top-level
2521
+ * fields. A named record or array also sets `feeds` to every channel.
2522
+ */
2523
+ interface ResolvedFeedsOptions extends ResolvedFeedChannel {
2524
+ enabled: boolean;
2525
+ feeds?: ResolvedFeedChannel[];
1919
2526
  }
1920
2527
  /**
1921
2528
  * One person in the `blog.authors` map.
@@ -2227,6 +2834,16 @@ interface OxContentOptions {
2227
2834
  * @default false
2228
2835
  */
2229
2836
  pwa?: boolean | PwaOptions;
2837
+ /**
2838
+ * Generate self-hosted Iconify CSS for used and safelisted icons.
2839
+ *
2840
+ * Off by default. `true` or `{}` enables CSS-mask emission. Install
2841
+ * `@iconify/json` or individual `@iconify-json/*` packages so the build
2842
+ * can resolve collections without a network request.
2843
+ *
2844
+ * @default false
2845
+ */
2846
+ icons?: boolean | IconsOptions;
2230
2847
  /**
2231
2848
  * Write tag/category term pages and inject related-page lists.
2232
2849
  *
@@ -2356,6 +2973,42 @@ interface OxContentOptions {
2356
2973
  * @default false
2357
2974
  */
2358
2975
  attrs?: boolean | AttrsOptions;
2976
+ /**
2977
+ * Opt-in labeled cross-references for headings, figures/images, and tables.
2978
+ *
2979
+ * References such as `@sec-install`, `@fig-pipeline`, and `@tbl-options`
2980
+ * become links to matching `id` attributes generated by `attrs` or native
2981
+ * Markdown rendering. Missing labels, duplicate labels, and prefix/type
2982
+ * mismatches fail by default and can be downgraded to warnings.
2983
+ *
2984
+ * @default false
2985
+ */
2986
+ crossReferences?: boolean | CrossReferencesOptions;
2987
+ /**
2988
+ * Alias for `crossReferences`.
2989
+ *
2990
+ * @default false
2991
+ */
2992
+ xrefs?: boolean | CrossReferencesOptions;
2993
+ /**
2994
+ * Opt-in bibliography-backed citation references.
2995
+ *
2996
+ * References such as `[@rfc9110]` and `[@smith2024; @doe2023]` become
2997
+ * links to generated bibliography entries loaded from local CSL JSON files.
2998
+ *
2999
+ * @default false
3000
+ */
3001
+ citations?: boolean | CitationsOptions;
3002
+ /**
3003
+ * Opt-in build-time BudouX phrase segmentation.
3004
+ *
3005
+ * Inserts zero-width spaces into visible prose so Japanese text gets better
3006
+ * line-break opportunities without shipping the BudouX parser to the browser.
3007
+ * Install `budoux` when enabling the default parser, or pass a custom parser.
3008
+ *
3009
+ * @default false
3010
+ */
3011
+ budoux?: boolean | BudouxOptions;
2359
3012
  /**
2360
3013
  * Opt-in `{badge:variant}` inline badges.
2361
3014
  *
@@ -2365,6 +3018,50 @@ interface OxContentOptions {
2365
3018
  * @default false
2366
3019
  */
2367
3020
  badges?: boolean | BadgeOptions;
3021
+ /**
3022
+ * Opt-in `<NotByAI />` authorship disclosure badge.
3023
+ *
3024
+ * Passing `true` or an options object emits the official Not By AI light/dark
3025
+ * artwork as static HTML. This is not a status badge — see `badges` for
3026
+ * `{badge:tip}` labels. Disabled when omitted. Fenced, indented, and inline
3027
+ * code plus HTML comments are skipped.
3028
+ *
3029
+ * @default false
3030
+ */
3031
+ notByAi?: boolean | NotByAiOptions;
3032
+ /**
3033
+ * Opt-in `{kbd:...}` inline keyboard keys.
3034
+ *
3035
+ * Passing `true` or an options object enables `{kbd:Ctrl+K}` and
3036
+ * `{kbd:Cmd Shift P}`. Key labels are HTML-escaped. Fenced, indented,
3037
+ * inline, and raw code, plus HTML comments, are skipped. Aliases come
3038
+ * from build config, not the runtime user agent.
3039
+ *
3040
+ * @default false
3041
+ */
3042
+ keyboardKeys?: boolean | KeyboardKeysOptions;
3043
+ /**
3044
+ * Opt-in abbreviation and glossary expansion.
3045
+ *
3046
+ * Passing `true` or an options object expands `*[LSP]: Language Server Protocol`
3047
+ * and config `terms` into `<abbr class="ox-abbr">`. Matching uses Unicode word
3048
+ * boundaries. Fenced, indented, inline, and raw code, HTML comments, and
3049
+ * existing links are skipped. There is no client JavaScript.
3050
+ *
3051
+ * @default false
3052
+ */
3053
+ abbreviations?: boolean | AbbreviationsOptions;
3054
+ /**
3055
+ * Opt-in PHP Markdown Extra / mdBook-style definition lists.
3056
+ *
3057
+ * Passing `true` or an options object turns
3058
+ * `Term` / `: definition` source into semantic `<dl>` markup.
3059
+ * Disabled when omitted. Fenced, indented, and inline code are skipped.
3060
+ * Invalid or ambiguous forms stay ordinary paragraphs or lists.
3061
+ *
3062
+ * @default false
3063
+ */
3064
+ definitionLists?: boolean | DefinitionListOptions;
2368
3065
  /**
2369
3066
  * Opt-in `{link:...}` rich magic links.
2370
3067
  *
@@ -2397,6 +3094,40 @@ interface OxContentOptions {
2397
3094
  * @default false
2398
3095
  */
2399
3096
  images?: boolean | ImageOptions;
3097
+ /**
3098
+ * Opt-in static `::: gallery` image groups.
3099
+ *
3100
+ * Each non-empty line inside the block must be a Markdown image, optionally
3101
+ * as a list item. Image titles become item captions, and the block title or
3102
+ * caption metadata becomes the gallery caption. Passing `true` or `{}`
3103
+ * enables strict empty-gallery and missing-alt diagnostics.
3104
+ *
3105
+ * @default false
3106
+ */
3107
+ imageGalleries?: boolean | ImageGalleryOptions;
3108
+ /**
3109
+ * Opt-in static `::: timeline` milestone lists.
3110
+ *
3111
+ * Timeline blocks render dated or undated milestones from Markdown-only
3112
+ * `::: timeline` blocks. Items can carry `status`, `label`, and `href`
3113
+ * metadata while nested Markdown stays searchable and static.
3114
+ *
3115
+ * @default false
3116
+ */
3117
+ timelines?: boolean | TimelineOptions;
3118
+ /**
3119
+ * Opt-in static `::: if` / `::: else` blocks.
3120
+ *
3121
+ * Conditions are evaluated from `conditionalBlocks.values` and page
3122
+ * frontmatter before Markdown is parsed. Non-selected branches are excluded
3123
+ * from rendered HTML, TOC, and generated search payloads. The expression
3124
+ * language supports `==`, `!=`, `in`, `and`, `or`, parentheses, string /
3125
+ * number / boolean / null literals, and array literals. No JavaScript is
3126
+ * executed.
3127
+ *
3128
+ * @default false
3129
+ */
3130
+ conditionalBlocks?: boolean | ConditionalBlockOptions;
2400
3131
  /**
2401
3132
  * Opt-in page-bundle resources and build-time image processing.
2402
3133
  *
@@ -2435,6 +3166,17 @@ interface OxContentOptions {
2435
3166
  * @default false
2436
3167
  */
2437
3168
  includes?: boolean | IncludeOptions;
3169
+ /**
3170
+ * Inline a parameterized Markdown partial with
3171
+ * `<!-- @partial: ./_partials/install.md package="ox-content" -->`.
3172
+ *
3173
+ * Disabled when omitted. `{{ name }}` substitutions are HTML-escaped.
3174
+ * Missing parameters stay literal unless `missing` is `"error"`. Existing
3175
+ * `<!-- @include: -->` behavior is unchanged.
3176
+ *
3177
+ * @default false
3178
+ */
3179
+ partials?: boolean | PartialsOptions;
2438
3180
  /**
2439
3181
  * Opt-in `::: card` / `::: link-card` / `::: card-grid` blocks.
2440
3182
  *
@@ -2453,6 +3195,16 @@ interface OxContentOptions {
2453
3195
  * @default false
2454
3196
  */
2455
3197
  steps?: boolean | StepsOptions;
3198
+ /**
3199
+ * Opt-in VitePress-style `::: code-group` fence groups.
3200
+ *
3201
+ * Passing `true` or `{}` enables rewriting labeled fences into the
3202
+ * existing no-JS tab widget. Omitted or `false` leaves the source on
3203
+ * the normal Markdown/container path.
3204
+ *
3205
+ * @default false
3206
+ */
3207
+ codeGroups?: boolean | CodeGroupOptions;
2456
3208
  /**
2457
3209
  * Opt-in static directory trees from `file-tree` fences.
2458
3210
  *
@@ -2463,6 +3215,17 @@ interface OxContentOptions {
2463
3215
  * @default false
2464
3216
  */
2465
3217
  fileTree?: boolean | FileTreeOptions;
3218
+ /**
3219
+ * Opt-in static tables from `csv-table` / `json-table` fences.
3220
+ *
3221
+ * Passing `true` or `{}` enables the transform. Inline CSV/JSON becomes a
3222
+ * semantic `<table>` with a responsive wrapper. `src` or a single path body
3223
+ * can import `@/data/options.csv` or `./options.json`. Paths cannot escape
3224
+ * the content/project root with `..`. Missing imports use `missing`.
3225
+ *
3226
+ * @default false
3227
+ */
3228
+ dataTables?: boolean | DataTableOptions;
2466
3229
  /**
2467
3230
  * Sanitize rendered HTML with safe defaults or explicit allow lists.
2468
3231
  *
@@ -2533,6 +3296,13 @@ interface OxContentOptions {
2533
3296
  * @default false
2534
3297
  */
2535
3298
  mermaid?: boolean;
3299
+ /**
3300
+ * Render `dot` / `graphviz` fenced blocks to static SVG with Graphviz.
3301
+ * Pass an object to configure the renderer command and failure policy.
3302
+ *
3303
+ * @default false
3304
+ */
3305
+ graphviz?: boolean | GraphvizOptions;
2536
3306
  /**
2537
3307
  * Enable `$…$` inline and `$$…$$` block math.
2538
3308
  *
@@ -2642,6 +3412,10 @@ interface ResolvedOptions {
2642
3412
  blog?: ResolvedBlogOptions;
2643
3413
  feeds?: ResolvedFeedsOptions;
2644
3414
  pwa?: ResolvedPwaOptions;
3415
+ /**
3416
+ * Present after `resolveOptions`. Omitted in hand-built fixtures means off.
3417
+ */
3418
+ icons?: ResolvedIconsOptions;
2645
3419
  taxonomies?: ResolvedTaxonomiesOptions;
2646
3420
  versions?: ResolvedVersionsOptions;
2647
3421
  resources?: ResolvedResourcesOptions;
@@ -2661,18 +3435,58 @@ interface ResolvedOptions {
2661
3435
  wikiLinks: ResolvedWikiLinkOptions;
2662
3436
  emojiShortcodes: ResolvedEmojiShortcodeOptions;
2663
3437
  attrs: ResolvedAttrsOptions;
3438
+ crossReferences: ResolvedCrossReferencesOptions;
3439
+ citations: ResolvedCitationsOptions;
3440
+ /**
3441
+ * Present after `resolveOptions`. Omitted in hand-built fixtures means off.
3442
+ */
3443
+ budoux?: ResolvedBudouxOptions;
2664
3444
  badges: ResolvedBadgeOptions;
3445
+ /**
3446
+ * Present after `resolveOptions`. Omitted in hand-built fixtures means off.
3447
+ */
3448
+ notByAi?: ResolvedNotByAiOptions;
3449
+ keyboardKeys?: ResolvedKeyboardKeysOptions;
3450
+ /**
3451
+ * Present after `resolveOptions`. Omitted in hand-built fixtures means off.
3452
+ */
3453
+ abbreviations?: ResolvedAbbreviationsOptions;
3454
+ /**
3455
+ * Present after `resolveOptions`. Omitted in hand-built fixtures means off.
3456
+ */
3457
+ definitionLists?: ResolvedDefinitionListOptions;
2665
3458
  /**
2666
3459
  * Present after `resolveOptions`. Omitted in hand-built fixtures means off.
2667
3460
  */
2668
3461
  magicLinks?: ResolvedMagicLinkOptions;
2669
3462
  containers: ResolvedContainerOptions;
2670
3463
  images: ResolvedImageOptions;
3464
+ /**
3465
+ * Present after `resolveOptions`. Omitted in hand-built fixtures means off.
3466
+ */
3467
+ imageGalleries?: ResolvedImageGalleryOptions;
3468
+ /**
3469
+ * Present after `resolveOptions`. Omitted in hand-built fixtures means off.
3470
+ */
3471
+ timelines?: ResolvedTimelineOptions;
3472
+ /**
3473
+ * Present after `resolveOptions`. Omitted in hand-built fixtures means off.
3474
+ */
3475
+ conditionalBlocks?: ResolvedConditionalBlockOptions;
2671
3476
  codeImports: ResolvedCodeImportOptions;
2672
3477
  includes: ResolvedIncludeOptions;
3478
+ /**
3479
+ * Present after `resolveOptions`. Omitted in hand-built fixtures means off.
3480
+ */
3481
+ partials?: ResolvedPartialsOptions;
2673
3482
  cards: ResolvedCardOptions;
2674
3483
  steps: ResolvedStepsOptions;
3484
+ /**
3485
+ * Present after `resolveOptions`. Omitted in hand-built fixtures means off.
3486
+ */
3487
+ codeGroups?: ResolvedCodeGroupOptions;
2675
3488
  fileTree: ResolvedFileTreeOptions;
3489
+ dataTables: ResolvedDataTableOptions;
2676
3490
  sanitize: ResolvedSanitizeOptions;
2677
3491
  editThisPage: ResolvedEditThisPageOptions;
2678
3492
  cjkEmphasis: boolean;
@@ -2684,6 +3498,7 @@ interface ResolvedOptions {
2684
3498
  typedHover?: ResolvedTypedHoverOptions;
2685
3499
  docsTests: ResolvedDocsTestOptions;
2686
3500
  mermaid: boolean;
3501
+ graphviz: ResolvedGraphvizOptions | false;
2687
3502
  math: ResolvedMathOptions;
2688
3503
  frontmatter: boolean;
2689
3504
  toc: boolean;
@@ -2733,6 +3548,28 @@ interface BuiltinEmbedOptions {
2733
3548
  * @default false
2734
3549
  */
2735
3550
  spotify?: boolean;
3551
+ /**
3552
+ * Render `<AppleMusic url="https://music.apple.com/...">` iframes.
3553
+ * @default false
3554
+ */
3555
+ appleMusic?: boolean;
3556
+ /**
3557
+ * Render `<SpeakerDeck url="https://speakerdeck.com/...">` cards.
3558
+ * Player URLs and oEmbed-resolved share URLs render a lazy iframe plus
3559
+ * title/author metadata. Fetch or parse failures become a link card.
3560
+ * @default false
3561
+ */
3562
+ speakerDeck?: boolean;
3563
+ /**
3564
+ * Render `<Audio src="https://...">` native audio players.
3565
+ * @default false
3566
+ */
3567
+ audio?: boolean;
3568
+ /**
3569
+ * Render `<Video src="https://...">` native video players.
3570
+ * @default false
3571
+ */
3572
+ video?: boolean;
2736
3573
  /**
2737
3574
  * Render `<StackBlitz url="https://stackblitz.com/edit/...">` iframes.
2738
3575
  * @default false
@@ -2745,16 +3582,113 @@ interface BuiltinEmbedOptions {
2745
3582
  * @default false
2746
3583
  */
2747
3584
  twitter?: boolean | TwitterEmbedOptions;
3585
+ /**
3586
+ * Render `<Reddit>` as a static post card.
3587
+ * Pass `{ fetch: false }` to skip metadata fetching and render a link-only card.
3588
+ * @default false
3589
+ */
3590
+ reddit?: boolean | RedditEmbedOptions;
2748
3591
  /**
2749
3592
  * Render `<Bluesky>` as static cards.
2750
3593
  * @default false
2751
3594
  */
2752
3595
  bluesky?: boolean;
3596
+ /**
3597
+ * Render `<GoogleMaps>` as static place cards.
3598
+ * @default false
3599
+ */
3600
+ googleMaps?: boolean;
3601
+ /**
3602
+ * Render `<Qiita>` as static article cards.
3603
+ * Pass `{ fetch: false }` to skip metadata fetching and render a link-only card.
3604
+ * @default false
3605
+ */
3606
+ qiita?: boolean | ProviderArticleEmbedOptions;
3607
+ /**
3608
+ * Render `<Zenn>` as static article cards.
3609
+ * Pass `{ fetch: false }` to skip metadata fetching and render a link-only card.
3610
+ * @default false
3611
+ */
3612
+ zenn?: boolean | ProviderArticleEmbedOptions;
3613
+ /**
3614
+ * Render `<NpmPackage>`, `<CratesIo>`, `<PyPI>`, and `<DockerHub>` as static cards.
3615
+ * Pass `{ fetch: false }` to skip metadata fetching and render link-only cards.
3616
+ * @default false
3617
+ */
3618
+ packageRegistry?: boolean | ProviderPackageEmbedOptions;
3619
+ /**
3620
+ * Render `<CodePen>`, `<JSFiddle>`, and `<Observable>` as static playground cards.
3621
+ * Pass `{ iframe: true }` to include lazy iframe URLs where supported.
3622
+ * @default false
3623
+ */
3624
+ playgrounds?: boolean | ProviderPlaygroundEmbedOptions;
3625
+ /**
3626
+ * Render `<Vimeo>` as static video cards.
3627
+ * Pass `{ iframe: true }` to include lazy player iframe URLs.
3628
+ * @default false
3629
+ */
3630
+ vimeo?: boolean | ProviderVideoEmbedOptions;
3631
+ /**
3632
+ * Render `<Twitch>` as static video, clip, and channel cards.
3633
+ * Pass `{ iframe: true, parent: "example.com" }` to include Twitch iframes.
3634
+ * @default false
3635
+ */
3636
+ twitch?: boolean | ProviderVideoEmbedOptions;
3637
+ /**
3638
+ * Render `<Discord>` as static invite/message cards.
3639
+ * @default false
3640
+ */
3641
+ discord?: boolean;
3642
+ /**
3643
+ * Render `<Fediverse>`, `<Mastodon>`, `<Misskey>`, and `<Mixi2>` as static cards.
3644
+ * @default false
3645
+ */
3646
+ fediverse?: boolean;
3647
+ /**
3648
+ * Render `<Facebook>` as static post cards.
3649
+ * @default false
3650
+ */
3651
+ facebook?: boolean;
3652
+ /**
3653
+ * Render `<Threads>` as static post cards.
3654
+ * @default false
3655
+ */
3656
+ threads?: boolean;
3657
+ /**
3658
+ * Render `<Instagram>` as static post cards.
3659
+ * @default false
3660
+ */
3661
+ instagram?: boolean;
2753
3662
  /**
2754
3663
  * Render `<WebContainer>` lazy placeholders with isolation metadata.
2755
3664
  * @default false
2756
3665
  */
2757
3666
  webContainer?: boolean;
3667
+ /**
3668
+ * Render `<Loom>` recording cards.
3669
+ * @default false
3670
+ */
3671
+ loom?: boolean;
3672
+ /**
3673
+ * Render `<Asciinema>` terminal-recording cards.
3674
+ * @default false
3675
+ */
3676
+ asciinema?: boolean;
3677
+ /**
3678
+ * Render `<Figma>` file, design, board, and prototype cards.
3679
+ * @default false
3680
+ */
3681
+ figma?: boolean;
3682
+ /**
3683
+ * Render `<Note>` note.com article cards.
3684
+ * @default false
3685
+ */
3686
+ note?: boolean;
3687
+ /**
3688
+ * Render `<GoogleSlides>` deck cards.
3689
+ * @default false
3690
+ */
3691
+ googleSlides?: boolean;
2758
3692
  }
2759
3693
  /**
2760
3694
  * Options for the package-manager install-tab transform.
@@ -2774,10 +3708,32 @@ interface ResolvedBuiltinEmbedOptions {
2774
3708
  openGraph: OgpOptions | false;
2775
3709
  pm: BuiltinPmOptions | false;
2776
3710
  spotify: boolean;
3711
+ appleMusic: boolean;
3712
+ speakerDeck: boolean;
3713
+ audio?: boolean;
3714
+ video?: boolean;
2777
3715
  stackBlitz: boolean;
2778
3716
  twitter: TwitterEmbedOptions | false;
3717
+ reddit?: RedditEmbedOptions | false;
2779
3718
  bluesky: boolean;
3719
+ googleMaps?: boolean;
3720
+ qiita?: ProviderArticleEmbedOptions | false;
3721
+ zenn?: ProviderArticleEmbedOptions | false;
3722
+ packageRegistry?: ProviderPackageEmbedOptions | false;
3723
+ playgrounds?: ProviderPlaygroundEmbedOptions | false;
3724
+ vimeo?: ProviderVideoEmbedOptions | false;
3725
+ twitch?: ProviderVideoEmbedOptions | false;
3726
+ discord?: boolean;
3727
+ fediverse?: boolean;
3728
+ facebook?: boolean;
3729
+ threads?: boolean;
3730
+ instagram?: boolean;
2780
3731
  webContainer: boolean;
3732
+ loom?: boolean;
3733
+ asciinema?: boolean;
3734
+ figma?: boolean;
3735
+ note?: boolean;
3736
+ googleSlides?: boolean;
2781
3737
  }
2782
3738
  /**
2783
3739
  * Options for opt-in `{badge:variant}` inline badges.
@@ -2796,6 +3752,113 @@ interface BadgeOptions {
2796
3752
  interface ResolvedBadgeOptions {
2797
3753
  enabled: boolean;
2798
3754
  }
3755
+ /**
3756
+ * Options for opt-in PHP Markdown Extra / mdBook-style definition lists.
3757
+ */
3758
+ interface DefinitionListOptions {
3759
+ /**
3760
+ * Enable the definition-list transform when an options object is supplied.
3761
+ *
3762
+ * @default true
3763
+ */
3764
+ enabled?: boolean;
3765
+ }
3766
+ /**
3767
+ * Resolved definition-list transform options.
3768
+ */
3769
+ interface ResolvedDefinitionListOptions {
3770
+ enabled: boolean;
3771
+ }
3772
+ /**
3773
+ * Options for the opt-in `<NotByAI />` authorship badge.
3774
+ */
3775
+ interface NotByAiOptions {
3776
+ /**
3777
+ * Enable the badge transform when an options object is supplied.
3778
+ *
3779
+ * @default true
3780
+ */
3781
+ enabled?: boolean;
3782
+ /**
3783
+ * Accessible label for the badge link.
3784
+ *
3785
+ * @default "Written by human, not by AI"
3786
+ */
3787
+ label?: string;
3788
+ /**
3789
+ * Destination URL. Unsafe values fall back to `https://notbyai.fyi`.
3790
+ *
3791
+ * @default "https://notbyai.fyi"
3792
+ */
3793
+ href?: string;
3794
+ }
3795
+ /**
3796
+ * Resolved NotByAI authorship-badge options.
3797
+ */
3798
+ interface ResolvedNotByAiOptions {
3799
+ enabled: boolean;
3800
+ label: string;
3801
+ href: string;
3802
+ }
3803
+ /**
3804
+ * Options for opt-in `{kbd:...}` inline keyboard keys.
3805
+ */
3806
+ interface KeyboardKeysOptions {
3807
+ /**
3808
+ * Enable the keyboard-key transform when an options object is supplied.
3809
+ *
3810
+ * @default true
3811
+ */
3812
+ enabled?: boolean;
3813
+ /**
3814
+ * Build-time aliases. Keys are matched case-insensitively and override
3815
+ * the built-in `cmd` / `ctrl` table.
3816
+ */
3817
+ aliases?: Record<string, string>;
3818
+ /**
3819
+ * Built-in alias labels. `"words"` emits `Command`; `"symbols"` emits `⌘`.
3820
+ *
3821
+ * @default "words"
3822
+ */
3823
+ style?: "words" | "symbols";
3824
+ }
3825
+ /**
3826
+ * Resolved inline keyboard-key transform options.
3827
+ */
3828
+ interface ResolvedKeyboardKeysOptions {
3829
+ enabled: boolean;
3830
+ aliases: Record<string, string>;
3831
+ style: "words" | "symbols";
3832
+ }
3833
+ /**
3834
+ * Options for opt-in abbreviation and glossary expansion.
3835
+ */
3836
+ interface AbbreviationsOptions {
3837
+ /**
3838
+ * Enable the transform when an options object is supplied.
3839
+ *
3840
+ * @default true
3841
+ */
3842
+ enabled?: boolean;
3843
+ /**
3844
+ * Central glossary. Keys are matched with Unicode word boundaries.
3845
+ */
3846
+ terms?: Record<string, string>;
3847
+ /**
3848
+ * Wrap only the first occurrence of each term.
3849
+ *
3850
+ * @default false
3851
+ */
3852
+ firstUseOnly?: boolean;
3853
+ }
3854
+ /**
3855
+ * Resolved abbreviation / glossary transform options.
3856
+ */
3857
+ interface ResolvedAbbreviationsOptions {
3858
+ enabled: boolean;
3859
+ terms: Record<string, string>;
3860
+ firstUseOnly: boolean;
3861
+ }
2799
3862
  /**
2800
3863
  * Options for opt-in `{link:...}` rich magic links.
2801
3864
  */
@@ -2904,6 +3967,112 @@ interface ResolvedImageOptions {
2904
3967
  enabled: boolean;
2905
3968
  lazy: boolean;
2906
3969
  }
3970
+ /**
3971
+ * Options for opt-in static image galleries.
3972
+ */
3973
+ interface ImageGalleryOptions {
3974
+ /**
3975
+ * Enable `::: gallery` blocks.
3976
+ *
3977
+ * @default true when the options object is supplied.
3978
+ */
3979
+ enabled?: boolean;
3980
+ /**
3981
+ * Add `loading="lazy"` to gallery images.
3982
+ *
3983
+ * @default follows `images.lazy`, or true when `images` is disabled.
3984
+ */
3985
+ lazy?: boolean;
3986
+ /**
3987
+ * Diagnostics for image items without alt text.
3988
+ *
3989
+ * @default "error"
3990
+ */
3991
+ missingAlt?: "error" | "warn" | "ignore";
3992
+ /**
3993
+ * Diagnostics for galleries without image items.
3994
+ *
3995
+ * @default "error"
3996
+ */
3997
+ empty?: "error" | "warn" | "ignore";
3998
+ }
3999
+ /**
4000
+ * Resolved image gallery transform options.
4001
+ */
4002
+ interface ResolvedImageGalleryOptions {
4003
+ enabled: boolean;
4004
+ lazy?: boolean;
4005
+ missingAlt: "error" | "warn" | "ignore";
4006
+ empty: "error" | "warn" | "ignore";
4007
+ }
4008
+ /**
4009
+ * Options for opt-in static timelines.
4010
+ */
4011
+ interface TimelineOptions {
4012
+ /**
4013
+ * Enable `::: timeline` blocks.
4014
+ *
4015
+ * @default true when the options object is supplied.
4016
+ */
4017
+ enabled?: boolean;
4018
+ /**
4019
+ * Render timelines as ordered lists unless a block overrides it.
4020
+ *
4021
+ * @default true
4022
+ */
4023
+ ordered?: boolean;
4024
+ /**
4025
+ * Diagnostics for malformed `YYYY`, `YYYY-MM`, or `YYYY-MM-DD` item dates.
4026
+ *
4027
+ * @default "error"
4028
+ */
4029
+ invalidDate?: "error" | "warn" | "ignore";
4030
+ /**
4031
+ * Diagnostics for unsupported item metadata.
4032
+ *
4033
+ * @default "error"
4034
+ */
4035
+ unknownMeta?: "error" | "warn" | "ignore";
4036
+ /**
4037
+ * Diagnostics for timeline blocks without items.
4038
+ *
4039
+ * @default "error"
4040
+ */
4041
+ empty?: "error" | "warn" | "ignore";
4042
+ }
4043
+ /**
4044
+ * Resolved timeline transform options.
4045
+ */
4046
+ interface ResolvedTimelineOptions {
4047
+ enabled: boolean;
4048
+ ordered: boolean;
4049
+ invalidDate: "error" | "warn" | "ignore";
4050
+ unknownMeta: "error" | "warn" | "ignore";
4051
+ empty: "error" | "warn" | "ignore";
4052
+ }
4053
+ /**
4054
+ * Options for opt-in static conditional blocks.
4055
+ */
4056
+ interface ConditionalBlockOptions {
4057
+ /**
4058
+ * Enable `::: if` / `::: else` blocks.
4059
+ *
4060
+ * @default true when the options object is supplied.
4061
+ */
4062
+ enabled?: boolean;
4063
+ /**
4064
+ * Build-time values available as `config.*` or bare identifiers. Page
4065
+ * frontmatter wins for bare identifiers; use `config.name` to force config.
4066
+ */
4067
+ values?: Record<string, unknown>;
4068
+ }
4069
+ /**
4070
+ * Resolved conditional-block transform options.
4071
+ */
4072
+ interface ResolvedConditionalBlockOptions {
4073
+ enabled: boolean;
4074
+ values: Record<string, unknown>;
4075
+ }
2907
4076
  /**
2908
4077
  * Options for opt-in page-bundle resources and image processing.
2909
4078
  */
@@ -3019,12 +4188,52 @@ interface MathOptions {
3019
4188
  * @default true
3020
4189
  */
3021
4190
  enabled?: boolean;
4191
+ /**
4192
+ * What to do with a `$…$` run KaTeX cannot parse.
4193
+ *
4194
+ * The `$…$` heuristics are good but not perfect, and a page *about* math
4195
+ * syntax is exactly the page that trips them. This decides whether such a
4196
+ * page ships readable prose, red error text, or no build at all.
4197
+ *
4198
+ * - `'literal'` puts the source back the way it was written, delimiters
4199
+ * included, and warns.
4200
+ * - `'error'` fails the build.
4201
+ * - `'render'` emits KaTeX's own red error markup, which is what the
4202
+ * feature did before this option existed.
4203
+ *
4204
+ * @default 'literal'
4205
+ */
4206
+ onError?: MathErrorPolicy;
4207
+ /**
4208
+ * Which KaTeX font formats to emit into the output directory.
4209
+ *
4210
+ * `.ttf` and `.woff` are three quarters of KaTeX's font bytes, and no
4211
+ * browser that can run the rest of the site needs them — `@font-face`
4212
+ * lists `woff2` first and stops at the first format it supports. Set
4213
+ * `'all'` for a target that genuinely needs the older formats.
4214
+ *
4215
+ * Either way the fonts are emitted only when a page actually rendered
4216
+ * math.
4217
+ *
4218
+ * @default 'woff2'
4219
+ */
4220
+ fontFormats?: KatexFontFormats;
3022
4221
  }
4222
+ /**
4223
+ * What to do with a `$…$` run KaTeX cannot parse.
4224
+ */
4225
+ type MathErrorPolicy = "literal" | "error" | "render";
4226
+ /**
4227
+ * Which of KaTeX's font formats to emit.
4228
+ */
4229
+ type KatexFontFormats = "woff2" | "all";
3023
4230
  /**
3024
4231
  * Resolved math transform options.
3025
4232
  */
3026
4233
  interface ResolvedMathOptions {
3027
4234
  enabled: boolean;
4235
+ onError: MathErrorPolicy;
4236
+ fontFormats: KatexFontFormats;
3028
4237
  }
3029
4238
  /**
3030
4239
  * Options for markdown-it-attrs style attribute blocks.
@@ -3123,6 +4332,48 @@ interface ResolvedIncludeOptions {
3123
4332
  enabled: boolean;
3124
4333
  rootDir?: string;
3125
4334
  }
4335
+ /**
4336
+ * Options for parameterized Markdown partials with `<!-- @partial: PATH k="v" -->`.
4337
+ *
4338
+ * Bare names resolve under `root` (`_partials` by default). Relative `./` and
4339
+ * `../` paths resolve from the current file. `@/` and leading `/` resolve from
4340
+ * `rootDir`. After canonicalize, paths outside `rootDir` are rejected.
4341
+ */
4342
+ interface PartialsOptions {
4343
+ /**
4344
+ * Enable the transform when an options object is supplied.
4345
+ *
4346
+ * @default true
4347
+ */
4348
+ enabled?: boolean;
4349
+ /**
4350
+ * Directory used to resolve `@/` and absolute partial paths.
4351
+ *
4352
+ * @default undefined
4353
+ */
4354
+ rootDir?: string;
4355
+ /**
4356
+ * Directory used for bare names such as `install.md`.
4357
+ *
4358
+ * @default "_partials"
4359
+ */
4360
+ root?: string;
4361
+ /**
4362
+ * Missing `{{ name }}` substitutions stay literal, or report a diagnostic.
4363
+ *
4364
+ * @default "literal"
4365
+ */
4366
+ missing?: "literal" | "error";
4367
+ }
4368
+ /**
4369
+ * Resolved parameterized-partial transform options.
4370
+ */
4371
+ interface ResolvedPartialsOptions {
4372
+ enabled: boolean;
4373
+ rootDir?: string;
4374
+ root: string;
4375
+ missing: "literal" | "error";
4376
+ }
3126
4377
  /**
3127
4378
  * Options for opt-in `::: card` / `::: link-card` / `::: card-grid` blocks.
3128
4379
  */
@@ -3137,24 +4388,41 @@ interface CardOptions {
3137
4388
  /**
3138
4389
  * Resolved card transform options.
3139
4390
  */
3140
- interface ResolvedCardOptions {
4391
+ interface ResolvedCardOptions {
4392
+ enabled: boolean;
4393
+ }
4394
+ /**
4395
+ * Options for opt-in `::: steps` ordered lists.
4396
+ */
4397
+ interface StepsOptions {
4398
+ /**
4399
+ * Enable the steps transform when an options object is supplied.
4400
+ *
4401
+ * @default true
4402
+ */
4403
+ enabled?: boolean;
4404
+ }
4405
+ /**
4406
+ * Resolved step-list transform options.
4407
+ */
4408
+ interface ResolvedStepsOptions {
3141
4409
  enabled: boolean;
3142
4410
  }
3143
4411
  /**
3144
- * Options for opt-in `::: steps` ordered lists.
4412
+ * Options for opt-in `::: code-group` fence groups.
3145
4413
  */
3146
- interface StepsOptions {
4414
+ interface CodeGroupOptions {
3147
4415
  /**
3148
- * Enable the steps transform when an options object is supplied.
4416
+ * Enable the code-group transform when an options object is supplied.
3149
4417
  *
3150
4418
  * @default true
3151
4419
  */
3152
4420
  enabled?: boolean;
3153
4421
  }
3154
4422
  /**
3155
- * Resolved step-list transform options.
4423
+ * Resolved code-group transform options.
3156
4424
  */
3157
- interface ResolvedStepsOptions {
4425
+ interface ResolvedCodeGroupOptions {
3158
4426
  enabled: boolean;
3159
4427
  }
3160
4428
  /**
@@ -3206,6 +4474,39 @@ interface ResolvedFileTreeOptions {
3206
4474
  iconFile?: string;
3207
4475
  iconFiles?: Record<string, string>;
3208
4476
  }
4477
+ /**
4478
+ * Options for opt-in `csv-table` / `json-table` fences.
4479
+ */
4480
+ interface DataTableOptions {
4481
+ /**
4482
+ * Enable the data-table transform when an options object is supplied.
4483
+ *
4484
+ * @default true
4485
+ */
4486
+ enabled?: boolean;
4487
+ /**
4488
+ * Directory used to resolve `@/` and absolute import paths.
4489
+ *
4490
+ * When omitted, imports resolve from the Vite project root.
4491
+ *
4492
+ * @default undefined
4493
+ */
4494
+ rootDir?: string;
4495
+ /**
4496
+ * What to do when an imported CSV/JSON file is missing.
4497
+ *
4498
+ * @default "error"
4499
+ */
4500
+ missing?: "error" | "warn";
4501
+ }
4502
+ /**
4503
+ * Resolved data-table transform options.
4504
+ */
4505
+ interface ResolvedDataTableOptions {
4506
+ enabled: boolean;
4507
+ rootDir?: string;
4508
+ missing: "error" | "warn";
4509
+ }
3209
4510
  /**
3210
4511
  * Options for sanitizing rendered HTML.
3211
4512
  *
@@ -3279,11 +4580,51 @@ interface EditThisPageOptions {
3279
4580
  /**
3280
4581
  * Source root inside the repository, used before the page path.
3281
4582
  *
3282
- * Set this when `srcDir` is nested in a package or docs workspace.
4583
+ * Set this when `srcDir` is nested in a package or docs workspace: the
4584
+ * value says where `srcDir` lives inside the repository, and the page
4585
+ * path is measured from `srcDir` rather than from the directory the build
4586
+ * runs in.
4587
+ *
4588
+ * @example
4589
+ * ```ts
4590
+ * // repository holds packages/site/docs, srcDir is "docs"
4591
+ * rootDir: 'packages/site/docs'
4592
+ * // -> <repoUrl>/edit/<branch>/packages/site/docs/guide/nested.md
4593
+ * ```
3283
4594
  *
3284
4595
  * @default undefined
3285
4596
  */
3286
4597
  rootDir?: string;
4598
+ /**
4599
+ * Forge whose edit-URL shape to use.
4600
+ *
4601
+ * Every forge exposes a web editor at a different path — GitLab puts a
4602
+ * `/-/` scope separator in front of it, Bitbucket edits through its source
4603
+ * view, Gitea and Forgejo use `_edit` — so a site on the wrong shape links
4604
+ * to a 404.
4605
+ *
4606
+ * Inferred from the `repoUrl` host when omitted (`gitlab.com`,
4607
+ * `bitbucket.org`, `codeberg.org`, `gitea.com`), falling back to
4608
+ * `'github'`. Set it explicitly for a self-hosted instance, whose hostname
4609
+ * says nothing about the software behind it.
4610
+ *
4611
+ * @default inferred from `repoUrl`
4612
+ */
4613
+ provider?: EditThisPageProvider;
4614
+ /**
4615
+ * Edit-URL template, for a forge or an instance the shapes above miss.
4616
+ *
4617
+ * Understands `{repoUrl}`, `{branch}`, and `{path}`; other braces are
4618
+ * left as written. Takes precedence over `provider`.
4619
+ *
4620
+ * @example
4621
+ * ```ts
4622
+ * urlPattern: '{repoUrl}/ui/edit?ref={branch}&file={path}'
4623
+ * ```
4624
+ *
4625
+ * @default the pattern for the resolved `provider`
4626
+ */
4627
+ urlPattern?: string;
3287
4628
  /**
3288
4629
  * Link text rendered in the page footer.
3289
4630
  *
@@ -3293,6 +4634,12 @@ interface EditThisPageOptions {
3293
4634
  */
3294
4635
  label?: string;
3295
4636
  }
4637
+ /**
4638
+ * Forges with a known edit-URL shape.
4639
+ *
4640
+ * `'gitea'` covers Forgejo, which kept the same path.
4641
+ */
4642
+ type EditThisPageProvider = "github" | "gitlab" | "bitbucket" | "gitea";
3296
4643
  /**
3297
4644
  * Resolved edit-link transform options.
3298
4645
  */
@@ -3301,6 +4648,8 @@ interface ResolvedEditThisPageOptions {
3301
4648
  repoUrl?: string;
3302
4649
  branch: string;
3303
4650
  rootDir?: string;
4651
+ provider?: EditThisPageProvider;
4652
+ urlPattern?: string;
3304
4653
  label: string;
3305
4654
  }
3306
4655
  /**
@@ -3526,11 +4875,67 @@ interface ResolvedCodeAnnotationsOptions {
3526
4875
  metaKey: string;
3527
4876
  defaultLineNumbers: boolean;
3528
4877
  }
4878
+ /**
4879
+ * OG image rendering backend.
4880
+ */
4881
+ type OgImageRenderer = "chromium" | "satori";
4882
+ /**
4883
+ * Font weight values supported by Satori.
4884
+ */
4885
+ type OgImageSatoriFontWeight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;
4886
+ /**
4887
+ * Font file loaded by the Satori renderer.
4888
+ */
4889
+ interface OgImageSatoriFont {
4890
+ /**
4891
+ * Absolute path, or a path relative to the project root.
4892
+ */
4893
+ path: string;
4894
+ /**
4895
+ * Font family name used by template CSS.
4896
+ */
4897
+ name?: string;
4898
+ /**
4899
+ * Font weight.
4900
+ * @default 400
4901
+ */
4902
+ weight?: OgImageSatoriFontWeight;
4903
+ /**
4904
+ * Font style.
4905
+ * @default "normal"
4906
+ */
4907
+ style?: "normal" | "italic";
4908
+ }
4909
+ /**
4910
+ * Satori renderer options.
4911
+ */
4912
+ interface OgImageSatoriOptions {
4913
+ /**
4914
+ * Font files passed to Satori.
4915
+ *
4916
+ * Satori cannot render text without at least one font. When omitted,
4917
+ * Ox Content tries a small set of system font paths unless
4918
+ * `systemFontFallback` is disabled.
4919
+ */
4920
+ fonts?: OgImageSatoriFont[];
4921
+ /**
4922
+ * Try known OS font paths when `fonts` is empty.
4923
+ * @default true
4924
+ */
4925
+ systemFontFallback?: boolean;
4926
+ }
3529
4927
  /**
3530
4928
  * OG image generation options.
3531
- * Uses Chromium-based rendering with customizable templates.
4929
+ * Uses Chromium or Satori rendering with customizable templates.
3532
4930
  */
3533
4931
  interface OgImageOptions {
4932
+ /**
4933
+ * Rendering backend.
4934
+ * - `"chromium"`: full browser rendering, best template compatibility
4935
+ * - `"satori"`: fast HTML-to-SVG-to-PNG rendering, limited CSS subset
4936
+ * @default "chromium"
4937
+ */
4938
+ renderer?: OgImageRenderer;
3534
4939
  /**
3535
4940
  * Path to a custom template file (.ts, .vue, .svelte, .tsx/.jsx).
3536
4941
  * - `.ts`: default-export a function `(props) => string`
@@ -3568,17 +4973,26 @@ interface OgImageOptions {
3568
4973
  * @default 1
3569
4974
  */
3570
4975
  concurrency?: number;
4976
+ /**
4977
+ * Options for the Satori renderer.
4978
+ */
4979
+ satori?: OgImageSatoriOptions;
3571
4980
  }
3572
4981
  /**
3573
4982
  * Resolved OG image options with all defaults applied.
3574
4983
  */
3575
4984
  interface ResolvedOgImageOptions$1 {
4985
+ renderer: OgImageRenderer;
3576
4986
  template?: string;
3577
4987
  vuePlugin: "vitejs" | "vizejs";
3578
4988
  width: number;
3579
4989
  height: number;
3580
4990
  cache: boolean;
3581
4991
  concurrency: number;
4992
+ satori: {
4993
+ fonts: OgImageSatoriFont[];
4994
+ systemFontFallback: boolean;
4995
+ };
3582
4996
  }
3583
4997
  /**
3584
4998
  * Custom AST transformer.
@@ -3679,6 +5093,18 @@ interface TransformResult {
3679
5093
  * Unique JSX component names in document order (empty when none).
3680
5094
  */
3681
5095
  components: string[];
5096
+ /**
5097
+ * Labeled cross-reference targets collected during the Markdown transform.
5098
+ */
5099
+ crossReferences: CrossReferenceEntry[];
5100
+ /**
5101
+ * Citation references collected during the Markdown transform.
5102
+ */
5103
+ citations: CitationReference[];
5104
+ /**
5105
+ * Bibliography entries used by this document.
5106
+ */
5107
+ bibliography: BibliographyEntry[];
3682
5108
  }
3683
5109
  /**
3684
5110
  * Table of contents entry.
@@ -3783,6 +5209,15 @@ interface DocsOptions {
3783
5209
  * @default undefined
3784
5210
  */
3785
5211
  entryPoints?: DocsEntryPoint[];
5212
+ /**
5213
+ * Local OpenAPI 3.0/3.1 JSON or YAML files to render as static REST API docs.
5214
+ *
5215
+ * Generated pages are written under `out/openapi/<spec>/` and use the same
5216
+ * Markdown, stale-file cleanup, SSG, and search pipeline as source docs.
5217
+ *
5218
+ * @default false
5219
+ */
5220
+ openapi?: OpenApiDocsSource | OpenApiDocsSource[] | OpenApiDocsOptions | false;
3786
5221
  /**
3787
5222
  * Output format.
3788
5223
  *
@@ -3970,6 +5405,7 @@ interface ResolvedDocsOptions {
3970
5405
  include: string[];
3971
5406
  exclude: string[];
3972
5407
  entryPoints?: ResolvedDocsEntryPoint[];
5408
+ openapi: ResolvedOpenApiDocsOptions | false;
3973
5409
  format: "markdown" | "json" | "html";
3974
5410
  private: boolean;
3975
5411
  internal: boolean;
@@ -3998,6 +5434,48 @@ interface ResolvedDocsOptions {
3998
5434
  singleEntryRoot: "preserve" | "flatten";
3999
5435
  generateNav: boolean;
4000
5436
  }
5437
+ /** OpenAPI docs shorthand accepted by `docs.openapi`. */
5438
+ type OpenApiDocsSource = string | OpenApiDocsInput;
5439
+ /** One local OpenAPI file consumed by generated REST API docs. */
5440
+ interface OpenApiDocsInput {
5441
+ /** JSON or YAML file path, resolved from the Vite project root. */
5442
+ path: string;
5443
+ /** Optional display name. Defaults to `info.title` or the file name. */
5444
+ name?: string;
5445
+ /** Fail on unresolved or remote `$ref` values. Defaults to `true`. */
5446
+ failOnUnresolvedRefs?: boolean;
5447
+ }
5448
+ /** Object form for configuring generated OpenAPI docs. */
5449
+ interface OpenApiDocsOptions {
5450
+ /** Local OpenAPI files to render. */
5451
+ src?: OpenApiDocsSource | OpenApiDocsSource[];
5452
+ /** Route prefix used by generated OpenAPI nav metadata. Defaults to `basePath` or `/api`. */
5453
+ basePath?: string;
5454
+ /** Default unresolved `$ref` policy for sources. Defaults to `true`. */
5455
+ failOnUnresolvedRefs?: boolean;
5456
+ }
5457
+ /** Resolved local OpenAPI file input. */
5458
+ interface ResolvedOpenApiDocsInput {
5459
+ path: string;
5460
+ name?: string;
5461
+ failOnUnresolvedRefs: boolean;
5462
+ }
5463
+ /** Resolved generated OpenAPI docs options. */
5464
+ interface ResolvedOpenApiDocsOptions {
5465
+ src: ResolvedOpenApiDocsInput[];
5466
+ basePath?: string;
5467
+ }
5468
+ /** Navigation item emitted for generated docs sidebars. */
5469
+ interface DocsNavigationItem {
5470
+ title: string;
5471
+ path: string;
5472
+ children?: DocsNavigationItem[];
5473
+ }
5474
+ /** Generated OpenAPI Markdown pages and sidebar metadata. */
5475
+ interface GeneratedOpenApiDocs {
5476
+ pages: Record<string, string>;
5477
+ nav: DocsNavigationItem[];
5478
+ }
4001
5479
  /**
4002
5480
  * A single documentation entry extracted from source.
4003
5481
  *
@@ -4280,6 +5758,16 @@ interface SearchOptions {
4280
5758
  * @default true
4281
5759
  */
4282
5760
  prefix?: boolean;
5761
+ /**
5762
+ * Enable fuzzy typo-tolerant matching.
5763
+ *
5764
+ * Fuzzy matching is off by default so large static indexes keep the fastest
5765
+ * exact/prefix path. When enabled, local BM25 also considers near matches
5766
+ * for tokens with at least three characters.
5767
+ *
5768
+ * @default false
5769
+ */
5770
+ fuzzy?: boolean;
4283
5771
  /**
4284
5772
  * Placeholder text for the search input.
4285
5773
  *
@@ -4348,6 +5836,7 @@ interface ResolvedSearchOptions {
4348
5836
  enabled: boolean;
4349
5837
  limit: number;
4350
5838
  prefix: boolean;
5839
+ fuzzy: boolean;
4351
5840
  placeholder: string;
4352
5841
  hotkey: string;
4353
5842
  provider?: "local" | "hosted";
@@ -4501,6 +5990,33 @@ interface ResolvedI18nOptions {
4501
5990
  check: boolean;
4502
5991
  functionNames: string[];
4503
5992
  }
5993
+ /**
5994
+ * One host-owned page for composable SSG outputs (`ssg: false`).
5995
+ *
5996
+ * The host renders HTML. Ox Content plans and emits resources, Markdown
5997
+ * companions, feeds, and sitemap metadata from these fields.
5998
+ */
5999
+ interface SsgOutputPageInput {
6000
+ /** Source file used for git lastmod and companion identity. */
6001
+ inputPath: string;
6002
+ /** Published URL path (`guide` or `/`). */
6003
+ urlPath: string;
6004
+ /** Filesystem path of the host-rendered HTML page. */
6005
+ outputPath?: string;
6006
+ /** Host-rendered HTML. Required for resource fingerprinting. */
6007
+ html?: string;
6008
+ /** Already-read Markdown source bytes for companions. */
6009
+ source?: string;
6010
+ title?: string;
6011
+ description?: string;
6012
+ /** Absolute page URL. When omitted, `siteUrl` + `base` + `urlPath` is used. */
6013
+ loc?: string;
6014
+ /** Git commit time in milliseconds, or a host-supplied timestamp. */
6015
+ lastUpdated?: number;
6016
+ draft?: boolean;
6017
+ unlisted?: boolean;
6018
+ frontmatter?: Record<string, unknown>;
6019
+ }
4504
6020
  //#endregion
4505
6021
  //#region src/virtual.d.ts
4506
6022
  declare module "virtual:ox-content/collections" {
@@ -4536,23 +6052,52 @@ declare module "virtual:ox-content/collections" {
4536
6052
  export default api;
4537
6053
  }
4538
6054
  //#endregion
6055
+ //#region src/builtin-embed-options.d.ts
6056
+ declare function resolveBuiltinEmbedOptions(options: OxContentOptions["embeds"]): ResolvedOptions["embeds"];
6057
+ //#endregion
6058
+ //#region src/resolve-options.d.ts
6059
+ declare function resolveMathOptions(options: OxContentOptions["math"]): ResolvedOptions["math"];
6060
+ declare function resolveBadgeOptions(options: OxContentOptions["badges"]): ResolvedOptions["badges"];
6061
+ declare function resolveKeyboardKeysOptions(options: OxContentOptions["keyboardKeys"]): NonNullable<ResolvedOptions["keyboardKeys"]>;
6062
+ //#endregion
6063
+ //#region src/abbreviations-options.d.ts
6064
+ declare function resolveAbbreviationsOptions(options: OxContentOptions["abbreviations"]): ResolvedAbbreviationsOptions;
6065
+ //#endregion
6066
+ //#region src/not-by-ai-options.d.ts
6067
+ declare function resolveNotByAiOptions(options: OxContentOptions["notByAi"]): ResolvedOptions["notByAi"];
6068
+ //#endregion
4539
6069
  //#region src/card-options.d.ts
4540
6070
  declare function resolveCardOptions(options: OxContentOptions["cards"]): ResolvedOptions["cards"];
4541
6071
  //#endregion
4542
6072
  //#region src/include-options.d.ts
4543
6073
  declare function resolveIncludeOptions(options: OxContentOptions["includes"]): ResolvedOptions["includes"];
4544
6074
  //#endregion
6075
+ //#region src/partials-options.d.ts
6076
+ declare function resolvePartialsOptions(options: OxContentOptions["partials"]): NonNullable<ResolvedOptions["partials"]>;
6077
+ //#endregion
4545
6078
  //#region src/step-options.d.ts
4546
6079
  declare function resolveStepsOptions(options: OxContentOptions["steps"]): ResolvedOptions["steps"];
4547
6080
  //#endregion
6081
+ //#region src/code-group-options.d.ts
6082
+ declare function resolveCodeGroupOptions(options: OxContentOptions["codeGroups"]): ResolvedCodeGroupOptions;
6083
+ //#endregion
4548
6084
  //#region src/file-tree-options.d.ts
4549
6085
  declare function resolveFileTreeOptions(options: OxContentOptions["fileTree"]): ResolvedOptions["fileTree"];
4550
6086
  //#endregion
6087
+ //#region src/data-table-options.d.ts
6088
+ declare function resolveDataTableOptions(options: OxContentOptions["dataTables"]): ResolvedOptions["dataTables"];
6089
+ //#endregion
6090
+ //#region src/image-gallery-options.d.ts
6091
+ declare function resolveImageGalleryOptions(options: OxContentOptions["imageGalleries"]): ResolvedImageGalleryOptions;
6092
+ //#endregion
6093
+ //#region src/timeline-options.d.ts
6094
+ declare function resolveTimelineOptions(options: OxContentOptions["timelines"]): ResolvedTimelineOptions;
6095
+ //#endregion
4551
6096
  //#region src/heading-permalinks-options.d.ts
4552
6097
  declare function resolveHeadingPermalinksOptions(options: OxContentOptions["headingPermalinks"]): ResolvedOptions["headingPermalinks"];
4553
6098
  //#endregion
4554
6099
  //#region src/typed-hover.d.ts
4555
- declare function resolveTypedHoverOptions(options: OxContentOptions["typedHover"]): ResolvedOptions["typedHover"];
6100
+ declare function resolveTypedHoverOptions(options: OxContentOptions["typedHover"]): ResolvedTypedHoverOptions;
4556
6101
  //#endregion
4557
6102
  //#region src/environment.d.ts
4558
6103
  /**
@@ -4794,9 +6339,31 @@ interface SsgTransformOptions {
4794
6339
  baseUrl?: string;
4795
6340
  /** Source file path for relative link resolution */
4796
6341
  sourcePath?: string;
6342
+ /** Absolute source root, used to place pages inside the repository */
6343
+ srcDir?: string;
4797
6344
  }
4798
6345
  declare function transformMarkdown(source: string, filePath: string, options: ResolvedOptions, ssgOptions?: SsgTransformOptions): Promise<TransformResult>;
4799
6346
  //#endregion
6347
+ //#region src/render-markdown.d.ts
6348
+ /**
6349
+ * Processor that resolves `OxContentOptions` once and renders many documents.
6350
+ */
6351
+ interface MarkdownProcessor {
6352
+ render(source: string, filePath: string): Promise<TransformResult>;
6353
+ }
6354
+ /**
6355
+ * Resolves public options once so custom `ssg: false` hosts can reuse the pipeline.
6356
+ */
6357
+ declare function createMarkdownProcessor(options?: OxContentOptions): MarkdownProcessor;
6358
+ /**
6359
+ * Run the Vite plugin Markdown/MDX pipeline from public `OxContentOptions`.
6360
+ *
6361
+ * Returns structured `TransformResult` fields (`html`, `frontmatter`, `toc`,
6362
+ * MDX metadata) so consumers do not need to cast a Vite hook or parse
6363
+ * generated module source. `.md` / `.mdx` inference matches `oxContent()`.
6364
+ */
6365
+ declare function renderMarkdown(source: string, filePath: string, options?: OxContentOptions): Promise<TransformResult>;
6366
+ //#endregion
4800
6367
  //#region src/markdown.d.ts
4801
6368
  declare const DEFAULT_MARKDOWN_EXTENSIONS: readonly [".md", ".markdown", ".mdx"];
4802
6369
  declare function normalizeMarkdownExtensions(extensions?: readonly string[]): string[];
@@ -4920,10 +6487,11 @@ declare function renderIslandComponentImports(usedComponents: readonly string[],
4920
6487
  * Optional adapter-side island SSR.
4921
6488
  *
4922
6489
  * Framework plugins may supply `renderIsland` to replace island inner HTML at
4923
- * transform time. This helper stays framework-neutral and does not import a
4924
- * framework SSR runtime.
6490
+ * transform time. The hook receives the original slot HTML so adapters can pass
6491
+ * children into their SSR runtime. This helper stays framework-neutral and does
6492
+ * not import a framework SSR runtime.
4925
6493
  */
4926
- type RenderIslandFn = (name: string, props: Record<string, unknown>, filePath: string) => string | Promise<string>;
6494
+ type RenderIslandFn = (name: string, props: Record<string, unknown>, filePath: string, slotHtml?: string) => string | Promise<string>;
4927
6495
  declare function applyIslandSsrHtml(html: string, renderIsland: RenderIslandFn, filePath: string, names?: Iterable<string>): Promise<string>;
4928
6496
  //#endregion
4929
6497
  //#region src/resolve-image-options.d.ts
@@ -5235,10 +6803,14 @@ declare function extractDocs(srcDirs: string[], options: ResolvedDocsOptions): P
5235
6803
  * Generates Markdown documentation from extracted docs.
5236
6804
  */
5237
6805
  declare function generateMarkdown(docs: ExtractedDocs[], options: ResolvedDocsOptions): Record<string, string>;
6806
+ /**
6807
+ * Generates Markdown documentation from local OpenAPI 3.0/3.1 files.
6808
+ */
6809
+ declare function generateOpenApiDocs(options: ResolvedDocsOptions, root?: string): GeneratedOpenApiDocs;
5238
6810
  /**
5239
6811
  * Writes generated documentation to the output directory.
5240
6812
  */
5241
- declare function writeDocs(docs: Record<string, string>, outDir: string, extractedDocs?: ExtractedDocs[], options?: ResolvedDocsOptions): Promise<void>;
6813
+ declare function writeDocs(docs: Record<string, string>, outDir: string, extractedDocs?: ExtractedDocs[], options?: ResolvedDocsOptions, extraNav?: DocsNavigationItem[]): Promise<void>;
5242
6814
  /**
5243
6815
  * Resolves docs options with defaults.
5244
6816
  */
@@ -5643,6 +7215,26 @@ declare function resolveHeadValidation(value: HeadValidationMode | undefined): f
5643
7215
  declare function resolveNotFoundOptions(value: boolean | NotFoundOptions | undefined): ResolvedNotFoundOptions;
5644
7216
  //#endregion
5645
7217
  //#region src/site-maps.d.ts
7218
+ /** One page considered for crawl manifests. */
7219
+ interface SiteMapPageInput {
7220
+ loc: string;
7221
+ title: string;
7222
+ description?: string;
7223
+ /** Source-file git commit time in milliseconds. Omitted when Git has no history. */
7224
+ lastUpdated?: number;
7225
+ draft?: boolean;
7226
+ unlisted?: boolean;
7227
+ }
7228
+ /** Inputs for writing crawl manifests next to generated HTML. */
7229
+ interface WriteSiteMapFilesInput {
7230
+ outDir: string;
7231
+ siteUrl?: string;
7232
+ base: string;
7233
+ siteName?: string;
7234
+ siteDescription?: string;
7235
+ options?: ResolvedSiteMapsOptions;
7236
+ pages: readonly SiteMapPageInput[];
7237
+ }
5646
7238
  /**
5647
7239
  * Resolves `siteMaps` with defaults.
5648
7240
  *
@@ -5650,8 +7242,29 @@ declare function resolveNotFoundOptions(value: boolean | NotFoundOptions | undef
5650
7242
  * enables the feature and overrides only the fields the site set.
5651
7243
  */
5652
7244
  declare function resolveSiteMapsOptions(value: boolean | SiteMapsOptions | undefined): ResolvedSiteMapsOptions;
7245
+ /** Writes enabled crawl manifests into `outDir`. */
7246
+ declare function writeSiteMapFiles(input: WriteSiteMapFilesInput): Promise<{
7247
+ files: string[];
7248
+ warning?: string;
7249
+ }>;
5653
7250
  //#endregion
5654
7251
  //#region src/markdown-source.d.ts
7252
+ /** One page that may receive a source companion. */
7253
+ interface MarkdownSourcePageInput {
7254
+ inputPath: string;
7255
+ /** Already-read source bytes. Omitted pages are skipped. */
7256
+ source?: string;
7257
+ urlPath: string;
7258
+ frontmatter: Record<string, unknown>;
7259
+ }
7260
+ /** Inputs for writing companions next to generated HTML. */
7261
+ interface WriteMarkdownSourceFilesInput {
7262
+ outDir: string;
7263
+ base: string;
7264
+ options?: ResolvedMarkdownSourceOptions | null;
7265
+ publishState?: ResolvedPublishStateOptions;
7266
+ pages: readonly MarkdownSourcePageInput[];
7267
+ }
5655
7268
  /**
5656
7269
  * Resolves `ssg.markdownSource` with defaults.
5657
7270
  *
@@ -5695,19 +7308,63 @@ declare function resolveCascadeOptions(value: boolean | CascadeOptions | undefin
5695
7308
  *
5696
7309
  * `false` / omitted stays off. `true` or `{}` enables empty defaults.
5697
7310
  * A path map (`{ "/old": "/new" }`) enables the feature with that map.
5698
- * `{ map, netlify, headers, json, allowExternal }` overrides only set fields.
7311
+ * `{ map, provider, headers, json, html, allowExternal }` overrides only set fields.
7312
+ * Pass `env` to inject CI detection without reading the real `process.env`.
5699
7313
  */
5700
- declare function resolveRedirectsOptions(value: boolean | RedirectsOptions | Record<string, string> | undefined): ResolvedRedirectsOptions;
7314
+ declare function resolveRedirectsOptions(value: boolean | RedirectsOptions | Record<string, string> | undefined, env?: NodeJS.ProcessEnv): ResolvedRedirectsOptions;
5701
7315
  //#endregion
5702
7316
  //#region src/feeds.d.ts
7317
+ /** Inputs for rendering feed bodies. */
7318
+ interface FeedsRenderInput {
7319
+ options?: ResolvedFeedsOptions | null;
7320
+ siteUrl?: string;
7321
+ siteName?: string;
7322
+ siteDescription?: string;
7323
+ base?: string;
7324
+ collections?: Record<string, readonly FeedItemInput[]>;
7325
+ collectionNames?: readonly string[];
7326
+ items?: readonly FeedItemInput[];
7327
+ publishState?: ResolvedPublishStateOptions;
7328
+ }
7329
+ /** Rendered feed bodies, or a skip warning. */
7330
+ interface FeedsRenderResult {
7331
+ rssXml?: string;
7332
+ atomXml?: string;
7333
+ jsonFeed?: string;
7334
+ warning?: string;
7335
+ }
7336
+ interface RenderedFeedFile {
7337
+ path: string;
7338
+ contentType: string;
7339
+ content: string;
7340
+ }
7341
+ interface RenderFeedFilesInput extends FeedsRenderInput {
7342
+ base: string;
7343
+ outDir?: string;
7344
+ }
7345
+ interface RenderFeedFilesResult {
7346
+ files: RenderedFeedFile[];
7347
+ warning?: string;
7348
+ }
7349
+ interface WriteFeedFilesInput extends RenderFeedFilesInput {
7350
+ outDir: string;
7351
+ }
5703
7352
  /**
5704
7353
  * Resolves `feeds` with defaults.
5705
7354
  *
5706
7355
  * `false` / omitted stays off. `true` enables all three formats with
5707
7356
  * collection `content` (or the first configured collection) and limit 20.
5708
- * An object enables the feature and overrides only the fields the site set.
7357
+ * A single object is one default feed. A named record or array writes
7358
+ * multiple feeds.
5709
7359
  */
5710
7360
  declare function resolveFeedsOptions(value: boolean | FeedsOptions | undefined): ResolvedFeedsOptions;
7361
+ /** Builds RSS / Atom / JSON Feed bodies without writing files. */
7362
+ declare function generateFeeds(input: FeedsRenderInput): FeedsRenderResult;
7363
+ declare function renderFeedFiles(input: RenderFeedFilesInput): Promise<RenderFeedFilesResult>;
7364
+ declare function writeFeedFiles(input: WriteFeedFilesInput): Promise<{
7365
+ files: string[];
7366
+ warning?: string;
7367
+ }>;
5711
7368
  //#endregion
5712
7369
  //#region src/blog-options.d.ts
5713
7370
  declare function resolveBlogOptions(value: boolean | BlogOptions | undefined): ResolvedBlogOptions;
@@ -5731,6 +7388,10 @@ declare class BlogFeedError extends Error {
5731
7388
  */
5732
7389
  declare function readingTimeMinutes(markdown: string): number;
5733
7390
  //#endregion
7391
+ //#region src/budoux.d.ts
7392
+ declare function resolveBudouxOptions(options: OxContentOptions["budoux"]): ResolvedBudouxOptions;
7393
+ declare function transformBudouxHtml(html: string, options: ResolvedBudouxOptions | undefined): Promise<string>;
7394
+ //#endregion
5734
7395
  //#region src/pwa.d.ts
5735
7396
  /**
5736
7397
  * Resolves `pwa` with defaults.
@@ -5798,7 +7459,7 @@ declare function resolveSearchOptions(options: SearchOptions | boolean | undefin
5798
7459
  * then drops matching documents and rebuilds the BM25 index so omitted
5799
7460
  * pages (such as the opt-in 404 source) are not searchable.
5800
7461
  */
5801
- declare function buildSearchIndex(srcDir: string, base: string, extensions?: readonly string[], publishState?: ResolvedPublishStateOptions, excludeDocumentIds?: readonly string[], mdx?: boolean): Promise<string>;
7462
+ declare function buildSearchIndex(srcDir: string, base: string, extensions?: readonly string[], publishState?: ResolvedPublishStateOptions, excludeDocumentIds?: readonly string[], mdx?: boolean, conditionalBlocks?: ResolvedConditionalBlockOptions, citations?: ResolvedCitationsOptions): Promise<string>;
5802
7463
  /**
5803
7464
  * Writes the search index to a file.
5804
7465
  */
@@ -5943,7 +7604,7 @@ declare function generateHydrationScript(components: string[]): string;
5943
7604
  //#endregion
5944
7605
  //#region src/og-image/types.d.ts
5945
7606
  /**
5946
- * Type definitions for Chromium-based OG image generation.
7607
+ * Type definitions for OG image generation.
5947
7608
  */
5948
7609
  /**
5949
7610
  * Props passed to OG image template functions.
@@ -5966,10 +7627,66 @@ interface OgImageTemplateProps {
5966
7627
  * Template function that receives page metadata and returns an HTML string.
5967
7628
  */
5968
7629
  type OgImageTemplateFn = (props: OgImageTemplateProps) => string | Promise<string>;
7630
+ /**
7631
+ * OG image rendering backend.
7632
+ */
7633
+ type OgImageRenderer$1 = "chromium" | "satori";
7634
+ /**
7635
+ * Font weight values supported by Satori.
7636
+ */
7637
+ type OgImageSatoriFontWeight$1 = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;
7638
+ /**
7639
+ * Font file loaded by the Satori renderer.
7640
+ */
7641
+ interface OgImageSatoriFont$1 {
7642
+ /**
7643
+ * Absolute path, or a path relative to the project root.
7644
+ */
7645
+ path: string;
7646
+ /**
7647
+ * Font family name used by template CSS.
7648
+ */
7649
+ name?: string;
7650
+ /**
7651
+ * Font weight.
7652
+ * @default 400
7653
+ */
7654
+ weight?: OgImageSatoriFontWeight$1;
7655
+ /**
7656
+ * Font style.
7657
+ * @default "normal"
7658
+ */
7659
+ style?: "normal" | "italic";
7660
+ }
7661
+ /**
7662
+ * Satori renderer options.
7663
+ */
7664
+ interface OgImageSatoriOptions$1 {
7665
+ /**
7666
+ * Font files passed to Satori.
7667
+ *
7668
+ * Satori cannot render text without at least one font. When omitted,
7669
+ * Ox Content tries a small set of system font paths unless
7670
+ * `systemFontFallback` is disabled.
7671
+ */
7672
+ fonts?: OgImageSatoriFont$1[];
7673
+ /**
7674
+ * Try known OS font paths when `fonts` is empty.
7675
+ * @default true
7676
+ */
7677
+ systemFontFallback?: boolean;
7678
+ }
5969
7679
  /**
5970
7680
  * OG image generation options (user-facing).
5971
7681
  */
5972
7682
  interface OgImageOptions$1 {
7683
+ /**
7684
+ * Rendering backend.
7685
+ * - `"chromium"`: full browser rendering, best template compatibility
7686
+ * - `"satori"`: fast HTML-to-SVG-to-PNG rendering, limited CSS subset
7687
+ * @default "chromium"
7688
+ */
7689
+ renderer?: OgImageRenderer$1;
5973
7690
  /**
5974
7691
  * Path to a custom template file (.ts, .vue, .svelte, .tsx/.jsx).
5975
7692
  * - `.ts`: default-export a function `(props) => string`
@@ -6007,17 +7724,26 @@ interface OgImageOptions$1 {
6007
7724
  * @default 1
6008
7725
  */
6009
7726
  concurrency?: number;
7727
+ /**
7728
+ * Options for the Satori renderer.
7729
+ */
7730
+ satori?: OgImageSatoriOptions$1;
6010
7731
  }
6011
7732
  /**
6012
7733
  * Resolved OG image options with all defaults applied.
6013
7734
  */
6014
7735
  interface ResolvedOgImageOptions {
7736
+ renderer: OgImageRenderer$1;
6015
7737
  template?: string;
6016
7738
  vuePlugin: "vitejs" | "vizejs";
6017
7739
  width: number;
6018
7740
  height: number;
6019
7741
  cache: boolean;
6020
7742
  concurrency: number;
7743
+ satori: {
7744
+ fonts: OgImageSatoriFont$1[];
7745
+ systemFontFallback: boolean;
7746
+ };
6021
7747
  }
6022
7748
  //#endregion
6023
7749
  //#region src/og-image/browser.d.ts
@@ -6038,9 +7764,6 @@ interface OgBrowserSession extends AsyncDisposable {
6038
7764
  }
6039
7765
  //#endregion
6040
7766
  //#region src/og-image/index.d.ts
6041
- /**
6042
- * Resolves user-provided OG image options with defaults.
6043
- */
6044
7767
  declare function resolveOgImageOptions(options: OgImageOptions$1 | undefined): ResolvedOgImageOptions;
6045
7768
  /**
6046
7769
  * A single page entry for batch OG image generation.
@@ -6062,7 +7785,7 @@ interface OgImageResult {
6062
7785
  /**
6063
7786
  * Generates OG images for a batch of pages.
6064
7787
  *
6065
- * Manages the full lifecycle: resolve template → launch browser (with `using`)
7788
+ * Manages the full lifecycle: resolve template → select renderer
6066
7789
  * render each page (with caching and concurrency).
6067
7790
  *
6068
7791
  * All errors are non-fatal: failures are reported in results but never throw.
@@ -6079,6 +7802,115 @@ declare function resolveI18nOptions(options: I18nOptions | false | undefined): R
6079
7802
  */
6080
7803
  declare function createI18nPlugin(resolvedOptions: ResolvedOptions): Plugin;
6081
7804
  //#endregion
7805
+ //#region src/ssg-output-write.d.ts
7806
+ /** One host-rendered page that may receive resource fingerprinting. */
7807
+ interface WriteResourceFilesPage {
7808
+ html: string;
7809
+ inputPath: string;
7810
+ outputPath: string;
7811
+ }
7812
+ /** Inputs for writing fingerprinted page resources from host HTML. */
7813
+ interface WriteResourceFilesInput {
7814
+ pages: readonly WriteResourceFilesPage[];
7815
+ srcDir: string;
7816
+ outDir: string;
7817
+ root?: string;
7818
+ base?: string;
7819
+ options?: ResolvedResourcesOptions | null;
7820
+ cacheDir?: string;
7821
+ }
7822
+ /** Rewritten host pages plus emitted resource paths. */
7823
+ interface WriteResourceFilesResult {
7824
+ pages: WriteResourceFilesPage[];
7825
+ files: string[];
7826
+ errors: string[];
7827
+ }
7828
+ /**
7829
+ * Fingerprint, rewrite, and emit page resources for host-rendered HTML.
7830
+ *
7831
+ * Uses the same `resources` option object and emit path as `buildSsg()`.
7832
+ * Throws `PageResourceError` when `missing: "error"` hits a fatal issue.
7833
+ */
7834
+ declare function writeResourceFiles(input: WriteResourceFilesInput): Promise<WriteResourceFilesResult>;
7835
+ /**
7836
+ * Write Markdown companions for host-rendered pages.
7837
+ *
7838
+ * Reuses `writeMarkdownSourceFiles` from the copy-as-markdown pipeline.
7839
+ */
7840
+ declare function writeMarkdownCompanions(input: WriteMarkdownSourceFilesInput): Promise<{
7841
+ files: string[];
7842
+ errors: string[];
7843
+ }>;
7844
+ /**
7845
+ * Git last-commit time for `filePath` in milliseconds.
7846
+ *
7847
+ * Same lookup `buildSsg()` uses for `ssg.lastUpdated` and sitemap `<lastmod>`.
7848
+ * Returns `undefined` when `root` is missing, Git has no history, or NAPI is unavailable.
7849
+ */
7850
+ declare function resolveGitLastmod(filePath: string, root?: string): number | undefined;
7851
+ //#endregion
7852
+ //#region src/ssg-output.d.ts
7853
+ /** Same option objects `oxContent()` / `buildSsg()` accept. `ssg.enabled` is ignored. */
7854
+ interface PlanSsgOutputsOptions {
7855
+ base?: string;
7856
+ resources?: boolean | ResourcesOptions;
7857
+ feeds?: boolean | FeedsOptions;
7858
+ siteMaps?: boolean | SiteMapsOptions;
7859
+ publishState?: boolean | PublishStateOptions;
7860
+ ssg?: boolean | SsgOptions;
7861
+ }
7862
+ /** Inputs for planning composable SSG outputs from host-rendered pages. */
7863
+ interface PlanSsgOutputsInput {
7864
+ pages: readonly SsgOutputPageInput[];
7865
+ outDir: string;
7866
+ srcDir?: string;
7867
+ root?: string;
7868
+ siteDescription?: string;
7869
+ collections?: Record<string, readonly FeedItemInput[]>;
7870
+ collectionNames?: readonly string[];
7871
+ items?: readonly FeedItemInput[];
7872
+ options?: PlanSsgOutputsOptions | Pick<OxContentOptions, keyof PlanSsgOutputsOptions>;
7873
+ }
7874
+ /** Planned writer inputs. Call the matching `write*` function for each feature. */
7875
+ interface SsgOutputPlan {
7876
+ resources: WriteResourceFilesInput;
7877
+ markdownCompanions: {
7878
+ outDir: string;
7879
+ base: string;
7880
+ options: ResolvedMarkdownSourceOptions;
7881
+ publishState: ResolvedPublishStateOptions;
7882
+ pages: MarkdownSourcePageInput[];
7883
+ };
7884
+ feeds: {
7885
+ outDir: string;
7886
+ base: string;
7887
+ siteUrl?: string;
7888
+ siteName?: string;
7889
+ siteDescription?: string;
7890
+ options: ResolvedFeedsOptions;
7891
+ publishState: ResolvedPublishStateOptions;
7892
+ collections?: Record<string, readonly FeedItemInput[]>;
7893
+ collectionNames?: readonly string[];
7894
+ items?: readonly FeedItemInput[];
7895
+ };
7896
+ siteMaps: {
7897
+ outDir: string;
7898
+ base: string;
7899
+ siteUrl?: string;
7900
+ siteName?: string;
7901
+ siteDescription?: string;
7902
+ options: ResolvedSiteMapsOptions;
7903
+ pages: SiteMapPageInput[];
7904
+ };
7905
+ }
7906
+ /**
7907
+ * Plan resource, companion, feed, and sitemap outputs without rendering pages.
7908
+ *
7909
+ * `ssg.enabled` is ignored. Use `ssg: { enabled: false, markdownSource, lastUpdated, siteUrl }`
7910
+ * so those fields still resolve. `lastUpdated` on a page wins over git.
7911
+ */
7912
+ declare function planSsgOutputs(input: PlanSsgOutputsInput): SsgOutputPlan;
7913
+ //#endregion
6082
7914
  //#region src/index.d.ts
6083
7915
  /**
6084
7916
  * Creates the Ox Content Vite plugin.
@@ -6100,13 +7932,10 @@ declare function createI18nPlugin(resolvedOptions: ResolvedOptions): Plugin;
6100
7932
  * ```
6101
7933
  */
6102
7934
  declare function oxContent(options?: OxContentOptions): Plugin[];
6103
- declare function resolveBuiltinEmbedOptions(options: OxContentOptions["embeds"]): ResolvedOptions["embeds"];
6104
- declare function resolveMathOptions(options: OxContentOptions["math"]): ResolvedOptions["math"];
6105
- declare function resolveBadgeOptions(options: OxContentOptions["badges"]): ResolvedOptions["badges"];
6106
7935
  /**
6107
7936
  * Generates virtual module content.
6108
7937
  */
6109
7938
  declare function generateVirtualModule(path: string, options: ResolvedOptions): string;
6110
7939
  //#endregion
6111
- export { A11yOptions, AttrsOptions, BadgeOptions, type BasePageProps, BlogAuthor, BlogFeedError, BlogFeedFailurePolicy, BlogFeedSource, BlogOptions, BuiltinEmbedOptions, BuiltinPmOptions, CardOptions, CascadeOptions, CodeAnnotationKind, CodeAnnotationSyntax, CodeAnnotationsOptions, type CodeBlockDiagnostic, CodeBlockLintOptions, CodeBlockTypecheckOptions, CodeImportOptions, type CollectedDocsTest, CollectionEntry, CollectionIncludeField, CollectionManifest, CollectionOptions, CollectionQueryBuilder, CollectionQueryOperator, CollectionsOptions, type ComponentRegistry, ContainerOptions, ContainerTypeOptions, ContributorsOptions, DEFAULT_HTML_TEMPLATE, DEFAULT_MARKDOWN_EXTENSIONS, DefaultTheme, type DiscoverDocumentMdxIslandsInput, type DiscoverDocumentMdxIslandsResult, type DiscoverRegisteredMdxComponentsInput, DocEntry, DocMember, DocsEntryPoint, DocsOptions, DocsSortStrategy, DocsSummary, type DocsTestFileOptions, type DocsTestHarnessOptions, DocsTestOptions, DocsTestRunError, type DocsTestRunResult, type DocsTestSource, type DocsTestWriteResult, type DocumentImportDiagnostic, type DocumentImportDiagnosticCode, EditThisPageOptions, EmojiShortcodeOptions, EntryPageConfig, type ExtractedCodeBlock, ExtractedDocs, FeatureConfig, FeedFormat, FeedsOptions, FileTreeIconOptions, FileTreeOptions, Fragment, type FrameworkCodegenMode, type FrameworkCodegenTarget, type FrameworkComponentIsland, type FrameworkMarkdownOptions, type FrameworkRenderTarget, type FrameworkTransformData, type FrontmatterSchema, type GenerateVitePressMigrationConfigOptions, GeneratedDocsData, type GitHubLineRange, type GitHubOptions, type GitHubRepoData, type GitHubSourceCommit, type GitHubSourceData, type GitHubSourceRef, type GlobalComponentMap, type HeadAlternate, type HeadDiagnostic, type HeadInput, type HeadJsonLd, type HeadLink, type HeadMeta, type HeadValidationMode, type HeaderNavItem, HeadingPermalinksOptions, HeroAction, HeroConfig, HeroImage, HeroNotice, I18nOptions, ImageOptions, IncludeOptions, type IncrementalMarkdownParseAppendOptions, type IncrementalMarkdownParseResult, IncrementalMarkdownParser, type IncrementalMarkdownParserOptions, type IncrementalMarkdownRenderAppendOptions, type IncrementalMarkdownRenderResult, IncrementalMarkdownRenderer, type IncrementalMarkdownRendererOptions, type IslandInfo, type JSXChild, type JSXElementType, type JSXNode, type JSXProps, JsonLdOptions, JsonLdPageType, JsonLdPublisherOptions, type LoadStrategy, LocaleConfig, type LocaleLabel, MagicLinkAlias, MagicLinkImageOverride, MagicLinkOptions, type MarkdownChunkSource, MarkdownDisplayFormat, type MarkdownLintFileDiagnostic as MarkdownLintBatchDiagnostic, type MarkdownLintFileDiagnostic, type MarkdownLintDiagnostic, type MarkdownLintDictionaryOptions, type MarkdownLintFileOptions, type MarkdownLintFileOptions as MarkdownLintProjectOptions, type MarkdownLintFileResult, type MarkdownLintFilesResult, type MarkdownLintLanguage, type MarkdownLintOptions, type MarkdownLintResult, type MarkdownLintRuleOptions, type MarkdownLintSeverity, type MarkdownLintStandardDictionaryOptions, MarkdownNode, MarkdownSourceOptions, MarkdownTransformer, MathOptions, MdxImport, MdxImportSpecifier, MdxImportSpecifierKind, type MermaidOptions, type NavGroup, NavItem, NotFoundOptions, type OgBrowserSession, OgImageOptions, type OgImagePageEntry, type OgImageOptions$1 as OgImagePluginOptions, type OgImageResult, type OgImageTemplateFn, type OgImageTemplateProps, type OgpData, type OgpOptions, OxContentOptions, type PageChromeFlags, type PageData, type PageProps, PageResourceError, ParamDoc, type ParseIslandsResult, PermalinksOptions, PublishStateOptions, PwaOptions, ReaderChromeOptions, RedirectsOptions, type RenderContext, type RenderIslandComponentImportsInput, type RenderIslandFn, type RenderedHead, type ResolveDocumentComponentImportsInput, type ResolveDocumentComponentImportsResult, ResolvedA11y, ResolvedAttrsOptions, ResolvedBadgeOptions, ResolvedBlogFeedSource, ResolvedBlogOptions, ResolvedBuiltinEmbedOptions, ResolvedCardOptions, ResolvedCascadeOptions, ResolvedCodeAnnotationsOptions, ResolvedCodeBlockLintOptions, ResolvedCodeBlockTypecheckOptions, ResolvedCodeImportOptions, ResolvedCollectionOptions, ResolvedCollectionsOptions, ResolvedContainerOptions, ResolvedContributors, ResolvedDocsEntryPoint, ResolvedDocsOptions, ResolvedDocsTestOptions, type ResolvedDocumentComponentImport, ResolvedEditThisPageOptions, ResolvedEmojiShortcodeOptions, ResolvedFeedsOptions, ResolvedFileTreeOptions, ResolvedHeadingPermalinksOptions, ResolvedI18nOptions, ResolvedImageOptions, ResolvedIncludeOptions, ResolvedJsonLd, ResolvedMagicLinkOptions, ResolvedMarkdownSourceOptions, ResolvedMathOptions, ResolvedNotFoundOptions, ResolvedOgImageOptions, ResolvedOptions, ResolvedPermalinksOptions, ResolvedPublishStateOptions, ResolvedPwaOptions, ResolvedReaderChrome, ResolvedRedirectsOptions, ResolvedResourcesOptions, ResolvedSanitizeOptions, ResolvedSearchOptions, ResolvedSectionIndexOptions, ResolvedSiteMapsOptions, ResolvedSsgOptions, ResolvedStepsOptions, ResolvedTaxonomiesOptions, ResolvedTeamOptions, type ResolvedThemeConfig, ResolvedTypedHoverOptions, ResolvedVersionEntry, ResolvedVersionsOptions, ResolvedWikiLinkOptions, ResourcesOptions, ReturnDoc, type RunDocsTestsOptions, SanitizeOptions, ScopedSearchQuery, SearchDocument, SearchOptions, SearchResult, SectionIndexOptions, SectionIndexStyle, type SidebarItem, type SiteConfig, type SiteHead, SiteMapsOptions, type SocialLinks, SsgNavigationGroup, SsgNavigationItem, SsgOptions, StepsOptions, TaxonomiesOptions, TeamLink, TeamMember, TeamOptions, type ThemeAnnouncement, type ThemeColors, type ThemeComponent, type ThemeConfig, type ThemeEmbed, type ThemeEntryPage, type ThemeFonts, type ThemeFooter, type ThemeHeader, type ThemeLayout, type ThemeProps, type ThemeRenderOptions, type ThemeTokens, ThrowsDoc, TocEntry, type TransformAllOptions, TransformContext, TransformResult, type TwitterEmbedOptions, type TypecheckCodeBlockOptions, TypedHoverOptions, VersionBannerKind, VersionEntry, VersionsOptions, type VitePressConfig, type VitePressFooter, type VitePressLogo, type VitePressNavItem, type VitePressSidebar, type VitePressSidebarItem, type VitePressSocialLink, type VitePressThemeConfig, WikiLinkOptions, type WrittenDocsTestFile, type YouTubeOptions, applyIslandSsrHtml, buildCollectionManifest, buildSearchIndex, buildSsg, classifyPublishState, clearRenderContext, collectDocsTests, collectGitHubRepos, collectGitHubSources, collectMdxIslandNamesFromHtml, collectMdxJsxNamesFromAst, collectOgpUrls, convertVitePressNav, convertVitePressSidebar, createFrameworkMarkdownOptions, createI18nPlugin, createIncrementalMarkdownParser, createIncrementalMarkdownRenderer, createMarkdownEnvironment, createTheme, defaultTheme, defineCollection, defineCollections, defineTheme, discoverDocumentMdxIslands, discoverRegisteredMdxComponents, each, escapeSvelteMarkup, extractCodeBlocks, extractDocs, extractDocsTests, extractIslandInfo, extractVideoId, fetchGitHubSource, fetchOgpData, fetchRepoData, fromVitePressConfig, generateCollectionsVirtualModule, generateFrontmatterTypes, generateHydrationScript, generateMarkdown, generateOgImages, generateTabsCSS, generateTypes, generateVirtualModule, generateVitePressMigrationConfig, hasIslands, inferType, intersectHydratableComponentNames, intersectRegisteredComponentNames, isMarkdownFilePath, isMdxFilePath, isRegisteredComponent, jsx, jsxs, lintCodeBlocks, lintMarkdown, lintMarkdownAsync, lintMarkdownFile, lintMarkdownFiles, mergeThemes, mermaidClientScript, normalizeMarkdownExtensions, normalizeVitePressFrontmatter, oxContent, parseGitHubLineRange, parseGitHubPermalink, parsePageChromeFlags, partitionPublishedPages, prefetchGitHubRepos, prefetchGitHubSources, prefetchOgpData, raw, readingTimeMinutes, renderAllPages, renderHead, renderHtmlToFrameworkCode, renderHtmlToReactComponent, renderHtmlToReactCreateElement, renderHtmlToSvelteComponent, renderHtmlToVueComponent, renderHtmlToVueH, renderIslandComponentImports, renderMarkdownStream, renderPage, renderToString, resolveBadgeOptions, resolveBlogCollectionName, resolveBlogOptions, resolveBuiltinEmbedOptions, resolveCardOptions, resolveCascadeOptions, resolveCollectionsOptions, resolveContentRootPath, resolveDocsOptions, resolveDocumentComponentImports, resolveFeedsOptions, resolveFileTreeOptions, resolveHeadValidation, resolveHeaderNavItems, resolveHeadingPermalinksOptions, resolveI18nOptions, resolveImageOptions, resolveIncludeOptions, resolveLocaleLabel, resolveMarkdownSourceOptions, resolveMathOptions, resolveMdxForFilePath, resolveNotFoundOptions, resolveOgImageOptions, resolvePageChromeOption, resolvePermalinksOptions, resolvePublishStateOptions, resolvePwaOptions, resolveRedirectsOptions, resolveResourcesOptions, resolveSearchOptions, resolveSectionIndexOptions, resolveSiteMapsOptions, resolveSsgOptions, resolveStepsOptions, resolveTaxonomiesOptions, resolveTeamOptions, resolveTheme, resolveTypedHoverOptions, resolveVersionsOptions, runDocsTests, setRenderContext, shouldLintMarkdownFile, stripMarkdownExtension, stripViteQuery, transformAllPlugins, transformGitHub, transformIslands, transformMarkdown, transformMermaidStatic, transformOgp, transformTabs, transformYouTube, typecheckCodeBlocks, useIsActive, useNav, usePageProps, useRenderContext, useSiteConfig, when, writeDocs, writeDocsTestFiles, writeSearchIndex };
7940
+ export { A11yOptions, AbbreviationsOptions, AttrsOptions, BadgeOptions, type BasePageProps, type BibliographyEntry, BlogAuthor, BlogFeedError, BlogFeedFailurePolicy, BlogFeedSource, BlogOptions, type BudouxLanguage, type BudouxOptions, type BudouxParser, BuiltinEmbedOptions, BuiltinPmOptions, CardOptions, CascadeOptions, type CitationFailureMode, type CitationReference, type CitationsOptions, CodeAnnotationKind, CodeAnnotationSyntax, CodeAnnotationsOptions, type CodeBlockDiagnostic, CodeBlockLintOptions, CodeBlockTypecheckOptions, CodeGroupOptions, CodeImportOptions, type CollectedDocsTest, CollectionEntry, CollectionIncludeField, CollectionManifest, CollectionOptions, CollectionQueryBuilder, CollectionQueryOperator, CollectionsOptions, type ComponentRegistry, ConditionalBlockOptions, ContainerOptions, ContainerTypeOptions, ContributorsOptions, type CrossReferenceEntry, type CrossReferenceFailureMode, type CrossReferenceKind, type CrossReferenceLabelOptions, type CrossReferencesOptions, DEFAULT_HTML_TEMPLATE, DEFAULT_MARKDOWN_EXTENSIONS, DataTableOptions, DefaultTheme, DefinitionListOptions, type DiscoverDocumentMdxIslandsInput, type DiscoverDocumentMdxIslandsResult, type DiscoverRegisteredMdxComponentsInput, DocEntry, DocMember, DocsEntryPoint, DocsNavigationItem, DocsOptions, DocsSortStrategy, DocsSummary, type DocsTestFileOptions, type DocsTestHarnessOptions, DocsTestOptions, DocsTestRunError, type DocsTestRunResult, type DocsTestSource, type DocsTestWriteResult, type DocumentImportDiagnostic, type DocumentImportDiagnosticCode, EditThisPageOptions, EditThisPageProvider, EmojiShortcodeOptions, EntryPageConfig, type ExtractedCodeBlock, ExtractedDocs, FeatureConfig, FeedChannelOptions, FeedFormat, FeedItemAttachment, FeedItemAuthor, FeedItemAuthorInput, FeedItemInput, FeedItemsResolveContext, FeedItemsSource, FeedsOptions, type FeedsRenderInput, type FeedsRenderResult, FileTreeIconOptions, FileTreeOptions, Fragment, type FrameworkCodegenMode, type FrameworkCodegenTarget, type FrameworkComponentIsland, type FrameworkMarkdownOptions, type FrameworkRenderTarget, type FrameworkTransformData, type FrontmatterSchema, type GenerateVitePressMigrationConfigOptions, GeneratedDocsData, GeneratedOpenApiDocs, type GitHubLineRange, type GitHubOptions, type GitHubRepoData, type GitHubSourceCommit, type GitHubSourceData, type GitHubSourceRef, type GlobalComponentMap, type GraphvizFailureMode, type GraphvizOptions, type HeadAlternate, type HeadDiagnostic, type HeadInput, type HeadJsonLd, type HeadLink, type HeadMeta, type HeadValidationMode, type HeaderNavItem, HeadingPermalinksOptions, HeroAction, HeroConfig, HeroImage, HeroNotice, I18nOptions, IconsOptions, ImageGalleryOptions, ImageOptions, IncludeOptions, type IncrementalMarkdownParseAppendOptions, type IncrementalMarkdownParseResult, IncrementalMarkdownParser, type IncrementalMarkdownParserOptions, type IncrementalMarkdownRenderAppendOptions, type IncrementalMarkdownRenderResult, IncrementalMarkdownRenderer, type IncrementalMarkdownRendererOptions, type IslandInfo, type JSXChild, type JSXElementType, type JSXNode, type JSXProps, JsonLdOptions, JsonLdPageType, JsonLdPublisherOptions, KatexFontFormats, KeyboardKeysOptions, type LoadStrategy, LocaleConfig, type LocaleLabel, MagicLinkAlias, MagicLinkImageOverride, MagicLinkOptions, type MarkdownChunkSource, MarkdownDisplayFormat, type MarkdownLintFileDiagnostic as MarkdownLintBatchDiagnostic, type MarkdownLintFileDiagnostic, type MarkdownLintDiagnostic, type MarkdownLintDictionaryOptions, type MarkdownLintFileOptions, type MarkdownLintFileOptions as MarkdownLintProjectOptions, type MarkdownLintFileResult, type MarkdownLintFilesResult, type MarkdownLintLanguage, type MarkdownLintOptions, type MarkdownLintResult, type MarkdownLintRuleOptions, type MarkdownLintSeverity, type MarkdownLintStandardDictionaryOptions, MarkdownNode, type MarkdownProcessor, MarkdownSourceOptions, type MarkdownTableEnhancementOptions, MarkdownTransformer, MathErrorPolicy, MathOptions, MdxImport, MdxImportSpecifier, MdxImportSpecifierKind, type MermaidOptions, type NavGroup, NavItem, NotByAiOptions, NotFoundOptions, type OgBrowserSession, OgImageOptions, type OgImagePageEntry, type OgImageOptions$1 as OgImagePluginOptions, OgImageRenderer, type OgImageResult, OgImageSatoriFont, OgImageSatoriFontWeight, OgImageSatoriOptions, type OgImageTemplateFn, type OgImageTemplateProps, type OgpData, type OgpOptions, OpenApiDocsInput, OpenApiDocsOptions, OpenApiDocsSource, OxContentOptions, type PageChromeFlags, type PageData, type PageProps, PageResourceError, ParamDoc, type ParseIslandsResult, PartialsOptions, PermalinksOptions, type PlanSsgOutputsInput, type PlanSsgOutputsOptions, PublishStateOptions, PwaOptions, type ReaderChromeInput, type ReaderChromeOptions, type RedditEmbedOptions, type RedditPostData, type RedditPostReference, RedirectProvider, RedirectsOptions, type RenderContext, type RenderFeedFilesInput, type RenderFeedFilesResult, type RenderIslandComponentImportsInput, type RenderIslandFn, type RenderThemeTokenCssOptions, type RenderedFeedFile, type RenderedHead, type ResolveDocumentComponentImportsInput, type ResolveDocumentComponentImportsResult, ResolvedA11y, ResolvedAbbreviationsOptions, ResolvedAttrsOptions, ResolvedBadgeOptions, ResolvedBlogFeedSource, ResolvedBlogOptions, type ResolvedBudouxOptions, ResolvedBuiltinEmbedOptions, ResolvedCardOptions, ResolvedCascadeOptions, type ResolvedCitationsOptions, ResolvedCodeAnnotationsOptions, ResolvedCodeBlockLintOptions, ResolvedCodeBlockTypecheckOptions, ResolvedCodeGroupOptions, ResolvedCodeImportOptions, ResolvedCollectionOptions, ResolvedCollectionsOptions, ResolvedConditionalBlockOptions, ResolvedContainerOptions, ResolvedContributors, type ResolvedCrossReferencesOptions, ResolvedDataTableOptions, ResolvedDefinitionListOptions, ResolvedDocsEntryPoint, ResolvedDocsOptions, ResolvedDocsTestOptions, type ResolvedDocumentComponentImport, ResolvedEditThisPageOptions, ResolvedEmojiShortcodeOptions, ResolvedFeedChannel, ResolvedFeedsOptions, ResolvedFileTreeOptions, type ResolvedGraphvizOptions, ResolvedHeadingPermalinksOptions, ResolvedI18nOptions, ResolvedIconsOptions, ResolvedImageGalleryOptions, ResolvedImageOptions, ResolvedIncludeOptions, ResolvedJsonLd, ResolvedKeyboardKeysOptions, ResolvedMagicLinkOptions, ResolvedMarkdownSourceOptions, ResolvedMathOptions, ResolvedNotByAiOptions, ResolvedNotFoundOptions, ResolvedOgImageOptions, ResolvedOpenApiDocsInput, ResolvedOpenApiDocsOptions, ResolvedOptions, ResolvedPartialsOptions, ResolvedPermalinksOptions, ResolvedPublishStateOptions, ResolvedPwaOptions, type ResolvedReaderChrome, ResolvedRedirectsOptions, ResolvedResourcesOptions, ResolvedSanitizeOptions, ResolvedSearchOptions, ResolvedSectionIndexOptions, ResolvedSiteMapsOptions, ResolvedSsgOptions, ResolvedStepsOptions, ResolvedTaxonomiesOptions, ResolvedTeamOptions, type ResolvedThemeConfig, ResolvedTimelineOptions, ResolvedTypedHoverOptions, ResolvedVersionEntry, ResolvedVersionsOptions, ResolvedWikiLinkOptions, ResourcesOptions, ReturnDoc, type RunDocsTestsOptions, SanitizeOptions, ScopedSearchQuery, SearchDocument, SearchOptions, SearchResult, SectionIndexOptions, SectionIndexStyle, type SidebarItem, type SiteConfig, type SiteHead, SiteMapsOptions, type SocialLinks, SsgNavigationGroup, SsgNavigationItem, SsgOptions, SsgOutputPageInput, type SsgOutputPlan, StepsOptions, TaxonomiesOptions, TeamLink, TeamMember, TeamOptions, type ThemeAnnouncement, type ThemeColors, type ThemeComponent, type ThemeConfig, type ThemeEmbed, type ThemeEntryPage, type ThemeFontValue, type ThemeFonts, type ThemeFooter, type ThemeHeader, type ThemeLayout, type ThemeProps, type ThemeRenderOptions, type ThemeTokenSource, type ThemeTokens, type ThemeWebFont, ThrowsDoc, TimelineOptions, TocEntry, type TransformAllOptions, TransformContext, TransformResult, type TwitterEmbedOptions, type TypecheckCodeBlockOptions, TypedHoverOptions, VersionBannerKind, VersionEntry, VersionsOptions, type VitePressConfig, type VitePressFooter, type VitePressLogo, type VitePressNavItem, type VitePressSidebar, type VitePressSidebarItem, type VitePressSocialLink, type VitePressThemeConfig, WikiLinkOptions, type WriteFeedFilesInput, type WriteResourceFilesInput, type WriteResourceFilesPage, type WriteResourceFilesResult, type WrittenDocsTestFile, type YouTubeOptions, applyIslandSsrHtml, applyReaderChromeHtml, buildCollectionManifest, buildSearchIndex, buildSsg, classifyPublishState, clearGraphvizCache, clearRenderContext, collectDocsTests, collectGitHubRepos, collectGitHubSources, collectMdxIslandNamesFromHtml, collectMdxJsxNamesFromAst, collectOgpUrls, convertVitePressNav, convertVitePressSidebar, createFrameworkMarkdownOptions, createI18nPlugin, createIncrementalMarkdownParser, createIncrementalMarkdownRenderer, createMarkdownEnvironment, createMarkdownProcessor, createTheme, defaultTheme, defineCollection, defineCollections, defineTheme, discoverDocumentMdxIslands, discoverRegisteredMdxComponents, each, enhanceMarkdownTables, escapeSvelteMarkup, extractCodeBlocks, extractDocs, extractDocsTests, extractIslandInfo, extractVideoId, fetchGitHubSource, fetchOgpData, fetchRepoData, fromVitePressConfig, generateCollectionsVirtualModule, generateFeeds, generateFrontmatterTypes, generateHydrationScript, generateMarkdown, generateOgImages, generateOpenApiDocs, generateTabsCSS, generateTypes, generateVirtualModule, generateVitePressMigrationConfig, hasIslands, inferType, intersectHydratableComponentNames, intersectRegisteredComponentNames, isMarkdownFilePath, isMdxFilePath, isRegisteredComponent, jsx, jsxs, lintCodeBlocks, lintMarkdown, lintMarkdownAsync, lintMarkdownFile, lintMarkdownFiles, markdownTableScrollLabel, mergeThemes, mermaidClientScript, normalizeMarkdownExtensions, normalizeVitePressFrontmatter, oxContent, parseGitHubLineRange, parseGitHubPermalink, parsePageChromeFlags, parseRedditPostReference, partitionPublishedPages, planSsgOutputs, prefetchGitHubRepos, prefetchGitHubSources, prefetchOgpData, raw, readerChromeAttributes, readerChromeCss, readerChromeIsEnabled, readerChromeNeedsJs, readerChromeScript, readingTimeMinutes, renderAllPages, renderFeedFiles, renderHead, renderHtmlToFrameworkCode, renderHtmlToReactComponent, renderHtmlToReactCreateElement, renderHtmlToSvelteComponent, renderHtmlToVueComponent, renderHtmlToVueH, renderIslandComponentImports, renderMarkdown, renderMarkdownStream, renderPage, renderReaderChromeAttributes, renderReaderChromeScriptTag, renderReaderChromeStyleTag, renderThemeTokenCss, renderToString, resolveAbbreviationsOptions, resolveBadgeOptions, resolveBlogCollectionName, resolveBlogOptions, resolveBudouxOptions, resolveBuiltinEmbedOptions, resolveCardOptions, resolveCascadeOptions, resolveCodeGroupOptions, resolveCollectionsOptions, resolveContentRootPath, resolveDataTableOptions, resolveDocsOptions, resolveDocumentComponentImports, resolveFeedsOptions, resolveFileTreeOptions, resolveGitLastmod, resolveGraphvizOptions, resolveHeadValidation, resolveHeaderNavItems, resolveHeadingPermalinksOptions, resolveI18nOptions, resolveImageGalleryOptions, resolveImageOptions, resolveIncludeOptions, resolveKeyboardKeysOptions, resolveLocaleLabel, resolveMarkdownSourceOptions, resolveMathOptions, resolveMdxForFilePath, resolveNotByAiOptions, resolveNotFoundOptions, resolveOgImageOptions, resolvePageChromeOption, resolvePartialsOptions, resolvePermalinksOptions, resolvePublishStateOptions, resolvePwaOptions, resolveReaderChromeInput, resolveRedirectsOptions, resolveResourcesOptions, resolveSearchOptions, resolveSectionIndexOptions, resolveSiteMapsOptions, resolveSsgOptions, resolveStepsOptions, resolveTaxonomiesOptions, resolveTeamOptions, resolveTheme, resolveTimelineOptions, resolveTypedHoverOptions, resolveVersionsOptions, runDocsTests, setRenderContext, shouldLintMarkdownFile, stripMarkdownExtension, stripViteQuery, tokensToCss, transformAllPlugins, transformBudouxHtml, transformGitHub, transformGraphvizStatic, transformIslands, transformMarkdown, transformMermaidStatic, transformOgp, transformRedditEmbeds, transformTabs, transformYouTube, typecheckCodeBlocks, useIsActive, useNav, usePageProps, useRenderContext, useSiteConfig, when, writeDocs, writeDocsTestFiles, writeFeedFiles, writeMarkdownCompanions, writeResourceFiles, writeSearchIndex, writeSiteMapFiles };
6112
7941
  //# sourceMappingURL=index.d.cts.map