@astrojs/starlight 0.41.11 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/components/MobileMenuToggle.astro +65 -0
- package/{components → dist/components}/PageFrame.astro +32 -8
- package/dist/components-internals/Icons.d.ts +415 -0
- package/dist/components-internals/Icons.js +140 -0
- package/dist/components-internals/SidebarPersistState.d.ts +1 -0
- package/dist/components-internals/SidebarPersistState.js +53 -0
- package/dist/components-internals/TableOfContents/starlight-toc.d.ts +18 -0
- package/dist/components-internals/TableOfContents/starlight-toc.js +88 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.js +4 -0
- package/{expressive-code.d.ts → dist/expressive-code.d.ts} +6 -13
- package/dist/expressive-code.js +31 -0
- package/dist/global.d.ts +62 -0
- package/dist/global.js +2 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +109 -0
- package/dist/integrations/aside-utils.d.ts +9 -0
- package/dist/integrations/aside-utils.js +35 -0
- package/dist/integrations/expressive-code/hast.d.ts +1 -0
- package/dist/integrations/expressive-code/hast.js +2 -0
- package/dist/integrations/expressive-code/index.d.ts +60 -0
- package/dist/integrations/expressive-code/index.js +48 -0
- package/dist/integrations/expressive-code/preprocessor.d.ts +17 -0
- package/dist/integrations/expressive-code/preprocessor.js +76 -0
- package/dist/integrations/expressive-code/themes/night-owl-dark.js +4 -0
- package/dist/integrations/expressive-code/themes/night-owl-light.js +4 -0
- package/dist/integrations/expressive-code/theming.d.ts +16 -0
- package/dist/integrations/expressive-code/theming.js +71 -0
- package/dist/integrations/expressive-code/translations.d.ts +8 -0
- package/dist/integrations/expressive-code/translations.js +26 -0
- package/dist/integrations/markdown-icon.d.ts +8 -0
- package/dist/integrations/markdown-icon.js +14 -0
- package/dist/integrations/markdown-plugins.d.ts +18 -0
- package/dist/integrations/markdown-plugins.js +36 -0
- package/dist/integrations/markdown-processor.d.ts +29 -0
- package/dist/integrations/markdown-processor.js +44 -0
- package/dist/integrations/pagefind.d.ts +7 -0
- package/dist/integrations/pagefind.js +34 -0
- package/dist/integrations/rehype-code-rtl-support.d.ts +21 -0
- package/dist/integrations/rehype-code-rtl-support.js +36 -0
- package/dist/integrations/rehype-heading-links.d.ts +10 -0
- package/dist/integrations/rehype-heading-links.js +57 -0
- package/dist/integrations/remark-asides.d.ts +32 -0
- package/dist/integrations/remark-asides.js +166 -0
- package/dist/integrations/remark-rehype.d.ts +17 -0
- package/dist/integrations/remark-rehype.js +51 -0
- package/dist/integrations/satteri.d.ts +13 -0
- package/dist/integrations/satteri.js +209 -0
- package/dist/integrations/shared/absolutePathToLang.d.ts +10 -0
- package/dist/integrations/shared/absolutePathToLang.js +13 -0
- package/dist/integrations/shared/localeToLang.d.ts +10 -0
- package/dist/integrations/shared/localeToLang.js +13 -0
- package/dist/integrations/shared/slugToLocale.d.ts +12 -0
- package/dist/integrations/shared/slugToLocale.js +15 -0
- package/dist/integrations/sitemap.d.ts +12 -0
- package/dist/integrations/sitemap.js +19 -0
- package/dist/integrations/vite-layer-order.d.ts +15 -0
- package/dist/integrations/vite-layer-order.js +56 -0
- package/dist/integrations/vite-lazy-barrel-optimization.d.ts +12 -0
- package/dist/integrations/vite-lazy-barrel-optimization.js +33 -0
- package/dist/integrations/vite-virtual-modules.d.ts +14 -0
- package/dist/integrations/vite-virtual-modules.js +108 -0
- package/dist/internal.d.ts +3 -0
- package/dist/internal.js +3 -0
- package/dist/loaders.d.ts +20 -0
- package/dist/loaders.js +49 -0
- package/dist/locals.d.ts +15 -0
- package/dist/locals.js +33 -0
- package/dist/package.js +4 -0
- package/{props.ts → dist/props.d.ts} +6 -4
- package/dist/props.js +1 -0
- package/dist/route-data.d.ts +7 -0
- package/dist/route-data.js +6 -0
- package/dist/schema.d.ts +426 -0
- package/dist/schema.js +103 -0
- package/dist/schemas/badge.d.ts +86 -0
- package/dist/schemas/badge.js +39 -0
- package/dist/schemas/components.d.ts +236 -0
- package/dist/schemas/components.js +36 -0
- package/dist/schemas/expressiveCode.d.ts +7 -0
- package/dist/schemas/expressiveCode.js +5 -0
- package/dist/schemas/favicon.d.ts +9 -0
- package/dist/schemas/favicon.js +32 -0
- package/dist/schemas/head.d.ts +33 -0
- package/dist/schemas/head.js +41 -0
- package/dist/schemas/hero.d.ts +319 -0
- package/dist/schemas/hero.js +73 -0
- package/dist/schemas/i18n.d.ts +125 -0
- package/dist/schemas/i18n.js +76 -0
- package/dist/schemas/icon.d.ts +284 -0
- package/dist/schemas/icon.js +7 -0
- package/dist/schemas/locale.d.ts +20 -0
- package/dist/schemas/locale.js +11 -0
- package/dist/schemas/logo.d.ts +32 -0
- package/dist/schemas/logo.js +14 -0
- package/dist/schemas/pagefind.d.ts +166 -0
- package/dist/schemas/pagefind.js +31 -0
- package/dist/schemas/prevNextLink.d.ts +10 -0
- package/dist/schemas/prevNextLink.js +14 -0
- package/dist/schemas/sidebar.d.ts +205 -0
- package/dist/schemas/sidebar.js +71 -0
- package/dist/schemas/site-title.d.ts +7 -0
- package/dist/schemas/site-title.js +17 -0
- package/dist/schemas/social.d.ts +292 -0
- package/dist/schemas/social.js +18 -0
- package/dist/schemas/tableOfContents.d.ts +24 -0
- package/dist/schemas/tableOfContents.js +16 -0
- package/dist/translations/ar.js +36 -0
- package/dist/translations/ca.js +46 -0
- package/dist/translations/cs.js +46 -0
- package/dist/translations/da.js +33 -0
- package/dist/translations/de.js +33 -0
- package/dist/translations/el.js +33 -0
- package/dist/translations/en.js +33 -0
- package/dist/translations/es.js +46 -0
- package/dist/translations/fa.js +33 -0
- package/dist/translations/fi.js +33 -0
- package/dist/translations/fr.js +36 -0
- package/dist/translations/gl.js +46 -0
- package/dist/translations/he.js +33 -0
- package/dist/translations/hi.js +36 -0
- package/dist/translations/hu.js +46 -0
- package/dist/translations/id.js +33 -0
- package/dist/translations/index.d.ts +48 -0
- package/dist/translations/index.js +75 -0
- package/dist/translations/it.js +36 -0
- package/dist/translations/ja.js +36 -0
- package/dist/translations/ko.js +36 -0
- package/dist/translations/lv.js +33 -0
- package/dist/translations/nb.js +33 -0
- package/dist/translations/nl.js +33 -0
- package/dist/translations/pl.js +36 -0
- package/dist/translations/pt.js +36 -0
- package/dist/translations/ro.js +33 -0
- package/dist/translations/ru.js +36 -0
- package/dist/translations/sk.js +33 -0
- package/dist/translations/sv.js +33 -0
- package/dist/translations/th.js +33 -0
- package/dist/translations/tr.js +33 -0
- package/dist/translations/uk.js +33 -0
- package/dist/translations/vi.js +33 -0
- package/dist/translations/zh-CN.js +36 -0
- package/dist/translations/zh-TW.js +36 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.js +1 -0
- package/{user-components → dist/user-components}/FileTree.astro +1 -1
- package/{user-components → dist/user-components}/Steps.astro +1 -1
- package/{user-components → dist/user-components}/TabItem.astro +1 -1
- package/{user-components → dist/user-components}/Tabs.astro +1 -1
- package/dist/user-components/file-tree-icons.d.ts +178 -0
- package/dist/user-components/file-tree-icons.js +632 -0
- package/dist/user-components/file-tree-processor.d.ts +16 -0
- package/dist/user-components/file-tree-processor.js +132 -0
- package/dist/user-components/steps-processor.d.ts +10 -0
- package/dist/user-components/steps-processor.js +39 -0
- package/dist/user-components/tabs-processor.d.ts +23 -0
- package/dist/user-components/tabs-processor.js +70 -0
- package/dist/utils/base.d.ts +7 -0
- package/dist/utils/base.js +15 -0
- package/dist/utils/canonical.d.ts +10 -0
- package/dist/utils/canonical.js +14 -0
- package/dist/utils/collection-fs.d.ts +13 -0
- package/dist/utils/collection-fs.js +19 -0
- package/{utils/collection.ts → dist/utils/collection.d.ts} +9 -20
- package/dist/utils/collection.js +26 -0
- package/dist/utils/createPathFormatter.d.ts +9 -0
- package/dist/utils/createPathFormatter.js +35 -0
- package/dist/utils/createTranslationSystem.d.ts +23 -0
- package/dist/utils/createTranslationSystem.js +84 -0
- package/dist/utils/error-map.d.ts +23 -0
- package/dist/utils/error-map.js +125 -0
- package/dist/utils/format-path.d.ts +4 -0
- package/dist/utils/format-path.js +9 -0
- package/dist/utils/generateToC.d.ts +14 -0
- package/dist/utils/generateToC.js +25 -0
- package/dist/utils/git.d.ts +12 -0
- package/dist/utils/git.js +71 -0
- package/dist/utils/gitInlined.d.ts +6 -0
- package/dist/utils/gitInlined.js +11 -0
- package/dist/utils/head.d.ts +7 -0
- package/dist/utils/head.js +233 -0
- package/dist/utils/i18n.d.ts +50 -0
- package/dist/utils/i18n.js +141 -0
- package/dist/utils/localizedUrl.d.ts +8 -0
- package/dist/utils/localizedUrl.js +28 -0
- package/dist/utils/navigation.d.ts +19 -0
- package/dist/utils/navigation.js +353 -0
- package/dist/utils/path.d.ts +21 -0
- package/dist/utils/path.js +51 -0
- package/dist/utils/plugins.d.ts +721 -0
- package/dist/utils/plugins.js +174 -0
- package/dist/utils/routing/data.d.ts +20 -0
- package/dist/utils/routing/data.js +127 -0
- package/dist/utils/routing/index.d.ts +21 -0
- package/dist/utils/routing/index.js +106 -0
- package/dist/utils/routing/middleware.d.ts +11 -0
- package/dist/utils/routing/middleware.js +65 -0
- package/dist/utils/routing/types.d.ts +93 -0
- package/dist/utils/routing/types.js +1 -0
- package/dist/utils/slugs.d.ts +45 -0
- package/dist/utils/slugs.js +104 -0
- package/dist/utils/starlight-page.d.ts +36 -0
- package/dist/utils/starlight-page.js +120 -0
- package/dist/utils/translations-fs.d.ts +15 -0
- package/dist/utils/translations-fs.js +39 -0
- package/dist/utils/translations.d.ts +20 -0
- package/dist/utils/translations.js +29 -0
- package/dist/utils/types.d.ts +5 -0
- package/dist/utils/types.js +1 -0
- package/dist/utils/url.d.ts +7 -0
- package/{utils/url.ts → dist/utils/url.js} +5 -4
- package/dist/utils/user-config.d.ts +2055 -0
- package/dist/utils/user-config.js +136 -0
- package/dist/utils/validateLogoImports.d.ts +5 -0
- package/dist/utils/validateLogoImports.js +16 -0
- package/dist/utils/zodDeepMerge.d.ts +16 -0
- package/dist/utils/zodDeepMerge.js +53 -0
- package/package.json +60 -34
- package/CHANGELOG.md +0 -3051
- package/components/MobileMenuToggle.astro +0 -114
- package/components-internals/Icons.ts +0 -248
- package/components-internals/SidebarPersistState.ts +0 -71
- package/components-internals/TableOfContents/starlight-toc.ts +0 -127
- package/constants.ts +0 -4
- package/expressive-code.mjs +0 -23
- package/global.d.ts +0 -11
- package/i18n.d.ts +0 -18
- package/index.ts +0 -200
- package/integrations/aside-utils.ts +0 -41
- package/integrations/expressive-code/hast.d.ts +0 -5
- package/integrations/expressive-code/hast.mjs +0 -9
- package/integrations/expressive-code/index.ts +0 -125
- package/integrations/expressive-code/preprocessor.ts +0 -126
- package/integrations/expressive-code/themes/night-owl-dark.jsonc +0 -1796
- package/integrations/expressive-code/themes/night-owl-light.jsonc +0 -1695
- package/integrations/expressive-code/theming.ts +0 -105
- package/integrations/expressive-code/translations.ts +0 -36
- package/integrations/markdown-icon.ts +0 -13
- package/integrations/markdown-plugins.ts +0 -71
- package/integrations/markdown-processor.ts +0 -64
- package/integrations/pagefind.ts +0 -60
- package/integrations/rehype-code-rtl-support.ts +0 -37
- package/integrations/rehype-heading-links.ts +0 -79
- package/integrations/remark-asides.ts +0 -219
- package/integrations/remark-rehype.ts +0 -87
- package/integrations/satteri.ts +0 -265
- package/integrations/shared/absolutePathToLang.ts +0 -26
- package/integrations/shared/localeToLang.ts +0 -15
- package/integrations/shared/slugToLocale.ts +0 -18
- package/integrations/sitemap.ts +0 -23
- package/integrations/vite-layer-order.ts +0 -69
- package/integrations/vite-lazy-barrel-optimization.ts +0 -40
- package/integrations/vite-virtual-modules.ts +0 -175
- package/internal.ts +0 -6
- package/loaders.ts +0 -63
- package/locals.d.ts +0 -43
- package/locals.ts +0 -43
- package/route-data.ts +0 -11
- package/schema.ts +0 -167
- package/schemas/badge.ts +0 -40
- package/schemas/components.ts +0 -265
- package/schemas/expressiveCode.ts +0 -12
- package/schemas/favicon.ts +0 -40
- package/schemas/head.ts +0 -50
- package/schemas/hero.ts +0 -69
- package/schemas/i18n.ts +0 -244
- package/schemas/icon.ts +0 -7
- package/schemas/logo.ts +0 -28
- package/schemas/pagefind.ts +0 -128
- package/schemas/prevNextLink.ts +0 -18
- package/schemas/sidebar.ts +0 -163
- package/schemas/site-title.ts +0 -20
- package/schemas/social.ts +0 -23
- package/schemas/tableOfContents.ts +0 -21
- package/translations/README.md +0 -14
- package/translations/ar.json +0 -33
- package/translations/ca.json +0 -43
- package/translations/cs.json +0 -43
- package/translations/da.json +0 -30
- package/translations/de.json +0 -30
- package/translations/el.json +0 -30
- package/translations/en.json +0 -30
- package/translations/es.json +0 -43
- package/translations/fa.json +0 -30
- package/translations/fi.json +0 -30
- package/translations/fr.json +0 -33
- package/translations/gl.json +0 -43
- package/translations/he.json +0 -30
- package/translations/hi.json +0 -33
- package/translations/hu.json +0 -43
- package/translations/id.json +0 -30
- package/translations/index.ts +0 -76
- package/translations/it.json +0 -33
- package/translations/ja.json +0 -33
- package/translations/ko.json +0 -33
- package/translations/lv.json +0 -30
- package/translations/nb.json +0 -30
- package/translations/nl.json +0 -30
- package/translations/pl.json +0 -33
- package/translations/pt.json +0 -33
- package/translations/ro.json +0 -30
- package/translations/ru.json +0 -33
- package/translations/sk.json +0 -30
- package/translations/sv.json +0 -30
- package/translations/th.json +0 -30
- package/translations/tr.json +0 -30
- package/translations/uk.json +0 -30
- package/translations/vi.json +0 -30
- package/translations/zh-CN.json +0 -33
- package/translations/zh-TW.json +0 -33
- package/types.ts +0 -7
- package/user-components/file-tree-icons.ts +0 -782
- package/user-components/rehype-file-tree.ts +0 -251
- package/user-components/rehype-steps.ts +0 -85
- package/user-components/rehype-tabs.ts +0 -121
- package/utils/base.ts +0 -15
- package/utils/canonical.ts +0 -19
- package/utils/collection-fs.ts +0 -20
- package/utils/createPathFormatter.ts +0 -60
- package/utils/createTranslationSystem.ts +0 -137
- package/utils/error-map.ts +0 -222
- package/utils/format-path.ts +0 -7
- package/utils/generateToC.ts +0 -33
- package/utils/git.ts +0 -121
- package/utils/gitInlined.ts +0 -20
- package/utils/head.ts +0 -235
- package/utils/i18n.ts +0 -221
- package/utils/localizedUrl.ts +0 -51
- package/utils/navigation.ts +0 -574
- package/utils/path.ts +0 -58
- package/utils/plugins.ts +0 -498
- package/utils/routing/data.ts +0 -154
- package/utils/routing/index.ts +0 -139
- package/utils/routing/middleware.ts +0 -81
- package/utils/routing/types.ts +0 -101
- package/utils/slugs.ts +0 -119
- package/utils/starlight-page.ts +0 -205
- package/utils/translations-fs.ts +0 -54
- package/utils/translations.ts +0 -57
- package/utils/types.ts +0 -15
- package/utils/user-config.ts +0 -348
- package/utils/validateLogoImports.ts +0 -21
- package/utils/zodDeepMerge.ts +0 -144
- package/virtual-internal.d.ts +0 -149
- package/virtual.d.ts +0 -27
- /package/{components → dist/components}/AnchorHeading.astro +0 -0
- /package/{components → dist/components}/Banner.astro +0 -0
- /package/{components → dist/components}/ContentNotice.astro +0 -0
- /package/{components → dist/components}/ContentPanel.astro +0 -0
- /package/{components → dist/components}/DraftContentNotice.astro +0 -0
- /package/{components → dist/components}/EditLink.astro +0 -0
- /package/{components → dist/components}/FallbackContentNotice.astro +0 -0
- /package/{components → dist/components}/Footer.astro +0 -0
- /package/{components → dist/components}/Head.astro +0 -0
- /package/{components → dist/components}/Header.astro +0 -0
- /package/{components → dist/components}/Hero.astro +0 -0
- /package/{components → dist/components}/LanguageSelect.astro +0 -0
- /package/{components → dist/components}/LastUpdated.astro +0 -0
- /package/{components → dist/components}/MarkdownContent.astro +0 -0
- /package/{components → dist/components}/MobileMenuFooter.astro +0 -0
- /package/{components → dist/components}/MobileTableOfContents.astro +0 -0
- /package/{components → dist/components}/Page.astro +0 -0
- /package/{components → dist/components}/PageSidebar.astro +0 -0
- /package/{components → dist/components}/PageTitle.astro +0 -0
- /package/{components → dist/components}/Pagination.astro +0 -0
- /package/{components → dist/components}/Search.astro +0 -0
- /package/{components → dist/components}/Select.astro +0 -0
- /package/{components → dist/components}/Sidebar.astro +0 -0
- /package/{components → dist/components}/SidebarPersister.astro +0 -0
- /package/{components → dist/components}/SidebarRestorePoint.astro +0 -0
- /package/{components → dist/components}/SidebarSublist.astro +0 -0
- /package/{components → dist/components}/SiteTitle.astro +0 -0
- /package/{components → dist/components}/SkipLink.astro +0 -0
- /package/{components → dist/components}/SocialIcons.astro +0 -0
- /package/{components → dist/components}/StarlightPage.astro +0 -0
- /package/{components → dist/components}/TableOfContents.astro +0 -0
- /package/{components → dist/components}/ThemeProvider.astro +0 -0
- /package/{components → dist/components}/ThemeSelect.astro +0 -0
- /package/{components → dist/components}/TwoColumnContent.astro +0 -0
- /package/{components-internals → dist/components-internals}/TableOfContents/TableOfContentsList.astro +0 -0
- /package/{components.ts → dist/components.ts} +0 -0
- /package/{routes → dist/routes}/common.astro +0 -0
- /package/{routes → dist/routes}/ssr/404.astro +0 -0
- /package/{routes → dist/routes}/ssr/index.astro +0 -0
- /package/{routes → dist/routes}/static/404.astro +0 -0
- /package/{routes → dist/routes}/static/index.astro +0 -0
- /package/{style → dist/style}/anchor-links.css +0 -0
- /package/{style → dist/style}/asides.css +0 -0
- /package/{style → dist/style}/layers.css +0 -0
- /package/{style → dist/style}/markdown.css +0 -0
- /package/{style → dist/style}/print.css +0 -0
- /package/{style → dist/style}/props.css +0 -0
- /package/{style → dist/style}/reset.css +0 -0
- /package/{style → dist/style}/util.css +0 -0
- /package/{user-components → dist/user-components}/Aside.astro +0 -0
- /package/{user-components → dist/user-components}/Badge.astro +0 -0
- /package/{user-components → dist/user-components}/Card.astro +0 -0
- /package/{user-components → dist/user-components}/CardGrid.astro +0 -0
- /package/{user-components → dist/user-components}/Icon.astro +0 -0
- /package/{user-components → dist/user-components}/LinkButton.astro +0 -0
- /package/{user-components → dist/user-components}/LinkCard.astro +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { MarkdownProcessorPluginOptions } from "./markdown-processor.js";
|
|
2
|
+
import { Root } from "mdast";
|
|
3
|
+
import { Plugin } from "unified";
|
|
4
|
+
//#region src/integrations/remark-asides.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* remark plugin that converts blocks delimited with `:::` into styled
|
|
7
|
+
* asides (a.k.a. “callouts”, “admonitions”, etc.). Depends on the
|
|
8
|
+
* `remark-directive` module for the core parsing logic.
|
|
9
|
+
*
|
|
10
|
+
* For example, this Markdown
|
|
11
|
+
*
|
|
12
|
+
* ```md
|
|
13
|
+
* :::tip[Did you know?]
|
|
14
|
+
* Astro helps you build faster websites with “Islands Architecture”.
|
|
15
|
+
* :::
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* will produce this output
|
|
19
|
+
*
|
|
20
|
+
* ```astro
|
|
21
|
+
* <aside class="starlight-aside starlight-aside--tip" aria-label="Did you know?">
|
|
22
|
+
* <p class="starlight-aside__title" aria-hidden="true">Did you know?</p>
|
|
23
|
+
* <div class="starlight-aside__content">
|
|
24
|
+
* <p>Astro helps you build faster websites with “Islands Architecture”.</p>
|
|
25
|
+
* </div>
|
|
26
|
+
* </aside>
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
declare function remarkAsides(options: MarkdownProcessorPluginOptions): Plugin<[], Root>;
|
|
30
|
+
declare function remarkDirectivesRestoration(): (tree: Root) => void;
|
|
31
|
+
//#endregion
|
|
32
|
+
export { remarkAsides, remarkDirectivesRestoration };
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { parseIconChildren } from "./markdown-icon.js";
|
|
2
|
+
import { getAsideIcon, isAsideVariant } from "./aside-utils.js";
|
|
3
|
+
import { directiveToMarkdown } from "mdast-util-directive";
|
|
4
|
+
import { toMarkdown } from "mdast-util-to-markdown";
|
|
5
|
+
import { visit } from "unist-util-visit";
|
|
6
|
+
import { h, s } from "hastscript";
|
|
7
|
+
import { toString } from "mdast-util-to-string";
|
|
8
|
+
//#region src/integrations/remark-asides.ts
|
|
9
|
+
/** Hacky function that generates an mdast HTML tree ready for conversion to HTML by rehype. */
|
|
10
|
+
function h$1(el, attrs = {}, children = []) {
|
|
11
|
+
const { tagName, properties } = h(el, attrs);
|
|
12
|
+
return {
|
|
13
|
+
type: "paragraph",
|
|
14
|
+
data: {
|
|
15
|
+
hName: tagName,
|
|
16
|
+
hProperties: properties
|
|
17
|
+
},
|
|
18
|
+
children
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Hacky function that generates an mdast SVG tree ready for conversion to HTML by rehype. */
|
|
22
|
+
function s$1(el, attrs = {}, children = []) {
|
|
23
|
+
const { tagName, properties } = s(el, attrs);
|
|
24
|
+
return {
|
|
25
|
+
type: "paragraph",
|
|
26
|
+
data: {
|
|
27
|
+
hName: tagName,
|
|
28
|
+
hProperties: properties
|
|
29
|
+
},
|
|
30
|
+
children
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Checks if a node is a directive. */
|
|
34
|
+
function isNodeDirective(node) {
|
|
35
|
+
return node.type === "textDirective" || node.type === "leafDirective" || node.type === "containerDirective";
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Transforms back directives not handled by Starlight to avoid breaking user content.
|
|
39
|
+
* For example, a user might write `x:y` in the middle of a sentence, where `:y` would be
|
|
40
|
+
* identified as a text directive, which are not used by Starlight, and we definitely want that
|
|
41
|
+
* text to be rendered verbatim in the output.
|
|
42
|
+
*/
|
|
43
|
+
function transformUnhandledDirective(node, index, parent) {
|
|
44
|
+
let markdown = toMarkdown(node, { extensions: [directiveToMarkdown()] });
|
|
45
|
+
/**
|
|
46
|
+
* `mdast-util-to-markdown` assumes that the tree represents a complete document (as it's an AST
|
|
47
|
+
* and not a CST) and to follow the POSIX definition of a line (a sequence of zero or more
|
|
48
|
+
* non- <newline> characters plus a terminating <newline> character), a newline is automatically
|
|
49
|
+
* added at the end of the output so that the output is a valid file.
|
|
50
|
+
* In this specific case, we can safely remove the newline character at the end of the output
|
|
51
|
+
* before replacing the directive with its value.
|
|
52
|
+
*
|
|
53
|
+
* @see https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_206
|
|
54
|
+
* @see https://github.com/syntax-tree/mdast-util-to-markdown/blob/fd6a508cc619b862f75b762dcf876c6b8315d330/lib/index.js#L79-L85
|
|
55
|
+
*/
|
|
56
|
+
if (markdown.at(-1) === "\n") markdown = markdown.slice(0, -1);
|
|
57
|
+
const textNode = {
|
|
58
|
+
type: "text",
|
|
59
|
+
value: markdown
|
|
60
|
+
};
|
|
61
|
+
if (node.type === "textDirective") parent.children[index] = textNode;
|
|
62
|
+
else parent.children[index] = {
|
|
63
|
+
type: "paragraph",
|
|
64
|
+
children: [textNode]
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** Hacky function that generates the children of an mdast SVG tree. */
|
|
68
|
+
function makeSvgChildNodes(children) {
|
|
69
|
+
const nodes = [];
|
|
70
|
+
for (const child of children) {
|
|
71
|
+
if (child.type !== "element") continue;
|
|
72
|
+
nodes.push({
|
|
73
|
+
type: "paragraph",
|
|
74
|
+
data: {
|
|
75
|
+
hName: child.tagName,
|
|
76
|
+
hProperties: child.properties
|
|
77
|
+
},
|
|
78
|
+
children: makeSvgChildNodes(child.children)
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return nodes;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* remark plugin that converts blocks delimited with `:::` into styled
|
|
85
|
+
* asides (a.k.a. “callouts”, “admonitions”, etc.). Depends on the
|
|
86
|
+
* `remark-directive` module for the core parsing logic.
|
|
87
|
+
*
|
|
88
|
+
* For example, this Markdown
|
|
89
|
+
*
|
|
90
|
+
* ```md
|
|
91
|
+
* :::tip[Did you know?]
|
|
92
|
+
* Astro helps you build faster websites with “Islands Architecture”.
|
|
93
|
+
* :::
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
96
|
+
* will produce this output
|
|
97
|
+
*
|
|
98
|
+
* ```astro
|
|
99
|
+
* <aside class="starlight-aside starlight-aside--tip" aria-label="Did you know?">
|
|
100
|
+
* <p class="starlight-aside__title" aria-hidden="true">Did you know?</p>
|
|
101
|
+
* <div class="starlight-aside__content">
|
|
102
|
+
* <p>Astro helps you build faster websites with “Islands Architecture”.</p>
|
|
103
|
+
* </div>
|
|
104
|
+
* </aside>
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
function remarkAsides(options) {
|
|
108
|
+
const iconPaths = {
|
|
109
|
+
note: parseIconChildren(getAsideIcon("note")),
|
|
110
|
+
tip: parseIconChildren(getAsideIcon("tip")),
|
|
111
|
+
caution: parseIconChildren(getAsideIcon("caution")),
|
|
112
|
+
danger: parseIconChildren(getAsideIcon("danger"))
|
|
113
|
+
};
|
|
114
|
+
const transformer = (tree, file) => {
|
|
115
|
+
const lang = options.absolutePathToLang(file.path);
|
|
116
|
+
const t = options.useTranslations(lang);
|
|
117
|
+
visit(tree, (node, index, parent) => {
|
|
118
|
+
if (!parent || index === void 0 || !isNodeDirective(node)) return;
|
|
119
|
+
if (node.type === "textDirective" || node.type === "leafDirective") return;
|
|
120
|
+
const variant = node.name;
|
|
121
|
+
const attributes = node.attributes;
|
|
122
|
+
if (!isAsideVariant(variant)) return;
|
|
123
|
+
let title = t(`aside.${variant}`);
|
|
124
|
+
let titleNode = [{
|
|
125
|
+
type: "text",
|
|
126
|
+
value: title
|
|
127
|
+
}];
|
|
128
|
+
const firstChild = node.children[0];
|
|
129
|
+
if (firstChild?.type === "paragraph" && firstChild.data && "directiveLabel" in firstChild.data && firstChild.children.length > 0) {
|
|
130
|
+
titleNode = firstChild.children;
|
|
131
|
+
title = toString(firstChild.children);
|
|
132
|
+
node.children.splice(0, 1);
|
|
133
|
+
}
|
|
134
|
+
const iconPath = makeSvgChildNodes(attributes?.["icon"] ? parseIconChildren(getAsideIcon(variant, attributes?.["icon"])) : iconPaths[variant]);
|
|
135
|
+
const aside = h$1("aside", {
|
|
136
|
+
"aria-label": title,
|
|
137
|
+
class: `starlight-aside starlight-aside--${variant}`
|
|
138
|
+
}, [h$1("p", {
|
|
139
|
+
class: "starlight-aside__title",
|
|
140
|
+
"aria-hidden": "true"
|
|
141
|
+
}, [s$1("svg", {
|
|
142
|
+
viewBox: "0 0 24 24",
|
|
143
|
+
width: 16,
|
|
144
|
+
height: 16,
|
|
145
|
+
fill: "currentColor",
|
|
146
|
+
class: "starlight-aside__icon"
|
|
147
|
+
}, iconPath), ...titleNode]), h$1("div", { class: "starlight-aside__content" }, node.children)]);
|
|
148
|
+
parent.children[index] = aside;
|
|
149
|
+
});
|
|
150
|
+
};
|
|
151
|
+
return function attacher() {
|
|
152
|
+
return transformer;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
function remarkDirectivesRestoration() {
|
|
156
|
+
return function transformer(tree) {
|
|
157
|
+
visit(tree, (node, index, parent) => {
|
|
158
|
+
if (index !== void 0 && parent && (node.type === "textDirective" || node.type === "leafDirective") && node.data === void 0) {
|
|
159
|
+
transformUnhandledDirective(node, index, parent);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//#endregion
|
|
166
|
+
export { remarkAsides, remarkDirectivesRestoration };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { MarkdownProcessorPluginOptions } from "./markdown-processor.js";
|
|
2
|
+
import { remarkDirectivesRestoration } from "./remark-asides.js";
|
|
3
|
+
import { isUnifiedProcessor } from "@astrojs/markdown-remark";
|
|
4
|
+
import { Root } from "hast";
|
|
5
|
+
import { Root as Root$1 } from "mdast";
|
|
6
|
+
import { Plugin } from "unified";
|
|
7
|
+
declare namespace remark_rehype_d_exports {
|
|
8
|
+
export { isUnifiedProcessor, remarkDirectivesRestoration, starlightRehypePlugins, starlightRemarkPlugins };
|
|
9
|
+
}
|
|
10
|
+
/** List of remark plugins to apply. */
|
|
11
|
+
declare function starlightRemarkPlugins(options: MarkdownProcessorPluginOptions): RemarkPlugin[];
|
|
12
|
+
/** List of rehype plugins to apply. */
|
|
13
|
+
declare function starlightRehypePlugins(options: MarkdownProcessorPluginOptions): RehypePlugin[];
|
|
14
|
+
type RemarkPlugin = Plugin<[], Root$1>;
|
|
15
|
+
type RehypePlugin = Plugin<[], Root>;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { isUnifiedProcessor, remarkDirectivesRestoration, remark_rehype_d_exports, starlightRehypePlugins, starlightRemarkPlugins };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { getMarkdownProcessorPaths, shouldTransformPath } from "./markdown-processor.js";
|
|
2
|
+
import { rehypeRtlCodeSupport } from "./rehype-code-rtl-support.js";
|
|
3
|
+
import rehypeAutolinkHeadings from "./rehype-heading-links.js";
|
|
4
|
+
import { remarkAsides, remarkDirectivesRestoration } from "./remark-asides.js";
|
|
5
|
+
import { isUnifiedProcessor, rehypeHeadingIds } from "@astrojs/markdown-remark";
|
|
6
|
+
import remarkDirective from "remark-directive";
|
|
7
|
+
//#region src/integrations/remark-rehype.ts
|
|
8
|
+
/** List of remark plugins to apply. */
|
|
9
|
+
function starlightRemarkPlugins(options) {
|
|
10
|
+
return [remarkDirective, remarkPlugins(options)];
|
|
11
|
+
}
|
|
12
|
+
/** List of rehype plugins to apply. */
|
|
13
|
+
function starlightRehypePlugins(options) {
|
|
14
|
+
return [...options.starlightConfig.markdown.headingLinks ? [[rehypeHeadingIds]] : [], rehypePlugins(options)];
|
|
15
|
+
}
|
|
16
|
+
/** Remark plugin applying other Starlight remark plugins if necessary. */
|
|
17
|
+
function remarkPlugins(options) {
|
|
18
|
+
const allowedPaths = getMarkdownProcessorPaths(options);
|
|
19
|
+
return function attacher() {
|
|
20
|
+
const remarkAsidesTransformer = remarkAsides(options).call(this);
|
|
21
|
+
return async function transformer(...args) {
|
|
22
|
+
const [, file] = args;
|
|
23
|
+
if (!shouldTransformFile(file, allowedPaths)) return;
|
|
24
|
+
await remarkAsidesTransformer(...args);
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Rehype plugin applying other Starlight rehype plugins if necessary. */
|
|
29
|
+
function rehypePlugins(options) {
|
|
30
|
+
const allowedPaths = getMarkdownProcessorPaths(options);
|
|
31
|
+
return function attacher() {
|
|
32
|
+
const rehypeRtlCodeSupportTransformer = rehypeRtlCodeSupport(options).call(this);
|
|
33
|
+
const rehypeAutolinkHeadingsTransformer = rehypeAutolinkHeadings(options).call(this);
|
|
34
|
+
return async function transformer(...args) {
|
|
35
|
+
const [, file] = args;
|
|
36
|
+
if (!shouldTransformFile(file, allowedPaths)) return;
|
|
37
|
+
await rehypeRtlCodeSupportTransformer(...args);
|
|
38
|
+
if (options.starlightConfig.markdown.headingLinks) await rehypeAutolinkHeadingsTransformer(...args);
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Determines if a file should be transformed by a remark/rehype plugin, e.g. files without a known
|
|
44
|
+
* path or files that are not part of the allowed paths are skipped.
|
|
45
|
+
*/
|
|
46
|
+
function shouldTransformFile(file, allowedPaths) {
|
|
47
|
+
if (!file?.path) return false;
|
|
48
|
+
return shouldTransformPath(file.path, allowedPaths);
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
export { isUnifiedProcessor, remarkDirectivesRestoration, starlightRehypePlugins, starlightRemarkPlugins };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { MarkdownProcessorPluginOptions } from "./markdown-processor.js";
|
|
2
|
+
import { HastPluginEntry, MdastPluginDefinition, MdastPluginEntry } from "satteri";
|
|
3
|
+
//#region src/integrations/satteri.d.ts
|
|
4
|
+
declare function starlightSatteriPlugins(options: MarkdownProcessorPluginOptions): {
|
|
5
|
+
mdastPlugins: MdastPluginEntry[];
|
|
6
|
+
hastPlugins: HastPluginEntry[];
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Recover directives Starlight didn't claim so user content isn't dropped
|
|
10
|
+
*/
|
|
11
|
+
declare function satteriDirectivesRestoration(): MdastPluginDefinition;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { satteriDirectivesRestoration, starlightSatteriPlugins };
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { headingLinkIconChildren } from "./markdown-icon.js";
|
|
2
|
+
import { getAsideIcon, isAsideVariant } from "./aside-utils.js";
|
|
3
|
+
import { getMarkdownProcessorPaths, shouldTransformPath } from "./markdown-processor.js";
|
|
4
|
+
import { satteriHeadingIdsPlugin } from "@astrojs/markdown-satteri";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { directiveToMarkdown } from "mdast-util-directive";
|
|
7
|
+
import { toMarkdown } from "mdast-util-to-markdown";
|
|
8
|
+
//#region src/integrations/satteri.ts
|
|
9
|
+
function starlightSatteriPlugins(options) {
|
|
10
|
+
const allowedPaths = getMarkdownProcessorPaths(options);
|
|
11
|
+
return {
|
|
12
|
+
mdastPlugins: [({ fileURL, sourceFormat }) => {
|
|
13
|
+
if (!shouldTransformPath(fileURL, allowedPaths)) return;
|
|
14
|
+
const lang = options.absolutePathToLang(fileURLToPath(fileURL));
|
|
15
|
+
return satteriAsidesPlugin(options.useTranslations(lang), sourceFormat);
|
|
16
|
+
}],
|
|
17
|
+
hastPlugins: [({ fileURL }) => {
|
|
18
|
+
if (!shouldTransformPath(fileURL, allowedPaths)) return;
|
|
19
|
+
const plugins = [satteriRtlCodeSupportPlugin()];
|
|
20
|
+
if (options.starlightConfig.markdown.headingLinks) {
|
|
21
|
+
const lang = options.absolutePathToLang(fileURLToPath(fileURL));
|
|
22
|
+
const t = options.useTranslations(lang);
|
|
23
|
+
plugins.push(satteriHeadingIdsPlugin(), satteriAutolinkHeadingsPlugin(t));
|
|
24
|
+
}
|
|
25
|
+
return plugins;
|
|
26
|
+
}]
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Recover directives Starlight didn't claim so user content isn't dropped
|
|
31
|
+
*/
|
|
32
|
+
function satteriDirectivesRestoration() {
|
|
33
|
+
return {
|
|
34
|
+
name: "starlight-directives-restoration",
|
|
35
|
+
textDirective(node) {
|
|
36
|
+
if (node.data !== void 0) return;
|
|
37
|
+
return {
|
|
38
|
+
type: "text",
|
|
39
|
+
value: serializeDirective(node)
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
leafDirective(node) {
|
|
43
|
+
if (node.data !== void 0) return;
|
|
44
|
+
return {
|
|
45
|
+
type: "paragraph",
|
|
46
|
+
children: [{
|
|
47
|
+
type: "text",
|
|
48
|
+
value: serializeDirective(node)
|
|
49
|
+
}]
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
containerDirective(node) {
|
|
53
|
+
if (node.data !== void 0) return;
|
|
54
|
+
return paragraphElement("div", {}, [...node.children]);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function paragraphElement(tagName, properties, children = []) {
|
|
59
|
+
return {
|
|
60
|
+
type: "paragraph",
|
|
61
|
+
data: {
|
|
62
|
+
hName: tagName,
|
|
63
|
+
hProperties: properties
|
|
64
|
+
},
|
|
65
|
+
children
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** Convert `:::variant` directive blocks into styled asides. */
|
|
69
|
+
function satteriAsidesPlugin(t, sourceFormat) {
|
|
70
|
+
return {
|
|
71
|
+
name: "starlight-asides",
|
|
72
|
+
containerDirective(node, ctx) {
|
|
73
|
+
if (!isAsideVariant(node.name)) return;
|
|
74
|
+
const variant = node.name;
|
|
75
|
+
let title = t(`aside.${variant}`);
|
|
76
|
+
let titleNode = [{
|
|
77
|
+
type: "text",
|
|
78
|
+
value: title
|
|
79
|
+
}];
|
|
80
|
+
const children = [...node.children];
|
|
81
|
+
const firstChild = children[0];
|
|
82
|
+
if (firstChild?.type === "paragraph" && firstChild.data?.directiveLabel && firstChild.children.length > 0) {
|
|
83
|
+
titleNode = firstChild.children;
|
|
84
|
+
title = ctx.textContent(firstChild);
|
|
85
|
+
children.shift();
|
|
86
|
+
}
|
|
87
|
+
const iconSvg = `<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon">${getAsideIcon(variant, node.attributes?.["icon"])}</svg>`;
|
|
88
|
+
const iconNode = sourceFormat === "mdx" ? {
|
|
89
|
+
type: "mdxJsxTextElement",
|
|
90
|
+
name: "Fragment",
|
|
91
|
+
attributes: [{
|
|
92
|
+
type: "mdxJsxAttribute",
|
|
93
|
+
name: "set:html",
|
|
94
|
+
value: iconSvg
|
|
95
|
+
}]
|
|
96
|
+
} : {
|
|
97
|
+
type: "html",
|
|
98
|
+
value: iconSvg
|
|
99
|
+
};
|
|
100
|
+
return paragraphElement("aside", {
|
|
101
|
+
"aria-label": title,
|
|
102
|
+
class: `starlight-aside starlight-aside--${variant}`
|
|
103
|
+
}, [paragraphElement("p", {
|
|
104
|
+
class: "starlight-aside__title",
|
|
105
|
+
"aria-hidden": "true"
|
|
106
|
+
}, [iconNode, ...titleNode]), paragraphElement("div", { class: "starlight-aside__content" }, children)]);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function serializeDirective(node) {
|
|
111
|
+
const md = toMarkdown(node, { extensions: [directiveToMarkdown()] });
|
|
112
|
+
return md.at(-1) === "\n" ? md.slice(0, -1) : md;
|
|
113
|
+
}
|
|
114
|
+
function satteriRtlCodeSupportPlugin() {
|
|
115
|
+
return {
|
|
116
|
+
name: "starlight-rtl-code-support",
|
|
117
|
+
element: [{
|
|
118
|
+
filter: ["pre"],
|
|
119
|
+
visit(node, ctx) {
|
|
120
|
+
if (node.properties && "dir" in node.properties) return;
|
|
121
|
+
ctx.setProperty(node, "dir", "ltr");
|
|
122
|
+
}
|
|
123
|
+
}, {
|
|
124
|
+
filter: ["code"],
|
|
125
|
+
visit(node, ctx) {
|
|
126
|
+
if (!(node.properties && "dir" in node.properties) && !hasPreParent(node, ctx)) ctx.setProperty(node, "dir", "auto");
|
|
127
|
+
}
|
|
128
|
+
}]
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Check if any parent of `child` is a `<pre>` element by walking up the tree.
|
|
133
|
+
*/
|
|
134
|
+
function hasPreParent(child, ctx) {
|
|
135
|
+
while (child) {
|
|
136
|
+
const parent = ctx.parent(child);
|
|
137
|
+
if (parent?.type === "element" && parent.tagName === "pre") return true;
|
|
138
|
+
child = parent;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
function satteriAutolinkHeadingsPlugin(t) {
|
|
143
|
+
return {
|
|
144
|
+
name: "starlight-autolink-headings",
|
|
145
|
+
element: {
|
|
146
|
+
filter: [
|
|
147
|
+
"h1",
|
|
148
|
+
"h2",
|
|
149
|
+
"h3",
|
|
150
|
+
"h4",
|
|
151
|
+
"h5",
|
|
152
|
+
"h6"
|
|
153
|
+
],
|
|
154
|
+
visit(node, ctx) {
|
|
155
|
+
const id = node.properties?.["id"];
|
|
156
|
+
if (typeof id !== "string" || !id) return;
|
|
157
|
+
const accessibleLabel = t("heading.anchorLabel", {
|
|
158
|
+
title: ctx.textContent(node),
|
|
159
|
+
interpolation: { escapeValue: false }
|
|
160
|
+
});
|
|
161
|
+
return {
|
|
162
|
+
type: "element",
|
|
163
|
+
tagName: "div",
|
|
164
|
+
properties: { class: `sl-heading-wrapper level-${node.tagName}` },
|
|
165
|
+
children: [node, {
|
|
166
|
+
type: "element",
|
|
167
|
+
tagName: "a",
|
|
168
|
+
properties: {
|
|
169
|
+
class: "sl-anchor-link",
|
|
170
|
+
href: "#" + id
|
|
171
|
+
},
|
|
172
|
+
children: [{
|
|
173
|
+
type: "element",
|
|
174
|
+
tagName: "span",
|
|
175
|
+
properties: {
|
|
176
|
+
"aria-hidden": "true",
|
|
177
|
+
class: "sl-anchor-icon"
|
|
178
|
+
},
|
|
179
|
+
children: [{
|
|
180
|
+
type: "element",
|
|
181
|
+
tagName: "svg",
|
|
182
|
+
properties: {
|
|
183
|
+
width: "16",
|
|
184
|
+
height: "16",
|
|
185
|
+
viewBox: "0 0 24 24",
|
|
186
|
+
fill: "currentColor"
|
|
187
|
+
},
|
|
188
|
+
children: headingLinkIconChildren
|
|
189
|
+
}]
|
|
190
|
+
}, {
|
|
191
|
+
type: "element",
|
|
192
|
+
tagName: "span",
|
|
193
|
+
properties: {
|
|
194
|
+
class: "sr-only",
|
|
195
|
+
"data-pagefind-ignore": true
|
|
196
|
+
},
|
|
197
|
+
children: [{
|
|
198
|
+
type: "text",
|
|
199
|
+
value: accessibleLabel
|
|
200
|
+
}]
|
|
201
|
+
}]
|
|
202
|
+
}]
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
//#endregion
|
|
209
|
+
export { satteriDirectivesRestoration, starlightSatteriPlugins };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { StarlightConfig } from "../../utils/user-config.js";
|
|
2
|
+
import "../../types.js";
|
|
3
|
+
//#region src/integrations/shared/absolutePathToLang.d.ts
|
|
4
|
+
/** Get current language from an absolute file path. */
|
|
5
|
+
declare function absolutePathToLang(path: string, { docsPath, starlightConfig }: {
|
|
6
|
+
docsPath: string;
|
|
7
|
+
starlightConfig: Pick<StarlightConfig, 'defaultLocale' | 'locales'>;
|
|
8
|
+
}): string;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { absolutePathToLang };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { localeToLang } from "./localeToLang.js";
|
|
2
|
+
import { slugToLocale } from "./slugToLocale.js";
|
|
3
|
+
//#region src/integrations/shared/absolutePathToLang.ts
|
|
4
|
+
/** Get current language from an absolute file path. */
|
|
5
|
+
function absolutePathToLang(path, { docsPath, starlightConfig }) {
|
|
6
|
+
path = path?.replace(/\\/g, "/");
|
|
7
|
+
if (path && !path.startsWith("/") && docsPath.startsWith("/")) path = "/" + path;
|
|
8
|
+
const slug = path?.replace(docsPath, "");
|
|
9
|
+
const locale = slugToLocale(slug, starlightConfig);
|
|
10
|
+
return localeToLang(starlightConfig, locale);
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { absolutePathToLang };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { StarlightConfig } from "../../utils/user-config.js";
|
|
2
|
+
import "../../types.js";
|
|
3
|
+
//#region src/integrations/shared/localeToLang.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Get the BCP-47 language tag for the given locale.
|
|
6
|
+
* @param locale Locale string or `undefined` for the root locale.
|
|
7
|
+
*/
|
|
8
|
+
declare function localeToLang(config: Pick<StarlightConfig, 'defaultLocale' | 'locales'>, locale: string | undefined): string;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { localeToLang };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BuiltInDefaultLocale } from "../../utils/i18n.js";
|
|
2
|
+
//#region src/integrations/shared/localeToLang.ts
|
|
3
|
+
/**
|
|
4
|
+
* Get the BCP-47 language tag for the given locale.
|
|
5
|
+
* @param locale Locale string or `undefined` for the root locale.
|
|
6
|
+
*/
|
|
7
|
+
function localeToLang(config, locale) {
|
|
8
|
+
const lang = locale ? config.locales?.[locale]?.lang : config.locales?.root?.lang;
|
|
9
|
+
const defaultLang = config.defaultLocale?.lang || config.defaultLocale?.locale;
|
|
10
|
+
return lang || defaultLang || BuiltInDefaultLocale.lang;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { localeToLang };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { StarlightConfig } from "../../utils/user-config.js";
|
|
2
|
+
import "../../types.js";
|
|
3
|
+
//#region src/integrations/shared/slugToLocale.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Get the “locale” of a slug. This is the base path at which a language is served.
|
|
6
|
+
* For example, if French docs are in `src/content/docs/french/`, the locale is `french`.
|
|
7
|
+
* Root locale slugs will return `undefined`.
|
|
8
|
+
* @param slug A collection entry slug
|
|
9
|
+
*/
|
|
10
|
+
declare function slugToLocale(slug: string | undefined, config: Pick<StarlightConfig, 'defaultLocale' | 'locales'>): string | undefined;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { slugToLocale };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/integrations/shared/slugToLocale.ts
|
|
2
|
+
/**
|
|
3
|
+
* Get the “locale” of a slug. This is the base path at which a language is served.
|
|
4
|
+
* For example, if French docs are in `src/content/docs/french/`, the locale is `french`.
|
|
5
|
+
* Root locale slugs will return `undefined`.
|
|
6
|
+
* @param slug A collection entry slug
|
|
7
|
+
*/
|
|
8
|
+
function slugToLocale(slug, config) {
|
|
9
|
+
const localesConfig = config.locales ?? {};
|
|
10
|
+
const baseSegment = slug?.split("/")[0];
|
|
11
|
+
if (baseSegment && localesConfig[baseSegment]) return baseSegment;
|
|
12
|
+
if (!localesConfig.root) return config.defaultLocale.locale;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { slugToLocale };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { StarlightConfig } from "../utils/user-config.js";
|
|
2
|
+
import "../types.js";
|
|
3
|
+
import { SitemapOptions } from "@astrojs/sitemap";
|
|
4
|
+
//#region src/integrations/sitemap.d.ts
|
|
5
|
+
declare function getSitemapConfig(opts: StarlightConfig): SitemapOptions;
|
|
6
|
+
/**
|
|
7
|
+
* A wrapped version of the `@astrojs/sitemap` integration configured based
|
|
8
|
+
* on Starlight i18n config.
|
|
9
|
+
*/
|
|
10
|
+
declare function starlightSitemap(opts: StarlightConfig): import("astro").AstroIntegration;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { getSitemapConfig, starlightSitemap };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import sitemap from "@astrojs/sitemap";
|
|
2
|
+
//#region src/integrations/sitemap.ts
|
|
3
|
+
function getSitemapConfig(opts) {
|
|
4
|
+
const sitemapConfig = {};
|
|
5
|
+
if (opts.isMultilingual) sitemapConfig.i18n = {
|
|
6
|
+
defaultLocale: opts.defaultLocale.locale || "root",
|
|
7
|
+
locales: Object.fromEntries(Object.entries(opts.locales).map(([locale, config]) => [locale, config.lang]))
|
|
8
|
+
};
|
|
9
|
+
return sitemapConfig;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A wrapped version of the `@astrojs/sitemap` integration configured based
|
|
13
|
+
* on Starlight i18n config.
|
|
14
|
+
*/
|
|
15
|
+
function starlightSitemap(opts) {
|
|
16
|
+
return sitemap(getSitemapConfig(opts));
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { getSitemapConfig, starlightSitemap };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ViteUserConfig } from "astro";
|
|
2
|
+
//#region src/integrations/vite-layer-order.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Vite plugin that ensures the StarlightPage component is always imported first when imported in
|
|
5
|
+
* an Astro file.
|
|
6
|
+
*
|
|
7
|
+
* This is necessary to ensure a predictable CSS layer order which is defined by the `<Page />`
|
|
8
|
+
* imported by the `<StarlightPage />` component. If a user imports any other component using
|
|
9
|
+
* cascade layers before the `<StarlightPage />` component, it will result in undesired layers
|
|
10
|
+
* being created before we explicitly set the expected layer order.
|
|
11
|
+
*/
|
|
12
|
+
declare function vitePluginStarlightCssLayerOrder(): VitePlugin;
|
|
13
|
+
type VitePlugin = NonNullable<ViteUserConfig['plugins']>[number];
|
|
14
|
+
//#endregion
|
|
15
|
+
export { vitePluginStarlightCssLayerOrder };
|