{"version":3,"file":"content.cjs","sources":["../../src/renderer/content.ts"],"sourcesContent":["import { Marked } from 'marked';\nimport { ContentProcessor } from '../types.js';\n\nexport class ContentLoader {\n  private content: Record<string, string>;\n  private processor?: ContentProcessor | undefined;\n\n  constructor(content: Record<string, string>, processor?: ContentProcessor) {\n    this.content = content;\n    this.processor = processor;\n  }\n\n  loadContent(path: string): string | undefined {\n    return this.content[path];\n  }\n\n  loadAndProcess(path: string): string | undefined {\n    const content = this.loadContent(path);\n    if (!content) {\n      return undefined;\n    }\n\n    return this.processContent(content);\n  }\n\n  processContent(content: string): string {\n    if (this.processor) {\n      content = this.processor.process(content);\n    }\n\n    const md = new Marked();\n    // Ensure sync parse result for our pipeline\n    const html = md.parse(content) as string;\n    return html;\n  }\n\n  hasContent(path: string): boolean {\n    return path in this.content;\n  }\n\n  getAvailablePaths(): string[] {\n    return Object.keys(this.content);\n  }\n\n  getContentSize(path: string): number {\n    const content = this.loadContent(path);\n    return content ? content.length : 0;\n  }\n\n  getTotalContentSize(): number {\n    return Object.values(this.content).reduce((total, content) => total + content.length, 0);\n  }\n}\n\nexport async function loadContent(\n  path: string,\n  contentBundle: Record<string, string>,\n  processor?: ContentProcessor\n): Promise<string | undefined> {\n  const loader = new ContentLoader(contentBundle, processor);\n  return loader.loadAndProcess(path);\n}\n\nexport function createContentLoader(\n  contentBundle: Record<string, string>,\n  processor?: ContentProcessor\n): ContentLoader {\n  return new ContentLoader(contentBundle, processor);\n}\n\n// Utility functions for content processing\nexport function extractHeadings(content: string): Array<{\n  level: number;\n  text: string;\n  id: string;\n}> {\n  const headings: Array<{\n    level: number;\n    text: string;\n    id: string;\n  }> = [];\n\n  const lines = content.split('\\n');\n  for (const line of lines) {\n    const match = line.match(/^(#{1,6})\\s+(.+)$/);\n    if (match && match[1] && match[2]) {\n      const level = match[1].length;\n      const text = match[2].trim();\n      const id = text.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');\n      \n      headings.push({ level, text, id });\n    }\n  }\n\n  return headings;\n}\n\nexport function extractTableOfContents(content: string): string {\n  const headings = extractHeadings(content);\n  \n  if (headings.length === 0) {\n    return '';\n  }\n\n  const toc = ['## Table of Contents', ''];\n  \n  for (const heading of headings) {\n    const indent = '  '.repeat(heading.level - 1);\n    toc.push(`${indent}- [${heading.text}](#${heading.id})`);\n  }\n\n  return toc.join('\\n');\n}\n\nexport function addTableOfContents(content: string): string {\n  const toc = extractTableOfContents(content);\n  if (!toc) {\n    return content;\n  }\n\n  const lines = content.split('\\n');\n  const firstHeadingIndex = lines.findIndex(line => line.match(/^#{1,6}\\s+/));\n  \n  if (firstHeadingIndex === -1) {\n    return content;\n  }\n\n  lines.splice(firstHeadingIndex + 1, 0, toc, '');\n  return lines.join('\\n');\n}"],"names":["Marked"],"mappings":";;;AAGO,MAAM,cAAc;AAAA,EAIzB,YAAY,SAAiC,WAA8B;AACzE,SAAK,UAAU;AACf,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,YAAY,MAAkC;AAC5C,WAAO,KAAK,QAAQ,IAAI;AAAA,EAC1B;AAAA,EAEA,eAAe,MAAkC;AAC/C,UAAM,UAAU,KAAK,YAAY,IAAI;AACrC,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,eAAe,OAAO;AAAA,EACpC;AAAA,EAEA,eAAe,SAAyB;AACtC,QAAI,KAAK,WAAW;AAClB,gBAAU,KAAK,UAAU,QAAQ,OAAO;AAAA,IAC1C;AAEA,UAAM,KAAK,IAAIA,cAAA;AAEf,UAAM,OAAO,GAAG,MAAM,OAAO;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,MAAuB;AAChC,WAAO,QAAQ,KAAK;AAAA,EACtB;AAAA,EAEA,oBAA8B;AAC5B,WAAO,OAAO,KAAK,KAAK,OAAO;AAAA,EACjC;AAAA,EAEA,eAAe,MAAsB;AACnC,UAAM,UAAU,KAAK,YAAY,IAAI;AACrC,WAAO,UAAU,QAAQ,SAAS;AAAA,EACpC;AAAA,EAEA,sBAA8B;AAC5B,WAAO,OAAO,OAAO,KAAK,OAAO,EAAE,OAAO,CAAC,OAAO,YAAY,QAAQ,QAAQ,QAAQ,CAAC;AAAA,EACzF;AACF;AAEA,eAAsB,YACpB,MACA,eACA,WAC6B;AAC7B,QAAM,SAAS,IAAI,cAAc,eAAe,SAAS;AACzD,SAAO,OAAO,eAAe,IAAI;AACnC;AAEO,SAAS,oBACd,eACA,WACe;AACf,SAAO,IAAI,cAAc,eAAe,SAAS;AACnD;AAGO,SAAS,gBAAgB,SAI7B;AACD,QAAM,WAID,CAAA;AAEL,QAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQ,KAAK,MAAM,mBAAmB;AAC5C,QAAI,SAAS,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG;AACjC,YAAM,QAAQ,MAAM,CAAC,EAAE;AACvB,YAAM,OAAO,MAAM,CAAC,EAAE,KAAA;AACtB,YAAM,KAAK,KAAK,YAAA,EAAc,QAAQ,eAAe,GAAG,EAAE,QAAQ,YAAY,EAAE;AAEhF,eAAS,KAAK,EAAE,OAAO,MAAM,IAAI;AAAA,IACnC;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,uBAAuB,SAAyB;AAC9D,QAAM,WAAW,gBAAgB,OAAO;AAExC,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,CAAC,wBAAwB,EAAE;AAEvC,aAAW,WAAW,UAAU;AAC9B,UAAM,SAAS,KAAK,OAAO,QAAQ,QAAQ,CAAC;AAC5C,QAAI,KAAK,GAAG,MAAM,MAAM,QAAQ,IAAI,MAAM,QAAQ,EAAE,GAAG;AAAA,EACzD;AAEA,SAAO,IAAI,KAAK,IAAI;AACtB;AAEO,SAAS,mBAAmB,SAAyB;AAC1D,QAAM,MAAM,uBAAuB,OAAO;AAC1C,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,QAAM,oBAAoB,MAAM,UAAU,UAAQ,KAAK,MAAM,YAAY,CAAC;AAE1E,MAAI,sBAAsB,IAAI;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,oBAAoB,GAAG,GAAG,KAAK,EAAE;AAC9C,SAAO,MAAM,KAAK,IAAI;AACxB;;;;;;;"}