livemark 0.7.2 → 0.9.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/README.md +115 -4
- package/package.json +15 -14
- package/source/actions/changelog/build.ts +245 -0
- package/source/actions/changelog/build.unit.ts +69 -0
- package/source/actions/config/define.ts +11 -0
- package/source/actions/config/define.unit.ts +33 -0
- package/source/actions/config/load.ts +22 -0
- package/source/actions/config/load.unit.ts +30 -0
- package/source/commands/build.ts +21 -0
- package/source/commands/escape.ts +77 -0
- package/source/commands/preview.ts +25 -0
- package/source/commands/start.ts +26 -0
- package/{build/website → source}/components/Article.tsx +44 -44
- package/{build/website → source}/components/Callout.tsx +1 -1
- package/{build/website → source}/components/Layout.tsx +3 -14
- package/{build/website → source}/components/LinkButton.tsx +1 -1
- package/{build/website → source}/components/PageToolbar.tsx +21 -8
- package/{build/website → source}/components/Section.tsx +1 -1
- package/{build/website → source}/components/SectionHeader.tsx +1 -1
- package/{build/website/components/MiniSidebar.tsx → source/components/Sidebar.tsx} +21 -5
- package/{build/website/components/Sidebar.tsx → source/components/SidebarArticles.tsx} +22 -55
- package/source/components/SidebarPosts.tsx +129 -0
- package/source/components/SidebarReleases.tsx +85 -0
- package/{build/website → source}/content-collections.ts +12 -3
- package/{build/website → source}/elements/accordion.tsx +1 -1
- package/{build/website → source}/elements/alert-dialog.tsx +1 -1
- package/{build/website → source}/elements/alert.tsx +1 -1
- package/{build/website → source}/elements/aspect-ratio.tsx +1 -1
- package/{build/website → source}/elements/avatar.tsx +1 -1
- package/{build/website → source}/elements/badge.tsx +1 -1
- package/{build/website → source}/elements/breadcrumb.tsx +1 -1
- package/{build/website → source}/elements/button-group.tsx +1 -1
- package/{build/website → source}/elements/button.tsx +1 -1
- package/{build/website → source}/elements/calendar.tsx +1 -1
- package/{build/website → source}/elements/card.tsx +1 -1
- package/{build/website → source}/elements/carousel.tsx +1 -1
- package/{build/website → source}/elements/chart.tsx +1 -1
- package/{build/website → source}/elements/checkbox.tsx +1 -1
- package/{build/website → source}/elements/command.tsx +1 -1
- package/{build/website → source}/elements/context-menu.tsx +1 -1
- package/{build/website → source}/elements/dialog.tsx +1 -1
- package/{build/website → source}/elements/drawer.tsx +1 -1
- package/{build/website → source}/elements/dropdown-menu.tsx +1 -1
- package/{build/website → source}/elements/empty.tsx +1 -1
- package/{build/website → source}/elements/field.tsx +1 -1
- package/{build/website → source}/elements/hover-card.tsx +1 -1
- package/{build/website → source}/elements/input-group.tsx +1 -1
- package/{build/website → source}/elements/input-otp.tsx +1 -1
- package/{build/website → source}/elements/input.tsx +1 -1
- package/{build/website → source}/elements/item.tsx +1 -1
- package/{build/website → source}/elements/kbd.tsx +1 -1
- package/{build/website → source}/elements/label.tsx +1 -1
- package/{build/website → source}/elements/menubar.tsx +1 -1
- package/{build/website → source}/elements/native-select.tsx +1 -1
- package/{build/website → source}/elements/navigation-menu.tsx +1 -1
- package/{build/website → source}/elements/pagination.tsx +1 -1
- package/{build/website → source}/elements/popover.tsx +1 -1
- package/{build/website → source}/elements/progress.tsx +1 -1
- package/{build/website → source}/elements/radio-group.tsx +1 -1
- package/{build/website → source}/elements/resizable.tsx +1 -1
- package/{build/website → source}/elements/scroll-area.tsx +1 -1
- package/{build/website → source}/elements/select.tsx +1 -1
- package/{build/website → source}/elements/separator.tsx +1 -1
- package/{build/website → source}/elements/sheet.tsx +1 -1
- package/{build/website → source}/elements/sidebar.tsx +7 -4
- package/{build/website → source}/elements/skeleton.tsx +1 -1
- package/{build/website → source}/elements/slider.tsx +1 -1
- package/{build/website → source}/elements/spinner.tsx +1 -1
- package/{build/website → source}/elements/switch.tsx +1 -1
- package/{build/website → source}/elements/table.tsx +1 -1
- package/{build/website → source}/elements/tabs.tsx +1 -1
- package/{build/website → source}/elements/textarea.tsx +1 -1
- package/{build/website → source}/elements/toggle-group.tsx +1 -1
- package/{build/website → source}/elements/toggle.tsx +1 -1
- package/{build/website → source}/elements/tooltip.tsx +1 -1
- package/source/entrypoints/main.ts +12 -0
- package/{build/website → source}/env.d.ts +1 -1
- package/source/helpers/program.ts +6 -0
- package/{build/website → source}/helpers/section.ts +1 -1
- package/source/hooks/media.ts +29 -0
- package/source/index.ts +1 -0
- package/{build/website → source}/models/article.ts +5 -0
- package/source/models/config.ts +51 -0
- package/source/models/link.ts +11 -0
- package/source/models/patch.ts +9 -0
- package/source/models/section.ts +45 -0
- package/source/models/theme.ts +74 -0
- package/source/program.ts +18 -0
- package/source/settings.ts +6 -0
- package/{build/website → source}/vite.config.ts +14 -9
- package/{build → target}/actions/changelog/build.d.ts +1 -0
- package/target/actions/changelog/build.js +187 -0
- package/target/actions/changelog/build.unit.js +66 -0
- package/target/actions/config/define.js +8 -0
- package/target/actions/config/define.unit.js +29 -0
- package/target/actions/config/load.js +25 -0
- package/target/actions/config/load.unit.js +23 -0
- package/target/client.d.ts +1 -0
- package/target/client.js +6 -0
- package/target/commands/build.js +14 -0
- package/target/commands/escape.js +56 -0
- package/target/commands/preview.js +18 -0
- package/target/commands/start.js +19 -0
- package/target/components/Abbr.d.ts +5 -0
- package/target/components/Abbr.js +9 -0
- package/target/components/AnsiCode.d.ts +4 -0
- package/target/components/AnsiCode.js +6 -0
- package/target/components/Article.d.ts +5 -0
- package/target/components/Article.js +104 -0
- package/target/components/BackToTop.d.ts +3 -0
- package/target/components/BackToTop.js +19 -0
- package/target/components/Banner.d.ts +2 -0
- package/target/components/Banner.js +12 -0
- package/target/components/BlogIndex.d.ts +4 -0
- package/target/components/BlogIndex.js +62 -0
- package/target/components/Breadcrumbs.d.ts +1 -0
- package/target/components/Breadcrumbs.js +13 -0
- package/target/components/Callout.d.ts +8 -0
- package/target/components/Callout.js +43 -0
- package/target/components/Card.d.ts +7 -0
- package/target/components/Card.js +17 -0
- package/target/components/Cards.d.ts +4 -0
- package/target/components/Cards.js +6 -0
- package/target/components/ChangelogIndex.d.ts +4 -0
- package/target/components/ChangelogIndex.js +57 -0
- package/target/components/CodeBlock.d.ts +1 -0
- package/target/components/CodeBlock.js +47 -0
- package/target/components/CodeTabs.d.ts +6 -0
- package/target/components/CodeTabs.js +49 -0
- package/target/components/Column.d.ts +4 -0
- package/target/components/Column.js +6 -0
- package/target/components/Columns.d.ts +5 -0
- package/target/components/Columns.js +10 -0
- package/target/components/Content.d.ts +3 -0
- package/target/components/Content.js +5 -0
- package/target/components/ContentTab.d.ts +5 -0
- package/target/components/ContentTab.js +6 -0
- package/target/components/ContentTabs.d.ts +5 -0
- package/target/components/ContentTabs.js +47 -0
- package/target/components/DefaultCatchBoundary.d.ts +2 -0
- package/target/components/DefaultCatchBoundary.js +20 -0
- package/target/components/DefinitionList.d.ts +7 -0
- package/target/components/DefinitionList.js +14 -0
- package/target/components/Details.d.ts +5 -0
- package/target/components/Details.js +13 -0
- package/target/components/FileTree.d.ts +4 -0
- package/target/components/FileTree.js +17 -0
- package/target/components/Footer.d.ts +2 -0
- package/target/components/Footer.js +9 -0
- package/target/components/FootnoteRef.d.ts +3 -0
- package/target/components/FootnoteRef.js +31 -0
- package/target/components/Heading.d.ts +8 -0
- package/target/components/Heading.js +18 -0
- package/target/components/InlineBadge.d.ts +5 -0
- package/target/components/InlineBadge.js +7 -0
- package/target/components/InlineIcon.d.ts +5 -0
- package/target/components/InlineIcon.js +10 -0
- package/target/components/InlineToc.d.ts +4 -0
- package/target/components/InlineToc.js +14 -0
- package/target/components/Layout.d.ts +4 -0
- package/target/components/Layout.js +65 -0
- package/target/components/LinkButton.d.ts +7 -0
- package/target/components/LinkButton.js +11 -0
- package/target/components/Mermaid.d.ts +4 -0
- package/target/components/Mermaid.js +8 -0
- package/target/components/MermaidRenderer.d.ts +4 -0
- package/target/components/MermaidRenderer.js +32 -0
- package/target/components/NotFound.d.ts +3 -0
- package/target/components/NotFound.js +10 -0
- package/target/components/PackageTabs.d.ts +9 -0
- package/target/components/PackageTabs.js +28 -0
- package/target/components/PageToolbar.d.ts +7 -0
- package/target/components/PageToolbar.js +34 -0
- package/target/components/PrevNext.d.ts +4 -0
- package/target/components/PrevNext.js +34 -0
- package/target/components/Search.d.ts +2 -0
- package/target/components/Search.js +16 -0
- package/target/components/SearchDialog.d.ts +5 -0
- package/target/components/SearchDialog.js +139 -0
- package/target/components/Section.d.ts +5 -0
- package/target/components/Section.js +8 -0
- package/target/components/SectionHeader.d.ts +7 -0
- package/target/components/SectionHeader.js +7 -0
- package/target/components/Sidebar.d.ts +4 -0
- package/target/components/Sidebar.js +33 -0
- package/target/components/SidebarArticles.d.ts +2 -0
- package/target/components/SidebarArticles.js +45 -0
- package/target/components/SidebarLinks.d.ts +4 -0
- package/target/components/SidebarLinks.js +26 -0
- package/target/components/SidebarPosts.d.ts +2 -0
- package/target/components/SidebarPosts.js +53 -0
- package/target/components/SidebarReleases.d.ts +2 -0
- package/target/components/SidebarReleases.js +35 -0
- package/target/components/SidebarSections.d.ts +4 -0
- package/target/components/SidebarSections.js +36 -0
- package/target/components/SiteTitle.d.ts +2 -0
- package/target/components/SiteTitle.js +12 -0
- package/target/components/SortableTable.d.ts +5 -0
- package/target/components/SortableTable.js +63 -0
- package/target/components/SoundCloud.d.ts +4 -0
- package/target/components/SoundCloud.js +7 -0
- package/target/components/TagIndex.d.ts +5 -0
- package/target/components/TagIndex.js +64 -0
- package/target/components/Theme.d.ts +1 -0
- package/target/components/Theme.js +21 -0
- package/target/components/Toc.d.ts +12 -0
- package/target/components/Toc.js +128 -0
- package/target/components/YouTube.d.ts +4 -0
- package/target/components/YouTube.js +6 -0
- package/target/components/ZoomImage.d.ts +4 -0
- package/target/components/ZoomImage.js +26 -0
- package/target/content/article.d.ts +43 -0
- package/target/content/article.js +54 -0
- package/target/content/tag.d.ts +2 -0
- package/target/content/tag.js +30 -0
- package/target/content-collections.d.ts +2 -0
- package/target/content-collections.js +200 -0
- package/target/elements/accordion.d.ts +6 -0
- package/target/elements/accordion.js +19 -0
- package/target/elements/alert-dialog.d.ts +18 -0
- package/target/elements/alert-dialog.js +44 -0
- package/target/elements/alert.d.ts +9 -0
- package/target/elements/alert.js +28 -0
- package/target/elements/aspect-ratio.d.ts +4 -0
- package/target/elements/aspect-ratio.js +9 -0
- package/target/elements/avatar.d.ts +11 -0
- package/target/elements/avatar.js +23 -0
- package/target/elements/badge.d.ts +7 -0
- package/target/elements/badge.js +34 -0
- package/target/elements/breadcrumb.d.ts +9 -0
- package/target/elements/breadcrumb.js +39 -0
- package/target/elements/button-group.d.ts +10 -0
- package/target/elements/button-group.js +37 -0
- package/target/elements/button.d.ts +8 -0
- package/target/elements/button.js +35 -0
- package/target/elements/calendar.d.ts +10 -0
- package/target/elements/calendar.js +76 -0
- package/target/elements/card.d.ts +11 -0
- package/target/elements/card.js +25 -0
- package/target/elements/carousel.d.ts +28 -0
- package/target/elements/carousel.js +95 -0
- package/target/elements/chart.d.ts +44 -0
- package/target/elements/chart.js +140 -0
- package/target/elements/checkbox.d.ts +3 -0
- package/target/elements/checkbox.js +9 -0
- package/target/elements/collapsible.d.ts +5 -0
- package/target/elements/collapsible.js +13 -0
- package/target/elements/command.d.ts +23 -0
- package/target/elements/command.js +42 -0
- package/target/elements/context-menu.d.ts +29 -0
- package/target/elements/context-menu.js +54 -0
- package/target/elements/dialog.d.ts +16 -0
- package/target/elements/dialog.js +41 -0
- package/target/elements/direction.d.ts +1 -0
- package/target/elements/direction.js +2 -0
- package/target/elements/drawer.d.ts +12 -0
- package/target/elements/drawer.js +38 -0
- package/target/elements/dropdown-menu.d.ts +24 -0
- package/target/elements/dropdown-menu.js +54 -0
- package/target/elements/empty.d.ts +11 -0
- package/target/elements/empty.js +34 -0
- package/target/elements/field.d.ts +24 -0
- package/target/elements/field.js +69 -0
- package/target/elements/hover-card.d.ts +5 -0
- package/target/elements/hover-card.js +14 -0
- package/target/elements/input-group.d.ts +18 -0
- package/target/elements/input-group.js +60 -0
- package/target/elements/input-otp.d.ts +11 -0
- package/target/elements/input-otp.js +21 -0
- package/target/elements/input.d.ts +2 -0
- package/target/elements/input.js +8 -0
- package/target/elements/item.d.ts +21 -0
- package/target/elements/item.js +79 -0
- package/target/elements/kbd.d.ts +3 -0
- package/target/elements/kbd.js +10 -0
- package/target/elements/label.d.ts +2 -0
- package/target/elements/label.js +8 -0
- package/target/elements/menubar.d.ts +29 -0
- package/target/elements/menubar.js +58 -0
- package/target/elements/native-select.d.ts +8 -0
- package/target/elements/native-select.js +16 -0
- package/target/elements/navigation-menu.d.ts +11 -0
- package/target/elements/navigation-menu.js +34 -0
- package/target/elements/pagination.d.ts +17 -0
- package/target/elements/pagination.js +33 -0
- package/target/elements/popover.d.ts +9 -0
- package/target/elements/popover.js +23 -0
- package/target/elements/progress.d.ts +7 -0
- package/target/elements/progress.js +21 -0
- package/target/elements/radio-group.d.ts +5 -0
- package/target/elements/radio-group.js +12 -0
- package/target/elements/resizable.d.ts +7 -0
- package/target/elements/resizable.js +14 -0
- package/target/elements/scroll-area.d.ts +4 -0
- package/target/elements/scroll-area.js +13 -0
- package/target/elements/select.d.ts +15 -0
- package/target/elements/select.js +39 -0
- package/target/elements/separator.d.ts +3 -0
- package/target/elements/separator.js +8 -0
- package/target/elements/sheet.d.ts +13 -0
- package/target/elements/sheet.js +41 -0
- package/target/elements/sidebar.d.ts +63 -0
- package/target/elements/sidebar.js +272 -0
- package/target/elements/skeleton.d.ts +2 -0
- package/target/elements/skeleton.js +7 -0
- package/target/elements/slider.d.ts +3 -0
- package/target/elements/slider.js +15 -0
- package/target/elements/sonner.d.ts +3 -0
- package/target/elements/sonner.js +23 -0
- package/target/elements/spinner.d.ts +2 -0
- package/target/elements/spinner.js +8 -0
- package/target/elements/switch.d.ts +5 -0
- package/target/elements/switch.js +8 -0
- package/target/elements/table.d.ts +9 -0
- package/target/elements/table.js +28 -0
- package/target/elements/tabs.d.ts +10 -0
- package/target/elements/tabs.js +29 -0
- package/target/elements/textarea.d.ts +2 -0
- package/target/elements/textarea.js +7 -0
- package/target/elements/toggle-group.d.ts +10 -0
- package/target/elements/toggle-group.js +24 -0
- package/target/elements/toggle.d.ts +8 -0
- package/target/elements/toggle.js +26 -0
- package/target/elements/tooltip.d.ts +6 -0
- package/target/elements/tooltip.js +18 -0
- package/target/entrypoints/main.js +12 -0
- package/target/helpers/article-icon.d.ts +3 -0
- package/target/helpers/article-icon.js +34 -0
- package/target/helpers/article.d.ts +24 -0
- package/target/helpers/article.js +73 -0
- package/target/helpers/changelog-source.d.ts +7 -0
- package/target/helpers/changelog-source.js +16 -0
- package/target/helpers/changelog-source.unit.d.ts +1 -0
- package/target/helpers/changelog-source.unit.js +33 -0
- package/target/helpers/dynamic-icon-resolver.d.ts +5 -0
- package/target/helpers/dynamic-icon-resolver.js +17 -0
- package/target/helpers/dynamic-icon.d.ts +5 -0
- package/target/helpers/dynamic-icon.js +8 -0
- package/target/helpers/favicon.d.ts +2 -0
- package/target/helpers/favicon.js +11 -0
- package/target/helpers/model.d.ts +3 -0
- package/target/helpers/model.js +4 -0
- package/target/helpers/program.js +5 -0
- package/target/helpers/resolve-asset-path.d.ts +2 -0
- package/target/helpers/resolve-asset-path.js +9 -0
- package/target/helpers/resolve-includes.d.ts +2 -0
- package/target/helpers/resolve-includes.js +113 -0
- package/target/helpers/resolve-includes.unit.d.ts +1 -0
- package/target/helpers/resolve-includes.unit.js +76 -0
- package/target/helpers/search-text.d.ts +2 -0
- package/target/helpers/search-text.js +16 -0
- package/target/helpers/section.d.ts +13 -0
- package/target/helpers/section.js +39 -0
- package/target/helpers/section.unit.d.ts +1 -0
- package/target/helpers/section.unit.js +62 -0
- package/target/helpers/theme.d.ts +5 -0
- package/target/helpers/theme.js +23 -0
- package/target/helpers/toc-context.d.ts +5 -0
- package/target/helpers/toc-context.js +8 -0
- package/target/helpers/toc.d.ts +3 -0
- package/target/helpers/toc.js +41 -0
- package/target/helpers/toc.unit.d.ts +1 -0
- package/target/helpers/toc.unit.js +65 -0
- package/target/hooks/in-view.d.ts +4 -0
- package/target/hooks/in-view.js +23 -0
- package/target/hooks/media.d.ts +6 -0
- package/target/hooks/media.js +25 -0
- package/target/index.js +2 -0
- package/target/models/article.d.ts +58 -0
- package/target/models/article.js +21 -0
- package/{build → target}/models/config.d.ts +10 -0
- package/target/models/config.js +34 -0
- package/target/models/link.js +9 -0
- package/{build → target}/models/patch.d.ts +5 -0
- package/target/models/patch.js +7 -0
- package/target/models/section.js +26 -0
- package/target/models/theme.js +73 -0
- package/target/models/toc.d.ts +5 -0
- package/target/models/toc.js +2 -0
- package/target/plugins/rehype-inline-code.d.ts +19 -0
- package/target/plugins/rehype-inline-code.js +55 -0
- package/target/plugins/rehype-task-list-a11y.d.ts +10 -0
- package/target/plugins/rehype-task-list-a11y.js +29 -0
- package/target/plugins/remark-abbr.d.ts +6 -0
- package/target/plugins/remark-abbr.js +39 -0
- package/target/plugins/remark-abbr.unit.d.ts +1 -0
- package/target/plugins/remark-abbr.unit.js +79 -0
- package/target/plugins/remark-ansi.d.ts +8 -0
- package/target/plugins/remark-ansi.js +239 -0
- package/target/plugins/remark-ansi.unit.d.ts +1 -0
- package/target/plugins/remark-ansi.unit.js +134 -0
- package/target/plugins/remark-badge.d.ts +6 -0
- package/target/plugins/remark-badge.js +43 -0
- package/target/plugins/remark-badge.unit.d.ts +1 -0
- package/target/plugins/remark-badge.unit.js +76 -0
- package/target/plugins/remark-button.d.ts +6 -0
- package/target/plugins/remark-button.js +52 -0
- package/target/plugins/remark-button.unit.d.ts +1 -0
- package/target/plugins/remark-button.unit.js +105 -0
- package/target/plugins/remark-callout.d.ts +4 -0
- package/target/plugins/remark-callout.js +39 -0
- package/target/plugins/remark-card.d.ts +4 -0
- package/target/plugins/remark-card.js +66 -0
- package/target/plugins/remark-code-tabs.d.ts +4 -0
- package/target/plugins/remark-code-tabs.js +72 -0
- package/target/plugins/remark-columns.d.ts +4 -0
- package/target/plugins/remark-columns.js +54 -0
- package/target/plugins/remark-custom-heading-id.d.ts +14 -0
- package/target/plugins/remark-custom-heading-id.js +54 -0
- package/target/plugins/remark-custom-heading-id.unit.d.ts +1 -0
- package/target/plugins/remark-custom-heading-id.unit.js +91 -0
- package/target/plugins/remark-deflist.d.ts +4 -0
- package/target/plugins/remark-deflist.js +31 -0
- package/target/plugins/remark-details.d.ts +4 -0
- package/target/plugins/remark-details.js +33 -0
- package/target/plugins/remark-filetree.d.ts +12 -0
- package/target/plugins/remark-filetree.js +61 -0
- package/target/plugins/remark-filetree.unit.d.ts +1 -0
- package/target/plugins/remark-filetree.unit.js +87 -0
- package/target/plugins/remark-github-callout.d.ts +4 -0
- package/target/plugins/remark-github-callout.js +62 -0
- package/target/plugins/remark-icon.d.ts +4 -0
- package/target/plugins/remark-icon.js +36 -0
- package/target/plugins/remark-image.d.ts +9 -0
- package/target/plugins/remark-image.js +26 -0
- package/target/plugins/remark-media.d.ts +6 -0
- package/target/plugins/remark-media.js +52 -0
- package/target/plugins/remark-media.unit.d.ts +1 -0
- package/target/plugins/remark-media.unit.js +54 -0
- package/target/plugins/remark-mermaid.d.ts +4 -0
- package/target/plugins/remark-mermaid.js +20 -0
- package/target/plugins/remark-npm.d.ts +4 -0
- package/target/plugins/remark-npm.js +32 -0
- package/target/plugins/remark-steps.d.ts +6 -0
- package/target/plugins/remark-steps.js +30 -0
- package/target/plugins/remark-steps.unit.d.ts +1 -0
- package/target/plugins/remark-steps.unit.js +65 -0
- package/target/plugins/remark-tab.d.ts +6 -0
- package/target/plugins/remark-tab.js +76 -0
- package/target/plugins/remark-tab.unit.d.ts +1 -0
- package/target/plugins/remark-tab.unit.js +156 -0
- package/target/plugins/remark-toc.d.ts +6 -0
- package/target/plugins/remark-toc.js +33 -0
- package/target/plugins/remark-toc.unit.d.ts +1 -0
- package/target/plugins/remark-toc.unit.js +57 -0
- package/target/plugins/shiki-icon.d.ts +16 -0
- package/target/plugins/shiki-icon.js +66 -0
- package/target/plugins/shiki-line-highlight.d.ts +27 -0
- package/target/plugins/shiki-line-highlight.js +140 -0
- package/target/plugins/vite-livemark.d.ts +13 -0
- package/target/plugins/vite-livemark.js +76 -0
- package/target/program.js +18 -0
- package/target/routeTree.gen.d.ts +57 -0
- package/target/routeTree.gen.js +27 -0
- package/target/router.d.ts +6 -0
- package/target/router.js +26 -0
- package/target/routes/$.d.ts +1 -0
- package/target/routes/$.js +85 -0
- package/target/routes/__root.d.ts +1 -0
- package/target/routes/__root.js +69 -0
- package/target/server.d.ts +2 -0
- package/target/server.js +7 -0
- package/target/settings.js +7 -0
- package/target/utils/style.d.ts +2 -0
- package/target/utils/style.js +6 -0
- package/target/vite.config.d.ts +2 -0
- package/target/vite.config.js +67 -0
- package/build/actions/changelog/build.js +0 -158
- package/build/actions/changelog/build.unit.js +0 -66
- package/build/actions/config/define.js +0 -8
- package/build/actions/config/define.unit.js +0 -29
- package/build/actions/config/load.js +0 -25
- package/build/actions/config/load.unit.js +0 -23
- package/build/commands/build.js +0 -14
- package/build/commands/escape.js +0 -56
- package/build/commands/preview.js +0 -18
- package/build/commands/start.js +0 -19
- package/build/docs/markdown/includes/example.d.ts +0 -58
- package/build/docs/markdown/includes/example.js +0 -5
- package/build/entrypoints/main.js +0 -12
- package/build/helpers/program.js +0 -5
- package/build/index.js +0 -2
- package/build/livemark.config.d.ts +0 -58
- package/build/livemark.config.js +0 -25
- package/build/models/config.js +0 -34
- package/build/models/link.js +0 -9
- package/build/models/patch.js +0 -7
- package/build/models/section.js +0 -26
- package/build/models/theme.js +0 -73
- package/build/package.json +0 -138
- package/build/program.js +0 -18
- package/build/settings.js +0 -7
- package/build/vite.config.d.ts +0 -2
- package/build/vite.config.js +0 -48
- package/build/website/components/BlogSidebar.tsx +0 -162
- package/build/website/components/ChangelogSidebar.tsx +0 -120
- package/build/website/hooks/media.ts +0 -19
- package/build/website/routeTree.gen.ts +0 -86
- /package/{build/website → source}/assets/logo.svg +0 -0
- /package/{build/website → source}/client.tsx +0 -0
- /package/{build/website → source}/components/Abbr.tsx +0 -0
- /package/{build/website → source}/components/AnsiCode.tsx +0 -0
- /package/{build/website → source}/components/BackToTop.tsx +0 -0
- /package/{build/website → source}/components/Banner.tsx +0 -0
- /package/{build/website → source}/components/BlogIndex.tsx +0 -0
- /package/{build/website → source}/components/Breadcrumbs.tsx +0 -0
- /package/{build/website → source}/components/Card.tsx +0 -0
- /package/{build/website → source}/components/Cards.tsx +0 -0
- /package/{build/website → source}/components/ChangelogIndex.tsx +0 -0
- /package/{build/website → source}/components/CodeBlock.tsx +0 -0
- /package/{build/website → source}/components/CodeTabs.tsx +0 -0
- /package/{build/website → source}/components/Column.tsx +0 -0
- /package/{build/website → source}/components/Columns.tsx +0 -0
- /package/{build/website → source}/components/Content.tsx +0 -0
- /package/{build/website → source}/components/ContentTab.tsx +0 -0
- /package/{build/website → source}/components/ContentTabs.tsx +0 -0
- /package/{build/website → source}/components/DefaultCatchBoundary.tsx +0 -0
- /package/{build/website → source}/components/DefinitionList.tsx +0 -0
- /package/{build/website → source}/components/Details.tsx +0 -0
- /package/{build/website → source}/components/FileTree.tsx +0 -0
- /package/{build/website → source}/components/Footer.tsx +0 -0
- /package/{build/website → source}/components/FootnoteRef.tsx +0 -0
- /package/{build/website → source}/components/Heading.tsx +0 -0
- /package/{build/website → source}/components/InlineBadge.tsx +0 -0
- /package/{build/website → source}/components/InlineIcon.tsx +0 -0
- /package/{build/website → source}/components/InlineToc.tsx +0 -0
- /package/{build/website → source}/components/Mermaid.tsx +0 -0
- /package/{build/website → source}/components/MermaidRenderer.tsx +0 -0
- /package/{build/website → source}/components/NotFound.tsx +0 -0
- /package/{build/website → source}/components/PackageTabs.tsx +0 -0
- /package/{build/website → source}/components/PrevNext.tsx +0 -0
- /package/{build/website → source}/components/Search.tsx +0 -0
- /package/{build/website → source}/components/SearchDialog.tsx +0 -0
- /package/{build/website → source}/components/SidebarLinks.tsx +0 -0
- /package/{build/website → source}/components/SidebarSections.tsx +0 -0
- /package/{build/website → source}/components/SiteTitle.tsx +0 -0
- /package/{build/website → source}/components/SortableTable.tsx +0 -0
- /package/{build/website → source}/components/SoundCloud.tsx +0 -0
- /package/{build/website → source}/components/TagIndex.tsx +0 -0
- /package/{build/website → source}/components/Theme.tsx +0 -0
- /package/{build/website → source}/components/Toc.tsx +0 -0
- /package/{build/website → source}/components/YouTube.tsx +0 -0
- /package/{build/website → source}/components/ZoomImage.tsx +0 -0
- /package/{build/website → source}/content/article.ts +0 -0
- /package/{build/website → source}/content/tag.ts +0 -0
- /package/{build/website → source}/elements/collapsible.tsx +0 -0
- /package/{build/website → source}/elements/direction.tsx +0 -0
- /package/{build/website → source}/elements/sonner.tsx +0 -0
- /package/{build/website → source}/helpers/article-icon.ts +0 -0
- /package/{build/website → source}/helpers/article.ts +0 -0
- /package/{build/website → source}/helpers/changelog-source.ts +0 -0
- /package/{build/website → source}/helpers/changelog-source.unit.ts +0 -0
- /package/{build/website → source}/helpers/dynamic-icon-resolver.tsx +0 -0
- /package/{build/website → source}/helpers/dynamic-icon.tsx +0 -0
- /package/{build/website → source}/helpers/favicon.ts +0 -0
- /package/{build/website → source}/helpers/model.ts +0 -0
- /package/{build/website → source}/helpers/resolve-asset-path.ts +0 -0
- /package/{build/website → source}/helpers/resolve-includes.ts +0 -0
- /package/{build/website → source}/helpers/resolve-includes.unit.ts +0 -0
- /package/{build/website → source}/helpers/search-text.ts +0 -0
- /package/{build/website → source}/helpers/section.unit.ts +0 -0
- /package/{build/website → source}/helpers/theme.ts +0 -0
- /package/{build/website → source}/helpers/toc-context.ts +0 -0
- /package/{build/website → source}/helpers/toc.ts +0 -0
- /package/{build/website → source}/helpers/toc.unit.ts +0 -0
- /package/{build/website → source}/hooks/in-view.ts +0 -0
- /package/{build/website → source}/models/toc.ts +0 -0
- /package/{build/website → source}/plugins/rehype-inline-code.ts +0 -0
- /package/{build/website → source}/plugins/rehype-task-list-a11y.ts +0 -0
- /package/{build/website → source}/plugins/remark-abbr.ts +0 -0
- /package/{build/website → source}/plugins/remark-abbr.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-ansi.ts +0 -0
- /package/{build/website → source}/plugins/remark-ansi.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-badge.ts +0 -0
- /package/{build/website → source}/plugins/remark-badge.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-button.ts +0 -0
- /package/{build/website → source}/plugins/remark-button.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-callout.ts +0 -0
- /package/{build/website → source}/plugins/remark-card.ts +0 -0
- /package/{build/website → source}/plugins/remark-code-tabs.ts +0 -0
- /package/{build/website → source}/plugins/remark-columns.ts +0 -0
- /package/{build/website → source}/plugins/remark-custom-heading-id.ts +0 -0
- /package/{build/website → source}/plugins/remark-custom-heading-id.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-deflist.ts +0 -0
- /package/{build/website → source}/plugins/remark-details.ts +0 -0
- /package/{build/website → source}/plugins/remark-filetree.ts +0 -0
- /package/{build/website → source}/plugins/remark-filetree.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-github-callout.ts +0 -0
- /package/{build/website → source}/plugins/remark-icon.ts +0 -0
- /package/{build/website → source}/plugins/remark-image.ts +0 -0
- /package/{build/website → source}/plugins/remark-media.ts +0 -0
- /package/{build/website → source}/plugins/remark-media.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-mermaid.ts +0 -0
- /package/{build/website → source}/plugins/remark-npm.ts +0 -0
- /package/{build/website → source}/plugins/remark-steps.ts +0 -0
- /package/{build/website → source}/plugins/remark-steps.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-tab.ts +0 -0
- /package/{build/website → source}/plugins/remark-tab.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-toc.ts +0 -0
- /package/{build/website → source}/plugins/remark-toc.unit.ts +0 -0
- /package/{build/website → source}/plugins/shiki-icon.ts +0 -0
- /package/{build/website → source}/plugins/shiki-line-highlight.ts +0 -0
- /package/{build/website → source}/plugins/vite-livemark.ts +0 -0
- /package/{build/website → source}/router.tsx +0 -0
- /package/{build/website → source}/routes/$.tsx +0 -0
- /package/{build/website → source}/routes/__root.tsx +0 -0
- /package/{build/website → source}/server.ts +0 -0
- /package/{build/website → source}/styles/general.css +0 -0
- /package/{build/website → source}/styles/markdown.css +0 -0
- /package/{build/website/helpers → source/utils}/style.ts +0 -0
- /package/{build → target}/actions/changelog/build.unit.d.ts +0 -0
- /package/{build → target}/actions/config/define.d.ts +0 -0
- /package/{build → target}/actions/config/define.unit.d.ts +0 -0
- /package/{build → target}/actions/config/load.d.ts +0 -0
- /package/{build → target}/actions/config/load.unit.d.ts +0 -0
- /package/{build → target}/commands/build.d.ts +0 -0
- /package/{build → target}/commands/escape.d.ts +0 -0
- /package/{build → target}/commands/preview.d.ts +0 -0
- /package/{build → target}/commands/start.d.ts +0 -0
- /package/{build → target}/entrypoints/main.d.ts +0 -0
- /package/{build → target}/helpers/program.d.ts +0 -0
- /package/{build → target}/index.d.ts +0 -0
- /package/{build → target}/models/link.d.ts +0 -0
- /package/{build → target}/models/section.d.ts +0 -0
- /package/{build → target}/models/theme.d.ts +0 -0
- /package/{build → target}/program.d.ts +0 -0
- /package/{build → target}/settings.d.ts +0 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronDown } from "lucide-react";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
export function Toc(props) {
|
|
5
|
+
const activeId = useActiveHeading(props.items);
|
|
6
|
+
if (props.items.length === 0 && !props.children)
|
|
7
|
+
return null;
|
|
8
|
+
return (_jsx("aside", { className: "hidden xl:block w-56 shrink-0", children: _jsxs("div", { className: "sticky top-20 max-h-[calc(100vh-5rem)] overflow-auto [scrollbar-width:none]", children: [props.children, props.items.length > 0 && (_jsxs("nav", { children: [
|
|
9
|
+
_jsx("p", { className: "text-sm font-medium mb-3", children: "Contents" }), _jsx("ul", { className: "text-sm border-l border-border", children: props.items.map(item => (_jsx("li", { children: _jsx("a", { href: item.url, "data-active": activeId === item.url.slice(1) || undefined, className: `-ms-px block py-1.5 border-l border-transparent text-muted-foreground transition-colors hover:text-foreground data-[active]:border-primary data-[active]:text-primary data-[active]:font-medium ${item.depth <= 2 ? "ps-3" : item.depth === 3 ? "ps-6" : "ps-8"}`, children: item.title }) }, item.url))) })
|
|
10
|
+
] }))] }) }));
|
|
11
|
+
}
|
|
12
|
+
/** Mobile-only sticky secondary bar showing the active heading and an
|
|
13
|
+
* overlay dropdown with the Contents + page Actions. */
|
|
14
|
+
export function MobileToc(props) {
|
|
15
|
+
const activeId = useActiveHeading(props.items);
|
|
16
|
+
const [open, setOpen] = useState(false);
|
|
17
|
+
const wrapperRef = useRef(null);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (!open)
|
|
20
|
+
return;
|
|
21
|
+
const onPointerDown = (event) => {
|
|
22
|
+
if (!wrapperRef.current?.contains(event.target))
|
|
23
|
+
setOpen(false);
|
|
24
|
+
};
|
|
25
|
+
const onKey = (event) => {
|
|
26
|
+
if (event.key === "Escape")
|
|
27
|
+
setOpen(false);
|
|
28
|
+
};
|
|
29
|
+
document.addEventListener("mousedown", onPointerDown);
|
|
30
|
+
document.addEventListener("keydown", onKey);
|
|
31
|
+
return () => {
|
|
32
|
+
document.removeEventListener("mousedown", onPointerDown);
|
|
33
|
+
document.removeEventListener("keydown", onKey);
|
|
34
|
+
};
|
|
35
|
+
}, [open]);
|
|
36
|
+
if (props.items.length === 0 && !props.children)
|
|
37
|
+
return null;
|
|
38
|
+
const active = props.items.find(item => item.url.slice(1) === activeId);
|
|
39
|
+
const title = active?.title ?? props.items[0]?.title ?? "Contents";
|
|
40
|
+
return (_jsxs("div", { ref: wrapperRef, className: "xl:hidden sticky top-16 z-20 border-b bg-background", children: [
|
|
41
|
+
_jsxs("button", { type: "button", onClick: () => setOpen(v => !v), "aria-expanded": open, className: "flex w-full items-center gap-3 px-4 py-3 text-sm text-muted-foreground", children: [
|
|
42
|
+
_jsx(ScrollProgressRing, {}), _jsx("span", { className: "truncate flex-1 text-left", children: title }), _jsx(ChevronDown, { className: `size-4 shrink-0 transition-transform ${open ? "rotate-180" : ""}` })
|
|
43
|
+
] }), open && (_jsx("div", { className: "absolute top-full left-0 right-0 mt-px max-h-[calc(100vh-8rem)] overflow-auto border-b bg-background shadow-md animate-in slide-in-from-top-2 fade-in-0 duration-200", children: _jsxs("div", { className: "space-y-4 px-4 pt-4 pb-4", children: [props.children, props.items.length > 0 && (_jsxs("nav", { children: [
|
|
44
|
+
_jsx("p", { className: "mb-2 text-sm font-medium", children: "Contents" }), _jsx("ul", { className: "border-l border-border text-sm", children: props.items.map(item => (_jsx("li", { children: _jsx("a", { href: item.url, "data-active": activeId === item.url.slice(1) || undefined, onClick: () => setOpen(false), className: `-ms-px block border-l border-transparent py-1.5 text-muted-foreground transition-colors hover:text-foreground data-[active]:border-primary data-[active]:font-medium data-[active]:text-primary ${item.depth <= 2 ? "ps-3" : item.depth === 3 ? "ps-6" : "ps-8"}`, children: item.title }) }, item.url))) })
|
|
45
|
+
] }))] }) }))] }));
|
|
46
|
+
}
|
|
47
|
+
function ScrollProgressRing() {
|
|
48
|
+
const progress = useScrollProgress();
|
|
49
|
+
const radius = 6;
|
|
50
|
+
const circumference = 2 * Math.PI * radius;
|
|
51
|
+
const offset = circumference * (1 - progress);
|
|
52
|
+
return (_jsxs("svg", { viewBox: "0 0 16 16", className: "size-4 shrink-0 -rotate-90", "aria-hidden": true, children: [
|
|
53
|
+
_jsx("circle", { cx: "8", cy: "8", r: radius, className: "stroke-muted-foreground/30", strokeWidth: "2", fill: "none" }), _jsx("circle", { cx: "8", cy: "8", r: radius, className: "stroke-primary transition-[stroke-dashoffset] duration-150", strokeWidth: "2", fill: "none", strokeLinecap: "round", strokeDasharray: circumference, strokeDashoffset: offset })
|
|
54
|
+
] }));
|
|
55
|
+
}
|
|
56
|
+
function useScrollProgress() {
|
|
57
|
+
const [progress, setProgress] = useState(0);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
const update = () => {
|
|
60
|
+
const max = document.documentElement.scrollHeight - window.innerHeight;
|
|
61
|
+
const next = max > 0 ? window.scrollY / max : 0;
|
|
62
|
+
setProgress(Math.min(1, Math.max(0, next)));
|
|
63
|
+
};
|
|
64
|
+
update();
|
|
65
|
+
window.addEventListener("scroll", update, { passive: true });
|
|
66
|
+
window.addEventListener("resize", update);
|
|
67
|
+
return () => {
|
|
68
|
+
window.removeEventListener("scroll", update);
|
|
69
|
+
window.removeEventListener("resize", update);
|
|
70
|
+
};
|
|
71
|
+
}, []);
|
|
72
|
+
return progress;
|
|
73
|
+
}
|
|
74
|
+
function useActiveHeading(items) {
|
|
75
|
+
const [activeId, setActiveId] = useState("");
|
|
76
|
+
const observer = useRef(null);
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
const ids = items.map(item => item.url.slice(1));
|
|
79
|
+
const elements = ids
|
|
80
|
+
.map(id => document.getElementById(id))
|
|
81
|
+
.filter(Boolean);
|
|
82
|
+
if (elements.length === 0)
|
|
83
|
+
return;
|
|
84
|
+
const visibleSet = new Map();
|
|
85
|
+
observer.current = new IntersectionObserver(entries => {
|
|
86
|
+
for (const entry of entries) {
|
|
87
|
+
if (entry.isIntersecting) {
|
|
88
|
+
visibleSet.set(entry.target.id, entry.time);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
visibleSet.delete(entry.target.id);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (visibleSet.size > 0) {
|
|
95
|
+
let latest = "";
|
|
96
|
+
let latestTime = 0;
|
|
97
|
+
for (const [id, time] of visibleSet) {
|
|
98
|
+
if (time > latestTime) {
|
|
99
|
+
latest = id;
|
|
100
|
+
latestTime = time;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
setActiveId(latest);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
const viewTop = window.scrollY;
|
|
107
|
+
let closest = "";
|
|
108
|
+
let closestDist = Number.POSITIVE_INFINITY;
|
|
109
|
+
for (const el of elements) {
|
|
110
|
+
const dist = Math.abs(viewTop - el.getBoundingClientRect().top - window.scrollY);
|
|
111
|
+
if (dist < closestDist) {
|
|
112
|
+
closest = el.id;
|
|
113
|
+
closestDist = dist;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
setActiveId(closest);
|
|
117
|
+
}
|
|
118
|
+
}, { threshold: 0.98 });
|
|
119
|
+
for (const el of elements) {
|
|
120
|
+
observer.current.observe(el);
|
|
121
|
+
}
|
|
122
|
+
return () => {
|
|
123
|
+
observer.current?.disconnect();
|
|
124
|
+
};
|
|
125
|
+
}, [items]);
|
|
126
|
+
return activeId;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvVG9jLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWtCLE1BQU0sT0FBTyxDQUFBO0FBR25FLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBaUQ7SUFDbkUsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTlDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUU1RCxPQUFPLENBQ0wsZ0JBQU8sU0FBUyxFQUFDLCtCQUErQixZQUM5QyxlQUFLLFNBQVMsRUFBQyw2RUFBNkUsYUFDekYsS0FBSyxDQUFDLFFBQVEsRUFDZCxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FDekI7d0JBQ0UsWUFBRyxTQUFTLEVBQUMsMEJBQTBCLHlCQUFhLEVBQ3BELGFBQUksU0FBUyxFQUFDLGdDQUFnQyxZQUMzQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ3ZCLHVCQUNFLFlBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLGlCQUNELFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQ3hELFNBQVMsRUFBRSxtTUFBbU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFD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QUUsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMxQixRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUM5QixDQUFDO1FBRUQsT0FBTyxHQUFHLEVBQUU7WUFDVixRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFBO1FBQ2hDLENBQUMsQ0FBQTtJQUNILENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFFWCxPQUFPLFFBQVEsQ0FBQTtBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tIFwibHVjaWRlLXJlYWN0XCJcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgdHlwZSBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHR5cGUgeyBUb2NJdGVtIH0gZnJvbSBcIi4uL21vZGVscy90b2MudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gVG9jKHByb3BzOiB7IGl0ZW1zOiBUb2NJdGVtW107IGNoaWxkcmVuPzogUmVhY3ROb2RlIH0pIHtcbiAgY29uc3QgYWN0aXZlSWQgPSB1c2VBY3RpdmVIZWFkaW5nKHByb3BzLml0ZW1zKVxuXG4gIGlmIChwcm9wcy5pdGVtcy5sZW5ndGggPT09IDAgJiYgIXByb3BzLmNoaWxkcmVuKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiAoXG4gICAgPGFzaWRlIGNsYXNzTmFtZT1cImhpZGRlbiB4bDpibG9jayB3LTU2IHNocmluay0wXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN0aWNreSB0b3AtMjAgbWF4LWgtW2NhbGMoMTAwdmgtNXJlbSldIG92ZXJmbG93LWF1dG8gW3Njcm9sbGJhci13aWR0aDpub25lXVwiPlxuICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgIHtwcm9wcy5pdGVtcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8bmF2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSBtYi0zXCI+Q29udGVudHM8L3A+XG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwidGV4dC1zbSBib3JkZXItbCBib3JkZXItYm9yZGVyXCI+XG4gICAgICAgICAgICAgIHtwcm9wcy5pdGVtcy5tYXAoaXRlbSA9PiAoXG4gICAgICAgICAgICAgICAgPGxpIGtleT17aXRlbS51cmx9PlxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgaHJlZj17aXRlbS51cmx9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEtYWN0aXZlPXthY3RpdmVJZCA9PT0gaXRlbS51cmwuc2xpY2UoMSkgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2AtbXMtcHggYmxvY2sgcHktMS41IGJvcmRlci1sIGJvcmRlci10cmFuc3BhcmVudCB0ZXh0LW11dGVkLWZvcmVncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGRhdGEtW2FjdGl2ZV06Ym9yZGVyLXByaW1hcnkgZGF0YS1bYWN0aXZlXTp0ZXh0LXByaW1hcnkgZGF0YS1bYWN0aXZlXTpmb250LW1lZGl1bSAke2l0ZW0uZGVwdGggPD0gMiA/IFwicHMtM1wiIDogaXRlbS5kZXB0aCA9PT0gMyA/IFwicHMtNlwiIDogXCJwcy04XCJ9YH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2l0ZW0udGl0bGV9XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvbmF2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9hc2lkZT5cbiAgKVxufVxuXG4vKiogTW9iaWxlLW9ubHkgc3RpY2t5IHNlY29uZGFyeSBiYXIgc2hvd2luZyB0aGUgYWN0aXZlIGhlYWRpbmcgYW5kIGFuXG4gKiBvdmVybGF5IGRyb3Bkb3duIHdpdGggdGhlIENvbnRlbnRzICsgcGFnZSBBY3Rpb25zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE1vYmlsZVRvYyhwcm9wczogeyBpdGVtczogVG9jSXRlbVtdOyBjaGlsZHJlbj86IFJlYWN0Tm9kZSB9KSB7XG4gIGNvbnN0IGFjdGl2ZUlkID0gdXNlQWN0aXZlSGVhZGluZyhwcm9wcy5pdGVtcylcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4pIHJldHVyblxuICAgIGNvbnN0IG9uUG9pbnRlckRvd24gPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghd3JhcHBlclJlZi5jdXJyZW50Py5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHNldE9wZW4oZmFsc2UpXG4gICAgfVxuICAgIGNvbnN0IG9uS2V5ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSBzZXRPcGVuKGZhbHNlKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIG9uUG9pbnRlckRvd24pXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgb25LZXkpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgb25Qb2ludGVyRG93bilcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIG9uS2V5KVxuICAgIH1cbiAgfSwgW29wZW5dKVxuXG4gIGlmIChwcm9wcy5pdGVtcy5sZW5ndGggPT09IDAgJiYgIXByb3BzLmNoaWxkcmVuKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGFjdGl2ZSA9IHByb3BzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnVybC5zbGljZSgxKSA9PT0gYWN0aXZlSWQpXG4gIGNvbnN0IHRpdGxlID0gYWN0aXZlPy50aXRsZSA/PyBwcm9wcy5pdGVtc1swXT8udGl0bGUgPz8gXCJDb250ZW50c1wiXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3dyYXBwZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9XCJ4bDpoaWRkZW4gc3RpY2t5IHRvcC0xNiB6LTIwIGJvcmRlci1iIGJnLWJhY2tncm91bmRcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE9wZW4odiA9PiAhdil9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e29wZW59XG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtMyBweC00IHB5LTMgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIlxuICAgICAgPlxuICAgICAgICA8U2Nyb2xsUHJvZ3Jlc3NSaW5nIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRydW5jYXRlIGZsZXgtMSB0ZXh0LWxlZnRcIj57dGl0bGV9PC9zcGFuPlxuICAgICAgICA8Q2hldnJvbkRvd25cbiAgICAgICAgICBjbGFzc05hbWU9e2BzaXplLTQgc2hyaW5rLTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gJHtvcGVuID8gXCJyb3RhdGUtMTgwXCIgOiBcIlwifWB9XG4gICAgICAgIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIHtvcGVuICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtZnVsbCBsZWZ0LTAgcmlnaHQtMCBtdC1weCBtYXgtaC1bY2FsYygxMDB2aC04cmVtKV0gb3ZlcmZsb3ctYXV0byBib3JkZXItYiBiZy1iYWNrZ3JvdW5kIHNoYWRvdy1tZCBhbmltYXRlLWluIHNsaWRlLWluLWZyb20tdG9wLTIgZmFkZS1pbi0wIGR1cmF0aW9uLTIwMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00IHB4LTQgcHQtNCBwYi00XCI+XG4gICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICB7cHJvcHMuaXRlbXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxuYXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibWItMiB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+Q29udGVudHM8L3A+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImJvcmRlci1sIGJvcmRlci1ib3JkZXIgdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAge3Byb3BzLml0ZW1zLm1hcChpdGVtID0+IChcbiAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17aXRlbS51cmx9PlxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtpdGVtLnVybH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYWN0aXZlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlSWQgPT09IGl0ZW0udXJsLnNsaWNlKDEpIHx8IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0T3BlbihmYWxzZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2AtbXMtcHggYmxvY2sgYm9yZGVyLWwgYm9yZGVyLXRyYW5zcGFyZW50IHB5LTEuNSB0ZXh0LW11dGVkLWZvcmVncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGRhdGEtW2FjdGl2ZV06Ym9yZGVyLXByaW1hcnkgZGF0YS1bYWN0aXZlXTpmb250LW1lZGl1bSBkYXRhLVthY3RpdmVdOnRleHQtcHJpbWFyeSAke2l0ZW0uZGVwdGggPD0gMiA/IFwicHMtM1wiIDogaXRlbS5kZXB0aCA9PT0gMyA/IFwicHMtNlwiIDogXCJwcy04XCJ9YH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXRlbS50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L25hdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5mdW5jdGlvbiBTY3JvbGxQcm9ncmVzc1JpbmcoKSB7XG4gIGNvbnN0IHByb2dyZXNzID0gdXNlU2Nyb2xsUHJvZ3Jlc3MoKVxuICBjb25zdCByYWRpdXMgPSA2XG4gIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSAyICogTWF0aC5QSSAqIHJhZGl1c1xuICBjb25zdCBvZmZzZXQgPSBjaXJjdW1mZXJlbmNlICogKDEgLSBwcm9ncmVzcylcbiAgcmV0dXJuIChcbiAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBjbGFzc05hbWU9XCJzaXplLTQgc2hyaW5rLTAgLXJvdGF0ZS05MFwiIGFyaWEtaGlkZGVuPlxuICAgICAgPGNpcmNsZVxuICAgICAgICBjeD1cIjhcIlxuICAgICAgICBjeT1cIjhcIlxuICAgICAgICByPXtyYWRpdXN9XG4gICAgICAgIGNsYXNzTmFtZT1cInN0cm9rZS1tdXRlZC1mb3JlZ3JvdW5kLzMwXCJcbiAgICAgICAgc3Ryb2tlV2lkdGg9XCIyXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgLz5cbiAgICAgIDxjaXJjbGVcbiAgICAgICAgY3g9XCI4XCJcbiAgICAgICAgY3k9XCI4XCJcbiAgICAgICAgcj17cmFkaXVzfVxuICAgICAgICBjbGFzc05hbWU9XCJzdHJva2UtcHJpbWFyeSB0cmFuc2l0aW9uLVtzdHJva2UtZGFzaG9mZnNldF0gZHVyYXRpb24tMTUwXCJcbiAgICAgICAgc3Ryb2tlV2lkdGg9XCIyXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2VEYXNoYXJyYXk9e2NpcmN1bWZlcmVuY2V9XG4gICAgICAgIHN0cm9rZURhc2hvZmZzZXQ9e29mZnNldH1cbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIClcbn1cblxuZnVuY3Rpb24gdXNlU2Nyb2xsUHJvZ3Jlc3MoKSB7XG4gIGNvbnN0IFtwcm9ncmVzcywgc2V0UHJvZ3Jlc3NdID0gdXNlU3RhdGUoMClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB1cGRhdGUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBtYXggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgICBjb25zdCBuZXh0ID0gbWF4ID4gMCA/IHdpbmRvdy5zY3JvbGxZIC8gbWF4IDogMFxuICAgICAgc2V0UHJvZ3Jlc3MoTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbmV4dCkpKVxuICAgIH1cbiAgICB1cGRhdGUoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHVwZGF0ZSwgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdXBkYXRlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB1cGRhdGUpXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB1cGRhdGUpXG4gICAgfVxuICB9LCBbXSlcbiAgcmV0dXJuIHByb2dyZXNzXG59XG5cbmZ1bmN0aW9uIHVzZUFjdGl2ZUhlYWRpbmcoaXRlbXM6IFRvY0l0ZW1bXSkge1xuICBjb25zdCBbYWN0aXZlSWQsIHNldEFjdGl2ZUlkXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIilcbiAgY29uc3Qgb2JzZXJ2ZXIgPSB1c2VSZWY8SW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsPihudWxsKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaWRzID0gaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS51cmwuc2xpY2UoMSkpXG4gICAgY29uc3QgZWxlbWVudHMgPSBpZHNcbiAgICAgIC5tYXAoaWQgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBIVE1MRWxlbWVudFtdXG5cbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICAgIGNvbnN0IHZpc2libGVTZXQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpXG5cbiAgICBvYnNlcnZlci5jdXJyZW50ID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgZW50cmllcyA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgICAgdmlzaWJsZVNldC5zZXQoZW50cnkudGFyZ2V0LmlkLCBlbnRyeS50aW1lKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2aXNpYmxlU2V0LmRlbGV0ZShlbnRyeS50YXJnZXQuaWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpc2libGVTZXQuc2l6ZSA+IDApIHtcbiAgICAgICAgICBsZXQgbGF0ZXN0ID0gXCJcIlxuICAgICAgICAgIGxldCBsYXRlc3RUaW1lID0gMFxuICAgICAgICAgIGZvciAoY29uc3QgW2lkLCB0aW1lXSBvZiB2aXNpYmxlU2V0KSB7XG4gICAgICAgICAgICBpZiAodGltZSA+IGxhdGVzdFRpbWUpIHtcbiAgICAgICAgICAgICAgbGF0ZXN0ID0gaWRcbiAgICAgICAgICAgICAgbGF0ZXN0VGltZSA9IHRpbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0QWN0aXZlSWQobGF0ZXN0KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHZpZXdUb3AgPSB3aW5kb3cuc2Nyb2xsWVxuICAgICAgICAgIGxldCBjbG9zZXN0ID0gXCJcIlxuICAgICAgICAgIGxldCBjbG9zZXN0RGlzdCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3QgPSBNYXRoLmFicyhcbiAgICAgICAgICAgICAgdmlld1RvcCAtIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHdpbmRvdy5zY3JvbGxZLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKGRpc3QgPCBjbG9zZXN0RGlzdCkge1xuICAgICAgICAgICAgICBjbG9zZXN0ID0gZWwuaWRcbiAgICAgICAgICAgICAgY2xvc2VzdERpc3QgPSBkaXN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldEFjdGl2ZUlkKGNsb3Nlc3QpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHRocmVzaG9sZDogMC45OCB9LFxuICAgIClcblxuICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMpIHtcbiAgICAgIG9ic2VydmVyLmN1cnJlbnQub2JzZXJ2ZShlbClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgb2JzZXJ2ZXIuY3VycmVudD8uZGlzY29ubmVjdCgpXG4gICAgfVxuICB9LCBbaXRlbXNdKVxuXG4gIHJldHVybiBhY3RpdmVJZFxufVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/** Renders a responsive YouTube iframe embed */
|
|
3
|
+
export function YouTube(props) {
|
|
4
|
+
return (_jsx("div", { className: "not-prose my-4 overflow-hidden rounded-lg border", children: _jsx("div", { className: "aspect-video", children: _jsx("iframe", { className: "h-full w-full", src: `https://www.youtube.com/embed/${props.id}`, title: "YouTube video", allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture", allowFullScreen: true }) }) }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWW91VHViZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL1lvdVR1YmUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxnREFBZ0Q7QUFDaEQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFxQjtJQUMzQyxPQUFPLENBQ0wsY0FBSyxTQUFTLEVBQUMsa0RBQWtELFlBQy9ELGNBQUssU0FBUyxFQUFDLGNBQWMsWUFDM0IsaUJBQ0UsU0FBUyxFQUFDLGVBQWUsRUFDekIsR0FBRyxFQUFFLGlDQUFpQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQ2hELEtBQUssRUFBQyxlQUFlLEVBQ3JCLEtBQUssRUFBQywwRkFBMEYsRUFDaEcsZUFBZSxTQUNmLEdBQ0UsR0FDRixDQUNQLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFJlbmRlcnMgYSByZXNwb25zaXZlIFlvdVR1YmUgaWZyYW1lIGVtYmVkICovXG5leHBvcnQgZnVuY3Rpb24gWW91VHViZShwcm9wczogeyBpZDogc3RyaW5nIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vdC1wcm9zZSBteS00IG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLWxnIGJvcmRlclwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhc3BlY3QtdmlkZW9cIj5cbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGxcIlxuICAgICAgICAgIHNyYz17YGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7cHJvcHMuaWR9YH1cbiAgICAgICAgICB0aXRsZT1cIllvdVR1YmUgdmlkZW9cIlxuICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgICAgICAgYWxsb3dGdWxsU2NyZWVuXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl19
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ComponentProps } from "react";
|
|
2
|
+
import "react-medium-image-zoom/dist/styles.css";
|
|
3
|
+
/** Image component with click-to-zoom and light/dark theme variant support */
|
|
4
|
+
export declare function ZoomImage(props: ComponentProps<"img">): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import Zoom from "react-medium-image-zoom";
|
|
4
|
+
import "react-medium-image-zoom/dist/styles.css";
|
|
5
|
+
/** Image component with click-to-zoom and light/dark theme variant support */
|
|
6
|
+
export function ZoomImage(props) {
|
|
7
|
+
const [mounted, setMounted] = useState(false);
|
|
8
|
+
useEffect(() => setMounted(true), []);
|
|
9
|
+
const src = props.src ?? "";
|
|
10
|
+
let imgProps = props;
|
|
11
|
+
if (src.endsWith("#light")) {
|
|
12
|
+
imgProps = { ...props, src: src.slice(0, -6), className: "dark:hidden" };
|
|
13
|
+
}
|
|
14
|
+
else if (src.endsWith("#dark")) {
|
|
15
|
+
imgProps = {
|
|
16
|
+
...props,
|
|
17
|
+
src: src.slice(0, -5),
|
|
18
|
+
className: "hidden dark:block",
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const img = _jsx("img", { ...imgProps, alt: imgProps.alt ?? "" });
|
|
22
|
+
if (!mounted)
|
|
23
|
+
return img;
|
|
24
|
+
return _jsx(Zoom, { children: img });
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWm9vbUltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvWm9vbUltYWdlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXVCLE1BQU0sT0FBTyxDQUFBO0FBQ2hFLE9BQU8sSUFBSSxNQUFNLHlCQUF5QixDQUFBO0FBQzFDLE9BQU8seUNBQXlDLENBQUE7QUFFaEQsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBNEI7SUFDcEQsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0MsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUVyQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQTtJQUMzQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUE7SUFDcEIsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDM0IsUUFBUSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFBO0lBQzFFLENBQUM7U0FBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxRQUFRLEdBQUc7WUFDVCxHQUFHLEtBQUs7WUFDUixHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckIsU0FBUyxFQUFFLG1CQUFtQjtTQUMvQixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLGlCQUFTLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUksQ0FBQTtJQUMxRCxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sR0FBRyxDQUFBO0lBQ3hCLE9BQU8sS0FBQyxJQUFJLGNBQUUsR0FBRyxHQUFRLENBQUE7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUsIHR5cGUgQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFpvb20gZnJvbSBcInJlYWN0LW1lZGl1bS1pbWFnZS16b29tXCJcbmltcG9ydCBcInJlYWN0LW1lZGl1bS1pbWFnZS16b29tL2Rpc3Qvc3R5bGVzLmNzc1wiXG5cbi8qKiBJbWFnZSBjb21wb25lbnQgd2l0aCBjbGljay10by16b29tIGFuZCBsaWdodC9kYXJrIHRoZW1lIHZhcmlhbnQgc3VwcG9ydCAqL1xuZXhwb3J0IGZ1bmN0aW9uIFpvb21JbWFnZShwcm9wczogQ29tcG9uZW50UHJvcHM8XCJpbWdcIj4pIHtcbiAgY29uc3QgW21vdW50ZWQsIHNldE1vdW50ZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRNb3VudGVkKHRydWUpLCBbXSlcblxuICBjb25zdCBzcmMgPSBwcm9wcy5zcmMgPz8gXCJcIlxuICBsZXQgaW1nUHJvcHMgPSBwcm9wc1xuICBpZiAoc3JjLmVuZHNXaXRoKFwiI2xpZ2h0XCIpKSB7XG4gICAgaW1nUHJvcHMgPSB7IC4uLnByb3BzLCBzcmM6IHNyYy5zbGljZSgwLCAtNiksIGNsYXNzTmFtZTogXCJkYXJrOmhpZGRlblwiIH1cbiAgfSBlbHNlIGlmIChzcmMuZW5kc1dpdGgoXCIjZGFya1wiKSkge1xuICAgIGltZ1Byb3BzID0ge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBzcmM6IHNyYy5zbGljZSgwLCAtNSksXG4gICAgICBjbGFzc05hbWU6IFwiaGlkZGVuIGRhcms6YmxvY2tcIixcbiAgICB9XG4gIH1cblxuICBjb25zdCBpbWcgPSA8aW1nIHsuLi5pbWdQcm9wc30gYWx0PXtpbWdQcm9wcy5hbHQgPz8gXCJcIn0gLz5cbiAgaWYgKCFtb3VudGVkKSByZXR1cm4gaW1nXG4gIHJldHVybiA8Wm9vbT57aW1nfTwvWm9vbT5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ArticleGroup } from "../models/article.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Articles sorted by frontmatter `order`:
|
|
4
|
+
* positive values first (ascending), then unordered, then negative values
|
|
5
|
+
* (so `order: -1` lands at the very end, `-2` just before it, and so on).
|
|
6
|
+
*/
|
|
7
|
+
export declare const sortedArticles: any[];
|
|
8
|
+
/** The article whose path is `/`, if any (rendered in place at the root) */
|
|
9
|
+
export declare const homeArticle: any;
|
|
10
|
+
/** Sidebar sections derived from the path tree, partitioned by `group` */
|
|
11
|
+
export declare const articleGroups: ArticleGroup[];
|
|
12
|
+
/** Articles in depth-first order across all sections (matches sidebar walk) */
|
|
13
|
+
export declare const flatArticles: string[];
|
|
14
|
+
/** The first article in sidebar order, used as the default landing page */
|
|
15
|
+
export declare const firstArticle: any;
|
|
16
|
+
/** Per-section article groups, keyed by section prefix */
|
|
17
|
+
export declare const sectionArticleGroups: Map<string, ArticleGroup[]>;
|
|
18
|
+
/** Per-section flat article lists, keyed by section prefix */
|
|
19
|
+
export declare const sectionFlatArticles: Map<string, string[]>;
|
|
20
|
+
/** Per-section first article path, keyed by section prefix */
|
|
21
|
+
export declare const sectionFirstArticle: Map<string, string | undefined>;
|
|
22
|
+
/** Find which config section an article path belongs to */
|
|
23
|
+
export declare function currentSection(path: string): {
|
|
24
|
+
icon?: string | undefined;
|
|
25
|
+
title: string;
|
|
26
|
+
prefix: string;
|
|
27
|
+
position: "header" | "sidebar";
|
|
28
|
+
type: "article";
|
|
29
|
+
} | {
|
|
30
|
+
icon?: string | undefined;
|
|
31
|
+
title: string;
|
|
32
|
+
prefix: string;
|
|
33
|
+
position: "header" | "sidebar";
|
|
34
|
+
type: "blog";
|
|
35
|
+
} | {
|
|
36
|
+
icon?: string | undefined;
|
|
37
|
+
title: string;
|
|
38
|
+
prefix: string;
|
|
39
|
+
position: "header" | "sidebar";
|
|
40
|
+
type: "changelog";
|
|
41
|
+
source: string;
|
|
42
|
+
version?: boolean | undefined;
|
|
43
|
+
} | undefined;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { allArticles } from "content-collections";
|
|
2
|
+
import { buildArticleTree, flattenArticleTree, groupArticleTree, } from "../helpers/article.js";
|
|
3
|
+
import { matchSection, partitionBySection } from "../helpers/section.js";
|
|
4
|
+
/**
|
|
5
|
+
* Articles sorted by frontmatter `order`:
|
|
6
|
+
* positive values first (ascending), then unordered, then negative values
|
|
7
|
+
* (so `order: -1` lands at the very end, `-2` just before it, and so on).
|
|
8
|
+
*/
|
|
9
|
+
export const sortedArticles = [...allArticles].sort((a, b) => orderKey(a.order) - orderKey(b.order));
|
|
10
|
+
/** The article whose path is `/`, if any (rendered in place at the root) */
|
|
11
|
+
export const homeArticle = sortedArticles.find(a => a.path === "/");
|
|
12
|
+
/** Sidebar sections derived from the path tree, partitioned by `group` */
|
|
13
|
+
export const articleGroups = groupArticleTree(buildArticleTree(sortedArticles), sortedArticles);
|
|
14
|
+
/** Articles in depth-first order across all sections (matches sidebar walk) */
|
|
15
|
+
export const flatArticles = articleGroups.flatMap(group => flattenArticleTree(group.nodes));
|
|
16
|
+
/** The first article in sidebar order, used as the default landing page */
|
|
17
|
+
export const firstArticle = sortedArticles.find(a => a.path === flatArticles[0]);
|
|
18
|
+
function orderKey(order) {
|
|
19
|
+
if (order === undefined)
|
|
20
|
+
return Number.MAX_SAFE_INTEGER / 2;
|
|
21
|
+
if (order < 0)
|
|
22
|
+
return Number.MAX_SAFE_INTEGER + order;
|
|
23
|
+
return order;
|
|
24
|
+
}
|
|
25
|
+
const configSections = import.meta.env.CONFIG.sections;
|
|
26
|
+
/** Per-section article groups, keyed by section prefix */
|
|
27
|
+
export const sectionArticleGroups = new Map();
|
|
28
|
+
/** Per-section flat article lists, keyed by section prefix */
|
|
29
|
+
export const sectionFlatArticles = new Map();
|
|
30
|
+
/** Per-section first article path, keyed by section prefix */
|
|
31
|
+
export const sectionFirstArticle = new Map();
|
|
32
|
+
if (configSections?.length) {
|
|
33
|
+
const sectionByPrefix = new Map(configSections.map(s => [s.prefix, s]));
|
|
34
|
+
const buckets = partitionBySection(sortedArticles, configSections);
|
|
35
|
+
for (const [key, bucket] of buckets) {
|
|
36
|
+
const section = sectionByPrefix.get(key);
|
|
37
|
+
const sorted = section?.type === "blog" || section?.type === "changelog"
|
|
38
|
+
? [...bucket].sort((a, b) => new Date(b.date ?? 0).getTime() - new Date(a.date ?? 0).getTime())
|
|
39
|
+
: bucket;
|
|
40
|
+
const tree = buildArticleTree(sorted);
|
|
41
|
+
const groups = groupArticleTree(tree, sorted);
|
|
42
|
+
const flat = groups.flatMap(g => flattenArticleTree(g.nodes));
|
|
43
|
+
sectionArticleGroups.set(key, groups);
|
|
44
|
+
sectionFlatArticles.set(key, flat);
|
|
45
|
+
sectionFirstArticle.set(key, flat[0]);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Find which config section an article path belongs to */
|
|
49
|
+
export function currentSection(path) {
|
|
50
|
+
if (!configSections?.length)
|
|
51
|
+
return undefined;
|
|
52
|
+
return matchSection(path, configSections);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb250ZW50L2FydGljbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRWpELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGdCQUFnQixHQUNqQixNQUFNLHVCQUF1QixDQUFBO0FBQzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUV4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ2pELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUNoRCxDQUFBO0FBRUQsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQTtBQUVuRSwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUMzQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsRUFDaEMsY0FBYyxDQUNmLENBQUE7QUFFRCwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDeEQsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUNoQyxDQUFBO0FBRUQsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUVoRixTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUE7SUFDM0QsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtJQUNyRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQTtBQUV0RCwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUE7QUFFckUsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUFvQixDQUFBO0FBRTlELDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQTtBQUV4RSxJQUFJLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMzQixNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2RSxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDbEUsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDeEMsTUFBTSxNQUFNLEdBQ1YsT0FBTyxFQUFFLElBQUksS0FBSyxNQUFNLElBQUksT0FBTyxFQUFFLElBQUksS0FBSyxXQUFXO1lBQ3ZELENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUNkLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ1AsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUNwRTtZQUNILENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDWixNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzdELG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDckMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNsQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7QUFDSCxDQUFDO0FBRUQsMkRBQTJEO0FBQzNELE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBWTtJQUN6QyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU07UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUM3QyxPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUE7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFsbEFydGljbGVzIH0gZnJvbSBcImNvbnRlbnQtY29sbGVjdGlvbnNcIlxuaW1wb3J0IHR5cGUgeyBBcnRpY2xlR3JvdXAgfSBmcm9tIFwiLi4vbW9kZWxzL2FydGljbGUudHNcIlxuaW1wb3J0IHtcbiAgYnVpbGRBcnRpY2xlVHJlZSxcbiAgZmxhdHRlbkFydGljbGVUcmVlLFxuICBncm91cEFydGljbGVUcmVlLFxufSBmcm9tIFwiLi4vaGVscGVycy9hcnRpY2xlLnRzXCJcbmltcG9ydCB7IG1hdGNoU2VjdGlvbiwgcGFydGl0aW9uQnlTZWN0aW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvc2VjdGlvbi50c1wiXG5cbi8qKlxuICogQXJ0aWNsZXMgc29ydGVkIGJ5IGZyb250bWF0dGVyIGBvcmRlcmA6XG4gKiBwb3NpdGl2ZSB2YWx1ZXMgZmlyc3QgKGFzY2VuZGluZyksIHRoZW4gdW5vcmRlcmVkLCB0aGVuIG5lZ2F0aXZlIHZhbHVlc1xuICogKHNvIGBvcmRlcjogLTFgIGxhbmRzIGF0IHRoZSB2ZXJ5IGVuZCwgYC0yYCBqdXN0IGJlZm9yZSBpdCwgYW5kIHNvIG9uKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnRlZEFydGljbGVzID0gWy4uLmFsbEFydGljbGVzXS5zb3J0KFxuICAoYSwgYikgPT4gb3JkZXJLZXkoYS5vcmRlcikgLSBvcmRlcktleShiLm9yZGVyKSxcbilcblxuLyoqIFRoZSBhcnRpY2xlIHdob3NlIHBhdGggaXMgYC9gLCBpZiBhbnkgKHJlbmRlcmVkIGluIHBsYWNlIGF0IHRoZSByb290KSAqL1xuZXhwb3J0IGNvbnN0IGhvbWVBcnRpY2xlID0gc29ydGVkQXJ0aWNsZXMuZmluZChhID0+IGEucGF0aCA9PT0gXCIvXCIpXG5cbi8qKiBTaWRlYmFyIHNlY3Rpb25zIGRlcml2ZWQgZnJvbSB0aGUgcGF0aCB0cmVlLCBwYXJ0aXRpb25lZCBieSBgZ3JvdXBgICovXG5leHBvcnQgY29uc3QgYXJ0aWNsZUdyb3VwcyA9IGdyb3VwQXJ0aWNsZVRyZWUoXG4gIGJ1aWxkQXJ0aWNsZVRyZWUoc29ydGVkQXJ0aWNsZXMpLFxuICBzb3J0ZWRBcnRpY2xlcyxcbilcblxuLyoqIEFydGljbGVzIGluIGRlcHRoLWZpcnN0IG9yZGVyIGFjcm9zcyBhbGwgc2VjdGlvbnMgKG1hdGNoZXMgc2lkZWJhciB3YWxrKSAqL1xuZXhwb3J0IGNvbnN0IGZsYXRBcnRpY2xlcyA9IGFydGljbGVHcm91cHMuZmxhdE1hcChncm91cCA9PlxuICBmbGF0dGVuQXJ0aWNsZVRyZWUoZ3JvdXAubm9kZXMpLFxuKVxuXG4vKiogVGhlIGZpcnN0IGFydGljbGUgaW4gc2lkZWJhciBvcmRlciwgdXNlZCBhcyB0aGUgZGVmYXVsdCBsYW5kaW5nIHBhZ2UgKi9cbmV4cG9ydCBjb25zdCBmaXJzdEFydGljbGUgPSBzb3J0ZWRBcnRpY2xlcy5maW5kKGEgPT4gYS5wYXRoID09PSBmbGF0QXJ0aWNsZXNbMF0pXG5cbmZ1bmN0aW9uIG9yZGVyS2V5KG9yZGVyPzogbnVtYmVyKSB7XG4gIGlmIChvcmRlciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgLyAyXG4gIGlmIChvcmRlciA8IDApIHJldHVybiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiArIG9yZGVyXG4gIHJldHVybiBvcmRlclxufVxuXG5jb25zdCBjb25maWdTZWN0aW9ucyA9IGltcG9ydC5tZXRhLmVudi5DT05GSUcuc2VjdGlvbnNcblxuLyoqIFBlci1zZWN0aW9uIGFydGljbGUgZ3JvdXBzLCBrZXllZCBieSBzZWN0aW9uIHByZWZpeCAqL1xuZXhwb3J0IGNvbnN0IHNlY3Rpb25BcnRpY2xlR3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIEFydGljbGVHcm91cFtdPigpXG5cbi8qKiBQZXItc2VjdGlvbiBmbGF0IGFydGljbGUgbGlzdHMsIGtleWVkIGJ5IHNlY3Rpb24gcHJlZml4ICovXG5leHBvcnQgY29uc3Qgc2VjdGlvbkZsYXRBcnRpY2xlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKVxuXG4vKiogUGVyLXNlY3Rpb24gZmlyc3QgYXJ0aWNsZSBwYXRoLCBrZXllZCBieSBzZWN0aW9uIHByZWZpeCAqL1xuZXhwb3J0IGNvbnN0IHNlY3Rpb25GaXJzdEFydGljbGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPigpXG5cbmlmIChjb25maWdTZWN0aW9ucz8ubGVuZ3RoKSB7XG4gIGNvbnN0IHNlY3Rpb25CeVByZWZpeCA9IG5ldyBNYXAoY29uZmlnU2VjdGlvbnMubWFwKHMgPT4gW3MucHJlZml4LCBzXSkpXG4gIGNvbnN0IGJ1Y2tldHMgPSBwYXJ0aXRpb25CeVNlY3Rpb24oc29ydGVkQXJ0aWNsZXMsIGNvbmZpZ1NlY3Rpb25zKVxuICBmb3IgKGNvbnN0IFtrZXksIGJ1Y2tldF0gb2YgYnVja2V0cykge1xuICAgIGNvbnN0IHNlY3Rpb24gPSBzZWN0aW9uQnlQcmVmaXguZ2V0KGtleSlcbiAgICBjb25zdCBzb3J0ZWQgPVxuICAgICAgc2VjdGlvbj8udHlwZSA9PT0gXCJibG9nXCIgfHwgc2VjdGlvbj8udHlwZSA9PT0gXCJjaGFuZ2Vsb2dcIlxuICAgICAgICA/IFsuLi5idWNrZXRdLnNvcnQoXG4gICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgbmV3IERhdGUoYi5kYXRlID8/IDApLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEuZGF0ZSA/PyAwKS5nZXRUaW1lKCksXG4gICAgICAgICAgKVxuICAgICAgICA6IGJ1Y2tldFxuICAgIGNvbnN0IHRyZWUgPSBidWlsZEFydGljbGVUcmVlKHNvcnRlZClcbiAgICBjb25zdCBncm91cHMgPSBncm91cEFydGljbGVUcmVlKHRyZWUsIHNvcnRlZClcbiAgICBjb25zdCBmbGF0ID0gZ3JvdXBzLmZsYXRNYXAoZyA9PiBmbGF0dGVuQXJ0aWNsZVRyZWUoZy5ub2RlcykpXG4gICAgc2VjdGlvbkFydGljbGVHcm91cHMuc2V0KGtleSwgZ3JvdXBzKVxuICAgIHNlY3Rpb25GbGF0QXJ0aWNsZXMuc2V0KGtleSwgZmxhdClcbiAgICBzZWN0aW9uRmlyc3RBcnRpY2xlLnNldChrZXksIGZsYXRbMF0pXG4gIH1cbn1cblxuLyoqIEZpbmQgd2hpY2ggY29uZmlnIHNlY3Rpb24gYW4gYXJ0aWNsZSBwYXRoIGJlbG9uZ3MgdG8gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50U2VjdGlvbihwYXRoOiBzdHJpbmcpIHtcbiAgaWYgKCFjb25maWdTZWN0aW9ucz8ubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiBtYXRjaFNlY3Rpb24ocGF0aCwgY29uZmlnU2VjdGlvbnMpXG59XG4iXX0=
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { sectionFlatArticles, sortedArticles } from "./article.js";
|
|
2
|
+
const configSections = import.meta.env.CONFIG.sections;
|
|
3
|
+
/** Per-section tag → article paths mapping. Articles sorted by date descending. */
|
|
4
|
+
export const sectionTags = new Map();
|
|
5
|
+
if (configSections?.length) {
|
|
6
|
+
for (const section of configSections) {
|
|
7
|
+
if (section.type !== "blog")
|
|
8
|
+
continue;
|
|
9
|
+
const flat = sectionFlatArticles.get(section.prefix) ?? [];
|
|
10
|
+
const tagMap = new Map();
|
|
11
|
+
for (const path of flat) {
|
|
12
|
+
const article = sortedArticles.find(a => a.path === path);
|
|
13
|
+
if (!article?.tags)
|
|
14
|
+
continue;
|
|
15
|
+
for (const tag of article.tags) {
|
|
16
|
+
const list = tagMap.get(tag);
|
|
17
|
+
if (list) {
|
|
18
|
+
list.push(path);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
tagMap.set(tag, [path]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (tagMap.size > 0) {
|
|
26
|
+
sectionTags.set(section.prefix, tagMap);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbnRlbnQvdGFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFbEUsTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUE7QUFFdEQsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQTtBQUVuRSxJQUFJLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMzQixLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3JDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNO1lBQUUsU0FBUTtRQUNyQyxNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQTtRQUMxQyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFBO1lBQ3pELElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSTtnQkFBRSxTQUFRO1lBQzVCLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUM1QixJQUFJLElBQUksRUFBRSxDQUFDO29CQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ2pCLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQixXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDekMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2VjdGlvbkZsYXRBcnRpY2xlcywgc29ydGVkQXJ0aWNsZXMgfSBmcm9tIFwiLi9hcnRpY2xlLnRzXCJcblxuY29uc3QgY29uZmlnU2VjdGlvbnMgPSBpbXBvcnQubWV0YS5lbnYuQ09ORklHLnNlY3Rpb25zXG5cbi8qKiBQZXItc2VjdGlvbiB0YWcg4oaSIGFydGljbGUgcGF0aHMgbWFwcGluZy4gQXJ0aWNsZXMgc29ydGVkIGJ5IGRhdGUgZGVzY2VuZGluZy4gKi9cbmV4cG9ydCBjb25zdCBzZWN0aW9uVGFncyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmdbXT4+KClcblxuaWYgKGNvbmZpZ1NlY3Rpb25zPy5sZW5ndGgpIHtcbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIGNvbmZpZ1NlY3Rpb25zKSB7XG4gICAgaWYgKHNlY3Rpb24udHlwZSAhPT0gXCJibG9nXCIpIGNvbnRpbnVlXG4gICAgY29uc3QgZmxhdCA9IHNlY3Rpb25GbGF0QXJ0aWNsZXMuZ2V0KHNlY3Rpb24ucHJlZml4KSA/PyBbXVxuICAgIGNvbnN0IHRhZ01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKVxuICAgIGZvciAoY29uc3QgcGF0aCBvZiBmbGF0KSB7XG4gICAgICBjb25zdCBhcnRpY2xlID0gc29ydGVkQXJ0aWNsZXMuZmluZChhID0+IGEucGF0aCA9PT0gcGF0aClcbiAgICAgIGlmICghYXJ0aWNsZT8udGFncykgY29udGludWVcbiAgICAgIGZvciAoY29uc3QgdGFnIG9mIGFydGljbGUudGFncykge1xuICAgICAgICBjb25zdCBsaXN0ID0gdGFnTWFwLmdldCh0YWcpXG4gICAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgICAgbGlzdC5wdXNoKHBhdGgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFnTWFwLnNldCh0YWcsIFtwYXRoXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGFnTWFwLnNpemUgPiAwKSB7XG4gICAgICBzZWN0aW9uVGFncy5zZXQoc2VjdGlvbi5wcmVmaXgsIHRhZ01hcClcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { basename, relative, resolve } from "node:path";
|
|
3
|
+
import { defineCollection, defineConfig } from "@content-collections/core";
|
|
4
|
+
import { compileMDX } from "@content-collections/mdx";
|
|
5
|
+
import rehypeShiki from "@shikijs/rehype";
|
|
6
|
+
import { transformerTwoslash } from "@shikijs/twoslash";
|
|
7
|
+
import rehypeKatex from "rehype-katex";
|
|
8
|
+
import rehypeSlug from "rehype-slug";
|
|
9
|
+
import remarkDefinitionList from "remark-definition-list";
|
|
10
|
+
import remarkDirective from "remark-directive";
|
|
11
|
+
import remarkGemoji from "remark-gemoji";
|
|
12
|
+
import remarkGfm from "remark-gfm";
|
|
13
|
+
import remarkMath from "remark-math";
|
|
14
|
+
import { loadConfig } from "./actions/config/load.js";
|
|
15
|
+
import { buildChangelog, cacheIncludeGlob } from "./actions/changelog/build.js";
|
|
16
|
+
import { Article } from "./models/article.js";
|
|
17
|
+
import { pickDefaultIcon } from "./helpers/article-icon.js";
|
|
18
|
+
import slugify from "@sindresorhus/slugify";
|
|
19
|
+
import remarkCustomHeadingId from "./plugins/remark-custom-heading-id.js";
|
|
20
|
+
import { remarkCallout } from "./plugins/remark-callout.js";
|
|
21
|
+
import { remarkCard } from "./plugins/remark-card.js";
|
|
22
|
+
import { remarkColumns } from "./plugins/remark-columns.js";
|
|
23
|
+
import { remarkTab } from "./plugins/remark-tab.js";
|
|
24
|
+
import { remarkBadge } from "./plugins/remark-badge.js";
|
|
25
|
+
import { remarkButton } from "./plugins/remark-button.js";
|
|
26
|
+
import { remarkAbbr } from "./plugins/remark-abbr.js";
|
|
27
|
+
import { remarkDeflist } from "./plugins/remark-deflist.js";
|
|
28
|
+
import { remarkDetails } from "./plugins/remark-details.js";
|
|
29
|
+
import { remarkFiletree } from "./plugins/remark-filetree.js";
|
|
30
|
+
import { remarkIcon } from "./plugins/remark-icon.js";
|
|
31
|
+
import { remarkCodeTabs } from "./plugins/remark-code-tabs.js";
|
|
32
|
+
import { remarkGithubCallout } from "./plugins/remark-github-callout.js";
|
|
33
|
+
import { remarkImage } from "./plugins/remark-image.js";
|
|
34
|
+
import { remarkMedia } from "./plugins/remark-media.js";
|
|
35
|
+
import { remarkAnsi } from "./plugins/remark-ansi.js";
|
|
36
|
+
import { remarkMermaid } from "./plugins/remark-mermaid.js";
|
|
37
|
+
import { remarkToc } from "./plugins/remark-toc.js";
|
|
38
|
+
import { remarkNpm } from "./plugins/remark-npm.js";
|
|
39
|
+
import { remarkSteps } from "./plugins/remark-steps.js";
|
|
40
|
+
import { transformerLineHighlight, transformerNotations, } from "./plugins/shiki-line-highlight.js";
|
|
41
|
+
import { rehypeInlineCode } from "./plugins/rehype-inline-code.js";
|
|
42
|
+
import { rehypeTaskListA11y } from "./plugins/rehype-task-list-a11y.js";
|
|
43
|
+
import { transformerIcon } from "./plugins/shiki-icon.js";
|
|
44
|
+
import { resolveAssetPath } from "./helpers/resolve-asset-path.js";
|
|
45
|
+
import { resolveIncludes } from "./helpers/resolve-includes.js";
|
|
46
|
+
import { extractSearchText } from "./helpers/search-text.js";
|
|
47
|
+
import { extractToc } from "./helpers/toc.js";
|
|
48
|
+
const config = await loadConfig();
|
|
49
|
+
const changelogSections = config.sections?.filter(s => s.type === "changelog") ?? [];
|
|
50
|
+
for (const section of changelogSections) {
|
|
51
|
+
await buildChangelog(section, config);
|
|
52
|
+
}
|
|
53
|
+
const configInclude = Array.isArray(config.include)
|
|
54
|
+
? config.include
|
|
55
|
+
: [config.include];
|
|
56
|
+
const include = changelogSections.length
|
|
57
|
+
? [...configInclude, cacheIncludeGlob()]
|
|
58
|
+
: configInclude;
|
|
59
|
+
// content-collections compiles this file to .content-collections/cache/;
|
|
60
|
+
// going up 2 levels reconstructs the baseDirectory it uses for path resolution
|
|
61
|
+
const baseDir = resolve(import.meta.dirname, "../..");
|
|
62
|
+
const directory = relative(baseDir, config.root) || ".";
|
|
63
|
+
function toPath(filePath) {
|
|
64
|
+
const name = basename(filePath).replace(/\.\w+$/, "");
|
|
65
|
+
return slugify(name);
|
|
66
|
+
}
|
|
67
|
+
function getLastUpdated(filePath) {
|
|
68
|
+
try {
|
|
69
|
+
const timestamp = execSync(`git log -1 --format=%cI -- "${filePath}"`, {
|
|
70
|
+
cwd: config.root,
|
|
71
|
+
encoding: "utf-8",
|
|
72
|
+
}).trim();
|
|
73
|
+
return timestamp || undefined;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function stripLeadingH1(content) {
|
|
80
|
+
return content.replace(/^[ \t]*#\s+[^\n]*\n+/, "");
|
|
81
|
+
}
|
|
82
|
+
function extractTitle(content, path) {
|
|
83
|
+
const match = /^#\s+(.+)$/m.exec(content);
|
|
84
|
+
if (match)
|
|
85
|
+
return match[1];
|
|
86
|
+
return (path
|
|
87
|
+
.split("/")
|
|
88
|
+
.pop()
|
|
89
|
+
?.replace(/\.\w+$/, "") ?? path);
|
|
90
|
+
}
|
|
91
|
+
const articles = defineCollection({
|
|
92
|
+
name: "articles",
|
|
93
|
+
directory,
|
|
94
|
+
include,
|
|
95
|
+
exclude: config.exclude,
|
|
96
|
+
schema: Article,
|
|
97
|
+
transform: async (document, context) => {
|
|
98
|
+
const patch = config.patches?.find(p => p.file === document._meta.filePath);
|
|
99
|
+
const doc = patch ? { ...document, ...patch.article } : document;
|
|
100
|
+
const filePath = resolve(config.root, doc._meta.filePath);
|
|
101
|
+
const content = resolveIncludes(doc.content, filePath);
|
|
102
|
+
const title = doc.title ?? extractTitle(content, doc._meta.path);
|
|
103
|
+
const icon = doc.icon ?? pickDefaultIcon(doc._meta.path);
|
|
104
|
+
const path = doc.path ?? toPath(doc._meta.filePath);
|
|
105
|
+
// The article's h1 is rendered from `title` by the layout, so strip any
|
|
106
|
+
// leading h1 in the body to avoid two h1s side-by-side (especially when
|
|
107
|
+
// a content patch overrides the title to something different from the
|
|
108
|
+
// body's own heading).
|
|
109
|
+
const bodyContent = stripLeadingH1(content);
|
|
110
|
+
const mdx = await compileMDX(context, { ...doc, content: bodyContent }, {
|
|
111
|
+
remarkPlugins: [
|
|
112
|
+
remarkGfm,
|
|
113
|
+
remarkGemoji,
|
|
114
|
+
remarkDefinitionList,
|
|
115
|
+
remarkDeflist,
|
|
116
|
+
remarkMath,
|
|
117
|
+
remarkDirective,
|
|
118
|
+
remarkCallout,
|
|
119
|
+
remarkCard,
|
|
120
|
+
remarkColumns,
|
|
121
|
+
remarkTab,
|
|
122
|
+
remarkDetails,
|
|
123
|
+
remarkFiletree,
|
|
124
|
+
remarkIcon,
|
|
125
|
+
remarkBadge,
|
|
126
|
+
remarkButton,
|
|
127
|
+
remarkAbbr,
|
|
128
|
+
remarkGithubCallout,
|
|
129
|
+
[
|
|
130
|
+
remarkImage,
|
|
131
|
+
{
|
|
132
|
+
filePath: resolve(config.root, doc._meta.filePath),
|
|
133
|
+
root: config.root,
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
remarkAnsi,
|
|
137
|
+
remarkMermaid,
|
|
138
|
+
remarkMedia,
|
|
139
|
+
remarkToc,
|
|
140
|
+
remarkNpm,
|
|
141
|
+
remarkCodeTabs,
|
|
142
|
+
remarkSteps,
|
|
143
|
+
remarkCustomHeadingId,
|
|
144
|
+
],
|
|
145
|
+
rehypePlugins: [
|
|
146
|
+
[
|
|
147
|
+
rehypeShiki,
|
|
148
|
+
{
|
|
149
|
+
themes: {
|
|
150
|
+
light: config.codeThemeLight,
|
|
151
|
+
dark: config.codeThemeDark,
|
|
152
|
+
},
|
|
153
|
+
// Darken catppuccin-latte's green (the colour used for strings and
|
|
154
|
+
// some comments) — the theme default #40A02B lands at 3.2:1 on the
|
|
155
|
+
// code-block background, below the WCAG AA 4.5:1 threshold.
|
|
156
|
+
colorReplacements: {
|
|
157
|
+
"catppuccin-latte": {
|
|
158
|
+
"#40a02b": "#2a7e16",
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
transformers: [
|
|
162
|
+
transformerTwoslash({ explicitTrigger: true }),
|
|
163
|
+
transformerIcon(),
|
|
164
|
+
transformerNotations(),
|
|
165
|
+
transformerLineHighlight(),
|
|
166
|
+
],
|
|
167
|
+
parseMetaString: (meta) => ({ "data-meta": meta }),
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
rehypeInlineCode,
|
|
171
|
+
rehypeSlug,
|
|
172
|
+
rehypeKatex,
|
|
173
|
+
rehypeTaskListA11y,
|
|
174
|
+
],
|
|
175
|
+
});
|
|
176
|
+
const tocItems = extractToc(content);
|
|
177
|
+
const searchText = extractSearchText(content);
|
|
178
|
+
const lastUpdated = getLastUpdated(doc._meta.filePath);
|
|
179
|
+
const image = doc.image
|
|
180
|
+
? resolveAssetPath(doc.image, filePath, config.root)
|
|
181
|
+
: undefined;
|
|
182
|
+
return {
|
|
183
|
+
...doc,
|
|
184
|
+
file: doc._meta.filePath,
|
|
185
|
+
lastUpdated,
|
|
186
|
+
image,
|
|
187
|
+
title,
|
|
188
|
+
icon,
|
|
189
|
+
path,
|
|
190
|
+
tocItems,
|
|
191
|
+
searchText,
|
|
192
|
+
mdx,
|
|
193
|
+
};
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
export default defineConfig({
|
|
197
|
+
// @ts-expect-error tsgo picks wrong overload when rehype-slug augments unified types
|
|
198
|
+
content: [articles],
|
|
199
|
+
});
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1jb2xsZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9jb250ZW50LWNvbGxlY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNyRCxPQUFPLFdBQVcsTUFBTSxpQkFBaUIsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN2RCxPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUE7QUFDdEMsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFBO0FBQ3BDLE9BQU8sb0JBQW9CLE1BQU0sd0JBQXdCLENBQUE7QUFDekQsT0FBTyxlQUFlLE1BQU0sa0JBQWtCLENBQUE7QUFDOUMsT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUE7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzNELE9BQU8sT0FBTyxNQUFNLHVCQUF1QixDQUFBO0FBQzNDLE9BQU8scUJBQXFCLE1BQU0sdUNBQXVDLENBQUE7QUFDekUsT0FBTyxFQUFF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b0IsRUFBRTs0QkFDdEIsd0JBQXdCLEVBQUU7eUJBQzNCO3dCQUNELGVBQWUsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztxQkFDM0Q7aUJBQ0Y7Z0JBQ0QsZ0JBQWdCO2dCQUNoQixVQUFVO2dCQUNWLFdBQVc7Z0JBQ1gsa0JBQWtCO2FBQ25CO1NBQ0YsQ0FDRixDQUFBO1FBQ0QsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzdDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3RELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLO1lBQ3JCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3BELENBQUMsQ0FBQyxTQUFTLENBQUE7UUFDYixPQUFPO1lBQ0wsR0FBRyxHQUFHO1lBQ04sSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUN4QixXQUFXO1lBQ1gsS0FBSztZQUNMLEtBQUs7WUFDTCxJQUFJO1lBQ0osSUFBSTtZQUNKLFFBQVE7WUFDUixVQUFVO1lBQ1YsR0FBRztTQUNKLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQyxDQUFBO0FBRUYsZUFBZSxZQUFZLENBQUM7SUFDMUIscUZBQXFGO0lBQ3JGLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztDQUNwQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IHsgYmFzZW5hbWUsIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBkZWZpbmVDb2xsZWN0aW9uLCBkZWZpbmVDb25maWcgfSBmcm9tIFwiQGNvbnRlbnQtY29sbGVjdGlvbnMvY29yZVwiXG5pbXBvcnQgeyBjb21waWxlTURYIH0gZnJvbSBcIkBjb250ZW50LWNvbGxlY3Rpb25zL21keFwiXG5pbXBvcnQgcmVoeXBlU2hpa2kgZnJvbSBcIkBzaGlraWpzL3JlaHlwZVwiXG5pbXBvcnQgeyB0cmFuc2Zvcm1lclR3b3NsYXNoIH0gZnJvbSBcIkBzaGlraWpzL3R3b3NsYXNoXCJcbmltcG9ydCByZWh5cGVLYXRleCBmcm9tIFwicmVoeXBlLWthdGV4XCJcbmltcG9ydCByZWh5cGVTbHVnIGZyb20gXCJyZWh5cGUtc2x1Z1wiXG5pbXBvcnQgcmVtYXJrRGVmaW5pdGlvbkxpc3QgZnJvbSBcInJlbWFyay1kZWZpbml0aW9uLWxpc3RcIlxuaW1wb3J0IHJlbWFya0RpcmVjdGl2ZSBmcm9tIFwicmVtYXJrLWRpcmVjdGl2ZVwiXG5pbXBvcnQgcmVtYXJrR2Vtb2ppIGZyb20gXCJyZW1hcmstZ2Vtb2ppXCJcbmltcG9ydCByZW1hcmtHZm0gZnJvbSBcInJlbWFyay1nZm1cIlxuaW1wb3J0IHJlbWFya01hdGggZnJvbSBcInJlbWFyay1tYXRoXCJcbmltcG9ydCB7IGxvYWRDb25maWcgfSBmcm9tIFwiLi9hY3Rpb25zL2NvbmZpZy9sb2FkLnRzXCJcbmltcG9ydCB7IGJ1aWxkQ2hhbmdlbG9nLCBjYWNoZUluY2x1ZGVHbG9iIH0gZnJvbSBcIi4vYWN0aW9ucy9jaGFuZ2Vsb2cvYnVpbGQudHNcIlxuaW1wb3J0IHsgQXJ0aWNsZSB9IGZyb20gXCIuL21vZGVscy9hcnRpY2xlLnRzXCJcbmltcG9ydCB7IHBpY2tEZWZhdWx0SWNvbiB9IGZyb20gXCIuL2hlbHBlcnMvYXJ0aWNsZS1pY29uLnRzXCJcbmltcG9ydCBzbHVnaWZ5IGZyb20gXCJAc2luZHJlc29yaHVzL3NsdWdpZnlcIlxuaW1wb3J0IHJlbWFya0N1c3RvbUhlYWRpbmdJZCBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1jdXN0b20taGVhZGluZy1pZC50c1wiXG5pbXBvcnQgeyByZW1hcmtDYWxsb3V0IH0gZnJvbSBcIi4vcGx1Z2lucy9yZW1hcmstY2FsbG91dC50c1wiXG5pbXBvcnQgeyByZW1hcmtDYXJkIH0gZnJvbSBcIi4vcGx1Z2lucy9yZW1hcmstY2FyZC50c1wiXG5pbXBvcnQgeyByZW1hcmtDb2x1bW5zIH0gZnJvbSBcIi4vcGx1Z2lucy9yZW1hcmstY29sdW1ucy50c1wiXG5pbXBvcnQgeyByZW1hcmtUYWIgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay10YWIudHNcIlxuaW1wb3J0IHsgcmVtYXJrQmFkZ2UgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1iYWRnZS50c1wiXG5pbXBvcnQgeyByZW1hcmtCdXR0b24gfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1idXR0b24udHNcIlxuaW1wb3J0IHsgcmVtYXJrQWJiciB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLWFiYnIudHNcIlxuaW1wb3J0IHsgcmVtYXJrRGVmbGlzdCB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLWRlZmxpc3QudHNcIlxuaW1wb3J0IHsgcmVtYXJrRGV0YWlscyB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLWRldGFpbHMudHNcIlxuaW1wb3J0IHsgcmVtYXJrRmlsZXRyZWUgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1maWxldHJlZS50c1wiXG5pbXBvcnQgeyByZW1hcmtJY29uIH0gZnJvbSBcIi4vcGx1Z2lucy9yZW1hcmstaWNvbi50c1wiXG5pbXBvcnQgeyByZW1hcmtDb2RlVGFicyB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLWNvZGUtdGFicy50c1wiXG5pbXBvcnQgeyByZW1hcmtHaXRodWJDYWxsb3V0IH0gZnJvbSBcIi4vcGx1Z2lucy9yZW1hcmstZ2l0aHViLWNhbGxvdXQudHNcIlxuaW1wb3J0IHsgcmVtYXJrSW1hZ2UgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1pbWFnZS50c1wiXG5pbXBvcnQgeyByZW1hcmtNZWRpYSB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLW1lZGlhLnRzXCJcbmltcG9ydCB7IHJlbWFya0Fuc2kgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1hbnNpLnRzXCJcbmltcG9ydCB7IHJlbWFya01lcm1haWQgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1tZXJtYWlkLnRzXCJcbmltcG9ydCB7IHJlbWFya1RvYyB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLXRvYy50c1wiXG5pbXBvcnQgeyByZW1hcmtOcG0gfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1ucG0udHNcIlxuaW1wb3J0IHsgcmVtYXJrU3RlcHMgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1zdGVwcy50c1wiXG5pbXBvcnQge1xuICB0cmFuc2Zvcm1lckxpbmVIaWdobGlnaHQsXG4gIHRyYW5zZm9ybWVyTm90YXRpb25zLFxufSBmcm9tIFwiLi9wbHVnaW5zL3NoaWtpLWxpbmUtaGlnaGxpZ2h0LnRzXCJcbmltcG9ydCB7IHJlaHlwZUlubGluZUNvZGUgfSBmcm9tIFwiLi9wbHVnaW5zL3JlaHlwZS1pbmxpbmUtY29kZS50c1wiXG5pbXBvcnQgeyByZWh5cGVUYXNrTGlzdEExMXkgfSBmcm9tIFwiLi9wbHVnaW5zL3JlaHlwZS10YXNrLWxpc3QtYTExeS50c1wiXG5pbXBvcnQgeyB0cmFuc2Zvcm1lckljb24gfSBmcm9tIFwiLi9wbHVnaW5zL3NoaWtpLWljb24udHNcIlxuaW1wb3J0IHsgcmVzb2x2ZUFzc2V0UGF0aCB9IGZyb20gXCIuL2hlbHBlcnMvcmVzb2x2ZS1hc3NldC1wYXRoLnRzXCJcbmltcG9ydCB7IHJlc29sdmVJbmNsdWRlcyB9IGZyb20gXCIuL2hlbHBlcnMvcmVzb2x2ZS1pbmNsdWRlcy50c1wiXG5pbXBvcnQgeyBleHRyYWN0U2VhcmNoVGV4dCB9IGZyb20gXCIuL2hlbHBlcnMvc2VhcmNoLXRleHQudHNcIlxuaW1wb3J0IHsgZXh0cmFjdFRvYyB9IGZyb20gXCIuL2hlbHBlcnMvdG9jLnRzXCJcblxuY29uc3QgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZygpXG5cbmNvbnN0IGNoYW5nZWxvZ1NlY3Rpb25zID1cbiAgY29uZmlnLnNlY3Rpb25zPy5maWx0ZXIocyA9PiBzLnR5cGUgPT09IFwiY2hhbmdlbG9nXCIpID8/IFtdXG5mb3IgKGNvbnN0IHNlY3Rpb24gb2YgY2hhbmdlbG9nU2VjdGlvbnMpIHtcbiAgYXdhaXQgYnVpbGRDaGFuZ2Vsb2coc2VjdGlvbiwgY29uZmlnKVxufVxuXG5jb25zdCBjb25maWdJbmNsdWRlID0gQXJyYXkuaXNBcnJheShjb25maWcuaW5jbHVkZSlcbiAgPyBjb25maWcuaW5jbHVkZVxuICA6IFtjb25maWcuaW5jbHVkZV1cbmNvbnN0IGluY2x1ZGUgPSBjaGFuZ2Vsb2dTZWN0aW9ucy5sZW5ndGhcbiAgPyBbLi4uY29uZmlnSW5jbHVkZSwgY2FjaGVJbmNsdWRlR2xvYigpXVxuICA6IGNvbmZpZ0luY2x1ZGVcblxuLy8gY29udGVudC1jb2xsZWN0aW9ucyBjb21waWxlcyB0aGlzIGZpbGUgdG8gLmNvbnRlbnQtY29sbGVjdGlvbnMvY2FjaGUvO1xuLy8gZ29pbmcgdXAgMiBsZXZlbHMgcmVjb25zdHJ1Y3RzIHRoZSBiYXNlRGlyZWN0b3J5IGl0IHVzZXMgZm9yIHBhdGggcmVzb2x1dGlvblxuY29uc3QgYmFzZURpciA9IHJlc29sdmUoaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLi8uLlwiKVxuY29uc3QgZGlyZWN0b3J5ID0gcmVsYXRpdmUoYmFzZURpciwgY29uZmlnLnJvb3QpIHx8IFwiLlwiXG5cbmZ1bmN0aW9uIHRvUGF0aChmaWxlUGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShmaWxlUGF0aCkucmVwbGFjZSgvXFwuXFx3KyQvLCBcIlwiKVxuICByZXR1cm4gc2x1Z2lmeShuYW1lKVxufVxuXG5mdW5jdGlvbiBnZXRMYXN0VXBkYXRlZChmaWxlUGF0aDogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gZXhlY1N5bmMoYGdpdCBsb2cgLTEgLS1mb3JtYXQ9JWNJIC0tIFwiJHtmaWxlUGF0aH1cImAsIHtcbiAgICAgIGN3ZDogY29uZmlnLnJvb3QsXG4gICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgIH0pLnRyaW0oKVxuICAgIHJldHVybiB0aW1lc3RhbXAgfHwgdW5kZWZpbmVkXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpcExlYWRpbmdIMShjb250ZW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvXlsgXFx0XSojXFxzK1teXFxuXSpcXG4rLywgXCJcIilcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFRpdGxlKGNvbnRlbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IG1hdGNoID0gL14jXFxzKyguKykkL20uZXhlYyhjb250ZW50KVxuICBpZiAobWF0Y2gpIHJldHVybiBtYXRjaFsxXSFcbiAgcmV0dXJuIChcbiAgICBwYXRoXG4gICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAucG9wKClcbiAgICAgID8ucmVwbGFjZSgvXFwuXFx3KyQvLCBcIlwiKSA/PyBwYXRoXG4gIClcbn1cblxuY29uc3QgYXJ0aWNsZXMgPSBkZWZpbmVDb2xsZWN0aW9uKHtcbiAgbmFtZTogXCJhcnRpY2xlc1wiLFxuICBkaXJlY3RvcnksXG4gIGluY2x1ZGUsXG4gIGV4Y2x1ZGU6IGNvbmZpZy5leGNsdWRlLFxuICBzY2hlbWE6IEFydGljbGUsXG4gIHRyYW5zZm9ybTogYXN5bmMgKGRvY3VtZW50LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGF0Y2ggPSBjb25maWcucGF0Y2hlcz8uZmluZChwID0+IHAuZmlsZSA9PT0gZG9jdW1lbnQuX21ldGEuZmlsZVBhdGgpXG4gICAgY29uc3QgZG9jID0gcGF0Y2ggPyB7IC4uLmRvY3VtZW50LCAuLi5wYXRjaC5hcnRpY2xlIH0gOiBkb2N1bWVudFxuICAgIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShjb25maWcucm9vdCwgZG9jLl9tZXRhLmZpbGVQYXRoKVxuICAgIGNvbnN0IGNvbnRlbnQgPSByZXNvbHZlSW5jbHVkZXMoZG9jLmNvbnRlbnQsIGZpbGVQYXRoKVxuICAgIGNvbnN0IHRpdGxlID0gZG9jLnRpdGxlID8/IGV4dHJhY3RUaXRsZShjb250ZW50LCBkb2MuX21ldGEucGF0aClcbiAgICBjb25zdCBpY29uID0gZG9jLmljb24gPz8gcGlja0RlZmF1bHRJY29uKGRvYy5fbWV0YS5wYXRoKVxuICAgIGNvbnN0IHBhdGggPSBkb2MucGF0aCA/PyB0b1BhdGgoZG9jLl9tZXRhLmZpbGVQYXRoKVxuICAgIC8vIFRoZSBhcnRpY2xlJ3MgaDEgaXMgcmVuZGVyZWQgZnJvbSBgdGl0bGVgIGJ5IHRoZSBsYXlvdXQsIHNvIHN0cmlwIGFueVxuICAgIC8vIGxlYWRpbmcgaDEgaW4gdGhlIGJvZHkgdG8gYXZvaWQgdHdvIGgxcyBzaWRlLWJ5LXNpZGUgKGVzcGVjaWFsbHkgd2hlblxuICAgIC8vIGEgY29udGVudCBwYXRjaCBvdmVycmlkZXMgdGhlIHRpdGxlIHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSB0aGVcbiAgICAvLyBib2R5J3Mgb3duIGhlYWRpbmcpLlxuICAgIGNvbnN0IGJvZHlDb250ZW50ID0gc3RyaXBMZWFkaW5nSDEoY29udGVudClcbiAgICBjb25zdCBtZHggPSBhd2FpdCBjb21waWxlTURYKFxuICAgICAgY29udGV4dCxcbiAgICAgIHsgLi4uZG9jLCBjb250ZW50OiBib2R5Q29udGVudCB9LFxuICAgICAge1xuICAgICAgICByZW1hcmtQbHVnaW5zOiBbXG4gICAgICAgICAgcmVtYXJrR2ZtLFxuICAgICAgICAgIHJlbWFya0dlbW9qaSxcbiAgICAgICAgICByZW1hcmtEZWZpbml0aW9uTGlzdCxcbiAgICAgICAgICByZW1hcmtEZWZsaXN0LFxuICAgICAgICAgIHJlbWFya01hdGgsXG4gICAgICAgICAgcmVtYXJrRGlyZWN0aXZlLFxuICAgICAgICAgIHJlbWFya0NhbGxvdXQsXG4gICAgICAgICAgcmVtYXJrQ2FyZCxcbiAgICAgICAgICByZW1hcmtDb2x1bW5zLFxuICAgICAgICAgIHJlbWFya1RhYixcbiAgICAgICAgICByZW1hcmtEZXRhaWxzLFxuICAgICAgICAgIHJlbWFya0ZpbGV0cmVlLFxuICAgICAgICAgIHJlbWFya0ljb24sXG4gICAgICAgICAgcmVtYXJrQmFkZ2UsXG4gICAgICAgICAgcmVtYXJrQnV0dG9uLFxuICAgICAgICAgIHJlbWFya0FiYnIsXG4gICAgICAgICAgcmVtYXJrR2l0aHViQ2FsbG91dCxcbiAgICAgICAgICBbXG4gICAgICAgICAgICByZW1hcmtJbWFnZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmlsZVBhdGg6IHJlc29sdmUoY29uZmlnLnJvb3QsIGRvYy5fbWV0YS5maWxlUGF0aCksXG4gICAgICAgICAgICAgIHJvb3Q6IGNvbmZpZy5yb290LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlbWFya0Fuc2ksXG4gICAgICAgICAgcmVtYXJrTWVybWFpZCxcbiAgICAgICAgICByZW1hcmtNZWRpYSxcbiAgICAgICAgICByZW1hcmtUb2MsXG4gICAgICAgICAgcmVtYXJrTnBtLFxuICAgICAgICAgIHJlbWFya0NvZGVUYWJzLFxuICAgICAgICAgIHJlbWFya1N0ZXBzLFxuICAgICAgICAgIHJlbWFya0N1c3RvbUhlYWRpbmdJZCxcbiAgICAgICAgXSxcbiAgICAgICAgcmVoeXBlUGx1Z2luczogW1xuICAgICAgICAgIFtcbiAgICAgICAgICAgIHJlaHlwZVNoaWtpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGVtZXM6IHtcbiAgICAgICAgICAgICAgICBsaWdodDogY29uZmlnLmNvZGVUaGVtZUxpZ2h0LFxuICAgICAgICAgICAgICAgIGRhcms6IGNvbmZpZy5jb2RlVGhlbWVEYXJrLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAvLyBEYXJrZW4gY2F0cHB1Y2Npbi1sYXR0ZSdzIGdyZWVuICh0aGUgY29sb3VyIHVzZWQgZm9yIHN0cmluZ3MgYW5kXG4gICAgICAgICAgICAgIC8vIHNvbWUgY29tbWVudHMpIOKAlCB0aGUgdGhlbWUgZGVmYXVsdCAjNDBBMDJCIGxhbmRzIGF0IDMuMjoxIG9uIHRoZVxuICAgICAgICAgICAgICAvLyBjb2RlLWJsb2NrIGJhY2tncm91bmQsIGJlbG93IHRoZSBXQ0FHIEFBIDQuNToxIHRocmVzaG9sZC5cbiAgICAgICAgICAgICAgY29sb3JSZXBsYWNlbWVudHM6IHtcbiAgICAgICAgICAgICAgICBcImNhdHBwdWNjaW4tbGF0dGVcIjoge1xuICAgICAgICAgICAgICAgICAgXCIjNDBhMDJiXCI6IFwiIzJhN2UxNlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVyczogW1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyVHdvc2xhc2goeyBleHBsaWNpdFRyaWdnZXI6IHRydWUgfSksXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZXJJY29uKCksXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZXJOb3RhdGlvbnMoKSxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lckxpbmVIaWdobGlnaHQoKSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcGFyc2VNZXRhU3RyaW5nOiAobWV0YTogc3RyaW5nKSA9PiAoeyBcImRhdGEtbWV0YVwiOiBtZXRhIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlaHlwZUlubGluZUNvZGUsXG4gICAgICAgICAgcmVoeXBlU2x1ZyxcbiAgICAgICAgICByZWh5cGVLYXRleCxcbiAgICAgICAgICByZWh5cGVUYXNrTGlzdEExMXksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIClcbiAgICBjb25zdCB0b2NJdGVtcyA9IGV4dHJhY3RUb2MoY29udGVudClcbiAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXh0cmFjdFNlYXJjaFRleHQoY29udGVudClcbiAgICBjb25zdCBsYXN0VXBkYXRlZCA9IGdldExhc3RVcGRhdGVkKGRvYy5fbWV0YS5maWxlUGF0aClcbiAgICBjb25zdCBpbWFnZSA9IGRvYy5pbWFnZVxuICAgICAgPyByZXNvbHZlQXNzZXRQYXRoKGRvYy5pbWFnZSwgZmlsZVBhdGgsIGNvbmZpZy5yb290KVxuICAgICAgOiB1bmRlZmluZWRcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZG9jLFxuICAgICAgZmlsZTogZG9jLl9tZXRhLmZpbGVQYXRoLFxuICAgICAgbGFzdFVwZGF0ZWQsXG4gICAgICBpbWFnZSxcbiAgICAgIHRpdGxlLFxuICAgICAgaWNvbixcbiAgICAgIHBhdGgsXG4gICAgICB0b2NJdGVtcyxcbiAgICAgIHNlYXJjaFRleHQsXG4gICAgICBtZHgsXG4gICAgfVxuICB9LFxufSlcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0c2dvIHBpY2tzIHdyb25nIG92ZXJsb2FkIHdoZW4gcmVoeXBlLXNsdWcgYXVnbWVudHMgdW5pZmllZCB0eXBlc1xuICBjb250ZW50OiBbYXJ0aWNsZXNdLFxufSlcbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion";
|
|
2
|
+
declare function Accordion({ className, ...props }: AccordionPrimitive.Root.Props): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare function AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare function AccordionTrigger({ className, children, ...props }: AccordionPrimitive.Trigger.Props): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare function AccordionContent({ className, children, ...props }: AccordionPrimitive.Panel.Props): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
|