livemark 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/build/actions/config/define.d.ts +12 -0
- package/build/actions/config/define.unit.js +8 -1
- package/build/actions/escape/copy.d.ts +11 -0
- package/build/actions/escape/copy.js +29 -0
- package/build/actions/escape/copy.unit.d.ts +1 -0
- package/build/actions/escape/copy.unit.js +37 -0
- package/build/actions/escape/list.d.ts +12 -0
- package/build/actions/escape/list.js +27 -0
- package/build/actions/escape/list.unit.d.ts +1 -0
- package/build/actions/escape/list.unit.js +36 -0
- package/build/actions/target/build.d.ts +9 -26
- package/build/actions/target/build.js +50 -71
- package/build/actions/target/build.unit.d.ts +1 -0
- package/build/actions/target/build.unit.js +76 -0
- package/build/actions/target/clear.d.ts +4 -0
- package/build/actions/target/clear.js +14 -0
- package/build/actions/target/clear.unit.d.ts +1 -0
- package/build/actions/target/clear.unit.js +23 -0
- package/build/commands/build.js +1 -2
- package/build/commands/clear.d.ts +5 -0
- package/build/commands/clear.js +15 -0
- package/build/commands/escape.d.ts +4 -3
- package/build/commands/escape.js +45 -48
- package/build/commands/preview.js +1 -2
- package/build/commands/start.js +1 -2
- package/build/components/Abbr.d.ts +1 -1
- package/build/components/Abbr.js +2 -4
- package/build/components/AnsiCode.d.ts +1 -1
- package/build/components/AnsiCode.js +2 -2
- package/build/components/Article.d.ts +2 -1
- package/build/components/Article.js +7 -14
- package/build/components/BackToTop.d.ts +1 -1
- package/build/components/Banner.d.ts +2 -2
- package/build/components/Banner.js +7 -3
- package/build/components/BlogIndex.d.ts +1 -1
- package/build/components/BlogIndex.js +2 -11
- package/build/components/Breadcrumbs.d.ts +1 -1
- package/build/components/Breadcrumbs.js +2 -3
- package/build/components/Callout.d.ts +1 -1
- package/build/components/Callout.js +5 -9
- package/build/components/Card.d.ts +1 -1
- package/build/components/Card.js +2 -3
- package/build/components/Cards.d.ts +1 -1
- package/build/components/ChangelogIndex.d.ts +1 -1
- package/build/components/ChangelogIndex.js +2 -11
- package/build/components/ChoiceList.d.ts +15 -0
- package/build/components/ChoiceList.js +13 -0
- package/build/components/CodeBlock.d.ts +1 -1
- package/build/components/CodeBlock.js +3 -16
- package/build/components/CodeTabs.d.ts +1 -1
- package/build/components/CodeTabs.js +2 -3
- package/build/components/Column.d.ts +1 -1
- package/build/components/Columns.d.ts +1 -1
- package/build/components/Content.d.ts +1 -1
- package/build/components/ContentTab.d.ts +1 -1
- package/build/components/ContentTabs.d.ts +1 -1
- package/build/components/ContentTabs.js +2 -3
- package/build/components/DefaultCatchBoundary.d.ts +1 -1
- package/build/components/DefaultCatchBoundary.js +5 -7
- package/build/components/DefinitionList.d.ts +3 -3
- package/build/components/Details.d.ts +1 -1
- package/build/components/Details.js +2 -5
- package/build/components/FileTree.d.ts +1 -1
- package/build/components/FileTree.js +3 -5
- package/build/components/Footer.d.ts +1 -1
- package/build/components/Footer.js +2 -5
- package/build/components/FootnoteRef.d.ts +1 -1
- package/build/components/FootnoteRef.js +2 -4
- package/build/components/Header.d.ts +6 -0
- package/build/components/Header.js +26 -0
- package/build/components/HeaderMenu.d.ts +2 -0
- package/build/components/HeaderMenu.js +27 -0
- package/build/components/HeaderNav.d.ts +6 -0
- package/build/components/HeaderNav.js +74 -0
- package/build/components/HeaderSearch.d.ts +4 -0
- package/build/components/HeaderSearch.js +33 -0
- package/build/components/Heading.d.ts +6 -6
- package/build/components/InlineBadge.d.ts +2 -2
- package/build/components/InlineBadge.js +1 -1
- package/build/components/InlineIcon.d.ts +1 -1
- package/build/components/InlineToc.d.ts +1 -1
- package/build/components/InlineToc.js +2 -4
- package/build/components/Layout.d.ts +2 -1
- package/build/components/Layout.js +5 -58
- package/build/components/LinkButton.d.ts +2 -2
- package/build/components/LinkButton.js +1 -1
- package/build/components/MenuSheet.d.ts +22 -0
- package/build/components/MenuSheet.js +27 -0
- package/build/components/Mermaid.d.ts +1 -1
- package/build/components/MermaidRenderer.d.ts +1 -1
- package/build/components/MermaidRenderer.js +20 -8
- package/build/components/NotFound.d.ts +1 -1
- package/build/components/NotFound.js +3 -6
- package/build/components/PackageTabs.d.ts +1 -1
- package/build/components/PackageTabs.js +3 -7
- package/build/components/PageToolbar.d.ts +1 -1
- package/build/components/PageToolbar.js +2 -10
- package/build/components/PrevNext.d.ts +1 -1
- package/build/components/PrevNext.js +2 -10
- package/build/components/Root.d.ts +4 -0
- package/build/components/Root.js +8 -0
- package/build/components/Search.d.ts +5 -2
- package/build/components/Search.js +11 -9
- package/build/components/SearchDialog.d.ts +1 -1
- package/build/components/SearchDialog.js +10 -133
- package/build/components/Section.d.ts +1 -1
- package/build/components/SectionHeader.d.ts +1 -1
- package/build/components/SheetPanel.d.ts +12 -0
- package/build/components/SheetPanel.js +19 -0
- package/build/components/Sidebar.d.ts +1 -1
- package/build/components/Sidebar.js +12 -14
- package/build/components/SidebarArticles.d.ts +4 -1
- package/build/components/SidebarArticles.js +5 -9
- package/build/components/SidebarLinks.d.ts +4 -1
- package/build/components/SidebarLinks.js +6 -9
- package/build/components/SidebarPosts.d.ts +4 -1
- package/build/components/SidebarPosts.js +7 -23
- package/build/components/SidebarReleases.d.ts +4 -1
- package/build/components/SidebarReleases.js +5 -15
- package/build/components/SidebarSectionPicker.d.ts +8 -0
- package/build/components/SidebarSectionPicker.js +31 -0
- package/build/components/SidebarSections.d.ts +1 -1
- package/build/components/SidebarSections.js +5 -9
- package/build/components/SiteLink.d.ts +1 -1
- package/build/components/SiteTitle.d.ts +1 -1
- package/build/components/SiteTitle.js +2 -6
- package/build/components/SortableTable.d.ts +1 -1
- package/build/components/SoundCloud.d.ts +1 -1
- package/build/components/SoundCloud.js +2 -2
- package/build/components/TagIndex.d.ts +1 -1
- package/build/components/TagIndex.js +2 -11
- package/build/components/Theme.d.ts +2 -1
- package/build/components/Theme.js +35 -15
- package/build/components/Toc.d.ts +5 -4
- package/build/components/Toc.js +35 -35
- package/build/components/YouTube.d.ts +1 -1
- package/build/components/YouTube.js +2 -2
- package/build/components/ZoomImage.d.ts +1 -1
- package/build/content/article.js +4 -11
- package/build/content-collections.js +6 -4
- package/build/elements/accordion.d.ts +4 -4
- package/build/elements/accordion.js +2 -3
- package/build/elements/alert-dialog.d.ts +12 -12
- package/build/elements/alert-dialog.js +2 -4
- package/build/elements/alert.d.ts +4 -4
- package/build/elements/alert.js +2 -2
- package/build/elements/aspect-ratio.d.ts +1 -1
- package/build/elements/avatar.d.ts +6 -6
- package/build/elements/badge.d.ts +1 -1
- package/build/elements/badge.js +3 -1
- package/build/elements/breadcrumb.d.ts +6 -6
- package/build/elements/breadcrumb.js +2 -4
- package/build/elements/button-group.d.ts +2 -2
- package/build/elements/button-group.js +5 -5
- package/build/elements/button.d.ts +2 -2
- package/build/elements/button.js +9 -7
- package/build/elements/calendar.d.ts +2 -2
- package/build/elements/calendar.js +2 -2
- package/build/elements/card.d.ts +7 -7
- package/build/elements/card.js +4 -4
- package/build/elements/carousel.d.ts +5 -5
- package/build/elements/carousel.js +3 -7
- package/build/elements/chart.d.ts +6 -6
- package/build/elements/chart.js +5 -11
- package/build/elements/checkbox.d.ts +1 -1
- package/build/elements/collapsible.d.ts +3 -3
- package/build/elements/command.d.ts +9 -9
- package/build/elements/command.js +5 -11
- package/build/elements/context-menu.d.ts +15 -15
- package/build/elements/context-menu.js +6 -9
- package/build/elements/dialog.d.ts +10 -10
- package/build/elements/dialog.js +2 -6
- package/build/elements/drawer.d.ts +14 -12
- package/build/elements/drawer.js +14 -15
- package/build/elements/dropdown-menu.d.ts +15 -15
- package/build/elements/dropdown-menu.js +7 -10
- package/build/elements/empty.d.ts +6 -6
- package/build/elements/empty.js +2 -2
- package/build/elements/field.d.ts +10 -10
- package/build/elements/field.js +3 -4
- package/build/elements/hover-card.d.ts +3 -3
- package/build/elements/hover-card.js +2 -2
- package/build/elements/input-group.d.ts +7 -7
- package/build/elements/input-group.js +5 -5
- package/build/elements/input-otp.d.ts +4 -4
- package/build/elements/input.d.ts +1 -1
- package/build/elements/input.js +2 -2
- package/build/elements/item.d.ts +9 -9
- package/build/elements/item.js +2 -2
- package/build/elements/kbd.d.ts +2 -2
- package/build/elements/label.d.ts +1 -1
- package/build/elements/menubar.d.ts +16 -16
- package/build/elements/menubar.js +9 -11
- package/build/elements/native-select.d.ts +3 -3
- package/build/elements/native-select.js +2 -4
- package/build/elements/navigation-menu.d.ts +8 -8
- package/build/elements/navigation-menu.js +3 -5
- package/build/elements/pagination.d.ts +7 -7
- package/build/elements/pagination.js +4 -10
- package/build/elements/popover.d.ts +6 -6
- package/build/elements/popover.js +2 -2
- package/build/elements/progress.d.ts +5 -5
- package/build/elements/progress.js +2 -3
- package/build/elements/radio-group.d.ts +2 -2
- package/build/elements/resizable.d.ts +3 -3
- package/build/elements/scroll-area.d.ts +2 -2
- package/build/elements/scroll-area.js +2 -4
- package/build/elements/select.d.ts +9 -9
- package/build/elements/select.js +4 -9
- package/build/elements/separator.d.ts +1 -1
- package/build/elements/sheet.d.ts +8 -8
- package/build/elements/sheet.js +2 -6
- package/build/elements/sidebar.d.ts +19 -19
- package/build/elements/sidebar.js +15 -37
- package/build/elements/skeleton.d.ts +1 -1
- package/build/elements/slider.d.ts +2 -1
- package/build/elements/slider.js +2 -3
- package/build/elements/sonner.d.ts +1 -1
- package/build/elements/spinner.d.ts +1 -1
- package/build/elements/switch.d.ts +1 -1
- package/build/elements/table.d.ts +8 -8
- package/build/elements/tabs.d.ts +4 -4
- package/build/elements/tabs.js +3 -3
- package/build/elements/textarea.d.ts +1 -1
- package/build/elements/textarea.js +2 -2
- package/build/elements/toggle-group.d.ts +3 -2
- package/build/elements/toggle-group.js +3 -3
- package/build/elements/toggle.d.ts +1 -1
- package/build/elements/toggle.js +2 -2
- package/build/elements/tooltip.d.ts +4 -4
- package/build/elements/tooltip.js +2 -3
- package/build/head.d.ts +4 -0
- package/build/head.js +6 -0
- package/build/helpers/agent-skills.d.ts +22 -0
- package/build/helpers/agent-skills.js +46 -0
- package/build/helpers/agent-skills.unit.d.ts +1 -0
- package/build/helpers/agent-skills.unit.js +49 -0
- package/build/helpers/article-search.d.ts +19 -0
- package/build/helpers/article-search.js +134 -0
- package/build/helpers/article.d.ts +13 -0
- package/build/helpers/article.js +17 -1
- package/build/helpers/dependency-dir.d.ts +5 -0
- package/build/helpers/dependency-dir.js +20 -0
- package/build/helpers/dependency-dir.unit.d.ts +1 -0
- package/build/helpers/dependency-dir.unit.js +25 -0
- package/build/helpers/dynamic-icon-resolver.d.ts +1 -1
- package/build/helpers/dynamic-icon.d.ts +1 -1
- package/build/helpers/head.d.ts +58 -0
- package/build/helpers/head.js +80 -0
- package/build/helpers/head.unit.d.ts +1 -0
- package/build/helpers/head.unit.js +110 -0
- package/build/helpers/llms.d.ts +33 -0
- package/build/helpers/llms.js +72 -0
- package/build/helpers/llms.unit.d.ts +1 -0
- package/build/helpers/llms.unit.js +98 -0
- package/build/helpers/nav-items.d.ts +11 -0
- package/build/helpers/nav-items.js +65 -0
- package/build/helpers/render-inline-markdown.d.ts +1 -0
- package/build/helpers/render-inline-markdown.js +34 -0
- package/build/helpers/render-inline-markdown.unit.d.ts +1 -0
- package/build/helpers/render-inline-markdown.unit.js +20 -0
- package/build/helpers/search-highlight.d.ts +8 -0
- package/build/helpers/search-highlight.js +59 -0
- package/build/helpers/search-highlight.unit.d.ts +1 -0
- package/build/helpers/search-highlight.unit.js +36 -0
- package/build/helpers/target-export.d.ts +9 -0
- package/build/helpers/target-export.js +24 -0
- package/build/helpers/target-export.unit.d.ts +1 -0
- package/build/helpers/target-export.unit.js +25 -0
- package/build/helpers/theme.d.ts +6 -2
- package/build/helpers/theme.js +40 -7
- package/build/helpers/theme.unit.d.ts +1 -0
- package/build/helpers/theme.unit.js +30 -0
- package/build/hooks/hydrated.d.ts +2 -0
- package/build/hooks/hydrated.js +15 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +1 -1
- package/build/models/config.d.ts +52 -6
- package/build/models/config.js +17 -1
- package/build/models/section.d.ts +4 -2
- package/build/models/section.js +1 -1
- package/build/plugins/vite-agents.d.ts +17 -0
- package/build/plugins/vite-agents.js +109 -0
- package/build/plugins/vite-agents.unit.d.ts +1 -0
- package/build/plugins/vite-agents.unit.js +20 -0
- package/build/plugins/vite-livemark.d.ts +4 -5
- package/build/plugins/vite-livemark.js +56 -90
- package/build/plugins/vite-robots.d.ts +4 -2
- package/build/plugins/vite-robots.js +15 -2
- package/build/plugins/vite-robots.unit.js +5 -1
- package/build/program.js +4 -2
- package/build/routes/$.d.ts +4 -1
- package/build/routes/$.js +20 -9
- package/build/routes/__root.js +29 -63
- package/build/settings.js +2 -1
- package/build/vite.config.js +3 -1
- package/package.json +69 -66
- package/{.agents/skills → skills}/livemark-authoring/SKILL.md +2 -2
- package/{.agents/skills → skills}/livemark-configuration/SKILL.md +16 -5
- package/skills/livemark-customization/SKILL.md +146 -0
- package/source/actions/config/define.unit.ts +9 -0
- package/source/actions/escape/copy.ts +35 -0
- package/source/actions/escape/copy.unit.ts +51 -0
- package/source/actions/escape/list.ts +30 -0
- package/source/actions/escape/list.unit.ts +42 -0
- package/source/actions/target/build.ts +49 -69
- package/source/actions/target/build.unit.ts +95 -0
- package/source/actions/target/clear.ts +14 -0
- package/source/actions/target/clear.unit.ts +25 -0
- package/source/commands/build.ts +0 -1
- package/source/commands/clear.ts +15 -0
- package/source/commands/escape.ts +42 -59
- package/source/commands/preview.ts +0 -1
- package/source/commands/start.ts +0 -1
- package/source/components/AnsiCode.tsx +1 -1
- package/source/components/Article.tsx +8 -4
- package/source/components/Banner.tsx +12 -2
- package/source/components/BlogIndex.tsx +1 -1
- package/source/components/Callout.tsx +4 -6
- package/source/components/ChangelogIndex.tsx +1 -1
- package/source/components/ChoiceList.tsx +69 -0
- package/source/components/CodeBlock.tsx +6 -6
- package/source/components/CodeTabs.tsx +1 -1
- package/source/components/ContentTabs.tsx +1 -1
- package/source/components/DefaultCatchBoundary.tsx +4 -6
- package/source/components/Details.tsx +1 -1
- package/source/components/FileTree.tsx +1 -1
- package/source/components/Header.tsx +52 -0
- package/source/components/HeaderMenu.tsx +41 -0
- package/source/components/HeaderNav.tsx +145 -0
- package/source/components/HeaderSearch.tsx +77 -0
- package/source/components/InlineBadge.tsx +1 -1
- package/source/components/InlineToc.tsx +1 -1
- package/source/components/Layout.tsx +16 -160
- package/source/components/LinkButton.tsx +9 -1
- package/source/components/MenuSheet.tsx +92 -0
- package/source/components/MermaidRenderer.tsx +19 -8
- package/source/components/NotFound.tsx +3 -5
- package/source/components/PackageTabs.tsx +2 -2
- package/source/components/PageToolbar.tsx +11 -3
- package/source/components/PrevNext.tsx +2 -2
- package/source/components/Root.tsx +13 -0
- package/source/components/Search.tsx +28 -8
- package/source/components/SearchDialog.tsx +15 -189
- package/source/components/SheetPanel.tsx +69 -0
- package/source/components/Sidebar.tsx +27 -14
- package/source/components/SidebarArticles.tsx +4 -3
- package/source/components/SidebarLinks.tsx +3 -2
- package/source/components/SidebarPosts.tsx +3 -2
- package/source/components/SidebarReleases.tsx +3 -2
- package/source/components/SidebarSectionPicker.tsx +70 -0
- package/source/components/SiteTitle.tsx +5 -5
- package/source/components/SoundCloud.tsx +1 -1
- package/source/components/TagIndex.tsx +1 -1
- package/source/components/Theme.tsx +55 -29
- package/source/components/Toc.tsx +76 -55
- package/source/components/YouTube.tsx +1 -1
- package/source/content/article.ts +8 -13
- package/source/content-collections.ts +5 -4
- package/source/elements/alert-dialog.tsx +1 -1
- package/source/elements/alert.tsx +1 -1
- package/source/elements/badge.tsx +4 -0
- package/source/elements/button-group.tsx +4 -4
- package/source/elements/button.tsx +10 -6
- package/source/elements/calendar.tsx +1 -1
- package/source/elements/card.tsx +3 -3
- package/source/elements/command.tsx +7 -4
- package/source/elements/context-menu.tsx +5 -5
- package/source/elements/dialog.tsx +1 -1
- package/source/elements/drawer.tsx +59 -43
- package/source/elements/dropdown-menu.tsx +6 -6
- package/source/elements/empty.tsx +1 -1
- package/source/elements/field.tsx +1 -1
- package/source/elements/hover-card.tsx +1 -1
- package/source/elements/input-group.tsx +4 -4
- package/source/elements/input.tsx +1 -1
- package/source/elements/item.tsx +1 -1
- package/source/elements/menubar.tsx +8 -8
- package/source/elements/native-select.tsx +1 -1
- package/source/elements/popover.tsx +1 -1
- package/source/elements/select.tsx +3 -3
- package/source/elements/sidebar.tsx +8 -21
- package/source/elements/tabs.tsx +2 -2
- package/source/elements/textarea.tsx +1 -1
- package/source/elements/toggle-group.tsx +2 -2
- package/source/elements/toggle.tsx +1 -1
- package/source/env.d.ts +1 -0
- package/source/head.ts +7 -0
- package/source/helpers/agent-skills.ts +59 -0
- package/source/helpers/agent-skills.unit.ts +56 -0
- package/source/helpers/article-search.tsx +192 -0
- package/source/helpers/article.ts +17 -0
- package/source/helpers/dependency-dir.ts +20 -0
- package/source/helpers/dependency-dir.unit.ts +39 -0
- package/source/helpers/head.ts +105 -0
- package/source/helpers/head.unit.ts +118 -0
- package/source/helpers/llms.ts +109 -0
- package/source/helpers/llms.unit.ts +115 -0
- package/source/helpers/nav-items.tsx +102 -0
- package/source/helpers/render-inline-markdown.ts +44 -0
- package/source/helpers/render-inline-markdown.unit.ts +30 -0
- package/source/helpers/search-highlight.ts +73 -0
- package/source/helpers/search-highlight.unit.ts +42 -0
- package/source/helpers/target-export.ts +28 -0
- package/source/helpers/target-export.unit.ts +37 -0
- package/source/helpers/theme.ts +40 -6
- package/source/helpers/theme.unit.ts +32 -0
- package/source/hooks/hydrated.ts +18 -0
- package/source/index.ts +1 -0
- package/source/models/config.ts +24 -0
- package/source/models/section.ts +3 -0
- package/source/plugins/vite-agents.ts +135 -0
- package/source/plugins/vite-agents.unit.ts +26 -0
- package/source/plugins/vite-livemark.ts +54 -95
- package/source/plugins/vite-robots.ts +18 -3
- package/source/plugins/vite-robots.unit.ts +7 -0
- package/source/program.ts +2 -0
- package/source/routes/$.tsx +27 -9
- package/source/routes/__root.tsx +51 -71
- package/source/settings.ts +1 -0
- package/source/styles/general.css +59 -11
- package/source/styles/markdown.css +13 -7
- package/source/styles/shape.css +14 -0
- package/source/vite.config.ts +2 -0
- package/.agents/skills/change-review/SKILL.md +0 -47
- package/.agents/skills/livemark-customization/SKILL.md +0 -118
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode } from "react";
|
|
2
|
+
/** One row of a `MenuSheet` */
|
|
3
|
+
export type MenuSheetItem = {
|
|
4
|
+
id: string;
|
|
5
|
+
label: ReactNode;
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
active?: boolean;
|
|
8
|
+
onSelect?: () => void;
|
|
9
|
+
};
|
|
10
|
+
/** A menu that is an anchored dropdown from a laptop up and a bottom sheet on a
|
|
11
|
+
* phone */
|
|
12
|
+
export declare function MenuSheet(props: {
|
|
13
|
+
trigger: ReactElement<{
|
|
14
|
+
onClick?: () => void;
|
|
15
|
+
children?: ReactNode;
|
|
16
|
+
}>;
|
|
17
|
+
children?: ReactNode;
|
|
18
|
+
title: ReactNode;
|
|
19
|
+
items: MenuSheetItem[];
|
|
20
|
+
align?: "start" | "end";
|
|
21
|
+
onOpenChange?: (open: boolean) => void;
|
|
22
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CheckIcon } from "lucide-react";
|
|
3
|
+
import { cloneElement, useState } from "react";
|
|
4
|
+
import { cn } from "cn";
|
|
5
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "../elements/dropdown-menu.js";
|
|
6
|
+
import { useIsMobile } from "../hooks/media.js";
|
|
7
|
+
import { SheetPanel } from "./SheetPanel.js";
|
|
8
|
+
/** A menu that is an anchored dropdown from a laptop up and a bottom sheet on a
|
|
9
|
+
* phone */
|
|
10
|
+
export function MenuSheet(props) {
|
|
11
|
+
const isMobile = useIsMobile();
|
|
12
|
+
const [open, setOpen] = useState(false);
|
|
13
|
+
const changeOpen = (next) => {
|
|
14
|
+
setOpen(next);
|
|
15
|
+
props.onOpenChange?.(next);
|
|
16
|
+
};
|
|
17
|
+
if (isMobile) {
|
|
18
|
+
return (_jsxs(_Fragment, { children: [cloneElement(props.trigger, { onClick: () => changeOpen(true) }, props.children), _jsx(SheetPanel, { open: open, onOpenChange: changeOpen, title: props.title, children: _jsx("ul", { className: "flex w-full min-w-0 flex-col gap-1", children: props.items.map(item => (_jsx("li", { children: _jsxs("button", { type: "button", className: cn(ROW, item.active && ROW_ACTIVE), onClick: () => {
|
|
19
|
+
item.onSelect?.();
|
|
20
|
+
changeOpen(false);
|
|
21
|
+
}, children: [item.icon, _jsx("span", { className: "flex-1 truncate", children: item.label }), item.active && _jsx(CheckIcon, { className: "size-4 shrink-0" })] }) }, item.id))) }) })] }));
|
|
22
|
+
}
|
|
23
|
+
return (_jsxs(DropdownMenu, { onOpenChange: props.onOpenChange, children: [_jsx(DropdownMenuTrigger, { render: props.trigger, children: props.children }), _jsx(DropdownMenuContent, { align: props.align ?? "end", children: props.items.map(item => (_jsxs(DropdownMenuItem, { onClick: item.onSelect, className: "cursor-pointer gap-2", children: [item.icon, _jsx("span", { className: item.active ? "font-medium" : undefined, children: item.label })] }, item.id))) })] }));
|
|
24
|
+
}
|
|
25
|
+
const ROW = "hover:bg-muted active:bg-muted flex h-10 w-full items-center gap-2.5 overflow-hidden rounded-md p-2 text-left text-base outline-hidden [&_svg]:size-[18px] [&_svg]:shrink-0";
|
|
26
|
+
const ROW_ACTIVE = "bg-sidebar-accent text-sidebar-accent-foreground font-semibold [&_svg]:stroke-[2.5]";
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVudVNoZWV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvTWVudVNoZWV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBcUMsTUFBTSxPQUFPLENBQUE7QUFDakYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQTtBQUN2QixPQUFPLEVBQ0wsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3BCLE1BQU0sOEJBQStCLENBQUE7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBa0IsQ0FBQTtBQVc3QztXQUNXO0FBQ1gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQU96QjtJQUNDLE1BQU0sUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFBO0lBQzlCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUU7UUFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2IsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzVCLENBQUMsQ0FBQTtJQUVELElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixPQUFPLENBQ0wsOEJBQ0csWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUNqRixLQUFDLFVBQVUsSUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLFlBQ2xFLGFBQUksU0FBUyxFQUFDLG9DQUFvQyxZQUMvQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ3ZCLHVCQUNFLGtCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsRUFDN0MsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQ0FDWixJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQTtvQ0FDakIsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dDQUNuQixDQUFDLGFBRUEsSUFBSSxDQUFDLElBQUksRUFDVixlQUFNLFNBQVMsRUFBQyxpQkFBaUIsWUFBRSxJQUFJLENBQUMsS0FBSyxHQUFRLEVBQ3BELElBQUksQ0FBQyxNQUFNLElBQUksS0FBQyxTQUFTLElBQUMsU0FBUyxFQUFDLGlCQUFpQixHQUFHLElBQ2xELElBWkYsSUFBSSxDQUFDLEVBQUUsQ0FhWCxDQUNOLENBQUMsR0FDQyxHQUNNLElBQ1osQ0FDSixDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FDTCxNQUFDLFlBQVksSUFBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksYUFHNUMsS0FBQyxtQkFBbUIsSUFBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE9BQU8sWUFBRyxLQUFLLENBQUMsUUFBUSxHQUF1QixFQUNsRixLQUFDLG1CQUFtQixJQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssWUFDN0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUN2QixNQUFDLGdCQUFnQixJQUVmLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUN0QixTQUFTLEVBQUMsc0JBQXNCLGFBRS9CLElBQUksQ0FBQyxJQUFJLEVBQ1YsZUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLFlBQUcsSUFBSSxDQUFDLEtBQUssR0FBUSxLQUx4RSxJQUFJLENBQUMsRUFBRSxDQU1LLENBQ3BCLENBQUMsR0FDa0IsSUFDVCxDQUNoQixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sR0FBRyxHQUNQLDZLQUE2SyxDQUFBO0FBRS9LLE1BQU0sVUFBVSxHQUNkLHFGQUFxRixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hlY2tJY29uIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiXG5pbXBvcnQgeyBjbG9uZUVsZW1lbnQsIHVzZVN0YXRlLCB0eXBlIFJlYWN0RWxlbWVudCwgdHlwZSBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgY24gfSBmcm9tIFwiY25cIlxuaW1wb3J0IHtcbiAgRHJvcGRvd25NZW51LFxuICBEcm9wZG93bk1lbnVDb250ZW50LFxuICBEcm9wZG93bk1lbnVJdGVtLFxuICBEcm9wZG93bk1lbnVUcmlnZ2VyLFxufSBmcm9tIFwiLi4vZWxlbWVudHMvZHJvcGRvd24tbWVudS50c3hcIlxuaW1wb3J0IHsgdXNlSXNNb2JpbGUgfSBmcm9tIFwiLi4vaG9va3MvbWVkaWEudHNcIlxuaW1wb3J0IHsgU2hlZXRQYW5lbCB9IGZyb20gXCIuL1NoZWV0UGFuZWwudHN4XCJcblxuLyoqIE9uZSByb3cgb2YgYSBgTWVudVNoZWV0YCAqL1xuZXhwb3J0IHR5cGUgTWVudVNoZWV0SXRlbSA9IHtcbiAgaWQ6IHN0cmluZ1xuICBsYWJlbDogUmVhY3ROb2RlXG4gIGljb24/OiBSZWFjdE5vZGVcbiAgYWN0aXZlPzogYm9vbGVhblxuICBvblNlbGVjdD86ICgpID0+IHZvaWRcbn1cblxuLyoqIEEgbWVudSB0aGF0IGlzIGFuIGFuY2hvcmVkIGRyb3Bkb3duIGZyb20gYSBsYXB0b3AgdXAgYW5kIGEgYm90dG9tIHNoZWV0IG9uIGFcbiAqIHBob25lICovXG5leHBvcnQgZnVuY3Rpb24gTWVudVNoZWV0KHByb3BzOiB7XG4gIHRyaWdnZXI6IFJlYWN0RWxlbWVudDx7IG9uQ2xpY2s/OiAoKSA9PiB2b2lkOyBjaGlsZHJlbj86IFJlYWN0Tm9kZSB9PlxuICBjaGlsZHJlbj86IFJlYWN0Tm9kZVxuICB0aXRsZTogUmVhY3ROb2RlXG4gIGl0ZW1zOiBNZW51U2hlZXRJdGVtW11cbiAgYWxpZ24/OiBcInN0YXJ0XCIgfCBcImVuZFwiXG4gIG9uT3BlbkNoYW5nZT86IChvcGVuOiBib29sZWFuKSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IGlzTW9iaWxlID0gdXNlSXNNb2JpbGUoKVxuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgY2hhbmdlT3BlbiA9IChuZXh0OiBib29sZWFuKSA9PiB7XG4gICAgc2V0T3BlbihuZXh0KVxuICAgIHByb3BzLm9uT3BlbkNoYW5nZT8uKG5leHQpXG4gIH1cblxuICBpZiAoaXNNb2JpbGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2Nsb25lRWxlbWVudChwcm9wcy50cmlnZ2VyLCB7IG9uQ2xpY2s6ICgpID0+IGNoYW5nZU9wZW4odHJ1ZSkgfSwgcHJvcHMuY2hpbGRyZW4pfVxuICAgICAgICA8U2hlZXRQYW5lbCBvcGVuPXtvcGVufSBvbk9wZW5DaGFuZ2U9e2NoYW5nZU9wZW59IHRpdGxlPXtwcm9wcy50aXRsZX0+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIG1pbi13LTAgZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICAgIHtwcm9wcy5pdGVtcy5tYXAoaXRlbSA9PiAoXG4gICAgICAgICAgICAgIDxsaSBrZXk9e2l0ZW0uaWR9PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihST1csIGl0ZW0uYWN0aXZlICYmIFJPV19BQ1RJVkUpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLm9uU2VsZWN0Py4oKVxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VPcGVuKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7aXRlbS5pY29ufVxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmxleC0xIHRydW5jYXRlXCI+e2l0ZW0ubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAge2l0ZW0uYWN0aXZlICYmIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00IHNocmluay0wXCIgLz59XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L1NoZWV0UGFuZWw+XG4gICAgICA8Lz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxEcm9wZG93bk1lbnUgb25PcGVuQ2hhbmdlPXtwcm9wcy5vbk9wZW5DaGFuZ2V9PlxuICAgICAgey8qIFdpdGhvdXQgYSBgcmVuZGVyYCwgQmFzZSBVSSdzIHRyaWdnZXIgZmFsbHMgYmFjayB0byBhIGJhcmUgPGJ1dHRvbj4g4oCUIHdoaWNoXG4gICAgICAgICAgU1NSIHBhaW50cyBvbiBhIHBob25lIHVudGlsIGB1c2VJc01vYmlsZWAgZmxpcHMsIGZsYXNoaW5nIGEgc3RyYXkgaWNvbi4gKi99XG4gICAgICA8RHJvcGRvd25NZW51VHJpZ2dlciByZW5kZXI9e3Byb3BzLnRyaWdnZXJ9Pntwcm9wcy5jaGlsZHJlbn08L0Ryb3Bkb3duTWVudVRyaWdnZXI+XG4gICAgICA8RHJvcGRvd25NZW51Q29udGVudCBhbGlnbj17cHJvcHMuYWxpZ24gPz8gXCJlbmRcIn0+XG4gICAgICAgIHtwcm9wcy5pdGVtcy5tYXAoaXRlbSA9PiAoXG4gICAgICAgICAgPERyb3Bkb3duTWVudUl0ZW1cbiAgICAgICAgICAgIGtleT17aXRlbS5pZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2l0ZW0ub25TZWxlY3R9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJjdXJzb3ItcG9pbnRlciBnYXAtMlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2l0ZW0uaWNvbn1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17aXRlbS5hY3RpdmUgPyBcImZvbnQtbWVkaXVtXCIgOiB1bmRlZmluZWR9PntpdGVtLmxhYmVsfTwvc3Bhbj5cbiAgICAgICAgICA8L0Ryb3Bkb3duTWVudUl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9Ecm9wZG93bk1lbnVDb250ZW50PlxuICAgIDwvRHJvcGRvd25NZW51PlxuICApXG59XG5cbmNvbnN0IFJPVyA9XG4gIFwiaG92ZXI6YmctbXV0ZWQgYWN0aXZlOmJnLW11dGVkIGZsZXggaC0xMCB3LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0yLjUgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgcC0yIHRleHQtbGVmdCB0ZXh0LWJhc2Ugb3V0bGluZS1oaWRkZW4gWyZfc3ZnXTpzaXplLVsxOHB4XSBbJl9zdmddOnNocmluay0wXCJcblxuY29uc3QgUk9XX0FDVElWRSA9XG4gIFwiYmctc2lkZWJhci1hY2NlbnQgdGV4dC1zaWRlYmFyLWFjY2VudC1mb3JlZ3JvdW5kIGZvbnQtc2VtaWJvbGQgWyZfc3ZnXTpzdHJva2UtWzIuNV1cIlxuIl19
|
|
@@ -2,6 +2,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect, useRef } from "react";
|
|
3
3
|
import mermaid from "mermaid";
|
|
4
4
|
mermaid.initialize({ startOnLoad: false });
|
|
5
|
+
// Module-wide so runs never overlap, even across effect re-runs: overlapping runs on
|
|
6
|
+
// one node reject with "reading 'firstChild'".
|
|
7
|
+
let renderQueue = Promise.resolve();
|
|
5
8
|
/** Renders a Mermaid diagram from a chart definition string */
|
|
6
9
|
export default function MermaidRenderer(props) {
|
|
7
10
|
const ref = useRef(null);
|
|
@@ -10,14 +13,23 @@ export default function MermaidRenderer(props) {
|
|
|
10
13
|
if (!el)
|
|
11
14
|
return;
|
|
12
15
|
const render = () => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
renderQueue = renderQueue
|
|
17
|
+
.then(() => {
|
|
18
|
+
if (!el.isConnected)
|
|
19
|
+
return;
|
|
20
|
+
const isDark = document.documentElement.classList.contains("dark");
|
|
21
|
+
mermaid.initialize({
|
|
22
|
+
startOnLoad: false,
|
|
23
|
+
theme: isDark ? "dark" : "default",
|
|
24
|
+
});
|
|
25
|
+
el.textContent = props.children;
|
|
26
|
+
el.removeAttribute("data-processed");
|
|
27
|
+
return mermaid.run({ nodes: [el] });
|
|
28
|
+
})
|
|
29
|
+
.catch(error => {
|
|
30
|
+
if (el.isConnected)
|
|
31
|
+
console.error(error);
|
|
17
32
|
});
|
|
18
|
-
el.textContent = props.children;
|
|
19
|
-
el.removeAttribute("data-processed");
|
|
20
|
-
mermaid.run({ nodes: [el] });
|
|
21
33
|
};
|
|
22
34
|
render();
|
|
23
35
|
const observer = new MutationObserver(render);
|
|
@@ -29,4 +41,4 @@ export default function MermaidRenderer(props) {
|
|
|
29
41
|
}, [props.children]);
|
|
30
42
|
return _jsx("div", { ref: ref, className: "not-prose mermaid flex justify-center" });
|
|
31
43
|
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVybWFpZFJlbmRlcmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvTWVybWFpZFJlbmRlcmVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDekMsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFBO0FBRTdCLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtBQUUxQyxxRkFBcUY7QUFDckYsK0NBQStDO0FBQy9DLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtBQUVuQywrREFBK0Q7QUFDL0QsTUFBTSxDQUFDLE9BQU8sVUFBVSxlQUFlLENBQUMsS0FBMkI7SUFDakUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFpQixJQUFJLENBQUMsQ0FBQTtJQUV4QyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU07UUFFZixNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDbEIsV0FBVyxHQUFHLFdBQVc7aUJBQ3RCLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXO29CQUFFLE9BQU07Z0JBQzNCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDbEUsT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFDakIsV0FBVyxFQUFFLEtBQUs7b0JBQ2xCLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDbkMsQ0FBQyxDQUFBO2dCQUNGLEVBQUUsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQTtnQkFDL0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO2dCQUNwQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDckMsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDYixJQUFJLEVBQUUsQ0FBQyxXQUFXO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDMUMsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUE7UUFFRCxNQUFNLEVBQUUsQ0FBQTtRQUVSLE1BQU0sUUFBUSxHQUFHLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDN0MsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO1lBQ3pDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGVBQWUsRUFBRSxDQUFDLE9BQU8sQ0FBQztTQUMzQixDQUFDLENBQUE7UUFFRixPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUNwQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUVwQixPQUFPLGNBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsdUNBQXVDLEdBQUcsQ0FBQTtBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IG1lcm1haWQgZnJvbSBcIm1lcm1haWRcIlxuXG5tZXJtYWlkLmluaXRpYWxpemUoeyBzdGFydE9uTG9hZDogZmFsc2UgfSlcblxuLy8gTW9kdWxlLXdpZGUgc28gcnVucyBuZXZlciBvdmVybGFwLCBldmVuIGFjcm9zcyBlZmZlY3QgcmUtcnVuczogb3ZlcmxhcHBpbmcgcnVucyBvblxuLy8gb25lIG5vZGUgcmVqZWN0IHdpdGggXCJyZWFkaW5nICdmaXJzdENoaWxkJ1wiLlxubGV0IHJlbmRlclF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKClcblxuLyoqIFJlbmRlcnMgYSBNZXJtYWlkIGRpYWdyYW0gZnJvbSBhIGNoYXJ0IGRlZmluaXRpb24gc3RyaW5nICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNZXJtYWlkUmVuZGVyZXIocHJvcHM6IHsgY2hpbGRyZW46IHN0cmluZyB9KSB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gcmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cblxuICAgIGNvbnN0IHJlbmRlciA9ICgpID0+IHtcbiAgICAgIHJlbmRlclF1ZXVlID0gcmVuZGVyUXVldWVcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmICghZWwuaXNDb25uZWN0ZWQpIHJldHVyblxuICAgICAgICAgIGNvbnN0IGlzRGFyayA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJkYXJrXCIpXG4gICAgICAgICAgbWVybWFpZC5pbml0aWFsaXplKHtcbiAgICAgICAgICAgIHN0YXJ0T25Mb2FkOiBmYWxzZSxcbiAgICAgICAgICAgIHRoZW1lOiBpc0RhcmsgPyBcImRhcmtcIiA6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgZWwudGV4dENvbnRlbnQgPSBwcm9wcy5jaGlsZHJlblxuICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtcHJvY2Vzc2VkXCIpXG4gICAgICAgICAgcmV0dXJuIG1lcm1haWQucnVuKHsgbm9kZXM6IFtlbF0gfSlcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBpZiAoZWwuaXNDb25uZWN0ZWQpIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVuZGVyKClcblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIocmVuZGVyKVxuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiXSxcbiAgICB9KVxuXG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICB9LCBbcHJvcHMuY2hpbGRyZW5dKVxuXG4gIHJldHVybiA8ZGl2IHJlZj17cmVmfSBjbGFzc05hbWU9XCJub3QtcHJvc2UgbWVybWFpZCBmbGV4IGp1c3RpZnktY2VudGVyXCIgLz5cbn1cbiJdfQ==
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Link } from "@tanstack/react-router";
|
|
3
|
+
import { buttonVariants } from "../elements/button.js";
|
|
3
4
|
export function NotFound({ children }) {
|
|
4
|
-
return (_jsxs("div", { className: "min-h-[60vh] flex flex-col items-center justify-center text-center px-4", children: [
|
|
5
|
-
_jsx("h1", { className: "font-sans text-6xl font-semibold mb-4", children: "404" }), _jsx("div", { className: "text-muted-foreground mb-6", children: children || _jsx("p", { children: "The page you're looking for doesn't exist." }) }), _jsxs("div", { className: "flex items-center gap-4", children: [
|
|
6
|
-
_jsx("button", { type: "button", onClick: () => window.history.back(), className: "bg-primary text-primary-foreground px-4 py-2 text-sm font-medium hover:bg-primary/80 transition-colors", children: "Go Back" }), _jsx(Link, { to: "/", className: "border border-border px-4 py-2 text-sm font-medium hover:bg-card transition-colors", children: "Home" })
|
|
7
|
-
] })
|
|
8
|
-
] }));
|
|
5
|
+
return (_jsxs("div", { className: "min-h-[60vh] flex flex-col items-center justify-center text-center px-4", children: [_jsx("h1", { className: "font-sans text-6xl font-semibold mb-4", children: "404" }), _jsx("div", { className: "text-muted-foreground mb-6", children: children || _jsx("p", { children: "The page you're looking for doesn't exist." }) }), _jsxs("div", { className: "flex items-center gap-4", children: [_jsx("button", { type: "button", onClick: () => window.history.back(), className: buttonVariants({ size: "lg" }), children: "Go Back" }), _jsx(Link, { to: "/", className: buttonVariants({ variant: "outline", size: "lg" }), children: "Home" })] })] }));
|
|
9
6
|
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90Rm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9Ob3RGb3VuZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXdCLENBQUE7QUFFdkQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBc0I7SUFDdkQsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFDLHlFQUF5RSxhQUN0RixhQUFJLFNBQVMsRUFBQyx1Q0FBdUMsb0JBQVMsRUFDOUQsY0FBSyxTQUFTLEVBQUMsNEJBQTRCLFlBQ3hDLFFBQVEsSUFBSSxxRUFBaUQsR0FDMUQsRUFDTixlQUFLLFNBQVMsRUFBQyx5QkFBeUIsYUFDdEMsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFDcEMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyx3QkFHbEMsRUFDVCxLQUFDLElBQUksSUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxxQkFFbkUsSUFDSCxJQUNGLENBQ1AsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW5rIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIlxuaW1wb3J0IHsgYnV0dG9uVmFyaWFudHMgfSBmcm9tIFwiLi4vZWxlbWVudHMvYnV0dG9uLnRzeFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBOb3RGb3VuZCh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBhbnkgfSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLWgtWzYwdmhdIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyIHB4LTRcIj5cbiAgICAgIDxoMSBjbGFzc05hbWU9XCJmb250LXNhbnMgdGV4dC02eGwgZm9udC1zZW1pYm9sZCBtYi00XCI+NDA0PC9oMT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG1iLTZcIj5cbiAgICAgICAge2NoaWxkcmVuIHx8IDxwPlRoZSBwYWdlIHlvdSdyZSBsb29raW5nIGZvciBkb2Vzbid0IGV4aXN0LjwvcD59XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHdpbmRvdy5oaXN0b3J5LmJhY2soKX1cbiAgICAgICAgICBjbGFzc05hbWU9e2J1dHRvblZhcmlhbnRzKHsgc2l6ZTogXCJsZ1wiIH0pfVxuICAgICAgICA+XG4gICAgICAgICAgR28gQmFja1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPExpbmsgdG89XCIvXCIgY2xhc3NOYW1lPXtidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IFwib3V0bGluZVwiLCBzaXplOiBcImxnXCIgfSl9PlxuICAgICAgICAgIEhvbWVcbiAgICAgICAgPC9MaW5rPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiJdfQ==
|
|
@@ -5,5 +5,5 @@ interface PackageTabsProps {
|
|
|
5
5
|
bun: string;
|
|
6
6
|
}
|
|
7
7
|
/** Tabbed code block showing a command for each package manager */
|
|
8
|
-
export declare function PackageTabs(props: PackageTabsProps): import("react
|
|
8
|
+
export declare function PackageTabs(props: PackageTabsProps): import("react").JSX.Element;
|
|
9
9
|
export {};
|
|
@@ -17,12 +17,8 @@ export function PackageTabs(props) {
|
|
|
17
17
|
setCopied(true);
|
|
18
18
|
setTimeout(() => setCopied(false), 2000);
|
|
19
19
|
};
|
|
20
|
-
return (_jsxs("figure", { className: "not-prose my-4 relative rounded-
|
|
21
|
-
_jsxs("div", { className: "flex items-center border-b", children: [
|
|
22
|
-
_jsx("div", { className: "flex flex-1 items-center", children: managers.map(pm => (_jsx("button", { type: "button", onClick: () => setActive(pm), className: `px-3 py-2 text-xs font-medium transition-colors ${pm === active
|
|
20
|
+
return (_jsxs("figure", { className: "not-prose my-4 relative rounded-card border shadow-sm overflow-hidden text-sm bg-sidebar dark:bg-sidebar", children: [_jsxs("div", { className: "flex items-center border-b", children: [_jsx("div", { className: "flex flex-1 items-center", children: managers.map(pm => (_jsx("button", { type: "button", onClick: () => setActive(pm), className: `px-3 py-2 text-xs font-medium transition-colors ${pm === active
|
|
23
21
|
? "text-foreground border-b-2 border-foreground"
|
|
24
|
-
: "text-muted-foreground hover:text-foreground"}`, children: pm }, pm))) }), _jsx("button", { type: "button", onClick: handleCopy, className: "me-2 p-1 rounded-
|
|
25
|
-
] }), _jsx("div", { className: "text-[0.8125rem] py-3.5 overflow-auto max-h-[600px]", children: _jsx("pre", { className: "min-w-full w-max", children: _jsx("code", { className: "flex flex-col", children: _jsx("span", { className: "px-4", children: commands[active] }) }) }) })
|
|
26
|
-
] }));
|
|
22
|
+
: "text-muted-foreground hover:text-foreground"}`, children: pm }, pm))) }), _jsx("button", { type: "button", onClick: handleCopy, className: "me-2 p-1 rounded-control text-muted-foreground hover:text-foreground transition-colors", "aria-label": "Copy code", children: copied ? _jsx(Check, { className: "size-3.5" }) : _jsx(Clipboard, { className: "size-3.5" }) })] }), _jsx("div", { className: "text-[0.8125rem] py-3.5 overflow-auto max-h-[600px]", children: _jsx("pre", { className: "min-w-full w-max", children: _jsx("code", { className: "flex flex-col", children: _jsx("span", { className: "px-4", children: commands[active] }) }) }) })] }));
|
|
27
23
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVRhYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9QYWNrYWdlVGFicy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFJaEMsTUFBTSxRQUFRLEdBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtBQVMxRCxtRUFBbUU7QUFDbkUsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUF1QjtJQUNqRCxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBVSxLQUFLLENBQUMsQ0FBQTtJQUNwRCxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUUzQyxNQUFNLFFBQVEsR0FBNEI7UUFDeEMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1FBQ2QsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtRQUNoQixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7S0FDZixDQUFBO0lBRUQsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQy9DLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNmLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDMUMsQ0FBQyxDQUFBO0lBRUQsT0FBTyxDQUNMLGtCQUFRLFNBQVMsRUFBQywwR0FBMEcsYUFDMUgsZUFBSyxTQUFTLEVBQUMsNEJBQTRCLGFBQ3pDLGNBQUssU0FBUyxFQUFDLDBCQUEwQixZQUN0QyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDbEIsaUJBRUUsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUM1QixTQUFTLEVBQUUsbURBQ1QsRUFBRSxLQUFLLE1BQU07Z0NBQ1gsQ0FBQyxDQUFDLDhDQUE4QztnQ0FDaEQsQ0FBQyxDQUFDLDZDQUNOLEVBQUUsWUFFRCxFQUFFLElBVEUsRUFBRSxDQVVBLENBQ1YsQ0FBQyxHQUNFLEVBQ04saUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsVUFBVSxFQUNuQixTQUFTLEVBQUMsd0ZBQXdGLGdCQUN2RixXQUFXLFlBRXJCLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBQyxLQUFLLElBQUMsU0FBUyxFQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFDLFNBQVMsSUFBQyxTQUFTLEVBQUMsVUFBVSxHQUFHLEdBQ3RFLElBQ0wsRUFDTixjQUFLLFNBQVMsRUFBQyxxREFBcUQsWUFDbEUsY0FBSyxTQUFTLEVBQUMsa0JBQWtCLFlBQy9CLGVBQU0sU0FBUyxFQUFDLGVBQWUsWUFDN0IsZUFBTSxTQUFTLEVBQUMsTUFBTSxZQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBUSxHQUMzQyxHQUNILEdBQ0YsSUFDQyxDQUNWLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hlY2ssIENsaXBib2FyZCB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIlxuXG50eXBlIE1hbmFnZXIgPSBcIm5wbVwiIHwgXCJwbnBtXCIgfCBcInlhcm5cIiB8IFwiYnVuXCJcblxuY29uc3QgbWFuYWdlcnM6IE1hbmFnZXJbXSA9IFtcIm5wbVwiLCBcInBucG1cIiwgXCJ5YXJuXCIsIFwiYnVuXCJdXG5cbmludGVyZmFjZSBQYWNrYWdlVGFic1Byb3BzIHtcbiAgbnBtOiBzdHJpbmdcbiAgcG5wbTogc3RyaW5nXG4gIHlhcm46IHN0cmluZ1xuICBidW46IHN0cmluZ1xufVxuXG4vKiogVGFiYmVkIGNvZGUgYmxvY2sgc2hvd2luZyBhIGNvbW1hbmQgZm9yIGVhY2ggcGFja2FnZSBtYW5hZ2VyICovXG5leHBvcnQgZnVuY3Rpb24gUGFja2FnZVRhYnMocHJvcHM6IFBhY2thZ2VUYWJzUHJvcHMpIHtcbiAgY29uc3QgW2FjdGl2ZSwgc2V0QWN0aXZlXSA9IHVzZVN0YXRlPE1hbmFnZXI+KFwibnBtXCIpXG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBjb21tYW5kczogUmVjb3JkPE1hbmFnZXIsIHN0cmluZz4gPSB7XG4gICAgbnBtOiBwcm9wcy5ucG0sXG4gICAgcG5wbTogcHJvcHMucG5wbSxcbiAgICB5YXJuOiBwcm9wcy55YXJuLFxuICAgIGJ1bjogcHJvcHMuYnVuLFxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ29weSA9ICgpID0+IHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb21tYW5kc1thY3RpdmVdKVxuICAgIHNldENvcGllZCh0cnVlKVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0Q29waWVkKGZhbHNlKSwgMjAwMClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGZpZ3VyZSBjbGFzc05hbWU9XCJub3QtcHJvc2UgbXktNCByZWxhdGl2ZSByb3VuZGVkLWNhcmQgYm9yZGVyIHNoYWRvdy1zbSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1zbSBiZy1zaWRlYmFyIGRhcms6Ymctc2lkZWJhclwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBib3JkZXItYlwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC0xIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIHttYW5hZ2Vycy5tYXAocG0gPT4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e3BtfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0QWN0aXZlKHBtKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0yIHRleHQteHMgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICBwbSA9PT0gYWN0aXZlXG4gICAgICAgICAgICAgICAgICA/IFwidGV4dC1mb3JlZ3JvdW5kIGJvcmRlci1iLTIgYm9yZGVyLWZvcmVncm91bmRcIlxuICAgICAgICAgICAgICAgICAgOiBcInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmRcIlxuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3BtfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlQ29weX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJtZS0yIHAtMSByb3VuZGVkLWNvbnRyb2wgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNvcHkgY29kZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7Y29waWVkID8gPENoZWNrIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz4gOiA8Q2xpcGJvYXJkIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz59XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuODEyNXJlbV0gcHktMy41IG92ZXJmbG93LWF1dG8gbWF4LWgtWzYwMHB4XVwiPlxuICAgICAgICA8cHJlIGNsYXNzTmFtZT1cIm1pbi13LWZ1bGwgdy1tYXhcIj5cbiAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJweC00XCI+e2NvbW1hbmRzW2FjdGl2ZV19PC9zcGFuPlxuICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgPC9wcmU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpZ3VyZT5cbiAgKVxufVxuIl19
|
|
@@ -23,14 +23,6 @@ export function PageToolbar(props) {
|
|
|
23
23
|
window.open(`${base}?${params}`, "_blank", "noopener,noreferrer");
|
|
24
24
|
};
|
|
25
25
|
const buttonClass = "flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors";
|
|
26
|
-
return (_jsx(_Fragment, { children: _jsxs("div", {
|
|
27
|
-
_jsx("p", { className: "text-sm font-medium mb-1", children: "Actions" }), sourceHref ? (_jsxs("a", { href: sourceHref, target: "_blank", rel: "noopener noreferrer", className: buttonClass, children: [
|
|
28
|
-
_jsx(SourceIcon, { className: "size-3.5" }), sourceLabel] })) : (_jsxs("span", { className: `${buttonClass} opacity-50 cursor-not-allowed hover:text-muted-foreground`, "aria-disabled": "true", children: [
|
|
29
|
-
_jsx(SourceIcon, { className: "size-3.5" }), sourceLabel] })), _jsxs("button", { type: "button", onClick: handleCopy, className: buttonClass, children: [copied ? _jsx(Check, { className: "size-3.5" }) : _jsx(Copy, { className: "size-3.5" }), "Copy Markdown"] }), _jsxs("button", { type: "button", onClick: () => openIn("https://chatgpt.com/", { hints: "search" }), className: buttonClass, children: [
|
|
30
|
-
_jsx(ExternalLink, { className: "size-3.5" }),
|
|
31
|
-
"Open in ChatGPT"] }), _jsxs("button", { type: "button", onClick: () => openIn("https://claude.ai/new"), className: buttonClass, children: [
|
|
32
|
-
_jsx(ExternalLink, { className: "size-3.5" }),
|
|
33
|
-
"Open in Claude"] })
|
|
34
|
-
] }) }));
|
|
26
|
+
return (_jsx(_Fragment, { children: _jsxs("div", { "data-slot": "page-toolbar", className: "flex flex-col gap-2 text-sm", children: [sourceHref ? (_jsxs("a", { href: sourceHref, target: "_blank", rel: "noopener noreferrer", "data-slot": "page-action", className: buttonClass, children: [_jsx(SourceIcon, { className: "size-3.5" }), sourceLabel] })) : (_jsxs("span", { "data-slot": "page-action", className: `${buttonClass} opacity-50 cursor-not-allowed hover:text-muted-foreground`, "aria-disabled": "true", children: [_jsx(SourceIcon, { className: "size-3.5" }), sourceLabel] })), _jsxs("button", { type: "button", onClick: handleCopy, "data-slot": "page-action", className: buttonClass, children: [copied ? _jsx(Check, { className: "size-3.5" }) : _jsx(Copy, { className: "size-3.5" }), "Copy Markdown"] }), _jsxs("button", { type: "button", onClick: () => openIn("https://chatgpt.com/", { hints: "search" }), "data-slot": "page-action", className: buttonClass, children: [_jsx(ExternalLink, { className: "size-3.5" }), "Open in ChatGPT"] }), _jsxs("button", { type: "button", onClick: () => openIn("https://claude.ai/new"), "data-slot": "page-action", className: buttonClass, children: [_jsx(ExternalLink, { className: "size-3.5" }), "Open in Claude"] })] }) }));
|
|
35
27
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnZVRvb2xiYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9QYWdlVG9vbGJhci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXJFLE1BQU0sVUFBVSxHQUFHLCtDQUErQyxDQUFBO0FBRWxFLG9FQUFvRTtBQUNwRSxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBSzNCO0lBQ0MsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0MsTUFBTSxVQUFVLEdBQ2QsS0FBSyxDQUFDLFNBQVM7UUFDZixDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ1QsQ0FBQyxDQUFDLGtEQUFrRCxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2hFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNoQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQTtJQUM1QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQTtJQUNoRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO0lBRXhDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDbEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzVDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNmLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDMUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFFbkIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBOEIsRUFBRSxFQUFFO1FBQzlELE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUE7SUFDbkUsQ0FBQyxDQUFBO0lBRUQsTUFBTSxXQUFXLEdBQ2YsaUdBQWlHLENBQUE7SUFFbkcsT0FBTyxDQUNMLDRCQUNFLDRCQUFlLGNBQWMsRUFBQyxTQUFTLEVBQUMsNkJBQTZCLGFBQ2xFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDWixhQUNFLElBQUksRUFBRSxVQUFVLEVBQ2hCLE1BQU0sRUFBQyxRQUFRLEVBQ2YsR0FBRyxFQUFDLHFCQUFxQixlQUNmLGFBQWEsRUFDdkIsU0FBUyxFQUFFLFdBQVcsYUFFdEIsS0FBQyxVQUFVLElBQUMsU0FBUyxFQUFDLFVBQVUsR0FBRyxFQUNsQyxXQUFXLElBQ1YsQ0FDTCxDQUFDLENBQUMsQ0FBQyxDQUNGLDZCQUNZLGFBQWEsRUFDdkIsU0FBUyxFQUFFLEdBQUcsV0FBVyw0REFBNEQsbUJBQ3ZFLE1BQU0sYUFFcEIsS0FBQyxVQUFVLElBQUMsU0FBUyxFQUFDLFVBQVUsR0FBRyxFQUNsQyxXQUFXLElBQ1AsQ0FDUixFQUNELGtCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLFVBQVUsZUFDVCxhQUFhLEVBQ3ZCLFNBQVMsRUFBRSxXQUFXLGFBRXJCLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBQyxLQUFLLElBQUMsU0FBUyxFQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFDLElBQUksSUFBQyxTQUFTLEVBQUMsVUFBVSxHQUFHLHFCQUVqRSxFQUNULGtCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxlQUN4RCxhQUFhLEVBQ3ZCLFNBQVMsRUFBRSxXQUFXLGFBRXRCLEtBQUMsWUFBWSxJQUFDLFNBQVMsRUFBQyxVQUFVLEdBQUcsdUJBRTlCLEVBQ1Qsa0JBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLGVBQ3BDLGFBQWEsRUFDdkIsU0FBUyxFQUFFLFdBQVcsYUFFdEIsS0FBQyxZQUFZLElBQUMsU0FBUyxFQUFDLFVBQVUsR0FBRyxzQkFFOUIsSUFDTCxHQUNMLENBQ0osQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgRXllLCBQZW5jaWwsIENvcHksIENoZWNrLCBFeHRlcm5hbExpbmsgfSBmcm9tIFwibHVjaWRlLXJlYWN0XCJcblxuY29uc3QgTExNX1BST01QVCA9IFwiUmVhZCB7dXJsfSwgSSB3YW50IHRvIGFzayBxdWVzdGlvbnMgYWJvdXQgaXQuXCJcblxuLyoqIFRvb2xiYXIgd2l0aCBhY3Rpb24gYnV0dG9ucyBkaXNwbGF5ZWQgZm9yIHRoZSBhcnRpY2xlIGNvbnRlbnQgKi9cbmV4cG9ydCBmdW5jdGlvbiBQYWdlVG9vbGJhcihwcm9wczoge1xuICBmaWxlPzogc3RyaW5nXG4gIHNvdXJjZVVybD86IHN0cmluZ1xuICBzb3VyY2VBY3Rpb24/OiBcImVkaXRcIiB8IFwidmlld1wiXG4gIGNvbnRlbnQ6IHN0cmluZ1xufSkge1xuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHNvdXJjZUhyZWYgPVxuICAgIHByb3BzLnNvdXJjZVVybCA/P1xuICAgIChwcm9wcy5maWxlXG4gICAgICA/IGBodHRwczovL2dpdGh1Yi5jb20vZGF0aXN0aHEvbGl2ZW1hcmsvZWRpdC9tYWluLyR7cHJvcHMuZmlsZX1gXG4gICAgICA6IHVuZGVmaW5lZClcbiAgY29uc3QgaXNWaWV3ID0gcHJvcHMuc291cmNlQWN0aW9uID09PSBcInZpZXdcIlxuICBjb25zdCBzb3VyY2VMYWJlbCA9IGlzVmlldyA/IFwiVmlldyBvbiBHaXRIdWJcIiA6IFwiRWRpdCBvbiBHaXRIdWJcIlxuICBjb25zdCBTb3VyY2VJY29uID0gaXNWaWV3ID8gRXllIDogUGVuY2lsXG5cbiAgY29uc3QgaGFuZGxlQ29weSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChwcm9wcy5jb250ZW50KVxuICAgIHNldENvcGllZCh0cnVlKVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0Q29waWVkKGZhbHNlKSwgMjAwMClcbiAgfSwgW3Byb3BzLmNvbnRlbnRdKVxuXG4gIGNvbnN0IG9wZW5JbiA9IChiYXNlOiBzdHJpbmcsIGV4dHJhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT4ge1xuICAgIGNvbnN0IHEgPSBMTE1fUFJPTVBULnJlcGxhY2UoXCJ7dXJsfVwiLCB3aW5kb3cubG9jYXRpb24uaHJlZilcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgLi4uZXh0cmEsIHEgfSlcbiAgICB3aW5kb3cub3BlbihgJHtiYXNlfT8ke3BhcmFtc31gLCBcIl9ibGFua1wiLCBcIm5vb3BlbmVyLG5vcmVmZXJyZXJcIilcbiAgfVxuXG4gIGNvbnN0IGJ1dHRvbkNsYXNzID1cbiAgICBcImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tY29sb3JzXCJcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2IGRhdGEtc2xvdD1cInBhZ2UtdG9vbGJhclwiIGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1zbVwiPlxuICAgICAgICB7c291cmNlSHJlZiA/IChcbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj17c291cmNlSHJlZn1cbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgIGRhdGEtc2xvdD1cInBhZ2UtYWN0aW9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3N9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNvdXJjZUljb24gY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuICAgICAgICAgICAge3NvdXJjZUxhYmVsfVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgZGF0YS1zbG90PVwicGFnZS1hY3Rpb25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtidXR0b25DbGFzc30gb3BhY2l0eS01MCBjdXJzb3Itbm90LWFsbG93ZWQgaG92ZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH1cbiAgICAgICAgICAgIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U291cmNlSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG4gICAgICAgICAgICB7c291cmNlTGFiZWx9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlQ29weX1cbiAgICAgICAgICBkYXRhLXNsb3Q9XCJwYWdlLWFjdGlvblwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtidXR0b25DbGFzc31cbiAgICAgICAgPlxuICAgICAgICAgIHtjb3BpZWQgPyA8Q2hlY2sgY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPiA6IDxDb3B5IGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz59XG4gICAgICAgICAgQ29weSBNYXJrZG93blxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9wZW5JbihcImh0dHBzOi8vY2hhdGdwdC5jb20vXCIsIHsgaGludHM6IFwic2VhcmNoXCIgfSl9XG4gICAgICAgICAgZGF0YS1zbG90PVwicGFnZS1hY3Rpb25cIlxuICAgICAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3N9XG4gICAgICAgID5cbiAgICAgICAgICA8RXh0ZXJuYWxMaW5rIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cbiAgICAgICAgICBPcGVuIGluIENoYXRHUFRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuSW4oXCJodHRwczovL2NsYXVkZS5haS9uZXdcIil9XG4gICAgICAgICAgZGF0YS1zbG90PVwicGFnZS1hY3Rpb25cIlxuICAgICAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3N9XG4gICAgICAgID5cbiAgICAgICAgICA8RXh0ZXJuYWxMaW5rIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cbiAgICAgICAgICBPcGVuIGluIENsYXVkZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApXG59XG4iXX0=
|
|
@@ -17,14 +17,6 @@ export function PrevNext(props) {
|
|
|
17
17
|
const next = nextPath ? sortedArticles.find(a => a.path === nextPath) : undefined;
|
|
18
18
|
if (!prev && !next)
|
|
19
19
|
return null;
|
|
20
|
-
return (_jsxs("nav", { className: "not-prose mt-10 flex gap-4", children: [prev && (_jsxs(Link, { to: "/$", params: { _splat: prev.path.replace(/^\/|\/$/g, "") }, className: "flex-1 rounded-
|
|
21
|
-
_jsxs("span", { className: "flex items-center gap-1 text-sm text-muted-foreground", children: [
|
|
22
|
-
_jsx(ChevronLeft, { className: "size-4" }),
|
|
23
|
-
"Previous"] }), _jsx("span", { className: "mt-1 block font-medium", children: prev.title })
|
|
24
|
-
] })), next && (_jsxs(Link, { to: "/$", params: { _splat: next.path.replace(/^\/|\/$/g, "") }, className: "flex-1 rounded-xl border shadow-sm p-4 hover:bg-muted/50 transition-colors text-right", children: [
|
|
25
|
-
_jsxs("span", { className: "flex items-center justify-end gap-1 text-sm text-muted-foreground", children: ["Next",
|
|
26
|
-
_jsx(ChevronRight, { className: "size-4" })
|
|
27
|
-
] }), _jsx("span", { className: "mt-1 block font-medium", children: next.title })
|
|
28
|
-
] }))] }));
|
|
20
|
+
return (_jsxs("nav", { className: "not-prose mt-10 flex gap-4", children: [prev && (_jsxs(Link, { to: "/$", params: { _splat: prev.path.replace(/^\/|\/$/g, "") }, className: "flex-1 rounded-card border shadow-sm p-4 hover:bg-muted/50 transition-colors", children: [_jsxs("span", { className: "flex items-center gap-1 text-sm text-muted-foreground", children: [_jsx(ChevronLeft, { className: "size-4" }), "Previous"] }), _jsx("span", { className: "mt-1 block font-medium", children: prev.title })] })), next && (_jsxs(Link, { to: "/$", params: { _splat: next.path.replace(/^\/|\/$/g, "") }, className: "flex-1 rounded-card border shadow-sm p-4 hover:bg-muted/50 transition-colors text-right", children: [_jsxs("span", { className: "flex items-center justify-end gap-1 text-sm text-muted-foreground", children: ["Next", _jsx(ChevronRight, { className: "size-4" })] }), _jsx("span", { className: "mt-1 block font-medium", children: next.title })] }))] }));
|
|
29
21
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJldk5leHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9QcmV2TmV4dC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN4RCxPQUFPLEVBQ0wsY0FBYyxFQUNkLFlBQVksRUFDWixjQUFjLEVBQ2QsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUE7QUFFOUIsZ0ZBQWdGO0FBQ2hGLE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBdUI7SUFDOUMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMxQyxNQUFNLElBQUksR0FBRyxPQUFPO1FBQ2xCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDO1FBQzNELENBQUMsQ0FBQyxZQUFZLENBQUE7SUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEMsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBRTFCLE1BQU0sUUFBUSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUN4RCxNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUN0RSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDakYsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBRWpGLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFL0IsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFDLDRCQUE0QixhQUN4QyxJQUFJLElBQUksQ0FDUCxNQUFDLElBQUksSUFDSCxFQUFFLEVBQUMsSUFBSSxFQUNQLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFDckQsU0FBUyxFQUFDLDhFQUE4RSxhQUV4RixnQkFBTSxTQUFTLEVBQUMsdURBQXVELGFBQ3JFLEtBQUMsV0FBVyxJQUFDLFNBQVMsRUFBQyxRQUFRLEdBQUcsZ0JBRTdCLEVBQ1AsZUFBTSxTQUFTLEVBQUMsd0JBQXdCLFlBQUUsSUFBSSxDQUFDLEtBQUssR0FBUSxJQUN2RCxDQUNSLEVBQ0EsSUFBSSxJQUFJLENBQ1AsTUFBQyxJQUFJLElBQ0gsRUFBRSxFQUFDLElBQUksRUFDUCxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQ3JELFNBQVMsRUFBQyx5RkFBeUYsYUFFbkcsZ0JBQU0sU0FBUyxFQUFDLG1FQUFtRSxxQkFFakYsS0FBQyxZQUFZLElBQUMsU0FBUyxFQUFDLFFBQVEsR0FBRyxJQUM5QixFQUNQLGVBQU0sU0FBUyxFQUFDLHdCQUF3QixZQUFFLElBQUksQ0FBQyxLQUFLLEdBQVEsSUFDdkQsQ0FDUixJQUNHLENBQ1AsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW5rIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIlxuaW1wb3J0IHsgQ2hldnJvbkxlZnQsIENoZXZyb25SaWdodCB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuaW1wb3J0IHtcbiAgc29ydGVkQXJ0aWNsZXMsXG4gIGZsYXRBcnRpY2xlcyxcbiAgY3VycmVudFNlY3Rpb24sXG4gIHNlY3Rpb25GbGF0QXJ0aWNsZXMsXG59IGZyb20gXCIuLi9jb250ZW50L2FydGljbGUudHNcIlxuXG4vKiogUHJldmlvdXMvbmV4dCBhcnRpY2xlIG5hdmlnYXRpb24gc2hvd24gYXQgdGhlIGJvdHRvbSBvZiBlYWNoIGFydGljbGUgcGFnZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByZXZOZXh0KHByb3BzOiB7IHBhdGg6IHN0cmluZyB9KSB7XG4gIGNvbnN0IHNlY3Rpb24gPSBjdXJyZW50U2VjdGlvbihwcm9wcy5wYXRoKVxuICBjb25zdCBmbGF0ID0gc2VjdGlvblxuICAgID8gKHNlY3Rpb25GbGF0QXJ0aWNsZXMuZ2V0KHNlY3Rpb24ucHJlZml4KSA/PyBmbGF0QXJ0aWNsZXMpXG4gICAgOiBmbGF0QXJ0aWNsZXNcbiAgY29uc3QgaW5kZXggPSBmbGF0LmluZGV4T2YocHJvcHMucGF0aClcbiAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIG51bGxcblxuICBjb25zdCBwcmV2UGF0aCA9IGluZGV4ID4gMCA/IGZsYXRbaW5kZXggLSAxXSA6IHVuZGVmaW5lZFxuICBjb25zdCBuZXh0UGF0aCA9IGluZGV4IDwgZmxhdC5sZW5ndGggLSAxID8gZmxhdFtpbmRleCArIDFdIDogdW5kZWZpbmVkXG4gIGNvbnN0IHByZXYgPSBwcmV2UGF0aCA/IHNvcnRlZEFydGljbGVzLmZpbmQoYSA9PiBhLnBhdGggPT09IHByZXZQYXRoKSA6IHVuZGVmaW5lZFxuICBjb25zdCBuZXh0ID0gbmV4dFBhdGggPyBzb3J0ZWRBcnRpY2xlcy5maW5kKGEgPT4gYS5wYXRoID09PSBuZXh0UGF0aCkgOiB1bmRlZmluZWRcblxuICBpZiAoIXByZXYgJiYgIW5leHQpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIChcbiAgICA8bmF2IGNsYXNzTmFtZT1cIm5vdC1wcm9zZSBtdC0xMCBmbGV4IGdhcC00XCI+XG4gICAgICB7cHJldiAmJiAoXG4gICAgICAgIDxMaW5rXG4gICAgICAgICAgdG89XCIvJFwiXG4gICAgICAgICAgcGFyYW1zPXt7IF9zcGxhdDogcHJldi5wYXRoLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKSB9fVxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSByb3VuZGVkLWNhcmQgYm9yZGVyIHNoYWRvdy1zbSBwLTQgaG92ZXI6YmctbXV0ZWQvNTAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgIDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgICAgICAgICAgUHJldmlvdXNcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXQtMSBibG9jayBmb250LW1lZGl1bVwiPntwcmV2LnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgPC9MaW5rPlxuICAgICAgKX1cbiAgICAgIHtuZXh0ICYmIChcbiAgICAgICAgPExpbmtcbiAgICAgICAgICB0bz1cIi8kXCJcbiAgICAgICAgICBwYXJhbXM9e3sgX3NwbGF0OiBuZXh0LnBhdGgucmVwbGFjZSgvXlxcL3xcXC8kL2csIFwiXCIpIH19XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHJvdW5kZWQtY2FyZCBib3JkZXIgc2hhZG93LXNtIHAtNCBob3ZlcjpiZy1tdXRlZC81MCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LXJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0xIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICBOZXh0XG4gICAgICAgICAgICA8Q2hldnJvblJpZ2h0IGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm10LTEgYmxvY2sgZm9udC1tZWRpdW1cIj57bmV4dC50aXRsZX08L3NwYW4+XG4gICAgICAgIDwvTGluaz5cbiAgICAgICl9XG4gICAgPC9uYXY+XG4gIClcbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { useHotkey } from "@tanstack/react-hotkeys";
|
|
2
|
+
/** Headless wrapper around every route; pages add their own chrome with `Layout` */
|
|
3
|
+
export function Root(props) {
|
|
4
|
+
useHotkey("J", () => window.scrollBy({ top: window.innerHeight * 0.8, behavior: "smooth" }));
|
|
5
|
+
useHotkey("K", () => window.scrollBy({ top: -window.innerHeight * 0.8, behavior: "smooth" }));
|
|
6
|
+
return props.children;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm9vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL1Jvb3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUVuRCxvRkFBb0Y7QUFDcEYsTUFBTSxVQUFVLElBQUksQ0FBQyxLQUFxQztJQUN4RCxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUNsQixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUN2RSxDQUFBO0lBQ0QsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FDbEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUN4RSxDQUFBO0lBRUQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFBO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VIb3RrZXkgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LWhvdGtleXNcIlxuXG4vKiogSGVhZGxlc3Mgd3JhcHBlciBhcm91bmQgZXZlcnkgcm91dGU7IHBhZ2VzIGFkZCB0aGVpciBvd24gY2hyb21lIHdpdGggYExheW91dGAgKi9cbmV4cG9ydCBmdW5jdGlvbiBSb290KHByb3BzOiB7IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlIH0pIHtcbiAgdXNlSG90a2V5KFwiSlwiLCAoKSA9PlxuICAgIHdpbmRvdy5zY3JvbGxCeSh7IHRvcDogd2luZG93LmlubmVySGVpZ2h0ICogMC44LCBiZWhhdmlvcjogXCJzbW9vdGhcIiB9KSxcbiAgKVxuICB1c2VIb3RrZXkoXCJLXCIsICgpID0+XG4gICAgd2luZG93LnNjcm9sbEJ5KHsgdG9wOiAtd2luZG93LmlubmVySGVpZ2h0ICogMC44LCBiZWhhdmlvcjogXCJzbW9vdGhcIiB9KSxcbiAgKVxuXG4gIHJldHVybiBwcm9wcy5jaGlsZHJlblxufVxuIl19
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
/** Search button with "
|
|
2
|
-
|
|
1
|
+
/** Search button with "S" keyboard shortcut: a command palette from `lg`, an in-header field below.
|
|
2
|
+
* `compact` keeps it an icon from `lg` too, when header sections need the room */
|
|
3
|
+
export declare function Search(props: {
|
|
4
|
+
compact?: boolean;
|
|
5
|
+
}): import("react").JSX.Element;
|
|
@@ -2,15 +2,17 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { useHotkey } from "@tanstack/react-hotkeys";
|
|
4
4
|
import { Search as SearchIcon } from "lucide-react";
|
|
5
|
+
import { cn } from "cn";
|
|
6
|
+
import { isMobileNow } from "../hooks/media.js";
|
|
7
|
+
import { HeaderSearch } from "./HeaderSearch.js";
|
|
5
8
|
import { SearchDialog } from "./SearchDialog.js";
|
|
6
|
-
/** Search button with "
|
|
7
|
-
|
|
9
|
+
/** Search button with "S" keyboard shortcut: a command palette from `lg`, an in-header field below.
|
|
10
|
+
* `compact` keeps it an icon from `lg` too, when header sections need the room */
|
|
11
|
+
export function Search(props) {
|
|
8
12
|
const [open, setOpen] = useState(false);
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
] }), _jsx(SearchDialog, { open: open, onOpenChange: setOpen })
|
|
14
|
-
] }));
|
|
13
|
+
const [headerOpen, setHeaderOpen] = useState(false);
|
|
14
|
+
const openSearch = () => (isMobileNow() ? setHeaderOpen(true) : setOpen(true));
|
|
15
|
+
useHotkey("S", openSearch);
|
|
16
|
+
return (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: openSearch, "aria-label": "Search", "aria-keyshortcuts": "S", title: "Search", className: cn("flex h-9 items-center gap-2 rounded-control border border-border bg-muted/50 px-2.5 text-sm text-muted-foreground shadow-xs hover:bg-muted transition-colors cursor-pointer", !props.compact && "lg:w-56"), children: [_jsx(SearchIcon, { className: "size-4" }), _jsx("span", { className: cn("hidden flex-1 text-left", !props.compact && "lg:inline"), children: "Search..." }), _jsx("kbd", { className: cn("hidden rounded border border-border bg-background px-1.5 py-0.5 text-[10px] font-mono", !props.compact && "lg:inline"), children: "S" })] }), headerOpen && _jsx(HeaderSearch, { onClose: () => setHeaderOpen(false) }), _jsx(SearchDialog, { open: open, onOpenChange: setOpen })] }));
|
|
15
17
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2VhcmNoLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbkQsT0FBTyxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDbkQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQTtBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFvQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBb0IsQ0FBQTtBQUVqRDtrRkFDa0Y7QUFDbEYsTUFBTSxVQUFVLE1BQU0sQ0FBQyxLQUE0QjtJQUNqRCxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN2QyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNuRCxNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBRTlFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFFMUIsT0FBTyxDQUNMLDhCQUNFLGtCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLFVBQVUsZ0JBQ1IsUUFBUSx1QkFDRCxHQUFHLEVBQ3JCLEtBQUssRUFBQyxRQUFRLEVBQ2QsU0FBUyxFQUFFLEVBQUUsQ0FDWCw2S0FBNkssRUFDN0ssQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FDNUIsYUFFRCxLQUFDLFVBQVUsSUFBQyxTQUFTLEVBQUMsUUFBUSxHQUFHLEVBQ2pDLGVBQU0sU0FBUyxFQUFFLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLDBCQUV0RSxFQUNQLGNBQ0UsU0FBUyxFQUFFLEVBQUUsQ0FDWCx1RkFBdUYsRUFDdkYsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FDOUIsa0JBR0csSUFDQyxFQUNSLFVBQVUsSUFBSSxLQUFDLFlBQVksSUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFJLEVBQ3BFLEtBQUMsWUFBWSxJQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sR0FBSSxJQUNsRCxDQUNKLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgdXNlSG90a2V5IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1ob3RrZXlzXCJcbmltcG9ydCB7IFNlYXJjaCBhcyBTZWFyY2hJY29uIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiXG5pbXBvcnQgeyBjbiB9IGZyb20gXCJjblwiXG5pbXBvcnQgeyBpc01vYmlsZU5vdyB9IGZyb20gXCIuLi9ob29rcy9tZWRpYS50c1wiXG5pbXBvcnQgeyBIZWFkZXJTZWFyY2ggfSBmcm9tIFwiLi9IZWFkZXJTZWFyY2gudHN4XCJcbmltcG9ydCB7IFNlYXJjaERpYWxvZyB9IGZyb20gXCIuL1NlYXJjaERpYWxvZy50c3hcIlxuXG4vKiogU2VhcmNoIGJ1dHRvbiB3aXRoIFwiU1wiIGtleWJvYXJkIHNob3J0Y3V0OiBhIGNvbW1hbmQgcGFsZXR0ZSBmcm9tIGBsZ2AsIGFuIGluLWhlYWRlciBmaWVsZCBiZWxvdy5cbiAqIGBjb21wYWN0YCBrZWVwcyBpdCBhbiBpY29uIGZyb20gYGxnYCB0b28sIHdoZW4gaGVhZGVyIHNlY3Rpb25zIG5lZWQgdGhlIHJvb20gKi9cbmV4cG9ydCBmdW5jdGlvbiBTZWFyY2gocHJvcHM6IHsgY29tcGFjdD86IGJvb2xlYW4gfSkge1xuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hlYWRlck9wZW4sIHNldEhlYWRlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IG9wZW5TZWFyY2ggPSAoKSA9PiAoaXNNb2JpbGVOb3coKSA/IHNldEhlYWRlck9wZW4odHJ1ZSkgOiBzZXRPcGVuKHRydWUpKVxuXG4gIHVzZUhvdGtleShcIlNcIiwgb3BlblNlYXJjaClcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtvcGVuU2VhcmNofVxuICAgICAgICBhcmlhLWxhYmVsPVwiU2VhcmNoXCJcbiAgICAgICAgYXJpYS1rZXlzaG9ydGN1dHM9XCJTXCJcbiAgICAgICAgdGl0bGU9XCJTZWFyY2hcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgIFwiZmxleCBoLTkgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtY29udHJvbCBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1tdXRlZC81MCBweC0yLjUgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLW11dGVkIHRyYW5zaXRpb24tY29sb3JzIGN1cnNvci1wb2ludGVyXCIsXG4gICAgICAgICAgIXByb3BzLmNvbXBhY3QgJiYgXCJsZzp3LTU2XCIsXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIDxTZWFyY2hJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y24oXCJoaWRkZW4gZmxleC0xIHRleHQtbGVmdFwiLCAhcHJvcHMuY29tcGFjdCAmJiBcImxnOmlubGluZVwiKX0+XG4gICAgICAgICAgU2VhcmNoLi4uXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGtiZFxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICBcImhpZGRlbiByb3VuZGVkIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLWJhY2tncm91bmQgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMHB4XSBmb250LW1vbm9cIixcbiAgICAgICAgICAgICFwcm9wcy5jb21wYWN0ICYmIFwibGc6aW5saW5lXCIsXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIFNcbiAgICAgICAgPC9rYmQ+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIHtoZWFkZXJPcGVuICYmIDxIZWFkZXJTZWFyY2ggb25DbG9zZT17KCkgPT4gc2V0SGVhZGVyT3BlbihmYWxzZSl9IC8+fVxuICAgICAgPFNlYXJjaERpYWxvZyBvcGVuPXtvcGVufSBvbk9wZW5DaGFuZ2U9e3NldE9wZW59IC8+XG4gICAgPC8+XG4gIClcbn1cbiJdfQ==
|