livemark 0.7.2 → 0.8.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/package.json +14 -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 +12 -2
- 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 +2 -2
- 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 +4 -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 +3 -3
- 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 +105 -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 +192 -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 +57 -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 +64 -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 → 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}/routeTree.gen.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,45 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Link, useLocation } from "@tanstack/react-router";
|
|
3
|
+
import { ChevronRight, FileText } from "lucide-react";
|
|
4
|
+
import { articleGroups, currentSection, sectionArticleGroups, } from "../content/article.js";
|
|
5
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "../elements/collapsible.js";
|
|
6
|
+
import { SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, } from "../elements/sidebar.js";
|
|
7
|
+
import { articleIcons } from "../helpers/article-icon.js";
|
|
8
|
+
/** Article-tree body slot for the Sidebar shell */
|
|
9
|
+
export function SidebarArticles() {
|
|
10
|
+
const pathname = useLocation({ select: l => l.pathname });
|
|
11
|
+
const configSections = import.meta.env.CONFIG.sections;
|
|
12
|
+
const section = currentSection(`/${pathname.replace(/^\/|\/$/g, "")}/`);
|
|
13
|
+
const groups = configSections?.length
|
|
14
|
+
? (sectionArticleGroups.get(section?.prefix ?? "__default__") ??
|
|
15
|
+
articleGroups)
|
|
16
|
+
: articleGroups;
|
|
17
|
+
return (_jsx(_Fragment, { children: groups.map((group, index) => (_jsxs(SidebarGroup, { children: [group.name && (_jsx(SidebarGroupLabel, { className: "uppercase font-mono text-xs tracking-widest", children: group.name })), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: group.nodes.map(node => (_jsx(NavNode, { node: node, currentPath: pathname }, node.path))) }) })
|
|
18
|
+
] }, group.name ?? `__unnamed-${index}`))) }));
|
|
19
|
+
}
|
|
20
|
+
function splatFor(pathname) {
|
|
21
|
+
return { _splat: pathname.replace(/^\/|\/$/g, "") };
|
|
22
|
+
}
|
|
23
|
+
function isActive(articlePathname, currentPath) {
|
|
24
|
+
const normalized = `/${currentPath.replace(/^\/|\/$/g, "")}/`;
|
|
25
|
+
return articlePathname === normalized;
|
|
26
|
+
}
|
|
27
|
+
function NavNode(props) {
|
|
28
|
+
const { node, currentPath } = props;
|
|
29
|
+
const Icon = articleIcons[node.icon] ?? FileText;
|
|
30
|
+
const active = isActive(node.path, currentPath);
|
|
31
|
+
if (node.children.length === 0) {
|
|
32
|
+
return (_jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { isActive: active, className: active ? "" : "opacity-75", render: _jsx(Link, { to: "/$", params: splatFor(node.path) }), children: [
|
|
33
|
+
_jsx(Icon, { className: "size-4" }), _jsx("span", { children: node.label ?? node.title })
|
|
34
|
+
] }) }));
|
|
35
|
+
}
|
|
36
|
+
return (_jsx(SidebarMenuItem, { children: _jsxs(Collapsible, { defaultOpen: true, className: "group/collapsible", children: [
|
|
37
|
+
_jsxs(SidebarMenuButton, { isActive: active, className: active ? "" : "opacity-75", render: _jsx(Link, { to: "/$", params: splatFor(node.path) }), children: [
|
|
38
|
+
_jsx(Icon, { className: "size-4" }), _jsx("span", { children: node.label ?? node.title })
|
|
39
|
+
] }), _jsx(CollapsibleTrigger, { "aria-label": `Toggle ${node.label ?? node.title} submenu`, className: "absolute right-1 top-1.5 p-1 rounded-md hover:bg-sidebar-accent", children: _jsx(ChevronRight, { className: "size-3.5 transition-transform group-data-[open]/collapsible:rotate-90" }) }), _jsx(CollapsibleContent, { children: _jsx(SidebarMenuSub, { children: node.children.map(child => {
|
|
40
|
+
const childIsActive = isActive(child.path, currentPath);
|
|
41
|
+
return (_jsx(SidebarMenuSubItem, { children: _jsx(SidebarMenuSubButton, { isActive: childIsActive, className: childIsActive ? "" : "opacity-75", render: _jsx(Link, { to: "/$", params: splatFor(child.path) }), children: _jsx("span", { children: child.label ?? child.title }) }) }, child.path));
|
|
42
|
+
}) }) })
|
|
43
|
+
] }) }));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhckFydGljbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2lkZWJhckFydGljbGVzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUNyRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLGNBQWMsRUFDZCxvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQTtBQUM5QixPQUFPLEVBQ0wsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixrQkFBa0IsR0FDbkIsTUFBTSw0QkFBNkIsQ0FBQTtBQUNwQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSx3QkFBeUIsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFHekQsbURBQW1EO0FBQ25ELE1BQU0sVUFBVSxlQUFlO0lBQzdCLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBRXpELE1BQU0sY0FBYyxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFBO0lBQ3RELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN2RSxNQUFNLE1BQU0sR0FBRyxjQUFjLEVBQUUsTUFBTTtRQUNuQyxDQUFDLENBQUMsQ0FB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R0FBUTt3QkFDckIsRUFDcEIsS0FBQyxrQkFBa0Isa0JBQ0wsVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFDeEQsU0FBUyxFQUFDLGlFQUFpRSxZQUUzRSxLQUFDLFlBQVksSUFBQyxTQUFTLEVBQUMsdUVBQXVFLEdBQUcsR0FDL0UsRUFDckIsS0FBQyxrQkFBa0IsY0FDakIsS0FBQyxjQUFjLGNBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQ3pCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBOzRCQUN2RCxPQUFPLENBQ0wsS0FBQyxrQkFBa0IsY0FDakIsS0FBQyxvQkFBb0IsSUFDbkIsUUFBUSxFQUFFLGFBQWEsRUFDdkIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQzVDLE1BQU0sRUFBRSxLQUFDLElBQUksSUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFJLFlBRXRELHlCQUFPLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssR0FBUSxHQUNwQixJQVBBLEtBQUssQ0FBQyxJQUFJLENBUWQsQ0FDdEIsQ0FBQTt3QkFDSCxDQUFDLENBQUMsR0FDYSxHQUNFO2dCQUNULEdBQ0UsQ0FDbkIsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW5rLCB1c2VMb2NhdGlvbiB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCJcbmltcG9ydCB7IENoZXZyb25SaWdodCwgRmlsZVRleHQgfSBmcm9tIFwibHVjaWRlLXJlYWN0XCJcbmltcG9ydCB7XG4gIGFydGljbGVHcm91cHMsXG4gIGN1cnJlbnRTZWN0aW9uLFxuICBzZWN0aW9uQXJ0aWNsZUdyb3Vwcyxcbn0gZnJvbSBcIi4uL2NvbnRlbnQvYXJ0aWNsZS50c1wiXG5pbXBvcnQge1xuICBDb2xsYXBzaWJsZSxcbiAgQ29sbGFwc2libGVDb250ZW50LFxuICBDb2xsYXBzaWJsZVRyaWdnZXIsXG59IGZyb20gXCIuLi9lbGVtZW50cy9jb2xsYXBzaWJsZS50c3hcIlxuaW1wb3J0IHtcbiAgU2lkZWJhckdyb3VwLFxuICBTaWRlYmFyR3JvdXBDb250ZW50LFxuICBTaWRlYmFyR3JvdXBMYWJlbCxcbiAgU2lkZWJhck1lbnUsXG4gIFNpZGViYXJNZW51QnV0dG9uLFxuICBTaWRlYmFyTWVudUl0ZW0sXG4gIFNpZGViYXJNZW51U3ViLFxuICBTaWRlYmFyTWVudVN1YkJ1dHRvbixcbiAgU2lkZWJhck1lbnVTdWJJdGVtLFxufSBmcm9tIFwiLi4vZWxlbWVudHMvc2lkZWJhci50c3hcIlxuaW1wb3J0IHsgYXJ0aWNsZUljb25zIH0gZnJvbSBcIi4uL2hlbHBlcnMvYXJ0aWNsZS1pY29uLnRzXCJcbmltcG9ydCB0eXBlIHsgQXJ0aWNsZU5vZGUgfSBmcm9tIFwiLi4vbW9kZWxzL2FydGljbGUudHNcIlxuXG4vKiogQXJ0aWNsZS10cmVlIGJvZHkgc2xvdCBmb3IgdGhlIFNpZGViYXIgc2hlbGwgKi9cbmV4cG9ydCBmdW5jdGlvbiBTaWRlYmFyQXJ0aWNsZXMoKSB7XG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlTG9jYXRpb24oeyBzZWxlY3Q6IGwgPT4gbC5wYXRobmFtZSB9KVxuXG4gIGNvbnN0IGNvbmZpZ1NlY3Rpb25zID0gaW1wb3J0Lm1ldGEuZW52LkNPTkZJRy5zZWN0aW9uc1xuICBjb25zdCBzZWN0aW9uID0gY3VycmVudFNlY3Rpb24oYC8ke3BhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYClcbiAgY29uc3QgZ3JvdXBzID0gY29uZmlnU2VjdGlvbnM/Lmxlbmd0aFxuICAgID8gKHNlY3Rpb25BcnRpY2xlR3JvdXBzLmdldChzZWN0aW9uPy5wcmVmaXggPz8gXCJfX2RlZmF1bHRfX1wiKSA/P1xuICAgICAgYXJ0aWNsZUdyb3VwcylcbiAgICA6IGFydGljbGVHcm91cHNcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7Z3JvdXBzLm1hcCgoZ3JvdXAsIGluZGV4KSA9PiAoXG4gICAgICAgIDxTaWRlYmFyR3JvdXAga2V5PXtncm91cC5uYW1lID8/IGBfX3VubmFtZWQtJHtpbmRleH1gfT5cbiAgICAgICAgICB7Z3JvdXAubmFtZSAmJiAoXG4gICAgICAgICAgICA8U2lkZWJhckdyb3VwTGFiZWwgY2xhc3NOYW1lPVwidXBwZXJjYXNlIGZvbnQtbW9ubyB0ZXh0LXhzIHRyYWNraW5nLXdpZGVzdFwiPlxuICAgICAgICAgICAgICB7Z3JvdXAubmFtZX1cbiAgICAgICAgICAgIDwvU2lkZWJhckdyb3VwTGFiZWw+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8U2lkZWJhckdyb3VwQ29udGVudD5cbiAgICAgICAgICAgIDxTaWRlYmFyTWVudT5cbiAgICAgICAgICAgICAge2dyb3VwLm5vZGVzLm1hcChub2RlID0+IChcbiAgICAgICAgICAgICAgICA8TmF2Tm9kZSBrZXk9e25vZGUucGF0aH0gbm9kZT17bm9kZX0gY3VycmVudFBhdGg9e3BhdGhuYW1lfSAvPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvU2lkZWJhck1lbnU+XG4gICAgICAgICAgPC9TaWRlYmFyR3JvdXBDb250ZW50PlxuICAgICAgICA8L1NpZGViYXJHcm91cD5cbiAgICAgICkpfVxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIHNwbGF0Rm9yKHBhdGhuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHsgX3NwbGF0OiBwYXRobmFtZS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIikgfVxufVxuXG5mdW5jdGlvbiBpc0FjdGl2ZShhcnRpY2xlUGF0aG5hbWU6IHN0cmluZywgY3VycmVudFBhdGg6IHN0cmluZykge1xuICBjb25zdCBub3JtYWxpemVkID0gYC8ke2N1cnJlbnRQYXRoLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYFxuICByZXR1cm4gYXJ0aWNsZVBhdGhuYW1lID09PSBub3JtYWxpemVkXG59XG5cbmZ1bmN0aW9uIE5hdk5vZGUocHJvcHM6IHsgbm9kZTogQXJ0aWNsZU5vZGU7IGN1cnJlbnRQYXRoOiBzdHJpbmcgfSkge1xuICBjb25zdCB7IG5vZGUsIGN1cnJlbnRQYXRoIH0gPSBwcm9wc1xuICBjb25zdCBJY29uID0gYXJ0aWNsZUljb25zW25vZGUuaWNvbl0gPz8gRmlsZVRleHRcbiAgY29uc3QgYWN0aXZlID0gaXNBY3RpdmUobm9kZS5wYXRoLCBjdXJyZW50UGF0aClcblxuICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNpZGViYXJNZW51SXRlbT5cbiAgICAgICAgPFNpZGViYXJNZW51QnV0dG9uXG4gICAgICAgICAgaXNBY3RpdmU9e2FjdGl2ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e2FjdGl2ZSA/IFwiXCIgOiBcIm9wYWNpdHktNzVcIn1cbiAgICAgICAgICByZW5kZXI9ezxMaW5rIHRvPVwiLyRcIiBwYXJhbXM9e3NwbGF0Rm9yKG5vZGUucGF0aCl9IC8+fVxuICAgICAgICA+XG4gICAgICAgICAgPEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgICA8c3Bhbj57bm9kZS5sYWJlbCA/PyBub2RlLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgPC9TaWRlYmFyTWVudUJ1dHRvbj5cbiAgICAgIDwvU2lkZWJhck1lbnVJdGVtPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNpZGViYXJNZW51SXRlbT5cbiAgICAgIDxDb2xsYXBzaWJsZSBkZWZhdWx0T3BlbiBjbGFzc05hbWU9XCJncm91cC9jb2xsYXBzaWJsZVwiPlxuICAgICAgICA8U2lkZWJhck1lbnVCdXR0b25cbiAgICAgICAgICBpc0FjdGl2ZT17YWN0aXZlfVxuICAgICAgICAgIGNsYXNzTmFtZT17YWN0aXZlID8gXCJcIiA6IFwib3BhY2l0eS03NVwifVxuICAgICAgICAgIHJlbmRlcj17PExpbmsgdG89XCIvJFwiIHBhcmFtcz17c3BsYXRGb3Iobm9kZS5wYXRoKX0gLz59XG4gICAgICAgID5cbiAgICAgICAgICA8SWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgICAgICAgIDxzcGFuPntub2RlLmxhYmVsID8/IG5vZGUudGl0bGV9PC9zcGFuPlxuICAgICAgICA8L1NpZGViYXJNZW51QnV0dG9uPlxuICAgICAgICA8Q29sbGFwc2libGVUcmlnZ2VyXG4gICAgICAgICAgYXJpYS1sYWJlbD17YFRvZ2dsZSAke25vZGUubGFiZWwgPz8gbm9kZS50aXRsZX0gc3VibWVudWB9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMSB0b3AtMS41IHAtMSByb3VuZGVkLW1kIGhvdmVyOmJnLXNpZGViYXItYWNjZW50XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwic2l6ZS0zLjUgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZ3JvdXAtZGF0YS1bb3Blbl0vY29sbGFwc2libGU6cm90YXRlLTkwXCIgLz5cbiAgICAgICAgPC9Db2xsYXBzaWJsZVRyaWdnZXI+XG4gICAgICAgIDxDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPFNpZGViYXJNZW51U3ViPlxuICAgICAgICAgICAge25vZGUuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRJc0FjdGl2ZSA9IGlzQWN0aXZlKGNoaWxkLnBhdGgsIGN1cnJlbnRQYXRoKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxTaWRlYmFyTWVudVN1Ykl0ZW0ga2V5PXtjaGlsZC5wYXRofT5cbiAgICAgICAgICAgICAgICAgIDxTaWRlYmFyTWVudVN1YkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17Y2hpbGRJc0FjdGl2ZX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjaGlsZElzQWN0aXZlID8gXCJcIiA6IFwib3BhY2l0eS03NVwifVxuICAgICAgICAgICAgICAgICAgICByZW5kZXI9ezxMaW5rIHRvPVwiLyRcIiBwYXJhbXM9e3NwbGF0Rm9yKGNoaWxkLnBhdGgpfSAvPn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e2NoaWxkLmxhYmVsID8/IGNoaWxkLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVTdWJCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9TaWRlYmFyTWVudVN1Ykl0ZW0+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvU2lkZWJhck1lbnVTdWI+XG4gICAgICAgIDwvQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICA8L1NpZGViYXJNZW51SXRlbT5cbiAgKVxufVxuIl19
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Shared Links group. Renders sidebar-positioned links always, and
|
|
2
|
+
* header-positioned links only on mobile (mobile collapses all chrome
|
|
3
|
+
* links into the sidebar since the header strip is hidden below `md`). */
|
|
4
|
+
export declare function SidebarLinks(): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useLocation } from "@tanstack/react-router";
|
|
3
|
+
import { ExternalLink } from "lucide-react";
|
|
4
|
+
import { currentSection } from "../content/article.js";
|
|
5
|
+
import { DynamicIcon } from "../helpers/dynamic-icon.js";
|
|
6
|
+
import { SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from "../elements/sidebar.js";
|
|
7
|
+
/** Shared Links group. Renders sidebar-positioned links always, and
|
|
8
|
+
* header-positioned links only on mobile (mobile collapses all chrome
|
|
9
|
+
* links into the sidebar since the header strip is hidden below `md`). */
|
|
10
|
+
export function SidebarLinks() {
|
|
11
|
+
const pathname = useLocation({ select: l => l.pathname });
|
|
12
|
+
const section = currentSection(`/${pathname.replace(/^\/|\/$/g, "")}/`);
|
|
13
|
+
const links = import.meta.env.CONFIG.links?.filter(link => !link.prefix || link.prefix === section?.prefix) ?? [];
|
|
14
|
+
if (!links.length)
|
|
15
|
+
return null;
|
|
16
|
+
const hasDesktopItems = links.some(l => l.position === "sidebar");
|
|
17
|
+
return (_jsxs(SidebarGroup, { className: hasDesktopItems ? undefined : "md:hidden", children: [
|
|
18
|
+
_jsx(SidebarGroupLabel, { className: "uppercase font-mono text-xs tracking-widest", children: "Links" }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: links.map(link => {
|
|
19
|
+
const mobileOnly = link.position !== "sidebar";
|
|
20
|
+
return (_jsx(SidebarMenuItem, { className: mobileOnly ? "md:hidden" : undefined, children: _jsxs(SidebarMenuButton, { className: "text-muted-foreground", render: _jsx("a", { href: link.url, target: "_blank", rel: "noopener noreferrer" }), children: [link.icon && (_jsx(DynamicIcon, { name: link.icon, className: "size-4" })), _jsxs("span", { children: [link.title, " ", _jsx(ExternalLink, { className: "inline -mt-0.5 opacity-75", style: { width: 12, height: 12 } })
|
|
21
|
+
] })
|
|
22
|
+
] }) }, link.url));
|
|
23
|
+
}) }) })
|
|
24
|
+
] }));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhckxpbmtzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2lkZWJhckxpbmtzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNkIsQ0FBQTtBQUN6RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixlQUFlLEdBQ2hCLE1BQU0sd0JBQXlCLENBQUE7QUFFaEM7OzBFQUUwRTtBQUMxRSxNQUFNLFVBQVUsWUFBWTtJQUMxQixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUN6RCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkUsTUFBTSxLQUFLLEdBQ1QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUNsQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRSxNQUFNLENBQ3hELElBQUksRUFBRSxDQUFBO0lBRVQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFDOUIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUE7SUFFakUsT0FBTyxDQUNMLE1BQUMsWUFBWSxJQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUNoRSxLQUFDLGlCQUFpQixJQUFDLFNBQVMsRUFBQyw2Q0FBNkMsc0JBRXRELEVBQ3BCLEtBQUMsbUJBQW1CLGNBQ2xCLEtBQUMsV0FBVyxjQUNULEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ2hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFBO3dCQUM5QyxPQUFPLENBQ0wsS0FBQyxlQUFlLElBRWQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLFlBRS9DLE1BQUMsaUJBQWlCLElBQ2hCLFNBQVMsRUFBQyx1QkFBdUIsRUFDakMsTUFBTSxFQUNKLFlBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQ2QsTUFBTSxFQUFDLFFBQVEsRUFDZixHQUFHLEVBQUMscUJBQXFCLEdBQ3pCLGFBR0gsSUFBSSxDQUFDLElBQUksSUFBSSxDQUNaLEtBQUMsV0FBVyxJQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBQyxRQUFRLEdBQUcsQ0FDcEQsRUFDRCwyQkFDRyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFDaEIsS0FBQyxZQUFZLElBQ1gsU0FBUyxFQUFDLDJCQUEyQixFQUNyQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FDaEM7NENBQ0c7b0NBQ1csSUF2QmYsSUFBSSxDQUFDLEdBQUcsQ0F3QkcsQ0FDbkIsQ0FBQTtvQkFDSCxDQUFDLENBQUMsR0FDVSxHQUNNO1lBQ1QsQ0FDaEIsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VMb2NhdGlvbiB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCJcbmltcG9ydCB7IEV4dGVybmFsTGluayB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuaW1wb3J0IHsgY3VycmVudFNlY3Rpb24gfSBmcm9tIFwiLi4vY29udGVudC9hcnRpY2xlLnRzXCJcbmltcG9ydCB7IER5bmFtaWNJY29uIH0gZnJvbSBcIi4uL2hlbHBlcnMvZHluYW1pYy1pY29uLnRzeFwiXG5pbXBvcnQge1xuICBTaWRlYmFyR3JvdXAsXG4gIFNpZGViYXJHcm91cENvbnRlbnQsXG4gIFNpZGViYXJHcm91cExhYmVsLFxuICBTaWRlYmFyTWVudSxcbiAgU2lkZWJhck1lbnVCdXR0b24sXG4gIFNpZGViYXJNZW51SXRlbSxcbn0gZnJvbSBcIi4uL2VsZW1lbnRzL3NpZGViYXIudHN4XCJcblxuLyoqIFNoYXJlZCBMaW5rcyBncm91cC4gUmVuZGVycyBzaWRlYmFyLXBvc2l0aW9uZWQgbGlua3MgYWx3YXlzLCBhbmRcbiAqIGhlYWRlci1wb3NpdGlvbmVkIGxpbmtzIG9ubHkgb24gbW9iaWxlIChtb2JpbGUgY29sbGFwc2VzIGFsbCBjaHJvbWVcbiAqIGxpbmtzIGludG8gdGhlIHNpZGViYXIgc2luY2UgdGhlIGhlYWRlciBzdHJpcCBpcyBoaWRkZW4gYmVsb3cgYG1kYCkuICovXG5leHBvcnQgZnVuY3Rpb24gU2lkZWJhckxpbmtzKCkge1xuICBjb25zdCBwYXRobmFtZSA9IHVzZUxvY2F0aW9uKHsgc2VsZWN0OiBsID0+IGwucGF0aG5hbWUgfSlcbiAgY29uc3Qgc2VjdGlvbiA9IGN1cnJlbnRTZWN0aW9uKGAvJHtwYXRobmFtZS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIil9L2ApXG4gIGNvbnN0IGxpbmtzID1cbiAgICBpbXBvcnQubWV0YS5lbnYuQ09ORklHLmxpbmtzPy5maWx0ZXIoXG4gICAgICBsaW5rID0+ICFsaW5rLnByZWZpeCB8fCBsaW5rLnByZWZpeCA9PT0gc2VjdGlvbj8ucHJlZml4LFxuICAgICkgPz8gW11cblxuICBpZiAoIWxpbmtzLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgY29uc3QgaGFzRGVza3RvcEl0ZW1zID0gbGlua3Muc29tZShsID0+IGwucG9zaXRpb24gPT09IFwic2lkZWJhclwiKVxuXG4gIHJldHVybiAoXG4gICAgPFNpZGViYXJHcm91cCBjbGFzc05hbWU9e2hhc0Rlc2t0b3BJdGVtcyA/IHVuZGVmaW5lZCA6IFwibWQ6aGlkZGVuXCJ9PlxuICAgICAgPFNpZGViYXJHcm91cExhYmVsIGNsYXNzTmFtZT1cInVwcGVyY2FzZSBmb250LW1vbm8gdGV4dC14cyB0cmFja2luZy13aWRlc3RcIj5cbiAgICAgICAgTGlua3NcbiAgICAgIDwvU2lkZWJhckdyb3VwTGFiZWw+XG4gICAgICA8U2lkZWJhckdyb3VwQ29udGVudD5cbiAgICAgICAgPFNpZGViYXJNZW51PlxuICAgICAgICAgIHtsaW5rcy5tYXAobGluayA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2JpbGVPbmx5ID0gbGluay5wb3NpdGlvbiAhPT0gXCJzaWRlYmFyXCJcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTaWRlYmFyTWVudUl0ZW1cbiAgICAgICAgICAgICAgICBrZXk9e2xpbmsudXJsfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17bW9iaWxlT25seSA/IFwibWQ6aGlkZGVuXCIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U2lkZWJhck1lbnVCdXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiXG4gICAgICAgICAgICAgICAgICByZW5kZXI9e1xuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2xpbmsudXJsfVxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2xpbmsuaWNvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxEeW5hbWljSWNvbiBuYW1lPXtsaW5rLmljb259IGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIHtsaW5rLnRpdGxlfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgPEV4dGVybmFsTGlua1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZSAtbXQtMC41IG9wYWNpdHktNzVcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiAxMiwgaGVpZ2h0OiAxMiB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVCdXR0b24+XG4gICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L1NpZGViYXJNZW51PlxuICAgICAgPC9TaWRlYmFyR3JvdXBDb250ZW50PlxuICAgIDwvU2lkZWJhckdyb3VwPlxuICApXG59XG4iXX0=
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Link, useLocation } from "@tanstack/react-router";
|
|
3
|
+
import { Clock, List, Rss, Tag } from "lucide-react";
|
|
4
|
+
import { currentSection, sectionFlatArticles, sortedArticles, } from "../content/article.js";
|
|
5
|
+
import { SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, } from "../elements/sidebar.js";
|
|
6
|
+
/** Blog body slot for the Sidebar shell: All Posts / Recent Posts / RSS / Tags */
|
|
7
|
+
export function SidebarPosts() {
|
|
8
|
+
const pathname = useLocation({ select: l => l.pathname });
|
|
9
|
+
const section = currentSection(`/${pathname.replace(/^\/|\/$/g, "")}/`);
|
|
10
|
+
const flat = section ? (sectionFlatArticles.get(section.prefix) ?? []) : [];
|
|
11
|
+
const posts = flat
|
|
12
|
+
.map(p => sortedArticles.find(a => a.path === p))
|
|
13
|
+
.filter(a => a !== undefined);
|
|
14
|
+
const recentPosts = posts.slice(0, 5);
|
|
15
|
+
const allTags = new Set();
|
|
16
|
+
for (const post of posts) {
|
|
17
|
+
for (const tag of post.tags ?? []) {
|
|
18
|
+
allTags.add(tag);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const tags = [...allTags].sort();
|
|
22
|
+
const normalized = `/${pathname.replace(/^\/|\/$/g, "")}/`;
|
|
23
|
+
const isIndex = section ? normalized === section.prefix : false;
|
|
24
|
+
const sectionPath = (section?.prefix ?? "/blog/").replace(/^\/|\/$/g, "");
|
|
25
|
+
return (_jsxs(_Fragment, { children: [
|
|
26
|
+
_jsxs(SidebarGroup, { children: [
|
|
27
|
+
_jsx(SidebarGroupLabel, { className: "uppercase font-mono text-xs tracking-widest", children: "Posts" }), _jsx(SidebarGroupContent, { children: _jsxs(SidebarMenu, { children: [
|
|
28
|
+
_jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { isActive: isIndex, className: isIndex ? "" : "opacity-75", render: _jsx(Link, { to: "/$", params: { _splat: sectionPath } }), children: [
|
|
29
|
+
_jsx(List, { className: "size-4" }), _jsx("span", { children: "All Posts" })
|
|
30
|
+
] }) }), _jsxs(SidebarMenuItem, { children: [
|
|
31
|
+
_jsxs(SidebarMenuButton, { className: "opacity-75", children: [
|
|
32
|
+
_jsx(Clock, { className: "size-4" }), _jsx("span", { children: "Recent Posts" })
|
|
33
|
+
] }), _jsx(SidebarMenuSub, { children: recentPosts.map(post => {
|
|
34
|
+
const active = normalized === post.path;
|
|
35
|
+
return (_jsx(SidebarMenuSubItem, { children: _jsx(SidebarMenuSubButton, { isActive: active, className: active ? "" : "opacity-75", render: _jsx(Link, { to: "/$", params: {
|
|
36
|
+
_splat: post.path.replace(/^\/|\/$/g, ""),
|
|
37
|
+
} }), children: _jsx("span", { children: post.title }) }) }, post.path));
|
|
38
|
+
}) })
|
|
39
|
+
] }), _jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { className: "opacity-75", children: [
|
|
40
|
+
_jsx(Rss, { className: "size-4" }), _jsx("span", { children: "RSS Feed" })
|
|
41
|
+
] }) })
|
|
42
|
+
] }) })
|
|
43
|
+
] }), tags.length > 0 && (_jsxs(SidebarGroup, { children: [
|
|
44
|
+
_jsx(SidebarGroupLabel, { className: "uppercase font-mono text-xs tracking-widest", children: "Tags" }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: tags.map(tag => {
|
|
45
|
+
const tagPath = `${sectionPath}/tags/${tag}`;
|
|
46
|
+
const tagActive = normalized === `/${tagPath}/`;
|
|
47
|
+
return (_jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { isActive: tagActive, className: tagActive ? "" : "opacity-75", render: _jsx(Link, { to: "/$", params: { _splat: tagPath } }), children: [
|
|
48
|
+
_jsx(Tag, { className: "size-3.5" }), _jsx("span", { children: tag })
|
|
49
|
+
] }) }, tag));
|
|
50
|
+
}) }) })
|
|
51
|
+
] }))] }));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhclBvc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2lkZWJhclBvc3RzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3BELE9BQU8sRUFDTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGNBQWMsR0FDZixNQUFNLHVCQUF1QixDQUFBO0FBQzlCLE9BQU8sRUFDTCxZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGtCQUFrQixHQUNuQixNQUFNLHdCQUF5QixDQUFBO0FBRWhDLGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsWUFBWTtJQUMxQixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUV6RCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUMzRSxNQUFNLEtBQUssR0FBRyxJQUFJO1NBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMs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QUNNO29CQUNULEVBRWQsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FDbEIsTUFBQyxZQUFZO29CQUNYLEtBQUMsaUJBQWlCLElBQUMsU0FBUyxFQUFDLDZDQUE2QyxxQkFFdEQsRUFDcEIsS0FBQyxtQkFBbUIsY0FDbEIsS0FBQyxXQUFXLGNBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQ0FDZCxNQUFNLE9BQU8sR0FBRyxHQUFHLFdBQVcsU0FBUyxHQUFHLEVBQUUsQ0FBQTtnQ0FDNUMsTUFBTSxTQUFTLEdBQUcsVUFBVSxLQUFLLElBQUksT0FBTyxHQUFHLENBQUE7Z0NBQy9DLE9BQU8sQ0FDTCxLQUFDLGVBQWUsY0FDZCxNQUFDLGlCQUFpQixJQUNoQixRQUFRLEVBQUUsU0FBUyxFQUNuQixTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFDeEMsTUFBTSxFQUFFLEtBQUMsSUFBSSxJQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFJOzRDQUVyRCxLQUFDLEdBQUcsSUFBQyxTQUFTLEVBQUMsVUFBVSxHQUFHLEVBQzVCLHlCQUFPLEdBQUcsR0FBUTs0Q0FDQSxJQVJBLEdBQUcsQ0FTUCxDQUNuQixDQUFBOzRCQUNILENBQUMsQ0FBQyxHQUNVLEdBQ007b0JBQ1QsQ0FDaEIsSUFDQSxDQUNKLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGluaywgdXNlTG9jYXRpb24gfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiXG5pbXBvcnQgeyBDbG9jaywgTGlzdCwgUnNzLCBUYWcgfSBmcm9tIFwibHVjaWRlLXJlYWN0XCJcbmltcG9ydCB7XG4gIGN1cnJlbnRTZWN0aW9uLFxuICBzZWN0aW9uRmxhdEFydGljbGVzLFxuICBzb3J0ZWRBcnRpY2xlcyxcbn0gZnJvbSBcIi4uL2NvbnRlbnQvYXJ0aWNsZS50c1wiXG5pbXBvcnQge1xuICBTaWRlYmFyR3JvdXAsXG4gIFNpZGViYXJHcm91cENvbnRlbnQsXG4gIFNpZGViYXJHcm91cExhYmVsLFxuICBTaWRlYmFyTWVudSxcbiAgU2lkZWJhck1lbnVCdXR0b24sXG4gIFNpZGViYXJNZW51SXRlbSxcbiAgU2lkZWJhck1lbnVTdWIsXG4gIFNpZGViYXJNZW51U3ViQnV0dG9uLFxuICBTaWRlYmFyTWVudVN1Ykl0ZW0sXG59IGZyb20gXCIuLi9lbGVtZW50cy9zaWRlYmFyLnRzeFwiXG5cbi8qKiBCbG9nIGJvZHkgc2xvdCBmb3IgdGhlIFNpZGViYXIgc2hlbGw6IEFsbCBQb3N0cyAvIFJlY2VudCBQb3N0cyAvIFJTUyAvIFRhZ3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBTaWRlYmFyUG9zdHMoKSB7XG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlTG9jYXRpb24oeyBzZWxlY3Q6IGwgPT4gbC5wYXRobmFtZSB9KVxuXG4gIGNvbnN0IHNlY3Rpb24gPSBjdXJyZW50U2VjdGlvbihgLyR7cGF0aG5hbWUucmVwbGFjZSgvXlxcL3xcXC8kL2csIFwiXCIpfS9gKVxuICBjb25zdCBmbGF0ID0gc2VjdGlvbiA/IChzZWN0aW9uRmxhdEFydGljbGVzLmdldChzZWN0aW9uLnByZWZpeCkgPz8gW10pIDogW11cbiAgY29uc3QgcG9zdHMgPSBmbGF0XG4gICAgLm1hcChwID0+IHNvcnRlZEFydGljbGVzLmZpbmQoYSA9PiBhLnBhdGggPT09IHApKVxuICAgIC5maWx0ZXIoYSA9PiBhICE9PSB1bmRlZmluZWQpXG4gIGNvbnN0IHJlY2VudFBvc3RzID0gcG9zdHMuc2xpY2UoMCwgNSlcblxuICBjb25zdCBhbGxUYWdzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBwb3N0IG9mIHBvc3RzKSB7XG4gICAgZm9yIChjb25zdCB0YWcgb2YgcG9zdC50YWdzID8/IFtdKSB7XG4gICAgICBhbGxUYWdzLmFkZCh0YWcpXG4gICAgfVxuICB9XG4gIGNvbnN0IHRhZ3MgPSBbLi4uYWxsVGFnc10uc29ydCgpXG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IGAvJHtwYXRobmFtZS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIil9L2BcbiAgY29uc3QgaXNJbmRleCA9IHNlY3Rpb24gPyBub3JtYWxpemVkID09PSBzZWN0aW9uLnByZWZpeCA6IGZhbHNlXG4gIGNvbnN0IHNlY3Rpb25QYXRoID0gKHNlY3Rpb24/LnByZWZpeCA/PyBcIi9ibG9nL1wiKS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIilcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U2lkZWJhckdyb3VwPlxuICAgICAgICA8U2lkZWJhckdyb3VwTGFiZWwgY2xhc3NOYW1lPVwidXBwZXJjYXNlIGZvbnQtbW9ubyB0ZXh0LXhzIHRyYWNraW5nLXdpZGVzdFwiPlxuICAgICAgICAgIFBvc3RzXG4gICAgICAgIDwvU2lkZWJhckdyb3VwTGFiZWw+XG4gICAgICAgIDxTaWRlYmFyR3JvdXBDb250ZW50PlxuICAgICAgICAgIDxTaWRlYmFyTWVudT5cbiAgICAgICAgICAgIDxTaWRlYmFyTWVudUl0ZW0+XG4gICAgICAgICAgICAgIDxTaWRlYmFyTWVudUJ1dHRvblxuICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtpc0luZGV4fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17aXNJbmRleCA/IFwiXCIgOiBcIm9wYWNpdHktNzVcIn1cbiAgICAgICAgICAgICAgICByZW5kZXI9ezxMaW5rIHRvPVwiLyRcIiBwYXJhbXM9e3sgX3NwbGF0OiBzZWN0aW9uUGF0aCB9fSAvPn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxMaXN0IGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4+QWxsIFBvc3RzPC9zcGFuPlxuICAgICAgICAgICAgICA8L1NpZGViYXJNZW51QnV0dG9uPlxuICAgICAgICAgICAgPC9TaWRlYmFyTWVudUl0ZW0+XG4gICAgICAgICAgICA8U2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgICA8U2lkZWJhck1lbnVCdXR0b24gY2xhc3NOYW1lPVwib3BhY2l0eS03NVwiPlxuICAgICAgICAgICAgICAgIDxDbG9jayBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuPlJlY2VudCBQb3N0czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9TaWRlYmFyTWVudUJ1dHRvbj5cbiAgICAgICAgICAgICAgPFNpZGViYXJNZW51U3ViPlxuICAgICAgICAgICAgICAgIHtyZWNlbnRQb3N0cy5tYXAocG9zdCA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBub3JtYWxpemVkID09PSBwb3N0LnBhdGhcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxTaWRlYmFyTWVudVN1Ykl0ZW0ga2V5PXtwb3N0LnBhdGh9PlxuICAgICAgICAgICAgICAgICAgICAgIDxTaWRlYmFyTWVudVN1YkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e2FjdGl2ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YWN0aXZlID8gXCJcIiA6IFwib3BhY2l0eS03NVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bz1cIi8kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zcGxhdDogcG9zdC5wYXRoLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntwb3N0LnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NpZGViYXJNZW51U3ViQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1NpZGViYXJNZW51U3ViSXRlbT5cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9TaWRlYmFyTWVudVN1Yj5cbiAgICAgICAgICAgIDwvU2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgPFNpZGViYXJNZW51SXRlbT5cbiAgICAgICAgICAgICAgPFNpZGViYXJNZW51QnV0dG9uIGNsYXNzTmFtZT1cIm9wYWNpdHktNzVcIj5cbiAgICAgICAgICAgICAgICA8UnNzIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4+UlNTIEZlZWQ8L3NwYW4+XG4gICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVCdXR0b24+XG4gICAgICAgICAgICA8L1NpZGViYXJNZW51SXRlbT5cbiAgICAgICAgICA8L1NpZGViYXJNZW51PlxuICAgICAgICA8L1NpZGViYXJHcm91cENvbnRlbnQ+XG4gICAgICA8L1NpZGViYXJHcm91cD5cblxuICAgICAge3RhZ3MubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxTaWRlYmFyR3JvdXA+XG4gICAgICAgICAgPFNpZGViYXJHcm91cExhYmVsIGNsYXNzTmFtZT1cInVwcGVyY2FzZSBmb250LW1vbm8gdGV4dC14cyB0cmFja2luZy13aWRlc3RcIj5cbiAgICAgICAgICAgIFRhZ3NcbiAgICAgICAgICA8L1NpZGViYXJHcm91cExhYmVsPlxuICAgICAgICAgIDxTaWRlYmFyR3JvdXBDb250ZW50PlxuICAgICAgICAgICAgPFNpZGViYXJNZW51PlxuICAgICAgICAgICAgICB7dGFncy5tYXAodGFnID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWdQYXRoID0gYCR7c2VjdGlvblBhdGh9L3RhZ3MvJHt0YWd9YFxuICAgICAgICAgICAgICAgIGNvbnN0IHRhZ0FjdGl2ZSA9IG5vcm1hbGl6ZWQgPT09IGAvJHt0YWdQYXRofS9gXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxTaWRlYmFyTWVudUl0ZW0ga2V5PXt0YWd9PlxuICAgICAgICAgICAgICAgICAgICA8U2lkZWJhck1lbnVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17dGFnQWN0aXZlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGFnQWN0aXZlID8gXCJcIiA6IFwib3BhY2l0eS03NVwifVxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17PExpbmsgdG89XCIvJFwiIHBhcmFtcz17eyBfc3BsYXQ6IHRhZ1BhdGggfX0gLz59XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFnIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57dGFnfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TaWRlYmFyTWVudUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L1NpZGViYXJNZW51PlxuICAgICAgICAgIDwvU2lkZWJhckdyb3VwQ29udGVudD5cbiAgICAgICAgPC9TaWRlYmFyR3JvdXA+XG4gICAgICApfVxuICAgIDwvPlxuICApXG59XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Link, useLocation } from "@tanstack/react-router";
|
|
3
|
+
import { Clock, List } from "lucide-react";
|
|
4
|
+
import { currentSection, sectionFlatArticles, sortedArticles, } from "../content/article.js";
|
|
5
|
+
import { SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, } from "../elements/sidebar.js";
|
|
6
|
+
/** Changelog body slot for the Sidebar shell: All Releases / Recent Releases */
|
|
7
|
+
export function SidebarReleases() {
|
|
8
|
+
const pathname = useLocation({ select: l => l.pathname });
|
|
9
|
+
const section = currentSection(`/${pathname.replace(/^\/|\/$/g, "")}/`);
|
|
10
|
+
const flat = section ? (sectionFlatArticles.get(section.prefix) ?? []) : [];
|
|
11
|
+
const entries = flat
|
|
12
|
+
.map(p => sortedArticles.find(a => a.path === p))
|
|
13
|
+
.filter(a => a !== undefined);
|
|
14
|
+
const recent = entries.slice(0, 5);
|
|
15
|
+
const normalized = `/${pathname.replace(/^\/|\/$/g, "")}/`;
|
|
16
|
+
const isIndex = section ? normalized === section.prefix : false;
|
|
17
|
+
const sectionPath = (section?.prefix ?? "/changelog/").replace(/^\/|\/$/g, "");
|
|
18
|
+
return (_jsxs(SidebarGroup, { children: [
|
|
19
|
+
_jsx(SidebarGroupLabel, { className: "uppercase font-mono text-xs tracking-widest", children: "Releases" }), _jsx(SidebarGroupContent, { children: _jsxs(SidebarMenu, { children: [
|
|
20
|
+
_jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { isActive: isIndex, className: isIndex ? "" : "opacity-75", render: _jsx(Link, { to: "/$", params: { _splat: sectionPath } }), children: [
|
|
21
|
+
_jsx(List, { className: "size-4" }), _jsx("span", { children: "All Releases" })
|
|
22
|
+
] }) }), _jsxs(SidebarMenuItem, { children: [
|
|
23
|
+
_jsxs(SidebarMenuButton, { className: "opacity-75", children: [
|
|
24
|
+
_jsx(Clock, { className: "size-4" }), _jsx("span", { children: "Recent Releases" })
|
|
25
|
+
] }), _jsx(SidebarMenuSub, { children: recent.map(entry => {
|
|
26
|
+
const active = normalized === entry.path;
|
|
27
|
+
return (_jsx(SidebarMenuSubItem, { children: _jsx(SidebarMenuSubButton, { isActive: active, className: active ? "" : "opacity-75", render: _jsx(Link, { to: "/$", params: {
|
|
28
|
+
_splat: entry.path.replace(/^\/|\/$/g, ""),
|
|
29
|
+
} }), children: _jsx("span", { children: entry.title }) }) }, entry.path));
|
|
30
|
+
}) })
|
|
31
|
+
] })
|
|
32
|
+
] }) })
|
|
33
|
+
] }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhclJlbGVhc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2lkZWJhclJlbGVhc2VzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixjQUFjLEdBQ2YsTUFBTSx1QkFBdUIsQ0FBQTtBQUM5QixPQUFPLEVBQ0wsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSx3QkFBeUIsQ0FBQTtBQUVoQyxnRkFBZ0Y7QUFDaEYsTUFBTSxVQUFVLGVBQWU7SUFDN0IsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFFekQsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDM0UsTUFBTSxPQUFPLEdBQUcsSUFBSTtTQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNoRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUE7SUFDL0IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFBO0lBQzFELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUMvRCxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUU5RSxPQUFPLENBQ0wsTUFBQyxZQUFZO1lBQ1gsS0FBQyxpQkFBaUIsSUFBQyxTQUFTLEVBQUMsNkNBQTZDLHlCQUV0RCxFQUNwQixLQUFDLG1CQUFtQixjQUNsQixNQUFDLFdBQVc7d0JBQ1YsS0FBQyxlQUFlLGNBQ2QsTUFBQyxpQkFBaUIsSUFDaEIsUUFBUSxFQUFFLE9BQU8sRUFDakIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQ3RDLE1BQU0sRUFBRSxLQUFDLElBQUksSUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBSTtvQ0FFekQsS0FBQyxJQUFJLElBQUMsU0FBUyxFQUFDLFFBQVEsR0FBRyxFQUMzQiwwQ0FBeUI7b0NBQ1AsR0FDSixFQUNsQixNQUFDLGVBQWU7Z0NBQ2QsTUFBQyxpQkFBaUIsSUFBQyxTQUFTLEVBQUMsWUFBWTt3Q0FDdkMsS0FBQyxLQUFLLElBQUMsU0FBUyxFQUFDLFFBQVEsR0FBRyxFQUM1Qiw2Q0FBNEI7d0NBQ1YsRUFDcEIsS0FBQyxjQUFjLGNBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTt3Q0FDbEIsTUFBTSxNQUFNLEdBQUcsVUFBVSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUE7d0NBQ3hDLE9BQU8sQ0FDTCxLQUFDLGtCQUFrQixjQUNqQixLQUFDLG9CQUFvQixJQUNuQixRQUFRLEVBQUUsTUFBTSxFQUNoQixTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFDckMsTUFBTSxFQUNKLEtBQUMsSUFBSSxJQUNILEVBQUUsRUFBQyxJQUFJLEVBQ1AsTUFBTSxFQUFFO3dEQUNOLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO3FEQUMzQyxHQUNELFlBR0oseUJBQU8sS0FBSyxDQUFDLEtBQUssR0FBUSxHQUNMLElBZEEsS0FBSyxDQUFDLElBQUksQ0FlZCxDQUN0QixDQUFBO29DQUNILENBQUMsQ0FBQyxHQUNhO2dDQUNEO3dCQUNOLEdBQ007WUFDVCxDQUNoQixDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpbmssIHVzZUxvY2F0aW9uIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIlxuaW1wb3J0IHsgQ2xvY2ssIExpc3QgfSBmcm9tIFwibHVjaWRlLXJlYWN0XCJcbmltcG9ydCB7XG4gIGN1cnJlbnRTZWN0aW9uLFxuICBzZWN0aW9uRmxhdEFydGljbGVzLFxuICBzb3J0ZWRBcnRpY2xlcyxcbn0gZnJvbSBcIi4uL2NvbnRlbnQvYXJ0aWNsZS50c1wiXG5pbXBvcnQge1xuICBTaWRlYmFyR3JvdXAsXG4gIFNpZGViYXJHcm91cENvbnRlbnQsXG4gIFNpZGViYXJHcm91cExhYmVsLFxuICBTaWRlYmFyTWVudSxcbiAgU2lkZWJhck1lbnVCdXR0b24sXG4gIFNpZGViYXJNZW51SXRlbSxcbiAgU2lkZWJhck1lbnVTdWIsXG4gIFNpZGViYXJNZW51U3ViQnV0dG9uLFxuICBTaWRlYmFyTWVudVN1Ykl0ZW0sXG59IGZyb20gXCIuLi9lbGVtZW50cy9zaWRlYmFyLnRzeFwiXG5cbi8qKiBDaGFuZ2Vsb2cgYm9keSBzbG90IGZvciB0aGUgU2lkZWJhciBzaGVsbDogQWxsIFJlbGVhc2VzIC8gUmVjZW50IFJlbGVhc2VzICovXG5leHBvcnQgZnVuY3Rpb24gU2lkZWJhclJlbGVhc2VzKCkge1xuICBjb25zdCBwYXRobmFtZSA9IHVzZUxvY2F0aW9uKHsgc2VsZWN0OiBsID0+IGwucGF0aG5hbWUgfSlcblxuICBjb25zdCBzZWN0aW9uID0gY3VycmVudFNlY3Rpb24oYC8ke3BhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYClcbiAgY29uc3QgZmxhdCA9IHNlY3Rpb24gPyAoc2VjdGlvbkZsYXRBcnRpY2xlcy5nZXQoc2VjdGlvbi5wcmVmaXgpID8/IFtdKSA6IFtdXG4gIGNvbnN0IGVudHJpZXMgPSBmbGF0XG4gICAgLm1hcChwID0+IHNvcnRlZEFydGljbGVzLmZpbmQoYSA9PiBhLnBhdGggPT09IHApKVxuICAgIC5maWx0ZXIoYSA9PiBhICE9PSB1bmRlZmluZWQpXG4gIGNvbnN0IHJlY2VudCA9IGVudHJpZXMuc2xpY2UoMCwgNSlcblxuICBjb25zdCBub3JtYWxpemVkID0gYC8ke3BhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYFxuICBjb25zdCBpc0luZGV4ID0gc2VjdGlvbiA/IG5vcm1hbGl6ZWQgPT09IHNlY3Rpb24ucHJlZml4IDogZmFsc2VcbiAgY29uc3Qgc2VjdGlvblBhdGggPSAoc2VjdGlvbj8ucHJlZml4ID8/IFwiL2NoYW5nZWxvZy9cIikucmVwbGFjZSgvXlxcL3xcXC8kL2csIFwiXCIpXG5cbiAgcmV0dXJuIChcbiAgICA8U2lkZWJhckdyb3VwPlxuICAgICAgPFNpZGViYXJHcm91cExhYmVsIGNsYXNzTmFtZT1cInVwcGVyY2FzZSBmb250LW1vbm8gdGV4dC14cyB0cmFja2luZy13aWRlc3RcIj5cbiAgICAgICAgUmVsZWFzZXNcbiAgICAgIDwvU2lkZWJhckdyb3VwTGFiZWw+XG4gICAgICA8U2lkZWJhckdyb3VwQ29udGVudD5cbiAgICAgICAgPFNpZGViYXJNZW51PlxuICAgICAgICAgIDxTaWRlYmFyTWVudUl0ZW0+XG4gICAgICAgICAgICA8U2lkZWJhck1lbnVCdXR0b25cbiAgICAgICAgICAgICAgaXNBY3RpdmU9e2lzSW5kZXh9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17aXNJbmRleCA/IFwiXCIgOiBcIm9wYWNpdHktNzVcIn1cbiAgICAgICAgICAgICAgcmVuZGVyPXs8TGluayB0bz1cIi8kXCIgcGFyYW1zPXt7IF9zcGxhdDogc2VjdGlvblBhdGggfX0gLz59XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMaXN0IGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkFsbCBSZWxlYXNlczwvc3Bhbj5cbiAgICAgICAgICAgIDwvU2lkZWJhck1lbnVCdXR0b24+XG4gICAgICAgICAgPC9TaWRlYmFyTWVudUl0ZW0+XG4gICAgICAgICAgPFNpZGViYXJNZW51SXRlbT5cbiAgICAgICAgICAgIDxTaWRlYmFyTWVudUJ1dHRvbiBjbGFzc05hbWU9XCJvcGFjaXR5LTc1XCI+XG4gICAgICAgICAgICAgIDxDbG9jayBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj5SZWNlbnQgUmVsZWFzZXM8L3NwYW4+XG4gICAgICAgICAgICA8L1NpZGViYXJNZW51QnV0dG9uPlxuICAgICAgICAgICAgPFNpZGViYXJNZW51U3ViPlxuICAgICAgICAgICAgICB7cmVjZW50Lm1hcChlbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gbm9ybWFsaXplZCA9PT0gZW50cnkucGF0aFxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8U2lkZWJhck1lbnVTdWJJdGVtIGtleT17ZW50cnkucGF0aH0+XG4gICAgICAgICAgICAgICAgICAgIDxTaWRlYmFyTWVudVN1YkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXthY3RpdmV9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXthY3RpdmUgPyBcIlwiIDogXCJvcGFjaXR5LTc1XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiLyRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3BsYXQ6IGVudHJ5LnBhdGgucmVwbGFjZSgvXlxcL3xcXC8kL2csIFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57ZW50cnkudGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L1NpZGViYXJNZW51U3ViQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9TaWRlYmFyTWVudVN1Ykl0ZW0+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvU2lkZWJhck1lbnVTdWI+XG4gICAgICAgICAgPC9TaWRlYmFyTWVudUl0ZW0+XG4gICAgICAgIDwvU2lkZWJhck1lbnU+XG4gICAgICA8L1NpZGViYXJHcm91cENvbnRlbnQ+XG4gICAgPC9TaWRlYmFyR3JvdXA+XG4gIClcbn1cbiJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Shared Sections group. Renders sidebar-positioned sections always, and
|
|
2
|
+
* header-positioned sections only on mobile (mobile collapses all sections
|
|
3
|
+
* into the sidebar since the header nav strip is hidden below `md`). */
|
|
4
|
+
export declare function SidebarSections(): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Link, useLocation, useMatch } from "@tanstack/react-router";
|
|
3
|
+
import { currentSection, sectionFirstArticle } from "../content/article.js";
|
|
4
|
+
import { DynamicIcon } from "../helpers/dynamic-icon.js";
|
|
5
|
+
import { sectionIcon } from "../helpers/section.js";
|
|
6
|
+
import { SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from "../elements/sidebar.js";
|
|
7
|
+
function splatFor(pathname) {
|
|
8
|
+
return { _splat: pathname.replace(/^\/|\/$/g, "") };
|
|
9
|
+
}
|
|
10
|
+
/** Shared Sections group. Renders sidebar-positioned sections always, and
|
|
11
|
+
* header-positioned sections only on mobile (mobile collapses all sections
|
|
12
|
+
* into the sidebar since the header nav strip is hidden below `md`). */
|
|
13
|
+
export function SidebarSections() {
|
|
14
|
+
const pathname = useLocation({ select: l => l.pathname });
|
|
15
|
+
const articleRoute = useMatch({ from: "/$", shouldThrow: false });
|
|
16
|
+
const section = articleRoute
|
|
17
|
+
? currentSection(`/${pathname.replace(/^\/|\/$/g, "")}/`)
|
|
18
|
+
: undefined;
|
|
19
|
+
const sections = import.meta.env.CONFIG.sections ?? [];
|
|
20
|
+
if (!sections.length)
|
|
21
|
+
return null;
|
|
22
|
+
const hasDesktopItems = sections.some(s => s.position === "sidebar");
|
|
23
|
+
return (_jsxs(SidebarGroup, { className: hasDesktopItems ? undefined : "md:hidden", children: [
|
|
24
|
+
_jsx(SidebarGroupLabel, { className: "uppercase font-mono text-xs tracking-widest", children: "Sections" }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: sections.map(s => {
|
|
25
|
+
const target = s.type === "blog" || s.type === "changelog"
|
|
26
|
+
? s.prefix
|
|
27
|
+
: (sectionFirstArticle.get(s.prefix) ?? s.prefix);
|
|
28
|
+
const active = section?.prefix === s.prefix;
|
|
29
|
+
const mobileOnly = s.position !== "sidebar";
|
|
30
|
+
return (_jsx(SidebarMenuItem, { className: mobileOnly ? "md:hidden" : undefined, children: _jsxs(SidebarMenuButton, { isActive: active, className: active ? "" : "opacity-75", render: _jsx(Link, { to: target === "/" ? "/" : "/$", params: target && target !== "/" ? splatFor(target) : {} }), children: [
|
|
31
|
+
_jsx(DynamicIcon, { name: sectionIcon(s), className: "size-4" }), _jsx("span", { children: s.title })
|
|
32
|
+
] }) }, s.prefix));
|
|
33
|
+
}) }) })
|
|
34
|
+
] }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhclNlY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2lkZWJhclNlY3Rpb25zLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNkIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUNMLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsZUFBZSxHQUNoQixNQUFNLHdCQUF5QixDQUFBO0FBRWhDLFNBQVMsUUFBUSxDQUFDLFFBQWdCO0lBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQTtBQUNyRCxDQUFDO0FBRUQ7O3dFQUV3RTtBQUN4RSxNQUFNLFVBQVUsZUFBZTtJQUM3QixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUN6RCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQ2pFLE1BQU0sT0FBTyxHQUFHLFlBQVk7UUFDMUIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDekQsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUNiLE1BQU0sUUFBUSxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQTtJQUV0RCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07UUFBRSxPQUFPLElBQUksQ0FBQTtJQUNqQyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQTtJQUVwRSxPQUFPLENBQ0wsTUFBQyxZQUFZLElBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQ2hFLEtBQUMsaUJBQWlCLElBQUMsU0FBUyxFQUFDLDZDQUE2Qyx5QkFFdEQsRUFDcEIsS0FBQyxtQkFBbUIsY0FDbEIsS0FBQyxXQUFXLGNBQ1QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDaEIsTUFBTSxNQUFNLEdBQ1YsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXOzRCQUN6QyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07NEJBQ1YsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7d0JBQ3JELE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQTt3QkFDM0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUE7d0JBQzNDLE9BQU8sQ0FDTCxLQUFDLGVBQWUsSUFFZCxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsWUFFL0MsTUFBQyxpQkFBaUIsSUFDaEIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQ3JDLE1BQU0sRUFDSixLQUFDLElBQUksSUFDSCxFQUFFLEVBQUUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQy9CLE1BQU0sRUFBRSxNQUFNLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQ3hEO29DQUdKLEtBQUMsV0FBVyxJQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFDLFFBQVEsR0FBRyxFQUN4RCx5QkFBTyxDQUFDLENBQUMsS0FBSyxHQUFRO29DQUNKLElBZmYsQ0FBQyxDQUFDLE1BQU0sQ0FnQkcsQ0FDbkIsQ0FBQTtvQkFDSCxDQUFDLENBQUMsR0FDVSxHQUNNO1lBQ1QsQ0FDaEIsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW5rLCB1c2VMb2NhdGlvbiwgdXNlTWF0Y2ggfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiXG5pbXBvcnQgeyBjdXJyZW50U2VjdGlvbiwgc2VjdGlvbkZpcnN0QXJ0aWNsZSB9IGZyb20gXCIuLi9jb250ZW50L2FydGljbGUudHNcIlxuaW1wb3J0IHsgRHluYW1pY0ljb24gfSBmcm9tIFwiLi4vaGVscGVycy9keW5hbWljLWljb24udHN4XCJcbmltcG9ydCB7IHNlY3Rpb25JY29uIH0gZnJvbSBcIi4uL2hlbHBlcnMvc2VjdGlvbi50c1wiXG5pbXBvcnQge1xuICBTaWRlYmFyR3JvdXAsXG4gIFNpZGViYXJHcm91cENvbnRlbnQsXG4gIFNpZGViYXJHcm91cExhYmVsLFxuICBTaWRlYmFyTWVudSxcbiAgU2lkZWJhck1lbnVCdXR0b24sXG4gIFNpZGViYXJNZW51SXRlbSxcbn0gZnJvbSBcIi4uL2VsZW1lbnRzL3NpZGViYXIudHN4XCJcblxuZnVuY3Rpb24gc3BsYXRGb3IocGF0aG5hbWU6IHN0cmluZykge1xuICByZXR1cm4geyBfc3BsYXQ6IHBhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKSB9XG59XG5cbi8qKiBTaGFyZWQgU2VjdGlvbnMgZ3JvdXAuIFJlbmRlcnMgc2lkZWJhci1wb3NpdGlvbmVkIHNlY3Rpb25zIGFsd2F5cywgYW5kXG4gKiBoZWFkZXItcG9zaXRpb25lZCBzZWN0aW9ucyBvbmx5IG9uIG1vYmlsZSAobW9iaWxlIGNvbGxhcHNlcyBhbGwgc2VjdGlvbnNcbiAqIGludG8gdGhlIHNpZGViYXIgc2luY2UgdGhlIGhlYWRlciBuYXYgc3RyaXAgaXMgaGlkZGVuIGJlbG93IGBtZGApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNpZGViYXJTZWN0aW9ucygpIHtcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VMb2NhdGlvbih7IHNlbGVjdDogbCA9PiBsLnBhdGhuYW1lIH0pXG4gIGNvbnN0IGFydGljbGVSb3V0ZSA9IHVzZU1hdGNoKHsgZnJvbTogXCIvJFwiLCBzaG91bGRUaHJvdzogZmFsc2UgfSlcbiAgY29uc3Qgc2VjdGlvbiA9IGFydGljbGVSb3V0ZVxuICAgID8gY3VycmVudFNlY3Rpb24oYC8ke3BhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYClcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCBzZWN0aW9ucyA9IGltcG9ydC5tZXRhLmVudi5DT05GSUcuc2VjdGlvbnMgPz8gW11cblxuICBpZiAoIXNlY3Rpb25zLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgY29uc3QgaGFzRGVza3RvcEl0ZW1zID0gc2VjdGlvbnMuc29tZShzID0+IHMucG9zaXRpb24gPT09IFwic2lkZWJhclwiKVxuXG4gIHJldHVybiAoXG4gICAgPFNpZGViYXJHcm91cCBjbGFzc05hbWU9e2hhc0Rlc2t0b3BJdGVtcyA/IHVuZGVmaW5lZCA6IFwibWQ6aGlkZGVuXCJ9PlxuICAgICAgPFNpZGViYXJHcm91cExhYmVsIGNsYXNzTmFtZT1cInVwcGVyY2FzZSBmb250LW1vbm8gdGV4dC14cyB0cmFja2luZy13aWRlc3RcIj5cbiAgICAgICAgU2VjdGlvbnNcbiAgICAgIDwvU2lkZWJhckdyb3VwTGFiZWw+XG4gICAgICA8U2lkZWJhckdyb3VwQ29udGVudD5cbiAgICAgICAgPFNpZGViYXJNZW51PlxuICAgICAgICAgIHtzZWN0aW9ucy5tYXAocyA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPVxuICAgICAgICAgICAgICBzLnR5cGUgPT09IFwiYmxvZ1wiIHx8IHMudHlwZSA9PT0gXCJjaGFuZ2Vsb2dcIlxuICAgICAgICAgICAgICAgID8gcy5wcmVmaXhcbiAgICAgICAgICAgICAgICA6IChzZWN0aW9uRmlyc3RBcnRpY2xlLmdldChzLnByZWZpeCkgPz8gcy5wcmVmaXgpXG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBzZWN0aW9uPy5wcmVmaXggPT09IHMucHJlZml4XG4gICAgICAgICAgICBjb25zdCBtb2JpbGVPbmx5ID0gcy5wb3NpdGlvbiAhPT0gXCJzaWRlYmFyXCJcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTaWRlYmFyTWVudUl0ZW1cbiAgICAgICAgICAgICAgICBrZXk9e3MucHJlZml4fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17bW9iaWxlT25seSA/IFwibWQ6aGlkZGVuXCIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U2lkZWJhck1lbnVCdXR0b25cbiAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXthY3RpdmV9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2FjdGl2ZSA/IFwiXCIgOiBcIm9wYWNpdHktNzVcIn1cbiAgICAgICAgICAgICAgICAgIHJlbmRlcj17XG4gICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgdG89e3RhcmdldCA9PT0gXCIvXCIgPyBcIi9cIiA6IFwiLyRcIn1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9e3RhcmdldCAmJiB0YXJnZXQgIT09IFwiL1wiID8gc3BsYXRGb3IodGFyZ2V0KSA6IHt9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxEeW5hbWljSWNvbiBuYW1lPXtzZWN0aW9uSWNvbihzKX0gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPntzLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1NpZGViYXJNZW51QnV0dG9uPlxuICAgICAgICAgICAgICA8L1NpZGViYXJNZW51SXRlbT5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9TaWRlYmFyTWVudT5cbiAgICAgIDwvU2lkZWJhckdyb3VwQ29udGVudD5cbiAgICA8L1NpZGViYXJHcm91cD5cbiAgKVxufVxuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import defaultLogo from "../assets/logo.svg";
|
|
3
|
+
/** Renders the site logo, title, and description in the sidebar header */
|
|
4
|
+
export function SiteTitle() {
|
|
5
|
+
const logo = import.meta.env.CONFIG.logo ?? defaultLogo;
|
|
6
|
+
return (_jsxs("div", { className: "flex items-end gap-2.5 text-sm", children: [
|
|
7
|
+
_jsx("img", { src: logo, alt: import.meta.env.CONFIG.title, className: "size-6.5 mb-1.25" }), _jsxs("div", { className: "flex flex-col gap-0.5 leading-none", children: [
|
|
8
|
+
_jsx("span", { className: "font-semibold", children: import.meta.env.CONFIG.title }), _jsx("span", { className: "text-xs opacity-80", children: import.meta.env.CONFIG.description })
|
|
9
|
+
] })
|
|
10
|
+
] }));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2l0ZVRpdGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2l0ZVRpdGxlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxXQUFXLE1BQU0sb0JBQW9CLENBQUE7QUFFNUMsMEVBQTBFO0FBQzFFLE1BQU0sVUFBVSxTQUFTO0lBQ3ZCLE1BQU0sSUFBSSxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQTtJQUN2RCxPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMsZ0NBQWdDO1lBQzdDLGNBQ0UsR0FBRyxFQUFFLElBQUksRUFDVCxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQ2pDLFNBQVMsRUFBQyxrQkFBa0IsR0FDNUIsRUFDRixlQUFLLFNBQVMsRUFBQyxvQ0FBb0M7b0JBQ2pELGVBQU0sU0FBUyxFQUFDLGVBQWUsWUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBUSxFQUNyRSxlQUFNLFNBQVMsRUFBQyxvQkFBb0IsWUFDakMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQzlCO29CQUNIO1lBQ0YsQ0FDUCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZhdWx0TG9nbyBmcm9tIFwiLi4vYXNzZXRzL2xvZ28uc3ZnXCJcblxuLyoqIFJlbmRlcnMgdGhlIHNpdGUgbG9nbywgdGl0bGUsIGFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgc2lkZWJhciBoZWFkZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiBTaXRlVGl0bGUoKSB7XG4gIGNvbnN0IGxvZ28gPSBpbXBvcnQubWV0YS5lbnYuQ09ORklHLmxvZ28gPz8gZGVmYXVsdExvZ29cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtZW5kIGdhcC0yLjUgdGV4dC1zbVwiPlxuICAgICAgPGltZ1xuICAgICAgICBzcmM9e2xvZ299XG4gICAgICAgIGFsdD17aW1wb3J0Lm1ldGEuZW52LkNPTkZJRy50aXRsZX1cbiAgICAgICAgY2xhc3NOYW1lPVwic2l6ZS02LjUgbWItMS4yNVwiXG4gICAgICAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0wLjUgbGVhZGluZy1ub25lXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGRcIj57aW1wb3J0Lm1ldGEuZW52LkNPTkZJRy50aXRsZX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgb3BhY2l0eS04MFwiPlxuICAgICAgICAgIHtpbXBvcnQubWV0YS5lbnYuQ09ORklHLmRlc2NyaXB0aW9ufVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ComponentProps } from "react";
|
|
2
|
+
import { TableHeader, TableBody, TableRow, TableHead, TableCell } from "../elements/table.tsx";
|
|
3
|
+
/** Wraps markdown tables with click-to-sort column headers */
|
|
4
|
+
export declare function SortableTable(props: ComponentProps<"table">): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export { TableHeader, TableBody, TableRow, TableHead, TableCell };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell, } from "../elements/table.js";
|
|
4
|
+
/** Wraps markdown tables with click-to-sort column headers */
|
|
5
|
+
export function SortableTable(props) {
|
|
6
|
+
const ref = useRef(null);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
const container = ref.current;
|
|
9
|
+
if (!container)
|
|
10
|
+
return;
|
|
11
|
+
let activeCol = -1;
|
|
12
|
+
let ascending = true;
|
|
13
|
+
const headers = container.querySelectorAll("th");
|
|
14
|
+
const cleanups = [];
|
|
15
|
+
headers.forEach((th, colIndex) => {
|
|
16
|
+
th.style.cursor = "pointer";
|
|
17
|
+
th.classList.add("select-none");
|
|
18
|
+
const handler = () => {
|
|
19
|
+
if (activeCol === colIndex) {
|
|
20
|
+
ascending = !ascending;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
activeCol = colIndex;
|
|
24
|
+
ascending = true;
|
|
25
|
+
}
|
|
26
|
+
const tbody = container.querySelector("tbody");
|
|
27
|
+
if (!tbody)
|
|
28
|
+
return;
|
|
29
|
+
const rows = Array.from(tbody.querySelectorAll("tr"));
|
|
30
|
+
rows.sort((a, b) => {
|
|
31
|
+
const aVal = a.children[colIndex]?.textContent?.trim() ?? "";
|
|
32
|
+
const bVal = b.children[colIndex]?.textContent?.trim() ?? "";
|
|
33
|
+
const aNum = Number(aVal);
|
|
34
|
+
const bNum = Number(bVal);
|
|
35
|
+
const cmp = aVal !== "" && bVal !== "" && !isNaN(aNum) && !isNaN(bNum)
|
|
36
|
+
? aNum - bNum
|
|
37
|
+
: aVal.localeCompare(bVal);
|
|
38
|
+
return ascending ? cmp : -cmp;
|
|
39
|
+
});
|
|
40
|
+
for (const row of rows)
|
|
41
|
+
tbody.appendChild(row);
|
|
42
|
+
headers.forEach((h, i) => {
|
|
43
|
+
const indicator = h.querySelector("[data-sort]");
|
|
44
|
+
if (indicator)
|
|
45
|
+
indicator.remove();
|
|
46
|
+
if (i === colIndex) {
|
|
47
|
+
const span = document.createElement("span");
|
|
48
|
+
span.dataset.sort = "";
|
|
49
|
+
span.className = "ml-1 text-muted-foreground";
|
|
50
|
+
span.textContent = ascending ? "↑" : "↓";
|
|
51
|
+
h.appendChild(span);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
th.addEventListener("click", handler);
|
|
56
|
+
cleanups.push(() => th.removeEventListener("click", handler));
|
|
57
|
+
});
|
|
58
|
+
return () => cleanups.forEach(fn => fn());
|
|
59
|
+
}, []);
|
|
60
|
+
return (_jsx("div", { ref: ref, className: "not-prose", children: _jsx(Table, { ...props }) }));
|
|
61
|
+
}
|
|
62
|
+
export { TableHeader, TableBody, TableRow, TableHead, TableCell };
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29ydGFibGVUYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL1NvcnRhYmxlVGFibGUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBdUIsTUFBTSxPQUFPLENBQUE7QUFDOUQsT0FBTyxFQUNMLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sc0JBQXVCLENBQUE7QUFFOUIsOERBQThEO0FBQzlELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBOEI7SUFDMUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFpQixJQUFJLENBQUMsQ0FBQTtJQUV4QyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQTtRQUM3QixJQUFJLENBQUMsU0FBUztZQUFFLE9BQU07UUFFdEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDbEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFBO1FBRXBCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBYyxJQUFJLENBQUMsQ0FBQTtRQUM3RCxNQUFNLFFBQVEsR0FBbUIsRUFBRSxDQUFBO1FBRW5DLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDL0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO1lBQzNCLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBRS9CLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDbkIsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzNCLFNBQVMsR0FBRyxDQUFDLFNBQVMsQ0FBQTtnQkFDeEIsQ0FBQztxQkFBTSxDQUFD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SyxLQUFLLEdBQUksR0FDaEIsQ0FDUCxDQUFBO0FBQ0gsQ0FBQztBQUVELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdHlwZSBDb21wb25lbnRQcm9wcyB9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge1xuICBUYWJsZSxcbiAgVGFibGVIZWFkZXIsXG4gIFRhYmxlQm9keSxcbiAgVGFibGVSb3csXG4gIFRhYmxlSGVhZCxcbiAgVGFibGVDZWxsLFxufSBmcm9tIFwiLi4vZWxlbWVudHMvdGFibGUudHN4XCJcblxuLyoqIFdyYXBzIG1hcmtkb3duIHRhYmxlcyB3aXRoIGNsaWNrLXRvLXNvcnQgY29sdW1uIGhlYWRlcnMgKi9cbmV4cG9ydCBmdW5jdGlvbiBTb3J0YWJsZVRhYmxlKHByb3BzOiBDb21wb25lbnRQcm9wczxcInRhYmxlXCI+KSB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVyblxuXG4gICAgbGV0IGFjdGl2ZUNvbCA9IC0xXG4gICAgbGV0IGFzY2VuZGluZyA9IHRydWVcblxuICAgIGNvbnN0IGhlYWRlcnMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXCJ0aFwiKVxuICAgIGNvbnN0IGNsZWFudXBzOiAoKCkgPT4gdm9pZClbXSA9IFtdXG5cbiAgICBoZWFkZXJzLmZvckVhY2goKHRoLCBjb2xJbmRleCkgPT4ge1xuICAgICAgdGguc3R5bGUuY3Vyc29yID0gXCJwb2ludGVyXCJcbiAgICAgIHRoLmNsYXNzTGlzdC5hZGQoXCJzZWxlY3Qtbm9uZVwiKVxuXG4gICAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICBpZiAoYWN0aXZlQ29sID09PSBjb2xJbmRleCkge1xuICAgICAgICAgIGFzY2VuZGluZyA9ICFhc2NlbmRpbmdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3RpdmVDb2wgPSBjb2xJbmRleFxuICAgICAgICAgIGFzY2VuZGluZyA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRib2R5ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJ0Ym9keVwiKVxuICAgICAgICBpZiAoIXRib2R5KSByZXR1cm5cblxuICAgICAgICBjb25zdCByb3dzID0gQXJyYXkuZnJvbSh0Ym9keS5xdWVyeVNlbGVjdG9yQWxsKFwidHJcIikpXG4gICAgICAgIHJvd3Muc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFWYWwgPSBhLmNoaWxkcmVuW2NvbEluZGV4XT8udGV4dENvbnRlbnQ/LnRyaW0oKSA/PyBcIlwiXG4gICAgICAgICAgY29uc3QgYlZhbCA9IGIuY2hpbGRyZW5bY29sSW5kZXhdPy50ZXh0Q29udGVudD8udHJpbSgpID8/IFwiXCJcbiAgICAgICAgICBjb25zdCBhTnVtID0gTnVtYmVyKGFWYWwpXG4gICAgICAgICAgY29uc3QgYk51bSA9IE51bWJlcihiVmFsKVxuICAgICAgICAgIGNvbnN0IGNtcCA9XG4gICAgICAgICAgICBhVmFsICE9PSBcIlwiICYmIGJWYWwgIT09IFwiXCIgJiYgIWlzTmFOKGFOdW0pICYmICFpc05hTihiTnVtKVxuICAgICAgICAgICAgICA/IGFOdW0gLSBiTnVtXG4gICAgICAgICAgICAgIDogYVZhbC5sb2NhbGVDb21wYXJlKGJWYWwpXG4gICAgICAgICAgcmV0dXJuIGFzY2VuZGluZyA/IGNtcCA6IC1jbXBcbiAgICAgICAgfSlcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykgdGJvZHkuYXBwZW5kQ2hpbGQocm93KVxuXG4gICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaCwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGljYXRvciA9IGgucXVlcnlTZWxlY3RvcihcIltkYXRhLXNvcnRdXCIpXG4gICAgICAgICAgaWYgKGluZGljYXRvcikgaW5kaWNhdG9yLnJlbW92ZSgpXG4gICAgICAgICAgaWYgKGkgPT09IGNvbEluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIilcbiAgICAgICAgICAgIHNwYW4uZGF0YXNldC5zb3J0ID0gXCJcIlxuICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSBcIm1sLTEgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCJcbiAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBhc2NlbmRpbmcgPyBcIuKGkVwiIDogXCLihpNcIlxuICAgICAgICAgICAgaC5hcHBlbmRDaGlsZChzcGFuKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgdGguYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZXIpXG4gICAgICBjbGVhbnVwcy5wdXNoKCgpID0+IHRoLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVyKSlcbiAgICB9KVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFudXBzLmZvckVhY2goZm4gPT4gZm4oKSlcbiAgfSwgW10pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cmVmfSBjbGFzc05hbWU9XCJub3QtcHJvc2VcIj5cbiAgICAgIDxUYWJsZSB7Li4ucHJvcHN9IC8+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IHsgVGFibGVIZWFkZXIsIFRhYmxlQm9keSwgVGFibGVSb3csIFRhYmxlSGVhZCwgVGFibGVDZWxsIH1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/** Renders a SoundCloud iframe embed */
|
|
3
|
+
export function SoundCloud(props) {
|
|
4
|
+
const src = `https://w.soundcloud.com/player/?url=${encodeURIComponent(props.url)}&color=%23ff5500&auto_play=false&hide_related=true&show_comments=false&show_user=true&show_reposts=false&show_teaser=false`;
|
|
5
|
+
return (_jsx("div", { className: "not-prose my-4 overflow-hidden rounded-lg border", children: _jsx("iframe", { className: "w-full", height: 166, src: src, title: "SoundCloud audio", allow: "autoplay" }) }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU291bmRDbG91ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL1NvdW5kQ2xvdWQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx3Q0FBd0M7QUFDeEMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFzQjtJQUMvQyxNQUFNLEdBQUcsR0FBRyx3Q0FBd0Msa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyw0SEFBNEgsQ0FBQTtJQUU3TSxPQUFPLENBQ0wsY0FBSyxTQUFTLEVBQUMsa0RBQWtELFlBQy9ELGlCQUNFLFNBQVMsRUFBQyxRQUFRLEVBQ2xCLE1BQU0sRUFBRSxHQUFHLEVBQ1gsR0FBRyxFQUFFLEdBQUcsRUFDUixLQUFLLEVBQUMsa0JBQWtCLEVBQ3hCLEtBQUssRUFBQyxVQUFVLEdBQ2hCLEdBQ0UsQ0FDUCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBSZW5kZXJzIGEgU291bmRDbG91ZCBpZnJhbWUgZW1iZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBTb3VuZENsb3VkKHByb3BzOiB7IHVybDogc3RyaW5nIH0pIHtcbiAgY29uc3Qgc3JjID0gYGh0dHBzOi8vdy5zb3VuZGNsb3VkLmNvbS9wbGF5ZXIvP3VybD0ke2VuY29kZVVSSUNvbXBvbmVudChwcm9wcy51cmwpfSZjb2xvcj0lMjNmZjU1MDAmYXV0b19wbGF5PWZhbHNlJmhpZGVfcmVsYXRlZD10cnVlJnNob3dfY29tbWVudHM9ZmFsc2Umc2hvd191c2VyPXRydWUmc2hvd19yZXBvc3RzPWZhbHNlJnNob3dfdGVhc2VyPWZhbHNlYFxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJub3QtcHJvc2UgbXktNCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1sZyBib3JkZXJcIj5cbiAgICAgIDxpZnJhbWVcbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsXCJcbiAgICAgICAgaGVpZ2h0PXsxNjZ9XG4gICAgICAgIHNyYz17c3JjfVxuICAgICAgICB0aXRsZT1cIlNvdW5kQ2xvdWQgYXVkaW9cIlxuICAgICAgICBhbGxvdz1cImF1dG9wbGF5XCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiJdfQ==
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Link } from "@tanstack/react-router";
|
|
3
|
+
import { History } from "lucide-react";
|
|
4
|
+
import { sortedArticles } from "../content/article.js";
|
|
5
|
+
import { sectionTags } from "../content/tag.js";
|
|
6
|
+
import { Separator } from "../elements/separator.js";
|
|
7
|
+
import { TocContext } from "../helpers/toc-context.js";
|
|
8
|
+
import { Footer } from "./Footer.js";
|
|
9
|
+
import { PageToolbar } from "./PageToolbar.js";
|
|
10
|
+
import { MobileToc, Toc } from "./Toc.js";
|
|
11
|
+
/** Blog tag page listing posts filtered by a specific tag */
|
|
12
|
+
export function TagIndex(props) {
|
|
13
|
+
const tagMap = sectionTags.get(props.sectionPrefix);
|
|
14
|
+
const paths = tagMap?.get(props.tag) ?? [];
|
|
15
|
+
const posts = paths
|
|
16
|
+
.map(p => sortedArticles.find(a => a.path === p))
|
|
17
|
+
.filter(a => a !== undefined);
|
|
18
|
+
const tocItems = posts.map(post => ({
|
|
19
|
+
url: `#${slugOf(post.path)}`,
|
|
20
|
+
title: post.title,
|
|
21
|
+
depth: 2,
|
|
22
|
+
}));
|
|
23
|
+
const title = `Posts tagged '${props.tag}'`;
|
|
24
|
+
const content = [
|
|
25
|
+
`# ${title}`,
|
|
26
|
+
...posts.map(post => {
|
|
27
|
+
const parts = [`## ${post.title}`];
|
|
28
|
+
if (post.date)
|
|
29
|
+
parts.push(formatDate(post.date));
|
|
30
|
+
if (post.author) {
|
|
31
|
+
parts.push(Array.isArray(post.author) ? post.author.join(", ") : post.author);
|
|
32
|
+
}
|
|
33
|
+
if (post.description)
|
|
34
|
+
parts.push("", post.description);
|
|
35
|
+
return parts.join("\n");
|
|
36
|
+
}),
|
|
37
|
+
].join("\n\n");
|
|
38
|
+
return (_jsxs(TocContext.Provider, { value: tocItems, children: [
|
|
39
|
+
_jsx(MobileToc, { items: tocItems, children: _jsx(PageToolbar, { content: content }) }), _jsxs("div", { className: "flex flex-1 gap-10 p-4 pt-8 md:p-10", children: [
|
|
40
|
+
_jsxs("div", { className: "flex-1 min-w-0 mx-auto max-w-3xl", children: [
|
|
41
|
+
_jsxs("div", { className: "prose dark:prose-invert max-w-none mb-8", children: [
|
|
42
|
+
_jsx("h1", { id: "top", children: _jsxs("a", { href: "#top", children: ["Posts tagged \u2018", props.tag, "\u2019"] }) }), posts[0]?.date && (_jsx("p", { className: "flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-muted-foreground !-mt-4 !mb-0", children: _jsxs("span", { className: "flex items-center gap-1.5", children: [
|
|
43
|
+
_jsx(History, { className: "size-3.5" }),
|
|
44
|
+
"Updated ", formatDate(posts[0].date)] }) }))] }), _jsx("div", { className: "space-y-6", children: posts.map((post, i) => (_jsxs("article", { id: slugOf(post.path), children: [i > 0 && _jsx(Separator, { className: "mb-6" }), _jsx("h2", { className: "text-2xl", children: _jsx(Link, { to: "/$", params: { _splat: post.path.replace(/^\/|\/$/g, "") }, className: "font-medium hover:text-primary transition-colors", children: post.title }) }), _jsxs("p", { className: "text-sm text-muted-foreground mt-1 flex gap-3", children: [post.date && _jsx("span", { children: formatDate(post.date) }), post.author && (_jsx("span", { children: Array.isArray(post.author)
|
|
45
|
+
? post.author.join(", ")
|
|
46
|
+
: post.author }))] }), post.description && (_jsx("p", { className: "text-muted-foreground mt-2", children: post.description }))] }, post.path))) }), _jsx("div", { className: "mt-10", children: _jsx(Footer, {}) })
|
|
47
|
+
] }), _jsx(Toc, { items: tocItems, children: _jsx(PageToolbar, { content: content }) })
|
|
48
|
+
] })
|
|
49
|
+
] }));
|
|
50
|
+
}
|
|
51
|
+
function slugOf(path) {
|
|
52
|
+
return (path
|
|
53
|
+
.replace(/^\/|\/$/g, "")
|
|
54
|
+
.split("/")
|
|
55
|
+
.pop() ?? "");
|
|
56
|
+
}
|
|
57
|
+
function formatDate(iso) {
|
|
58
|
+
return new Date(iso).toLocaleDateString("en-US", {
|
|
59
|
+
year: "numeric",
|
|
60
|
+
month: "short",
|
|
61
|
+
day: "numeric",
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFnSW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9UYWdJbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEyQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYyxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBbUIsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVcsQ0FBQTtBQUUxQyw2REFBNkQ7QUFDN0QsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUE2QztJQUNwRSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNuRCxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDMUMsTUFBTSxLQUFLLEdBQUcsS0FBSztTQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNoRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUE7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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpbmsgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiXG5pbXBvcnQgeyBIaXN0b3J5IH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiXG5pbXBvcnQgeyBzb3J0ZWRBcnRpY2xlcyB9IGZyb20gXCIuLi9jb250ZW50L2FydGljbGUudHNcIlxuaW1wb3J0IHsgc2VjdGlvblRhZ3MgfSBmcm9tIFwiLi4vY29udGVudC90YWcudHNcIlxuaW1wb3J0IHsgU2VwYXJhdG9yIH0gZnJvbSBcIi4uL2VsZW1lbnRzL3NlcGFyYXRvci50c3hcIlxuaW1wb3J0IHsgVG9jQ29udGV4dCB9IGZyb20gXCIuLi9oZWxwZXJzL3RvYy1jb250ZXh0LnRzXCJcbmltcG9ydCB7IEZvb3RlciB9IGZyb20gXCIuL0Zvb3Rlci50c3hcIlxuaW1wb3J0IHsgUGFnZVRvb2xiYXIgfSBmcm9tIFwiLi9QYWdlVG9vbGJhci50c3hcIlxuaW1wb3J0IHsgTW9iaWxlVG9jLCBUb2MgfSBmcm9tIFwiLi9Ub2MudHN4XCJcblxuLyoqIEJsb2cgdGFnIHBhZ2UgbGlzdGluZyBwb3N0cyBmaWx0ZXJlZCBieSBhIHNwZWNpZmljIHRhZyAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRhZ0luZGV4KHByb3BzOiB7IHNlY3Rpb25QcmVmaXg6IHN0cmluZzsgdGFnOiBzdHJpbmcgfSkge1xuICBjb25zdCB0YWdNYXAgPSBzZWN0aW9uVGFncy5nZXQocHJvcHMuc2VjdGlvblByZWZpeClcbiAgY29uc3QgcGF0aHMgPSB0YWdNYXA/LmdldChwcm9wcy50YWcpID8/IFtdXG4gIGNvbnN0IHBvc3RzID0gcGF0aHNcbiAgICAubWFwKHAgPT4gc29ydGVkQXJ0aWNsZXMuZmluZChhID0+IGEucGF0aCA9PT0gcCkpXG4gICAgLmZpbHRlcihhID0+IGEgIT09IHVuZGVmaW5lZClcblxuICBjb25zdCB0b2NJdGVtcyA9IHBvc3RzLm1hcChwb3N0ID0+ICh7XG4gICAgdXJsOiBgIyR7c2x1Z09mKHBvc3QucGF0aCl9YCxcbiAgICB0aXRsZTogcG9zdC50aXRsZSxcbiAgICBkZXB0aDogMixcbiAgfSkpXG5cbiAgY29uc3QgdGl0bGUgPSBgUG9zdHMgdGFnZ2VkICcke3Byb3BzLnRhZ30nYFxuXG4gIGNvbnN0IGNvbnRlbnQgPSBbXG4gICAgYCMgJHt0aXRsZX1gLFxuICAgIC4uLnBvc3RzLm1hcChwb3N0ID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gW2AjIyAke3Bvc3QudGl0bGV9YF1cbiAgICAgIGlmIChwb3N0LmRhdGUpIHBhcnRzLnB1c2goZm9ybWF0RGF0ZShwb3N0LmRhdGUpKVxuICAgICAgaWYgKHBvc3QuYXV0aG9yKSB7XG4gICAgICAgIHBhcnRzLnB1c2goXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShwb3N0LmF1dGhvcikgPyBwb3N0LmF1dGhvci5qb2luKFwiLCBcIikgOiBwb3N0LmF1dGhvcixcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKHBvc3QuZGVzY3JpcHRpb24pIHBhcnRzLnB1c2goXCJcIiwgcG9zdC5kZXNjcmlwdGlvbilcbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXCIpXG4gICAgfSksXG4gIF0uam9pbihcIlxcblxcblwiKVxuXG4gIHJldHVybiAoXG4gICAgPFRvY0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RvY0l0ZW1zfT5cbiAgICAgIDxNb2JpbGVUb2MgaXRlbXM9e3RvY0l0ZW1zfT5cbiAgICAgICAgPFBhZ2VUb29sYmFyIGNvbnRlbnQ9e2NvbnRlbnR9IC8+XG4gICAgICA8L01vYmlsZVRvYz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LTEgZ2FwLTEwIHAtNCBwdC04IG1kOnAtMTBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMCBteC1hdXRvIG1heC13LTN4bFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJvc2UgZGFyazpwcm9zZS1pbnZlcnQgbWF4LXctbm9uZSBtYi04XCI+XG4gICAgICAgICAgICA8aDEgaWQ9XCJ0b3BcIj5cbiAgICAgICAgICAgICAgPGEgaHJlZj1cIiN0b3BcIj5Qb3N0cyB0YWdnZWQgJmxzcXVvO3twcm9wcy50YWd9JnJzcXVvOzwvYT5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICB7cG9zdHNbMF0/LmRhdGUgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLXgtMyBnYXAteS0xIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kICEtbXQtNCAhbWItMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjVcIj5cbiAgICAgICAgICAgICAgICAgIDxIaXN0b3J5IGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cbiAgICAgICAgICAgICAgICAgIFVwZGF0ZWQge2Zvcm1hdERhdGUocG9zdHNbMF0uZGF0ZSl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS02XCI+XG4gICAgICAgICAgICB7cG9zdHMubWFwKChwb3N0LCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxhcnRpY2xlIGtleT17cG9zdC5wYXRofSBpZD17c2x1Z09mKHBvc3QucGF0aCl9PlxuICAgICAgICAgICAgICAgIHtpID4gMCAmJiA8U2VwYXJhdG9yIGNsYXNzTmFtZT1cIm1iLTZcIiAvPn1cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC0yeGxcIj5cbiAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgIHRvPVwiLyRcIlxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM9e3sgX3NwbGF0OiBwb3N0LnBhdGgucmVwbGFjZSgvXlxcL3xcXC8kL2csIFwiXCIpIH19XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtIGhvdmVyOnRleHQtcHJpbWFyeSB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtwb3N0LnRpdGxlfVxuICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQgbXQtMSBmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICB7cG9zdC5kYXRlICYmIDxzcGFuPntmb3JtYXREYXRlKHBvc3QuZGF0ZSl9PC9zcGFuPn1cbiAgICAgICAgICAgICAgICAgIHtwb3N0LmF1dGhvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHtBcnJheS5pc0FycmF5KHBvc3QuYXV0aG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwb3N0LmF1dGhvci5qb2luKFwiLCBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcG9zdC5hdXRob3J9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIHtwb3N0LmRlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIHtwb3N0LmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMTBcIj5cbiAgICAgICAgICAgIDxGb290ZXIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxUb2MgaXRlbXM9e3RvY0l0ZW1zfT5cbiAgICAgICAgICA8UGFnZVRvb2xiYXIgY29udGVudD17Y29udGVudH0gLz5cbiAgICAgICAgPC9Ub2M+XG4gICAgICA8L2Rpdj5cbiAgICA8L1RvY0NvbnRleHQuUHJvdmlkZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gc2x1Z09mKHBhdGg6IHN0cmluZykge1xuICByZXR1cm4gKFxuICAgIHBhdGhcbiAgICAgIC5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIilcbiAgICAgIC5zcGxpdChcIi9cIilcbiAgICAgIC5wb3AoKSA/PyBcIlwiXG4gIClcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF0ZShpc286IHN0cmluZykge1xuICByZXR1cm4gbmV3IERhdGUoaXNvKS50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiLCB7XG4gICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgbW9udGg6IFwic2hvcnRcIixcbiAgICBkYXk6IFwibnVtZXJpY1wiLFxuICB9KVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Theme(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Moon, Sun } from "lucide-react";
|
|
3
|
+
import { useHotkey } from "@tanstack/react-hotkeys";
|
|
4
|
+
import { Button } from "../elements/button.js";
|
|
5
|
+
import { getCurrentTheme, setTheme } from "../helpers/theme.js";
|
|
6
|
+
export function Theme() {
|
|
7
|
+
const handleToggle = () => {
|
|
8
|
+
const oldTheme = getCurrentTheme();
|
|
9
|
+
const newTheme = oldTheme === "light" ? "dark" : "light";
|
|
10
|
+
setTheme(newTheme);
|
|
11
|
+
};
|
|
12
|
+
useHotkey("T", handleToggle);
|
|
13
|
+
return (_jsxs(Button, { variant: "ghost", size: "sm", onClick: handleToggle, title: "Change Theme", className: "w-full h-auto rounded-xl cursor-pointer text-xs font-normal justify-start text-muted-foreground bg-sidebar-accent/70 border border-border shadow-xs hover:!bg-background px-3 py-2", children: [
|
|
14
|
+
_jsxs("div", { className: "flex flex-1 gap-2 items-center dark:hidden", children: [
|
|
15
|
+
_jsx(Sun, { className: "size-4" }), _jsx("span", { className: "flex-1 text-left", children: "Light Theme" }), _jsx("kbd", { className: "rounded border border-border bg-muted px-1.5 py-0.5 text-[10px] font-mono", children: "T" })
|
|
16
|
+
] }), _jsxs("div", { className: "flex-1 gap-2 items-center hidden dark:flex", children: [
|
|
17
|
+
_jsx(Moon, { className: "size-4" }), _jsx("span", { className: "flex-1 text-left", children: "Dark Theme" }), _jsx("kbd", { className: "rounded border border-border bg-muted px-1.5 py-0.5 text-[10px] font-mono", children: "T" })
|
|
18
|
+
] })
|
|
19
|
+
] }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhlbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9UaGVtZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXdCLENBQUE7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUUvRCxNQUFNLFVBQVUsS0FBSztJQUNuQixNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7UUFDeEIsTUFBTSxRQUFRLEdBQUcsZUFBZSxFQUFFLENBQUE7UUFDbEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDeEQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3BCLENBQUMsQ0FBQTtJQUVELFNBQVMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFFNUIsT0FBTyxDQUNMLE1BQUMsTUFBTSxJQUNMLE9BQU8sRUFBQyxPQUFPLEVBQ2YsSUFBSSxFQUFDLElBQUksRUFDVCxPQUFPLEVBQUUsWUFBWSxFQUNyQixLQUFLLEVBQUMsY0FBYyxFQUNwQixTQUFTLEVBQUMsb0xBQW9MO1lBRTlMLGVBQUssU0FBUyxFQUFDLDRDQUE0QztvQkFDekQsS0FBQyxHQUFHLElBQUMsU0FBUyxFQUFDLFFBQVEsR0FBRyxFQUMxQixlQUFNLFNBQVMsRUFBQyxrQkFBa0IsNEJBQW1CLEVBQ3JELGNBQUssU0FBUyxFQUFDLDJFQUEyRSxrQkFFcEY7b0JBQ0YsRUFDTixlQUFLLFNBQVMsRUFBQyw0Q0FBNEM7b0JBQ3pELEtBQUMsSUFBSSxJQUFDLFNBQVMsRUFBQyxRQUFRLEdBQUcsRUFDM0IsZUFBTSxTQUFTLEVBQUMsa0JBQWtCLDJCQUFrQixFQUNwRCxjQUFLLFNBQVMsRUFBQywyRUFBMkUsa0JBRXBGO29CQUNGO1lBQ0MsQ0FDVixDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vb24sIFN1biB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuaW1wb3J0IHsgdXNlSG90a2V5IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1ob3RrZXlzXCJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9lbGVtZW50cy9idXR0b24udHN4XCJcbmltcG9ydCB7IGdldEN1cnJlbnRUaGVtZSwgc2V0VGhlbWUgfSBmcm9tIFwiLi4vaGVscGVycy90aGVtZS50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBUaGVtZSgpIHtcbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gKCkgPT4ge1xuICAgIGNvbnN0IG9sZFRoZW1lID0gZ2V0Q3VycmVudFRoZW1lKClcbiAgICBjb25zdCBuZXdUaGVtZSA9IG9sZFRoZW1lID09PSBcImxpZ2h0XCIgPyBcImRhcmtcIiA6IFwibGlnaHRcIlxuICAgIHNldFRoZW1lKG5ld1RoZW1lKVxuICB9XG5cbiAgdXNlSG90a2V5KFwiVFwiLCBoYW5kbGVUb2dnbGUpXG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgc2l6ZT1cInNtXCJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZX1cbiAgICAgIHRpdGxlPVwiQ2hhbmdlIFRoZW1lXCJcbiAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLWF1dG8gcm91bmRlZC14bCBjdXJzb3ItcG9pbnRlciB0ZXh0LXhzIGZvbnQtbm9ybWFsIGp1c3RpZnktc3RhcnQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGJnLXNpZGViYXItYWNjZW50LzcwIGJvcmRlciBib3JkZXItYm9yZGVyIHNoYWRvdy14cyBob3ZlcjohYmctYmFja2dyb3VuZCBweC0zIHB5LTJcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LTEgZ2FwLTIgaXRlbXMtY2VudGVyIGRhcms6aGlkZGVuXCI+XG4gICAgICAgIDxTdW4gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmxleC0xIHRleHQtbGVmdFwiPkxpZ2h0IFRoZW1lPC9zcGFuPlxuICAgICAgICA8a2JkIGNsYXNzTmFtZT1cInJvdW5kZWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMHB4XSBmb250LW1vbm9cIj5cbiAgICAgICAgICBUXG4gICAgICAgIDwva2JkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBnYXAtMiBpdGVtcy1jZW50ZXIgaGlkZGVuIGRhcms6ZmxleFwiPlxuICAgICAgICA8TW9vbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmbGV4LTEgdGV4dC1sZWZ0XCI+RGFyayBUaGVtZTwvc3Bhbj5cbiAgICAgICAgPGtiZCBjbGFzc05hbWU9XCJyb3VuZGVkIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLW11dGVkIHB4LTEuNSBweS0wLjUgdGV4dC1bMTBweF0gZm9udC1tb25vXCI+XG4gICAgICAgICAgVFxuICAgICAgICA8L2tiZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvQnV0dG9uPlxuICApXG59XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { TocItem } from "../models/toc.ts";
|
|
3
|
+
export declare function Toc(props: {
|
|
4
|
+
items: TocItem[];
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
7
|
+
/** Mobile-only sticky secondary bar showing the active heading and an
|
|
8
|
+
* overlay dropdown with the Contents + page Actions. */
|
|
9
|
+
export declare function MobileToc(props: {
|
|
10
|
+
items: TocItem[];
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|