ardo 3.0.3 → 3.0.5

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.
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../../src/typedoc/vite-plugin.ts","../../src/typedoc/components/ApiSignature.tsx","../../src/typedoc/components/ApiItem.tsx"],"sourcesContent":["import type { Plugin } from \"vite\"\nimport type { TypeDocConfig } from \"./types\"\nimport { generateApiDocs } from \"./generator\"\nimport path from \"path\"\nimport fsSync from \"fs\"\nimport type { FSWatcher } from \"fs\"\n\nexport interface TypeDocPluginOptions extends Partial<TypeDocConfig> {\n /**\n * Content directory where markdown files are stored\n * @default './content'\n */\n contentDir?: string\n\n /**\n * Run TypeDoc on every build\n * @default false in dev, true in build\n */\n runOnBuild?: boolean\n\n /**\n * Run TypeDoc on startup\n * @default true\n */\n runOnStart?: boolean\n}\n\n/**\n * Vite plugin for generating API documentation with TypeDoc.\n *\n * @example\n * ```ts\n * // Minimal config (uses ./src/index.ts as entry point)\n * typedocPlugin()\n *\n * // Custom entry point\n * typedocPlugin({ entryPoints: ['./lib/index.ts'] })\n *\n * // Full config\n * typedocPlugin({\n * entryPoints: ['./src/index.ts'],\n * out: 'api-reference',\n * excludePrivate: true,\n * })\n * ```\n */\nexport function typedocPlugin(options: TypeDocPluginOptions = {}): Plugin {\n const {\n contentDir = \"./content\",\n runOnBuild,\n runOnStart = true,\n // TypeDoc config with defaults\n enabled = true,\n entryPoints = [\"./src/index.ts\"],\n out = \"api-reference\",\n excludePrivate = true,\n excludeInternal = true,\n ...restConfig\n } = options\n\n const config: TypeDocConfig = {\n enabled,\n entryPoints,\n out,\n excludePrivate,\n excludeInternal,\n ...restConfig,\n }\n\n let isBuilding = false\n let hasGenerated = false\n\n async function generate() {\n if (!config.enabled) return\n\n console.log(\"[ardo] Generating API documentation with TypeDoc...\")\n const startTime = Date.now()\n\n try {\n const docs = await generateApiDocs(config, contentDir)\n const duration = Date.now() - startTime\n console.log(`[ardo] Generated ${docs.length} API documentation pages in ${duration}ms`)\n hasGenerated = true\n } catch (error) {\n console.error(\"[ardo] TypeDoc generation failed:\", error)\n throw error\n }\n }\n\n return {\n name: \"ardo:typedoc\",\n\n async buildStart() {\n if (runOnStart && !hasGenerated) {\n await generate()\n }\n },\n\n async buildEnd() {\n if (isBuilding && runOnBuild !== false) {\n await generate()\n }\n },\n\n configResolved(config) {\n isBuilding = config.command === \"build\"\n },\n\n async handleHotUpdate({ file }) {\n // Regenerate on source file changes in watch mode\n if (config.watch && config.entryPoints.some((ep) => file.includes(ep))) {\n await generate()\n return []\n }\n },\n }\n}\n\nexport function createTypedocWatcher(\n config: TypeDocConfig,\n contentDir: string,\n onChange?: () => void\n): { start: () => Promise<void>; stop: () => void } {\n let watcher: FSWatcher | null = null\n\n return {\n async start() {\n if (!config.watch || !config.entryPoints.length) return\n\n const entryDir = path.dirname(config.entryPoints[0])\n\n try {\n watcher = fsSync.watch(entryDir, { recursive: true }, async (event, filename) => {\n if (filename?.endsWith(\".ts\") || filename?.endsWith(\".tsx\")) {\n console.log(`[ardo] Source file changed: ${filename}`)\n await generateApiDocs(config, contentDir)\n onChange?.()\n }\n })\n } catch {\n console.warn(\"[ardo] Could not start TypeDoc watcher\")\n }\n },\n\n stop() {\n if (watcher) {\n watcher.close()\n watcher = null\n }\n },\n }\n}\n","import type { ApiDocParameter, ApiDocReturn, ApiDocTypeParameter } from \"../types\"\n\ninterface ApiSignatureProps {\n name: string\n typeParameters?: ApiDocTypeParameter[]\n parameters?: ApiDocParameter[]\n returns?: ApiDocReturn\n className?: string\n}\n\nexport function ApiSignature({\n name,\n typeParameters,\n parameters,\n returns,\n className = \"\",\n}: ApiSignatureProps) {\n const typeParamsStr = typeParameters?.length\n ? `<${typeParameters.map((tp) => tp.name).join(\", \")}>`\n : \"\"\n\n const paramsStr = parameters\n ?.map((p) => {\n const optional = p.optional ? \"?\" : \"\"\n return `${p.name}${optional}: ${p.type}`\n })\n .join(\", \")\n\n const returnStr = returns?.type ? `: ${returns.type}` : \"\"\n\n return (\n <div className={`ardo-api-signature ${className}`}>\n <pre className=\"ardo-api-signature-code\">\n <code>\n <span className=\"ardo-api-keyword\">function</span>{\" \"}\n <span className=\"ardo-api-function-name\">{name}</span>\n {typeParamsStr && <span className=\"ardo-api-type-params\">{typeParamsStr}</span>}\n <span className=\"ardo-api-params\">({paramsStr})</span>\n {returnStr && <span className=\"ardo-api-return-type\">{returnStr}</span>}\n </code>\n </pre>\n </div>\n )\n}\n\ninterface ApiParametersTableProps {\n parameters: ApiDocParameter[]\n}\n\nexport function ApiParametersTable({ parameters }: ApiParametersTableProps) {\n if (!parameters.length) return null\n\n return (\n <div className=\"ardo-api-parameters\">\n <h4 className=\"ardo-api-section-title\">Parameters</h4>\n <table className=\"ardo-api-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n {parameters.map((param) => (\n <tr key={param.name}>\n <td>\n <code>{param.name}</code>\n {param.optional && <span className=\"ardo-api-optional\">(optional)</span>}\n </td>\n <td>\n <code>{param.type}</code>\n </td>\n <td>\n {param.description}\n {param.defaultValue && (\n <span className=\"ardo-api-default\">\n Default: <code>{param.defaultValue}</code>\n </span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\ninterface ApiReturnsProps {\n returns: ApiDocReturn\n}\n\nexport function ApiReturns({ returns }: ApiReturnsProps) {\n return (\n <div className=\"ardo-api-returns\">\n <h4 className=\"ardo-api-section-title\">Returns</h4>\n <p>\n <code>{returns.type}</code>\n {returns.description && <span> - {returns.description}</span>}\n </p>\n </div>\n )\n}\n","import type { ApiDocItem, ApiDocKind } from \"../types\"\nimport { ApiSignature, ApiParametersTable, ApiReturns } from \"./ApiSignature\"\nimport type { JSX } from \"react\"\n\ninterface ApiItemProps {\n item: ApiDocItem\n level?: number\n}\n\nexport function ApiItem({ item, level = 2 }: ApiItemProps) {\n const HeadingTag = `h${Math.min(level, 6)}` as keyof JSX.IntrinsicElements\n\n return (\n <div className={`ardo-api-item ardo-api-item-${item.kind}`} id={item.id}>\n <HeadingTag className=\"ardo-api-item-title\">\n <ApiKindBadge kind={item.kind} />\n <span className=\"ardo-api-item-name\">{item.name}</span>\n <a href={`#${item.id}`} className=\"ardo-api-anchor\">\n #\n </a>\n </HeadingTag>\n\n {item.description && <p className=\"ardo-api-item-description\">{item.description}</p>}\n\n {item.signature && (\n <ApiSignature\n name={item.name}\n typeParameters={item.typeParameters}\n parameters={item.parameters}\n returns={item.returns}\n />\n )}\n\n {item.parameters && item.parameters.length > 0 && (\n <ApiParametersTable parameters={item.parameters} />\n )}\n\n {item.returns && <ApiReturns returns={item.returns} />}\n\n {item.examples && item.examples.length > 0 && (\n <div className=\"ardo-api-examples\">\n <h4 className=\"ardo-api-section-title\">Examples</h4>\n {item.examples.map((example, i) => (\n <pre key={i} className=\"ardo-api-example\">\n <code>{example}</code>\n </pre>\n ))}\n </div>\n )}\n\n {item.source && (\n <div className=\"ardo-api-source\">\n {item.source.url ? (\n <a href={item.source.url} target=\"_blank\" rel=\"noopener noreferrer\">\n {item.source.file}:{item.source.line}\n </a>\n ) : (\n <span>\n {item.source.file}:{item.source.line}\n </span>\n )}\n </div>\n )}\n\n {item.children && item.children.length > 0 && (\n <div className=\"ardo-api-children\">\n {item.children.map((child) => (\n <ApiItem key={child.id} item={child} level={level + 1} />\n ))}\n </div>\n )}\n </div>\n )\n}\n\ninterface ApiKindBadgeProps {\n kind: ApiDocKind\n}\n\nexport function ApiKindBadge({ kind }: ApiKindBadgeProps) {\n const kindLabels: Record<ApiDocKind, string> = {\n module: \"Module\",\n namespace: \"Namespace\",\n class: \"Class\",\n interface: \"Interface\",\n type: \"Type\",\n enum: \"Enum\",\n function: \"Function\",\n variable: \"Variable\",\n property: \"Property\",\n method: \"Method\",\n accessor: \"Accessor\",\n constructor: \"Constructor\",\n parameter: \"Parameter\",\n typeParameter: \"Type Parameter\",\n enumMember: \"Enum Member\",\n }\n\n const kindColors: Record<string, string> = {\n class: \"ardo-api-badge-class\",\n interface: \"ardo-api-badge-interface\",\n type: \"ardo-api-badge-type\",\n enum: \"ardo-api-badge-enum\",\n function: \"ardo-api-badge-function\",\n method: \"ardo-api-badge-method\",\n property: \"ardo-api-badge-property\",\n }\n\n return <span className={`ardo-api-badge ${kindColors[kind] || \"\"}`}>{kindLabels[kind]}</span>\n}\n\ninterface ApiHierarchyProps {\n hierarchy: ApiDocItem[\"hierarchy\"]\n}\n\nexport function ApiHierarchy({ hierarchy }: ApiHierarchyProps) {\n if (!hierarchy) return null\n\n const {\n extends: extendsTypes,\n implements: implementsTypes,\n extendedBy,\n implementedBy,\n } = hierarchy\n\n if (\n !extendsTypes?.length &&\n !implementsTypes?.length &&\n !extendedBy?.length &&\n !implementedBy?.length\n ) {\n return null\n }\n\n return (\n <div className=\"ardo-api-hierarchy\">\n <h4 className=\"ardo-api-section-title\">Hierarchy</h4>\n <ul className=\"ardo-api-hierarchy-list\">\n {extendsTypes?.map((type) => (\n <li key={type}>\n <span className=\"ardo-api-hierarchy-label\">extends</span>\n <code>{type}</code>\n </li>\n ))}\n {implementsTypes?.map((type) => (\n <li key={type}>\n <span className=\"ardo-api-hierarchy-label\">implements</span>\n <code>{type}</code>\n </li>\n ))}\n {extendedBy?.map((type) => (\n <li key={type}>\n <span className=\"ardo-api-hierarchy-label\">extended by</span>\n <code>{type}</code>\n </li>\n ))}\n {implementedBy?.map((type) => (\n <li key={type}>\n <span className=\"ardo-api-hierarchy-label\">implemented by</span>\n <code>{type}</code>\n </li>\n ))}\n </ul>\n </div>\n )\n}\n"],"mappings":"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","names":["config","jsx","jsxs"]}
@@ -1,5 +1,5 @@
1
- import { _ as HeaderProps, $ as SidebarProps, a0 as FooterProps } from '../FileTree-K0YVFXhg.js';
2
- export { C as CodeBlock, a as CodeBlockProps, b as CodeGroup, c as CodeGroupProps, d as Container, e as ContainerProps, f as ContainerType, g as Content, h as CopyButton, D as Danger, i as DangerProps, a1 as DocContent, j as DocLayout, k as DocPage, F as FeatureCard, l as FeatureCardProps, m as FeatureItem, n as Features, o as FeaturesProps, p as FileTree, q as FileTreeProps, r as Footer, a2 as FooterCopyrightProps, a3 as FooterMessageProps, H as Header, s as Hero, t as HeroAction, u as HeroImage, v as HeroProps, w as HomePage, I as Info, x as InfoProps, L as Layout, a4 as LayoutProps, N as Note, y as NoteProps, a5 as RootLayout, a6 as RootLayoutProps, S as Search, z as Sidebar, a7 as SidebarGroup, a8 as SidebarGroupProps, a9 as SidebarLink, aa as SidebarLinkProps, ab as SocialLink, ac as SocialLinkProps, A as Steps, B as StepsProps, T as TOC, E as Tab, G as TabList, J as TabListProps, K as TabPanel, M as TabPanelProps, O as TabPanels, P as TabPanelsProps, Q as TabProps, R as Tabs, U as TabsProps, V as ThemeToggle, W as Tip, X as TipProps, Y as Warning, Z as WarningProps } from '../FileTree-K0YVFXhg.js';
1
+ import { _ as HeaderProps, $ as SidebarProps, a0 as FooterProps } from '../FileTree-qpT1ZVrW.js';
2
+ export { C as CodeBlock, a as CodeBlockProps, b as CodeGroup, c as CodeGroupProps, d as Container, e as ContainerProps, f as ContainerType, g as Content, h as CopyButton, D as Danger, i as DangerProps, a1 as DocContent, j as DocLayout, k as DocPage, F as FeatureCard, l as FeatureCardProps, m as FeatureItem, n as Features, o as FeaturesProps, p as FileTree, q as FileTreeProps, r as Footer, a2 as FooterCopyrightProps, a3 as FooterMessageProps, H as Header, s as Hero, t as HeroAction, u as HeroImage, v as HeroProps, w as HomePage, I as Info, x as InfoProps, L as Layout, a4 as LayoutProps, N as Note, y as NoteProps, a5 as RootLayout, a6 as RootLayoutProps, S as Search, z as Sidebar, a7 as SidebarGroup, a8 as SidebarGroupProps, a9 as SidebarLink, aa as SidebarLinkProps, ab as SocialLink, ac as SocialLinkProps, A as Steps, B as StepsProps, T as TOC, E as Tab, G as TabList, J as TabListProps, K as TabPanel, M as TabPanelProps, O as TabPanels, P as TabPanelsProps, Q as TabProps, R as Tabs, U as TabsProps, V as ThemeToggle, W as Tip, X as TipProps, Y as Warning, Z as WarningProps } from '../FileTree-qpT1ZVrW.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { ReactNode, ComponentProps, SVGAttributes, ComponentType } from 'react';
5
5
  import { A as ArdoConfig, S as SidebarItem } from '../types-CLkHwCch.js';
package/dist/ui/index.js CHANGED
@@ -22,7 +22,7 @@ import {
22
22
  Steps,
23
23
  TOC,
24
24
  ThemeToggle
25
- } from "../chunk-TDBU2FXP.js";
25
+ } from "../chunk-XK7YZAVP.js";
26
26
  import {
27
27
  Search
28
28
  } from "../chunk-BHHI2BO4.js";
@@ -46,7 +46,7 @@ import {
46
46
  Warning,
47
47
  getRegisteredIconNames,
48
48
  registerIcons
49
- } from "../chunk-UWFMFHRD.js";
49
+ } from "../chunk-QKDVSW6Q.js";
50
50
  import "../chunk-MJQGGJQZ.js";
51
51
  import "../chunk-FZP2AVJL.js";
52
52
  import "../chunk-QELSOHIY.js";
@@ -304,6 +304,11 @@ body {
304
304
  gap: 8px;
305
305
  }
306
306
 
307
+ .ardo-desktop-nav {
308
+ display: flex;
309
+ align-items: center;
310
+ }
311
+
307
312
  .ardo-nav-link {
308
313
  position: relative;
309
314
  color: var(--ardo-c-text-light);
@@ -392,14 +397,90 @@ body {
392
397
  transition: all var(--ardo-transition-fast);
393
398
  }
394
399
 
395
- @media (max-width: 768px) {
400
+ .ardo-mobile-top-nav {
401
+ display: none;
402
+ }
403
+
404
+ .ardo-mobile-top-nav-inner {
405
+ overflow-x: auto;
406
+ -webkit-overflow-scrolling: touch;
407
+ scrollbar-width: thin;
408
+ }
409
+
410
+ .ardo-mobile-top-nav-inner .ardo-nav {
411
+ width: max-content;
412
+ min-width: 100%;
413
+ }
414
+
415
+ .ardo-mobile-menu {
416
+ position: fixed;
417
+ top: calc(var(--ardo-header-height) + env(safe-area-inset-top));
418
+ left: 0;
419
+ right: 0;
420
+ padding: 12px 16px 16px;
421
+ background: var(--ardo-c-bg);
422
+ border-top: 1px solid var(--ardo-c-border);
423
+ box-shadow: 0 14px 28px oklch(0 0 0 / 0.08);
424
+ z-index: 99;
425
+ }
426
+
427
+ .ardo-mobile-menu-section + .ardo-mobile-menu-section {
428
+ margin-top: 12px;
429
+ padding-top: 12px;
430
+ border-top: 1px solid var(--ardo-c-border);
431
+ }
432
+
433
+ .ardo-mobile-menu .ardo-sidebar {
434
+ position: static;
435
+ top: auto;
436
+ left: auto;
437
+ width: auto;
438
+ height: auto;
439
+ padding: 0;
440
+ overflow-y: visible;
441
+ box-shadow: none;
442
+ background: transparent;
443
+ display: block;
444
+ }
445
+
446
+ .ardo-mobile-menu .ardo-sidebar-text {
447
+ font-size: 11px;
448
+ }
449
+
450
+ @media (max-width: 1024px) {
451
+ .ardo-layout > .ardo-header-with-mobile-top-nav + .ardo-layout-container {
452
+ padding-top: calc(var(--ardo-header-height) + 44px);
453
+ }
454
+
455
+ .ardo-header {
456
+ z-index: 110;
457
+ }
458
+
396
459
  .ardo-mobile-menu-button {
397
460
  display: block;
398
461
  }
399
462
 
400
- .ardo-nav {
463
+ .ardo-desktop-nav {
401
464
  display: none;
402
465
  }
466
+
467
+ .ardo-mobile-top-nav {
468
+ display: block;
469
+ position: fixed;
470
+ top: calc(var(--ardo-header-height) + env(safe-area-inset-top));
471
+ left: 0;
472
+ right: 0;
473
+ padding: 6px 20px;
474
+ background: var(--ardo-c-bg);
475
+ border-top: 1px solid var(--ardo-c-border);
476
+ border-bottom: 1px solid var(--ardo-c-border);
477
+ z-index: 108;
478
+ }
479
+
480
+ .ardo-header-with-mobile-top-nav .ardo-mobile-menu {
481
+ top: calc(var(--ardo-header-height) + env(safe-area-inset-top) + 44px);
482
+ z-index: 109;
483
+ }
403
484
  }
404
485
 
405
486
  /* ========================================
@@ -1,5 +1,5 @@
1
1
  import { Plugin } from 'vite';
2
- import { A as ArdoConfig, P as PageData, R as ResolvedConfig, a as PageFrontmatter, T as TOCItem, S as SidebarItem, M as MarkdownConfig } from '../types-CLkHwCch.js';
2
+ import { A as ArdoConfig, R as ResolvedConfig, a as PageFrontmatter, T as TOCItem, P as PageData, S as SidebarItem, M as MarkdownConfig } from '../types-CLkHwCch.js';
3
3
  import { Highlighter } from 'shiki';
4
4
 
5
5
  interface ArdoRoutesPluginOptions {