@contentgrowth/content-widget 1.1.3 → 1.2.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.
@@ -40,7 +40,7 @@ function processImageSyntax(markdown: string): string {
40
40
  return markdown.replace(
41
41
  /!\[([^\]]*)\]\(([^\s)]+)\s+=(\d+)x(\d+)\)/g,
42
42
  (match, alt, url, width, height) => {
43
- return `![${alt}](${url}){width="${width}" height="${height}"}`;
43
+ return `![${alt}](${url})`;
44
44
  }
45
45
  );
46
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EAEb,MAAM,mBAAmB,CAAC;AAG3B;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,KAAK,CAA+B;gBAEhC,MAAM,EAAE,YAAY;IAmBhC;;OAEG;IACG,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwChF;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmB3D;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmBjE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAelD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IAetC;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;YACW,KAAK;IA2CnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAQhB;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EAEb,MAAM,mBAAmB,CAAC;AAkB3B;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,KAAK,CAA+B;gBAEhC,MAAM,EAAE,YAAY;IAmBhC;;OAEG;IACG,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwChF;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwB3D;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwBjE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAelD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IAetC;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;YACW,KAAK;IA2CnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAQhB;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ"}
@@ -3,6 +3,18 @@
3
3
  * Framework-agnostic API client for fetching articles
4
4
  */
5
5
  import { ContentGrowthError } from '../types/index.js';
6
+ /**
7
+ * Process markdown content to handle custom image syntax
8
+ * Converts: ![alt](url =WIDTHxHEIGHT) to ![alt](url){width="WIDTH" height="HEIGHT"}
9
+ * This ensures all consumers get properly formatted image syntax
10
+ */
11
+ function processImageSyntax(markdown) {
12
+ if (!markdown)
13
+ return markdown;
14
+ return markdown.replace(/!\[([^\]]*)\]\(([^\s)]+)\s+=(\d+)x(\d+)\)/g, (match, alt, url, width, height) => {
15
+ return `![${alt}](${url})`;
16
+ });
17
+ }
6
18
  /**
7
19
  * Content Growth API Client
8
20
  *
@@ -82,6 +94,10 @@ export class ContentGrowthClient {
82
94
  }
83
95
  const url = `${this.config.baseUrl}/widget/articles/${uuid}`;
84
96
  const data = await this.fetch(url);
97
+ // Process image syntax in content
98
+ if (data.content) {
99
+ data.content = processImageSyntax(data.content);
100
+ }
85
101
  this.setCache(cacheKey, data);
86
102
  return data;
87
103
  }
@@ -100,6 +116,10 @@ export class ContentGrowthClient {
100
116
  }
101
117
  const url = `${this.config.baseUrl}/widget/articles/slug/${slug}`;
102
118
  const data = await this.fetch(url);
119
+ // Process image syntax in content
120
+ if (data.content) {
121
+ data.content = processImageSyntax(data.content);
122
+ }
103
123
  this.setCache(cacheKey, data);
104
124
  return data;
105
125
  }
@@ -38,7 +38,7 @@ export const ContentViewer = ({ apiKey, uuid, slug, baseUrl, theme = 'light', sh
38
38
  const processImageSyntax = (markdown) => {
39
39
  // Match: ![alt](url =widthxheight)
40
40
  return markdown.replace(/!\[([^\]]*)\]\(([^\s)]+)\s+=(\d+)x(\d+)\)/g, (match, alt, url, width, height) => {
41
- return `![${alt}](${url}){width="${width}" height="${height}"}`;
41
+ return `![${alt}](${url})`;
42
42
  });
43
43
  };
44
44
  // Configure marked to handle image attributes
@@ -85,7 +85,7 @@ const processImageSyntax = (markdown: string): string => {
85
85
  return markdown.replace(
86
86
  /!\[([^\]]*)\]\(([^\s)]+)\s+=(\d+)x(\d+)\)/g,
87
87
  (match, alt, url, width, height) => {
88
- return `![${alt}](${url}){width="${width}" height="${height}"}`;
88
+ return `![${alt}](${url})`;
89
89
  }
90
90
  );
91
91
  };
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Content Growth Widget - Standalone Bundle
3
- * Version: 1.1.3
3
+ * Version: 1.2.0
4
4
  * https://www.content-growth.com
5
5
  */
6
6
  (function(window) {
@@ -3488,7 +3488,7 @@ class ContentViewer {
3488
3488
 
3489
3489
  class ContentGrowthWidget {
3490
3490
  // Version will be injected during build from package.json
3491
- static version = '1.1.3';
3491
+ static version = '1.2.0';
3492
3492
 
3493
3493
  constructor(container, config) {
3494
3494
 
@@ -3800,6 +3800,6 @@ window.ContentGrowthWidget = ContentGrowthWidget;
3800
3800
  // ===== Expose to window =====
3801
3801
  window.ContentGrowthWidget = ContentGrowthWidget;
3802
3802
 
3803
- console.log('[ContentGrowthWidget] Loaded successfully v1.1.3');
3803
+ console.log('[ContentGrowthWidget] Loaded successfully v1.2.0');
3804
3804
 
3805
3805
  })(window);
@@ -1 +1 @@
1
- /***Content Growth Widget-Standalone Bundle*Version:1.1.3*https:*/(function(window){'use strict';(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?factory(exports):typeof define==='function'&&define.amd?define(['exports'],factory):(global=typeof globalThis!=='undefined'?globalThis:global||self,factory(global.marked={}));})(this,(function(exports){'use strict';function _getDefaults(){return{async:false,breaks:false,extensions:null,gfm:true,hooks:null,pedantic:false,renderer:null,silent:false,tokenizer:null,walkTokens:null};}exports.defaults=_getDefaults();function changeDefaults(newDefaults){exports.defaults=newDefaults;}const escapeTest=/[&<>"']/;const escapeReplace=new RegExp(escapeTest.source,'g');const escapeTestNoEncode=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/;const escapeReplaceNoEncode=new RegExp(escapeTestNoEncode.source,'g');const escapeReplacements={'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'};const getEscapeReplacement=(ch)=>escapeReplacements[ch];function escape$1(html,encode){if (encode){if (escapeTest.test(html)){return html.replace(escapeReplace,getEscapeReplacement);}} else{if (escapeTestNoEncode.test(html)){return html.replace(escapeReplaceNoEncode,getEscapeReplacement);}}return html;}const unescapeTest=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function unescape(html){return html.replace(unescapeTest,(_,n)=>{n=n.toLowerCase();if (n==='colon')return ':';if (n.charAt(0)==='#'){return n.charAt(1)==='x'?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1));}return '';});}const caret=/(^|[^\[])\^/g;function edit(regex,opt){let source=typeof regex==='string'?regex:regex.source;opt=opt||'';const obj={replace:(name,val)=>{let valSource=typeof val==='string'?val:val.source;valSource=valSource.replace(caret,'$1');source=source.replace(name,valSource);return obj;},getRegex:()=>{return new RegExp(source,opt);}};return obj;}function cleanUrl(href){try{href=encodeURI(href).replace(/%25/g,'%');} catch (e){return null;}return href;}const noopTest={exec:()=>null};function splitCells(tableRow,count){const row=tableRow.replace(/\|/g,(match,offset,str)=>{let escaped=false;let curr=offset;while (--curr>=0&&str[curr]==='\\')escaped=!escaped;if (escaped){return '|';} else{return '|';}}),cells=row.split(/\|/);let i=0;if (!cells[0].trim()){cells.shift();}if (cells.length>0&&!cells[cells.length-1].trim()){cells.pop();}if (count){if (cells.length>count){cells.splice(count);} else{while (cells.length<count)cells.push('');}}for (;i<cells.length;i++){cells[i]=cells[i].trim().replace(/\\\|/g,'|');}return cells;}function rtrim(str,c,invert){const l=str.length;if (l===0){return '';}let suffLen=0;while (suffLen<l){const currChar=str.charAt(l-suffLen-1);if (currChar===c&&!invert){suffLen++;} else if (currChar!==c&&invert){suffLen++;} else{break;}}return str.slice(0,l-suffLen);}function findClosingBracket(str,b){if (str.indexOf(b[1])===-1){return-1;}let level=0;for (let i=0;i<str.length;i++){if (str[i]==='\\'){i++;} else if (str[i]===b[0]){level++;} else if (str[i]===b[1]){level--;if (level<0){return i;}}}return-1;}function outputLink(cap,link,raw,lexer){const href=link.href;const title=link.title?escape$1(link.title):null;const text=cap[1].replace(/\\([\[\]])/g,'$1');if (cap[0].charAt(0)!=='!'){lexer.state.inLink=true;const token={type:'link',raw,href,title,text,tokens:lexer.inlineTokens(text)};lexer.state.inLink=false;return token;}return{type:'image',raw,href,title,text:escape$1(text)};}function indentCodeCompensation(raw,text){const matchIndentToCode=raw.match(/^(\s+)(?:```)/);if (matchIndentToCode===null){return text;}const indentToCode=matchIndentToCode[1];return text .split('\n').map(node=>{const matchIndentInNode=node.match(/^\s+/);if (matchIndentInNode===null){return node;}const [indentInNode]=matchIndentInNode;if (indentInNode.length>=indentToCode.length){return node.slice(indentToCode.length);}return node;}).join('\n');}class _Tokenizer{options;rules;lexer;constructor(options){this.options=options||exports.defaults;}space(src){const cap=this.rules.block.newline.exec(src);if (cap&&cap[0].length>0){return{type:'space',raw:cap[0]};}}code(src){const cap=this.rules.block.code.exec(src);if (cap){const text=cap[0].replace(/^{1,4}/gm,'');return{type:'code',raw:cap[0],codeBlockStyle:'indented',text:!this.options.pedantic?rtrim(text,'\n'):text};}}fences(src){const cap=this.rules.block.fences.exec(src);if (cap){const raw=cap[0];const text=indentCodeCompensation(raw,cap[3]||'');return{type:'code',raw,lang:cap[2]?cap[2].trim().replace(this.rules.inline.anyPunctuation,'$1'):cap[2],text};}}heading(src){const cap=this.rules.block.heading.exec(src);if (cap){let text=cap[2].trim();if (/#$/.test(text)){const trimmed=rtrim(text,'#');if (this.options.pedantic){text=trimmed.trim();} else if (!trimmed||/$/.test(trimmed)){text=trimmed.trim();}}return{type:'heading',raw:cap[0],depth:cap[1].length,text,tokens:this.lexer.inline(text)};}}hr(src){const cap=this.rules.block.hr.exec(src);if (cap){return{type:'hr',raw:cap[0]};}}blockquote(src){const cap=this.rules.block.blockquote.exec(src);if (cap){const text=rtrim(cap[0].replace(/^*>[ \t]?/gm,''),'\n');const top=this.lexer.state.top;this.lexer.state.top=true;const tokens=this.lexer.blockTokens(text);this.lexer.state.top=top;return{type:'blockquote',raw:cap[0],tokens,text};}}list(src){let cap=this.rules.block.list.exec(src);if (cap){let bull=cap[1].trim();const isordered=bull.length>1;const list={type:'list',raw:'',ordered:isordered,start:isordered?+bull.slice(0,-1):'',loose:false,items:[]};bull=isordered?`\\d{1,9}\\${bull.slice(-1)}`:`\\${bull}`;if (this.options.pedantic){bull=isordered?bull:'[*+-]';}const itemRegex=new RegExp(`^({0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`);let raw='';let itemContents='';let endsWithBlankLine=false;while (src){let endEarly=false;if (!(cap=itemRegex.exec(src))){break;}if (this.rules.block.hr.test(src)){break;}raw=cap[0];src=src.substring(raw.length);let line=cap[2].split('\n',1)[0].replace(/^\t+/,(t)=>' '.repeat(3*t.length));let nextLine=src.split('\n',1)[0];let indent=0;if (this.options.pedantic){indent=2;itemContents=line.trimStart();} else{indent=cap[2].search(/[^ ]/);indent=indent>4?1:indent;itemContents=line.slice(indent);indent+=cap[1].length;}let blankLine=false;if (!line&&/^*$/.test(nextLine)){raw+=nextLine+'\n';src=src.substring(nextLine.length+1);endEarly=true;}if (!endEarly){const nextBulletRegex=new RegExp(`^{0,${Math.min(3,indent-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`);const hrRegex=new RegExp(`^{0,${Math.min(3,indent-1)}}((?:-*){3,}|(?:_*){3,}|(?:\\**){3,})(?:\\n+|$)`);const fencesBeginRegex=new RegExp(`^{0,${Math.min(3,indent-1)}}(?:\`\`\`|~~~)`);const headingBeginRegex=new RegExp(`^{0,${Math.min(3,indent-1)}}#`);while (src){const rawLine=src.split('\n',1)[0];nextLine=rawLine;if (this.options.pedantic){nextLine=nextLine.replace(/^{1,4}(?=({4})*[^ ])/g,' ');}if (fencesBeginRegex.test(nextLine)){break;}if (headingBeginRegex.test(nextLine)){break;}if (nextBulletRegex.test(nextLine)){break;}if (hrRegex.test(src)){break;}if (nextLine.search(/[^ ]/)>=indent||!nextLine.trim()){itemContents+='\n'+nextLine.slice(indent);} else{if (blankLine){break;}if (line.search(/[^ ]/)>=4){break;}if (fencesBeginRegex.test(line)){break;}if (headingBeginRegex.test(line)){break;}if (hrRegex.test(line)){break;}itemContents+='\n'+nextLine;}if (!blankLine&&!nextLine.trim()){blankLine=true;}raw+=rawLine+'\n';src=src.substring(rawLine.length+1);line=nextLine.slice(indent);}}if (!list.loose){if (endsWithBlankLine){list.loose=true;} else if (/\n*\n*$/.test(raw)){endsWithBlankLine=true;}}let istask=null;let ischecked;if (this.options.gfm){istask=/^\[[ xX]\]/.exec(itemContents);if (istask){ischecked=istask[0]!=='[ ] ';itemContents=itemContents.replace(/^\[[ xX]\]+/,'');}}list.items.push({type:'list_item',raw,task:!!istask,checked:ischecked,loose:false,text:itemContents,tokens:[]});list.raw+=raw;}list.items[list.items.length-1].raw=raw.trimEnd();(list.items[list.items.length-1]).text=itemContents.trimEnd();list.raw=list.raw.trimEnd();for (let i=0;i<list.items.length;i++){this.lexer.state.top=false;list.items[i].tokens=this.lexer.blockTokens(list.items[i].text,[]);if (!list.loose){const spacers=list.items[i].tokens.filter(t=>t.type==='space');const hasMultipleLineBreaks=spacers.length>0&&spacers.some(t=>/\n.*\n/.test(t.raw));list.loose=hasMultipleLineBreaks;}}if (list.loose){for (let i=0;i<list.items.length;i++){list.items[i].loose=true;}}return list;}}html(src){const cap=this.rules.block.html.exec(src);if (cap){const token={type:'html',block:true,raw:cap[0],pre:cap[1]==='pre'||cap[1]==='script'||cap[1]==='style',text:cap[0]};return token;}}def(src){const cap=this.rules.block.def.exec(src);if (cap){const tag=cap[1].toLowerCase().replace(/\s+/g,' ');const href=cap[2]?cap[2].replace(/^<(.*)>$/,'$1').replace(this.rules.inline.anyPunctuation,'$1'):'';const title=cap[3]?cap[3].substring(1,cap[3].length-1).replace(this.rules.inline.anyPunctuation,'$1'):cap[3];return{type:'def',tag,raw:cap[0],href,title};}}table(src){const cap=this.rules.block.table.exec(src);if (!cap){return;}if (!/[:|]/.test(cap[2])){return;}const headers=splitCells(cap[1]);const aligns=cap[2].replace(/^\||\|*$/g,'').split('|');const rows=cap[3]&&cap[3].trim()?cap[3].replace(/\n[ \t]*$/,'').split('\n'):[];const item={type:'table',raw:cap[0],header:[],align:[],rows:[]};if (headers.length!==aligns.length){return;}for (const align of aligns){if (/^*-+:*$/.test(align)){item.align.push('right');} else if (/^*:-+:*$/.test(align)){item.align.push('center');} else if (/^*:-+*$/.test(align)){item.align.push('left');} else{item.align.push(null);}}for (const header of headers){item.header.push({text:header,tokens:this.lexer.inline(header)});}for (const row of rows){item.rows.push(splitCells(row,item.header.length).map(cell=>{return{text:cell,tokens:this.lexer.inline(cell)};}));}return item;}lheading(src){const cap=this.rules.block.lheading.exec(src);if (cap){return{type:'heading',raw:cap[0],depth:cap[2].charAt(0)==='='?1:2,text:cap[1],tokens:this.lexer.inline(cap[1])};}}paragraph(src){const cap=this.rules.block.paragraph.exec(src);if (cap){const text=cap[1].charAt(cap[1].length-1)==='\n'?cap[1].slice(0,-1):cap[1];return{type:'paragraph',raw:cap[0],text,tokens:this.lexer.inline(text)};}}text(src){const cap=this.rules.block.text.exec(src);if (cap){return{type:'text',raw:cap[0],text:cap[0],tokens:this.lexer.inline(cap[0])};}}escape(src){const cap=this.rules.inline.escape.exec(src);if (cap){return{type:'escape',raw:cap[0],text:escape$1(cap[1])};}}tag(src){const cap=this.rules.inline.tag.exec(src);if (cap){if (!this.lexer.state.inLink&&/^<a/i.test(cap[0])){this.lexer.state.inLink=true;} else if (this.lexer.state.inLink&&/^<\/a>/i.test(cap[0])){this.lexer.state.inLink=false;}if (!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])){this.lexer.state.inRawBlock=true;} else if (this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])){this.lexer.state.inRawBlock=false;}return{type:'html',raw:cap[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:false,text:cap[0]};}}link(src){const cap=this.rules.inline.link.exec(src);if (cap){const trimmedUrl=cap[2].trim();if (!this.options.pedantic&&/^</.test(trimmedUrl)){if (!(/>$/.test(trimmedUrl))){return;}const rtrimSlash=rtrim(trimmedUrl.slice(0,-1),'\\');if ((trimmedUrl.length-rtrimSlash.length)%2===0){return;}} else{const lastParenIndex=findClosingBracket(cap[2],'()');if (lastParenIndex>-1){const start=cap[0].indexOf('!')===0?5:4;const linkLen=start+cap[1].length+lastParenIndex;cap[2]=cap[2].substring(0,lastParenIndex);cap[0]=cap[0].substring(0,linkLen).trim();cap[3]='';}}let href=cap[2];let title='';if (this.options.pedantic){const link=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);if (link){href=link[1];title=link[3];}} else{title=cap[3]?cap[3].slice(1,-1):'';}href=href.trim();if (/^</.test(href)){if (this.options.pedantic&&!(/>$/.test(trimmedUrl))){href=href.slice(1);} else{href=href.slice(1,-1);}}return outputLink(cap,{href:href?href.replace(this.rules.inline.anyPunctuation,'$1'):href,title:title?title.replace(this.rules.inline.anyPunctuation,'$1'):title},cap[0],this.lexer);}}reflink(src,links){let cap;if ((cap=this.rules.inline.reflink.exec(src))||(cap=this.rules.inline.nolink.exec(src))){const linkString=(cap[2]||cap[1]).replace(/\s+/g,' ');const link=links[linkString.toLowerCase()];if (!link){const text=cap[0].charAt(0);return{type:'text',raw:text,text};}return outputLink(cap,link,cap[0],this.lexer);}}emStrong(src,maskedSrc,prevChar=''){let match=this.rules.inline.emStrongLDelim.exec(src);if (!match)return;if (match[3]&&prevChar.match(/[\p{L}\p{N}]/u))return;const nextChar=match[1]||match[2]||'';if (!nextChar||!prevChar||this.rules.inline.punctuation.exec(prevChar)){const lLength=[...match[0]].length-1;let rDelim,rLength,delimTotal=lLength,midDelimTotal=0;const endReg=match[0][0]==='*'?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;endReg.lastIndex=0;maskedSrc=maskedSrc.slice(-1*src.length+lLength);while ((match=endReg.exec(maskedSrc))!=null){rDelim=match[1]||match[2]||match[3]||match[4]||match[5]||match[6];if (!rDelim)continue;rLength=[...rDelim].length;if (match[3]||match[4]){delimTotal+=rLength;continue;} else if (match[5]||match[6]){if (lLength%3&&!((lLength+rLength)%3)){midDelimTotal+=rLength;continue;}}delimTotal-=rLength;if (delimTotal>0)continue;rLength=Math.min(rLength,rLength+delimTotal+midDelimTotal);const lastCharLength=[...match[0]][0].length;const raw=src.slice(0,lLength+match.index+lastCharLength+rLength);if (Math.min(lLength,rLength)%2){const text=raw.slice(1,-1);return{type:'em',raw,text,tokens:this.lexer.inlineTokens(text)};}const text=raw.slice(2,-2);return{type:'strong',raw,text,tokens:this.lexer.inlineTokens(text)};}}}codespan(src){const cap=this.rules.inline.code.exec(src);if (cap){let text=cap[2].replace(/\n/g,' ');const hasNonSpaceChars=/[^ ]/.test(text);const hasSpaceCharsOnBothEnds=/^/.test(text)&&/$/.test(text);if (hasNonSpaceChars&&hasSpaceCharsOnBothEnds){text=text.substring(1,text.length-1);}text=escape$1(text,true);return{type:'codespan',raw:cap[0],text};}}br(src){const cap=this.rules.inline.br.exec(src);if (cap){return{type:'br',raw:cap[0]};}}del(src){const cap=this.rules.inline.del.exec(src);if (cap){return{type:'del',raw:cap[0],text:cap[2],tokens:this.lexer.inlineTokens(cap[2])};}}autolink(src){const cap=this.rules.inline.autolink.exec(src);if (cap){let text,href;if (cap[2]==='@'){text=escape$1(cap[1]);href='mailto:'+text;} else{text=escape$1(cap[1]);href=text;}return{type:'link',raw:cap[0],text,href,tokens:[{type:'text',raw:text,text}]};}}url(src){let cap;if (cap=this.rules.inline.url.exec(src)){let text,href;if (cap[2]==='@'){text=escape$1(cap[0]);href='mailto:'+text;} else{let prevCapZero;do{prevCapZero=cap[0];cap[0]=this.rules.inline._backpedal.exec(cap[0])?.[0]??'';}while (prevCapZero!==cap[0]);text=escape$1(cap[0]);if (cap[1]==='www.'){href='http:} else{href=cap[0];}}return{type:'link',raw:cap[0],text,href,tokens:[{type:'text',raw:text,text}]};}}inlineText(src){const cap=this.rules.inline.text.exec(src);if (cap){let text;if (this.lexer.state.inRawBlock){text=cap[0];} else{text=escape$1(cap[0]);}return{type:'text',raw:cap[0],text};}}}const newline=/^(?:*(?:\n|$))+/;const blockCode=/^({4}[^\n]+(?:\n(?:*(?:\n|$))*)?)+/;const fences=/^{0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?:{0,3}\1[~`]**(?=\n|$)|$)/;const hr=/^{0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;const heading=/^{0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;const bullet=/(?:[*+-]|\d{1,9}[.)])/;const lheading=edit(/^(?!bull)((?:.|\n(?!\s*?\n|bull))+?)\n{0,3}(=+|-+)*(?:\n+|$)/).replace(/bull/g,bullet).getRegex();const _paragraph=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|+\n)[^\n]+)*)/;const blockText=/^[^\n]+/;const _blockLabel=/(?!\s*\])(?:\\.|[^\[\]\\])+/;const def=edit(/^{0,3}\[(label)\]:*(?:\n*)?([^<\s][^\s]*|<.*?>)(?:(?:+(?:\n*)?|*\n*)(title))?*(?:\n+|$)/).replace('label',_blockLabel).replace('title',/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();const list=edit(/^({0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,bullet).getRegex();const _tag='address|article|aside|base|basefont|blockquote|body|caption'+'|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'+'|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'+'|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'+'|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'+'|track|ul';const _comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/;const html=edit('^{0,3}(?:'+'<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)'+'|comment[^\\n]*(\\n+|$)'+'|<\\?[\\s\\S]*?(?:\\?>\\n*|$)'+'|<![A-Z][\\s\\S]*?(?:>\\n*|$)'+'|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)'+'|</?(tag)(?:+|\\n|/?>)[\\s\\S]*?(?:(?:\\n*)+\\n|$)'+'|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*?*/?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n*)+\\n|$)'+'|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n*)+\\n|$)'+')','i').replace('comment',_comment).replace('tag',_tag).replace('attribute',/+[a-zA-Z:_][\w.:-]*(?:*=*"[^"\n]*"|*=*'[^'\n]*'|*=*[^\s"'=<>`]+)?/).getRegex();const paragraph=edit(_paragraph).replace('hr',hr).replace('heading','{0,3}#{1,6}(?:\\s|$)').replace('|lheading','').replace('|table','').replace('blockquote','{0,3}>').replace('fences','{0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list','{0,3}(?:[*+-]|1[.)])').replace('html','</?(?:tag)(?:+|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag',_tag).getRegex();const blockquote=edit(/^({0,3}>?(paragraph|[^\n]*)(?:\n|$))+/).replace('paragraph',paragraph).getRegex();const blockNormal={blockquote,code:blockCode,def,fences,heading,hr,html,lheading,list,newline,paragraph,table:noopTest,text:blockText};const gfmTable=edit('^*([^\\n ].*)\\n'+'{0,3}((?:\\|*)?:?-+:?*(?:\\|*:?-+:?*)*(?:\\|*)?)'+'(?:\\n((?:(?!*\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)').replace('hr',hr).replace('heading','{0,3}#{1,6}(?:\\s|$)').replace('blockquote','{0,3}>').replace('code','{4}[^\\n]').replace('fences','{0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list','{0,3}(?:[*+-]|1[.)])').replace('html','</?(?:tag)(?:+|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag',_tag).getRegex();const blockGfm={...blockNormal,table:gfmTable,paragraph:edit(_paragraph).replace('hr',hr).replace('heading','{0,3}#{1,6}(?:\\s|$)').replace('|lheading','').replace('table',gfmTable).replace('blockquote','{0,3}>').replace('fences','{0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list','{0,3}(?:[*+-]|1[.)])').replace('html','</?(?:tag)(?:+|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag',_tag).getRegex()};const blockPedantic={...blockNormal,html:edit('^*(?:comment*(?:\\n|\\s*$)'+'|<(tag)[\\s\\S]+?</\\1>*(?:\\n{2,}|\\s*$)'+'|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?>*(?:\\n{2,}|\\s*$))').replace('comment',_comment).replace(/tag/g,'(?!(?:'+'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'+'|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'+'\\b)\\w+(?!:|[^\\w\\s@]*@)\\b').getRegex(),def:/^*\[([^\]]+)\]:*<?([^\s>]+)>?(?:+(["(][^\n]+[")]))?*(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:noopTest,lheading:/^(.+?)\n{0,3}(=+|-+)*(?:\n+|$)/,paragraph:edit(_paragraph).replace('hr',hr).replace('heading','*#{1,6}*[^\n]').replace('lheading',lheading).replace('|table','').replace('blockquote','{0,3}>').replace('|fences','').replace('|list','').replace('|html','').replace('|tag','').getRegex()};const escape=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;const inlineCode=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;const br=/^({2,}|\\)\n(?!\s*$)/;const inlineText=/^(`+|[^`])(?:(?={2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?={2,}\n)))/;const _punctuation='\\p{P}$+<=>`^|~';const punctuation=edit(/^((?![*_])[\spunctuation])/,'u').replace(/punctuation/g,_punctuation).getRegex();const blockSkip=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g;const emStrongLDelim=edit(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,'u').replace(/punct/g,_punctuation).getRegex();const emStrongRDelimAst=edit('^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)'+'|[^*]+(?=[^*])'+'|(?!\\*)[punct](\\*+)(?=[\\s]|$)'+'|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)'+'|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])'+'|[\\s](\\*+)(?!\\*)(?=[punct])'+'|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])'+'|[^punct\\s](\\*+)(?=[^punct\\s])','gu').replace(/punct/g,_punctuation).getRegex();const emStrongRDelimUnd=edit('^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)'+'|[^_]+(?=[^_])'+'|(?!_)[punct](_+)(?=[\\s]|$)'+'|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)'+'|(?!_)[punct\\s](_+)(?=[^punct\\s])'+'|[\\s](_+)(?!_)(?=[punct])'+'|(?!_)[punct](_+)(?!_)(?=[punct])','gu').replace(/punct/g,_punctuation).getRegex();const anyPunctuation=edit(/\\([punct])/,'gu').replace(/punct/g,_punctuation).getRegex();const autolink=edit(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace('scheme',/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace('email',/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();const _inlineComment=edit(_comment).replace('(?:-->|$)','-->').getRegex();const tag=edit('^comment'+'|^</[a-zA-Z][\\w:-]*\\s*>'+'|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>'+'|^<\\?[\\s\\S]*?\\?>'+'|^<![a-zA-Z]+\\s[\\s\\S]*?>'+'|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>').replace('comment',_inlineComment).replace('attribute',/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();const _inlineLabel=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;const link=edit(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace('label',_inlineLabel).replace('href',/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace('title',/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();const reflink=edit(/^!?\[(label)\]\[(ref)\]/).replace('label',_inlineLabel).replace('ref',_blockLabel).getRegex();const nolink=edit(/^!?\[(ref)\](?:\[\])?/).replace('ref',_blockLabel).getRegex();const reflinkSearch=edit('reflink|nolink(?!\\()','g').replace('reflink',reflink).replace('nolink',nolink).getRegex();const inlineNormal={_backpedal:noopTest,anyPunctuation,autolink,blockSkip,br,code:inlineCode,del:noopTest,emStrongLDelim,emStrongRDelimAst,emStrongRDelimUnd,escape,link,nolink,punctuation,reflink,reflinkSearch,tag,text:inlineText,url:noopTest};const inlinePedantic={...inlineNormal,link:edit(/^!?\[(label)\]\((.*?)\)/).replace('label',_inlineLabel).getRegex(),reflink:edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label',_inlineLabel).getRegex()};const inlineGfm={...inlineNormal,escape:edit(escape).replace('])','~|])').getRegex(),url:edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,'i').replace('email',/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?={2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?={2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/};const inlineBreaks={...inlineGfm,br:edit(br).replace('{2,}','*').getRegex(),text:edit(inlineGfm.text).replace('\\b_','\\b_|{2,}\\n').replace(/\{2,\}/g,'*').getRegex()};const block={normal:blockNormal,gfm:blockGfm,pedantic:blockPedantic};const inline={normal:inlineNormal,gfm:inlineGfm,breaks:inlineBreaks,pedantic:inlinePedantic};class _Lexer{tokens;options;state;tokenizer;inlineQueue;constructor(options){this.tokens=[];this.tokens.links=Object.create(null);this.options=options||exports.defaults;this.options.tokenizer=this.options.tokenizer||new _Tokenizer();this.tokenizer=this.options.tokenizer;this.tokenizer.options=this.options;this.tokenizer.lexer=this;this.inlineQueue=[];this.state={inLink:false,inRawBlock:false,top:true};const rules={block:block.normal,inline:inline.normal};if (this.options.pedantic){rules.block=block.pedantic;rules.inline=inline.pedantic;} else if (this.options.gfm){rules.block=block.gfm;if (this.options.breaks){rules.inline=inline.breaks;} else{rules.inline=inline.gfm;}}this.tokenizer.rules=rules;}static get rules(){return{block,inline};}static lex(src,options){const lexer=new _Lexer(options);return lexer.lex(src);}static lexInline(src,options){const lexer=new _Lexer(options);return lexer.inlineTokens(src);}lex(src){src=src .replace(/\r\n|\r/g,'\n');this.blockTokens(src,this.tokens);for (let i=0;i<this.inlineQueue.length;i++){const next=this.inlineQueue[i];this.inlineTokens(next.src,next.tokens);}this.inlineQueue=[];return this.tokens;}blockTokens(src,tokens=[]){if (this.options.pedantic){src=src.replace(/\t/g,' ').replace(/^+$/gm,'');} else{src=src.replace(/^(*)(\t+)/gm,(_,leading,tabs)=>{return leading+' '.repeat(tabs.length);});}let token;let lastToken;let cutSrc;let lastParagraphClipped;while (src){if (this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((extTokenizer)=>{if (token=extTokenizer.call({lexer:this},src,tokens)){src=src.substring(token.raw.length);tokens.push(token);return true;}return false;})){continue;}if (token=this.tokenizer.space(src)){src=src.substring(token.raw.length);if (token.raw.length===1&&tokens.length>0){tokens[tokens.length-1].raw+='\n';} else{tokens.push(token);}continue;}if (token=this.tokenizer.code(src)){src=src.substring(token.raw.length);lastToken=tokens[tokens.length-1];if (lastToken&&(lastToken.type==='paragraph'||lastToken.type==='text')){lastToken.raw+='\n'+token.raw;lastToken.text+='\n'+token.text;this.inlineQueue[this.inlineQueue.length-1].src=lastToken.text;} else{tokens.push(token);}continue;}if (token=this.tokenizer.fences(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.heading(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.hr(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.blockquote(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.list(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.html(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.def(src)){src=src.substring(token.raw.length);lastToken=tokens[tokens.length-1];if (lastToken&&(lastToken.type==='paragraph'||lastToken.type==='text')){lastToken.raw+='\n'+token.raw;lastToken.text+='\n'+token.raw;this.inlineQueue[this.inlineQueue.length-1].src=lastToken.text;} else if (!this.tokens.links[token.tag]){this.tokens.links[token.tag]={href:token.href,title:token.title};}continue;}if (token=this.tokenizer.table(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.lheading(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}cutSrc=src;if (this.options.extensions&&this.options.extensions.startBlock){let startIndex=Infinity;const tempSrc=src.slice(1);let tempStart;this.options.extensions.startBlock.forEach((getStartIndex)=>{tempStart=getStartIndex.call({lexer:this},tempSrc);if (typeof tempStart==='number'&&tempStart>=0){startIndex=Math.min(startIndex,tempStart);}});if (startIndex<Infinity&&startIndex>=0){cutSrc=src.substring(0,startIndex+1);}}if (this.state.top&&(token=this.tokenizer.paragraph(cutSrc))){lastToken=tokens[tokens.length-1];if (lastParagraphClipped&&lastToken.type==='paragraph'){lastToken.raw+='\n'+token.raw;lastToken.text+='\n'+token.text;this.inlineQueue.pop();this.inlineQueue[this.inlineQueue.length-1].src=lastToken.text;} else{tokens.push(token);}lastParagraphClipped=(cutSrc.length!==src.length);src=src.substring(token.raw.length);continue;}if (token=this.tokenizer.text(src)){src=src.substring(token.raw.length);lastToken=tokens[tokens.length-1];if (lastToken&&lastToken.type==='text'){lastToken.raw+='\n'+token.raw;lastToken.text+='\n'+token.text;this.inlineQueue.pop();this.inlineQueue[this.inlineQueue.length-1].src=lastToken.text;} else{tokens.push(token);}continue;}if (src){const errMsg='Infinite loop on byte:'+src.charCodeAt(0);if (this.options.silent){console.error(errMsg);break;} else{throw new Error(errMsg);}}}this.state.top=true;return tokens;}inline(src,tokens=[]){this.inlineQueue.push({src,tokens});return tokens;}inlineTokens(src,tokens=[]){let token,lastToken,cutSrc;let maskedSrc=src;let match;let keepPrevChar,prevChar;if (this.tokens.links){const links=Object.keys(this.tokens.links);if (links.length>0){while ((match=this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc))!=null){if (links.includes(match[0].slice(match[0].lastIndexOf('[')+1,-1))){maskedSrc=maskedSrc.slice(0,match.index)+'['+'a'.repeat(match[0].length-2)+']'+maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);}}}}while ((match=this.tokenizer.rules.inline.blockSkip.exec(maskedSrc))!=null){maskedSrc=maskedSrc.slice(0,match.index)+'['+'a'.repeat(match[0].length-2)+']'+maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);}while ((match=this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc))!=null){maskedSrc=maskedSrc.slice(0,match.index)+'++'+maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);}while (src){if (!keepPrevChar){prevChar='';}keepPrevChar=false;if (this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((extTokenizer)=>{if (token=extTokenizer.call({lexer:this},src,tokens)){src=src.substring(token.raw.length);tokens.push(token);return true;}return false;})){continue;}if (token=this.tokenizer.escape(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.tag(src)){src=src.substring(token.raw.length);lastToken=tokens[tokens.length-1];if (lastToken&&token.type==='text'&&lastToken.type==='text'){lastToken.raw+=token.raw;lastToken.text+=token.text;} else{tokens.push(token);}continue;}if (token=this.tokenizer.link(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.reflink(src,this.tokens.links)){src=src.substring(token.raw.length);lastToken=tokens[tokens.length-1];if (lastToken&&token.type==='text'&&lastToken.type==='text'){lastToken.raw+=token.raw;lastToken.text+=token.text;} else{tokens.push(token);}continue;}if (token=this.tokenizer.emStrong(src,maskedSrc,prevChar)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.codespan(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.br(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.del(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.autolink(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (!this.state.inLink&&(token=this.tokenizer.url(src))){src=src.substring(token.raw.length);tokens.push(token);continue;}cutSrc=src;if (this.options.extensions&&this.options.extensions.startInline){let startIndex=Infinity;const tempSrc=src.slice(1);let tempStart;this.options.extensions.startInline.forEach((getStartIndex)=>{tempStart=getStartIndex.call({lexer:this},tempSrc);if (typeof tempStart==='number'&&tempStart>=0){startIndex=Math.min(startIndex,tempStart);}});if (startIndex<Infinity&&startIndex>=0){cutSrc=src.substring(0,startIndex+1);}}if (token=this.tokenizer.inlineText(cutSrc)){src=src.substring(token.raw.length);if (token.raw.slice(-1)!=='_'){prevChar=token.raw.slice(-1);}keepPrevChar=true;lastToken=tokens[tokens.length-1];if (lastToken&&lastToken.type==='text'){lastToken.raw+=token.raw;lastToken.text+=token.text;} else{tokens.push(token);}continue;}if (src){const errMsg='Infinite loop on byte:'+src.charCodeAt(0);if (this.options.silent){console.error(errMsg);break;} else{throw new Error(errMsg);}}}return tokens;}}class _Renderer{options;constructor(options){this.options=options||exports.defaults;}code(code,infostring,escaped){const lang=(infostring||'').match(/^\S*/)?.[0];code=code.replace(/\n$/,'')+'\n';if (!lang){return '<pre><code>'+(escaped?code:escape$1(code,true))+'</code></pre>\n';}return '<pre><code class="language-'+escape$1(lang)+'">'+(escaped?code:escape$1(code,true))+'</code></pre>\n';}blockquote(quote){return `<blockquote>\n${quote}</blockquote>\n`;}html(html,block){return html;}heading(text,level,raw){return `<h${level}>${text}</h${level}>\n`;}hr(){return '<hr>\n';}list(body,ordered,start){const type=ordered?'ol':'ul';const startatt=(ordered&&start!==1)?(' start="'+start+'"'):'';return '<'+type+startatt+'>\n'+body+'</'+type+'>\n';}listitem(text,task,checked){return `<li>${text}</li>\n`;}checkbox(checked){return '<input '+(checked?'checked="" ':'')+'disabled="" type="checkbox">';}paragraph(text){return `<p>${text}</p>\n`;}table(header,body){if (body)body=`<tbody>${body}</tbody>`;return '<table>\n'+'<thead>\n'+header+'</thead>\n'+body+'</table>\n';}tablerow(content){return `<tr>\n${content}</tr>\n`;}tablecell(content,flags){const type=flags.header?'th':'td';const tag=flags.align?`<${type}align="${flags.align}">`:`<${type}>`;return tag+content+`</${type}>\n`;}strong(text){return `<strong>${text}</strong>`;}em(text){return `<em>${text}</em>`;}codespan(text){return `<code>${text}</code>`;}br(){return '<br>';}del(text){return `<del>${text}</del>`;}link(href,title,text){const cleanHref=cleanUrl(href);if (cleanHref===null){return text;}href=cleanHref;let out='<a href="'+href+'"';if (title){out+=' title="'+title+'"';}out+='>'+text+'</a>';return out;}image(href,title,text){const cleanHref=cleanUrl(href);if (cleanHref===null){return text;}href=cleanHref;let out=`<img src="${href}" alt="${text}"`;if (title){out+=` title="${title}"`;}out+='>';return out;}text(text){return text;}}class _TextRenderer{strong(text){return text;}em(text){return text;}codespan(text){return text;}del(text){return text;}html(text){return text;}text(text){return text;}link(href,title,text){return ''+text;}image(href,title,text){return ''+text;}br(){return '';}}class _Parser{options;renderer;textRenderer;constructor(options){this.options=options||exports.defaults;this.options.renderer=this.options.renderer||new _Renderer();this.renderer=this.options.renderer;this.renderer.options=this.options;this.textRenderer=new _TextRenderer();}static parse(tokens,options){const parser=new _Parser(options);return parser.parse(tokens);}static parseInline(tokens,options){const parser=new _Parser(options);return parser.parseInline(tokens);}parse(tokens,top=true){let out='';for (let i=0;i<tokens.length;i++){const token=tokens[i];if (this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[token.type]){const genericToken=token;const ret=this.options.extensions.renderers[genericToken.type].call({parser:this},genericToken);if (ret!==false||!['space','hr','heading','code','table','blockquote','list','html','paragraph','text'].includes(genericToken.type)){out+=ret||'';continue;}}switch (token.type){case 'space':{continue;}case 'hr':{out+=this.renderer.hr();continue;}case 'heading':{const headingToken=token;out+=this.renderer.heading(this.parseInline(headingToken.tokens),headingToken.depth,unescape(this.parseInline(headingToken.tokens,this.textRenderer)));continue;}case 'code':{const codeToken=token;out+=this.renderer.code(codeToken.text,codeToken.lang,!!codeToken.escaped);continue;}case 'table':{const tableToken=token;let header='';let cell='';for (let j=0;j<tableToken.header.length;j++){cell+=this.renderer.tablecell(this.parseInline(tableToken.header[j].tokens),{header:true,align:tableToken.align[j]});}header+=this.renderer.tablerow(cell);let body='';for (let j=0;j<tableToken.rows.length;j++){const row=tableToken.rows[j];cell='';for (let k=0;k<row.length;k++){cell+=this.renderer.tablecell(this.parseInline(row[k].tokens),{header:false,align:tableToken.align[k]});}body+=this.renderer.tablerow(cell);}out+=this.renderer.table(header,body);continue;}case 'blockquote':{const blockquoteToken=token;const body=this.parse(blockquoteToken.tokens);out+=this.renderer.blockquote(body);continue;}case 'list':{const listToken=token;const ordered=listToken.ordered;const start=listToken.start;const loose=listToken.loose;let body='';for (let j=0;j<listToken.items.length;j++){const item=listToken.items[j];const checked=item.checked;const task=item.task;let itemBody='';if (item.task){const checkbox=this.renderer.checkbox(!!checked);if (loose){if (item.tokens.length>0&&item.tokens[0].type==='paragraph'){item.tokens[0].text=checkbox+' '+item.tokens[0].text;if (item.tokens[0].tokens&&item.tokens[0].tokens.length>0&&item.tokens[0].tokens[0].type==='text'){item.tokens[0].tokens[0].text=checkbox+' '+item.tokens[0].tokens[0].text;}} else{item.tokens.unshift({type:'text',text:checkbox+' '});}} else{itemBody+=checkbox+' ';}}itemBody+=this.parse(item.tokens,loose);body+=this.renderer.listitem(itemBody,task,!!checked);}out+=this.renderer.list(body,ordered,start);continue;}case 'html':{const htmlToken=token;out+=this.renderer.html(htmlToken.text,htmlToken.block);continue;}case 'paragraph':{const paragraphToken=token;out+=this.renderer.paragraph(this.parseInline(paragraphToken.tokens));continue;}case 'text':{let textToken=token;let body=textToken.tokens?this.parseInline(textToken.tokens):textToken.text;while (i+1<tokens.length&&tokens[i+1].type==='text'){textToken=tokens[++i];body+='\n'+(textToken.tokens?this.parseInline(textToken.tokens):textToken.text);}out+=top?this.renderer.paragraph(body):body;continue;}default:{const errMsg='Token with "'+token.type+'" type was not found.';if (this.options.silent){console.error(errMsg);return '';} else{throw new Error(errMsg);}}}}return out;}parseInline(tokens,renderer){renderer=renderer||this.renderer;let out='';for (let i=0;i<tokens.length;i++){const token=tokens[i];if (this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[token.type]){const ret=this.options.extensions.renderers[token.type].call({parser:this},token);if (ret!==false||!['escape','html','link','image','strong','em','codespan','br','del','text'].includes(token.type)){out+=ret||'';continue;}}switch (token.type){case 'escape':{const escapeToken=token;out+=renderer.text(escapeToken.text);break;}case 'html':{const tagToken=token;out+=renderer.html(tagToken.text);break;}case 'link':{const linkToken=token;out+=renderer.link(linkToken.href,linkToken.title,this.parseInline(linkToken.tokens,renderer));break;}case 'image':{const imageToken=token;out+=renderer.image(imageToken.href,imageToken.title,imageToken.text);break;}case 'strong':{const strongToken=token;out+=renderer.strong(this.parseInline(strongToken.tokens,renderer));break;}case 'em':{const emToken=token;out+=renderer.em(this.parseInline(emToken.tokens,renderer));break;}case 'codespan':{const codespanToken=token;out+=renderer.codespan(codespanToken.text);break;}case 'br':{out+=renderer.br();break;}case 'del':{const delToken=token;out+=renderer.del(this.parseInline(delToken.tokens,renderer));break;}case 'text':{const textToken=token;out+=renderer.text(textToken.text);break;}default:{const errMsg='Token with "'+token.type+'" type was not found.';if (this.options.silent){console.error(errMsg);return '';} else{throw new Error(errMsg);}}}}return out;}}class _Hooks{options;constructor(options){this.options=options||exports.defaults;}static passThroughHooks=new Set([ 'preprocess','postprocess','processAllTokens' ]);preprocess(markdown){return markdown;}postprocess(html){return html;}processAllTokens(tokens){return tokens;}}class Marked{defaults=_getDefaults();options=this.setOptions;parse=this.#parseMarkdown(_Lexer.lex,_Parser.parse);parseInline=this.#parseMarkdown(_Lexer.lexInline,_Parser.parseInline);Parser=_Parser;Renderer=_Renderer;TextRenderer=_TextRenderer;Lexer=_Lexer;Tokenizer=_Tokenizer;Hooks=_Hooks;constructor(...args){this.use(...args);}walkTokens(tokens,callback){let values=[];for (const token of tokens){values=values.concat(callback.call(this,token));switch (token.type){case 'table':{const tableToken=token;for (const cell of tableToken.header){values=values.concat(this.walkTokens(cell.tokens,callback));}for (const row of tableToken.rows){for (const cell of row){values=values.concat(this.walkTokens(cell.tokens,callback));}}break;}case 'list':{const listToken=token;values=values.concat(this.walkTokens(listToken.items,callback));break;}default:{const genericToken=token;if (this.defaults.extensions?.childTokens?.[genericToken.type]){this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens)=>{const tokens=genericToken[childTokens].flat(Infinity);values=values.concat(this.walkTokens(tokens,callback));});} else if (genericToken.tokens){values=values.concat(this.walkTokens(genericToken.tokens,callback));}}}}return values;}use(...args){const extensions=this.defaults.extensions||{renderers:{},childTokens:{}};args.forEach((pack)=>{const opts={...pack};opts.async=this.defaults.async||opts.async||false;if (pack.extensions){pack.extensions.forEach((ext)=>{if (!ext.name){throw new Error('extension name required');}if ('renderer' in ext){const prevRenderer=extensions.renderers[ext.name];if (prevRenderer){extensions.renderers[ext.name]=function(...args){let ret=ext.renderer.apply(this,args);if (ret===false){ret=prevRenderer.apply(this,args);}return ret;};} else{extensions.renderers[ext.name]=ext.renderer;}}if ('tokenizer' in ext){if (!ext.level||(ext.level!=='block'&&ext.level!=='inline')){throw new Error("extension level must be 'block' or 'inline'");}const extLevel=extensions[ext.level];if (extLevel){extLevel.unshift(ext.tokenizer);} else{extensions[ext.level]=[ext.tokenizer];}if (ext.start){if (ext.level==='block'){if (extensions.startBlock){extensions.startBlock.push(ext.start);} else{extensions.startBlock=[ext.start];}} else if (ext.level==='inline'){if (extensions.startInline){extensions.startInline.push(ext.start);} else{extensions.startInline=[ext.start];}}}}if ('childTokens' in ext&&ext.childTokens){extensions.childTokens[ext.name]=ext.childTokens;}});opts.extensions=extensions;}if (pack.renderer){const renderer=this.defaults.renderer||new _Renderer(this.defaults);for (const prop in pack.renderer){if (!(prop in renderer)){throw new Error(`renderer '${prop}' does not exist`);}if (prop==='options'){continue;}const rendererProp=prop;const rendererFunc=pack.renderer[rendererProp];const prevRenderer=renderer[rendererProp];renderer[rendererProp]=(...args)=>{let ret=rendererFunc.apply(renderer,args);if (ret===false){ret=prevRenderer.apply(renderer,args);}return ret||'';};}opts.renderer=renderer;}if (pack.tokenizer){const tokenizer=this.defaults.tokenizer||new _Tokenizer(this.defaults);for (const prop in pack.tokenizer){if (!(prop in tokenizer)){throw new Error(`tokenizer '${prop}' does not exist`);}if (['options','rules','lexer'].includes(prop)){continue;}const tokenizerProp=prop;const tokenizerFunc=pack.tokenizer[tokenizerProp];const prevTokenizer=tokenizer[tokenizerProp];tokenizer[tokenizerProp]=(...args)=>{let ret=tokenizerFunc.apply(tokenizer,args);if (ret===false){ret=prevTokenizer.apply(tokenizer,args);}return ret;};}opts.tokenizer=tokenizer;}if (pack.hooks){const hooks=this.defaults.hooks||new _Hooks();for (const prop in pack.hooks){if (!(prop in hooks)){throw new Error(`hook '${prop}' does not exist`);}if (prop==='options'){continue;}const hooksProp=prop;const hooksFunc=pack.hooks[hooksProp];const prevHook=hooks[hooksProp];if (_Hooks.passThroughHooks.has(prop)){hooks[hooksProp]=(arg)=>{if (this.defaults.async){return Promise.resolve(hooksFunc.call(hooks,arg)).then(ret=>{return prevHook.call(hooks,ret);});}const ret=hooksFunc.call(hooks,arg);return prevHook.call(hooks,ret);};} else{hooks[hooksProp]=(...args)=>{let ret=hooksFunc.apply(hooks,args);if (ret===false){ret=prevHook.apply(hooks,args);}return ret;};}}opts.hooks=hooks;}if (pack.walkTokens){const walkTokens=this.defaults.walkTokens;const packWalktokens=pack.walkTokens;opts.walkTokens=function(token){let values=[];values.push(packWalktokens.call(this,token));if (walkTokens){values=values.concat(walkTokens.call(this,token));}return values;};}this.defaults={...this.defaults,...opts};});return this;}setOptions(opt){this.defaults={...this.defaults,...opt};return this;}lexer(src,options){return _Lexer.lex(src,options??this.defaults);}parser(tokens,options){return _Parser.parse(tokens,options??this.defaults);}#parseMarkdown(lexer,parser){return(src,options)=>{const origOpt={...options};const opt={...this.defaults,...origOpt};if (this.defaults.async===true&&origOpt.async===false){if (!opt.silent){console.warn('marked():The async option was set to true by an extension. The async:false option sent to parse will be ignored.');}opt.async=true;}const throwError=this.#onError(!!opt.silent,!!opt.async);if (typeof src==='undefined'||src===null){return throwError(new Error('marked():input parameter is undefined or null'));}if (typeof src!=='string'){return throwError(new Error('marked():input parameter is of type '+Object.prototype.toString.call(src)+',string expected'));}if (opt.hooks){opt.hooks.options=opt;}if (opt.async){return Promise.resolve(opt.hooks?opt.hooks.preprocess(src):src).then(src=>lexer(src,opt)).then(tokens=>opt.hooks?opt.hooks.processAllTokens(tokens):tokens).then(tokens=>opt.walkTokens?Promise.all(this.walkTokens(tokens,opt.walkTokens)).then(()=>tokens):tokens).then(tokens=>parser(tokens,opt)).then(html=>opt.hooks?opt.hooks.postprocess(html):html).catch (throwError);}try{if (opt.hooks){src=opt.hooks.preprocess(src);}let tokens=lexer(src,opt);if (opt.hooks){tokens=opt.hooks.processAllTokens(tokens);}if (opt.walkTokens){this.walkTokens(tokens,opt.walkTokens);}let html=parser(tokens,opt);if (opt.hooks){html=opt.hooks.postprocess(html);}return html;} catch (e){return throwError(e);}};}#onError(silent,async){return(e)=>{e.message+='\nPlease report this to https:if (silent){const msg='<p>An error occurred:</p><pre>'+escape$1(e.message+'',true)+'</pre>';if (async){return Promise.resolve(msg);}return msg;}if (async){return Promise.reject(e);}throw e;};}}const markedInstance=new Marked();function marked(src,opt){return markedInstance.parse(src,opt);}marked.options=marked.setOptions=function(options){markedInstance.setOptions(options);marked.defaults=markedInstance.defaults;changeDefaults(marked.defaults);return marked;};marked.getDefaults=_getDefaults;marked.defaults=exports.defaults;marked.use=function(...args){markedInstance.use(...args);marked.defaults=markedInstance.defaults;changeDefaults(marked.defaults);return marked;};marked.walkTokens=function(tokens,callback){return markedInstance.walkTokens(tokens,callback);};marked.parseInline=markedInstance.parseInline;marked.Parser=_Parser;marked.parser=_Parser.parse;marked.Renderer=_Renderer;marked.TextRenderer=_TextRenderer;marked.Lexer=_Lexer;marked.lexer=_Lexer.lex;marked.Tokenizer=_Tokenizer;marked.Hooks=_Hooks;marked.parse=marked;const options=marked.options;const setOptions=marked.setOptions;const use=marked.use;const walkTokens=marked.walkTokens;const parseInline=marked.parseInline;const parse=marked;const parser=_Parser.parse;const lexer=_Lexer.lex;exports.Hooks=_Hooks;exports.Lexer=_Lexer;exports.Marked=Marked;exports.Parser=_Parser;exports.Renderer=_Renderer;exports.TextRenderer=_TextRenderer;exports.Tokenizer=_Tokenizer;exports.getDefaults=_getDefaults;exports.lexer=lexer;exports.marked=marked;exports.options=options;exports.parse=parse;exports.parseInline=parseInline;exports.parser=parser;exports.setOptions=setOptions;exports.use=use;exports.walkTokens=walkTokens;}));function formatDate(timestamp){const date=new Date(timestamp*1000);return date.toLocaleDateString('en-US',{year:'numeric',month:'short',day:'numeric'});}function calculateReadingTime(wordCountOrContent){if (!wordCountOrContent)return 'Unknown';const wordsPerMinute=200;let words;if (typeof wordCountOrContent==='number'){words=wordCountOrContent;if (words===0)return 'Unknown';} else{words=wordCountOrContent.trim().split(/\s+/).filter(w=>w.length>0).length;}const minutes=Math.ceil(words/wordsPerMinute);return `${minutes}min read`;}function truncate(text,maxLength=150){if (!text||text.length<=maxLength)return text;return text.substring(0,maxLength).trim()+'...';}function truncateBytes(text,maxBytes){if (!text||!maxBytes||maxBytes<=0)return text||'';const encoder=new TextEncoder();const bytes=encoder.encode(text);if (bytes.length<=maxBytes)return text;let lo=0,hi=text.length;while (lo<hi){const mid=Math.floor((lo+hi+1)/2);const slice=text.slice(0,mid);const len=encoder.encode(slice).length;if (len<=maxBytes)lo=mid;else hi=mid-1;}return text.slice(0,lo).trimEnd()+'...';}function escapeHtml(text){const div=document.createElement('div');div.textContent=text;return div.innerHTML;}function debounce(func,wait){let timeout;return function executedFunction(...args){const later=()=>{clearTimeout(timeout);func(...args);};clearTimeout(timeout);timeout=setTimeout(later,wait);};}class ContentGrowthAPI{constructor(config){this.apiKey=config.apiKey;this.baseUrl=config.baseUrl||'https:this.cache=new Map();this.cacheTTL=5*60*1000;}async fetchArticles(options={}){const{page=1,limit=12,tags=[],category}=options;const params=new URLSearchParams({page:page.toString(),limit:limit.toString()});if (tags.length>0){params.set('tag',tags.join(','));}if (category){params.set('category',category);}const url=`${this.baseUrl}/widget/articles?${params}`;const cacheKey=url;const cached=this.getFromCache(cacheKey);if (cached){return cached;}try{const response=await fetch(url,{headers:{'X-API-Key':this.apiKey}});if (!response.ok){const errorText=await response.text();console.error('[ContentGrowthAPI] Error response body:',errorText);throw new Error(`API Error:${response.status}${response.statusText}`);}const data=await response.json();this.setCache(cacheKey,data);return data;} catch (error){console.error('[ContentGrowthAPI] Failed to fetch articles:',error);throw error;}}async fetchArticle(uuid){const url=`${this.baseUrl}/widget/articles/${uuid}`;const cacheKey=url;const cached=this.getFromCache(cacheKey);if (cached){return cached;}try{const response=await fetch(url,{headers:{'X-API-Key':this.apiKey}});if (!response.ok){const errorText=await response.text();console.error('[ContentGrowthAPI] Error response body:',errorText);throw new Error(`API Error:${response.status}${response.statusText}`);}const data=await response.json();this.setCache(cacheKey,data);return data;} catch (error){console.error('[ContentGrowthAPI] Failed to fetch article:',error);throw error;}}async fetchArticleBySlug(slug){const url=`${this.baseUrl}/widget/articles/slug/${slug}`;const cacheKey=url;const cached=this.getFromCache(cacheKey);if (cached){return cached;}try{const response=await fetch(url,{headers:{'X-API-Key':this.apiKey}});if (!response.ok){const errorText=await response.text();console.error('[ContentGrowthAPI] Error response body:',errorText);throw new Error(`API Error:${response.status}${response.statusText}`);}const data=await response.json();this.setCache(cacheKey,data);return data;} catch (error){console.error('[ContentGrowthAPI] Failed to fetch article by slug:',error);throw error;}}getFromCache(key){const cached=this.cache.get(key);if (!cached)return null;const now=Date.now();if (now-cached.timestamp>this.cacheTTL){this.cache.delete(key);return null;}return cached.data;}setCache(key,data){this.cache.set(key,{data,timestamp:Date.now()});}clearCache(){this.cache.clear();}}class ContentCard{constructor(article,options={}){this.article=article;this.displayMode=options.displayMode||'compact';this.viewerMode=options.viewerMode||'inline';this.externalUrlPattern=options.externalUrlPattern||'/article/{id}';this.externalTarget=options.externalTarget||'article-{id}';this.onExpand=options.onExpand||null;this.onClick=options.onClick||null;this.aiSummaryMaxBytes=options.aiSummaryMaxBytes;}render(){const layoutMode=this.displayMode==='expanded'?'expanded':'compact';if (this.viewerMode==='external'){const link=document.createElement('a');link.className=`cg-card cg-card--${this.displayMode}`;link.dataset.contentId=this.article.uuid;let url=this.externalUrlPattern .replace('{id}',this.article.uuid).replace('{slug}',this.article.slug||this.article.uuid);let target=this.externalTarget .replace('{id}',this.article.uuid).replace('{slug}',this.article.slug||this.article.uuid);link.href=url;link.target=target;link.rel='noopener';if (layoutMode==='compact'){link.innerHTML=this.renderCompact();} else{link.innerHTML=this.renderExpanded();}const expandBtn=link.querySelector('.cg-expand-btn');if (expandBtn&&this.onExpand){expandBtn.addEventListener('click',(e)=>{e.preventDefault();e.stopPropagation();this.onExpand(this.article,link);});}return link;}const card=document.createElement('article');card.className=`cg-card cg-card--${this.displayMode}`;card.dataset.contentId=this.article.uuid;if (layoutMode==='compact'){card.innerHTML=this.renderCompact();} else{card.innerHTML=this.renderExpanded();}card.addEventListener('click',(e)=>{if (e.target.closest('.cg-expand-btn'))return;if (this.onClick){this.onClick(this.article);}});const expandBtn=card.querySelector('.cg-expand-btn');if (expandBtn&&this.onExpand){expandBtn.addEventListener('click',(e)=>{e.stopPropagation();this.onExpand(this.article,card);});}return card;}renderCompact(){const readingTime=calculateReadingTime(this.article.wordCount);return `<div class="cg-card-header"><h3 class="cg-card-title">${escapeHtml(this.article.title)}</h3><button class="cg-expand-btn" aria-label="Show more" title="Show summary"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M4 6L8 10L12 6" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></button></div><div class="cg-card-meta"><span class="cg-meta-item cg-author"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M7 7C8.65685 7 10 5.65685 10 4C10 2.34315 8.65685 1 7 1C5.34315 1 4 2.34315 4 4C4 5.65685 5.34315 7 7 7Z" stroke="currentColor" stroke-width="1.5"/><path d="M13 13C13 10.7909 10.3137 9 7 9C3.68629 9 1 10.7909 1 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${escapeHtml(this.article.authorName)}</span><span class="cg-meta-item cg-date"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1" y="2" width="12" height="11" rx="2" stroke="currentColor" stroke-width="1.5"/><path d="M4 1V3M10 1V3M1 5H13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${formatDate(this.article.publishedAt)}</span><span class="cg-meta-item cg-reading-time"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="7" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M7 3.5V7L9.5 9.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${readingTime}</span></div>`;}renderExpanded(){const readingTime=calculateReadingTime(this.article.wordCount);const summaryFull=this.article.summary||'';const summary=this.aiSummaryMaxBytes?truncateBytes(summaryFull,this.aiSummaryMaxBytes):summaryFull;const tags=this.article.tags||[];return `<div class="cg-card-header"><h3 class="cg-card-title">${escapeHtml(this.article.title)}</h3><button class="cg-expand-btn cg-expand-btn--collapse" aria-label="Show less" title="Hide summary"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M12 10L8 6L4 10" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></button></div>${summary?`<div class="cg-card-summary"><p>${escapeHtml(summary)}</p></div>`:''}${tags.length>0?`<div class="cg-card-tags">${tags.map(tag=>`<span class="cg-tag">${escapeHtml(tag)}</span>`).join('')}</div>`:''}<div class="cg-card-meta"><span class="cg-meta-item cg-author"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M7 7C8.65685 7 10 5.65685 10 4C10 2.34315 8.65685 1 7 1C5.34315 1 4 2.34315 4 4C4 5.65685 5.34315 7 7 7Z" stroke="currentColor" stroke-width="1.5"/><path d="M13 13C13 10.7909 10.3137 9 7 9C3.68629 9 1 10.7909 1 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${escapeHtml(this.article.authorName)}</span><span class="cg-meta-item cg-date"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1" y="2" width="12" height="11" rx="2" stroke="currentColor" stroke-width="1.5"/><path d="M4 1V3M10 1V3M1 5H13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${formatDate(this.article.publishedAt)}</span><span class="cg-meta-item cg-reading-time"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="7" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M7 3.5V7L9.5 9.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${readingTime}</span></div>`;}}class ContentList{constructor(container,api,options={}){this.container=container;this.api=api;this.options={layoutMode:options.layoutMode||'cards',displayMode:options.displayMode||'comfortable',pageSize:parseInt(options.pageSize)||12,tags:options.tags||[],category:options.category,aiSummaryMaxBytes:options.aiSummaryMaxBytes,viewerMode:options.viewerMode||'inline',externalUrlPattern:options.externalUrlPattern||'/article/{id}',externalTarget:options.externalTarget||'article-{id}',onArticleClick:options.onArticleClick||null};this.currentPage=1;this.totalPages=1;this.articles=[];this.loading=false;this.expandedCards=new Set();}async init(){this.render();await this.loadArticles();}render(){const layoutClass=this.options.layoutMode==='rows'?'cg-content-rows':'cg-content-grid';this.container.innerHTML=`<div class="cg-content-list"><div class="cg-list-header"><button class="cg-display-toggle" title="Toggle display mode"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><rect x="2" y="2" width="16" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="2" y="8" width="16" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="2" y="14" width="16" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/></svg><span>${this.options.displayMode==='compact'?'Show summaries':'Hide summaries'}</span></button></div><div class="${layoutClass}"></div><div class="cg-pagination"></div></div>`;const toggle=this.container.querySelector('.cg-display-toggle');toggle.addEventListener('click',()=>this.toggleDisplayMode());}async loadArticles(page=1){if (this.loading){return;}this.loading=true;this.showLoading();try{const data=await this.api.fetchArticles({page,limit:this.options.pageSize,tags:this.options.tags,category:this.options.category});this.articles=data.articles||[];this.currentPage=data.pagination?.page||1;this.totalPages=data.pagination?.totalPages||1;this.renderArticles();this.renderPagination();} catch (error){console.error('[ContentList] Error loading articles:',error);this.showError('Failed to load articles. Please try again.');} finally{this.loading=false;}}renderArticles(){const grid=this.container.querySelector('.cg-content-grid,.cg-content-rows');if (this.articles.length===0){grid.innerHTML=`<div class="cg-empty-state"><svg width="64" height="64" viewBox="0 0 64 64" fill="none"><rect x="8" y="12" width="48" height="40" rx="4" stroke="currentColor" stroke-width="2"/><path d="M16 24H48M16 32H48M16 40H32" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg><p>No articles found</p></div>`;return;}grid.innerHTML='';this.articles.forEach(article=>{const isExpanded=this.expandedCards.has(article.uuid);const card=new ContentCard(article,{displayMode:isExpanded?'expanded':this.options.displayMode,viewerMode:this.options.viewerMode,externalUrlPattern:this.options.externalUrlPattern,externalTarget:this.options.externalTarget,aiSummaryMaxBytes:this.options.aiSummaryMaxBytes,onExpand:(article,cardElement)=>this.handleExpand(article,cardElement),onClick:(article)=>this.handleArticleClick(article)});grid.appendChild(card.render());});}handleExpand(article,cardElement){const isExpanded=this.expandedCards.has(article.uuid);if (isExpanded){this.expandedCards.delete(article.uuid);} else{this.expandedCards.add(article.uuid);}const newCard=new ContentCard(article,{displayMode:isExpanded?this.options.displayMode:'expanded',viewerMode:this.options.viewerMode,externalUrlPattern:this.options.externalUrlPattern,externalTarget:this.options.externalTarget,onExpand:(article,cardElement)=>this.handleExpand(article,cardElement),onClick:(article)=>this.handleArticleClick(article)});cardElement.replaceWith(newCard.render());}handleArticleClick(article){if (this.options.onArticleClick){this.options.onArticleClick(article);}}toggleDisplayMode(){this.options.displayMode=this.options.displayMode==='compact'?'expanded':'compact';this.expandedCards.clear();this.renderArticles();const toggle=this.container.querySelector('.cg-display-toggle span');toggle.textContent=this.options.displayMode==='compact'?'Show summaries':'Hide summaries';}renderPagination(){const pagination=this.container.querySelector('.cg-pagination');if (this.totalPages<=1){pagination.innerHTML='';return;}const prevDisabled=this.currentPage===1;const nextDisabled=this.currentPage===this.totalPages;pagination.innerHTML=`<button class="cg-btn-prev" ${prevDisabled?'disabled':''}><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 12L6 8L10 4" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>Previous</button><span class="cg-page-info">Page ${this.currentPage}of ${this.totalPages}</span><button class="cg-btn-next" ${nextDisabled?'disabled':''}>Next<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M6 4L10 8L6 12" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></button>`;const prevBtn=pagination.querySelector('.cg-btn-prev');const nextBtn=pagination.querySelector('.cg-btn-next');prevBtn.addEventListener('click',()=>{if (this.currentPage>1){this.loadArticles(this.currentPage-1);this.scrollToTop();}});nextBtn.addEventListener('click',()=>{if (this.currentPage<this.totalPages){this.loadArticles(this.currentPage+1);this.scrollToTop();}});}showLoading(){const grid=this.container.querySelector('.cg-content-grid,.cg-content-rows');if (grid){grid.innerHTML=`<div class="cg-loading"><div class="cg-spinner"></div><p>Loading articles...</p></div>`;}}showError(message){const grid=this.container.querySelector('.cg-content-grid,.cg-content-rows');if (grid){grid.innerHTML=`<div class="cg-error"><svg width="48" height="48" viewBox="0 0 48 48" fill="none"><circle cx="24" cy="24" r="20" stroke="currentColor" stroke-width="2"/><path d="M24 16V26M24 32V32.5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg><p>${message}</p><button class="cg-retry-btn">Try Again</button></div>`;const retryBtn=grid.querySelector('.cg-retry-btn');retryBtn.addEventListener('click',()=>this.loadArticles(this.currentPage));}}scrollToTop(){this.container.scrollIntoView({behavior:'smooth',block:'start'});}}class ContentViewer{constructor(container,api,options={}){this.container=container;this.api=api;this.options={displayMode:options.displayMode||'inline',showBackButton:options.showBackButton!==false,showSummary:options.showSummary!==false,onBack:options.onBack||null};this.article=null;this.loading=false;this.summaryExpanded=true;}async loadArticle(uuid){if (this.loading)return;this.loading=true;this.showLoading();try{this.article=await this.api.fetchArticle(uuid);this.render();} catch (error){this.showError('Failed to load article. Please try again.');console.error(error);} finally{this.loading=false;}}async loadArticleBySlug(slug){if (this.loading)return;this.loading=true;this.showLoading();try{this.article=await this.api.fetchArticleBySlug(slug);this.render();} catch (error){this.showError('Failed to load article. Please try again.');console.error(error);} finally{this.loading=false;}}render(){if (!this.article)return;const readingTime=calculateReadingTime(this.article.wordCount||this.article.content);const content=this.renderMarkdown(this.article.content||'');this.container.innerHTML=`<div class="cg-content-viewer">${this.options.showBackButton?`<div class="cg-viewer-header"><button class="cg-back-btn"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M12 16L6 10L12 4" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>Back to list</button></div>`:''}<article class="cg-viewer-content"><header class="cg-content-header"><h1 class="cg-content-title">${escapeHtml(this.article.title)}</h1>${this.options.showSummary&&this.article.summary&&this.article.category!=='announce'?`<div class="cg-ai-summary ${this.summaryExpanded?'expanded':'collapsed'}"><div class="cg-ai-summary-header"><div class="cg-ai-summary-label"><svg class="cg-ai-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/></svg><span>AI Generated Summary</span></div><button class="cg-summary-toggle" aria-label="Toggle summary"><svg class="cg-chevron" width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6l4 4 4-4"/></svg></button></div><div class="cg-ai-summary-content"><p>${escapeHtml(this.article.summary)}</p></div></div>`:''}<div class="cg-content-meta"><span class="cg-meta-item"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M8 8C9.65685 8 11 6.65685 11 5C11 3.34315 9.65685 2 8 2C6.34315 2 5 3.34315 5 5C5 6.65685 6.34315 8 8 8Z" stroke="currentColor" stroke-width="1.5"/><path d="M14 14C14 11.7909 11.3137 10 8 10C4.68629 10 2 11.7909 2 14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${escapeHtml(this.article.authorName)}</span><span class="cg-meta-item"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="2" y="3" width="12" height="11" rx="2" stroke="currentColor" stroke-width="1.5"/><path d="M5 2V4M11 2V4M2 6H14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${formatDate(this.article.publishedAt)}</span><span class="cg-meta-item"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M8 4V8L10.5 10.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${readingTime}</span></div></header><div class="cg-content-body">${content}</div></article></div>`;if (this.options.showBackButton){const backBtn=this.container.querySelector('.cg-back-btn');if (backBtn){backBtn.addEventListener('click',()=>this.handleBack());}}const summaryToggle=this.container.querySelector('.cg-summary-toggle');if (summaryToggle){summaryToggle.addEventListener('click',()=>this.toggleSummary());}}toggleSummary(){this.summaryExpanded=!this.summaryExpanded;const summaryEl=this.container.querySelector('.cg-ai-summary');if (summaryEl){if (this.summaryExpanded){summaryEl.classList.add('expanded');summaryEl.classList.remove('collapsed');} else{summaryEl.classList.add('collapsed');summaryEl.classList.remove('expanded');}}}renderMarkdown(markdown){marked.setOptions({breaks:true,gfm:true,headerIds:true,mangle:false});try{return marked.parse(markdown);} catch (error){console.error('Markdown parsing error:',error);return `<p>${escapeHtml(markdown)}</p>`;}}handleBack(){if (this.options.onBack){this.options.onBack();}}showLoading(){this.container.innerHTML=`<div class="cg-content-viewer"><div class="cg-viewer-loading"><div class="cg-spinner"></div><p>Loading article...</p></div></div>`;}showError(message){this.container.innerHTML=`<div class="cg-content-viewer"><div class="cg-viewer-error"><svg width="48" height="48" viewBox="0 0 48 48" fill="none"><circle cx="24" cy="24" r="20" stroke="currentColor" stroke-width="2"/><path d="M24 16V26M24 32V32.5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg><p>${message}</p>${this.options.showBackButton?'<button class="cg-back-btn">Back to articles</button>':''}</div></div>`;if (this.options.showBackButton){const backBtn=this.container.querySelector('.cg-back-btn');if (backBtn){backBtn.addEventListener('click',()=>this.handleBack());}}}clear(){this.container.innerHTML='';this.article=null;}}class ContentGrowthWidget{static version='1.1.3';constructor(container,config){this.container=typeof container==='string'?document.querySelector(container):container;if (!this.container){throw new Error('Container not found');}this.config={apiKey:config.apiKey||config['api-key'],baseUrl:config.baseUrl||'https:tags:this.parseTags(config.tags),category:config.category,theme:config.theme||'light',layoutMode:config.layoutMode||config['layout-mode']||'cards',displayMode:config.displayMode||config['display-mode']||'comfortable',aiSummaryMaxBytes:config.aiSummaryMaxBytes||config['ai-summary-max-bytes'],viewerMode:config.viewerMode||config['viewer-mode']||'inline',externalUrlPattern:config.externalUrlPattern||config['external-url-pattern']||'/article/{id}',externalTarget:config.externalTarget||config['external-target']||'article-{id}',pageSize:config.pageSize||config['page-size']||12,mode:config.mode||'list',articleId:config.articleId||config['article-id'],slug:config.slug};if (!this.config.apiKey){throw new Error('API key is required');}this.api=new ContentGrowthAPI({apiKey:this.config.apiKey,baseUrl:this.config.baseUrl});this.currentView='list';this.contentList=null;this.contentViewer=null;this.init();}init(){this.container.classList.add('cg-widget');this.container.setAttribute('data-theme',this.config.theme);if (this.config.mode==='article-only'){if (this.config.slug){this.showPostInlineBySlug(this.config.slug);} else if (this.config.articleId){this.showPostInline(this.config.articleId);}} else{this.showList();}}showList(){this.currentView='list';this.container.innerHTML='';const listContainer=document.createElement('div');listContainer.className='cg-list-view';this.container.appendChild(listContainer);this.contentList=new ContentList(listContainer,this.api,{layoutMode:this.config.layoutMode,displayMode:this.config.displayMode,pageSize:this.config.pageSize,tags:this.config.tags,category:this.config.category,aiSummaryMaxBytes:this.config.aiSummaryMaxBytes,viewerMode:this.config.viewerMode,externalUrlPattern:this.config.externalUrlPattern,externalTarget:this.config.externalTarget,onArticleClick:(article)=>this.showPost(article.uuid)});this.contentList.init();}showPost(uuid){this.currentView='viewer';if (this.config.viewerMode==='modal'){this.showPostModal(uuid);} else{this.showPostInline(uuid);}}showPostInline(uuid){this.container.innerHTML='';const viewerContainer=document.createElement('div');viewerContainer.className='cg-viewer-view';this.container.appendChild(viewerContainer);const showBackButton=this.config.mode!=='article-only';this.contentViewer=new ContentViewer(viewerContainer,this.api,{displayMode:'inline',showBackButton:showBackButton,onBack:showBackButton?()=>this.showList():null});this.contentViewer.loadArticle(uuid);}showPostInlineBySlug(slug){this.container.innerHTML='';const viewerContainer=document.createElement('div');viewerContainer.className='cg-viewer-view';this.container.appendChild(viewerContainer);const showBackButton=this.config.mode!=='article-only';this.contentViewer=new ContentViewer(viewerContainer,this.api,{displayMode:'inline',showBackButton:showBackButton,onBack:showBackButton?()=>this.showList():null});this.contentViewer.loadArticleBySlug(slug);}showPostModal(uuid){const modal=document.createElement('div');modal.className='cg-modal';if (this.config.theme){modal.setAttribute('data-theme',this.config.theme);}modal.innerHTML=`<div class="cg-modal-overlay"></div><div class="cg-modal-content"><button class="cg-modal-close" aria-label="Close"><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M18 6L6 18M6 6L18 18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></button><div class="cg-modal-body"></div></div>`;document.body.appendChild(modal);document.body.style.overflow='hidden';const modalBody=modal.querySelector('.cg-modal-body');this.contentViewer=new ContentViewer(modalBody,this.api,{displayMode:'modal',onBack:()=>this.closeModal(modal)});this.contentViewer.loadArticle(uuid);const closeBtn=modal.querySelector('.cg-modal-close');const overlay=modal.querySelector('.cg-modal-overlay');const closeModal=()=>this.closeModal(modal);closeBtn.addEventListener('click',closeModal);overlay.addEventListener('click',closeModal);const handleEsc=(e)=>{if (e.key==='Escape'){closeModal();document.removeEventListener('keydown',handleEsc);}};document.addEventListener('keydown',handleEsc);requestAnimationFrame(()=>{modal.classList.add('cg-modal--active');});}closeModal(modal){modal.classList.remove('cg-modal--active');setTimeout(()=>{modal.remove();document.body.style.overflow='';},300);}parseTags(tags){if (!tags)return [];if (Array.isArray(tags))return tags;return tags.split(',').map(t=>t.trim()).filter(Boolean);}updateConfig(newConfig){Object.assign(this.config,newConfig);this.init();}destroy(){this.container.innerHTML='';this.container.classList.remove('cg-widget');this.container.removeAttribute('data-theme');}}function initWidgets(){const containers=document.querySelectorAll('[data-cg-content]');containers.forEach((container,index)=>{const config={apiKey:container.dataset.apiKey||container.dataset.cgApiKey,baseUrl:window.WIDGET_BASE_URL||container.dataset.baseUrl||container.dataset.cgBaseUrl,tags:container.dataset.tags||container.dataset.cgTags,theme:container.dataset.theme||container.dataset.cgTheme||'light',layoutMode:container.dataset.layoutMode||container.dataset.cgLayoutMode||'cards',displayMode:container.dataset.displayMode||container.dataset.cgDisplayMode||'comfortable',viewerMode:container.dataset.viewerMode||container.dataset.cgViewerMode||'inline',externalUrlPattern:container.dataset.externalUrlPattern||container.dataset.cgExternalUrlPattern,externalTarget:container.dataset.externalTarget||container.dataset.cgExternalTarget,pageSize:container.dataset.pageSize||container.dataset.cgPageSize||12,mode:container.dataset.mode||container.dataset.cgMode||'list',articleId:container.dataset.articleId||container.dataset.cgArticleId};try{new ContentGrowthWidget(container,config);} catch (error){console.error(`[Widget ${index}] Failed to initialize:`,error);container.innerHTML=`<div style="padding:2rem;text-align:center;color:#ef4444;"><p>Failed to load widget:${error.message}</p><p style="font-size:0.875rem;margin-top:0.5rem;">Check console for details</p></div>`;}});}if (document.readyState==='loading'){document.addEventListener('DOMContentLoaded',initWidgets);} else{initWidgets();}window.ContentGrowthWidget=ContentGrowthWidget;{ContentGrowthWidget};window.ContentGrowthWidget=ContentGrowthWidget;console.log('[ContentGrowthWidget] Loaded successfully v1.1.3');})(window);
1
+ /***Content Growth Widget-Standalone Bundle*Version:1.2.0*https:*/(function(window){'use strict';(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?factory(exports):typeof define==='function'&&define.amd?define(['exports'],factory):(global=typeof globalThis!=='undefined'?globalThis:global||self,factory(global.marked={}));})(this,(function(exports){'use strict';function _getDefaults(){return{async:false,breaks:false,extensions:null,gfm:true,hooks:null,pedantic:false,renderer:null,silent:false,tokenizer:null,walkTokens:null};}exports.defaults=_getDefaults();function changeDefaults(newDefaults){exports.defaults=newDefaults;}const escapeTest=/[&<>"']/;const escapeReplace=new RegExp(escapeTest.source,'g');const escapeTestNoEncode=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/;const escapeReplaceNoEncode=new RegExp(escapeTestNoEncode.source,'g');const escapeReplacements={'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'};const getEscapeReplacement=(ch)=>escapeReplacements[ch];function escape$1(html,encode){if (encode){if (escapeTest.test(html)){return html.replace(escapeReplace,getEscapeReplacement);}} else{if (escapeTestNoEncode.test(html)){return html.replace(escapeReplaceNoEncode,getEscapeReplacement);}}return html;}const unescapeTest=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function unescape(html){return html.replace(unescapeTest,(_,n)=>{n=n.toLowerCase();if (n==='colon')return ':';if (n.charAt(0)==='#'){return n.charAt(1)==='x'?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1));}return '';});}const caret=/(^|[^\[])\^/g;function edit(regex,opt){let source=typeof regex==='string'?regex:regex.source;opt=opt||'';const obj={replace:(name,val)=>{let valSource=typeof val==='string'?val:val.source;valSource=valSource.replace(caret,'$1');source=source.replace(name,valSource);return obj;},getRegex:()=>{return new RegExp(source,opt);}};return obj;}function cleanUrl(href){try{href=encodeURI(href).replace(/%25/g,'%');} catch (e){return null;}return href;}const noopTest={exec:()=>null};function splitCells(tableRow,count){const row=tableRow.replace(/\|/g,(match,offset,str)=>{let escaped=false;let curr=offset;while (--curr>=0&&str[curr]==='\\')escaped=!escaped;if (escaped){return '|';} else{return '|';}}),cells=row.split(/\|/);let i=0;if (!cells[0].trim()){cells.shift();}if (cells.length>0&&!cells[cells.length-1].trim()){cells.pop();}if (count){if (cells.length>count){cells.splice(count);} else{while (cells.length<count)cells.push('');}}for (;i<cells.length;i++){cells[i]=cells[i].trim().replace(/\\\|/g,'|');}return cells;}function rtrim(str,c,invert){const l=str.length;if (l===0){return '';}let suffLen=0;while (suffLen<l){const currChar=str.charAt(l-suffLen-1);if (currChar===c&&!invert){suffLen++;} else if (currChar!==c&&invert){suffLen++;} else{break;}}return str.slice(0,l-suffLen);}function findClosingBracket(str,b){if (str.indexOf(b[1])===-1){return-1;}let level=0;for (let i=0;i<str.length;i++){if (str[i]==='\\'){i++;} else if (str[i]===b[0]){level++;} else if (str[i]===b[1]){level--;if (level<0){return i;}}}return-1;}function outputLink(cap,link,raw,lexer){const href=link.href;const title=link.title?escape$1(link.title):null;const text=cap[1].replace(/\\([\[\]])/g,'$1');if (cap[0].charAt(0)!=='!'){lexer.state.inLink=true;const token={type:'link',raw,href,title,text,tokens:lexer.inlineTokens(text)};lexer.state.inLink=false;return token;}return{type:'image',raw,href,title,text:escape$1(text)};}function indentCodeCompensation(raw,text){const matchIndentToCode=raw.match(/^(\s+)(?:```)/);if (matchIndentToCode===null){return text;}const indentToCode=matchIndentToCode[1];return text .split('\n').map(node=>{const matchIndentInNode=node.match(/^\s+/);if (matchIndentInNode===null){return node;}const [indentInNode]=matchIndentInNode;if (indentInNode.length>=indentToCode.length){return node.slice(indentToCode.length);}return node;}).join('\n');}class _Tokenizer{options;rules;lexer;constructor(options){this.options=options||exports.defaults;}space(src){const cap=this.rules.block.newline.exec(src);if (cap&&cap[0].length>0){return{type:'space',raw:cap[0]};}}code(src){const cap=this.rules.block.code.exec(src);if (cap){const text=cap[0].replace(/^{1,4}/gm,'');return{type:'code',raw:cap[0],codeBlockStyle:'indented',text:!this.options.pedantic?rtrim(text,'\n'):text};}}fences(src){const cap=this.rules.block.fences.exec(src);if (cap){const raw=cap[0];const text=indentCodeCompensation(raw,cap[3]||'');return{type:'code',raw,lang:cap[2]?cap[2].trim().replace(this.rules.inline.anyPunctuation,'$1'):cap[2],text};}}heading(src){const cap=this.rules.block.heading.exec(src);if (cap){let text=cap[2].trim();if (/#$/.test(text)){const trimmed=rtrim(text,'#');if (this.options.pedantic){text=trimmed.trim();} else if (!trimmed||/$/.test(trimmed)){text=trimmed.trim();}}return{type:'heading',raw:cap[0],depth:cap[1].length,text,tokens:this.lexer.inline(text)};}}hr(src){const cap=this.rules.block.hr.exec(src);if (cap){return{type:'hr',raw:cap[0]};}}blockquote(src){const cap=this.rules.block.blockquote.exec(src);if (cap){const text=rtrim(cap[0].replace(/^*>[ \t]?/gm,''),'\n');const top=this.lexer.state.top;this.lexer.state.top=true;const tokens=this.lexer.blockTokens(text);this.lexer.state.top=top;return{type:'blockquote',raw:cap[0],tokens,text};}}list(src){let cap=this.rules.block.list.exec(src);if (cap){let bull=cap[1].trim();const isordered=bull.length>1;const list={type:'list',raw:'',ordered:isordered,start:isordered?+bull.slice(0,-1):'',loose:false,items:[]};bull=isordered?`\\d{1,9}\\${bull.slice(-1)}`:`\\${bull}`;if (this.options.pedantic){bull=isordered?bull:'[*+-]';}const itemRegex=new RegExp(`^({0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`);let raw='';let itemContents='';let endsWithBlankLine=false;while (src){let endEarly=false;if (!(cap=itemRegex.exec(src))){break;}if (this.rules.block.hr.test(src)){break;}raw=cap[0];src=src.substring(raw.length);let line=cap[2].split('\n',1)[0].replace(/^\t+/,(t)=>' '.repeat(3*t.length));let nextLine=src.split('\n',1)[0];let indent=0;if (this.options.pedantic){indent=2;itemContents=line.trimStart();} else{indent=cap[2].search(/[^ ]/);indent=indent>4?1:indent;itemContents=line.slice(indent);indent+=cap[1].length;}let blankLine=false;if (!line&&/^*$/.test(nextLine)){raw+=nextLine+'\n';src=src.substring(nextLine.length+1);endEarly=true;}if (!endEarly){const nextBulletRegex=new RegExp(`^{0,${Math.min(3,indent-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`);const hrRegex=new RegExp(`^{0,${Math.min(3,indent-1)}}((?:-*){3,}|(?:_*){3,}|(?:\\**){3,})(?:\\n+|$)`);const fencesBeginRegex=new RegExp(`^{0,${Math.min(3,indent-1)}}(?:\`\`\`|~~~)`);const headingBeginRegex=new RegExp(`^{0,${Math.min(3,indent-1)}}#`);while (src){const rawLine=src.split('\n',1)[0];nextLine=rawLine;if (this.options.pedantic){nextLine=nextLine.replace(/^{1,4}(?=({4})*[^ ])/g,' ');}if (fencesBeginRegex.test(nextLine)){break;}if (headingBeginRegex.test(nextLine)){break;}if (nextBulletRegex.test(nextLine)){break;}if (hrRegex.test(src)){break;}if (nextLine.search(/[^ ]/)>=indent||!nextLine.trim()){itemContents+='\n'+nextLine.slice(indent);} else{if (blankLine){break;}if (line.search(/[^ ]/)>=4){break;}if (fencesBeginRegex.test(line)){break;}if (headingBeginRegex.test(line)){break;}if (hrRegex.test(line)){break;}itemContents+='\n'+nextLine;}if (!blankLine&&!nextLine.trim()){blankLine=true;}raw+=rawLine+'\n';src=src.substring(rawLine.length+1);line=nextLine.slice(indent);}}if (!list.loose){if (endsWithBlankLine){list.loose=true;} else if (/\n*\n*$/.test(raw)){endsWithBlankLine=true;}}let istask=null;let ischecked;if (this.options.gfm){istask=/^\[[ xX]\]/.exec(itemContents);if (istask){ischecked=istask[0]!=='[ ] ';itemContents=itemContents.replace(/^\[[ xX]\]+/,'');}}list.items.push({type:'list_item',raw,task:!!istask,checked:ischecked,loose:false,text:itemContents,tokens:[]});list.raw+=raw;}list.items[list.items.length-1].raw=raw.trimEnd();(list.items[list.items.length-1]).text=itemContents.trimEnd();list.raw=list.raw.trimEnd();for (let i=0;i<list.items.length;i++){this.lexer.state.top=false;list.items[i].tokens=this.lexer.blockTokens(list.items[i].text,[]);if (!list.loose){const spacers=list.items[i].tokens.filter(t=>t.type==='space');const hasMultipleLineBreaks=spacers.length>0&&spacers.some(t=>/\n.*\n/.test(t.raw));list.loose=hasMultipleLineBreaks;}}if (list.loose){for (let i=0;i<list.items.length;i++){list.items[i].loose=true;}}return list;}}html(src){const cap=this.rules.block.html.exec(src);if (cap){const token={type:'html',block:true,raw:cap[0],pre:cap[1]==='pre'||cap[1]==='script'||cap[1]==='style',text:cap[0]};return token;}}def(src){const cap=this.rules.block.def.exec(src);if (cap){const tag=cap[1].toLowerCase().replace(/\s+/g,' ');const href=cap[2]?cap[2].replace(/^<(.*)>$/,'$1').replace(this.rules.inline.anyPunctuation,'$1'):'';const title=cap[3]?cap[3].substring(1,cap[3].length-1).replace(this.rules.inline.anyPunctuation,'$1'):cap[3];return{type:'def',tag,raw:cap[0],href,title};}}table(src){const cap=this.rules.block.table.exec(src);if (!cap){return;}if (!/[:|]/.test(cap[2])){return;}const headers=splitCells(cap[1]);const aligns=cap[2].replace(/^\||\|*$/g,'').split('|');const rows=cap[3]&&cap[3].trim()?cap[3].replace(/\n[ \t]*$/,'').split('\n'):[];const item={type:'table',raw:cap[0],header:[],align:[],rows:[]};if (headers.length!==aligns.length){return;}for (const align of aligns){if (/^*-+:*$/.test(align)){item.align.push('right');} else if (/^*:-+:*$/.test(align)){item.align.push('center');} else if (/^*:-+*$/.test(align)){item.align.push('left');} else{item.align.push(null);}}for (const header of headers){item.header.push({text:header,tokens:this.lexer.inline(header)});}for (const row of rows){item.rows.push(splitCells(row,item.header.length).map(cell=>{return{text:cell,tokens:this.lexer.inline(cell)};}));}return item;}lheading(src){const cap=this.rules.block.lheading.exec(src);if (cap){return{type:'heading',raw:cap[0],depth:cap[2].charAt(0)==='='?1:2,text:cap[1],tokens:this.lexer.inline(cap[1])};}}paragraph(src){const cap=this.rules.block.paragraph.exec(src);if (cap){const text=cap[1].charAt(cap[1].length-1)==='\n'?cap[1].slice(0,-1):cap[1];return{type:'paragraph',raw:cap[0],text,tokens:this.lexer.inline(text)};}}text(src){const cap=this.rules.block.text.exec(src);if (cap){return{type:'text',raw:cap[0],text:cap[0],tokens:this.lexer.inline(cap[0])};}}escape(src){const cap=this.rules.inline.escape.exec(src);if (cap){return{type:'escape',raw:cap[0],text:escape$1(cap[1])};}}tag(src){const cap=this.rules.inline.tag.exec(src);if (cap){if (!this.lexer.state.inLink&&/^<a/i.test(cap[0])){this.lexer.state.inLink=true;} else if (this.lexer.state.inLink&&/^<\/a>/i.test(cap[0])){this.lexer.state.inLink=false;}if (!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])){this.lexer.state.inRawBlock=true;} else if (this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])){this.lexer.state.inRawBlock=false;}return{type:'html',raw:cap[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:false,text:cap[0]};}}link(src){const cap=this.rules.inline.link.exec(src);if (cap){const trimmedUrl=cap[2].trim();if (!this.options.pedantic&&/^</.test(trimmedUrl)){if (!(/>$/.test(trimmedUrl))){return;}const rtrimSlash=rtrim(trimmedUrl.slice(0,-1),'\\');if ((trimmedUrl.length-rtrimSlash.length)%2===0){return;}} else{const lastParenIndex=findClosingBracket(cap[2],'()');if (lastParenIndex>-1){const start=cap[0].indexOf('!')===0?5:4;const linkLen=start+cap[1].length+lastParenIndex;cap[2]=cap[2].substring(0,lastParenIndex);cap[0]=cap[0].substring(0,linkLen).trim();cap[3]='';}}let href=cap[2];let title='';if (this.options.pedantic){const link=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);if (link){href=link[1];title=link[3];}} else{title=cap[3]?cap[3].slice(1,-1):'';}href=href.trim();if (/^</.test(href)){if (this.options.pedantic&&!(/>$/.test(trimmedUrl))){href=href.slice(1);} else{href=href.slice(1,-1);}}return outputLink(cap,{href:href?href.replace(this.rules.inline.anyPunctuation,'$1'):href,title:title?title.replace(this.rules.inline.anyPunctuation,'$1'):title},cap[0],this.lexer);}}reflink(src,links){let cap;if ((cap=this.rules.inline.reflink.exec(src))||(cap=this.rules.inline.nolink.exec(src))){const linkString=(cap[2]||cap[1]).replace(/\s+/g,' ');const link=links[linkString.toLowerCase()];if (!link){const text=cap[0].charAt(0);return{type:'text',raw:text,text};}return outputLink(cap,link,cap[0],this.lexer);}}emStrong(src,maskedSrc,prevChar=''){let match=this.rules.inline.emStrongLDelim.exec(src);if (!match)return;if (match[3]&&prevChar.match(/[\p{L}\p{N}]/u))return;const nextChar=match[1]||match[2]||'';if (!nextChar||!prevChar||this.rules.inline.punctuation.exec(prevChar)){const lLength=[...match[0]].length-1;let rDelim,rLength,delimTotal=lLength,midDelimTotal=0;const endReg=match[0][0]==='*'?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;endReg.lastIndex=0;maskedSrc=maskedSrc.slice(-1*src.length+lLength);while ((match=endReg.exec(maskedSrc))!=null){rDelim=match[1]||match[2]||match[3]||match[4]||match[5]||match[6];if (!rDelim)continue;rLength=[...rDelim].length;if (match[3]||match[4]){delimTotal+=rLength;continue;} else if (match[5]||match[6]){if (lLength%3&&!((lLength+rLength)%3)){midDelimTotal+=rLength;continue;}}delimTotal-=rLength;if (delimTotal>0)continue;rLength=Math.min(rLength,rLength+delimTotal+midDelimTotal);const lastCharLength=[...match[0]][0].length;const raw=src.slice(0,lLength+match.index+lastCharLength+rLength);if (Math.min(lLength,rLength)%2){const text=raw.slice(1,-1);return{type:'em',raw,text,tokens:this.lexer.inlineTokens(text)};}const text=raw.slice(2,-2);return{type:'strong',raw,text,tokens:this.lexer.inlineTokens(text)};}}}codespan(src){const cap=this.rules.inline.code.exec(src);if (cap){let text=cap[2].replace(/\n/g,' ');const hasNonSpaceChars=/[^ ]/.test(text);const hasSpaceCharsOnBothEnds=/^/.test(text)&&/$/.test(text);if (hasNonSpaceChars&&hasSpaceCharsOnBothEnds){text=text.substring(1,text.length-1);}text=escape$1(text,true);return{type:'codespan',raw:cap[0],text};}}br(src){const cap=this.rules.inline.br.exec(src);if (cap){return{type:'br',raw:cap[0]};}}del(src){const cap=this.rules.inline.del.exec(src);if (cap){return{type:'del',raw:cap[0],text:cap[2],tokens:this.lexer.inlineTokens(cap[2])};}}autolink(src){const cap=this.rules.inline.autolink.exec(src);if (cap){let text,href;if (cap[2]==='@'){text=escape$1(cap[1]);href='mailto:'+text;} else{text=escape$1(cap[1]);href=text;}return{type:'link',raw:cap[0],text,href,tokens:[{type:'text',raw:text,text}]};}}url(src){let cap;if (cap=this.rules.inline.url.exec(src)){let text,href;if (cap[2]==='@'){text=escape$1(cap[0]);href='mailto:'+text;} else{let prevCapZero;do{prevCapZero=cap[0];cap[0]=this.rules.inline._backpedal.exec(cap[0])?.[0]??'';}while (prevCapZero!==cap[0]);text=escape$1(cap[0]);if (cap[1]==='www.'){href='http:} else{href=cap[0];}}return{type:'link',raw:cap[0],text,href,tokens:[{type:'text',raw:text,text}]};}}inlineText(src){const cap=this.rules.inline.text.exec(src);if (cap){let text;if (this.lexer.state.inRawBlock){text=cap[0];} else{text=escape$1(cap[0]);}return{type:'text',raw:cap[0],text};}}}const newline=/^(?:*(?:\n|$))+/;const blockCode=/^({4}[^\n]+(?:\n(?:*(?:\n|$))*)?)+/;const fences=/^{0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?:{0,3}\1[~`]**(?=\n|$)|$)/;const hr=/^{0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;const heading=/^{0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;const bullet=/(?:[*+-]|\d{1,9}[.)])/;const lheading=edit(/^(?!bull)((?:.|\n(?!\s*?\n|bull))+?)\n{0,3}(=+|-+)*(?:\n+|$)/).replace(/bull/g,bullet).getRegex();const _paragraph=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|+\n)[^\n]+)*)/;const blockText=/^[^\n]+/;const _blockLabel=/(?!\s*\])(?:\\.|[^\[\]\\])+/;const def=edit(/^{0,3}\[(label)\]:*(?:\n*)?([^<\s][^\s]*|<.*?>)(?:(?:+(?:\n*)?|*\n*)(title))?*(?:\n+|$)/).replace('label',_blockLabel).replace('title',/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();const list=edit(/^({0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,bullet).getRegex();const _tag='address|article|aside|base|basefont|blockquote|body|caption'+'|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'+'|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'+'|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'+'|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'+'|track|ul';const _comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/;const html=edit('^{0,3}(?:'+'<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)'+'|comment[^\\n]*(\\n+|$)'+'|<\\?[\\s\\S]*?(?:\\?>\\n*|$)'+'|<![A-Z][\\s\\S]*?(?:>\\n*|$)'+'|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)'+'|</?(tag)(?:+|\\n|/?>)[\\s\\S]*?(?:(?:\\n*)+\\n|$)'+'|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*?*/?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n*)+\\n|$)'+'|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n*)+\\n|$)'+')','i').replace('comment',_comment).replace('tag',_tag).replace('attribute',/+[a-zA-Z:_][\w.:-]*(?:*=*"[^"\n]*"|*=*'[^'\n]*'|*=*[^\s"'=<>`]+)?/).getRegex();const paragraph=edit(_paragraph).replace('hr',hr).replace('heading','{0,3}#{1,6}(?:\\s|$)').replace('|lheading','').replace('|table','').replace('blockquote','{0,3}>').replace('fences','{0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list','{0,3}(?:[*+-]|1[.)])').replace('html','</?(?:tag)(?:+|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag',_tag).getRegex();const blockquote=edit(/^({0,3}>?(paragraph|[^\n]*)(?:\n|$))+/).replace('paragraph',paragraph).getRegex();const blockNormal={blockquote,code:blockCode,def,fences,heading,hr,html,lheading,list,newline,paragraph,table:noopTest,text:blockText};const gfmTable=edit('^*([^\\n ].*)\\n'+'{0,3}((?:\\|*)?:?-+:?*(?:\\|*:?-+:?*)*(?:\\|*)?)'+'(?:\\n((?:(?!*\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)').replace('hr',hr).replace('heading','{0,3}#{1,6}(?:\\s|$)').replace('blockquote','{0,3}>').replace('code','{4}[^\\n]').replace('fences','{0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list','{0,3}(?:[*+-]|1[.)])').replace('html','</?(?:tag)(?:+|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag',_tag).getRegex();const blockGfm={...blockNormal,table:gfmTable,paragraph:edit(_paragraph).replace('hr',hr).replace('heading','{0,3}#{1,6}(?:\\s|$)').replace('|lheading','').replace('table',gfmTable).replace('blockquote','{0,3}>').replace('fences','{0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list','{0,3}(?:[*+-]|1[.)])').replace('html','</?(?:tag)(?:+|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag',_tag).getRegex()};const blockPedantic={...blockNormal,html:edit('^*(?:comment*(?:\\n|\\s*$)'+'|<(tag)[\\s\\S]+?</\\1>*(?:\\n{2,}|\\s*$)'+'|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?>*(?:\\n{2,}|\\s*$))').replace('comment',_comment).replace(/tag/g,'(?!(?:'+'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'+'|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'+'\\b)\\w+(?!:|[^\\w\\s@]*@)\\b').getRegex(),def:/^*\[([^\]]+)\]:*<?([^\s>]+)>?(?:+(["(][^\n]+[")]))?*(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:noopTest,lheading:/^(.+?)\n{0,3}(=+|-+)*(?:\n+|$)/,paragraph:edit(_paragraph).replace('hr',hr).replace('heading','*#{1,6}*[^\n]').replace('lheading',lheading).replace('|table','').replace('blockquote','{0,3}>').replace('|fences','').replace('|list','').replace('|html','').replace('|tag','').getRegex()};const escape=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;const inlineCode=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;const br=/^({2,}|\\)\n(?!\s*$)/;const inlineText=/^(`+|[^`])(?:(?={2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?={2,}\n)))/;const _punctuation='\\p{P}$+<=>`^|~';const punctuation=edit(/^((?![*_])[\spunctuation])/,'u').replace(/punctuation/g,_punctuation).getRegex();const blockSkip=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g;const emStrongLDelim=edit(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,'u').replace(/punct/g,_punctuation).getRegex();const emStrongRDelimAst=edit('^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)'+'|[^*]+(?=[^*])'+'|(?!\\*)[punct](\\*+)(?=[\\s]|$)'+'|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)'+'|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])'+'|[\\s](\\*+)(?!\\*)(?=[punct])'+'|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])'+'|[^punct\\s](\\*+)(?=[^punct\\s])','gu').replace(/punct/g,_punctuation).getRegex();const emStrongRDelimUnd=edit('^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)'+'|[^_]+(?=[^_])'+'|(?!_)[punct](_+)(?=[\\s]|$)'+'|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)'+'|(?!_)[punct\\s](_+)(?=[^punct\\s])'+'|[\\s](_+)(?!_)(?=[punct])'+'|(?!_)[punct](_+)(?!_)(?=[punct])','gu').replace(/punct/g,_punctuation).getRegex();const anyPunctuation=edit(/\\([punct])/,'gu').replace(/punct/g,_punctuation).getRegex();const autolink=edit(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace('scheme',/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace('email',/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();const _inlineComment=edit(_comment).replace('(?:-->|$)','-->').getRegex();const tag=edit('^comment'+'|^</[a-zA-Z][\\w:-]*\\s*>'+'|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>'+'|^<\\?[\\s\\S]*?\\?>'+'|^<![a-zA-Z]+\\s[\\s\\S]*?>'+'|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>').replace('comment',_inlineComment).replace('attribute',/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();const _inlineLabel=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;const link=edit(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace('label',_inlineLabel).replace('href',/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace('title',/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();const reflink=edit(/^!?\[(label)\]\[(ref)\]/).replace('label',_inlineLabel).replace('ref',_blockLabel).getRegex();const nolink=edit(/^!?\[(ref)\](?:\[\])?/).replace('ref',_blockLabel).getRegex();const reflinkSearch=edit('reflink|nolink(?!\\()','g').replace('reflink',reflink).replace('nolink',nolink).getRegex();const inlineNormal={_backpedal:noopTest,anyPunctuation,autolink,blockSkip,br,code:inlineCode,del:noopTest,emStrongLDelim,emStrongRDelimAst,emStrongRDelimUnd,escape,link,nolink,punctuation,reflink,reflinkSearch,tag,text:inlineText,url:noopTest};const inlinePedantic={...inlineNormal,link:edit(/^!?\[(label)\]\((.*?)\)/).replace('label',_inlineLabel).getRegex(),reflink:edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label',_inlineLabel).getRegex()};const inlineGfm={...inlineNormal,escape:edit(escape).replace('])','~|])').getRegex(),url:edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,'i').replace('email',/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?={2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?={2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/};const inlineBreaks={...inlineGfm,br:edit(br).replace('{2,}','*').getRegex(),text:edit(inlineGfm.text).replace('\\b_','\\b_|{2,}\\n').replace(/\{2,\}/g,'*').getRegex()};const block={normal:blockNormal,gfm:blockGfm,pedantic:blockPedantic};const inline={normal:inlineNormal,gfm:inlineGfm,breaks:inlineBreaks,pedantic:inlinePedantic};class _Lexer{tokens;options;state;tokenizer;inlineQueue;constructor(options){this.tokens=[];this.tokens.links=Object.create(null);this.options=options||exports.defaults;this.options.tokenizer=this.options.tokenizer||new _Tokenizer();this.tokenizer=this.options.tokenizer;this.tokenizer.options=this.options;this.tokenizer.lexer=this;this.inlineQueue=[];this.state={inLink:false,inRawBlock:false,top:true};const rules={block:block.normal,inline:inline.normal};if (this.options.pedantic){rules.block=block.pedantic;rules.inline=inline.pedantic;} else if (this.options.gfm){rules.block=block.gfm;if (this.options.breaks){rules.inline=inline.breaks;} else{rules.inline=inline.gfm;}}this.tokenizer.rules=rules;}static get rules(){return{block,inline};}static lex(src,options){const lexer=new _Lexer(options);return lexer.lex(src);}static lexInline(src,options){const lexer=new _Lexer(options);return lexer.inlineTokens(src);}lex(src){src=src .replace(/\r\n|\r/g,'\n');this.blockTokens(src,this.tokens);for (let i=0;i<this.inlineQueue.length;i++){const next=this.inlineQueue[i];this.inlineTokens(next.src,next.tokens);}this.inlineQueue=[];return this.tokens;}blockTokens(src,tokens=[]){if (this.options.pedantic){src=src.replace(/\t/g,' ').replace(/^+$/gm,'');} else{src=src.replace(/^(*)(\t+)/gm,(_,leading,tabs)=>{return leading+' '.repeat(tabs.length);});}let token;let lastToken;let cutSrc;let lastParagraphClipped;while (src){if (this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((extTokenizer)=>{if (token=extTokenizer.call({lexer:this},src,tokens)){src=src.substring(token.raw.length);tokens.push(token);return true;}return false;})){continue;}if (token=this.tokenizer.space(src)){src=src.substring(token.raw.length);if (token.raw.length===1&&tokens.length>0){tokens[tokens.length-1].raw+='\n';} else{tokens.push(token);}continue;}if (token=this.tokenizer.code(src)){src=src.substring(token.raw.length);lastToken=tokens[tokens.length-1];if (lastToken&&(lastToken.type==='paragraph'||lastToken.type==='text')){lastToken.raw+='\n'+token.raw;lastToken.text+='\n'+token.text;this.inlineQueue[this.inlineQueue.length-1].src=lastToken.text;} else{tokens.push(token);}continue;}if (token=this.tokenizer.fences(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.heading(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.hr(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.blockquote(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.list(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.html(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.def(src)){src=src.substring(token.raw.length);lastToken=tokens[tokens.length-1];if (lastToken&&(lastToken.type==='paragraph'||lastToken.type==='text')){lastToken.raw+='\n'+token.raw;lastToken.text+='\n'+token.raw;this.inlineQueue[this.inlineQueue.length-1].src=lastToken.text;} else if (!this.tokens.links[token.tag]){this.tokens.links[token.tag]={href:token.href,title:token.title};}continue;}if (token=this.tokenizer.table(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.lheading(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}cutSrc=src;if (this.options.extensions&&this.options.extensions.startBlock){let startIndex=Infinity;const tempSrc=src.slice(1);let tempStart;this.options.extensions.startBlock.forEach((getStartIndex)=>{tempStart=getStartIndex.call({lexer:this},tempSrc);if (typeof tempStart==='number'&&tempStart>=0){startIndex=Math.min(startIndex,tempStart);}});if (startIndex<Infinity&&startIndex>=0){cutSrc=src.substring(0,startIndex+1);}}if (this.state.top&&(token=this.tokenizer.paragraph(cutSrc))){lastToken=tokens[tokens.length-1];if (lastParagraphClipped&&lastToken.type==='paragraph'){lastToken.raw+='\n'+token.raw;lastToken.text+='\n'+token.text;this.inlineQueue.pop();this.inlineQueue[this.inlineQueue.length-1].src=lastToken.text;} else{tokens.push(token);}lastParagraphClipped=(cutSrc.length!==src.length);src=src.substring(token.raw.length);continue;}if (token=this.tokenizer.text(src)){src=src.substring(token.raw.length);lastToken=tokens[tokens.length-1];if (lastToken&&lastToken.type==='text'){lastToken.raw+='\n'+token.raw;lastToken.text+='\n'+token.text;this.inlineQueue.pop();this.inlineQueue[this.inlineQueue.length-1].src=lastToken.text;} else{tokens.push(token);}continue;}if (src){const errMsg='Infinite loop on byte:'+src.charCodeAt(0);if (this.options.silent){console.error(errMsg);break;} else{throw new Error(errMsg);}}}this.state.top=true;return tokens;}inline(src,tokens=[]){this.inlineQueue.push({src,tokens});return tokens;}inlineTokens(src,tokens=[]){let token,lastToken,cutSrc;let maskedSrc=src;let match;let keepPrevChar,prevChar;if (this.tokens.links){const links=Object.keys(this.tokens.links);if (links.length>0){while ((match=this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc))!=null){if (links.includes(match[0].slice(match[0].lastIndexOf('[')+1,-1))){maskedSrc=maskedSrc.slice(0,match.index)+'['+'a'.repeat(match[0].length-2)+']'+maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);}}}}while ((match=this.tokenizer.rules.inline.blockSkip.exec(maskedSrc))!=null){maskedSrc=maskedSrc.slice(0,match.index)+'['+'a'.repeat(match[0].length-2)+']'+maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);}while ((match=this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc))!=null){maskedSrc=maskedSrc.slice(0,match.index)+'++'+maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);}while (src){if (!keepPrevChar){prevChar='';}keepPrevChar=false;if (this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((extTokenizer)=>{if (token=extTokenizer.call({lexer:this},src,tokens)){src=src.substring(token.raw.length);tokens.push(token);return true;}return false;})){continue;}if (token=this.tokenizer.escape(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.tag(src)){src=src.substring(token.raw.length);lastToken=tokens[tokens.length-1];if (lastToken&&token.type==='text'&&lastToken.type==='text'){lastToken.raw+=token.raw;lastToken.text+=token.text;} else{tokens.push(token);}continue;}if (token=this.tokenizer.link(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.reflink(src,this.tokens.links)){src=src.substring(token.raw.length);lastToken=tokens[tokens.length-1];if (lastToken&&token.type==='text'&&lastToken.type==='text'){lastToken.raw+=token.raw;lastToken.text+=token.text;} else{tokens.push(token);}continue;}if (token=this.tokenizer.emStrong(src,maskedSrc,prevChar)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.codespan(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.br(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.del(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (token=this.tokenizer.autolink(src)){src=src.substring(token.raw.length);tokens.push(token);continue;}if (!this.state.inLink&&(token=this.tokenizer.url(src))){src=src.substring(token.raw.length);tokens.push(token);continue;}cutSrc=src;if (this.options.extensions&&this.options.extensions.startInline){let startIndex=Infinity;const tempSrc=src.slice(1);let tempStart;this.options.extensions.startInline.forEach((getStartIndex)=>{tempStart=getStartIndex.call({lexer:this},tempSrc);if (typeof tempStart==='number'&&tempStart>=0){startIndex=Math.min(startIndex,tempStart);}});if (startIndex<Infinity&&startIndex>=0){cutSrc=src.substring(0,startIndex+1);}}if (token=this.tokenizer.inlineText(cutSrc)){src=src.substring(token.raw.length);if (token.raw.slice(-1)!=='_'){prevChar=token.raw.slice(-1);}keepPrevChar=true;lastToken=tokens[tokens.length-1];if (lastToken&&lastToken.type==='text'){lastToken.raw+=token.raw;lastToken.text+=token.text;} else{tokens.push(token);}continue;}if (src){const errMsg='Infinite loop on byte:'+src.charCodeAt(0);if (this.options.silent){console.error(errMsg);break;} else{throw new Error(errMsg);}}}return tokens;}}class _Renderer{options;constructor(options){this.options=options||exports.defaults;}code(code,infostring,escaped){const lang=(infostring||'').match(/^\S*/)?.[0];code=code.replace(/\n$/,'')+'\n';if (!lang){return '<pre><code>'+(escaped?code:escape$1(code,true))+'</code></pre>\n';}return '<pre><code class="language-'+escape$1(lang)+'">'+(escaped?code:escape$1(code,true))+'</code></pre>\n';}blockquote(quote){return `<blockquote>\n${quote}</blockquote>\n`;}html(html,block){return html;}heading(text,level,raw){return `<h${level}>${text}</h${level}>\n`;}hr(){return '<hr>\n';}list(body,ordered,start){const type=ordered?'ol':'ul';const startatt=(ordered&&start!==1)?(' start="'+start+'"'):'';return '<'+type+startatt+'>\n'+body+'</'+type+'>\n';}listitem(text,task,checked){return `<li>${text}</li>\n`;}checkbox(checked){return '<input '+(checked?'checked="" ':'')+'disabled="" type="checkbox">';}paragraph(text){return `<p>${text}</p>\n`;}table(header,body){if (body)body=`<tbody>${body}</tbody>`;return '<table>\n'+'<thead>\n'+header+'</thead>\n'+body+'</table>\n';}tablerow(content){return `<tr>\n${content}</tr>\n`;}tablecell(content,flags){const type=flags.header?'th':'td';const tag=flags.align?`<${type}align="${flags.align}">`:`<${type}>`;return tag+content+`</${type}>\n`;}strong(text){return `<strong>${text}</strong>`;}em(text){return `<em>${text}</em>`;}codespan(text){return `<code>${text}</code>`;}br(){return '<br>';}del(text){return `<del>${text}</del>`;}link(href,title,text){const cleanHref=cleanUrl(href);if (cleanHref===null){return text;}href=cleanHref;let out='<a href="'+href+'"';if (title){out+=' title="'+title+'"';}out+='>'+text+'</a>';return out;}image(href,title,text){const cleanHref=cleanUrl(href);if (cleanHref===null){return text;}href=cleanHref;let out=`<img src="${href}" alt="${text}"`;if (title){out+=` title="${title}"`;}out+='>';return out;}text(text){return text;}}class _TextRenderer{strong(text){return text;}em(text){return text;}codespan(text){return text;}del(text){return text;}html(text){return text;}text(text){return text;}link(href,title,text){return ''+text;}image(href,title,text){return ''+text;}br(){return '';}}class _Parser{options;renderer;textRenderer;constructor(options){this.options=options||exports.defaults;this.options.renderer=this.options.renderer||new _Renderer();this.renderer=this.options.renderer;this.renderer.options=this.options;this.textRenderer=new _TextRenderer();}static parse(tokens,options){const parser=new _Parser(options);return parser.parse(tokens);}static parseInline(tokens,options){const parser=new _Parser(options);return parser.parseInline(tokens);}parse(tokens,top=true){let out='';for (let i=0;i<tokens.length;i++){const token=tokens[i];if (this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[token.type]){const genericToken=token;const ret=this.options.extensions.renderers[genericToken.type].call({parser:this},genericToken);if (ret!==false||!['space','hr','heading','code','table','blockquote','list','html','paragraph','text'].includes(genericToken.type)){out+=ret||'';continue;}}switch (token.type){case 'space':{continue;}case 'hr':{out+=this.renderer.hr();continue;}case 'heading':{const headingToken=token;out+=this.renderer.heading(this.parseInline(headingToken.tokens),headingToken.depth,unescape(this.parseInline(headingToken.tokens,this.textRenderer)));continue;}case 'code':{const codeToken=token;out+=this.renderer.code(codeToken.text,codeToken.lang,!!codeToken.escaped);continue;}case 'table':{const tableToken=token;let header='';let cell='';for (let j=0;j<tableToken.header.length;j++){cell+=this.renderer.tablecell(this.parseInline(tableToken.header[j].tokens),{header:true,align:tableToken.align[j]});}header+=this.renderer.tablerow(cell);let body='';for (let j=0;j<tableToken.rows.length;j++){const row=tableToken.rows[j];cell='';for (let k=0;k<row.length;k++){cell+=this.renderer.tablecell(this.parseInline(row[k].tokens),{header:false,align:tableToken.align[k]});}body+=this.renderer.tablerow(cell);}out+=this.renderer.table(header,body);continue;}case 'blockquote':{const blockquoteToken=token;const body=this.parse(blockquoteToken.tokens);out+=this.renderer.blockquote(body);continue;}case 'list':{const listToken=token;const ordered=listToken.ordered;const start=listToken.start;const loose=listToken.loose;let body='';for (let j=0;j<listToken.items.length;j++){const item=listToken.items[j];const checked=item.checked;const task=item.task;let itemBody='';if (item.task){const checkbox=this.renderer.checkbox(!!checked);if (loose){if (item.tokens.length>0&&item.tokens[0].type==='paragraph'){item.tokens[0].text=checkbox+' '+item.tokens[0].text;if (item.tokens[0].tokens&&item.tokens[0].tokens.length>0&&item.tokens[0].tokens[0].type==='text'){item.tokens[0].tokens[0].text=checkbox+' '+item.tokens[0].tokens[0].text;}} else{item.tokens.unshift({type:'text',text:checkbox+' '});}} else{itemBody+=checkbox+' ';}}itemBody+=this.parse(item.tokens,loose);body+=this.renderer.listitem(itemBody,task,!!checked);}out+=this.renderer.list(body,ordered,start);continue;}case 'html':{const htmlToken=token;out+=this.renderer.html(htmlToken.text,htmlToken.block);continue;}case 'paragraph':{const paragraphToken=token;out+=this.renderer.paragraph(this.parseInline(paragraphToken.tokens));continue;}case 'text':{let textToken=token;let body=textToken.tokens?this.parseInline(textToken.tokens):textToken.text;while (i+1<tokens.length&&tokens[i+1].type==='text'){textToken=tokens[++i];body+='\n'+(textToken.tokens?this.parseInline(textToken.tokens):textToken.text);}out+=top?this.renderer.paragraph(body):body;continue;}default:{const errMsg='Token with "'+token.type+'" type was not found.';if (this.options.silent){console.error(errMsg);return '';} else{throw new Error(errMsg);}}}}return out;}parseInline(tokens,renderer){renderer=renderer||this.renderer;let out='';for (let i=0;i<tokens.length;i++){const token=tokens[i];if (this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[token.type]){const ret=this.options.extensions.renderers[token.type].call({parser:this},token);if (ret!==false||!['escape','html','link','image','strong','em','codespan','br','del','text'].includes(token.type)){out+=ret||'';continue;}}switch (token.type){case 'escape':{const escapeToken=token;out+=renderer.text(escapeToken.text);break;}case 'html':{const tagToken=token;out+=renderer.html(tagToken.text);break;}case 'link':{const linkToken=token;out+=renderer.link(linkToken.href,linkToken.title,this.parseInline(linkToken.tokens,renderer));break;}case 'image':{const imageToken=token;out+=renderer.image(imageToken.href,imageToken.title,imageToken.text);break;}case 'strong':{const strongToken=token;out+=renderer.strong(this.parseInline(strongToken.tokens,renderer));break;}case 'em':{const emToken=token;out+=renderer.em(this.parseInline(emToken.tokens,renderer));break;}case 'codespan':{const codespanToken=token;out+=renderer.codespan(codespanToken.text);break;}case 'br':{out+=renderer.br();break;}case 'del':{const delToken=token;out+=renderer.del(this.parseInline(delToken.tokens,renderer));break;}case 'text':{const textToken=token;out+=renderer.text(textToken.text);break;}default:{const errMsg='Token with "'+token.type+'" type was not found.';if (this.options.silent){console.error(errMsg);return '';} else{throw new Error(errMsg);}}}}return out;}}class _Hooks{options;constructor(options){this.options=options||exports.defaults;}static passThroughHooks=new Set([ 'preprocess','postprocess','processAllTokens' ]);preprocess(markdown){return markdown;}postprocess(html){return html;}processAllTokens(tokens){return tokens;}}class Marked{defaults=_getDefaults();options=this.setOptions;parse=this.#parseMarkdown(_Lexer.lex,_Parser.parse);parseInline=this.#parseMarkdown(_Lexer.lexInline,_Parser.parseInline);Parser=_Parser;Renderer=_Renderer;TextRenderer=_TextRenderer;Lexer=_Lexer;Tokenizer=_Tokenizer;Hooks=_Hooks;constructor(...args){this.use(...args);}walkTokens(tokens,callback){let values=[];for (const token of tokens){values=values.concat(callback.call(this,token));switch (token.type){case 'table':{const tableToken=token;for (const cell of tableToken.header){values=values.concat(this.walkTokens(cell.tokens,callback));}for (const row of tableToken.rows){for (const cell of row){values=values.concat(this.walkTokens(cell.tokens,callback));}}break;}case 'list':{const listToken=token;values=values.concat(this.walkTokens(listToken.items,callback));break;}default:{const genericToken=token;if (this.defaults.extensions?.childTokens?.[genericToken.type]){this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens)=>{const tokens=genericToken[childTokens].flat(Infinity);values=values.concat(this.walkTokens(tokens,callback));});} else if (genericToken.tokens){values=values.concat(this.walkTokens(genericToken.tokens,callback));}}}}return values;}use(...args){const extensions=this.defaults.extensions||{renderers:{},childTokens:{}};args.forEach((pack)=>{const opts={...pack};opts.async=this.defaults.async||opts.async||false;if (pack.extensions){pack.extensions.forEach((ext)=>{if (!ext.name){throw new Error('extension name required');}if ('renderer' in ext){const prevRenderer=extensions.renderers[ext.name];if (prevRenderer){extensions.renderers[ext.name]=function(...args){let ret=ext.renderer.apply(this,args);if (ret===false){ret=prevRenderer.apply(this,args);}return ret;};} else{extensions.renderers[ext.name]=ext.renderer;}}if ('tokenizer' in ext){if (!ext.level||(ext.level!=='block'&&ext.level!=='inline')){throw new Error("extension level must be 'block' or 'inline'");}const extLevel=extensions[ext.level];if (extLevel){extLevel.unshift(ext.tokenizer);} else{extensions[ext.level]=[ext.tokenizer];}if (ext.start){if (ext.level==='block'){if (extensions.startBlock){extensions.startBlock.push(ext.start);} else{extensions.startBlock=[ext.start];}} else if (ext.level==='inline'){if (extensions.startInline){extensions.startInline.push(ext.start);} else{extensions.startInline=[ext.start];}}}}if ('childTokens' in ext&&ext.childTokens){extensions.childTokens[ext.name]=ext.childTokens;}});opts.extensions=extensions;}if (pack.renderer){const renderer=this.defaults.renderer||new _Renderer(this.defaults);for (const prop in pack.renderer){if (!(prop in renderer)){throw new Error(`renderer '${prop}' does not exist`);}if (prop==='options'){continue;}const rendererProp=prop;const rendererFunc=pack.renderer[rendererProp];const prevRenderer=renderer[rendererProp];renderer[rendererProp]=(...args)=>{let ret=rendererFunc.apply(renderer,args);if (ret===false){ret=prevRenderer.apply(renderer,args);}return ret||'';};}opts.renderer=renderer;}if (pack.tokenizer){const tokenizer=this.defaults.tokenizer||new _Tokenizer(this.defaults);for (const prop in pack.tokenizer){if (!(prop in tokenizer)){throw new Error(`tokenizer '${prop}' does not exist`);}if (['options','rules','lexer'].includes(prop)){continue;}const tokenizerProp=prop;const tokenizerFunc=pack.tokenizer[tokenizerProp];const prevTokenizer=tokenizer[tokenizerProp];tokenizer[tokenizerProp]=(...args)=>{let ret=tokenizerFunc.apply(tokenizer,args);if (ret===false){ret=prevTokenizer.apply(tokenizer,args);}return ret;};}opts.tokenizer=tokenizer;}if (pack.hooks){const hooks=this.defaults.hooks||new _Hooks();for (const prop in pack.hooks){if (!(prop in hooks)){throw new Error(`hook '${prop}' does not exist`);}if (prop==='options'){continue;}const hooksProp=prop;const hooksFunc=pack.hooks[hooksProp];const prevHook=hooks[hooksProp];if (_Hooks.passThroughHooks.has(prop)){hooks[hooksProp]=(arg)=>{if (this.defaults.async){return Promise.resolve(hooksFunc.call(hooks,arg)).then(ret=>{return prevHook.call(hooks,ret);});}const ret=hooksFunc.call(hooks,arg);return prevHook.call(hooks,ret);};} else{hooks[hooksProp]=(...args)=>{let ret=hooksFunc.apply(hooks,args);if (ret===false){ret=prevHook.apply(hooks,args);}return ret;};}}opts.hooks=hooks;}if (pack.walkTokens){const walkTokens=this.defaults.walkTokens;const packWalktokens=pack.walkTokens;opts.walkTokens=function(token){let values=[];values.push(packWalktokens.call(this,token));if (walkTokens){values=values.concat(walkTokens.call(this,token));}return values;};}this.defaults={...this.defaults,...opts};});return this;}setOptions(opt){this.defaults={...this.defaults,...opt};return this;}lexer(src,options){return _Lexer.lex(src,options??this.defaults);}parser(tokens,options){return _Parser.parse(tokens,options??this.defaults);}#parseMarkdown(lexer,parser){return(src,options)=>{const origOpt={...options};const opt={...this.defaults,...origOpt};if (this.defaults.async===true&&origOpt.async===false){if (!opt.silent){console.warn('marked():The async option was set to true by an extension. The async:false option sent to parse will be ignored.');}opt.async=true;}const throwError=this.#onError(!!opt.silent,!!opt.async);if (typeof src==='undefined'||src===null){return throwError(new Error('marked():input parameter is undefined or null'));}if (typeof src!=='string'){return throwError(new Error('marked():input parameter is of type '+Object.prototype.toString.call(src)+',string expected'));}if (opt.hooks){opt.hooks.options=opt;}if (opt.async){return Promise.resolve(opt.hooks?opt.hooks.preprocess(src):src).then(src=>lexer(src,opt)).then(tokens=>opt.hooks?opt.hooks.processAllTokens(tokens):tokens).then(tokens=>opt.walkTokens?Promise.all(this.walkTokens(tokens,opt.walkTokens)).then(()=>tokens):tokens).then(tokens=>parser(tokens,opt)).then(html=>opt.hooks?opt.hooks.postprocess(html):html).catch (throwError);}try{if (opt.hooks){src=opt.hooks.preprocess(src);}let tokens=lexer(src,opt);if (opt.hooks){tokens=opt.hooks.processAllTokens(tokens);}if (opt.walkTokens){this.walkTokens(tokens,opt.walkTokens);}let html=parser(tokens,opt);if (opt.hooks){html=opt.hooks.postprocess(html);}return html;} catch (e){return throwError(e);}};}#onError(silent,async){return(e)=>{e.message+='\nPlease report this to https:if (silent){const msg='<p>An error occurred:</p><pre>'+escape$1(e.message+'',true)+'</pre>';if (async){return Promise.resolve(msg);}return msg;}if (async){return Promise.reject(e);}throw e;};}}const markedInstance=new Marked();function marked(src,opt){return markedInstance.parse(src,opt);}marked.options=marked.setOptions=function(options){markedInstance.setOptions(options);marked.defaults=markedInstance.defaults;changeDefaults(marked.defaults);return marked;};marked.getDefaults=_getDefaults;marked.defaults=exports.defaults;marked.use=function(...args){markedInstance.use(...args);marked.defaults=markedInstance.defaults;changeDefaults(marked.defaults);return marked;};marked.walkTokens=function(tokens,callback){return markedInstance.walkTokens(tokens,callback);};marked.parseInline=markedInstance.parseInline;marked.Parser=_Parser;marked.parser=_Parser.parse;marked.Renderer=_Renderer;marked.TextRenderer=_TextRenderer;marked.Lexer=_Lexer;marked.lexer=_Lexer.lex;marked.Tokenizer=_Tokenizer;marked.Hooks=_Hooks;marked.parse=marked;const options=marked.options;const setOptions=marked.setOptions;const use=marked.use;const walkTokens=marked.walkTokens;const parseInline=marked.parseInline;const parse=marked;const parser=_Parser.parse;const lexer=_Lexer.lex;exports.Hooks=_Hooks;exports.Lexer=_Lexer;exports.Marked=Marked;exports.Parser=_Parser;exports.Renderer=_Renderer;exports.TextRenderer=_TextRenderer;exports.Tokenizer=_Tokenizer;exports.getDefaults=_getDefaults;exports.lexer=lexer;exports.marked=marked;exports.options=options;exports.parse=parse;exports.parseInline=parseInline;exports.parser=parser;exports.setOptions=setOptions;exports.use=use;exports.walkTokens=walkTokens;}));function formatDate(timestamp){const date=new Date(timestamp*1000);return date.toLocaleDateString('en-US',{year:'numeric',month:'short',day:'numeric'});}function calculateReadingTime(wordCountOrContent){if (!wordCountOrContent)return 'Unknown';const wordsPerMinute=200;let words;if (typeof wordCountOrContent==='number'){words=wordCountOrContent;if (words===0)return 'Unknown';} else{words=wordCountOrContent.trim().split(/\s+/).filter(w=>w.length>0).length;}const minutes=Math.ceil(words/wordsPerMinute);return `${minutes}min read`;}function truncate(text,maxLength=150){if (!text||text.length<=maxLength)return text;return text.substring(0,maxLength).trim()+'...';}function truncateBytes(text,maxBytes){if (!text||!maxBytes||maxBytes<=0)return text||'';const encoder=new TextEncoder();const bytes=encoder.encode(text);if (bytes.length<=maxBytes)return text;let lo=0,hi=text.length;while (lo<hi){const mid=Math.floor((lo+hi+1)/2);const slice=text.slice(0,mid);const len=encoder.encode(slice).length;if (len<=maxBytes)lo=mid;else hi=mid-1;}return text.slice(0,lo).trimEnd()+'...';}function escapeHtml(text){const div=document.createElement('div');div.textContent=text;return div.innerHTML;}function debounce(func,wait){let timeout;return function executedFunction(...args){const later=()=>{clearTimeout(timeout);func(...args);};clearTimeout(timeout);timeout=setTimeout(later,wait);};}class ContentGrowthAPI{constructor(config){this.apiKey=config.apiKey;this.baseUrl=config.baseUrl||'https:this.cache=new Map();this.cacheTTL=5*60*1000;}async fetchArticles(options={}){const{page=1,limit=12,tags=[],category}=options;const params=new URLSearchParams({page:page.toString(),limit:limit.toString()});if (tags.length>0){params.set('tag',tags.join(','));}if (category){params.set('category',category);}const url=`${this.baseUrl}/widget/articles?${params}`;const cacheKey=url;const cached=this.getFromCache(cacheKey);if (cached){return cached;}try{const response=await fetch(url,{headers:{'X-API-Key':this.apiKey}});if (!response.ok){const errorText=await response.text();console.error('[ContentGrowthAPI] Error response body:',errorText);throw new Error(`API Error:${response.status}${response.statusText}`);}const data=await response.json();this.setCache(cacheKey,data);return data;} catch (error){console.error('[ContentGrowthAPI] Failed to fetch articles:',error);throw error;}}async fetchArticle(uuid){const url=`${this.baseUrl}/widget/articles/${uuid}`;const cacheKey=url;const cached=this.getFromCache(cacheKey);if (cached){return cached;}try{const response=await fetch(url,{headers:{'X-API-Key':this.apiKey}});if (!response.ok){const errorText=await response.text();console.error('[ContentGrowthAPI] Error response body:',errorText);throw new Error(`API Error:${response.status}${response.statusText}`);}const data=await response.json();this.setCache(cacheKey,data);return data;} catch (error){console.error('[ContentGrowthAPI] Failed to fetch article:',error);throw error;}}async fetchArticleBySlug(slug){const url=`${this.baseUrl}/widget/articles/slug/${slug}`;const cacheKey=url;const cached=this.getFromCache(cacheKey);if (cached){return cached;}try{const response=await fetch(url,{headers:{'X-API-Key':this.apiKey}});if (!response.ok){const errorText=await response.text();console.error('[ContentGrowthAPI] Error response body:',errorText);throw new Error(`API Error:${response.status}${response.statusText}`);}const data=await response.json();this.setCache(cacheKey,data);return data;} catch (error){console.error('[ContentGrowthAPI] Failed to fetch article by slug:',error);throw error;}}getFromCache(key){const cached=this.cache.get(key);if (!cached)return null;const now=Date.now();if (now-cached.timestamp>this.cacheTTL){this.cache.delete(key);return null;}return cached.data;}setCache(key,data){this.cache.set(key,{data,timestamp:Date.now()});}clearCache(){this.cache.clear();}}class ContentCard{constructor(article,options={}){this.article=article;this.displayMode=options.displayMode||'compact';this.viewerMode=options.viewerMode||'inline';this.externalUrlPattern=options.externalUrlPattern||'/article/{id}';this.externalTarget=options.externalTarget||'article-{id}';this.onExpand=options.onExpand||null;this.onClick=options.onClick||null;this.aiSummaryMaxBytes=options.aiSummaryMaxBytes;}render(){const layoutMode=this.displayMode==='expanded'?'expanded':'compact';if (this.viewerMode==='external'){const link=document.createElement('a');link.className=`cg-card cg-card--${this.displayMode}`;link.dataset.contentId=this.article.uuid;let url=this.externalUrlPattern .replace('{id}',this.article.uuid).replace('{slug}',this.article.slug||this.article.uuid);let target=this.externalTarget .replace('{id}',this.article.uuid).replace('{slug}',this.article.slug||this.article.uuid);link.href=url;link.target=target;link.rel='noopener';if (layoutMode==='compact'){link.innerHTML=this.renderCompact();} else{link.innerHTML=this.renderExpanded();}const expandBtn=link.querySelector('.cg-expand-btn');if (expandBtn&&this.onExpand){expandBtn.addEventListener('click',(e)=>{e.preventDefault();e.stopPropagation();this.onExpand(this.article,link);});}return link;}const card=document.createElement('article');card.className=`cg-card cg-card--${this.displayMode}`;card.dataset.contentId=this.article.uuid;if (layoutMode==='compact'){card.innerHTML=this.renderCompact();} else{card.innerHTML=this.renderExpanded();}card.addEventListener('click',(e)=>{if (e.target.closest('.cg-expand-btn'))return;if (this.onClick){this.onClick(this.article);}});const expandBtn=card.querySelector('.cg-expand-btn');if (expandBtn&&this.onExpand){expandBtn.addEventListener('click',(e)=>{e.stopPropagation();this.onExpand(this.article,card);});}return card;}renderCompact(){const readingTime=calculateReadingTime(this.article.wordCount);return `<div class="cg-card-header"><h3 class="cg-card-title">${escapeHtml(this.article.title)}</h3><button class="cg-expand-btn" aria-label="Show more" title="Show summary"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M4 6L8 10L12 6" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></button></div><div class="cg-card-meta"><span class="cg-meta-item cg-author"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M7 7C8.65685 7 10 5.65685 10 4C10 2.34315 8.65685 1 7 1C5.34315 1 4 2.34315 4 4C4 5.65685 5.34315 7 7 7Z" stroke="currentColor" stroke-width="1.5"/><path d="M13 13C13 10.7909 10.3137 9 7 9C3.68629 9 1 10.7909 1 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${escapeHtml(this.article.authorName)}</span><span class="cg-meta-item cg-date"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1" y="2" width="12" height="11" rx="2" stroke="currentColor" stroke-width="1.5"/><path d="M4 1V3M10 1V3M1 5H13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${formatDate(this.article.publishedAt)}</span><span class="cg-meta-item cg-reading-time"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="7" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M7 3.5V7L9.5 9.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${readingTime}</span></div>`;}renderExpanded(){const readingTime=calculateReadingTime(this.article.wordCount);const summaryFull=this.article.summary||'';const summary=this.aiSummaryMaxBytes?truncateBytes(summaryFull,this.aiSummaryMaxBytes):summaryFull;const tags=this.article.tags||[];return `<div class="cg-card-header"><h3 class="cg-card-title">${escapeHtml(this.article.title)}</h3><button class="cg-expand-btn cg-expand-btn--collapse" aria-label="Show less" title="Hide summary"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M12 10L8 6L4 10" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></button></div>${summary?`<div class="cg-card-summary"><p>${escapeHtml(summary)}</p></div>`:''}${tags.length>0?`<div class="cg-card-tags">${tags.map(tag=>`<span class="cg-tag">${escapeHtml(tag)}</span>`).join('')}</div>`:''}<div class="cg-card-meta"><span class="cg-meta-item cg-author"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M7 7C8.65685 7 10 5.65685 10 4C10 2.34315 8.65685 1 7 1C5.34315 1 4 2.34315 4 4C4 5.65685 5.34315 7 7 7Z" stroke="currentColor" stroke-width="1.5"/><path d="M13 13C13 10.7909 10.3137 9 7 9C3.68629 9 1 10.7909 1 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${escapeHtml(this.article.authorName)}</span><span class="cg-meta-item cg-date"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1" y="2" width="12" height="11" rx="2" stroke="currentColor" stroke-width="1.5"/><path d="M4 1V3M10 1V3M1 5H13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${formatDate(this.article.publishedAt)}</span><span class="cg-meta-item cg-reading-time"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="7" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M7 3.5V7L9.5 9.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${readingTime}</span></div>`;}}class ContentList{constructor(container,api,options={}){this.container=container;this.api=api;this.options={layoutMode:options.layoutMode||'cards',displayMode:options.displayMode||'comfortable',pageSize:parseInt(options.pageSize)||12,tags:options.tags||[],category:options.category,aiSummaryMaxBytes:options.aiSummaryMaxBytes,viewerMode:options.viewerMode||'inline',externalUrlPattern:options.externalUrlPattern||'/article/{id}',externalTarget:options.externalTarget||'article-{id}',onArticleClick:options.onArticleClick||null};this.currentPage=1;this.totalPages=1;this.articles=[];this.loading=false;this.expandedCards=new Set();}async init(){this.render();await this.loadArticles();}render(){const layoutClass=this.options.layoutMode==='rows'?'cg-content-rows':'cg-content-grid';this.container.innerHTML=`<div class="cg-content-list"><div class="cg-list-header"><button class="cg-display-toggle" title="Toggle display mode"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><rect x="2" y="2" width="16" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="2" y="8" width="16" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="2" y="14" width="16" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/></svg><span>${this.options.displayMode==='compact'?'Show summaries':'Hide summaries'}</span></button></div><div class="${layoutClass}"></div><div class="cg-pagination"></div></div>`;const toggle=this.container.querySelector('.cg-display-toggle');toggle.addEventListener('click',()=>this.toggleDisplayMode());}async loadArticles(page=1){if (this.loading){return;}this.loading=true;this.showLoading();try{const data=await this.api.fetchArticles({page,limit:this.options.pageSize,tags:this.options.tags,category:this.options.category});this.articles=data.articles||[];this.currentPage=data.pagination?.page||1;this.totalPages=data.pagination?.totalPages||1;this.renderArticles();this.renderPagination();} catch (error){console.error('[ContentList] Error loading articles:',error);this.showError('Failed to load articles. Please try again.');} finally{this.loading=false;}}renderArticles(){const grid=this.container.querySelector('.cg-content-grid,.cg-content-rows');if (this.articles.length===0){grid.innerHTML=`<div class="cg-empty-state"><svg width="64" height="64" viewBox="0 0 64 64" fill="none"><rect x="8" y="12" width="48" height="40" rx="4" stroke="currentColor" stroke-width="2"/><path d="M16 24H48M16 32H48M16 40H32" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg><p>No articles found</p></div>`;return;}grid.innerHTML='';this.articles.forEach(article=>{const isExpanded=this.expandedCards.has(article.uuid);const card=new ContentCard(article,{displayMode:isExpanded?'expanded':this.options.displayMode,viewerMode:this.options.viewerMode,externalUrlPattern:this.options.externalUrlPattern,externalTarget:this.options.externalTarget,aiSummaryMaxBytes:this.options.aiSummaryMaxBytes,onExpand:(article,cardElement)=>this.handleExpand(article,cardElement),onClick:(article)=>this.handleArticleClick(article)});grid.appendChild(card.render());});}handleExpand(article,cardElement){const isExpanded=this.expandedCards.has(article.uuid);if (isExpanded){this.expandedCards.delete(article.uuid);} else{this.expandedCards.add(article.uuid);}const newCard=new ContentCard(article,{displayMode:isExpanded?this.options.displayMode:'expanded',viewerMode:this.options.viewerMode,externalUrlPattern:this.options.externalUrlPattern,externalTarget:this.options.externalTarget,onExpand:(article,cardElement)=>this.handleExpand(article,cardElement),onClick:(article)=>this.handleArticleClick(article)});cardElement.replaceWith(newCard.render());}handleArticleClick(article){if (this.options.onArticleClick){this.options.onArticleClick(article);}}toggleDisplayMode(){this.options.displayMode=this.options.displayMode==='compact'?'expanded':'compact';this.expandedCards.clear();this.renderArticles();const toggle=this.container.querySelector('.cg-display-toggle span');toggle.textContent=this.options.displayMode==='compact'?'Show summaries':'Hide summaries';}renderPagination(){const pagination=this.container.querySelector('.cg-pagination');if (this.totalPages<=1){pagination.innerHTML='';return;}const prevDisabled=this.currentPage===1;const nextDisabled=this.currentPage===this.totalPages;pagination.innerHTML=`<button class="cg-btn-prev" ${prevDisabled?'disabled':''}><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 12L6 8L10 4" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>Previous</button><span class="cg-page-info">Page ${this.currentPage}of ${this.totalPages}</span><button class="cg-btn-next" ${nextDisabled?'disabled':''}>Next<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M6 4L10 8L6 12" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></button>`;const prevBtn=pagination.querySelector('.cg-btn-prev');const nextBtn=pagination.querySelector('.cg-btn-next');prevBtn.addEventListener('click',()=>{if (this.currentPage>1){this.loadArticles(this.currentPage-1);this.scrollToTop();}});nextBtn.addEventListener('click',()=>{if (this.currentPage<this.totalPages){this.loadArticles(this.currentPage+1);this.scrollToTop();}});}showLoading(){const grid=this.container.querySelector('.cg-content-grid,.cg-content-rows');if (grid){grid.innerHTML=`<div class="cg-loading"><div class="cg-spinner"></div><p>Loading articles...</p></div>`;}}showError(message){const grid=this.container.querySelector('.cg-content-grid,.cg-content-rows');if (grid){grid.innerHTML=`<div class="cg-error"><svg width="48" height="48" viewBox="0 0 48 48" fill="none"><circle cx="24" cy="24" r="20" stroke="currentColor" stroke-width="2"/><path d="M24 16V26M24 32V32.5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg><p>${message}</p><button class="cg-retry-btn">Try Again</button></div>`;const retryBtn=grid.querySelector('.cg-retry-btn');retryBtn.addEventListener('click',()=>this.loadArticles(this.currentPage));}}scrollToTop(){this.container.scrollIntoView({behavior:'smooth',block:'start'});}}class ContentViewer{constructor(container,api,options={}){this.container=container;this.api=api;this.options={displayMode:options.displayMode||'inline',showBackButton:options.showBackButton!==false,showSummary:options.showSummary!==false,onBack:options.onBack||null};this.article=null;this.loading=false;this.summaryExpanded=true;}async loadArticle(uuid){if (this.loading)return;this.loading=true;this.showLoading();try{this.article=await this.api.fetchArticle(uuid);this.render();} catch (error){this.showError('Failed to load article. Please try again.');console.error(error);} finally{this.loading=false;}}async loadArticleBySlug(slug){if (this.loading)return;this.loading=true;this.showLoading();try{this.article=await this.api.fetchArticleBySlug(slug);this.render();} catch (error){this.showError('Failed to load article. Please try again.');console.error(error);} finally{this.loading=false;}}render(){if (!this.article)return;const readingTime=calculateReadingTime(this.article.wordCount||this.article.content);const content=this.renderMarkdown(this.article.content||'');this.container.innerHTML=`<div class="cg-content-viewer">${this.options.showBackButton?`<div class="cg-viewer-header"><button class="cg-back-btn"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M12 16L6 10L12 4" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>Back to list</button></div>`:''}<article class="cg-viewer-content"><header class="cg-content-header"><h1 class="cg-content-title">${escapeHtml(this.article.title)}</h1>${this.options.showSummary&&this.article.summary&&this.article.category!=='announce'?`<div class="cg-ai-summary ${this.summaryExpanded?'expanded':'collapsed'}"><div class="cg-ai-summary-header"><div class="cg-ai-summary-label"><svg class="cg-ai-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/></svg><span>AI Generated Summary</span></div><button class="cg-summary-toggle" aria-label="Toggle summary"><svg class="cg-chevron" width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6l4 4 4-4"/></svg></button></div><div class="cg-ai-summary-content"><p>${escapeHtml(this.article.summary)}</p></div></div>`:''}<div class="cg-content-meta"><span class="cg-meta-item"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M8 8C9.65685 8 11 6.65685 11 5C11 3.34315 9.65685 2 8 2C6.34315 2 5 3.34315 5 5C5 6.65685 6.34315 8 8 8Z" stroke="currentColor" stroke-width="1.5"/><path d="M14 14C14 11.7909 11.3137 10 8 10C4.68629 10 2 11.7909 2 14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${escapeHtml(this.article.authorName)}</span><span class="cg-meta-item"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="2" y="3" width="12" height="11" rx="2" stroke="currentColor" stroke-width="1.5"/><path d="M5 2V4M11 2V4M2 6H14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${formatDate(this.article.publishedAt)}</span><span class="cg-meta-item"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M8 4V8L10.5 10.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>${readingTime}</span></div></header><div class="cg-content-body">${content}</div></article></div>`;if (this.options.showBackButton){const backBtn=this.container.querySelector('.cg-back-btn');if (backBtn){backBtn.addEventListener('click',()=>this.handleBack());}}const summaryToggle=this.container.querySelector('.cg-summary-toggle');if (summaryToggle){summaryToggle.addEventListener('click',()=>this.toggleSummary());}}toggleSummary(){this.summaryExpanded=!this.summaryExpanded;const summaryEl=this.container.querySelector('.cg-ai-summary');if (summaryEl){if (this.summaryExpanded){summaryEl.classList.add('expanded');summaryEl.classList.remove('collapsed');} else{summaryEl.classList.add('collapsed');summaryEl.classList.remove('expanded');}}}renderMarkdown(markdown){marked.setOptions({breaks:true,gfm:true,headerIds:true,mangle:false});try{return marked.parse(markdown);} catch (error){console.error('Markdown parsing error:',error);return `<p>${escapeHtml(markdown)}</p>`;}}handleBack(){if (this.options.onBack){this.options.onBack();}}showLoading(){this.container.innerHTML=`<div class="cg-content-viewer"><div class="cg-viewer-loading"><div class="cg-spinner"></div><p>Loading article...</p></div></div>`;}showError(message){this.container.innerHTML=`<div class="cg-content-viewer"><div class="cg-viewer-error"><svg width="48" height="48" viewBox="0 0 48 48" fill="none"><circle cx="24" cy="24" r="20" stroke="currentColor" stroke-width="2"/><path d="M24 16V26M24 32V32.5" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg><p>${message}</p>${this.options.showBackButton?'<button class="cg-back-btn">Back to articles</button>':''}</div></div>`;if (this.options.showBackButton){const backBtn=this.container.querySelector('.cg-back-btn');if (backBtn){backBtn.addEventListener('click',()=>this.handleBack());}}}clear(){this.container.innerHTML='';this.article=null;}}class ContentGrowthWidget{static version='1.2.0';constructor(container,config){this.container=typeof container==='string'?document.querySelector(container):container;if (!this.container){throw new Error('Container not found');}this.config={apiKey:config.apiKey||config['api-key'],baseUrl:config.baseUrl||'https:tags:this.parseTags(config.tags),category:config.category,theme:config.theme||'light',layoutMode:config.layoutMode||config['layout-mode']||'cards',displayMode:config.displayMode||config['display-mode']||'comfortable',aiSummaryMaxBytes:config.aiSummaryMaxBytes||config['ai-summary-max-bytes'],viewerMode:config.viewerMode||config['viewer-mode']||'inline',externalUrlPattern:config.externalUrlPattern||config['external-url-pattern']||'/article/{id}',externalTarget:config.externalTarget||config['external-target']||'article-{id}',pageSize:config.pageSize||config['page-size']||12,mode:config.mode||'list',articleId:config.articleId||config['article-id'],slug:config.slug};if (!this.config.apiKey){throw new Error('API key is required');}this.api=new ContentGrowthAPI({apiKey:this.config.apiKey,baseUrl:this.config.baseUrl});this.currentView='list';this.contentList=null;this.contentViewer=null;this.init();}init(){this.container.classList.add('cg-widget');this.container.setAttribute('data-theme',this.config.theme);if (this.config.mode==='article-only'){if (this.config.slug){this.showPostInlineBySlug(this.config.slug);} else if (this.config.articleId){this.showPostInline(this.config.articleId);}} else{this.showList();}}showList(){this.currentView='list';this.container.innerHTML='';const listContainer=document.createElement('div');listContainer.className='cg-list-view';this.container.appendChild(listContainer);this.contentList=new ContentList(listContainer,this.api,{layoutMode:this.config.layoutMode,displayMode:this.config.displayMode,pageSize:this.config.pageSize,tags:this.config.tags,category:this.config.category,aiSummaryMaxBytes:this.config.aiSummaryMaxBytes,viewerMode:this.config.viewerMode,externalUrlPattern:this.config.externalUrlPattern,externalTarget:this.config.externalTarget,onArticleClick:(article)=>this.showPost(article.uuid)});this.contentList.init();}showPost(uuid){this.currentView='viewer';if (this.config.viewerMode==='modal'){this.showPostModal(uuid);} else{this.showPostInline(uuid);}}showPostInline(uuid){this.container.innerHTML='';const viewerContainer=document.createElement('div');viewerContainer.className='cg-viewer-view';this.container.appendChild(viewerContainer);const showBackButton=this.config.mode!=='article-only';this.contentViewer=new ContentViewer(viewerContainer,this.api,{displayMode:'inline',showBackButton:showBackButton,onBack:showBackButton?()=>this.showList():null});this.contentViewer.loadArticle(uuid);}showPostInlineBySlug(slug){this.container.innerHTML='';const viewerContainer=document.createElement('div');viewerContainer.className='cg-viewer-view';this.container.appendChild(viewerContainer);const showBackButton=this.config.mode!=='article-only';this.contentViewer=new ContentViewer(viewerContainer,this.api,{displayMode:'inline',showBackButton:showBackButton,onBack:showBackButton?()=>this.showList():null});this.contentViewer.loadArticleBySlug(slug);}showPostModal(uuid){const modal=document.createElement('div');modal.className='cg-modal';if (this.config.theme){modal.setAttribute('data-theme',this.config.theme);}modal.innerHTML=`<div class="cg-modal-overlay"></div><div class="cg-modal-content"><button class="cg-modal-close" aria-label="Close"><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M18 6L6 18M6 6L18 18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></button><div class="cg-modal-body"></div></div>`;document.body.appendChild(modal);document.body.style.overflow='hidden';const modalBody=modal.querySelector('.cg-modal-body');this.contentViewer=new ContentViewer(modalBody,this.api,{displayMode:'modal',onBack:()=>this.closeModal(modal)});this.contentViewer.loadArticle(uuid);const closeBtn=modal.querySelector('.cg-modal-close');const overlay=modal.querySelector('.cg-modal-overlay');const closeModal=()=>this.closeModal(modal);closeBtn.addEventListener('click',closeModal);overlay.addEventListener('click',closeModal);const handleEsc=(e)=>{if (e.key==='Escape'){closeModal();document.removeEventListener('keydown',handleEsc);}};document.addEventListener('keydown',handleEsc);requestAnimationFrame(()=>{modal.classList.add('cg-modal--active');});}closeModal(modal){modal.classList.remove('cg-modal--active');setTimeout(()=>{modal.remove();document.body.style.overflow='';},300);}parseTags(tags){if (!tags)return [];if (Array.isArray(tags))return tags;return tags.split(',').map(t=>t.trim()).filter(Boolean);}updateConfig(newConfig){Object.assign(this.config,newConfig);this.init();}destroy(){this.container.innerHTML='';this.container.classList.remove('cg-widget');this.container.removeAttribute('data-theme');}}function initWidgets(){const containers=document.querySelectorAll('[data-cg-content]');containers.forEach((container,index)=>{const config={apiKey:container.dataset.apiKey||container.dataset.cgApiKey,baseUrl:window.WIDGET_BASE_URL||container.dataset.baseUrl||container.dataset.cgBaseUrl,tags:container.dataset.tags||container.dataset.cgTags,theme:container.dataset.theme||container.dataset.cgTheme||'light',layoutMode:container.dataset.layoutMode||container.dataset.cgLayoutMode||'cards',displayMode:container.dataset.displayMode||container.dataset.cgDisplayMode||'comfortable',viewerMode:container.dataset.viewerMode||container.dataset.cgViewerMode||'inline',externalUrlPattern:container.dataset.externalUrlPattern||container.dataset.cgExternalUrlPattern,externalTarget:container.dataset.externalTarget||container.dataset.cgExternalTarget,pageSize:container.dataset.pageSize||container.dataset.cgPageSize||12,mode:container.dataset.mode||container.dataset.cgMode||'list',articleId:container.dataset.articleId||container.dataset.cgArticleId};try{new ContentGrowthWidget(container,config);} catch (error){console.error(`[Widget ${index}] Failed to initialize:`,error);container.innerHTML=`<div style="padding:2rem;text-align:center;color:#ef4444;"><p>Failed to load widget:${error.message}</p><p style="font-size:0.875rem;margin-top:0.5rem;">Check console for details</p></div>`;}});}if (document.readyState==='loading'){document.addEventListener('DOMContentLoaded',initWidgets);} else{initWidgets();}window.ContentGrowthWidget=ContentGrowthWidget;{ContentGrowthWidget};window.ContentGrowthWidget=ContentGrowthWidget;console.log('[ContentGrowthWidget] Loaded successfully v1.2.0');})(window);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentgrowth/content-widget",
3
- "version": "1.1.3",
3
+ "version": "1.2.0",
4
4
  "description": "Embed your Content Growth articles anywhere with beautiful, customizable components",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",