@lonik/prestige 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ui.d.ts CHANGED
@@ -2,6 +2,7 @@ import { n as SidebarType } from "./content.types-C35WR0tv.js";
2
2
  import { TocItem } from "remark-flexible-toc";
3
3
  import React, { ReactNode } from "react";
4
4
  import * as react_jsx_runtime0 from "react/jsx-runtime";
5
+ import { BundledLanguage } from "shiki";
5
6
  import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
6
7
 
7
8
  //#region src/ui/components/aside/aside.d.ts
@@ -22,13 +23,11 @@ declare function Aside({
22
23
  //#region src/ui/components/code/code.d.ts
23
24
  interface CodeProps {
24
25
  code: string;
25
- language?: string;
26
- theme?: string;
27
- children?: ReactNode;
26
+ language?: BundledLanguage;
28
27
  }
29
28
  declare function Code({
30
29
  code,
31
- children
30
+ language
32
31
  }: CodeProps): react_jsx_runtime0.JSX.Element;
33
32
  //#endregion
34
33
  //#region src/ui/components/package-managers/package-managers.d.ts
package/dist/ui.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import React, { useEffect, useRef, useState } from "react";
2
- import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { createHighlighter } from "shiki";
4
+ import { createJavaScriptRegexEngine } from "shiki/engine/javascript";
3
5
  import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
4
6
  import { Link, Outlet, useHydrated, useLocation } from "@tanstack/react-router";
5
7
  import collections from "virtual:prestige/collection-all";
@@ -94,8 +96,37 @@ function Aside({ type = "note", title, children, className, ...props }) {
94
96
 
95
97
  //#endregion
96
98
  //#region src/ui/components/code/code.tsx
97
- function Code({ code, children }) {
98
- return /* @__PURE__ */ jsx("pre", { children: /* @__PURE__ */ jsx("code", { children: code ?? children }) });
99
+ const shiki = await createHighlighter({
100
+ themes: ["github-dark", "github-light"],
101
+ langs: [
102
+ "tsx",
103
+ "javascript",
104
+ "typescript",
105
+ "css",
106
+ "html",
107
+ "jsx",
108
+ "json",
109
+ "bash"
110
+ ],
111
+ engine: createJavaScriptRegexEngine()
112
+ });
113
+ function Code({ code, language = "html" }) {
114
+ const [render, setRender] = useState("");
115
+ useEffect(() => {
116
+ if (!code) return;
117
+ async function highlight() {
118
+ await shiki.loadLanguage(language);
119
+ setRender(shiki.codeToHtml(code, {
120
+ lang: language,
121
+ themes: {
122
+ light: "github-light",
123
+ dark: "github-dark"
124
+ }
125
+ }));
126
+ }
127
+ highlight();
128
+ }, [code, language]);
129
+ return /* @__PURE__ */ jsx(Fragment, { children: render && /* @__PURE__ */ jsx("div", { dangerouslySetInnerHTML: { __html: render } }) });
99
130
  }
100
131
 
101
132
  //#endregion
@@ -187,8 +218,8 @@ function PackageManagers({ pkg, type = "add", dev = false, args, className }) {
187
218
  keepMounted: true,
188
219
  value: pm,
189
220
  children: /* @__PURE__ */ jsx(Code, {
190
- language: "bash",
191
- children: generateCommand(pm, type, pkg, dev, args)
221
+ code: generateCommand(pm, type, pkg, dev, args),
222
+ language: "bash"
192
223
  })
193
224
  }, pm);
194
225
  })]
@@ -415,7 +446,7 @@ function PrestigePage({ children, toc = [] }) {
415
446
  children: [/* @__PURE__ */ jsxs("div", {
416
447
  className: "flex-1 min-w-0",
417
448
  children: [/* @__PURE__ */ jsx(MobileTableOfContent, { toc }), /* @__PURE__ */ jsx("article", {
418
- className: "prose max-w-none wrap-break-word py-15 px-6",
449
+ className: "prose wrap-break-word py-15 px-6 max-w-none lg:w-web-content",
419
450
  children
420
451
  })]
421
452
  }), /* @__PURE__ */ jsx(WebTableOfContent, { toc })]
@@ -449,7 +480,7 @@ function ContentNavigations({ prev, next }) {
449
480
  return /* @__PURE__ */ jsxs("div", {
450
481
  className: "flex gap-6",
451
482
  children: [/* @__PURE__ */ jsxs("div", {
452
- className: "lg:flex flex-row items-center gap-2 mt-2 lg:mt-8 flex-1",
483
+ className: "lg:flex flex-row items-center gap-2 mt-2 lg:mt-8 lg:w-web-content w-full",
453
484
  children: [prev && /* @__PURE__ */ jsx(ContentNavigation, { navigation: prev }), next && /* @__PURE__ */ jsx(ContentNavigation, {
454
485
  navigation: next,
455
486
  isNext: true
@@ -613,15 +644,9 @@ function ContentRoute(inlineData) {
613
644
  return { meta: metas };
614
645
  },
615
646
  component: () => {
616
- return /* @__PURE__ */ jsxs("div", {
617
- className: "flex lg:gap-6 items-start max-w-[100vw]",
618
- children: [/* @__PURE__ */ jsxs("div", {
619
- className: "flex-1 min-w-0",
620
- children: [/* @__PURE__ */ jsx(MobileTableOfContent, { toc }), /* @__PURE__ */ jsx("article", {
621
- className: "prose max-w-none wrap-break-word py-15 px-6",
622
- children: /* @__PURE__ */ jsx(Component, {})
623
- })]
624
- }), /* @__PURE__ */ jsx(WebTableOfContent, { toc })]
647
+ return /* @__PURE__ */ jsx(PrestigePage, {
648
+ toc,
649
+ children: /* @__PURE__ */ jsx(Component, {})
625
650
  });
626
651
  }
627
652
  };
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","names":["typeMap: Record<AsideType, string>","defaultTitles: Record<AsideType, string>","TabsPrimitive","MANAGERS: PackageManager[]","parts: string[]","currentTheme: ThemeValue","metas: Array<\n { name: string; content: string } | { title: string }\n >"],"sources":["../src/ui/components/aside/aside.tsx","../src/ui/components/code/code.tsx","../src/ui/components/tabs/tabs.tsx","../src/ui/components/package-managers/package-managers.tsx","../src/ui/core/github/github.tsx","../src/ui/core/search/search.tsx","../src/ui/core/theme/theme.tsx","../src/ui/core/header/header.tsx","../src/ui/routes/content/table-of-contents/use-table-of-contents.ts","../src/ui/routes/content/table-of-contents/mobile-table-of-contents.tsx","../src/ui/routes/content/table-of-contents/web-table-of-contents.tsx","../src/ui/core/prestige-page.tsx","../src/ui/routes/content/content-navigations.tsx","../src/ui/utils.ts","../src/ui/routes/collection/sidebar.tsx","../src/ui/routes/collection/mobile-sidebar.tsx","../src/ui/routes/collection/collection.route.tsx","../src/ui/routes/content/content.route.tsx","../src/ui/routes/not-found.tsx","../src/ui/core/footer/footer.tsx","../src/ui/routes/prestige-shell.tsx"],"sourcesContent":["import React from \"react\";\n\nexport type AsideType = \"note\" | \"tip\" | \"caution\" | \"danger\";\n\nexport interface AsideProps extends Omit<React.HTMLAttributes<HTMLElement>, \"title\"> {\n type?: AsideType;\n title?: React.ReactNode;\n children: React.ReactNode;\n}\n\nconst typeMap: Record<AsideType, string> = {\n note: \"bg-blue-50/50 dark:bg-blue-900/20 border-blue-500 text-blue-900 dark:text-blue-200\",\n tip: \"bg-purple-50/50 dark:bg-purple-900/20 border-purple-500 text-purple-900 dark:text-purple-200\",\n caution:\n \"bg-yellow-50/50 dark:bg-yellow-900/20 border-yellow-500 text-yellow-900 dark:text-yellow-200\",\n danger:\n \"bg-red-50/50 dark:bg-red-900/20 border-red-500 text-red-900 dark:text-red-200\",\n};\n\nconst defaultTitles: Record<AsideType, string> = {\n note: \"Note\",\n tip: \"Tip\",\n caution: \"Caution\",\n danger: \"Danger\",\n};\n\nexport function Aside({\n type = \"note\",\n title,\n children,\n className,\n ...props\n}: AsideProps) {\n const iconProps = {\n className: \"w-5 h-5 flex-shrink-0\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n };\n\n const Icon = () => {\n switch (type) {\n case \"note\":\n return (\n <svg {...iconProps}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n );\n case \"tip\":\n return (\n <svg {...iconProps}>\n <path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z\" />\n <path d=\"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\" />\n <path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\" />\n <path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" />\n </svg>\n );\n case \"caution\":\n return (\n <svg {...iconProps}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n case \"danger\":\n return (\n <svg {...iconProps}>\n <polygon points=\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n </svg>\n );\n default:\n return null;\n }\n };\n\n return (\n <aside\n aria-label={defaultTitles[type]}\n className={`relative my-6 px-4 py-3 border-l-4 rounded-lg ${typeMap[type]} ${className || \"\"}`}\n {...props}\n >\n <p className=\"flex items-center gap-2 mb-2 mt-0 font-bold text-lg\">\n <span>\n <Icon />\n </span>\n {title || defaultTitles[type]}\n </p>\n <section className=\"[&>p]:mt-0 [&>p]:mb-2 [&>p:last-child]:mb-0 text-sm\">\n {children}\n </section>\n </aside>\n );\n}\n","import { ReactNode } from \"react\";\n\nexport interface CodeProps {\n code: string;\n language?: string;\n theme?: string;\n children?: ReactNode;\n}\n\nexport function Code({ code, children }: CodeProps) {\n return (\n <pre>\n <code>{code ?? children}</code>\n </pre>\n );\n}\n","import { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\";\n\nfunction Tabs({\n orientation = \"horizontal\",\n className,\n ...props\n}: TabsPrimitive.Root.Props) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={`w-full ${className || \"\"}`}\n {...props}\n />\n );\n}\n\nfunction TabsList({ className, ...props }: TabsPrimitive.List.Props) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={`flex w-full overflow-x-auto border-b border-default-200 no-scrollbar ${\n className || \"\"\n }`}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n className={`\n -mb-px flex items-center justify-center whitespace-nowrap border-b-2 border-transparent \n px-4 py-2.5 text-sm font-medium transition-colors cursor-pointer\n text-default-600 hover:text-default-900 hover:border-default-300\n aria-selected:border-primary-500 aria-selected:text-primary-500 \n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2\n disabled:pointer-events-none disabled:opacity-50\n ${className || \"\"}\n `}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={`mt-4 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 ${\n className || \"\"\n }`}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { Code } from \"../code/code\";\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from \"../tabs/tabs\"; // Adjust import path\n\ntype PackageManager = \"npm\" | \"pnpm\" | \"yarn\" | \"bun\";\ntype CommandType = \"add\" | \"create\" | \"exec\" | \"run\";\n\nexport interface PackageManagersProps {\n /** The name of the package (e.g., \"@lonik/themer\") */\n pkg?: string;\n /** The type of command to generate. Defaults to \"add\" */\n type?: CommandType;\n /** Whether this is a development dependency (-D) */\n dev?: boolean;\n /** Additional arguments to append to the command */\n args?: string;\n className?: string;\n}\n\nconst MANAGERS: PackageManager[] = [\"npm\", \"pnpm\", \"yarn\", \"bun\"];\n\nfunction generateCommand(\n pm: PackageManager,\n type: CommandType,\n pkg?: string,\n dev?: boolean,\n args?: string,\n) {\n const parts: string[] = [];\n\n switch (type) {\n case \"add\":\n parts.push(pm === \"npm\" ? \"npm install\" : `${pm} add`);\n if (dev) parts.push(\"-D\");\n if (pkg) parts.push(pkg);\n break;\n case \"create\":\n parts.push(`${pm} create`);\n if (pkg) parts.push(pkg);\n break;\n case \"exec\":\n if (pm === \"npm\") parts.push(\"npx\");\n else if (pm === \"bun\") parts.push(\"bun x\");\n else parts.push(`${pm} dlx`);\n if (pkg) parts.push(pkg);\n break;\n case \"run\":\n parts.push(pm === \"yarn\" ? \"yarn\" : `${pm} run`);\n if (pkg) parts.push(pkg);\n break;\n }\n\n if (args) {\n // If it's npm and we are passing args to an exec/run script, we often need '--'\n if (pm === \"npm\" && (type === \"exec\" || type === \"run\")) {\n parts.push(\"--\");\n }\n parts.push(args);\n }\n\n return parts.join(\" \");\n}\n\nexport function PackageManagers({\n pkg,\n type = \"add\",\n dev = false,\n args,\n className,\n}: PackageManagersProps) {\n return (\n <Tabs defaultValue=\"npm\" className={`my-6 ${className || \"\"}`}>\n <TabsList>\n {MANAGERS.map((pm) => (\n <TabsTrigger key={pm} value={pm}>\n {pm.toLowerCase()}\n </TabsTrigger>\n ))}\n </TabsList>\n\n {MANAGERS.map((pm) => {\n const command = generateCommand(pm, type, pkg, dev, args);\n\n return (\n <TabsContent keepMounted={true} key={pm} value={pm}>\n <Code language=\"bash\">{command}</Code>\n </TabsContent>\n );\n })}\n </Tabs>\n );\n}\n","import { Github } from \"lucide-react\";\n\nexport function GitHub({ github }: { github: string | undefined }) {\n if (!github) {\n return null;\n }\n\n return (\n <a\n href={github}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label=\"GitHub repository\"\n title=\"GitHub repository\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded border border-default-200 bg-default-50 text-default-500 hover:bg-default-100\"\n >\n <Github size={16} />\n </a>\n );\n}\n","import \"@docsearch/css\";\nimport { DocSearch } from \"@docsearch/react\";\nimport config from \"virtual:prestige/config\";\n\nexport function Search({\n algolia,\n}: {\n // 2. Add 'typeof' to extract the type from the value\n algolia: (typeof config)[\"algolia\"] | undefined;\n}) {\n if (!algolia) {\n return null;\n }\n\n return (\n <div className=\"prestige-search\">\n <DocSearch\n appId={algolia.appId}\n apiKey={algolia.apiKey}\n indices={algolia.indices}\n />\n </div>\n );\n}\n","import { useTheme } from \"@lonik/themer\";\nimport { useHydrated } from \"@tanstack/react-router\";\nimport { Moon, Sun, SunMoon } from \"lucide-react\";\n\nconst themeOrder = [\"system\", \"light\", \"dark\"] as const;\ntype ThemeValue = (typeof themeOrder)[number];\n\nexport function Theme() {\n const { theme, setTheme } = useTheme();\n const currentTheme: ThemeValue = (theme as ThemeValue) ?? \"system\";\n const hydrated = useHydrated();\n\n const nextTheme = (value: ThemeValue): ThemeValue => {\n const index = themeOrder.indexOf(value);\n return themeOrder[(index + 1) % themeOrder.length]!;\n };\n\n const icon =\n currentTheme === \"light\" ? (\n <Sun size={16} />\n ) : currentTheme === \"dark\" ? (\n <Moon size={16} />\n ) : (\n <SunMoon size={16} />\n );\n\n return (\n <button\n suppressHydrationWarning\n type=\"button\"\n aria-label={`Theme: ${currentTheme}. Click to switch theme`}\n title={`Theme: ${currentTheme}`}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md border border-default-200 bg-default-50 text-default-500 hover:bg-default-100 cursor-pointer\"\n onClick={() => setTheme(nextTheme(currentTheme))}\n >\n {hydrated && icon}\n </button>\n );\n}\n","import { Link, useLocation } from \"@tanstack/react-router\";\nimport collections from \"virtual:prestige/collection-all\";\nimport config from \"virtual:prestige/config\";\nimport { PrestigeShellProps } from \"../../routes/prestige-shell\";\nimport { GitHub } from \"../github/github\";\nimport { Search } from \"../search/search\";\nimport { Theme } from \"../theme/theme\";\n\nexport type HeaderProps = Pick<PrestigeShellProps, \"customHeaderTitle\">;\n\nexport default function Header({ customHeaderTitle }: HeaderProps) {\n const location = useLocation();\n\n return (\n <header className=\"sticky top-0 z-40 flex h-header border-b border-default-200 bg-default-50/80 px-4 backdrop-blur-md\">\n <div className=\"container mx-auto flex max-w-360 items-center justify-between\">\n <div className=\"flex gap-4 items-baseline\">\n <Link\n className=\"text-sm rounded hover:bg-default-100 text-default-500\"\n to={\"/\"}\n >\n {customHeaderTitle ? (\n customHeaderTitle()\n ) : (\n <span>{config.title}</span>\n )}\n </Link>\n {collections.map((collection) => {\n const isActive =\n location.pathname === `/${collection.id}` ||\n location.pathname.startsWith(`/${collection.id}/`);\n\n return (\n <Link\n key={collection.id}\n to={`/${collection.defaultLink}` as any}\n className={`border-b-2 text-sm rounded hover:bg-default-100 active:bg-default-200 capitalize ${\n isActive\n ? \"border-default-800 text-default-800 font-medium\"\n : \"border-b-transparent text-default-500\"\n }`}\n >\n {collection.label}\n </Link>\n );\n })}\n </div>\n <div className=\"flex items-center gap-2\">\n <Search algolia={config.algolia} />\n <GitHub github={config.github} />\n <Theme />\n </div>\n </div>\n </header>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { TocItem } from \"remark-flexible-toc\";\n\nexport function useTableOfContents(toc: TocItem[]) {\n const [activeId, setActiveId] = useState<string>(\"\");\n\n useEffect(() => {\n if (toc.length === 0) return;\n\n const handleScroll = () => {\n const headingElements = toc\n .map((item) => {\n const id = item.href.startsWith(\"#\") ? item.href.slice(1) : item.href;\n return document.getElementById(id);\n })\n .filter((el): el is HTMLElement => el !== null);\n\n // Add a slight offset to account for sticky headers or top padding\n const scrollPosition = window.scrollY + 100;\n\n let currentActiveId = \"\";\n for (let i = headingElements.length - 1; i >= 0; i--) {\n const element = headingElements[i];\n if (element && element.offsetTop <= scrollPosition) {\n currentActiveId = element.id;\n break;\n }\n }\n\n // If we haven't scrolled past the first heading, highlight the first one\n if (!currentActiveId && headingElements.length > 0 && headingElements[0]) {\n currentActiveId = headingElements[0].id;\n }\n\n setActiveId(currentActiveId ? `#${currentActiveId}` : \"\");\n };\n\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n // setTimeout to ensure DOM is fully rendered when checking initial offsets\n setTimeout(handleScroll, 100);\n\n return () => window.removeEventListener(\"scroll\", handleScroll);\n }, [toc]);\n\n const handleLinkClick = (e: React.MouseEvent<HTMLAnchorElement>, href: string) => {\n e.preventDefault();\n const id = href.startsWith(\"#\") ? href.slice(1) : href;\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({ behavior: \"smooth\" });\n // Update URL hash without jumping\n window.history.pushState(null, \"\", href.startsWith(\"#\") ? href : `#${href}`);\n }\n };\n\n return { activeId, handleLinkClick };\n}\n","import clsx from \"clsx\";\nimport { ChevronRight } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { TocItem } from \"remark-flexible-toc\";\nimport { useTableOfContents } from \"./use-table-of-contents\";\n\nexport function MobileTableOfContent({ toc }: { toc: TocItem[] }) {\n const [isOpen, setIsOpen] = useState(false);\n const { activeId, handleLinkClick } = useTableOfContents(toc);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n if (toc.length === 0) {\n return null;\n }\n\n const activeItem = toc.find((item) => {\n const itemHref = item.href.startsWith(\"#\") ? item.href : `#${item.href}`;\n return itemHref === activeId;\n });\n\n /* pl-12 is needed for mobile sidebar, because sidebar button is fixed position */\n return (\n <div\n ref={containerRef}\n className=\"sticky top-header z-30 -mx-6 -mt-10 mb-8 bg-default-50/95 backdrop-blur border-b border-default-200 dark:border-default-800 lg:hidden px-6 pl-12\"\n >\n <div className=\"relative\">\n <button\n onClick={() => setIsOpen((prev) => !prev)}\n className=\"flex w-full items-center justify-between gap-4 px-6 py-3 text-sm text-default-500 font-medium cursor-pointer\"\n >\n <div className=\"flex items-center gap-2\">\n <span>On this page</span>\n <ChevronRight\n className={clsx(\n \"w-4 h-4 transition-transform duration-200\",\n isOpen && \"rotate-90\",\n )}\n />\n </div>\n {activeItem && (\n <span className=\"truncate font-normal max-w-[50%] text-right\">\n {activeItem.value}\n </span>\n )}\n </button>\n\n {isOpen && (\n <div className=\"absolute left-6 right-6 top-full mt-2 max-h-[60vh] overflow-y-auto rounded-lg border border-default-200 bg-background shadow-xl\">\n <ul className=\"p-4 space-y-2.5 text-sm\">\n {toc.map((item) => {\n const itemHref = item.href.startsWith(\"#\")\n ? item.href\n : `#${item.href}`;\n const isActive = activeId === itemHref;\n return (\n <li\n key={itemHref}\n style={{ paddingLeft: `${(item.depth - 1) * 0.75}rem` }}\n >\n <a\n href={itemHref}\n className={clsx(\n \"block transition-colors duration-200 line-clamp-2\",\n isActive\n ? \"text-primary-600 font-medium\"\n : \"text-default-600\",\n )}\n onClick={(e) => {\n handleLinkClick(e, item.href);\n setIsOpen(false);\n }}\n >\n {item.value}\n </a>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { TocItem } from \"remark-flexible-toc\";\nimport { useTableOfContents } from \"./use-table-of-contents\";\n\nexport function WebTableOfContent({ toc }: { toc: TocItem[] }) {\n const { activeId, handleLinkClick } = useTableOfContents(toc);\n\n return (\n <nav className=\"sticky top-header pt-4 overflow-y-auto w-web-table-of-content hidden lg:block\">\n <span className=\"text-xs font-mono tracking-widest\">ON THIS PAGE</span>\n <ul className=\"text-sm my-4\">\n {toc.map((item) => (\n <li\n key={item.href}\n // style={{ paddingLeft: `${(item.depth - 1) * 0.75}rem` }}\n >\n <a\n href={`${item.href}`}\n className={clsx(\n \"border-l py-1 px-4 block hover:text-default-700 dark:hover:text-slate-100 transition-colors duration-200 line-clamp-2\",\n activeId === item.href\n ? \"text-default-700 border-default-600 font-medium\"\n : \"text-default-500 border-default-200 \",\n )}\n onClick={(e) => handleLinkClick(e, item.href)}\n >\n {item.value}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n );\n}\n","import React from \"react\";\nimport { TocItem } from \"remark-flexible-toc\";\nimport { MobileTableOfContent } from \"../routes/content/table-of-contents/mobile-table-of-contents\";\nimport { WebTableOfContent } from \"../routes/content/table-of-contents/web-table-of-contents\";\n\nexport interface PrestigePageProps {\n children: React.ReactNode;\n toc?: TocItem[];\n}\n\nexport function PrestigePage({\n children,\n toc = [],\n}: PrestigePageProps) {\n return (\n <div className=\"flex lg:gap-6 items-start max-w-[100vw]\">\n <div className=\"flex-1 min-w-0\">\n <MobileTableOfContent toc={toc} />\n <article className=\"prose max-w-none wrap-break-word py-15 px-6\">\n {children}\n </article>\n </div>\n <WebTableOfContent toc={toc} />\n </div>\n );\n}\n\n","import { Link } from \"@tanstack/react-router\";\nimport clsx from \"clsx\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nimport { SiblingNavigationType } from \"../../../vite/core/content/content.types\";\n\nfunction ContentNavigation({\n isNext,\n navigation,\n}: {\n isNext?: boolean;\n navigation: SiblingNavigationType;\n}) {\n const label = isNext ? \"Next\" : \"Previous\";\n return (\n <Link\n to={navigation.link}\n className={clsx(\n \" flex-1 h-20 mb-4 border border-default-200 hover:bg-default-50 rounded-md cursor-pointer flex items-center px-4\",\n isNext ? \"justify-end\" : \"justify-start\",\n )}\n >\n <div\n className={clsx(\n \"flex items-center gap-4\",\n isNext && \"flex-row-reverse\",\n )}\n >\n {isNext ? (\n <ArrowRight className=\"text-default-400\" />\n ) : (\n <ArrowLeft className=\"text-default-400\" />\n )}\n <div className={clsx(\"flex flex-col\", isNext && \"items-end\")}>\n <span className=\"text-xs tracking-widest font-mono\">\n {label.toLocaleUpperCase()}\n </span>\n <span className=\"text-2xl font-li text-default-700\">\n {navigation.label}\n </span>\n </div>\n </div>\n </Link>\n );\n}\n\nexport default function ContentNavigations({\n prev,\n next,\n}: {\n prev: SiblingNavigationType | null | undefined;\n next: SiblingNavigationType | null | undefined;\n}) {\n if (!prev && !next) return null;\n // width of content navigation must match with content route content width, so we manually\n // add empty div with table-of-content width and add proper gap to match the size\n return (\n <div className=\"flex gap-6\">\n <div className=\"lg:flex flex-row items-center gap-2 mt-2 lg:mt-8 flex-1\">\n {prev && <ContentNavigation navigation={prev} />}\n {next && <ContentNavigation navigation={next} isNext />}\n </div>\n <div className=\"lg:w-web-table-of-content h-1\"></div>\n </div>\n );\n}\n","export function isExternalURL(str: string) {\n try {\n const url = new URL(str);\n // This ensures it starts with http or https, filtering out\n // things like 'javascript:alert(1)' or 'mailto:test@test.com'\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n","import { Link } from \"@tanstack/react-router\";\nimport clsx from \"clsx\";\nimport { BookOpen, ChevronRight, ExternalLink } from \"lucide-react\";\nimport { useState } from \"react\";\nimport {\n ExternalSidebarLinkType,\n InternalSidebarLinkType,\n SidebarGroupType,\n SidebarType,\n} from \"../../../vite/core/content/content.types\";\nimport { isExternalURL } from \"../../utils\";\n\nexport interface SidebarProps {\n sidebar: SidebarType;\n onLinkClick?: (() => void) | undefined;\n}\n\nfunction SidebarGroup({\n group,\n onLinkClick,\n}: {\n group: SidebarGroupType;\n onLinkClick?: (() => void) | undefined;\n}) {\n const [open, setIsOpen] = useState(true);\n return (\n <div className=\"mt-4 flex flex-col gap-1\">\n <button\n className=\"flex items-center w-full gap-2\"\n onClick={() => setIsOpen((prev) => !prev)}\n >\n <ChevronRight\n size={18}\n className={clsx(\n \"transform transition cursor-pointer ml-1\",\n open && \"rotate-90\",\n )}\n />\n <span className=\"font-mono text-xs tracking-widest\">\n {group.label.toUpperCase()}\n </span>\n </button>\n {open && (\n <div className=\"mb-2\">\n {group.items.map((item) => {\n if (\"slug\" in item || \"link\" in item) {\n const key = \"slug\" in item ? item.slug : item.link;\n return (\n <SidebarLink showIcon={false} key={key} link={item} onLinkClick={onLinkClick} />\n );\n }\n return <SidebarGroup key={item.label} group={item} />;\n })}\n </div>\n )}\n </div>\n );\n}\n\nfunction SidebarLink({\n link,\n onLinkClick,\n showIcon,\n}: {\n link: InternalSidebarLinkType | ExternalSidebarLinkType;\n onLinkClick?: (() => void) | undefined;\n showIcon: boolean;\n}) {\n if (\"slug\" in link || !isExternalURL(link.link)) {\n const slug = \"slug\" in link ? `/${link.slug}` : link.link;\n return (\n <div className=\"flex items-center \">\n <Link\n onClick={onLinkClick}\n activeProps={{ className: \"text-default-700 font-medium\" }}\n className=\"w-full inline-flex gap-2 py-1 px-2 rounded hover:bg-default-100 text-sm mr-2 items-center text-default-500\"\n to={slug}\n >\n {showIcon && <BookOpen className=\"w-4\" />}\n {link.label}\n </Link>\n </div>\n );\n } else {\n return (\n <div className=\"flex items-center \">\n <a\n onClick={onLinkClick}\n className=\"w-full inline-flex gap-2 py-1 px-2 rounded hover:bg-default-100 text-sm mr-2 items-center text-default-500\"\n href={link.link}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {showIcon && <ExternalLink className=\"w-4\" />}\n {link.label}\n </a>\n </div>\n );\n }\n}\n\nexport default function Sidebar({ sidebar, onLinkClick }: SidebarProps) {\n return (\n <div className=\"w-full lg:w-sidebar border-r border-default-200 h-full overflow-auto lg:h-main lg:sticky top-header pt-4\">\n {sidebar.items.map((item) => {\n if (\"slug\" in item || \"link\" in item) {\n const key = \"slug\" in item ? item.slug : item.link;\n return (\n <SidebarLink showIcon={true} onLinkClick={onLinkClick} key={key} link={item} />\n );\n }\n return <SidebarGroup key={item.label} group={item} />;\n })}\n </div>\n );\n}\n","import { Menu, X } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { SidebarType } from \"../../../vite/core/content/content.types\";\nimport Sidebar from \"./sidebar\";\n\nfunction SidebarOverlay({ sidebar }: { sidebar: SidebarType }) {\n const [isOpen, setIsOpen] = useState(false);\n return (\n <div className=\"lg:hidden\">\n {/* Mobile sidebar button is placed on the start of mobile of content tab, we have to position is via fixed because table of content lives inside content.route */}\n <button\n className=\"bg-transparent p-3 -mt-[2px] text-default-700 top-header left-0 fixed z-50\"\n onClick={() => setIsOpen((prev) => !prev)}\n >\n {isOpen ? <X /> : <Menu />}\n </button>\n {isOpen && (\n <div className=\"fixed top-[calc(var(--spacing-header)+44 )] shadow-xl left-0 overflow-auto z-10 bg-default-50 w-full h-screen\">\n <Sidebar onLinkClick={() => setIsOpen(false)} sidebar={sidebar} />\n </div>\n )}\n </div>\n );\n}\n\nexport default function MobileSidebar({ sidebar }: { sidebar: SidebarType }) {\n return <SidebarOverlay sidebar={sidebar} />;\n}\n","import { Outlet, useLocation } from \"@tanstack/react-router\";\nimport { SidebarType } from \"../../../vite/core/content/content.types\";\nimport ContentNavigations from \"../content/content-navigations\";\nimport MobileSidebar from \"./mobile-sidebar\";\nimport Sidebar from \"./sidebar\";\n\nexport function CollectionRoute(sidebar: SidebarType, id: string) {\n return {\n component: () => {\n const location = useLocation();\n const navigation = sidebar?.navigation?.[location.pathname] || {\n prev: null,\n next: null,\n };\n const { prev, next } = navigation;\n\n return (\n <div className=\"mx-auto flex container lg:gap-6\">\n <MobileSidebar sidebar={sidebar} />\n <div className=\"hidden lg:block\">\n {sidebar && <Sidebar sidebar={sidebar} />}\n </div>\n <div className=\"flex-1 pb-20\">\n <Outlet />\n <div className=\"mt-8 px-6 lg:px-0\">\n <ContentNavigations prev={prev} next={next} />\n </div>\n </div>\n </div>\n );\n },\n };\n}\n","import { FunctionComponent } from \"react\";\nimport { TocItem } from \"remark-flexible-toc\";\nimport config from \"virtual:prestige/config\";\nimport {\n ContentFrontmatterType,\n SiblingNavigationType,\n} from \"../../../vite/core/content/content.types\";\nimport { MobileTableOfContent } from \"./table-of-contents/mobile-table-of-contents\";\nimport { WebTableOfContent } from \"./table-of-contents/web-table-of-contents\";\nexport function ContentRoute(inlineData: any): any {\n const {\n frontmatter,\n toc,\n default: Component,\n } = inlineData as {\n prev: SiblingNavigationType | null;\n next: SiblingNavigationType | null;\n toc: TocItem[];\n default: FunctionComponent;\n frontmatter: ContentFrontmatterType;\n };\n return {\n head: () => {\n const metas: Array<\n { name: string; content: string } | { title: string }\n > = [];\n const description = frontmatter.description;\n const title = frontmatter.title;\n\n if (title) {\n metas.push({\n title: title + \" | \" + config.title,\n });\n }\n\n if (description) {\n metas.push({\n name: \"description\",\n content: description,\n });\n }\n\n return {\n meta: metas,\n };\n },\n component: () => {\n return (\n <div className=\"flex lg:gap-6 items-start max-w-[100vw]\">\n <div className=\"flex-1 min-w-0\">\n <MobileTableOfContent toc={toc} />\n <article className=\"prose max-w-none wrap-break-word py-15 px-6\">\n <Component />\n </article>\n </div>\n <WebTableOfContent toc={toc} />\n </div>\n );\n },\n };\n}\n","export default function NotFound() {\n return <h1>This page could not be found.</h1>;\n}\n","import config from \"virtual:prestige/config\";\nimport { PrestigeShellProps } from \"../../routes/prestige-shell\";\n\nfunction License() {\n if (!config.license) {\n return null;\n }\n return (\n <a target=\"_blank\" href={config.license.url}>\n Released under: {config.license.label}\n </a>\n );\n}\n\nfunction Copyright({ copyright }: Pick<PrestigeShellProps, \"copyright\">) {\n if (!copyright) {\n return null;\n }\n return copyright();\n}\n\nexport default function Footer({\n copyright,\n}: Pick<PrestigeShellProps, \"copyright\">) {\n return (\n <footer className=\"mt-10 flex items-center justify-center flex-col gap-2 px-4 border-t border-t-default-100 pt-10 bg-default-50 text-sm py-10 text-default-700\">\n <License />\n <Copyright copyright={copyright} />\n </footer>\n );\n}\n","import { ThemeProvider } from \"@lonik/themer\";\nimport { ReactNode } from \"react\";\nimport Footer from \"../core/footer/footer\";\nimport Header from \"../core/header/header\";\n\ntype RenderNode = () => ReactNode;\n\nexport interface PrestigeShellProps {\n customHeaderTitle?: RenderNode | undefined;\n copyright?: RenderNode | undefined;\n}\nexport function PrestigeShell({\n children,\n options,\n}: {\n children: ReactNode;\n options?: PrestigeShellProps;\n}) {\n return (\n <ThemeProvider attribute=\"data-theme\" defaultTheme=\"system\">\n <Header customHeaderTitle={options?.customHeaderTitle} {...options} />\n <main className=\"min-h-[calc(100vh-var(--spacing-header))]\">\n {children}\n </main>\n <Footer copyright={options?.copyright} />\n </ThemeProvider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ui.js","names":["typeMap: Record<AsideType, string>","defaultTitles: Record<AsideType, string>","TabsPrimitive","MANAGERS: PackageManager[]","parts: string[]","currentTheme: ThemeValue","metas: Array<\n { name: string; content: string } | { title: string }\n >"],"sources":["../src/ui/components/aside/aside.tsx","../src/ui/components/code/code.tsx","../src/ui/components/tabs/tabs.tsx","../src/ui/components/package-managers/package-managers.tsx","../src/ui/core/github/github.tsx","../src/ui/core/search/search.tsx","../src/ui/core/theme/theme.tsx","../src/ui/core/header/header.tsx","../src/ui/routes/content/table-of-contents/use-table-of-contents.ts","../src/ui/routes/content/table-of-contents/mobile-table-of-contents.tsx","../src/ui/routes/content/table-of-contents/web-table-of-contents.tsx","../src/ui/core/prestige-page.tsx","../src/ui/routes/content/content-navigations.tsx","../src/ui/utils.ts","../src/ui/routes/collection/sidebar.tsx","../src/ui/routes/collection/mobile-sidebar.tsx","../src/ui/routes/collection/collection.route.tsx","../src/ui/routes/content/content.route.tsx","../src/ui/routes/not-found.tsx","../src/ui/core/footer/footer.tsx","../src/ui/routes/prestige-shell.tsx"],"sourcesContent":["import React from \"react\";\n\nexport type AsideType = \"note\" | \"tip\" | \"caution\" | \"danger\";\n\nexport interface AsideProps extends Omit<React.HTMLAttributes<HTMLElement>, \"title\"> {\n type?: AsideType;\n title?: React.ReactNode;\n children: React.ReactNode;\n}\n\nconst typeMap: Record<AsideType, string> = {\n note: \"bg-blue-50/50 dark:bg-blue-900/20 border-blue-500 text-blue-900 dark:text-blue-200\",\n tip: \"bg-purple-50/50 dark:bg-purple-900/20 border-purple-500 text-purple-900 dark:text-purple-200\",\n caution:\n \"bg-yellow-50/50 dark:bg-yellow-900/20 border-yellow-500 text-yellow-900 dark:text-yellow-200\",\n danger:\n \"bg-red-50/50 dark:bg-red-900/20 border-red-500 text-red-900 dark:text-red-200\",\n};\n\nconst defaultTitles: Record<AsideType, string> = {\n note: \"Note\",\n tip: \"Tip\",\n caution: \"Caution\",\n danger: \"Danger\",\n};\n\nexport function Aside({\n type = \"note\",\n title,\n children,\n className,\n ...props\n}: AsideProps) {\n const iconProps = {\n className: \"w-5 h-5 flex-shrink-0\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n };\n\n const Icon = () => {\n switch (type) {\n case \"note\":\n return (\n <svg {...iconProps}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n );\n case \"tip\":\n return (\n <svg {...iconProps}>\n <path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z\" />\n <path d=\"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\" />\n <path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\" />\n <path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" />\n </svg>\n );\n case \"caution\":\n return (\n <svg {...iconProps}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n case \"danger\":\n return (\n <svg {...iconProps}>\n <polygon points=\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n </svg>\n );\n default:\n return null;\n }\n };\n\n return (\n <aside\n aria-label={defaultTitles[type]}\n className={`relative my-6 px-4 py-3 border-l-4 rounded-lg ${typeMap[type]} ${className || \"\"}`}\n {...props}\n >\n <p className=\"flex items-center gap-2 mb-2 mt-0 font-bold text-lg\">\n <span>\n <Icon />\n </span>\n {title || defaultTitles[type]}\n </p>\n <section className=\"[&>p]:mt-0 [&>p]:mb-2 [&>p:last-child]:mb-0 text-sm\">\n {children}\n </section>\n </aside>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { BundledLanguage, createHighlighter } from \"shiki\";\nimport { createJavaScriptRegexEngine } from \"shiki/engine/javascript\";\n\nconst jsEngine = createJavaScriptRegexEngine();\n\nconst shiki = await createHighlighter({\n themes: [\"github-dark\", \"github-light\"],\n langs: [\n \"tsx\",\n \"javascript\",\n \"typescript\",\n \"css\",\n \"html\",\n \"jsx\",\n \"json\",\n \"bash\",\n ],\n engine: jsEngine,\n});\n\nexport interface CodeProps {\n code: string;\n language?: BundledLanguage;\n}\nexport function Code({ code, language = \"html\" }: CodeProps) {\n const [render, setRender] = useState(\"\");\n useEffect(() => {\n if (!code) {\n return;\n }\n\n async function highlight() {\n await shiki.loadLanguage(language);\n\n const html = shiki.codeToHtml(code, {\n lang: language,\n themes: {\n light: \"github-light\",\n dark: \"github-dark\",\n },\n });\n setRender(html);\n }\n\n highlight();\n }, [code, language]);\n\n return <>{render && <div dangerouslySetInnerHTML={{ __html: render }} />}</>;\n}\n","import { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\";\n\nfunction Tabs({\n orientation = \"horizontal\",\n className,\n ...props\n}: TabsPrimitive.Root.Props) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={`w-full ${className || \"\"}`}\n {...props}\n />\n );\n}\n\nfunction TabsList({ className, ...props }: TabsPrimitive.List.Props) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={`flex w-full overflow-x-auto border-b border-default-200 no-scrollbar ${\n className || \"\"\n }`}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n className={`\n -mb-px flex items-center justify-center whitespace-nowrap border-b-2 border-transparent \n px-4 py-2.5 text-sm font-medium transition-colors cursor-pointer\n text-default-600 hover:text-default-900 hover:border-default-300\n aria-selected:border-primary-500 aria-selected:text-primary-500 \n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2\n disabled:pointer-events-none disabled:opacity-50\n ${className || \"\"}\n `}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={`mt-4 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 ${\n className || \"\"\n }`}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { Code } from \"../code/code\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../tabs/tabs\"; // Adjust import path\n\ntype PackageManager = \"npm\" | \"pnpm\" | \"yarn\" | \"bun\";\ntype CommandType = \"add\" | \"create\" | \"exec\" | \"run\";\n\nexport interface PackageManagersProps {\n /** The name of the package (e.g., \"@lonik/themer\") */\n pkg?: string;\n /** The type of command to generate. Defaults to \"add\" */\n type?: CommandType;\n /** Whether this is a development dependency (-D) */\n dev?: boolean;\n /** Additional arguments to append to the command */\n args?: string;\n className?: string;\n}\n\nconst MANAGERS: PackageManager[] = [\"npm\", \"pnpm\", \"yarn\", \"bun\"];\n\nfunction generateCommand(\n pm: PackageManager,\n type: CommandType,\n pkg?: string,\n dev?: boolean,\n args?: string,\n) {\n const parts: string[] = [];\n\n switch (type) {\n case \"add\":\n parts.push(pm === \"npm\" ? \"npm install\" : `${pm} add`);\n if (dev) parts.push(\"-D\");\n if (pkg) parts.push(pkg);\n break;\n case \"create\":\n parts.push(`${pm} create`);\n if (pkg) parts.push(pkg);\n break;\n case \"exec\":\n if (pm === \"npm\") parts.push(\"npx\");\n else if (pm === \"bun\") parts.push(\"bun x\");\n else parts.push(`${pm} dlx`);\n if (pkg) parts.push(pkg);\n break;\n case \"run\":\n parts.push(pm === \"yarn\" ? \"yarn\" : `${pm} run`);\n if (pkg) parts.push(pkg);\n break;\n }\n\n if (args) {\n // If it's npm and we are passing args to an exec/run script, we often need '--'\n if (pm === \"npm\" && (type === \"exec\" || type === \"run\")) {\n parts.push(\"--\");\n }\n parts.push(args);\n }\n\n return parts.join(\" \");\n}\n\nexport function PackageManagers({\n pkg,\n type = \"add\",\n dev = false,\n args,\n className,\n}: PackageManagersProps) {\n return (\n <Tabs defaultValue=\"npm\" className={`my-6 ${className || \"\"}`}>\n <TabsList>\n {MANAGERS.map((pm) => (\n <TabsTrigger key={pm} value={pm}>\n {pm.toLowerCase()}\n </TabsTrigger>\n ))}\n </TabsList>\n\n {MANAGERS.map((pm) => {\n const command = generateCommand(pm, type, pkg, dev, args);\n\n return (\n <TabsContent keepMounted={true} key={pm} value={pm}>\n <Code code={command} language=\"bash\"></Code>\n </TabsContent>\n );\n })}\n </Tabs>\n );\n}\n","import { Github } from \"lucide-react\";\n\nexport function GitHub({ github }: { github: string | undefined }) {\n if (!github) {\n return null;\n }\n\n return (\n <a\n href={github}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label=\"GitHub repository\"\n title=\"GitHub repository\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded border border-default-200 bg-default-50 text-default-500 hover:bg-default-100\"\n >\n <Github size={16} />\n </a>\n );\n}\n","import \"@docsearch/css\";\nimport { DocSearch } from \"@docsearch/react\";\nimport config from \"virtual:prestige/config\";\n\nexport function Search({\n algolia,\n}: {\n // 2. Add 'typeof' to extract the type from the value\n algolia: (typeof config)[\"algolia\"] | undefined;\n}) {\n if (!algolia) {\n return null;\n }\n\n return (\n <div className=\"prestige-search\">\n <DocSearch\n appId={algolia.appId}\n apiKey={algolia.apiKey}\n indices={algolia.indices}\n />\n </div>\n );\n}\n","import { useTheme } from \"@lonik/themer\";\nimport { useHydrated } from \"@tanstack/react-router\";\nimport { Moon, Sun, SunMoon } from \"lucide-react\";\n\nconst themeOrder = [\"system\", \"light\", \"dark\"] as const;\ntype ThemeValue = (typeof themeOrder)[number];\n\nexport function Theme() {\n const { theme, setTheme } = useTheme();\n const currentTheme: ThemeValue = (theme as ThemeValue) ?? \"system\";\n const hydrated = useHydrated();\n\n const nextTheme = (value: ThemeValue): ThemeValue => {\n const index = themeOrder.indexOf(value);\n return themeOrder[(index + 1) % themeOrder.length]!;\n };\n\n const icon =\n currentTheme === \"light\" ? (\n <Sun size={16} />\n ) : currentTheme === \"dark\" ? (\n <Moon size={16} />\n ) : (\n <SunMoon size={16} />\n );\n\n return (\n <button\n suppressHydrationWarning\n type=\"button\"\n aria-label={`Theme: ${currentTheme}. Click to switch theme`}\n title={`Theme: ${currentTheme}`}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md border border-default-200 bg-default-50 text-default-500 hover:bg-default-100 cursor-pointer\"\n onClick={() => setTheme(nextTheme(currentTheme))}\n >\n {hydrated && icon}\n </button>\n );\n}\n","import { Link, useLocation } from \"@tanstack/react-router\";\nimport collections from \"virtual:prestige/collection-all\";\nimport config from \"virtual:prestige/config\";\nimport { PrestigeShellProps } from \"../../routes/prestige-shell\";\nimport { GitHub } from \"../github/github\";\nimport { Search } from \"../search/search\";\nimport { Theme } from \"../theme/theme\";\n\nexport type HeaderProps = Pick<PrestigeShellProps, \"customHeaderTitle\">;\n\nexport default function Header({ customHeaderTitle }: HeaderProps) {\n const location = useLocation();\n\n return (\n <header className=\"sticky top-0 z-40 flex h-header border-b border-default-200 bg-default-50/80 px-4 backdrop-blur-md\">\n <div className=\"container mx-auto flex max-w-360 items-center justify-between\">\n <div className=\"flex gap-4 items-baseline\">\n <Link\n className=\"text-sm rounded hover:bg-default-100 text-default-500\"\n to={\"/\"}\n >\n {customHeaderTitle ? (\n customHeaderTitle()\n ) : (\n <span>{config.title}</span>\n )}\n </Link>\n {collections.map((collection) => {\n const isActive =\n location.pathname === `/${collection.id}` ||\n location.pathname.startsWith(`/${collection.id}/`);\n\n return (\n <Link\n key={collection.id}\n to={`/${collection.defaultLink}` as any}\n className={`border-b-2 text-sm rounded hover:bg-default-100 active:bg-default-200 capitalize ${\n isActive\n ? \"border-default-800 text-default-800 font-medium\"\n : \"border-b-transparent text-default-500\"\n }`}\n >\n {collection.label}\n </Link>\n );\n })}\n </div>\n <div className=\"flex items-center gap-2\">\n <Search algolia={config.algolia} />\n <GitHub github={config.github} />\n <Theme />\n </div>\n </div>\n </header>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { TocItem } from \"remark-flexible-toc\";\n\nexport function useTableOfContents(toc: TocItem[]) {\n const [activeId, setActiveId] = useState<string>(\"\");\n\n useEffect(() => {\n if (toc.length === 0) return;\n\n const handleScroll = () => {\n const headingElements = toc\n .map((item) => {\n const id = item.href.startsWith(\"#\") ? item.href.slice(1) : item.href;\n return document.getElementById(id);\n })\n .filter((el): el is HTMLElement => el !== null);\n\n // Add a slight offset to account for sticky headers or top padding\n const scrollPosition = window.scrollY + 100;\n\n let currentActiveId = \"\";\n for (let i = headingElements.length - 1; i >= 0; i--) {\n const element = headingElements[i];\n if (element && element.offsetTop <= scrollPosition) {\n currentActiveId = element.id;\n break;\n }\n }\n\n // If we haven't scrolled past the first heading, highlight the first one\n if (!currentActiveId && headingElements.length > 0 && headingElements[0]) {\n currentActiveId = headingElements[0].id;\n }\n\n setActiveId(currentActiveId ? `#${currentActiveId}` : \"\");\n };\n\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n // setTimeout to ensure DOM is fully rendered when checking initial offsets\n setTimeout(handleScroll, 100);\n\n return () => window.removeEventListener(\"scroll\", handleScroll);\n }, [toc]);\n\n const handleLinkClick = (e: React.MouseEvent<HTMLAnchorElement>, href: string) => {\n e.preventDefault();\n const id = href.startsWith(\"#\") ? href.slice(1) : href;\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({ behavior: \"smooth\" });\n // Update URL hash without jumping\n window.history.pushState(null, \"\", href.startsWith(\"#\") ? href : `#${href}`);\n }\n };\n\n return { activeId, handleLinkClick };\n}\n","import clsx from \"clsx\";\nimport { ChevronRight } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { TocItem } from \"remark-flexible-toc\";\nimport { useTableOfContents } from \"./use-table-of-contents\";\n\nexport function MobileTableOfContent({ toc }: { toc: TocItem[] }) {\n const [isOpen, setIsOpen] = useState(false);\n const { activeId, handleLinkClick } = useTableOfContents(toc);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n if (toc.length === 0) {\n return null;\n }\n\n const activeItem = toc.find((item) => {\n const itemHref = item.href.startsWith(\"#\") ? item.href : `#${item.href}`;\n return itemHref === activeId;\n });\n\n /* pl-12 is needed for mobile sidebar, because sidebar button is fixed position */\n return (\n <div\n ref={containerRef}\n className=\"sticky top-header z-30 -mx-6 -mt-10 mb-8 bg-default-50/95 backdrop-blur border-b border-default-200 dark:border-default-800 lg:hidden px-6 pl-12\"\n >\n <div className=\"relative\">\n <button\n onClick={() => setIsOpen((prev) => !prev)}\n className=\"flex w-full items-center justify-between gap-4 px-6 py-3 text-sm text-default-500 font-medium cursor-pointer\"\n >\n <div className=\"flex items-center gap-2\">\n <span>On this page</span>\n <ChevronRight\n className={clsx(\n \"w-4 h-4 transition-transform duration-200\",\n isOpen && \"rotate-90\",\n )}\n />\n </div>\n {activeItem && (\n <span className=\"truncate font-normal max-w-[50%] text-right\">\n {activeItem.value}\n </span>\n )}\n </button>\n\n {isOpen && (\n <div className=\"absolute left-6 right-6 top-full mt-2 max-h-[60vh] overflow-y-auto rounded-lg border border-default-200 bg-background shadow-xl\">\n <ul className=\"p-4 space-y-2.5 text-sm\">\n {toc.map((item) => {\n const itemHref = item.href.startsWith(\"#\")\n ? item.href\n : `#${item.href}`;\n const isActive = activeId === itemHref;\n return (\n <li\n key={itemHref}\n style={{ paddingLeft: `${(item.depth - 1) * 0.75}rem` }}\n >\n <a\n href={itemHref}\n className={clsx(\n \"block transition-colors duration-200 line-clamp-2\",\n isActive\n ? \"text-primary-600 font-medium\"\n : \"text-default-600\",\n )}\n onClick={(e) => {\n handleLinkClick(e, item.href);\n setIsOpen(false);\n }}\n >\n {item.value}\n </a>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { TocItem } from \"remark-flexible-toc\";\nimport { useTableOfContents } from \"./use-table-of-contents\";\n\nexport function WebTableOfContent({ toc }: { toc: TocItem[] }) {\n const { activeId, handleLinkClick } = useTableOfContents(toc);\n\n return (\n <nav className=\"sticky top-header pt-4 overflow-y-auto w-web-table-of-content hidden lg:block\">\n <span className=\"text-xs font-mono tracking-widest\">ON THIS PAGE</span>\n <ul className=\"text-sm my-4\">\n {toc.map((item) => (\n <li\n key={item.href}\n // style={{ paddingLeft: `${(item.depth - 1) * 0.75}rem` }}\n >\n <a\n href={`${item.href}`}\n className={clsx(\n \"border-l py-1 px-4 block hover:text-default-700 dark:hover:text-slate-100 transition-colors duration-200 line-clamp-2\",\n activeId === item.href\n ? \"text-default-700 border-default-600 font-medium\"\n : \"text-default-500 border-default-200 \",\n )}\n onClick={(e) => handleLinkClick(e, item.href)}\n >\n {item.value}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n );\n}\n","import React from \"react\";\nimport { TocItem } from \"remark-flexible-toc\";\nimport { MobileTableOfContent } from \"../routes/content/table-of-contents/mobile-table-of-contents\";\nimport { WebTableOfContent } from \"../routes/content/table-of-contents/web-table-of-contents\";\n\nexport interface PrestigePageProps {\n children: React.ReactNode;\n toc?: TocItem[];\n}\n\nexport function PrestigePage({ children, toc = [] }: PrestigePageProps) {\n return (\n <div className=\"flex lg:gap-6 items-start max-w-[100vw]\">\n <div className=\"flex-1 min-w-0\">\n <MobileTableOfContent toc={toc} />\n <article className=\"prose wrap-break-word py-15 px-6 max-w-none lg:w-web-content\">\n {children}\n </article>\n </div>\n <WebTableOfContent toc={toc} />\n </div>\n );\n}\n","import { Link } from \"@tanstack/react-router\";\nimport clsx from \"clsx\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nimport { SiblingNavigationType } from \"../../../vite/core/content/content.types\";\n\nfunction ContentNavigation({\n isNext,\n navigation,\n}: {\n isNext?: boolean;\n navigation: SiblingNavigationType;\n}) {\n const label = isNext ? \"Next\" : \"Previous\";\n return (\n <Link\n to={navigation.link}\n className={clsx(\n \" flex-1 h-20 mb-4 border border-default-200 hover:bg-default-50 rounded-md cursor-pointer flex items-center px-4\",\n isNext ? \"justify-end\" : \"justify-start\",\n )}\n >\n <div\n className={clsx(\n \"flex items-center gap-4\",\n isNext && \"flex-row-reverse\",\n )}\n >\n {isNext ? (\n <ArrowRight className=\"text-default-400\" />\n ) : (\n <ArrowLeft className=\"text-default-400\" />\n )}\n <div className={clsx(\"flex flex-col\", isNext && \"items-end\")}>\n <span className=\"text-xs tracking-widest font-mono\">\n {label.toLocaleUpperCase()}\n </span>\n <span className=\"text-2xl font-li text-default-700\">\n {navigation.label}\n </span>\n </div>\n </div>\n </Link>\n );\n}\n\nexport default function ContentNavigations({\n prev,\n next,\n}: {\n prev: SiblingNavigationType | null | undefined;\n next: SiblingNavigationType | null | undefined;\n}) {\n if (!prev && !next) return null;\n // width of content navigation must match with content route content width, so we manually\n // add empty div with table-of-content width and add proper gap to match the size\n return (\n <div className=\"flex gap-6\">\n <div className=\"lg:flex flex-row items-center gap-2 mt-2 lg:mt-8 lg:w-web-content w-full\">\n {prev && <ContentNavigation navigation={prev} />}\n {next && <ContentNavigation navigation={next} isNext />}\n </div>\n <div className=\"lg:w-web-table-of-content h-1\"></div>\n </div>\n );\n}\n","export function isExternalURL(str: string) {\n try {\n const url = new URL(str);\n // This ensures it starts with http or https, filtering out\n // things like 'javascript:alert(1)' or 'mailto:test@test.com'\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n","import { Link } from \"@tanstack/react-router\";\nimport clsx from \"clsx\";\nimport { BookOpen, ChevronRight, ExternalLink } from \"lucide-react\";\nimport { useState } from \"react\";\nimport {\n ExternalSidebarLinkType,\n InternalSidebarLinkType,\n SidebarGroupType,\n SidebarType,\n} from \"../../../vite/core/content/content.types\";\nimport { isExternalURL } from \"../../utils\";\n\nexport interface SidebarProps {\n sidebar: SidebarType;\n onLinkClick?: (() => void) | undefined;\n}\n\nfunction SidebarGroup({\n group,\n onLinkClick,\n}: {\n group: SidebarGroupType;\n onLinkClick?: (() => void) | undefined;\n}) {\n const [open, setIsOpen] = useState(true);\n return (\n <div className=\"mt-4 flex flex-col gap-1\">\n <button\n className=\"flex items-center w-full gap-2\"\n onClick={() => setIsOpen((prev) => !prev)}\n >\n <ChevronRight\n size={18}\n className={clsx(\n \"transform transition cursor-pointer ml-1\",\n open && \"rotate-90\",\n )}\n />\n <span className=\"font-mono text-xs tracking-widest\">\n {group.label.toUpperCase()}\n </span>\n </button>\n {open && (\n <div className=\"mb-2\">\n {group.items.map((item) => {\n if (\"slug\" in item || \"link\" in item) {\n const key = \"slug\" in item ? item.slug : item.link;\n return (\n <SidebarLink showIcon={false} key={key} link={item} onLinkClick={onLinkClick} />\n );\n }\n return <SidebarGroup key={item.label} group={item} />;\n })}\n </div>\n )}\n </div>\n );\n}\n\nfunction SidebarLink({\n link,\n onLinkClick,\n showIcon,\n}: {\n link: InternalSidebarLinkType | ExternalSidebarLinkType;\n onLinkClick?: (() => void) | undefined;\n showIcon: boolean;\n}) {\n if (\"slug\" in link || !isExternalURL(link.link)) {\n const slug = \"slug\" in link ? `/${link.slug}` : link.link;\n return (\n <div className=\"flex items-center \">\n <Link\n onClick={onLinkClick}\n activeProps={{ className: \"text-default-700 font-medium\" }}\n className=\"w-full inline-flex gap-2 py-1 px-2 rounded hover:bg-default-100 text-sm mr-2 items-center text-default-500\"\n to={slug}\n >\n {showIcon && <BookOpen className=\"w-4\" />}\n {link.label}\n </Link>\n </div>\n );\n } else {\n return (\n <div className=\"flex items-center \">\n <a\n onClick={onLinkClick}\n className=\"w-full inline-flex gap-2 py-1 px-2 rounded hover:bg-default-100 text-sm mr-2 items-center text-default-500\"\n href={link.link}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {showIcon && <ExternalLink className=\"w-4\" />}\n {link.label}\n </a>\n </div>\n );\n }\n}\n\nexport default function Sidebar({ sidebar, onLinkClick }: SidebarProps) {\n return (\n <div className=\"w-full lg:w-sidebar border-r border-default-200 h-full overflow-auto lg:h-main lg:sticky top-header pt-4\">\n {sidebar.items.map((item) => {\n if (\"slug\" in item || \"link\" in item) {\n const key = \"slug\" in item ? item.slug : item.link;\n return (\n <SidebarLink showIcon={true} onLinkClick={onLinkClick} key={key} link={item} />\n );\n }\n return <SidebarGroup key={item.label} group={item} />;\n })}\n </div>\n );\n}\n","import { Menu, X } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { SidebarType } from \"../../../vite/core/content/content.types\";\nimport Sidebar from \"./sidebar\";\n\nfunction SidebarOverlay({ sidebar }: { sidebar: SidebarType }) {\n const [isOpen, setIsOpen] = useState(false);\n return (\n <div className=\"lg:hidden\">\n {/* Mobile sidebar button is placed on the start of mobile of content tab, we have to position is via fixed because table of content lives inside content.route */}\n <button\n className=\"bg-transparent p-3 -mt-[2px] text-default-700 top-header left-0 fixed z-50\"\n onClick={() => setIsOpen((prev) => !prev)}\n >\n {isOpen ? <X /> : <Menu />}\n </button>\n {isOpen && (\n <div className=\"fixed top-[calc(var(--spacing-header)+44 )] shadow-xl left-0 overflow-auto z-10 bg-default-50 w-full h-screen\">\n <Sidebar onLinkClick={() => setIsOpen(false)} sidebar={sidebar} />\n </div>\n )}\n </div>\n );\n}\n\nexport default function MobileSidebar({ sidebar }: { sidebar: SidebarType }) {\n return <SidebarOverlay sidebar={sidebar} />;\n}\n","import { Outlet, useLocation } from \"@tanstack/react-router\";\nimport { SidebarType } from \"../../../vite/core/content/content.types\";\nimport ContentNavigations from \"../content/content-navigations\";\nimport MobileSidebar from \"./mobile-sidebar\";\nimport Sidebar from \"./sidebar\";\n\nexport function CollectionRoute(sidebar: SidebarType, id: string) {\n return {\n component: () => {\n const location = useLocation();\n const navigation = sidebar?.navigation?.[location.pathname] || {\n prev: null,\n next: null,\n };\n const { prev, next } = navigation;\n\n return (\n <div className=\"mx-auto flex container lg:gap-6\">\n <MobileSidebar sidebar={sidebar} />\n <div className=\"hidden lg:block\">\n {sidebar && <Sidebar sidebar={sidebar} />}\n </div>\n <div className=\"flex-1 pb-20\">\n <Outlet />\n <div className=\"mt-8 px-6 lg:px-0\">\n <ContentNavigations prev={prev} next={next} />\n </div>\n </div>\n </div>\n );\n },\n };\n}\n","import { FunctionComponent } from \"react\";\nimport { TocItem } from \"remark-flexible-toc\";\nimport config from \"virtual:prestige/config\";\nimport {\n ContentFrontmatterType,\n SiblingNavigationType,\n} from \"../../../vite/core/content/content.types\";\nimport { PrestigePage } from \"../../core/prestige-page\";\nexport function ContentRoute(inlineData: any): any {\n const {\n frontmatter,\n toc,\n default: Component,\n } = inlineData as {\n prev: SiblingNavigationType | null;\n next: SiblingNavigationType | null;\n toc: TocItem[];\n default: FunctionComponent;\n frontmatter: ContentFrontmatterType;\n };\n return {\n head: () => {\n const metas: Array<\n { name: string; content: string } | { title: string }\n > = [];\n const description = frontmatter.description;\n const title = frontmatter.title;\n\n if (title) {\n metas.push({\n title: title + \" | \" + config.title,\n });\n }\n\n if (description) {\n metas.push({\n name: \"description\",\n content: description,\n });\n }\n\n return {\n meta: metas,\n };\n },\n component: () => {\n return (\n <PrestigePage toc={toc}>\n <Component />\n </PrestigePage>\n );\n },\n };\n}\n","export default function NotFound() {\n return <h1>This page could not be found.</h1>;\n}\n","import config from \"virtual:prestige/config\";\nimport { PrestigeShellProps } from \"../../routes/prestige-shell\";\n\nfunction License() {\n if (!config.license) {\n return null;\n }\n return (\n <a target=\"_blank\" href={config.license.url}>\n Released under: {config.license.label}\n </a>\n );\n}\n\nfunction Copyright({ copyright }: Pick<PrestigeShellProps, \"copyright\">) {\n if (!copyright) {\n return null;\n }\n return copyright();\n}\n\nexport default function Footer({\n copyright,\n}: Pick<PrestigeShellProps, \"copyright\">) {\n return (\n <footer className=\"mt-10 flex items-center justify-center flex-col gap-2 px-4 border-t border-t-default-100 pt-10 bg-default-50 text-sm py-10 text-default-700\">\n <License />\n <Copyright copyright={copyright} />\n </footer>\n );\n}\n","import { ThemeProvider } from \"@lonik/themer\";\nimport { ReactNode } from \"react\";\nimport Footer from \"../core/footer/footer\";\nimport Header from \"../core/header/header\";\n\ntype RenderNode = () => ReactNode;\n\nexport interface PrestigeShellProps {\n customHeaderTitle?: RenderNode | undefined;\n copyright?: RenderNode | undefined;\n}\nexport function PrestigeShell({\n children,\n options,\n}: {\n children: ReactNode;\n options?: PrestigeShellProps;\n}) {\n return (\n <ThemeProvider attribute=\"data-theme\" defaultTheme=\"system\">\n <Header customHeaderTitle={options?.customHeaderTitle} {...options} />\n <main className=\"min-h-[calc(100vh-var(--spacing-header))]\">\n {children}\n </main>\n <Footer copyright={options?.copyright} />\n </ThemeProvider>\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lonik/prestige",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "description": "Static Site Generator for Tanstack Start",
5
5
  "homepage": "https://github.com/lukonik/prestige#readme",
6
6
  "bugs": {
@@ -52,4 +52,5 @@
52
52
  --color-white: var(--color-white);
53
53
  --color-background: var(--color-background);
54
54
  --width-web-table-of-content: 300px;
55
+ --width-web-content: 80ch;
55
56
  }