aptolix_chatbot 1.0.12 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/web.mjs +1 -1
- package/dist/web.mjs.map +1 -1
- package/package.json +2 -1
package/dist/web.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.mjs","sources":["../node_modules/marked/lib/marked.esm.js","../node_modules/style-inject/dist/style-inject.es.js","../src/localStorageManager.js","../src/defaultConfig.js","../src/configLoader.js","../src/index.js"],"sourcesContent":["/**\n * marked v16.2.1 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var O=L();function H(l){O=l}var E={exec:()=>null};function h(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},xe=/^(?:[ \\t]*(?:\\n|$))+/,be=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,C=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Oe=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,j=/(?:[*+-]|\\d{1,9}[.)])/,se=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,ie=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Te=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),F=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,we=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,ye=h(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Pe=h(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,j).getRegex(),v=\"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|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Se=h(\"^ {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[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),oe=h(F).replace(\"hr\",C).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\",v).getRegex(),$e=h(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",oe).getRegex(),K={blockquote:$e,code:be,def:ye,fences:Re,heading:Oe,hr:C,html:Se,lheading:ie,list:Pe,newline:xe,paragraph:oe,table:E,text:we},re=h(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\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\",v).getRegex(),_e={...K,lheading:Te,table:re,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).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\",v).getRegex()},Le={...K,html:h(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).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:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",ie).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Me=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,ze=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,ae=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,W=/[\\s\\p{P}\\p{S}]/u,le=/[^\\s\\p{P}\\p{S}]/u,Ee=h(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,W).getRegex(),ue=/(?!~)[\\p{P}\\p{S}]/u,Ce=/(?!~)[\\s\\p{P}\\p{S}]/u,Ie=/(?:[^\\s\\p{P}\\p{S}]|~)/u,Be=/\\[[^\\[\\]]*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<(?! )[^<>]*?>/g,pe=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,qe=h(pe,\"u\").replace(/punct/g,D).getRegex(),ve=h(pe,\"u\").replace(/punct/g,ue).getRegex(),ce=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",De=h(ce,\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ze=h(ce,\"gu\").replace(/notPunctSpace/g,Ie).replace(/punctSpace/g,Ce).replace(/punct/g,ue).getRegex(),Ge=h(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),He=h(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),Ne=h(/^<(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(),je=h(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Fe=h(\"^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\",je).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`[^`]*`|[^\\[\\]\\\\`])*?/,Qe=h(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),he=h(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),de=h(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),Ue=h(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",he).replace(\"nolink\",de).getRegex(),X={_backpedal:E,anyPunctuation:He,autolink:Ne,blockSkip:Be,br:ae,code:ze,del:E,emStrongLDelim:qe,emStrongRDelimAst:De,emStrongRDelimUnd:Ge,escape:Me,link:Qe,nolink:de,punctuation:Ee,reflink:he,reflinkSearch:Ue,tag:Fe,text:Ae,url:E},Ke={...X,link:h(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:h(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:Ze,emStrongLDelim:ve,url:h(/^((?: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\\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.!#$%&'*+\\/=?_`{\\|}~-]+@)))/},We={...N,br:h(ae).replace(\"{2,}\",\"*\").getRegex(),text:h(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},I={normal:K,gfm:_e,pedantic:Le},M={normal:X,gfm:N,breaks:We,pedantic:Ke};var Xe={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"},ke=l=>Xe[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ke)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ke);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,o)=>{let a=!1,u=s;for(;--u>=0&&o[u]===\"\\\\\";)a=!a;return a?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(l,e,t){let n=l.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=l.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return l.slice(0,n-r)}function ge(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===\"\\\\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(l,e,t,n,r){let i=e.href,s=e.title||null,o=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let a={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,a}function Je(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[o]=s;return o.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||O}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Je(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let o=!1,a=[],u;for(u=0;u<n.length;u++)if(this.rules.other.blockquoteStart.test(n[u]))a.push(n[u]),o=!0;else if(!o)a.push(n[u]);else break;n=n.slice(u);let p=a.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=f,n.length===0)break;let k=s.at(-1);if(k?.type===\"code\")break;if(k?.type===\"blockquote\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.blockquote(g);s[s.length-1]=T,r=r.substring(0,r.length-x.raw.length)+T.raw,i=i.substring(0,i.length-x.text.length)+T.text;break}else if(k?.type===\"list\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.list(g);s[s.length-1]=T,r=r.substring(0,r.length-k.raw.length)+T.raw,i=i.substring(0,i.length-x.raw.length)+T.raw,n=g.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),o=!1;for(;e;){let u=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let f=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,Z=>\" \".repeat(3*Z.length)),k=e.split(`\n`,1)[0],x=!f.trim(),g=0;if(this.options.pedantic?(g=2,c=f.trimStart()):x?g=t[1].length+1:(g=t[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,c=f.slice(g),g+=t[1].length),x&&this.rules.other.blankLine.test(k)&&(p+=k+`\n`,e=e.substring(k.length+1),u=!0),!u){let Z=this.rules.other.nextBulletRegex(g),ee=this.rules.other.hrRegex(g),te=this.rules.other.fencesBeginRegex(g),ne=this.rules.other.headingBeginRegex(g),me=this.rules.other.htmlBeginRegex(g);for(;e;){let G=e.split(`\n`,1)[0],A;if(k=G,this.options.pedantic?(k=k.replace(this.rules.other.listReplaceNesting,\" \"),A=k):A=k.replace(this.rules.other.tabCharGlobal,\" \"),te.test(k)||ne.test(k)||me.test(k)||Z.test(k)||ee.test(k))break;if(A.search(this.rules.other.nonSpaceChar)>=g||!k.trim())c+=`\n`+A.slice(g);else{if(x||f.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||te.test(f)||ne.test(f)||ee.test(f))break;c+=`\n`+k}!x&&!k.trim()&&(x=!0),p+=G+`\n`,e=e.substring(G.length+1),f=A.slice(g)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(o=!0));let T=null,Y;this.options.gfm&&(T=this.rules.other.listIsTask.exec(c),T&&(Y=T[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:p,task:!!T,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=p}let a=i.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let u=0;u<i.items.length;u++)if(this.lexer.state.top=!1,i.items[u].tokens=this.lexer.blockTokens(i.items[u].text,[]),!i.loose){let p=i.items[u].tokens.filter(f=>f.type===\"space\"),c=p.length>0&&p.some(f=>this.rules.other.anyLine.test(f.raw));i.loose=c}if(i.loose)for(let u=0;u<i.items.length;u++)i.items[u].loose=!0;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let o of r)this.rules.other.tableAlignRight.test(o)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(o)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(o)?s.align.push(\"left\"):s.align.push(null);for(let o=0;o<n.length;o++)s.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:s.align[o]});for(let o of i)s.rows.push(V(o,s.header.length).map((a,u)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:s.align[u]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=ge(t[2],\"()\");if(s===-2)return;if(s>-1){let a=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,a).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),fe(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return fe(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,o,a,u=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(a=[...o].length,r[3]||r[4]){u+=a;continue}else if((r[5]||r[6])&&s%3&&!((s+a)%3)){p+=a;continue}if(u-=a,u>0)continue;a=Math.min(a,a+u+p);let f=[...r[0]][0].length,k=e.slice(0,s+r.index+f+a);if(Math.min(s,a)%2){let g=k.slice(1,-1);return{type:\"em\",raw:k,text:g,tokens:this.lexer.inlineTokens(g)}}let x=k.slice(2,-2);return{type:\"strong\",raw:k,text:x,tokens:this.lexer.inlineTokens(x)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var b=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||O,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:I.normal,inline:M.normal};this.options.pedantic?(t.block=I.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=I.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:I,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\" \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,o=e.slice(1),a;this.options.extensions.startBlock.forEach(u=>{a=u.call({lexer:this},o),typeof a==\"number\"&&a>=0&&(s=Math.min(s,a))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let i=!1,s=\"\";for(;e;){i||(s=\"\"),i=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,s)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let a=e;if(this.options.extensions?.startInline){let u=1/0,p=e.slice(1),c;this.options.extensions.startInline.forEach(f=>{c=f.call({lexer:this},p),typeof c==\"number\"&&c>=0&&(u=Math.min(u,c))}),u<1/0&&u>=0&&(a=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(a)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(s=o.raw.slice(-1)),i=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||O}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let o=0;o<e.items.length;o++){let a=e.items[o];r+=this.listitem(a)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let o=0;o<s.length;o++)n+=this.tablecell(s[o]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var S=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var R=class l{options;renderer;textRenderer;constructor(e){this.options=e||O,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new S}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=i,a=this.options.extensions.renderers[o.type].call({parser:this},o);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(o.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"space\":{n+=this.renderer.space(s);continue}case\"hr\":{n+=this.renderer.hr(s);continue}case\"heading\":{n+=this.renderer.heading(s);continue}case\"code\":{n+=this.renderer.code(s);continue}case\"table\":{n+=this.renderer.table(s);continue}case\"blockquote\":{n+=this.renderer.blockquote(s);continue}case\"list\":{n+=this.renderer.list(s);continue}case\"html\":{n+=this.renderer.html(s);continue}case\"def\":{n+=this.renderer.def(s);continue}case\"paragraph\":{n+=this.renderer.paragraph(s);continue}case\"text\":{let o=s,a=this.renderer.text(o);for(;r+1<e.length&&e[r+1].type===\"text\";)o=e[++r],a+=`\n`+this.renderer.text(o);t?n+=this.renderer.paragraph({type:\"paragraph\",raw:a,text:a,tokens:[{type:\"text\",raw:a,text:a,escaped:!0}]}):n+=a;continue}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=o||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}};var $=class{options;block;constructor(e){this.options=e||O}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}provideLexer(){return this.block?b.lex:b.lexInline}provideParser(){return this.block?R.parse:R.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=R;Renderer=P;TextRenderer=S;Lexer=b;Tokenizer=y;Hooks=$;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let o of s)n=n.concat(this.walkTokens(o.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let o=i[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...o){let a=i.renderer.apply(this,o);return a===!1&&(a=s.apply(this,o)),a}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let o=s,a=n.renderer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let o=s,a=n.tokenizer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new $;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let o=s,a=n.hooks[o],u=i[o];$.passThroughHooks.has(s)?i[o]=p=>{if(this.defaults.async)return Promise.resolve(a.call(i,p)).then(f=>u.call(i,f));let c=a.call(i,p);return u.call(i,c)}:i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(o){let a=[];return a.push(s.call(this,o)),i&&(a=a.concat(i.call(this,o))),a}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return b.lex(e,t??this.defaults)}parser(e,t){return R.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},o=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return o(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return o(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let a=s.hooks?s.hooks.provideLexer():e?b.lex:b.lexInline,u=s.hooks?s.hooks.provideParser():e?R.parse:R.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(p=>a(p,s)).then(p=>s.hooks?s.hooks.processAllTokens(p):p).then(p=>s.walkTokens?Promise.all(this.walkTokens(p,s.walkTokens)).then(()=>p):p).then(p=>u(p,s)).then(p=>s.hooks?s.hooks.postprocess(p):p).catch(o);try{s.hooks&&(n=s.hooks.preprocess(n));let p=a(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=u(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(p){return o(p)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function d(l,e){return _.parse(l,e)}d.options=d.setOptions=function(l){return _.setOptions(l),d.defaults=_.defaults,H(d.defaults),d};d.getDefaults=L;d.defaults=O;d.use=function(...l){return _.use(...l),d.defaults=_.defaults,H(d.defaults),d};d.walkTokens=function(l,e){return _.walkTokens(l,e)};d.parseInline=_.parseInline;d.Parser=R;d.parser=R.parse;d.Renderer=P;d.TextRenderer=S;d.Lexer=b;d.lexer=b.lex;d.Tokenizer=y;d.Hooks=$;d.parse=d;var Dt=d.options,Zt=d.setOptions,Gt=d.use,Ht=d.walkTokens,Nt=d.parseInline,jt=d,Ft=R.parse,Qt=b.lex;export{$ as Hooks,b as Lexer,B as Marked,R as Parser,P as Renderer,S as TextRenderer,y as Tokenizer,O as defaults,L as getDefaults,Qt as lexer,d as marked,Dt as options,jt as parse,Nt as parseInline,Ft as parser,Zt as setOptions,Gt as use,Ht as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","/**\r\n * LocalStorage Manager\r\n * Handles storing and retrieving chatbot data from localStorage\r\n * Manages: Config and Conversation State (visitor, session, history, usage limits)\r\n */\r\nclass LocalStorageManager {\r\n constructor() {\r\n this.keys = {\r\n config: 'aptolix_chatbot_config',\r\n state: 'aptolix_chatbot_state'\r\n };\r\n }\r\n\r\n // ============================================\r\n // HELPER METHODS\r\n // ============================================\r\n\r\n /**\r\n * Get conversation state object\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {Object|null} State object or null if not found\r\n */\r\n _getState(chatbotId) {\r\n try {\r\n const key = `${this.keys.state}_${chatbotId}`;\r\n const stored = localStorage.getItem(key);\r\n \r\n if (!stored) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(stored);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Save conversation state object\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {Object} state - State object to save\r\n */\r\n _saveState(chatbotId, state) {\r\n try {\r\n const key = `${this.keys.state}_${chatbotId}`;\r\n state.timestamp = Date.now();\r\n localStorage.setItem(key, JSON.stringify(state));\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if stored data is from today\r\n * @param {number} timestamp - Timestamp to check\r\n * @returns {boolean}\r\n */\r\n _isToday(timestamp) {\r\n const today = new Date();\r\n const storedDate = new Date(timestamp);\r\n return (\r\n today.getFullYear() === storedDate.getFullYear() &&\r\n today.getMonth() === storedDate.getMonth() &&\r\n today.getDate() === storedDate.getDate()\r\n );\r\n }\r\n\r\n /**\r\n * Get start of today timestamp (00:00:00)\r\n * @returns {number}\r\n */\r\n _getTodayStart() {\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n return today.getTime();\r\n }\r\n\r\n // ============================================\r\n // 1. CONFIG MANAGEMENT\r\n // ============================================\r\n\r\n /**\r\n * Save chatbot configuration\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {Object} config - Configuration object to store\r\n */\r\n saveConfig(chatbotId, config) {\r\n try {\r\n const key = `${this.keys.config}_${chatbotId}`;\r\n const data = {\r\n config: config,\r\n timestamp: Date.now()\r\n };\r\n localStorage.setItem(key, JSON.stringify(data));\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve chatbot configuration\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {Object|null} Configuration object or null if not found\r\n */\r\n getConfig(chatbotId) {\r\n try {\r\n const key = `${this.keys.config}_${chatbotId}`;\r\n const stored = localStorage.getItem(key);\r\n \r\n if (!stored) {\r\n return null;\r\n }\r\n\r\n const data = JSON.parse(stored);\r\n return data.config;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear chatbot configuration\r\n * @param {string} chatbotId - The chatbot ID\r\n */\r\n clearConfig(chatbotId) {\r\n try {\r\n const key = `${this.keys.config}_${chatbotId}`;\r\n localStorage.removeItem(key);\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if config exists\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {boolean}\r\n */\r\n hasConfig(chatbotId) {\r\n const key = `${this.keys.config}_${chatbotId}`;\r\n return localStorage.getItem(key) !== null;\r\n }\r\n\r\n // ============================================\r\n // 2. VISITOR ID MANAGEMENT\r\n // ============================================\r\n\r\n /**\r\n * Save visitor ID for a chatbot\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - Unique visitor identifier\r\n */\r\n saveVisitorId(chatbotId, visitorId) {\r\n try {\r\n const state = this._getState(chatbotId) || {};\r\n state.visitorId = visitorId;\r\n this._saveState(chatbotId, state);\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve visitor ID for a chatbot\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {string|null} Visitor ID or null if not found\r\n */\r\n getVisitorId(chatbotId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n return state?.visitorId || null;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear visitor ID\r\n * @param {string} chatbotId - The chatbot ID\r\n */\r\n clearVisitorId(chatbotId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n if (state) {\r\n delete state.visitorId;\r\n this._saveState(chatbotId, state);\r\n }\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if visitor ID exists\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {boolean}\r\n */\r\n hasVisitorId(chatbotId) {\r\n return this.getVisitorId(chatbotId) !== null;\r\n }\r\n\r\n // ============================================\r\n // 3. SESSION ID MANAGEMENT\r\n // ============================================\r\n\r\n /**\r\n * Save session ID for a chatbot\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} sessionId - Unique session identifier\r\n */\r\n saveSessionId(chatbotId, sessionId) {\r\n try {\r\n const state = this._getState(chatbotId) || {};\r\n state.sessionId = sessionId;\r\n this._saveState(chatbotId, state);\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve session ID for a chatbot\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {string|null} Session ID or null if not found\r\n */\r\n getSessionId(chatbotId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n return state?.sessionId || null;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear session ID\r\n * @param {string} chatbotId - The chatbot ID\r\n */\r\n clearSessionId(chatbotId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n if (state) {\r\n delete state.sessionId;\r\n this._saveState(chatbotId, state);\r\n }\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if session ID exists\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {boolean}\r\n */\r\n hasSessionId(chatbotId) {\r\n return this.getSessionId(chatbotId) !== null;\r\n }\r\n\r\n // ============================================\r\n // 4. CHAT HISTORY MANAGEMENT (with daily expiration)\r\n // ============================================\r\n\r\n /**\r\n * Save chat history (expires next day)\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} sessionId - The session ID (not stored in history, validated against state.sessionId)\r\n * @param {Array} messages - Array of message objects\r\n */\r\n saveChatHistory(chatbotId, sessionId, messages) {\r\n try {\r\n const state = this._getState(chatbotId) || {};\r\n state.history = {\r\n messages: messages,\r\n timestamp: Date.now()\r\n };\r\n this._saveState(chatbotId, state);\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve chat history (returns null if expired)\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} sessionId - The session ID\r\n * @returns {Array|null} Array of messages or null if not found/expired\r\n */\r\n getChatHistory(chatbotId, sessionId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n \r\n if (!state?.history) {\r\n return null;\r\n }\r\n\r\n const { history } = state;\r\n \r\n // Check if history is for the current session\r\n if (state.sessionId !== sessionId) {\r\n return null;\r\n }\r\n \r\n // Check if history is from today\r\n if (!this._isToday(history.timestamp)) {\r\n // History expired - clear it\r\n this.clearChatHistory(chatbotId, sessionId);\r\n return null;\r\n }\r\n\r\n return history.messages;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear chat history\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} sessionId - The session ID\r\n */\r\n clearChatHistory(chatbotId, sessionId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n if (state?.history && state.sessionId === sessionId) {\r\n delete state.history;\r\n this._saveState(chatbotId, state);\r\n }\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if chat history exists (and not expired)\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} sessionId - The session ID\r\n * @returns {boolean}\r\n */\r\n hasChatHistory(chatbotId, sessionId) {\r\n return this.getChatHistory(chatbotId, sessionId) !== null;\r\n }\r\n\r\n // ============================================\r\n // 5. USAGE LIMIT REACHED MANAGEMENT (expires at limitReachedDate)\r\n // ============================================\r\n\r\n /**\r\n * Set usage limit reached status with expiration date\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - The visitor ID\r\n * @param {string} limitReachedDate - UTC date string when limit expires\r\n */\r\n setUsageLimitReached(chatbotId, visitorId, limitReachedDate) {\r\n try {\r\n const state = this._getState(chatbotId) || {};\r\n state.usageLimitReached = {\r\n limitReachedDate: limitReachedDate,\r\n timestamp: Date.now()\r\n };\r\n this._saveState(chatbotId, state);\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Get usage limit data (returns null if expired)\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - The visitor ID\r\n * @returns {Object|null} Object with limitReachedDate or null if expired/not found\r\n */\r\n getUsageLimitReached(chatbotId, visitorId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n \r\n if (!state?.usageLimitReached) {\r\n return null;\r\n }\r\n\r\n const { usageLimitReached } = state;\r\n let limitDate;\r\n \r\n // If the date string doesn't include time (just YYYY-MM-DD), \r\n // set it to end of day (23:59:59.999 UTC) instead of start of day (00:00:00 UTC)\r\n if (usageLimitReached.limitReachedDate.length === 10 && !usageLimitReached.limitReachedDate.includes('T')) {\r\n // Parse date and add time to make it end of day\r\n limitDate = new Date(usageLimitReached.limitReachedDate + 'T23:59:59.999Z');\r\n } else {\r\n limitDate = new Date(usageLimitReached.limitReachedDate);\r\n }\r\n \r\n const now = new Date();\r\n \r\n // Check if limit date has passed (strictly greater than)\r\n if (now > limitDate) {\r\n // Limit expired - clear it\r\n this.clearUsageLimitReached(chatbotId, visitorId);\r\n return null;\r\n }\r\n\r\n return {\r\n limitReachedDate: usageLimitReached.limitReachedDate,\r\n timestamp: usageLimitReached.timestamp\r\n };\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear usage limit\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - The visitor ID\r\n */\r\n clearUsageLimitReached(chatbotId, visitorId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n if (state) {\r\n delete state.usageLimitReached;\r\n this._saveState(chatbotId, state);\r\n }\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if usage limit is active (not expired)\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - The visitor ID\r\n * @returns {boolean}\r\n */\r\n hasUsageLimitReached(chatbotId, visitorId) {\r\n return this.getUsageLimitReached(chatbotId, visitorId) !== null;\r\n }\r\n\r\n // ============================================\r\n // UTILITY METHODS\r\n // ============================================\r\n\r\n /**\r\n * Clear all data for a specific chatbot\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - The visitor ID (optional, for compatibility)\r\n * @param {string} sessionId - The session ID (optional, for compatibility)\r\n */\r\n clearAll(chatbotId, visitorId = null, sessionId = null) {\r\n this.clearConfig(chatbotId);\r\n \r\n // Clear entire state\r\n try {\r\n const key = `${this.keys.state}_${chatbotId}`;\r\n localStorage.removeItem(key);\r\n } catch (error) {\r\n }\r\n }\r\n}\r\n\r\nexport default LocalStorageManager;\r\n","/**\r\n * Default configuration for Aptolix Chatbot\r\n * These values can be overridden during initialization\r\n */\r\n\r\nconst defaultConfig = { \r\n // Display Mode\r\n mode: 'bubble', // 'bubble' or 'section' //\r\n \r\n // Chat Header\r\n botname: 'AI Assistant', //\r\n widgetIcon: \"💬\", //\r\n companyLogoBlack: `\r\n <svg width=\"24\" height=\"32\" viewBox=\"0 0 81 52\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"34.8\" y=\"0\" width=\"46\" height=\"11.7\" rx=\"5.9\" fill=\"#000\"/>\r\n <rect x=\"0.2\" y=\"19.7\" width=\"80.6\" height=\"12\" rx=\"6\" fill=\"#000\"/>\r\n <rect x=\"61.7\" y=\"39.4\" width=\"19\" height=\"11.7\" rx=\"6\" fill=\"#000\"/>\r\n <rect x=\"7.7\" y=\"39.5\" width=\"49\" height=\"11.7\" rx=\"6\" fill=\"#000\"/>\r\n </svg>\r\n `, //\r\n companyLogoWhite: `\r\n <svg width=\"24\" height=\"32\" viewBox=\"0 0 81 52\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"34.8\" y=\"0\" width=\"46\" height=\"11.7\" rx=\"5.9\" fill=\"#fcfcfcff\"/>\r\n <rect x=\"0.2\" y=\"19.7\" width=\"80.6\" height=\"12\" rx=\"6\" fill=\"#fcfcfcff\"/>\r\n <rect x=\"61.7\" y=\"39.4\" width=\"19\" height=\"11.7\" rx=\"6\" fill=\"#fcfcfcff\"/>\r\n <rect x=\"7.7\" y=\"39.5\" width=\"49\" height=\"11.7\" rx=\"6\" fill=\"#fcfcfcff\"/>\r\n </svg>\r\n `, //\r\n botAvatar: `\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"20\" cy=\"20\" r=\"18\" fill=\"#9333ea\"/>\r\n <rect x=\"12\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\" fill=\"#fff\"/>\r\n <rect x=\"22\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\" fill=\"#fff\"/>\r\n <rect x=\"13\" y=\"26\" width=\"14\" height=\"4\" rx=\"2\" fill=\"#fff\"/>\r\n </svg>\r\n `,\r\n userAvatar: `\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"#64748b\"/>\r\n <circle cx=\"20\" cy=\"15\" r=\"6\" fill=\"#fff\"/>\r\n <path d=\"M 8 35 Q 8 25 20 25 Q 32 25 32 35\" fill=\"#fff\"/>\r\n </svg>\r\n `,\r\n username: 'You',\r\n botaccentColor: '#4a57e2ff', //\r\n floatingWelcomeMessage: 'Hello! Looking for something? I\\'m here to assist - just ask!', //\r\n floatingWelcomeDelay: 2, // seconds //\r\n greetingMessage:'Welcome! Let me know if you have any questions.', //\r\n allowDownloadTranscript: true, //\r\n allowExpandChatWindow: true, //\r\n allowFullPageChat: false,\r\n \r\n // Input Settings\r\n inputCharLimit: 350,//\r\n \r\n // Rating Feature\r\n allowRating: true,\r\n ratingThreshold: 3, // Show rating after this many bot messages\r\n ratingInterval: 4, // Show rating again after this many more bot messages\r\n};\r\n\r\nexport default defaultConfig;\r\n","import LocalStorageManager from './localStorageManager.js';\r\nimport defaultConfig from './defaultConfig.js';\r\n\r\n/**\r\n * Validates if the widget icon is valid (SVG or text/emoji)\r\n * @param {string} iconValue - Icon value to validate\r\n * @returns {boolean} True if valid, false otherwise\r\n */\r\nfunction isValidWidgetIcon(iconValue) {\r\n if (!iconValue || typeof iconValue !== 'string') {\r\n return false;\r\n }\r\n \r\n // Check if it's an SVG (contains '<svg' or other HTML tags)\r\n if (iconValue.includes('<svg') || (iconValue.includes('<') && iconValue.includes('>'))) {\r\n return true;\r\n }\r\n \r\n // Check if it's text/emoji (any non-empty string that's not too long)\r\n // Allow emojis, simple text, or icon characters\r\n if (iconValue.trim().length > 0 && iconValue.length <= 100) {\r\n return true;\r\n }\r\n \r\n return false;\r\n}\r\n\r\n/**\r\n * Transform API response from snake_case to camelCase format\r\n * @param {Object} apiData - Raw API response with snake_case keys\r\n * @returns {Object} Transformed object with camelCase keys\r\n */\r\nfunction transformApiResponse(apiData) {\r\n if (!apiData) return null;\r\n \r\n return {\r\n botname: apiData.bot_name,\r\n widgetIcon: apiData.widget_icon,\r\n companyLogo: apiData.company_logo,\r\n botAvatar: apiData.bot_avatar,\r\n userAvatar: apiData.user_avatar,\r\n username: apiData.username,\r\n botaccentColor: apiData.accent_color,\r\n floatingWelcomeMessage: apiData.floating_welcome_message,\r\n floatingWelcomeDelay: apiData.floating_welcome_delay,\r\n greetingMessage: apiData.greeting_message,\r\n allowDownloadTranscript: apiData.download_transcript,\r\n allowExpandChatWindow: apiData.expand_chat_window,\r\n allowFullPageChat: apiData.full_page_chat,\r\n inputCharLimit: apiData.input_char_limit,\r\n allowRating: apiData.allow_rating,\r\n ratingThreshold: apiData.rating_threshold,\r\n ratingInterval: apiData.rating_interval,\r\n };\r\n}\r\n\r\n/**\r\n * Fetches chatbot appearance configuration from API\r\n * @param {string} apiHost - The API host URL\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {Promise<Object|null>} Configuration object or null if failed\r\n */\r\nasync function fetchConfigFromAPI(apiHost, chatbotId) {\r\n try {\r\n const response = await fetch(`${apiHost}/chatbot/${chatbotId}/appearance`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n return null;\r\n }\r\n\r\n const data = await response.json();\r\n // Transform snake_case API response to camelCase\r\n return transformApiResponse(data);\r\n } catch (error) {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Loads chatbot configuration\r\n * Flow: Try API -> Save to localStorage -> If API fails, load from localStorage\r\n * \r\n * @param {string} apiHost - API host URL\r\n * @param {string} chatbotId - Chatbot identifier\r\n * @returns {Promise<Object|null>} Configuration object or null if not found\r\n */\r\nasync function loadConfig(apiHost, chatbotId) {\r\n const storage = new LocalStorageManager();\r\n \r\n // Try to fetch from API\r\n if (apiHost && chatbotId) {\r\n const apiConfig = await fetchConfigFromAPI(apiHost, chatbotId);\r\n \r\n if (apiConfig) {\r\n // Validate and use defaultConfig fallback if widgetIcon is invalid\r\n if (!apiConfig.widgetIcon || !isValidWidgetIcon(apiConfig.widgetIcon)) {\r\n apiConfig.widgetIcon = defaultConfig.widgetIcon;\r\n }\r\n \r\n // API success - save to localStorage and return\r\n storage.saveConfig(chatbotId, apiConfig);\r\n return apiConfig;\r\n } else {\r\n // API failed - try to load from localStorage\r\n const cachedConfig = storage.getConfig(chatbotId);\r\n \r\n if (cachedConfig) {\r\n // Validate and use defaultConfig fallback if widgetIcon is invalid\r\n if (!cachedConfig.widgetIcon || !isValidWidgetIcon(cachedConfig.widgetIcon)) {\r\n cachedConfig.widgetIcon = defaultConfig.widgetIcon;\r\n }\r\n return cachedConfig;\r\n } else {\r\n return null;\r\n }\r\n }\r\n }\r\n \r\n return null;\r\n}\r\n\r\nexport { loadConfig };\r\n","import { marked } from \"marked\";\r\nimport './chatbotstyle.css';\r\nimport { loadConfig } from './configLoader.js';\r\nimport defaultConfig from './defaultConfig.js';\r\nimport LocalStorageManager from './localStorageManager.js';\r\n\r\nconst AptolixChatbot = {\r\n init: async ({ \r\n apiHost, // mandatory\r\n chatbotId, // mandatory\r\n botname,\r\n widgetIcon,\r\n companyLogo,\r\n companyLogoUrl,\r\n botAvatar,\r\n botavatarUrl,\r\n botaccentColor,\r\n floatingWelcomeMessage,\r\n floatingWelcomeDelay,\r\n greetingMessage,\r\n allowDownloadTranscript,\r\n allowExpandChatWindow,\r\n allowFullPageChat,\r\n inputCharLimit,\r\n allowRating,\r\n ratingThreshold,\r\n ratingInterval,\r\n mode = \"bubble\",\r\n target\r\n }) => {\r\n \r\n // Validate mandatory parameters\r\n if (!apiHost || !chatbotId) {\r\n console.error('apiHost and chatbotId are mandatory parameters');\r\n return;\r\n }\r\n\r\n // Load config from API with localStorage fallback\r\n const apiConfig = await loadConfig(apiHost, chatbotId);\r\n \r\n // Merge config: Direct params > API config > Defaults\r\n const config = {\r\n botname: botname || (apiConfig?.botname) || defaultConfig.botname,\r\n widgetIcon: widgetIcon || (apiConfig?.widgetIcon) || defaultConfig.widgetIcon,\r\n companyLogo: companyLogo || (apiConfig?.companyLogo) || defaultConfig.companyLogo,\r\n companyLogoUrl: companyLogoUrl || (apiConfig?.companyLogoUrl) || '',\r\n botAvatar: botAvatar || (apiConfig?.botAvatar) || defaultConfig.botAvatar,\r\n botavatarUrl: botavatarUrl || (apiConfig?.botavatarUrl) || '',\r\n userAvatar: (apiConfig?.userAvatar) || defaultConfig.userAvatar,\r\n username: (apiConfig?.username) || defaultConfig.username,\r\n botaccentColor: botaccentColor || (apiConfig?.botaccentColor) || defaultConfig.botaccentColor,\r\n floatingWelcomeMessage: floatingWelcomeMessage || (apiConfig?.floatingWelcomeMessage) || defaultConfig.floatingWelcomeMessage,\r\n floatingWelcomeDelay: floatingWelcomeDelay || (apiConfig?.floatingWelcomeDelay) || defaultConfig.floatingWelcomeDelay,\r\n greetingMessage: greetingMessage || (apiConfig?.greetingMessage) || defaultConfig.greetingMessage,\r\n allowDownloadTranscript: allowDownloadTranscript !== undefined ? allowDownloadTranscript : (apiConfig?.allowDownloadTranscript !== undefined ? apiConfig.allowDownloadTranscript : defaultConfig.allowDownloadTranscript),\r\n allowExpandChatWindow: allowExpandChatWindow !== undefined ? allowExpandChatWindow : (apiConfig?.allowExpandChatWindow !== undefined ? apiConfig.allowExpandChatWindow : defaultConfig.allowExpandChatWindow),\r\n allowFullPageChat: allowFullPageChat !== undefined ? allowFullPageChat : (apiConfig?.allowFullPageChat !== undefined ? apiConfig.allowFullPageChat : defaultConfig.allowFullPageChat),\r\n inputCharLimit: inputCharLimit || (apiConfig?.inputCharLimit) || defaultConfig.inputCharLimit,\r\n allowRating: allowRating !== undefined ? allowRating : (apiConfig?.allowRating !== undefined ? apiConfig.allowRating : defaultConfig.allowRating),\r\n ratingThreshold: ratingThreshold || (apiConfig?.ratingThreshold) || defaultConfig.ratingThreshold,\r\n ratingInterval: ratingInterval || (apiConfig?.ratingInterval) || defaultConfig.ratingInterval,\r\n mode: mode || defaultConfig.mode,\r\n target: target\r\n };\r\n \r\n /**\r\n * ========================================================================\r\n * CENTRALIZED COLOR THEME GENERATOR\r\n * ========================================================================\r\n * This function generates a complete, consistent color palette based on\r\n * the primary accent color. All UI elements derive their colors from this\r\n * central theme to ensure visual harmony and easy debugging.\r\n * \r\n * HOW IT WORKS:\r\n * 1. Analyzes the primary color to determine if it's light or dark\r\n * 2. Generates complementary colors using lightening/darkening algorithms\r\n * 3. Creates high-contrast text colors based on background lightness\r\n * 4. Returns a structured theme object with colors for all UI elements\r\n * \r\n * THEME STRUCTURE:\r\n * - primary: The base accent color\r\n * - header: { background, text, button, border }\r\n * - messages: { userBackground, userText, botBackground, botText, link, timestamp }\r\n * - window: { background, border, shadow }\r\n * - input: { background, border, text, placeholder, buttonBackground, buttonText }\r\n * - footer: { text, link }\r\n * - bubble: { background, icon }\r\n * - hint: { background, text, border, closeButton }\r\n * - menu: { background, text, hover, border }\r\n * - rating: { star, text }\r\n * - utils: Helper functions for color manipulation\r\n * \r\n * DEBUGGING:\r\n * To debug color issues, log the entire theme object:\r\n * console.log('Theme:', theme);\r\n * \r\n * To adjust a specific color, modify the percentage in lightenColor/darkenColor calls\r\n * Example: lightenColor(primaryColor, 0.85) -> 85% lighter\r\n * \r\n * @param {string} primaryColor - The base accent color (hex format, e.g., '#4A90E2')\r\n * @returns {object} Complete color theme with all UI element colors\r\n */\r\n const generateColorTheme = (primaryColor) => {\r\n // ===== Color Utility Functions =====\r\n \r\n // Convert hex to RGB (handles both 6 and 8 character hex codes)\r\n const hexToRgb = (hex) => {\r\n // Remove # if present and handle 8-char hex (with alpha)\r\n const cleanHex = hex.replace('#', '').substring(0, 6);\r\n const result = /^([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(cleanHex);\r\n return result ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16)\r\n } : null;\r\n };\r\n \r\n // Determine if a color is light or dark (based on relative luminance)\r\n const isLightColor = (color) => {\r\n let r, g, b;\r\n if (color.startsWith('#')) {\r\n const rgb = hexToRgb(color);\r\n if (!rgb) return false;\r\n r = rgb.r;\r\n g = rgb.g;\r\n b = rgb.b;\r\n } else if (color.startsWith('rgb')) {\r\n const match = color.match(/\\d+/g);\r\n [r, g, b] = match.map(Number);\r\n } else {\r\n return false;\r\n }\r\n \r\n // Calculate relative luminance (perception-based)\r\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\r\n return luminance > 0.5;\r\n };\r\n \r\n // Lighten a color by a percentage (0-1)\r\n const lightenColor = (color, percent) => {\r\n const rgb = hexToRgb(color);\r\n if (!rgb) return color;\r\n \r\n const r = Math.min(255, Math.round(rgb.r + (255 - rgb.r) * percent));\r\n const g = Math.min(255, Math.round(rgb.g + (255 - rgb.g) * percent));\r\n const b = Math.min(255, Math.round(rgb.b + (255 - rgb.b) * percent));\r\n \r\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\r\n };\r\n \r\n // Darken a color by a percentage (0-1)\r\n const darkenColor = (color, percent) => {\r\n const rgb = hexToRgb(color);\r\n if (!rgb) return color;\r\n \r\n const r = Math.max(0, Math.round(rgb.r * (1 - percent)));\r\n const g = Math.max(0, Math.round(rgb.g * (1 - percent)));\r\n const b = Math.max(0, Math.round(rgb.b * (1 - percent)));\r\n \r\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\r\n };\r\n \r\n // Add alpha transparency to a color\r\n const addAlpha = (color, opacity) => {\r\n const rgb = hexToRgb(color);\r\n if (!rgb) return color;\r\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`;\r\n };\r\n \r\n // ===== Theme Generation =====\r\n \r\n const isAccentLight = isLightColor(primaryColor);\r\n \r\n return {\r\n // Primary color\r\n primary: primaryColor,\r\n \r\n // Contrast detection\r\n isLight: isAccentLight,\r\n \r\n // Header colors\r\n header: {\r\n background: primaryColor,\r\n text: isAccentLight ? '#1f2937' : '#ffffff',\r\n button: isAccentLight ? '#374151' : '#ffffff',\r\n border: lightenColor(primaryColor, 0.85)\r\n },\r\n \r\n // Message colors\r\n messages: {\r\n userBackground: primaryColor,\r\n userText: isAccentLight ? '#1f2937' : '#ffffff',\r\n botBackground: lightenColor(primaryColor, 0.85),\r\n botText: '#4b5563',\r\n link: darkenColor(primaryColor, 0.1),\r\n timestamp: '#9ca3af'\r\n },\r\n \r\n // Window/Container colors\r\n window: {\r\n background: lightenColor(primaryColor, 0.95),\r\n border: isAccentLight ? darkenColor(primaryColor, 0.2) : lightenColor(primaryColor, 0.3),\r\n shadow: addAlpha(primaryColor, 0.15)\r\n },\r\n \r\n // Input area colors\r\n input: {\r\n background: '#ffffff',\r\n border: lightenColor(primaryColor, 0.85),\r\n text: '#1f2937',\r\n placeholder: '#9ca3af',\r\n buttonBackground: primaryColor,\r\n buttonText: isAccentLight ? '#1f2937' : '#ffffff'\r\n },\r\n \r\n // Footer colors\r\n footer: {\r\n text: isAccentLight ? darkenColor(primaryColor, 0.3) : lightenColor(primaryColor, 0.2),\r\n link: darkenColor(primaryColor, 0.1)\r\n },\r\n \r\n // Chat bubble (floating button)\r\n bubble: {\r\n background: primaryColor,\r\n icon: isAccentLight ? '#1f2937' : '#ffffff'\r\n },\r\n \r\n // Hint bubble\r\n hint: {\r\n background: '#ffffff',\r\n text: '#1f2937',\r\n border: lightenColor(primaryColor, 0.85),\r\n closeButton: primaryColor\r\n },\r\n \r\n // Menu dropdown\r\n menu: {\r\n background: '#ffffff',\r\n text: '#1f2937',\r\n hover: lightenColor(primaryColor, 0.9),\r\n border: '#e5e7eb'\r\n },\r\n \r\n // Rating stars\r\n rating: {\r\n star: '#fbbf24',\r\n text: '#6b7280'\r\n },\r\n \r\n // Utility colors\r\n utils: {\r\n lighten: lightenColor,\r\n darken: darkenColor,\r\n addAlpha: addAlpha,\r\n hexToRgb: hexToRgb\r\n }\r\n };\r\n };\r\n \r\n /**\r\n * ========================================================================\r\n * ASSET VALIDATION HELPERS\r\n * ========================================================================\r\n * These functions validate logos and avatars to ensure they are either:\r\n * 1. Valid, loadable image URLs\r\n * 2. Valid SVG markup\r\n * If validation fails, silently falls back to default assets (no invalid content displayed)\r\n */\r\n \r\n // Check if string matches URL pattern\r\n const isUrlPattern = (str) => {\r\n if (!str || typeof str !== 'string') return false;\r\n return /^https?:\\/\\/.+/.test(str.trim());\r\n };\r\n \r\n // Attempt to load image from URL with timeout\r\n const canLoadImage = async (url) => {\r\n return new Promise((resolve) => {\r\n const img = new Image();\r\n const timeout = setTimeout(() => {\r\n img.src = ''; // Cancel loading\r\n resolve(false);\r\n }, 3000);\r\n \r\n img.onload = () => {\r\n clearTimeout(timeout);\r\n resolve(true);\r\n };\r\n \r\n img.onerror = () => {\r\n clearTimeout(timeout);\r\n resolve(false);\r\n };\r\n \r\n img.src = url;\r\n });\r\n };\r\n \r\n // Validate if a string is valid SVG markup\r\n const isValidSvg = (svgString) => {\r\n if (!svgString || typeof svgString !== 'string') return false;\r\n \r\n // Check if it starts with <svg and contains closing tag\r\n const svgPattern = /^\\s*<svg[\\s\\S]*<\\/svg>\\s*$/i;\r\n if (!svgPattern.test(svgString)) return false;\r\n \r\n // Try to parse as XML\r\n try {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(svgString, 'image/svg+xml');\r\n const parserError = doc.querySelector('parsererror');\r\n return !parserError;\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n \r\n // Validate and return asset (URL or SVG) with silent fallback to default\r\n const validateAsset = async (asset, defaultAsset) => {\r\n // If no asset provided, use default\r\n if (!asset) return defaultAsset;\r\n \r\n // If it looks like a URL, try to load it\r\n if (isUrlPattern(asset)) {\r\n const loaded = await canLoadImage(asset);\r\n // If image loads successfully, use it; otherwise use default (don't display broken URL)\r\n return loaded ? asset : defaultAsset;\r\n }\r\n \r\n // If it's valid SVG markup, use it\r\n if (isValidSvg(asset)) {\r\n return asset;\r\n }\r\n \r\n // For any other invalid input, use default (don't display invalid text)\r\n return defaultAsset;\r\n };\r\n \r\n // ===== Generate Complete Color Theme =====\r\n const theme = generateColorTheme(config.botaccentColor);\r\n \r\n // Legacy variable names for backward compatibility (extract from theme)\r\n const isAccentLight = theme.isLight;\r\n const userMessageBg = theme.messages.userBackground;\r\n const userMessageText = theme.messages.userText;\r\n const botMessageBg = theme.messages.botBackground;\r\n const botMessageText = theme.messages.botText;\r\n const linkColor = theme.messages.link;\r\n const headerTextColor = theme.header.text;\r\n const headerButtonColor = theme.header.button;\r\n const sendButtonTextColor = theme.input.buttonText;\r\n const windowBorderColor = theme.window.border;\r\n const windowBackgroundColor = theme.window.background;\r\n const inputBorderColor = theme.input.border;\r\n const headerBorderColor = theme.header.border;\r\n const footerTextColor = theme.footer.text;\r\n const windowShadowColor = theme.window.shadow;\r\n \r\n // Choose appropriate default logo based on background color\r\n const defaultLogo = isAccentLight ? defaultConfig.companyLogoBlack : defaultConfig.companyLogoWhite;\r\n \r\n // Validate company logo with fallback to default\r\n const logoToValidate = companyLogo || (apiConfig?.companyLogo);\r\n let validatedLogo = logoToValidate;\r\n let logoLoadFailed = false;\r\n if (logoToValidate && isUrlPattern(logoToValidate)) {\r\n const loaded = await canLoadImage(logoToValidate);\r\n if (!loaded) {\r\n logoLoadFailed = true;\r\n }\r\n } else if (logoToValidate && !isValidSvg(logoToValidate)) {\r\n logoLoadFailed = true;\r\n }\r\n config.companyLogo = logoLoadFailed ? null : validatedLogo;\r\n\r\n // Validate bot avatar with placeholder on fail\r\n const avatarToValidate = config.botAvatar;\r\n let validatedAvatar = avatarToValidate;\r\n let avatarLoadFailed = false;\r\n if (avatarToValidate && isUrlPattern(avatarToValidate)) {\r\n const loaded = await canLoadImage(avatarToValidate);\r\n if (!loaded) {\r\n avatarLoadFailed = true;\r\n }\r\n } else if (avatarToValidate && !isValidSvg(avatarToValidate)) {\r\n avatarLoadFailed = true;\r\n }\r\n config.botAvatar = avatarLoadFailed ? null : validatedAvatar;\r\n \r\n const modeClass = config.mode === \"section\" ? \"section-mode\" : \"bubble-mode\";\r\n const chatWindow = document.createElement('div');\r\n \r\n let bubble, hintBubbleTimeout, hintBubble;\r\n if (config.mode === \"bubble\") {\r\n bubble = document.createElement('div');\r\n bubble.id = \"aptolix-chat-bubble\";\r\n bubble.style.backgroundColor = config.botaccentColor;\r\n \r\n // Render widget icon (SVG or text/emoji)\r\n const iconValue = config.widgetIcon || defaultConfig.widgetIcon;\r\n // Check if it's SVG\r\n if (iconValue.includes('<svg') || (iconValue.includes('<') && iconValue.includes('>'))) {\r\n bubble.innerHTML = iconValue;\r\n } else {\r\n // It's text/emoji\r\n bubble.innerText = iconValue;\r\n }\r\n \r\n document.body.appendChild(bubble);\r\n\r\n // Remove any existing hint bubble before creating a new one\r\n const existingHintBubble = document.getElementById(\"aptolix-chat-hint-bubble\");\r\n if (existingHintBubble) {\r\n existingHintBubble.remove();\r\n }\r\n\r\n // Create hint bubble but keep it hidden initially\r\n hintBubble = document.createElement('div');\r\n hintBubble.id = \"aptolix-chat-hint-bubble\";\r\n hintBubble.className = \"aptolix-hint-bubble\";\r\n hintBubble.style.display = \"none\";\r\n hintBubble.style.position = \"fixed\";\r\n hintBubble.style.right = \"40px\";\r\n hintBubble.style.bottom = \"110px\";\r\n hintBubble.style.zIndex = \"9999\"; // <-- Ensure it's on top\r\n\r\n // Create the hint text span\r\n const hintTextSpan = document.createElement('span');\r\n hintTextSpan.textContent = config.floatingWelcomeMessage;\r\n\r\n // Create the close button\r\n const hintCloseBtn = document.createElement('button');\r\n hintCloseBtn.id = \"aptolix-hint-close\";\r\n hintCloseBtn.title = \"Close\";\r\n hintCloseBtn.setAttribute(\"aria-label\", \"Close\");\r\n hintCloseBtn.innerHTML = \"✕\";\r\n hintCloseBtn.style.background = \"none\";\r\n hintCloseBtn.style.border = \"none\";\r\n hintCloseBtn.style.color = config.botaccentColor;\r\n hintCloseBtn.style.fontSize = \"1.3em\";\r\n hintCloseBtn.style.position = \"absolute\";\r\n hintCloseBtn.style.top = \"8px\";\r\n hintCloseBtn.style.right = \"12px\";\r\n hintCloseBtn.style.cursor = \"pointer\";\r\n hintCloseBtn.style.padding = \"0\";\r\n\r\n // Add event listener directly\r\n hintCloseBtn.addEventListener(\"click\", () => {\r\n hintBubble.style.display = \"none\";\r\n sessionStorage.setItem(\"aptolixHintClosed\", \"true\");\r\n clearTimeout(hintBubbleTimeout);\r\n });\r\n\r\n // Append children\r\n hintBubble.appendChild(hintTextSpan);\r\n hintBubble.appendChild(hintCloseBtn);\r\n\r\n document.body.appendChild(hintBubble);\r\n\r\n // Show hint bubble after delay, unless closed in session\r\n hintBubbleTimeout = setTimeout(() => {\r\n if (\r\n chatWindow.style.display === \"none\" &&\r\n !sessionStorage.getItem(\"aptolixHintClosed\")\r\n ) {\r\n hintBubble.style.display = \"block\";\r\n }\r\n }, config.floatingWelcomeDelay * 1000); // Convert seconds to milliseconds\r\n\r\n // Hide hint bubble when main bubble is clicked\r\n bubble.addEventListener(\"click\", () => {\r\n hintBubble.style.display = \"none\";\r\n clearTimeout(hintBubbleTimeout);\r\n });\r\n\r\n // Hide hint bubble if chat is opened by other means\r\n chatWindow.addEventListener(\"transitionstart\", () => {\r\n hintBubble.style.display = \"none\";\r\n clearTimeout(hintBubbleTimeout);\r\n });\r\n }\r\n\r\n \r\n chatWindow.id = \"aptolix-chat-window\";\r\n chatWindow.classList.add(modeClass);\r\n chatWindow.style.display = config.mode === \"section\" ? \"flex\" : \"none\";\r\n \r\n // Apply dynamic colors to chat window\r\n chatWindow.style.backgroundColor = windowBackgroundColor;\r\n chatWindow.style.borderColor = windowBorderColor;\r\n chatWindow.style.boxShadow = `0 4px 20px ${windowShadowColor}`;\r\n\r\n if (config.mode === \"section\" && config.target) {\r\n const targetEl = typeof config.target === \"string\" ? document.querySelector(config.target) : config.target;\r\n if (targetEl) targetEl.appendChild(chatWindow);\r\n else document.body.appendChild(chatWindow);\r\n } else {\r\n document.body.appendChild(chatWindow);\r\n }\r\n\r\n\r\n // Determine logo HTML - if no valid logo, render nothing\r\n let logoHTML = '';\r\n if (config.companyLogo) {\r\n const isLogoUrl = /^https?:\\/\\//.test(config.companyLogo);\r\n logoHTML = isLogoUrl\r\n ? `<img src=\"${config.companyLogo}\" alt=\"Company Logo\" class=\"aptolix-company-logo\" style=\"max-width:40px;max-height:40px;\" />`\r\n : config.companyLogo;\r\n } // else: leave logoHTML as empty string (no element)\r\n\r\n // Determine bot avatar HTML - use default if not provided\r\n const isBotAvatarUrl = config.botAvatar && /^https?:\\/\\//.test(config.botAvatar);\r\n const botAvatarHTML = isBotAvatarUrl\r\n ? `<img src=\"${config.botAvatar}\" alt=\"Bot Avatar\" style=\"width:40px;height:40px;border-radius:50%;\" />`\r\n : (config.botAvatar || defaultConfig.botAvatar);\r\n \r\n // Create user avatar HTML - use default if not provided\r\n const isUserAvatarUrl = config.userAvatar && /^https?:\\/\\//.test(config.userAvatar);\r\n const userAvatarHTML = isUserAvatarUrl\r\n ? `<img src=\"${config.userAvatar}\" alt=\"User Avatar\" style=\"width:40px;height:40px;border-radius:50%;\" />`\r\n : (config.userAvatar || defaultConfig.userAvatar);\r\n\r\n // Construct Aptolix link with UTM parameters\r\n const utmSource = encodeURIComponent(window.location.hostname);\r\n const utmMedium = encodeURIComponent('widget');\r\n const utmCampaign = encodeURIComponent('refback');\r\n const aptolixLink = `https://aptolix.com?utm_source=${utmSource}&utm_medium=${utmMedium}&utm_campaign=${utmCampaign}`;\r\n\r\n chatWindow.innerHTML = `\r\n <div id=\"aptolix-chat-header\" style=\"background-color: ${config.botaccentColor}; color: ${headerTextColor}; border-bottom: 2px solid ${headerBorderColor};\">\r\n <div class=\"aptolix-header-flex\">\r\n <div class=\"aptolix-header-title\">\r\n ${logoHTML ? `<div class=\"aptolix-company-logo-wrapper\">${logoHTML}</div>` : ''}\r\n <strong class=\"aptolix-bot-name\">${config.botname}</strong>\r\n </div>\r\n <div class=\"aptolix-header-actions\">\r\n <button id=\"aptolix-chat-menu\" title=\"More options\" aria-label=\"More options\" style=\"color: ${headerButtonColor};\">⋮</button>\r\n ${config.allowExpandChatWindow ? `<button id=\"aptolix-chat-expand\" title=\"Expand/Collapse\" aria-label=\"Expand/Collapse\" style=\"color: ${headerButtonColor};\">\r\n <span id=\"aptolix-chat-expand-icon\">⤢</span>\r\n </button>` : ''}\r\n <button id=\"aptolix-chat-close\" title=\"Close chat\" aria-label=\"Close chat\" style=\"color: ${headerButtonColor};\">×</button>\r\n <div id=\"aptolix-chat-menu-dropdown\" class=\"aptolix-menu-dropdown\">\r\n <button id=\"aptolix-chat-reset\" class=\"aptolix-menu-item\" title=\"Reset chat\" aria-label=\"Reset chat\">\r\n <span class=\"aptolix-menu-icon\">⟲</span>\r\n <span class=\"aptolix-menu-text\">Reset Chat</span>\r\n </button>\r\n ${config.allowDownloadTranscript ? `<button id=\"aptolix-chat-download\" class=\"aptolix-menu-item\" title=\"Download chat\" aria-label=\"Download chat\">\r\n <span class=\"aptolix-menu-icon\">⤓</span>\r\n <span class=\"aptolix-menu-text\">Download Chat</span>\r\n </button>` : ''}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"aptolix-chat-messages\"></div>\r\n <div id=\"aptolix-chat-input\" style=\"border-top: 2px solid ${inputBorderColor};\">\r\n <textarea id=\"aptolix-chat-inputbox\" rows=\"1\" placeholder=\"Type your message...\" style=\"resize:none\"></textarea>\r\n <button style=\"background-color: ${config.botaccentColor}; color: ${sendButtonTextColor};\">Send</button>\r\n </div>\r\n <div class=\"aptolix-footer\">\r\n <div class=\"aptolix-powered-by\" id=\"aptolix-powered-by\" style=\"color: ${footerTextColor};\">\r\n Powered by <a href=\"${aptolixLink}\" target=\"_blank\" rel=\"noopener\" class=\"aptolix-link\" style=\"color: ${config.botaccentColor};\">Aptolix</a>\r\n </div>\r\n <span class=\"aptolix-footer-separator\" id=\"aptolix-footer-separator\">|</span>\r\n <div class=\"aptolix-rating\" id=\"aptolix-rating\">\r\n <span class=\"aptolix-rating-label\">Rate this chat:</span>\r\n <div class=\"aptolix-stars\" id=\"aptolix-stars\">\r\n <span class=\"star\" data-rating=\"1\">☆</span>\r\n <span class=\"star\" data-rating=\"2\">☆</span>\r\n <span class=\"star\" data-rating=\"3\">☆</span>\r\n <span class=\"star\" data-rating=\"4\">☆</span>\r\n <span class=\"star\" data-rating=\"5\">☆</span>\r\n </div>\r\n </div>\r\n </div>\r\n`;\r\n\r\n const closeBtn = chatWindow.querySelector(\"#aptolix-chat-close\");\r\n const resetBtn = chatWindow.querySelector(\"#aptolix-chat-reset\");\r\n const expandBtn = config.allowExpandChatWindow ? chatWindow.querySelector(\"#aptolix-chat-expand\") : null;\r\n const expandIcon = config.allowExpandChatWindow ? chatWindow.querySelector(\"#aptolix-chat-expand-icon\") : null;\r\n const input = chatWindow.querySelector(\"#aptolix-chat-inputbox\");\r\n const sendButton = chatWindow.querySelector(\"#aptolix-chat-input button\");\r\n const messagesDiv = chatWindow.querySelector(\"#aptolix-chat-messages\");\r\n const downloadBtn = config.allowDownloadTranscript ? chatWindow.querySelector(\"#aptolix-chat-download\") : null;\r\n const menuBtn = chatWindow.querySelector(\"#aptolix-chat-menu\");\r\n const menuDropdown = chatWindow.querySelector(\"#aptolix-chat-menu-dropdown\");\r\n \r\n // Apply dynamic background to messages area\r\n messagesDiv.style.backgroundColor = theme.window.background;\r\n \r\n // Apply dynamic colors to textarea\r\n input.style.borderColor = theme.input.border;\r\n input.style.backgroundColor = theme.window.background;\r\n \r\n // Apply hover/focus colors dynamically\r\n input.addEventListener('focus', () => {\r\n input.style.borderColor = theme.primary;\r\n });\r\n input.addEventListener('blur', () => {\r\n input.style.borderColor = theme.input.border;\r\n });\r\n \r\n // Apply dynamic colors to menu dropdown\r\n menuDropdown.style.backgroundColor = theme.menu.background;\r\n menuDropdown.style.borderColor = theme.menu.border;\r\n menuDropdown.style.border = `1px solid ${theme.menu.border}`;\r\n \r\n // Apply hover effect to menu items\r\n const menuItems = menuDropdown.querySelectorAll('.aptolix-menu-item');\r\n menuItems.forEach(item => {\r\n // Set initial colors\r\n item.style.backgroundColor = theme.menu.background;\r\n item.style.color = theme.menu.text;\r\n \r\n item.addEventListener('mouseenter', () => {\r\n item.style.backgroundColor = theme.menu.hover;\r\n });\r\n item.addEventListener('mouseleave', () => {\r\n item.style.backgroundColor = theme.menu.background;\r\n });\r\n });\r\n \r\n // Menu dropdown toggle\r\n menuBtn.addEventListener(\"click\", (e) => {\r\n e.stopPropagation();\r\n menuDropdown.classList.toggle(\"show\");\r\n });\r\n \r\n // Close menu when clicking outside\r\n document.addEventListener(\"click\", (e) => {\r\n if (!menuBtn.contains(e.target) && !menuDropdown.contains(e.target)) {\r\n menuDropdown.classList.remove(\"show\");\r\n }\r\n });\r\n \r\n // Star rating handlers\r\n const stars = chatWindow.querySelectorAll('.star');\r\n stars.forEach(star => {\r\n // Hover effect\r\n star.addEventListener('mouseenter', (e) => {\r\n const rating = parseInt(e.target.getAttribute('data-rating'));\r\n stars.forEach((s, idx) => {\r\n s.textContent = idx < rating ? '★' : '☆';\r\n });\r\n });\r\n \r\n // Click to submit\r\n star.addEventListener('click', (e) => {\r\n const rating = parseInt(e.target.getAttribute('data-rating'));\r\n submitRating(rating);\r\n });\r\n });\r\n \r\n // Reset stars on mouse leave\r\n const starsContainer = chatWindow.querySelector('#aptolix-stars');\r\n if (starsContainer) {\r\n starsContainer.addEventListener('mouseleave', () => {\r\n stars.forEach(s => s.textContent = '☆');\r\n });\r\n }\r\n\r\n // Format relative time for messages\r\n const formatRelativeTime = (timestamp) => {\r\n const now = Date.now();\r\n const diff = Math.floor((now - timestamp) / 1000); // difference in seconds\r\n\r\n if (diff < 10) return 'just now';\r\n if (diff < 60) return `${diff} secs ago`;\r\n if (diff < 3600) {\r\n const mins = Math.floor(diff / 60);\r\n return mins === 1 ? '1 min ago' : `${mins} mins ago`;\r\n }\r\n if (diff < 86400) {\r\n const hours = Math.floor(diff / 3600);\r\n return hours === 1 ? '1 hour ago' : `${hours} hours ago`;\r\n }\r\n const days = Math.floor(diff / 86400);\r\n return days === 1 ? '1 day ago' : `${days} days ago`;\r\n };\r\n\r\n // Update all message timestamps\r\n const updateTimestamps = () => {\r\n const timestamps = messagesDiv.querySelectorAll('.message-timestamp');\r\n timestamps.forEach(span => {\r\n const timestamp = parseInt(span.getAttribute('data-timestamp'));\r\n span.textContent = formatRelativeTime(timestamp);\r\n });\r\n };\r\n\r\n // Update timestamps every 60 seconds\r\n setInterval(updateTimestamps, 60000);\r\n\r\n // Apply accent color to all links and message backgrounds\r\n const applyAccentToLinks = () => {\r\n const links = messagesDiv.querySelectorAll('.message-text a');\r\n links.forEach(link => {\r\n link.style.color = linkColor;\r\n });\r\n \r\n // Apply dynamic colors to message bubbles\r\n const userMessages = messagesDiv.querySelectorAll('.message.user .message-text');\r\n userMessages.forEach(msg => {\r\n msg.style.backgroundColor = userMessageBg;\r\n msg.style.color = userMessageText;\r\n });\r\n \r\n const botMessages = messagesDiv.querySelectorAll('.message.bot .message-text');\r\n botMessages.forEach(msg => {\r\n msg.style.backgroundColor = botMessageBg;\r\n msg.style.color = botMessageText;\r\n });\r\n };\r\n\r\n // Initialize localStorage manager\r\n const storageManager = new LocalStorageManager();\r\n \r\n // Get visitor ID from localStorage (persists across resets)\r\n let visitorId = storageManager.getVisitorId(chatbotId);\r\n \r\n // Get session ID from localStorage (cleared on reset for new conversation)\r\n let sessionId = storageManager.getSessionId(chatbotId);\r\n \r\n // Rating tracking\r\n let botMessageCount = 0;\r\n let lastRatedAtMessageCount = 0;\r\n let isRatingVisible = false;\r\n\r\n // Helper to save current chat history\r\n const saveChatToLocalStorage = () => {\r\n if (!sessionId) return; // Only save if session ID exists\r\n \r\n const messages = Array.from(messagesDiv.querySelectorAll('.message:not(.typing):not(.error)')).map(msg => {\r\n const isUser = msg.classList.contains('user');\r\n const isGreeting = msg.classList.contains('greeting');\r\n const messageText = msg.querySelector('.message-text');\r\n const timestampEl = msg.querySelector('.message-timestamp');\r\n \r\n return {\r\n type: isUser ? 'user' : 'bot',\r\n text: messageText ? messageText.innerHTML : '',\r\n timestamp: timestampEl ? parseInt(timestampEl.getAttribute('data-timestamp')) : Date.now(),\r\n isGreeting: isGreeting\r\n };\r\n });\r\n \r\n storageManager.saveChatHistory(chatbotId, sessionId, messages);\r\n };\r\n\r\n // Calculate remaining time until limit expires\r\n const calculateRemainingTime = (limitDateStr) => {\r\n let limitDate;\r\n \r\n // If the date string doesn't include time (just YYYY-MM-DD), \r\n // set it to end of day (23:59:59.999 UTC)\r\n if (limitDateStr.length === 10 && !limitDateStr.includes('T')) {\r\n limitDate = new Date(limitDateStr + 'T23:59:59.999Z');\r\n } else {\r\n limitDate = new Date(limitDateStr);\r\n }\r\n \r\n const now = new Date();\r\n const diffMs = limitDate - now;\r\n \r\n if (diffMs <= 0) return \"0 minutes\";\r\n \r\n const diffMinutes = Math.ceil(diffMs / (1000 * 60));\r\n const hours = Math.floor(diffMinutes / 60);\r\n const minutes = diffMinutes % 60;\r\n \r\n if (hours > 0 && minutes > 0) {\r\n return `${hours} hour${hours !== 1 ? 's' : ''} and ${minutes} minute${minutes !== 1 ? 's' : ''}`;\r\n } else if (hours > 0) {\r\n return `${hours} hour${hours !== 1 ? 's' : ''}`;\r\n } else {\r\n return `${minutes} minute${minutes !== 1 ? 's' : ''}`;\r\n }\r\n };\r\n\r\n // Show usage limit warning banner\r\n const showLimitWarning = (limitDateStr) => {\r\n const timeRemaining = calculateRemainingTime(limitDateStr);\r\n \r\n // Remove any existing warning\r\n const existingWarning = chatWindow.querySelector('.aptolix-limit-warning');\r\n if (existingWarning) existingWarning.remove();\r\n \r\n const warningBanner = document.createElement('div');\r\n warningBanner.className = 'aptolix-limit-warning';\r\n warningBanner.style.cssText = `\r\n background: linear-gradient(135deg, #fef3c7 0%, #fed7aa 100%);\r\n border-top: 2px solid #f59e0b;\r\n border-bottom: 2px solid #f59e0b;\r\n color: #92400e;\r\n padding: 6px 12px;\r\n font-size: 12px;\r\n line-height: 1.3;\r\n font-weight: 500;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n `;\r\n warningBanner.innerHTML = `\r\n <span style=\"font-size: 14px;\">⚠️</span>\r\n <span>Usage limit reached. Try again in ${timeRemaining}.</span>\r\n `;\r\n \r\n // Insert warning above input area\r\n const inputArea = chatWindow.querySelector('#aptolix-chat-input');\r\n inputArea.parentNode.insertBefore(warningBanner, inputArea);\r\n \r\n // Disable input completely\r\n input.disabled = true;\r\n input.placeholder = \"Chat unavailable\";\r\n input.style.cursor = \"not-allowed\";\r\n sendButton.disabled = true;\r\n sendButton.style.opacity = \"0.5\";\r\n sendButton.style.cursor = \"not-allowed\";\r\n };\r\n\r\n // Enable chat input\r\n const enableChatInput = () => {\r\n input.disabled = false;\r\n input.placeholder = \"Type your message...\";\r\n input.style.cursor = \"text\";\r\n sendButton.disabled = false;\r\n sendButton.style.opacity = \"1\";\r\n sendButton.style.cursor = \"pointer\";\r\n \r\n const warningBanner = chatWindow.querySelector('.aptolix-limit-warning');\r\n if (warningBanner) warningBanner.remove();\r\n };\r\n\r\n // Show rating prompt\r\n const showRatingPrompt = () => {\r\n if (!config.allowRating || isRatingVisible) return;\r\n \r\n const ratingDiv = chatWindow.querySelector('#aptolix-rating');\r\n const separator = chatWindow.querySelector('#aptolix-footer-separator');\r\n \r\n if (!ratingDiv || !separator) return;\r\n \r\n isRatingVisible = true;\r\n \r\n // Show separator and rating with smooth transitions\r\n setTimeout(() => {\r\n separator.classList.add('show');\r\n ratingDiv.classList.add('show');\r\n }, 10);\r\n };\r\n\r\n // Hide rating prompt\r\n const hideRatingPrompt = (showThankYou = false) => {\r\n const poweredBy = chatWindow.querySelector('#aptolix-powered-by');\r\n const ratingDiv = chatWindow.querySelector('#aptolix-rating');\r\n const separator = chatWindow.querySelector('#aptolix-footer-separator');\r\n \r\n if (!poweredBy || !ratingDiv || !separator) return;\r\n \r\n if (showThankYou) {\r\n // Show thank you message briefly\r\n const originalContent = poweredBy.innerHTML;\r\n poweredBy.innerHTML = '✓ Thanks for your feedback!';\r\n \r\n // Hide separator and rating smoothly\r\n separator.classList.remove('show');\r\n ratingDiv.classList.remove('show');\r\n \r\n // Reset after 2 seconds\r\n setTimeout(() => {\r\n poweredBy.innerHTML = originalContent;\r\n isRatingVisible = false;\r\n }, 2000);\r\n } else {\r\n // Just hide without thank you\r\n separator.classList.remove('show');\r\n ratingDiv.classList.remove('show');\r\n setTimeout(() => {\r\n isRatingVisible = false;\r\n }, 400);\r\n }\r\n };\r\n\r\n // Submit rating\r\n const submitRating = async (rating) => {\r\n try {\r\n // Rating API requires both visitor_id and session_id\r\n if (!visitorId || !sessionId) {\r\n hideRatingPrompt(true);\r\n return;\r\n }\r\n \r\n const requestBody = {\r\n rating: rating,\r\n visitor_id: visitorId,\r\n session_id: sessionId\r\n };\r\n \r\n await fetch(`${apiHost}/chatbot/${chatbotId}/rating`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(requestBody)\r\n });\r\n \r\n lastRatedAtMessageCount = botMessageCount;\r\n hideRatingPrompt(true);\r\n } catch (error) {\r\n hideRatingPrompt(true); // Still show thank you even if API fails\r\n }\r\n };\r\n\r\n // Check if should show rating\r\n const checkAndShowRating = () => {\r\n if (!config.allowRating) return;\r\n \r\n const shouldShow = botMessageCount >= config.ratingThreshold && \r\n botMessageCount >= lastRatedAtMessageCount + config.ratingInterval;\r\n \r\n if (shouldShow) {\r\n showRatingPrompt();\r\n }\r\n };\r\n\r\n if (config.mode === \"bubble\") {\r\n closeBtn.addEventListener(\"click\", () => {\r\n chatWindow.style.display = \"none\";\r\n });\r\n }\r\n\r\n resetBtn.addEventListener(\"click\", () => {\r\n messagesDiv.innerHTML = \"\";\r\n input.value = \"\";\r\n if (sessionId) {\r\n storageManager.clearChatHistory(chatbotId, sessionId);\r\n storageManager.clearSessionId(chatbotId); // Clear session to start new conversation\r\n sessionId = null;\r\n }\r\n // Reset rating counters\r\n botMessageCount = 0;\r\n lastRatedAtMessageCount = 0;\r\n hideRatingPrompt(false);\r\n \r\n // Close the menu dropdown\r\n menuDropdown.classList.remove(\"show\");\r\n \r\n // Check if usage limit is still active\r\n const limitData = visitorId ? storageManager.getUsageLimitReached(chatbotId, visitorId) : null;\r\n if (limitData && limitData.limitReachedDate) {\r\n // Show greeting but keep limit warning\r\n showGreeting();\r\n showLimitWarning(limitData.limitReachedDate);\r\n } else {\r\n // Normal reset - show greeting and enable input\r\n showGreeting();\r\n enableChatInput();\r\n }\r\n saveChatToLocalStorage(); // Save greeting to localStorage\r\n });\r\n\r\n if (config.mode === \"bubble\" && bubble) {\r\n bubble.addEventListener(\"click\", () => {\r\n const wasClosed = chatWindow.style.display === \"none\";\r\n chatWindow.style.display = wasClosed ? \"flex\" : \"none\";\r\n bubble.removeAttribute(\"data-unread\");\r\n \r\n if (wasClosed) {\r\n // Check usage limit when opening chat\r\n const limitData = storageManager.getUsageLimitReached(chatbotId, visitorId);\r\n if (limitData) {\r\n showLimitWarning(limitData.limitReachedDate);\r\n } else {\r\n enableChatInput();\r\n showGreeting();\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (config.mode === \"bubble\") {\r\n document.addEventListener(\"mousedown\", function onOutsideClick(event) {\r\n if (chatWindow.style.display !== \"none\") {\r\n if (\r\n !chatWindow.contains(event.target) &&\r\n !bubble.contains(event.target)\r\n ) {\r\n chatWindow.style.display = \"none\";\r\n }\r\n }\r\n });\r\n }\r\n\r\n async function sendMessage(isRetry = false, previousText = null) {\r\n // Block if input is disabled (e.g., usage limit reached)\r\n if (input.disabled && !isRetry) {\r\n return;\r\n }\r\n \r\n const userText = previousText || input.value.trim();\r\n if (!userText) return;\r\n if (!isRetry) {\r\n input.value = \"\";\r\n input.rows = 1;\r\n input.style.height = \"32px\"; // or your default line height\r\n input.style.overflowY = \"hidden\";\r\n }\r\n if (!isRetry) {\r\n const userMsg = document.createElement(\"div\");\r\n userMsg.className = \"message user\";\r\n const timestamp = Date.now();\r\n userMsg.innerHTML = `\r\n <div class=\"message-avatar\">\r\n ${userAvatarHTML}\r\n <div class=\"message-sender\">${config.username}</div>\r\n </div>\r\n <div class=\"message-content\">\r\n <div class=\"message-text\" style=\"background-color: ${userMessageBg}; color: ${userMessageText};\">${userText}</div>\r\n <span class=\"message-timestamp\" data-timestamp=\"${timestamp}\">${formatRelativeTime(timestamp)}</span>\r\n </div>\r\n `;\r\n messagesDiv.appendChild(userMsg);\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n saveChatToLocalStorage();\r\n }\r\n\r\n const typingMsg = document.createElement(\"div\");\r\n typingMsg.className = \"message bot typing\";\r\n typingMsg.innerHTML = `<span class=\"typing-dots\"><span>.</span><span>.</span><span>.</span></span>`;\r\n messagesDiv.appendChild(typingMsg);\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n\r\n function showError() {\r\n typingMsg.remove();\r\n const errorMsg = document.createElement(\"div\");\r\n errorMsg.className = \"message bot error\";\r\n errorMsg.innerHTML = `\r\n <div>\r\n <strong>⚠️ Unable to connect to the assistant.</strong><br>\r\n Please check your internet connection or try again later.\r\n </div>\r\n <button class=\"aptolix-retry-btn\">Retry</button>\r\n `;\r\n messagesDiv.appendChild(errorMsg);\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n\r\n const retryBtn = errorMsg.querySelector('.aptolix-retry-btn');\r\n if (retryBtn) {\r\n retryBtn.addEventListener('click', () => {\r\n errorMsg.remove();\r\n sendMessage(true, userText);\r\n });\r\n }\r\n }\r\n\r\n try {\r\n // Build request body - include visitor_id and session_id if they exist\r\n const requestBody = { message: userText };\r\n \r\n if (visitorId) {\r\n requestBody.visitor_id = visitorId;\r\n }\r\n \r\n if (sessionId) {\r\n requestBody.session_id = sessionId;\r\n }\r\n\r\n const res = await fetch(`${apiHost}/chatbot/${chatbotId}`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify(requestBody),\r\n });\r\n const data = await res.json();\r\n\r\n // Always update visitor_id and session_id from API response (backend is source of truth)\r\n if (data.visitor_id) {\r\n visitorId = data.visitor_id;\r\n storageManager.saveVisitorId(chatbotId, visitorId);\r\n }\r\n \r\n if (data.session_id) {\r\n sessionId = data.session_id;\r\n storageManager.saveSessionId(chatbotId, sessionId);\r\n }\r\n\r\n // Check if usage limit reached\r\n if (data.limitReachedDate) {\r\n storageManager.setUsageLimitReached(chatbotId, visitorId, data.limitReachedDate);\r\n typingMsg.remove();\r\n showLimitWarning(data.limitReachedDate);\r\n return;\r\n }\r\n\r\n typingMsg.remove();\r\n\r\n const botMsg = document.createElement(\"div\");\r\n botMsg.className = \"message bot\";\r\n const timestamp = Date.now();\r\n botMsg.innerHTML = `\r\n ${botAvatarHTML ? `<div class=\"message-avatar\">${botAvatarHTML}<div class=\"message-sender\">${config.botname}</div></div>` : ''}\r\n <div class=\"message-content\">\r\n <div class=\"message-text\" style=\"background-color: ${botMessageBg}; color: ${botMessageText};\">${marked.parse(data.response || data.text || \"[No response]\")}</div>\r\n <span class=\"message-timestamp\" data-timestamp=\"${timestamp}\">${formatRelativeTime(timestamp)}</span>\r\n </div>\r\n `;\r\n messagesDiv.appendChild(botMsg);\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n \r\n // Apply accent color to any links in the bot message\r\n applyAccentToLinks();\r\n \r\n // Save chat history\r\n saveChatToLocalStorage();\r\n \r\n // Increment bot message count and check for rating\r\n botMessageCount++;\r\n checkAndShowRating();\r\n\r\n if (config.mode === \"bubble\" && chatWindow.style.display === \"none\") {\r\n bubble.setAttribute(\"data-unread\", \"true\");\r\n }\r\n } catch (err) {\r\n showError();\r\n if (config.mode === \"bubble\" && chatWindow.style.display === \"none\") {\r\n bubble.setAttribute(\"data-unread\", \"true\");\r\n }\r\n }\r\n }\r\n\r\n // Send on Enter key or button click\r\n sendButton.addEventListener(\"click\", () => sendMessage());\r\n input.addEventListener(\"keydown\", (e) => {\r\n if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n sendMessage();\r\n }\r\n });\r\n\r\n let expanded = false;\r\n if (config.mode === \"bubble\" && expandBtn) {\r\n expandBtn.addEventListener(\"click\", () => {\r\n expanded = !expanded;\r\n if (expanded) {\r\n chatWindow.style.width = \"600px\";\r\n chatWindow.style.height = \"80vh\";\r\n expandIcon.textContent = \"⤡\";\r\n } else {\r\n chatWindow.style.width = \"400px\";\r\n chatWindow.style.height = \"595px\";\r\n expandIcon.textContent = \"⤢\";\r\n }\r\n });\r\n }\r\n\r\n function showGreeting() {\r\n // Check usage limit first\r\n const limitData = storageManager.getUsageLimitReached(chatbotId, visitorId);\r\n if (limitData) {\r\n showLimitWarning(limitData.limitReachedDate);\r\n return;\r\n }\r\n \r\n enableChatInput();\r\n \r\n // Remove any previous greeting messages\r\n messagesDiv.querySelectorAll('.message.greeting').forEach(el => el.remove());\r\n const greetMsg = config.greetingMessage;\r\n const greetingDiv = document.createElement(\"div\");\r\n greetingDiv.className = \"message bot greeting\";\r\n const timestamp = Date.now();\r\n greetingDiv.innerHTML = `\r\n ${botAvatarHTML ? `<div class=\"message-avatar\">${botAvatarHTML}<div class=\"message-sender\">${config.botname}</div></div>` : ''}\r\n <div class=\"message-content\">\r\n <div class=\"message-text\" style=\"background-color: ${botMessageBg}; color: ${botMessageText};\">${greetMsg}</div>\r\n <span class=\"message-timestamp\" data-timestamp=\"${timestamp}\">${formatRelativeTime(timestamp)}</span>\r\n </div>\r\n `;\r\n messagesDiv.appendChild(greetingDiv);\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n \r\n // Apply accent color to any links in greeting\r\n applyAccentToLinks();\r\n }\r\n\r\n // Restore chat history or show greeting\r\n function initializeChat() {\r\n // Check for usage limit first (but don't return early - allow history to load)\r\n let isLimitActive = false;\r\n if (visitorId) {\r\n const limitData = storageManager.getUsageLimitReached(chatbotId, visitorId);\r\n \r\n // If limitData exists, the limit is active (localStorageManager already checked expiry)\r\n if (limitData && limitData.limitReachedDate) {\r\n showLimitWarning(limitData.limitReachedDate);\r\n isLimitActive = true;\r\n }\r\n }\r\n \r\n // Try to restore chat history if session ID exists\r\n if (sessionId) {\r\n const history = storageManager.getChatHistory(chatbotId, sessionId) || [];\r\n history.forEach(msg => {\r\n const messageDiv = document.createElement('div');\r\n messageDiv.className = `message ${msg.type}${msg.isGreeting ? ' greeting' : ''}`;\r\n \r\n const avatarHTML = msg.type === 'user' ? userAvatarHTML : botAvatarHTML;\r\n const senderName = msg.type === 'user' ? config.username : config.botname;\r\n const messageBg = msg.type === 'user' ? userMessageBg : botMessageBg;\r\n const messageTextColor = msg.type === 'user' ? userMessageText : botMessageText;\r\n \r\n messageDiv.innerHTML = msg.type === 'user'\r\n ? `<div class=\"message-avatar\">${avatarHTML}<div class=\"message-sender\">${senderName}</div></div><div class=\"message-content\"><div class=\"message-text\" style=\"background-color: ${messageBg}; color: ${messageTextColor};\">${msg.text}</div><span class=\"message-timestamp\" data-timestamp=\"${msg.timestamp}\">${formatRelativeTime(msg.timestamp)}</span></div>`\r\n : `${avatarHTML ? `<div class=\"message-avatar\">${avatarHTML}<div class=\"message-sender\">${senderName}</div></div>` : ''}<div class=\"message-content\"><div class=\"message-text\" style=\"background-color: ${messageBg}; color: ${messageTextColor};\">${msg.text}</div><span class=\"message-timestamp\" data-timestamp=\"${msg.timestamp}\">${formatRelativeTime(msg.timestamp)}</span></div>`;\r\n messagesDiv.appendChild(messageDiv);\r\n });\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n applyAccentToLinks();\r\n return;\r\n }\r\n \r\n // No history found, show greeting\r\n showGreeting();\r\n }\r\n \r\n setTimeout(initializeChat, 100);\r\n\r\n input.addEventListener('input', function() {\r\n // Block input if disabled (e.g., limit reached)\r\n if (this.disabled) {\r\n this.value = '';\r\n return;\r\n }\r\n // Restrict to configured max characters\r\n if (this.value.length > config.inputCharLimit) {\r\n this.value = this.value.slice(0, config.inputCharLimit);\r\n return;\r\n }\r\n // If textarea is empty, reset to default size\r\n if (this.value === \"\") {\r\n this.rows = 1;\r\n this.style.height = \"32px\";\r\n this.style.overflowY = \"hidden\";\r\n return;\r\n }\r\n // Count the number of lines in the textarea\r\n const lines = this.value.split('\\n');\r\n // Set the number of rows, max 4\r\n this.rows = Math.min(lines.length, 4);\r\n // Calculate the max height for 4 rows (approximate line height: 32px)\r\n const maxHeight = 3 * 36; // 128px\r\n this.style.height = 'auto';\r\n this.style.height = Math.min(this.scrollHeight, maxHeight) + 'px';\r\n // Show scrollbar only if content exceeds maxHeight\r\n if (this.scrollHeight > maxHeight) {\r\n this.style.overflowY = 'auto';\r\n } else {\r\n this.style.overflowY = 'hidden';\r\n }\r\n });\r\n\r\n if (downloadBtn) {\r\n downloadBtn.addEventListener(\"click\", () => {\r\n // Close the menu dropdown\r\n menuDropdown.classList.remove(\"show\");\r\n \r\n // Generate transcript header\r\n const now = new Date();\r\n const dateStr = now.toLocaleDateString('en-US', { \r\n year: 'numeric', \r\n month: 'long', \r\n day: 'numeric' \r\n });\r\n const timeStr = now.toLocaleTimeString('en-US', { \r\n hour: '2-digit', \r\n minute: '2-digit' \r\n });\r\n \r\n const header = `Chat Transcript - ${config.botname}\\n` +\r\n `Website: ${window.location.href}\\n` +\r\n `Downloaded on: ${dateStr} at ${timeStr}\\n` +\r\n `${'='.repeat(60)}\\n\\n`;\r\n\r\n // Collect all messages with timestamps\r\n const messages = Array.from(messagesDiv.querySelectorAll('.message')).map(msg => {\r\n const isUser = msg.classList.contains('user');\r\n const sender = isUser ? config.username : config.botname;\r\n \r\n // Get the message text (excluding sender name and timestamp)\r\n const messageText = msg.querySelector('.message-text');\r\n const text = messageText ? (messageText.innerText || messageText.textContent) : '';\r\n \r\n // Get actual timestamp (not relative)\r\n const timestampEl = msg.querySelector('.message-timestamp');\r\n let actualTime = '';\r\n if (timestampEl) {\r\n const timestamp = parseInt(timestampEl.getAttribute('data-timestamp'));\r\n const msgDate = new Date(timestamp);\r\n actualTime = msgDate.toLocaleTimeString('en-US', { \r\n hour: '2-digit', \r\n minute: '2-digit',\r\n second: '2-digit'\r\n });\r\n }\r\n \r\n return `[${actualTime}] ${sender}:\\n${text}`;\r\n }).join('\\n\\n');\r\n\r\n const fullTranscript = header + messages;\r\n\r\n // Create a blob and trigger download\r\n const blob = new Blob([fullTranscript], { type: \"text/plain\" });\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = `${config.botname}_chat_${now.getTime()}.txt`;\r\n document.body.appendChild(a);\r\n a.click();\r\n setTimeout(() => {\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }, 100);\r\n });\r\n }\r\n\r\n \r\n },\r\n initFull: function(options) {\r\n let el = document.querySelector('aptolix-chatbot');\r\n if (!el) {\r\n return;\r\n }\r\n Object.entries(options).forEach(([key, value]) => {\r\n el.setAttribute(key, value);\r\n });\r\n }\r\n};\r\n\r\n// Custom element for section embedding\r\nclass AptolixChatbotElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\r\n 'apihost', 'chatbotid', 'botname', 'widgeticon', 'companylogo', 'companylogourl',\r\n 'botavatar', 'botavatarurl', 'botaccentcolor', 'floatingwelcomemessage',\r\n 'floatingwelcomedelay', 'greetingmessage', 'allowdownloadtranscript',\r\n 'allowexpandchatwindow', 'allowfullpagechat', 'inputcharlimit', 'target'\r\n ];\r\n }\r\n\r\n connectedCallback() {\r\n this.tryInit();\r\n }\r\n\r\n attributeChangedCallback() {\r\n // Remove previous chat window if present\r\n const existingChatWindow = this.querySelector('#aptolix-chat-window');\r\n if (existingChatWindow) existingChatWindow.remove();\r\n // Re-initialize to update greeting and other attributes\r\n this._initialized = false;\r\n this.tryInit();\r\n }\r\n\r\n tryInit() {\r\n const apiHost = this.getAttribute('apihost');\r\n const chatbotId = this.getAttribute('chatbotid');\r\n if (!apiHost || !chatbotId) return;\r\n\r\n const botname = this.getAttribute('botname');\r\n const widgetIcon = this.getAttribute('widgeticon');\r\n const companyLogo = this.getAttribute('companylogo');\r\n const companyLogoUrl = this.getAttribute('companylogourl');\r\n const botAvatar = this.getAttribute('botavatar');\r\n const botavatarUrl = this.getAttribute('botavatarurl');\r\n const botaccentColor = this.getAttribute('botaccentcolor');\r\n const floatingWelcomeMessage = this.getAttribute('floatingwelcomemessage');\r\n const floatingWelcomeDelay = this.getAttribute('floatingwelcomedelay');\r\n const greetingMessage = this.getAttribute('greetingmessage');\r\n const allowDownloadTranscript = this.getAttribute('allowdownloadtranscript') === 'true';\r\n const allowExpandChatWindow = this.getAttribute('allowexpandchatwindow') === 'true';\r\n const allowFullPageChat = this.getAttribute('allowfullpagechat') === 'true';\r\n const inputCharLimit = parseInt(this.getAttribute('inputcharlimit')) || undefined;\r\n const targetAttr = this.getAttribute('target');\r\n \r\n let target = this;\r\n if (targetAttr) {\r\n const found = document.querySelector(targetAttr);\r\n if (found) target = found;\r\n }\r\n\r\n if (this._initialized) return;\r\n this._initialized = true;\r\n\r\n AptolixChatbot.init({\r\n apiHost,\r\n chatbotId,\r\n botname,\r\n widgetIcon,\r\n companyLogo,\r\n companyLogoUrl,\r\n botAvatar,\r\n botavatarUrl,\r\n botaccentColor,\r\n floatingWelcomeMessage,\r\n floatingWelcomeDelay,\r\n greetingMessage,\r\n allowDownloadTranscript,\r\n allowExpandChatWindow,\r\n allowFullPageChat,\r\n inputCharLimit,\r\n mode: \"section\",\r\n target\r\n });\r\n }\r\n}\r\ncustomElements.define('aptolix-chatbot', AptolixChatbotElement);\r\n\r\n// Export as default so consumers use Chatbot.init and Chatbot.initFull\r\nexport default AptolixChatbot;\r\n\r\n\r\n\r\n\r\n\r\n"],"names":["L","async","breaks","extensions","gfm","hooks","pedantic","renderer","silent","tokenizer","walkTokens","O","H","l","E","exec","h","e","t","source","n","replace","r","i","s","m","caret","getRegex","RegExp","codeRemoveIndent","outputLinkReplace","indentCodeCompensation","beginningSpace","endingHash","startingSpaceChar","endingSpaceChar","nonSpaceChar","newLineCharGlobal","tabCharGlobal","multipleSpaceGlobal","blankLine","doubleBlankLine","blockquoteStart","blockquoteSetextReplace","blockquoteSetextReplace2","listReplaceTabs","listReplaceNesting","listIsTask","listReplaceTask","anyLine","hrefBrackets","tableDelimiter","tableAlignChars","tableRowBlankLine","tableAlignRight","tableAlignCenter","tableAlignLeft","startATag","endATag","startPreScriptTag","endPreScriptTag","startAngleBracket","endAngleBracket","pedanticHrefTitle","unicodeAlphaNumeric","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","unescapeTest","percentDecode","findPipe","splitPipe","slashPipe","carriageReturn","spaceLine","notSpaceStart","endingNewline","listItemRegex","nextBulletRegex","Math","min","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","C","j","se","ie","Te","F","Q","ye","Pe","v","U","Se","oe","K","blockquote","code","def","fences","heading","hr","html","lheading","list","newline","paragraph","table","text","re","_e","Le","ae","D","W","le","Ee","ue","pe","qe","ve","ce","De","Ze","Ge","He","Ne","je","Fe","q","Qe","he","de","X","_backpedal","anyPunctuation","autolink","blockSkip","br","del","emStrongLDelim","emStrongRDelimAst","emStrongRDelimUnd","escape","link","nolink","punctuation","reflink","reflinkSearch","tag","url","Ke","N","We","I","normal","M","Xe","ke","w","test","J","encodeURI","V","o","a","u","split","trim","shift","length","at","pop","splice","push","z","charAt","slice","fe","href","title","other","state","inLink","type","raw","tokens","inlineTokens","y","options","rules","lexer","constructor","this","space","block","codeBlockStyle","match","map","join","Je","lang","inline","depth","p","c","f","top","blockTokens","k","x","g","T","substring","ordered","start","loose","items","Z","repeat","trimStart","search","ee","te","ne","me","A","G","Y","task","checked","trimEnd","filter","some","pre","toLowerCase","header","align","rows","inRawBlock","indexOf","ge","emStrong","lastIndex","index","codespan","inlineText","escaped","b","inlineQueue","links","Object","create","lex","lexInline","src","call","endsWith","startBlock","forEach","charCodeAt","console","error","Error","keys","includes","lastIndexOf","startInline","P","parser","parse","parseInline","listitem","checkbox","unshift","tablecell","tablerow","strong","em","image","textRenderer","S","R","renderers","$","static","Set","preprocess","postprocess","processAllTokens","provideLexer","provideParser","_","defaults","setOptions","parseMarkdown","Parser","Renderer","TextRenderer","Lexer","Tokenizer","Hooks","use","concat","childTokens","flat","name","apply","level","passThroughHooks","has","Promise","resolve","then","onError","prototype","toString","all","catch","message","reject","d","getDefaults","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","LocalStorageManager","config","_getState","chatbotId","key","stored","localStorage","getItem","JSON","_saveState","timestamp","Date","now","setItem","stringify","_isToday","today","storedDate","getFullYear","getMonth","getDate","_getTodayStart","setHours","getTime","saveConfig","data","getConfig","clearConfig","removeItem","hasConfig","saveVisitorId","visitorId","getVisitorId","clearVisitorId","hasVisitorId","saveSessionId","sessionId","getSessionId","clearSessionId","hasSessionId","saveChatHistory","messages","history","getChatHistory","clearChatHistory","hasChatHistory","setUsageLimitReached","limitReachedDate","usageLimitReached","getUsageLimitReached","limitDate","clearUsageLimitReached","hasUsageLimitReached","clearAll","defaultConfig","mode","botname","widgetIcon","companyLogoBlack","companyLogoWhite","botAvatar","userAvatar","username","botaccentColor","floatingWelcomeMessage","floatingWelcomeDelay","greetingMessage","allowDownloadTranscript","allowExpandChatWindow","allowFullPageChat","inputCharLimit","allowRating","ratingThreshold","ratingInterval","isValidWidgetIcon","iconValue","loadConfig","apiHost","storage","apiConfig","response","fetch","method","headers","ok","apiData","json","bot_name","widget_icon","companyLogo","company_logo","bot_avatar","user_avatar","accent_color","floating_welcome_message","floating_welcome_delay","greeting_message","download_transcript","expand_chat_window","full_page_chat","input_char_limit","allow_rating","rating_threshold","rating_interval","fetchConfigFromAPI","cachedConfig","AptolixChatbot","init","companyLogoUrl","botavatarUrl","target","undefined","isUrlPattern","str","canLoadImage","img","Image","timeout","setTimeout","onload","clearTimeout","onerror","isValidSvg","svgString","doc","DOMParser","parseFromString","querySelector","theme","primaryColor","hexToRgb","hex","cleanHex","result","parseInt","lightenColor","color","percent","rgb","round","padStart","darkenColor","max","addAlpha","opacity","isAccentLight","startsWith","Number","isLightColor","primary","isLight","background","button","border","userBackground","userText","botBackground","botText","window","shadow","input","placeholder","buttonBackground","buttonText","footer","bubble","icon","hint","closeButton","menu","hover","rating","star","utils","lighten","darken","generateColorTheme","userMessageBg","userMessageText","botMessageBg","botMessageText","linkColor","headerTextColor","headerButtonColor","sendButtonTextColor","windowBorderColor","windowBackgroundColor","inputBorderColor","headerBorderColor","footerTextColor","windowShadowColor","logoToValidate","validatedLogo","logoLoadFailed","avatarToValidate","validatedAvatar","avatarLoadFailed","modeClass","chatWindow","hintBubbleTimeout","hintBubble","id","backgroundColor","innerHTML","innerText","body","existingHintBubble","getElementById","remove","className","display","position","right","bottom","zIndex","hintTextSpan","textContent","hintCloseBtn","setAttribute","fontSize","cursor","padding","addEventListener","sessionStorage","classList","add","borderColor","boxShadow","targetEl","logoHTML","botAvatarHTML","userAvatarHTML","aptolixLink","encodeURIComponent","location","hostname","closeBtn","resetBtn","expandBtn","expandIcon","sendButton","messagesDiv","downloadBtn","menuBtn","menuDropdown","querySelectorAll","item","stopPropagation","toggle","contains","stars","getAttribute","idx","submitRating","starsContainer","formatRelativeTime","diff","floor","mins","hours","days","setInterval","span","applyAccentToLinks","msg","storageManager","botMessageCount","lastRatedAtMessageCount","isRatingVisible","saveChatToLocalStorage","Array","from","isUser","isGreeting","messageText","timestampEl","showLimitWarning","limitDateStr","timeRemaining","diffMs","diffMinutes","ceil","minutes","calculateRemainingTime","existingWarning","warningBanner","inputArea","parentNode","disabled","enableChatInput","hideRatingPrompt","showThankYou","poweredBy","ratingDiv","separator","originalContent","requestBody","visitor_id","session_id","checkAndShowRating","showRatingPrompt","sendMessage","isRetry","previousText","value","height","overflowY","userMsg","scrollTop","scrollHeight","typingMsg","res","botMsg","marked","err","errorMsg","retryBtn","showError","limitData","showGreeting","wasClosed","removeAttribute","event","preventDefault","expanded","el","greetMsg","greetingDiv","width","messageDiv","avatarHTML","senderName","messageBg","messageTextColor","lines","dateStr","toLocaleDateString","year","month","day","timeStr","toLocaleTimeString","hour","minute","sender","actualTime","second","blob","Blob","URL","createObjectURL","download","click","removeChild","revokeObjectURL","initFull","entries","AptolixChatbotElement","HTMLElement","observedAttributes","connectedCallback","tryInit","attributeChangedCallback","existingChatWindow","_initialized","targetAttr","found","customElements","define"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web.mjs","sources":["../node_modules/marked/lib/marked.esm.js","../node_modules/style-inject/dist/style-inject.es.js","../src/localStorageManager.js","../src/defaultConfig.js","../src/configLoader.js","../src/index.js"],"sourcesContent":["/**\n * marked v16.2.1 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var O=L();function H(l){O=l}var E={exec:()=>null};function h(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},xe=/^(?:[ \\t]*(?:\\n|$))+/,be=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,C=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Oe=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,j=/(?:[*+-]|\\d{1,9}[.)])/,se=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,ie=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Te=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),F=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,we=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,ye=h(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Pe=h(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,j).getRegex(),v=\"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|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Se=h(\"^ {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[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),oe=h(F).replace(\"hr\",C).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\",v).getRegex(),$e=h(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",oe).getRegex(),K={blockquote:$e,code:be,def:ye,fences:Re,heading:Oe,hr:C,html:Se,lheading:ie,list:Pe,newline:xe,paragraph:oe,table:E,text:we},re=h(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\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\",v).getRegex(),_e={...K,lheading:Te,table:re,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).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\",v).getRegex()},Le={...K,html:h(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).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:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",ie).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Me=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,ze=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,ae=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,W=/[\\s\\p{P}\\p{S}]/u,le=/[^\\s\\p{P}\\p{S}]/u,Ee=h(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,W).getRegex(),ue=/(?!~)[\\p{P}\\p{S}]/u,Ce=/(?!~)[\\s\\p{P}\\p{S}]/u,Ie=/(?:[^\\s\\p{P}\\p{S}]|~)/u,Be=/\\[[^\\[\\]]*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<(?! )[^<>]*?>/g,pe=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,qe=h(pe,\"u\").replace(/punct/g,D).getRegex(),ve=h(pe,\"u\").replace(/punct/g,ue).getRegex(),ce=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",De=h(ce,\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ze=h(ce,\"gu\").replace(/notPunctSpace/g,Ie).replace(/punctSpace/g,Ce).replace(/punct/g,ue).getRegex(),Ge=h(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),He=h(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),Ne=h(/^<(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(),je=h(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Fe=h(\"^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\",je).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`[^`]*`|[^\\[\\]\\\\`])*?/,Qe=h(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),he=h(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),de=h(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),Ue=h(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",he).replace(\"nolink\",de).getRegex(),X={_backpedal:E,anyPunctuation:He,autolink:Ne,blockSkip:Be,br:ae,code:ze,del:E,emStrongLDelim:qe,emStrongRDelimAst:De,emStrongRDelimUnd:Ge,escape:Me,link:Qe,nolink:de,punctuation:Ee,reflink:he,reflinkSearch:Ue,tag:Fe,text:Ae,url:E},Ke={...X,link:h(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:h(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:Ze,emStrongLDelim:ve,url:h(/^((?: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\\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.!#$%&'*+\\/=?_`{\\|}~-]+@)))/},We={...N,br:h(ae).replace(\"{2,}\",\"*\").getRegex(),text:h(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},I={normal:K,gfm:_e,pedantic:Le},M={normal:X,gfm:N,breaks:We,pedantic:Ke};var Xe={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"},ke=l=>Xe[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ke)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ke);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,o)=>{let a=!1,u=s;for(;--u>=0&&o[u]===\"\\\\\";)a=!a;return a?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(l,e,t){let n=l.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=l.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return l.slice(0,n-r)}function ge(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===\"\\\\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(l,e,t,n,r){let i=e.href,s=e.title||null,o=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let a={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,a}function Je(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[o]=s;return o.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||O}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Je(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let o=!1,a=[],u;for(u=0;u<n.length;u++)if(this.rules.other.blockquoteStart.test(n[u]))a.push(n[u]),o=!0;else if(!o)a.push(n[u]);else break;n=n.slice(u);let p=a.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=f,n.length===0)break;let k=s.at(-1);if(k?.type===\"code\")break;if(k?.type===\"blockquote\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.blockquote(g);s[s.length-1]=T,r=r.substring(0,r.length-x.raw.length)+T.raw,i=i.substring(0,i.length-x.text.length)+T.text;break}else if(k?.type===\"list\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.list(g);s[s.length-1]=T,r=r.substring(0,r.length-k.raw.length)+T.raw,i=i.substring(0,i.length-x.raw.length)+T.raw,n=g.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),o=!1;for(;e;){let u=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let f=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,Z=>\" \".repeat(3*Z.length)),k=e.split(`\n`,1)[0],x=!f.trim(),g=0;if(this.options.pedantic?(g=2,c=f.trimStart()):x?g=t[1].length+1:(g=t[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,c=f.slice(g),g+=t[1].length),x&&this.rules.other.blankLine.test(k)&&(p+=k+`\n`,e=e.substring(k.length+1),u=!0),!u){let Z=this.rules.other.nextBulletRegex(g),ee=this.rules.other.hrRegex(g),te=this.rules.other.fencesBeginRegex(g),ne=this.rules.other.headingBeginRegex(g),me=this.rules.other.htmlBeginRegex(g);for(;e;){let G=e.split(`\n`,1)[0],A;if(k=G,this.options.pedantic?(k=k.replace(this.rules.other.listReplaceNesting,\" \"),A=k):A=k.replace(this.rules.other.tabCharGlobal,\" \"),te.test(k)||ne.test(k)||me.test(k)||Z.test(k)||ee.test(k))break;if(A.search(this.rules.other.nonSpaceChar)>=g||!k.trim())c+=`\n`+A.slice(g);else{if(x||f.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||te.test(f)||ne.test(f)||ee.test(f))break;c+=`\n`+k}!x&&!k.trim()&&(x=!0),p+=G+`\n`,e=e.substring(G.length+1),f=A.slice(g)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(o=!0));let T=null,Y;this.options.gfm&&(T=this.rules.other.listIsTask.exec(c),T&&(Y=T[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:p,task:!!T,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=p}let a=i.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let u=0;u<i.items.length;u++)if(this.lexer.state.top=!1,i.items[u].tokens=this.lexer.blockTokens(i.items[u].text,[]),!i.loose){let p=i.items[u].tokens.filter(f=>f.type===\"space\"),c=p.length>0&&p.some(f=>this.rules.other.anyLine.test(f.raw));i.loose=c}if(i.loose)for(let u=0;u<i.items.length;u++)i.items[u].loose=!0;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let o of r)this.rules.other.tableAlignRight.test(o)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(o)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(o)?s.align.push(\"left\"):s.align.push(null);for(let o=0;o<n.length;o++)s.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:s.align[o]});for(let o of i)s.rows.push(V(o,s.header.length).map((a,u)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:s.align[u]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=ge(t[2],\"()\");if(s===-2)return;if(s>-1){let a=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,a).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),fe(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return fe(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,o,a,u=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(a=[...o].length,r[3]||r[4]){u+=a;continue}else if((r[5]||r[6])&&s%3&&!((s+a)%3)){p+=a;continue}if(u-=a,u>0)continue;a=Math.min(a,a+u+p);let f=[...r[0]][0].length,k=e.slice(0,s+r.index+f+a);if(Math.min(s,a)%2){let g=k.slice(1,-1);return{type:\"em\",raw:k,text:g,tokens:this.lexer.inlineTokens(g)}}let x=k.slice(2,-2);return{type:\"strong\",raw:k,text:x,tokens:this.lexer.inlineTokens(x)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var b=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||O,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:I.normal,inline:M.normal};this.options.pedantic?(t.block=I.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=I.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:I,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\" \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,o=e.slice(1),a;this.options.extensions.startBlock.forEach(u=>{a=u.call({lexer:this},o),typeof a==\"number\"&&a>=0&&(s=Math.min(s,a))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let i=!1,s=\"\";for(;e;){i||(s=\"\"),i=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,s)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let a=e;if(this.options.extensions?.startInline){let u=1/0,p=e.slice(1),c;this.options.extensions.startInline.forEach(f=>{c=f.call({lexer:this},p),typeof c==\"number\"&&c>=0&&(u=Math.min(u,c))}),u<1/0&&u>=0&&(a=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(a)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(s=o.raw.slice(-1)),i=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||O}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let o=0;o<e.items.length;o++){let a=e.items[o];r+=this.listitem(a)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let o=0;o<s.length;o++)n+=this.tablecell(s[o]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var S=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var R=class l{options;renderer;textRenderer;constructor(e){this.options=e||O,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new S}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=i,a=this.options.extensions.renderers[o.type].call({parser:this},o);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(o.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"space\":{n+=this.renderer.space(s);continue}case\"hr\":{n+=this.renderer.hr(s);continue}case\"heading\":{n+=this.renderer.heading(s);continue}case\"code\":{n+=this.renderer.code(s);continue}case\"table\":{n+=this.renderer.table(s);continue}case\"blockquote\":{n+=this.renderer.blockquote(s);continue}case\"list\":{n+=this.renderer.list(s);continue}case\"html\":{n+=this.renderer.html(s);continue}case\"def\":{n+=this.renderer.def(s);continue}case\"paragraph\":{n+=this.renderer.paragraph(s);continue}case\"text\":{let o=s,a=this.renderer.text(o);for(;r+1<e.length&&e[r+1].type===\"text\";)o=e[++r],a+=`\n`+this.renderer.text(o);t?n+=this.renderer.paragraph({type:\"paragraph\",raw:a,text:a,tokens:[{type:\"text\",raw:a,text:a,escaped:!0}]}):n+=a;continue}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=o||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}};var $=class{options;block;constructor(e){this.options=e||O}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}provideLexer(){return this.block?b.lex:b.lexInline}provideParser(){return this.block?R.parse:R.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=R;Renderer=P;TextRenderer=S;Lexer=b;Tokenizer=y;Hooks=$;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let o of s)n=n.concat(this.walkTokens(o.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let o=i[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...o){let a=i.renderer.apply(this,o);return a===!1&&(a=s.apply(this,o)),a}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let o=s,a=n.renderer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let o=s,a=n.tokenizer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new $;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let o=s,a=n.hooks[o],u=i[o];$.passThroughHooks.has(s)?i[o]=p=>{if(this.defaults.async)return Promise.resolve(a.call(i,p)).then(f=>u.call(i,f));let c=a.call(i,p);return u.call(i,c)}:i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(o){let a=[];return a.push(s.call(this,o)),i&&(a=a.concat(i.call(this,o))),a}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return b.lex(e,t??this.defaults)}parser(e,t){return R.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},o=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return o(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return o(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let a=s.hooks?s.hooks.provideLexer():e?b.lex:b.lexInline,u=s.hooks?s.hooks.provideParser():e?R.parse:R.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(p=>a(p,s)).then(p=>s.hooks?s.hooks.processAllTokens(p):p).then(p=>s.walkTokens?Promise.all(this.walkTokens(p,s.walkTokens)).then(()=>p):p).then(p=>u(p,s)).then(p=>s.hooks?s.hooks.postprocess(p):p).catch(o);try{s.hooks&&(n=s.hooks.preprocess(n));let p=a(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=u(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(p){return o(p)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function d(l,e){return _.parse(l,e)}d.options=d.setOptions=function(l){return _.setOptions(l),d.defaults=_.defaults,H(d.defaults),d};d.getDefaults=L;d.defaults=O;d.use=function(...l){return _.use(...l),d.defaults=_.defaults,H(d.defaults),d};d.walkTokens=function(l,e){return _.walkTokens(l,e)};d.parseInline=_.parseInline;d.Parser=R;d.parser=R.parse;d.Renderer=P;d.TextRenderer=S;d.Lexer=b;d.lexer=b.lex;d.Tokenizer=y;d.Hooks=$;d.parse=d;var Dt=d.options,Zt=d.setOptions,Gt=d.use,Ht=d.walkTokens,Nt=d.parseInline,jt=d,Ft=R.parse,Qt=b.lex;export{$ as Hooks,b as Lexer,B as Marked,R as Parser,P as Renderer,S as TextRenderer,y as Tokenizer,O as defaults,L as getDefaults,Qt as lexer,d as marked,Dt as options,jt as parse,Nt as parseInline,Ft as parser,Zt as setOptions,Gt as use,Ht as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","/**\r\n * LocalStorage Manager\r\n * Handles storing and retrieving chatbot data from localStorage\r\n * Manages: Config and Conversation State (visitor, session, history, usage limits)\r\n */\r\nclass LocalStorageManager {\r\n constructor() {\r\n this.keys = {\r\n config: 'aptolix_chatbot_config',\r\n state: 'aptolix_chatbot_state'\r\n };\r\n }\r\n\r\n // ============================================\r\n // HELPER METHODS\r\n // ============================================\r\n\r\n /**\r\n * Get conversation state object\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {Object|null} State object or null if not found\r\n */\r\n _getState(chatbotId) {\r\n try {\r\n const key = `${this.keys.state}_${chatbotId}`;\r\n const stored = localStorage.getItem(key);\r\n \r\n if (!stored) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(stored);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Save conversation state object\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {Object} state - State object to save\r\n */\r\n _saveState(chatbotId, state) {\r\n try {\r\n const key = `${this.keys.state}_${chatbotId}`;\r\n state.timestamp = Date.now();\r\n state.version = __VERSION__;\r\n localStorage.setItem(key, JSON.stringify(state));\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if stored data is from today\r\n * @param {number} timestamp - Timestamp to check\r\n * @returns {boolean}\r\n */\r\n _isToday(timestamp) {\r\n const today = new Date();\r\n const storedDate = new Date(timestamp);\r\n return (\r\n today.getFullYear() === storedDate.getFullYear() &&\r\n today.getMonth() === storedDate.getMonth() &&\r\n today.getDate() === storedDate.getDate()\r\n );\r\n }\r\n\r\n /**\r\n * Get start of today timestamp (00:00:00)\r\n * @returns {number}\r\n */\r\n _getTodayStart() {\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n return today.getTime();\r\n }\r\n\r\n // ============================================\r\n // 1. CONFIG MANAGEMENT\r\n // ============================================\r\n\r\n /**\r\n * Save chatbot configuration\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {Object} config - Configuration object to store\r\n */\r\n saveConfig(chatbotId, config) {\r\n try {\r\n const key = `${this.keys.config}_${chatbotId}`;\r\n const data = {\r\n config: config,\r\n timestamp: Date.now()\r\n };\r\n localStorage.setItem(key, JSON.stringify(data));\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve chatbot configuration\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {Object|null} Configuration object or null if not found\r\n */\r\n getConfig(chatbotId) {\r\n try {\r\n const key = `${this.keys.config}_${chatbotId}`;\r\n const stored = localStorage.getItem(key);\r\n \r\n if (!stored) {\r\n return null;\r\n }\r\n\r\n const data = JSON.parse(stored);\r\n return data.config;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear chatbot configuration\r\n * @param {string} chatbotId - The chatbot ID\r\n */\r\n clearConfig(chatbotId) {\r\n try {\r\n const key = `${this.keys.config}_${chatbotId}`;\r\n localStorage.removeItem(key);\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if config exists\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {boolean}\r\n */\r\n hasConfig(chatbotId) {\r\n const key = `${this.keys.config}_${chatbotId}`;\r\n return localStorage.getItem(key) !== null;\r\n }\r\n\r\n // ============================================\r\n // 2. VISITOR ID MANAGEMENT\r\n // ============================================\r\n\r\n /**\r\n * Save visitor ID for a chatbot\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - Unique visitor identifier\r\n */\r\n saveVisitorId(chatbotId, visitorId) {\r\n try {\r\n const state = this._getState(chatbotId) || {};\r\n state.visitorId = visitorId;\r\n this._saveState(chatbotId, state);\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve visitor ID for a chatbot\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {string|null} Visitor ID or null if not found\r\n */\r\n getVisitorId(chatbotId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n return state?.visitorId || null;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear visitor ID\r\n * @param {string} chatbotId - The chatbot ID\r\n */\r\n clearVisitorId(chatbotId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n if (state) {\r\n delete state.visitorId;\r\n this._saveState(chatbotId, state);\r\n }\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if visitor ID exists\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {boolean}\r\n */\r\n hasVisitorId(chatbotId) {\r\n return this.getVisitorId(chatbotId) !== null;\r\n }\r\n\r\n // ============================================\r\n // 3. SESSION ID MANAGEMENT\r\n // ============================================\r\n\r\n /**\r\n * Save session ID for a chatbot\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} sessionId - Unique session identifier\r\n */\r\n saveSessionId(chatbotId, sessionId) {\r\n try {\r\n const state = this._getState(chatbotId) || {};\r\n state.sessionId = sessionId;\r\n this._saveState(chatbotId, state);\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve session ID for a chatbot\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {string|null} Session ID or null if not found\r\n */\r\n getSessionId(chatbotId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n return state?.sessionId || null;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear session ID\r\n * @param {string} chatbotId - The chatbot ID\r\n */\r\n clearSessionId(chatbotId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n if (state) {\r\n delete state.sessionId;\r\n this._saveState(chatbotId, state);\r\n }\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if session ID exists\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {boolean}\r\n */\r\n hasSessionId(chatbotId) {\r\n return this.getSessionId(chatbotId) !== null;\r\n }\r\n\r\n // ============================================\r\n // 4. CHAT HISTORY MANAGEMENT (with daily expiration)\r\n // ============================================\r\n\r\n /**\r\n * Save chat history (expires next day)\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} sessionId - The session ID (not stored in history, validated against state.sessionId)\r\n * @param {Array} messages - Array of message objects\r\n */\r\n saveChatHistory(chatbotId, sessionId, messages) {\r\n try {\r\n const state = this._getState(chatbotId) || {};\r\n state.history = {\r\n messages: messages,\r\n timestamp: Date.now()\r\n };\r\n this._saveState(chatbotId, state);\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve chat history (returns null if expired)\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} sessionId - The session ID\r\n * @returns {Array|null} Array of messages or null if not found/expired\r\n */\r\n getChatHistory(chatbotId, sessionId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n \r\n if (!state?.history) {\r\n return null;\r\n }\r\n\r\n const { history } = state;\r\n \r\n // Check if history is for the current session\r\n if (state.sessionId !== sessionId) {\r\n return null;\r\n }\r\n \r\n // Check if history is from today\r\n if (!this._isToday(history.timestamp)) {\r\n // History expired - clear it\r\n this.clearChatHistory(chatbotId, sessionId);\r\n return null;\r\n }\r\n\r\n return history.messages;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear chat history\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} sessionId - The session ID\r\n */\r\n clearChatHistory(chatbotId, sessionId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n if (state?.history && state.sessionId === sessionId) {\r\n delete state.history;\r\n this._saveState(chatbotId, state);\r\n }\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if chat history exists (and not expired)\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} sessionId - The session ID\r\n * @returns {boolean}\r\n */\r\n hasChatHistory(chatbotId, sessionId) {\r\n return this.getChatHistory(chatbotId, sessionId) !== null;\r\n }\r\n\r\n // ============================================\r\n // 5. USAGE LIMIT REACHED MANAGEMENT (expires at limitReachedDate)\r\n // ============================================\r\n\r\n /**\r\n * Set usage limit reached status with expiration date\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - The visitor ID\r\n * @param {string} limitReachedDate - UTC date string when limit expires\r\n */\r\n setUsageLimitReached(chatbotId, visitorId, limitReachedDate) {\r\n try {\r\n const state = this._getState(chatbotId) || {};\r\n state.usageLimitReached = {\r\n limitReachedDate: limitReachedDate,\r\n timestamp: Date.now()\r\n };\r\n this._saveState(chatbotId, state);\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Get usage limit data (returns null if expired)\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - The visitor ID\r\n * @returns {Object|null} Object with limitReachedDate or null if expired/not found\r\n */\r\n getUsageLimitReached(chatbotId, visitorId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n \r\n if (!state?.usageLimitReached) {\r\n return null;\r\n }\r\n\r\n const { usageLimitReached } = state;\r\n let limitDate;\r\n \r\n // If the date string doesn't include time (just YYYY-MM-DD), \r\n // set it to end of day (23:59:59.999 UTC) instead of start of day (00:00:00 UTC)\r\n if (usageLimitReached.limitReachedDate.length === 10 && !usageLimitReached.limitReachedDate.includes('T')) {\r\n // Parse date and add time to make it end of day\r\n limitDate = new Date(usageLimitReached.limitReachedDate + 'T23:59:59.999Z');\r\n } else {\r\n limitDate = new Date(usageLimitReached.limitReachedDate);\r\n }\r\n \r\n const now = new Date();\r\n \r\n // Check if limit date has passed (strictly greater than)\r\n if (now > limitDate) {\r\n // Limit expired - clear it\r\n this.clearUsageLimitReached(chatbotId, visitorId);\r\n return null;\r\n }\r\n\r\n return {\r\n limitReachedDate: usageLimitReached.limitReachedDate,\r\n timestamp: usageLimitReached.timestamp\r\n };\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear usage limit\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - The visitor ID\r\n */\r\n clearUsageLimitReached(chatbotId, visitorId) {\r\n try {\r\n const state = this._getState(chatbotId);\r\n if (state) {\r\n delete state.usageLimitReached;\r\n this._saveState(chatbotId, state);\r\n }\r\n } catch (error) {\r\n }\r\n }\r\n\r\n /**\r\n * Check if usage limit is active (not expired)\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - The visitor ID\r\n * @returns {boolean}\r\n */\r\n hasUsageLimitReached(chatbotId, visitorId) {\r\n return this.getUsageLimitReached(chatbotId, visitorId) !== null;\r\n }\r\n\r\n // ============================================\r\n // UTILITY METHODS\r\n // ============================================\r\n\r\n /**\r\n * Clear all data for a specific chatbot\r\n * @param {string} chatbotId - The chatbot ID\r\n * @param {string} visitorId - The visitor ID (optional, for compatibility)\r\n * @param {string} sessionId - The session ID (optional, for compatibility)\r\n */\r\n clearAll(chatbotId, visitorId = null, sessionId = null) {\r\n this.clearConfig(chatbotId);\r\n \r\n // Clear entire state\r\n try {\r\n const key = `${this.keys.state}_${chatbotId}`;\r\n localStorage.removeItem(key);\r\n } catch (error) {\r\n }\r\n }\r\n}\r\n\r\nexport default LocalStorageManager;\r\n","/**\r\n * Default configuration for Aptolix Chatbot\r\n * These values can be overridden during initialization\r\n */\r\n\r\nconst defaultConfig = { \r\n // Display Mode\r\n mode: 'bubble', // 'bubble' or 'section' //\r\n \r\n // Chat Header\r\n botname: 'AI Assistant', //\r\n widgetIcon: \"💬\", //\r\n companyLogoBlack: `\r\n <svg width=\"24\" height=\"32\" viewBox=\"0 0 81 52\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"34.8\" y=\"0\" width=\"46\" height=\"11.7\" rx=\"5.9\" fill=\"#000\"/>\r\n <rect x=\"0.2\" y=\"19.7\" width=\"80.6\" height=\"12\" rx=\"6\" fill=\"#000\"/>\r\n <rect x=\"61.7\" y=\"39.4\" width=\"19\" height=\"11.7\" rx=\"6\" fill=\"#000\"/>\r\n <rect x=\"7.7\" y=\"39.5\" width=\"49\" height=\"11.7\" rx=\"6\" fill=\"#000\"/>\r\n </svg>\r\n `, //\r\n companyLogoWhite: `\r\n <svg width=\"24\" height=\"32\" viewBox=\"0 0 81 52\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"34.8\" y=\"0\" width=\"46\" height=\"11.7\" rx=\"5.9\" fill=\"#fcfcfcff\"/>\r\n <rect x=\"0.2\" y=\"19.7\" width=\"80.6\" height=\"12\" rx=\"6\" fill=\"#fcfcfcff\"/>\r\n <rect x=\"61.7\" y=\"39.4\" width=\"19\" height=\"11.7\" rx=\"6\" fill=\"#fcfcfcff\"/>\r\n <rect x=\"7.7\" y=\"39.5\" width=\"49\" height=\"11.7\" rx=\"6\" fill=\"#fcfcfcff\"/>\r\n </svg>\r\n `, //\r\n botAvatar: `\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"20\" cy=\"20\" r=\"18\" fill=\"#9333ea\"/>\r\n <rect x=\"12\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\" fill=\"#fff\"/>\r\n <rect x=\"22\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\" fill=\"#fff\"/>\r\n <rect x=\"13\" y=\"26\" width=\"14\" height=\"4\" rx=\"2\" fill=\"#fff\"/>\r\n </svg>\r\n `,\r\n userAvatar: `\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"#64748b\"/>\r\n <circle cx=\"20\" cy=\"15\" r=\"6\" fill=\"#fff\"/>\r\n <path d=\"M 8 35 Q 8 25 20 25 Q 32 25 32 35\" fill=\"#fff\"/>\r\n </svg>\r\n `,\r\n username: 'You',\r\n botaccentColor: '#4a57e2ff', //\r\n floatingWelcomeMessage: 'Hello! Looking for something? I\\'m here to assist - just ask!', //\r\n floatingWelcomeDelay: 2, // seconds //\r\n greetingMessage:'Welcome! Let me know if you have any questions.', //\r\n allowDownloadTranscript: true, //\r\n allowExpandChatWindow: true, //\r\n allowFullPageChat: false,\r\n \r\n // Input Settings\r\n inputCharLimit: 350,//\r\n \r\n // Rating Feature\r\n allowRating: true,\r\n ratingThreshold: 3, // Show rating after this many bot messages\r\n ratingInterval: 4, // Show rating again after this many more bot messages\r\n};\r\n\r\nexport default defaultConfig;\r\n","import LocalStorageManager from './localStorageManager.js';\r\nimport defaultConfig from './defaultConfig.js';\r\n\r\n/**\r\n * Validates if the widget icon is valid (SVG or text/emoji)\r\n * @param {string} iconValue - Icon value to validate\r\n * @returns {boolean} True if valid, false otherwise\r\n */\r\nfunction isValidWidgetIcon(iconValue) {\r\n if (!iconValue || typeof iconValue !== 'string') {\r\n return false;\r\n }\r\n \r\n // Check if it's an SVG (contains '<svg' or other HTML tags)\r\n if (iconValue.includes('<svg') || (iconValue.includes('<') && iconValue.includes('>'))) {\r\n return true;\r\n }\r\n \r\n // Check if it's text/emoji (any non-empty string that's not too long)\r\n // Allow emojis, simple text, or icon characters\r\n if (iconValue.trim().length > 0 && iconValue.length <= 100) {\r\n return true;\r\n }\r\n \r\n return false;\r\n}\r\n\r\n/**\r\n * Transform API response from snake_case to camelCase format\r\n * @param {Object} apiData - Raw API response with snake_case keys\r\n * @returns {Object} Transformed object with camelCase keys\r\n */\r\nfunction transformApiResponse(apiData) {\r\n if (!apiData) return null;\r\n \r\n return {\r\n botname: apiData.bot_name,\r\n widgetIcon: apiData.widget_icon,\r\n companyLogo: apiData.company_logo,\r\n botAvatar: apiData.bot_avatar,\r\n userAvatar: apiData.user_avatar,\r\n username: apiData.username,\r\n botaccentColor: apiData.accent_color,\r\n floatingWelcomeMessage: apiData.floating_welcome_message,\r\n floatingWelcomeDelay: apiData.floating_welcome_delay,\r\n greetingMessage: apiData.greeting_message,\r\n allowDownloadTranscript: apiData.download_transcript,\r\n allowExpandChatWindow: apiData.expand_chat_window,\r\n allowFullPageChat: apiData.full_page_chat,\r\n inputCharLimit: apiData.input_char_limit,\r\n allowRating: apiData.allow_rating,\r\n ratingThreshold: apiData.rating_threshold,\r\n ratingInterval: apiData.rating_interval,\r\n };\r\n}\r\n\r\n/**\r\n * Fetches chatbot appearance configuration from API\r\n * @param {string} apiHost - The API host URL\r\n * @param {string} chatbotId - The chatbot ID\r\n * @returns {Promise<Object|null>} Configuration object or null if failed\r\n */\r\nasync function fetchConfigFromAPI(apiHost, chatbotId) {\r\n try {\r\n const response = await fetch(`${apiHost}/chatbot/${chatbotId}/appearance`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n return null;\r\n }\r\n\r\n const data = await response.json();\r\n // Transform snake_case API response to camelCase\r\n return transformApiResponse(data);\r\n } catch (error) {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Loads chatbot configuration\r\n * Flow: Try API -> Save to localStorage -> If API fails, load from localStorage\r\n * \r\n * @param {string} apiHost - API host URL\r\n * @param {string} chatbotId - Chatbot identifier\r\n * @returns {Promise<Object|null>} Configuration object or null if not found\r\n */\r\nasync function loadConfig(apiHost, chatbotId) {\r\n const storage = new LocalStorageManager();\r\n \r\n // Try to fetch from API\r\n if (apiHost && chatbotId) {\r\n const apiConfig = await fetchConfigFromAPI(apiHost, chatbotId);\r\n \r\n if (apiConfig) {\r\n // Validate and use defaultConfig fallback if widgetIcon is invalid\r\n if (!apiConfig.widgetIcon || !isValidWidgetIcon(apiConfig.widgetIcon)) {\r\n apiConfig.widgetIcon = defaultConfig.widgetIcon;\r\n }\r\n \r\n // API success - save to localStorage and return\r\n storage.saveConfig(chatbotId, apiConfig);\r\n return apiConfig;\r\n } else {\r\n // API failed - try to load from localStorage\r\n const cachedConfig = storage.getConfig(chatbotId);\r\n \r\n if (cachedConfig) {\r\n // Validate and use defaultConfig fallback if widgetIcon is invalid\r\n if (!cachedConfig.widgetIcon || !isValidWidgetIcon(cachedConfig.widgetIcon)) {\r\n cachedConfig.widgetIcon = defaultConfig.widgetIcon;\r\n }\r\n return cachedConfig;\r\n } else {\r\n return null;\r\n }\r\n }\r\n }\r\n \r\n return null;\r\n}\r\n\r\nexport { loadConfig };\r\n","import { marked } from \"marked\";\r\nimport './chatbotstyle.css';\r\nimport { loadConfig } from './configLoader.js';\r\nimport defaultConfig from './defaultConfig.js';\r\nimport LocalStorageManager from './localStorageManager.js';\r\n\r\nconst AptolixChatbot = {\r\n init: async ({ \r\n apiHost, // mandatory\r\n chatbotId, // mandatory\r\n botname,\r\n widgetIcon,\r\n companyLogo,\r\n companyLogoUrl,\r\n botAvatar,\r\n botavatarUrl,\r\n botaccentColor,\r\n floatingWelcomeMessage,\r\n floatingWelcomeDelay,\r\n greetingMessage,\r\n allowDownloadTranscript,\r\n allowExpandChatWindow,\r\n allowFullPageChat,\r\n inputCharLimit,\r\n allowRating,\r\n ratingThreshold,\r\n ratingInterval,\r\n mode = \"bubble\",\r\n target\r\n }) => {\r\n \r\n // Validate mandatory parameters\r\n if (!apiHost || !chatbotId) {\r\n console.error('apiHost and chatbotId are mandatory parameters');\r\n return;\r\n }\r\n\r\n // Load config from API with localStorage fallback\r\n const apiConfig = await loadConfig(apiHost, chatbotId);\r\n \r\n // Merge config: Direct params > API config > Defaults\r\n const config = {\r\n botname: botname || (apiConfig?.botname) || defaultConfig.botname,\r\n widgetIcon: widgetIcon || (apiConfig?.widgetIcon) || defaultConfig.widgetIcon,\r\n companyLogo: companyLogo || (apiConfig?.companyLogo) || defaultConfig.companyLogo,\r\n companyLogoUrl: companyLogoUrl || (apiConfig?.companyLogoUrl) || '',\r\n botAvatar: botAvatar || (apiConfig?.botAvatar) || defaultConfig.botAvatar,\r\n botavatarUrl: botavatarUrl || (apiConfig?.botavatarUrl) || '',\r\n userAvatar: (apiConfig?.userAvatar) || defaultConfig.userAvatar,\r\n username: (apiConfig?.username) || defaultConfig.username,\r\n botaccentColor: botaccentColor || (apiConfig?.botaccentColor) || defaultConfig.botaccentColor,\r\n floatingWelcomeMessage: floatingWelcomeMessage || (apiConfig?.floatingWelcomeMessage) || defaultConfig.floatingWelcomeMessage,\r\n floatingWelcomeDelay: floatingWelcomeDelay || (apiConfig?.floatingWelcomeDelay) || defaultConfig.floatingWelcomeDelay,\r\n greetingMessage: greetingMessage || (apiConfig?.greetingMessage) || defaultConfig.greetingMessage,\r\n allowDownloadTranscript: allowDownloadTranscript !== undefined ? allowDownloadTranscript : (apiConfig?.allowDownloadTranscript !== undefined ? apiConfig.allowDownloadTranscript : defaultConfig.allowDownloadTranscript),\r\n allowExpandChatWindow: allowExpandChatWindow !== undefined ? allowExpandChatWindow : (apiConfig?.allowExpandChatWindow !== undefined ? apiConfig.allowExpandChatWindow : defaultConfig.allowExpandChatWindow),\r\n allowFullPageChat: allowFullPageChat !== undefined ? allowFullPageChat : (apiConfig?.allowFullPageChat !== undefined ? apiConfig.allowFullPageChat : defaultConfig.allowFullPageChat),\r\n inputCharLimit: inputCharLimit || (apiConfig?.inputCharLimit) || defaultConfig.inputCharLimit,\r\n allowRating: allowRating !== undefined ? allowRating : (apiConfig?.allowRating !== undefined ? apiConfig.allowRating : defaultConfig.allowRating),\r\n ratingThreshold: ratingThreshold || (apiConfig?.ratingThreshold) || defaultConfig.ratingThreshold,\r\n ratingInterval: ratingInterval || (apiConfig?.ratingInterval) || defaultConfig.ratingInterval,\r\n mode: mode || defaultConfig.mode,\r\n target: target\r\n };\r\n \r\n /**\r\n * ========================================================================\r\n * CENTRALIZED COLOR THEME GENERATOR\r\n * ========================================================================\r\n * This function generates a complete, consistent color palette based on\r\n * the primary accent color. All UI elements derive their colors from this\r\n * central theme to ensure visual harmony and easy debugging.\r\n * \r\n * HOW IT WORKS:\r\n * 1. Analyzes the primary color to determine if it's light or dark\r\n * 2. Generates complementary colors using lightening/darkening algorithms\r\n * 3. Creates high-contrast text colors based on background lightness\r\n * 4. Returns a structured theme object with colors for all UI elements\r\n * \r\n * THEME STRUCTURE:\r\n * - primary: The base accent color\r\n * - header: { background, text, button, border }\r\n * - messages: { userBackground, userText, botBackground, botText, link, timestamp }\r\n * - window: { background, border, shadow }\r\n * - input: { background, border, text, placeholder, buttonBackground, buttonText }\r\n * - footer: { text, link }\r\n * - bubble: { background, icon }\r\n * - hint: { background, text, border, closeButton }\r\n * - menu: { background, text, hover, border }\r\n * - rating: { star, text }\r\n * - utils: Helper functions for color manipulation\r\n * \r\n * DEBUGGING:\r\n * To debug color issues, log the entire theme object:\r\n * console.log('Theme:', theme);\r\n * \r\n * To adjust a specific color, modify the percentage in lightenColor/darkenColor calls\r\n * Example: lightenColor(primaryColor, 0.85) -> 85% lighter\r\n * \r\n * @param {string} primaryColor - The base accent color (hex format, e.g., '#4A90E2')\r\n * @returns {object} Complete color theme with all UI element colors\r\n */\r\n const generateColorTheme = (primaryColor) => {\r\n // ===== Color Utility Functions =====\r\n \r\n // Convert hex to RGB (handles both 6 and 8 character hex codes)\r\n const hexToRgb = (hex) => {\r\n // Remove # if present and handle 8-char hex (with alpha)\r\n const cleanHex = hex.replace('#', '').substring(0, 6);\r\n const result = /^([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(cleanHex);\r\n return result ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16)\r\n } : null;\r\n };\r\n \r\n // Determine if a color is light or dark (based on relative luminance)\r\n const isLightColor = (color) => {\r\n let r, g, b;\r\n if (color.startsWith('#')) {\r\n const rgb = hexToRgb(color);\r\n if (!rgb) return false;\r\n r = rgb.r;\r\n g = rgb.g;\r\n b = rgb.b;\r\n } else if (color.startsWith('rgb')) {\r\n const match = color.match(/\\d+/g);\r\n [r, g, b] = match.map(Number);\r\n } else {\r\n return false;\r\n }\r\n \r\n // Calculate relative luminance (perception-based)\r\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\r\n return luminance > 0.5;\r\n };\r\n \r\n // Lighten a color by a percentage (0-1)\r\n const lightenColor = (color, percent) => {\r\n const rgb = hexToRgb(color);\r\n if (!rgb) return color;\r\n \r\n const r = Math.min(255, Math.round(rgb.r + (255 - rgb.r) * percent));\r\n const g = Math.min(255, Math.round(rgb.g + (255 - rgb.g) * percent));\r\n const b = Math.min(255, Math.round(rgb.b + (255 - rgb.b) * percent));\r\n \r\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\r\n };\r\n \r\n // Darken a color by a percentage (0-1)\r\n const darkenColor = (color, percent) => {\r\n const rgb = hexToRgb(color);\r\n if (!rgb) return color;\r\n \r\n const r = Math.max(0, Math.round(rgb.r * (1 - percent)));\r\n const g = Math.max(0, Math.round(rgb.g * (1 - percent)));\r\n const b = Math.max(0, Math.round(rgb.b * (1 - percent)));\r\n \r\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\r\n };\r\n \r\n // Add alpha transparency to a color\r\n const addAlpha = (color, opacity) => {\r\n const rgb = hexToRgb(color);\r\n if (!rgb) return color;\r\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`;\r\n };\r\n \r\n // ===== Theme Generation =====\r\n \r\n const isAccentLight = isLightColor(primaryColor);\r\n \r\n return {\r\n // Primary color\r\n primary: primaryColor,\r\n \r\n // Contrast detection\r\n isLight: isAccentLight,\r\n \r\n // Header colors\r\n header: {\r\n background: primaryColor,\r\n text: isAccentLight ? '#1f2937' : '#ffffff',\r\n button: isAccentLight ? '#374151' : '#ffffff',\r\n border: lightenColor(primaryColor, 0.85)\r\n },\r\n \r\n // Message colors\r\n messages: {\r\n userBackground: primaryColor,\r\n userText: isAccentLight ? '#1f2937' : '#ffffff',\r\n botBackground: lightenColor(primaryColor, 0.85),\r\n botText: '#4b5563',\r\n link: darkenColor(primaryColor, 0.1),\r\n timestamp: '#9ca3af'\r\n },\r\n \r\n // Window/Container colors\r\n window: {\r\n background: lightenColor(primaryColor, 0.95),\r\n border: isAccentLight ? darkenColor(primaryColor, 0.2) : lightenColor(primaryColor, 0.3),\r\n shadow: addAlpha(primaryColor, 0.15)\r\n },\r\n \r\n // Input area colors\r\n input: {\r\n background: '#ffffff',\r\n border: lightenColor(primaryColor, 0.85),\r\n text: '#1f2937',\r\n placeholder: '#9ca3af',\r\n buttonBackground: primaryColor,\r\n buttonText: isAccentLight ? '#1f2937' : '#ffffff'\r\n },\r\n \r\n // Footer colors\r\n footer: {\r\n text: isAccentLight ? darkenColor(primaryColor, 0.3) : lightenColor(primaryColor, 0.2),\r\n link: darkenColor(primaryColor, 0.1)\r\n },\r\n \r\n // Chat bubble (floating button)\r\n bubble: {\r\n background: primaryColor,\r\n icon: isAccentLight ? '#1f2937' : '#ffffff'\r\n },\r\n \r\n // Hint bubble\r\n hint: {\r\n background: '#ffffff',\r\n text: '#1f2937',\r\n border: lightenColor(primaryColor, 0.85),\r\n closeButton: primaryColor\r\n },\r\n \r\n // Menu dropdown\r\n menu: {\r\n background: '#ffffff',\r\n text: '#1f2937',\r\n hover: lightenColor(primaryColor, 0.9),\r\n border: '#e5e7eb'\r\n },\r\n \r\n // Rating stars\r\n rating: {\r\n star: '#fbbf24',\r\n text: '#6b7280'\r\n },\r\n \r\n // Utility colors\r\n utils: {\r\n lighten: lightenColor,\r\n darken: darkenColor,\r\n addAlpha: addAlpha,\r\n hexToRgb: hexToRgb\r\n }\r\n };\r\n };\r\n \r\n /**\r\n * ========================================================================\r\n * ASSET VALIDATION HELPERS\r\n * ========================================================================\r\n * These functions validate logos and avatars to ensure they are either:\r\n * 1. Valid, loadable image URLs\r\n * 2. Valid SVG markup\r\n * If validation fails, silently falls back to default assets (no invalid content displayed)\r\n */\r\n \r\n // Check if string matches URL pattern\r\n const isUrlPattern = (str) => {\r\n if (!str || typeof str !== 'string') return false;\r\n return /^https?:\\/\\/.+/.test(str.trim());\r\n };\r\n \r\n // Attempt to load image from URL with timeout\r\n const canLoadImage = async (url) => {\r\n return new Promise((resolve) => {\r\n const img = new Image();\r\n const timeout = setTimeout(() => {\r\n img.src = ''; // Cancel loading\r\n resolve(false);\r\n }, 3000);\r\n \r\n img.onload = () => {\r\n clearTimeout(timeout);\r\n resolve(true);\r\n };\r\n \r\n img.onerror = () => {\r\n clearTimeout(timeout);\r\n resolve(false);\r\n };\r\n \r\n img.src = url;\r\n });\r\n };\r\n \r\n // Validate if a string is valid SVG markup\r\n const isValidSvg = (svgString) => {\r\n if (!svgString || typeof svgString !== 'string') return false;\r\n \r\n // Check if it starts with <svg and contains closing tag\r\n const svgPattern = /^\\s*<svg[\\s\\S]*<\\/svg>\\s*$/i;\r\n if (!svgPattern.test(svgString)) return false;\r\n \r\n // Try to parse as XML\r\n try {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(svgString, 'image/svg+xml');\r\n const parserError = doc.querySelector('parsererror');\r\n return !parserError;\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n \r\n // Validate and return asset (URL or SVG) with silent fallback to default\r\n const validateAsset = async (asset, defaultAsset) => {\r\n // If no asset provided, use default\r\n if (!asset) return defaultAsset;\r\n \r\n // If it looks like a URL, try to load it\r\n if (isUrlPattern(asset)) {\r\n const loaded = await canLoadImage(asset);\r\n // If image loads successfully, use it; otherwise use default (don't display broken URL)\r\n return loaded ? asset : defaultAsset;\r\n }\r\n \r\n // If it's valid SVG markup, use it\r\n if (isValidSvg(asset)) {\r\n return asset;\r\n }\r\n \r\n // For any other invalid input, use default (don't display invalid text)\r\n return defaultAsset;\r\n };\r\n \r\n // ===== Generate Complete Color Theme =====\r\n const theme = generateColorTheme(config.botaccentColor);\r\n \r\n // Legacy variable names for backward compatibility (extract from theme)\r\n const isAccentLight = theme.isLight;\r\n const userMessageBg = theme.messages.userBackground;\r\n const userMessageText = theme.messages.userText;\r\n const botMessageBg = theme.messages.botBackground;\r\n const botMessageText = theme.messages.botText;\r\n const linkColor = theme.messages.link;\r\n const headerTextColor = theme.header.text;\r\n const headerButtonColor = theme.header.button;\r\n const sendButtonTextColor = theme.input.buttonText;\r\n const windowBorderColor = theme.window.border;\r\n const windowBackgroundColor = theme.window.background;\r\n const inputBorderColor = theme.input.border;\r\n const headerBorderColor = theme.header.border;\r\n const footerTextColor = theme.footer.text;\r\n const windowShadowColor = theme.window.shadow;\r\n \r\n // Choose appropriate default logo based on background color\r\n const defaultLogo = isAccentLight ? defaultConfig.companyLogoBlack : defaultConfig.companyLogoWhite;\r\n \r\n // Validate company logo with fallback to default\r\n const logoToValidate = companyLogo || (apiConfig?.companyLogo);\r\n let validatedLogo = logoToValidate;\r\n let logoLoadFailed = false;\r\n if (logoToValidate && isUrlPattern(logoToValidate)) {\r\n const loaded = await canLoadImage(logoToValidate);\r\n if (!loaded) {\r\n logoLoadFailed = true;\r\n }\r\n } else if (logoToValidate && !isValidSvg(logoToValidate)) {\r\n logoLoadFailed = true;\r\n }\r\n config.companyLogo = logoLoadFailed ? null : validatedLogo;\r\n\r\n // Validate bot avatar with placeholder on fail\r\n const avatarToValidate = config.botAvatar;\r\n let validatedAvatar = avatarToValidate;\r\n let avatarLoadFailed = false;\r\n if (avatarToValidate && isUrlPattern(avatarToValidate)) {\r\n const loaded = await canLoadImage(avatarToValidate);\r\n if (!loaded) {\r\n avatarLoadFailed = true;\r\n }\r\n } else if (avatarToValidate && !isValidSvg(avatarToValidate)) {\r\n avatarLoadFailed = true;\r\n }\r\n config.botAvatar = avatarLoadFailed ? null : validatedAvatar;\r\n \r\n const modeClass = config.mode === \"section\" ? \"section-mode\" : \"bubble-mode\";\r\n const chatWindow = document.createElement('div');\r\n \r\n let bubble, hintBubbleTimeout, hintBubble;\r\n if (config.mode === \"bubble\") {\r\n bubble = document.createElement('div');\r\n bubble.id = \"aptolix-chat-bubble\";\r\n bubble.style.backgroundColor = config.botaccentColor;\r\n \r\n // Render widget icon (SVG or text/emoji)\r\n const iconValue = config.widgetIcon || defaultConfig.widgetIcon;\r\n // Check if it's SVG\r\n if (iconValue.includes('<svg') || (iconValue.includes('<') && iconValue.includes('>'))) {\r\n bubble.innerHTML = iconValue;\r\n } else {\r\n // It's text/emoji\r\n bubble.innerText = iconValue;\r\n }\r\n \r\n document.body.appendChild(bubble);\r\n\r\n // Remove any existing hint bubble before creating a new one\r\n const existingHintBubble = document.getElementById(\"aptolix-chat-hint-bubble\");\r\n if (existingHintBubble) {\r\n existingHintBubble.remove();\r\n }\r\n\r\n // Create hint bubble but keep it hidden initially\r\n hintBubble = document.createElement('div');\r\n hintBubble.id = \"aptolix-chat-hint-bubble\";\r\n hintBubble.className = \"aptolix-hint-bubble\";\r\n hintBubble.style.display = \"none\";\r\n hintBubble.style.position = \"fixed\";\r\n hintBubble.style.right = \"40px\";\r\n hintBubble.style.bottom = \"110px\";\r\n hintBubble.style.zIndex = \"9999\"; // <-- Ensure it's on top\r\n\r\n // Create the hint text span\r\n const hintTextSpan = document.createElement('span');\r\n hintTextSpan.textContent = config.floatingWelcomeMessage;\r\n\r\n // Create the close button\r\n const hintCloseBtn = document.createElement('button');\r\n hintCloseBtn.id = \"aptolix-hint-close\";\r\n hintCloseBtn.title = \"Close\";\r\n hintCloseBtn.setAttribute(\"aria-label\", \"Close\");\r\n hintCloseBtn.innerHTML = \"✕\";\r\n hintCloseBtn.style.background = \"none\";\r\n hintCloseBtn.style.border = \"none\";\r\n hintCloseBtn.style.color = config.botaccentColor;\r\n hintCloseBtn.style.fontSize = \"1.3em\";\r\n hintCloseBtn.style.position = \"absolute\";\r\n hintCloseBtn.style.top = \"8px\";\r\n hintCloseBtn.style.right = \"12px\";\r\n hintCloseBtn.style.cursor = \"pointer\";\r\n hintCloseBtn.style.padding = \"0\";\r\n\r\n // Add event listener directly\r\n hintCloseBtn.addEventListener(\"click\", () => {\r\n hintBubble.style.display = \"none\";\r\n sessionStorage.setItem(\"aptolixHintClosed\", \"true\");\r\n clearTimeout(hintBubbleTimeout);\r\n });\r\n\r\n // Append children\r\n hintBubble.appendChild(hintTextSpan);\r\n hintBubble.appendChild(hintCloseBtn);\r\n\r\n document.body.appendChild(hintBubble);\r\n\r\n // Show hint bubble after delay, unless closed in session\r\n hintBubbleTimeout = setTimeout(() => {\r\n if (\r\n chatWindow.style.display === \"none\" &&\r\n !sessionStorage.getItem(\"aptolixHintClosed\")\r\n ) {\r\n hintBubble.style.display = \"block\";\r\n }\r\n }, config.floatingWelcomeDelay * 1000); // Convert seconds to milliseconds\r\n\r\n // Hide hint bubble when main bubble is clicked\r\n bubble.addEventListener(\"click\", () => {\r\n hintBubble.style.display = \"none\";\r\n clearTimeout(hintBubbleTimeout);\r\n });\r\n\r\n // Hide hint bubble if chat is opened by other means\r\n chatWindow.addEventListener(\"transitionstart\", () => {\r\n hintBubble.style.display = \"none\";\r\n clearTimeout(hintBubbleTimeout);\r\n });\r\n }\r\n\r\n \r\n chatWindow.id = \"aptolix-chat-window\";\r\n chatWindow.classList.add(modeClass);\r\n chatWindow.style.display = config.mode === \"section\" ? \"flex\" : \"none\";\r\n \r\n // Apply dynamic colors to chat window\r\n chatWindow.style.backgroundColor = windowBackgroundColor;\r\n chatWindow.style.borderColor = windowBorderColor;\r\n chatWindow.style.boxShadow = `0 4px 20px ${windowShadowColor}`;\r\n\r\n if (config.mode === \"section\" && config.target) {\r\n const targetEl = typeof config.target === \"string\" ? document.querySelector(config.target) : config.target;\r\n if (targetEl) targetEl.appendChild(chatWindow);\r\n else document.body.appendChild(chatWindow);\r\n } else {\r\n document.body.appendChild(chatWindow);\r\n }\r\n\r\n\r\n // Determine logo HTML - if no valid logo, render nothing\r\n let logoHTML = '';\r\n if (config.companyLogo) {\r\n const isLogoUrl = /^https?:\\/\\//.test(config.companyLogo);\r\n logoHTML = isLogoUrl\r\n ? `<img src=\"${config.companyLogo}\" alt=\"Company Logo\" class=\"aptolix-company-logo\" style=\"max-width:40px;max-height:40px;\" />`\r\n : config.companyLogo;\r\n } // else: leave logoHTML as empty string (no element)\r\n\r\n // Determine bot avatar HTML - use default if not provided\r\n const isBotAvatarUrl = config.botAvatar && /^https?:\\/\\//.test(config.botAvatar);\r\n const botAvatarHTML = isBotAvatarUrl\r\n ? `<img src=\"${config.botAvatar}\" alt=\"Bot Avatar\" style=\"width:40px;height:40px;border-radius:50%;\" />`\r\n : (config.botAvatar || defaultConfig.botAvatar);\r\n \r\n // Create user avatar HTML - use default if not provided\r\n const isUserAvatarUrl = config.userAvatar && /^https?:\\/\\//.test(config.userAvatar);\r\n const userAvatarHTML = isUserAvatarUrl\r\n ? `<img src=\"${config.userAvatar}\" alt=\"User Avatar\" style=\"width:40px;height:40px;border-radius:50%;\" />`\r\n : (config.userAvatar || defaultConfig.userAvatar);\r\n\r\n // Construct Aptolix link with UTM parameters\r\n const utmSource = encodeURIComponent(window.location.hostname);\r\n const utmMedium = encodeURIComponent('widget');\r\n const utmCampaign = encodeURIComponent('refback');\r\n const aptolixLink = `https://aptolix.com?utm_source=${utmSource}&utm_medium=${utmMedium}&utm_campaign=${utmCampaign}`;\r\n\r\n chatWindow.innerHTML = `\r\n <div id=\"aptolix-chat-header\" style=\"background-color: ${config.botaccentColor}; color: ${headerTextColor}; border-bottom: 2px solid ${headerBorderColor};\">\r\n <div class=\"aptolix-header-flex\">\r\n <div class=\"aptolix-header-title\">\r\n ${logoHTML ? `<div class=\"aptolix-company-logo-wrapper\">${logoHTML}</div>` : ''}\r\n <strong class=\"aptolix-bot-name\">${config.botname}</strong>\r\n </div>\r\n <div class=\"aptolix-header-actions\">\r\n <button id=\"aptolix-chat-menu\" title=\"More options\" aria-label=\"More options\" style=\"color: ${headerButtonColor};\">⋮</button>\r\n ${config.allowExpandChatWindow ? `<button id=\"aptolix-chat-expand\" title=\"Expand/Collapse\" aria-label=\"Expand/Collapse\" style=\"color: ${headerButtonColor};\">\r\n <span id=\"aptolix-chat-expand-icon\">⤢</span>\r\n </button>` : ''}\r\n <button id=\"aptolix-chat-close\" title=\"Close chat\" aria-label=\"Close chat\" style=\"color: ${headerButtonColor};\">×</button>\r\n <div id=\"aptolix-chat-menu-dropdown\" class=\"aptolix-menu-dropdown\">\r\n <button id=\"aptolix-chat-reset\" class=\"aptolix-menu-item\" title=\"Reset chat\" aria-label=\"Reset chat\">\r\n <span class=\"aptolix-menu-icon\">⟲</span>\r\n <span class=\"aptolix-menu-text\">Reset Chat</span>\r\n </button>\r\n ${config.allowDownloadTranscript ? `<button id=\"aptolix-chat-download\" class=\"aptolix-menu-item\" title=\"Download chat\" aria-label=\"Download chat\">\r\n <span class=\"aptolix-menu-icon\">⤓</span>\r\n <span class=\"aptolix-menu-text\">Download Chat</span>\r\n </button>` : ''}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"aptolix-chat-messages\"></div>\r\n <div id=\"aptolix-chat-input\" style=\"border-top: 2px solid ${inputBorderColor};\">\r\n <textarea id=\"aptolix-chat-inputbox\" rows=\"1\" placeholder=\"Type your message...\" style=\"resize:none\"></textarea>\r\n <button style=\"background-color: ${config.botaccentColor}; color: ${sendButtonTextColor};\">Send</button>\r\n </div>\r\n <div class=\"aptolix-footer\">\r\n <div class=\"aptolix-powered-by\" id=\"aptolix-powered-by\" style=\"color: ${footerTextColor};\">\r\n Powered by <a href=\"${aptolixLink}\" target=\"_blank\" rel=\"noopener\" class=\"aptolix-link\" style=\"color: ${config.botaccentColor};\">Aptolix</a>\r\n </div>\r\n <span class=\"aptolix-footer-separator\" id=\"aptolix-footer-separator\">|</span>\r\n <div class=\"aptolix-rating\" id=\"aptolix-rating\">\r\n <span class=\"aptolix-rating-label\">Rate this chat:</span>\r\n <div class=\"aptolix-stars\" id=\"aptolix-stars\">\r\n <span class=\"star\" data-rating=\"1\">☆</span>\r\n <span class=\"star\" data-rating=\"2\">☆</span>\r\n <span class=\"star\" data-rating=\"3\">☆</span>\r\n <span class=\"star\" data-rating=\"4\">☆</span>\r\n <span class=\"star\" data-rating=\"5\">☆</span>\r\n </div>\r\n </div>\r\n </div>\r\n`;\r\n\r\n const closeBtn = chatWindow.querySelector(\"#aptolix-chat-close\");\r\n const resetBtn = chatWindow.querySelector(\"#aptolix-chat-reset\");\r\n const expandBtn = config.allowExpandChatWindow ? chatWindow.querySelector(\"#aptolix-chat-expand\") : null;\r\n const expandIcon = config.allowExpandChatWindow ? chatWindow.querySelector(\"#aptolix-chat-expand-icon\") : null;\r\n const input = chatWindow.querySelector(\"#aptolix-chat-inputbox\");\r\n const sendButton = chatWindow.querySelector(\"#aptolix-chat-input button\");\r\n const messagesDiv = chatWindow.querySelector(\"#aptolix-chat-messages\");\r\n const downloadBtn = config.allowDownloadTranscript ? chatWindow.querySelector(\"#aptolix-chat-download\") : null;\r\n const menuBtn = chatWindow.querySelector(\"#aptolix-chat-menu\");\r\n const menuDropdown = chatWindow.querySelector(\"#aptolix-chat-menu-dropdown\");\r\n \r\n // Apply dynamic background to messages area\r\n messagesDiv.style.backgroundColor = theme.window.background;\r\n \r\n // Apply dynamic colors to textarea\r\n input.style.borderColor = theme.input.border;\r\n input.style.backgroundColor = theme.window.background;\r\n \r\n // Apply hover/focus colors dynamically\r\n input.addEventListener('focus', () => {\r\n input.style.borderColor = theme.primary;\r\n });\r\n input.addEventListener('blur', () => {\r\n input.style.borderColor = theme.input.border;\r\n });\r\n \r\n // Apply dynamic colors to menu dropdown\r\n menuDropdown.style.backgroundColor = theme.menu.background;\r\n menuDropdown.style.borderColor = theme.menu.border;\r\n menuDropdown.style.border = `1px solid ${theme.menu.border}`;\r\n \r\n // Apply hover effect to menu items\r\n const menuItems = menuDropdown.querySelectorAll('.aptolix-menu-item');\r\n menuItems.forEach(item => {\r\n // Set initial colors\r\n item.style.backgroundColor = theme.menu.background;\r\n item.style.color = theme.menu.text;\r\n \r\n item.addEventListener('mouseenter', () => {\r\n item.style.backgroundColor = theme.menu.hover;\r\n });\r\n item.addEventListener('mouseleave', () => {\r\n item.style.backgroundColor = theme.menu.background;\r\n });\r\n });\r\n \r\n // Menu dropdown toggle\r\n menuBtn.addEventListener(\"click\", (e) => {\r\n e.stopPropagation();\r\n menuDropdown.classList.toggle(\"show\");\r\n });\r\n \r\n // Close menu when clicking outside\r\n document.addEventListener(\"click\", (e) => {\r\n if (!menuBtn.contains(e.target) && !menuDropdown.contains(e.target)) {\r\n menuDropdown.classList.remove(\"show\");\r\n }\r\n });\r\n \r\n // Star rating handlers\r\n const stars = chatWindow.querySelectorAll('.star');\r\n stars.forEach(star => {\r\n // Hover effect\r\n star.addEventListener('mouseenter', (e) => {\r\n const rating = parseInt(e.target.getAttribute('data-rating'));\r\n stars.forEach((s, idx) => {\r\n s.textContent = idx < rating ? '★' : '☆';\r\n });\r\n });\r\n \r\n // Click to submit\r\n star.addEventListener('click', (e) => {\r\n const rating = parseInt(e.target.getAttribute('data-rating'));\r\n submitRating(rating);\r\n });\r\n });\r\n \r\n // Reset stars on mouse leave\r\n const starsContainer = chatWindow.querySelector('#aptolix-stars');\r\n if (starsContainer) {\r\n starsContainer.addEventListener('mouseleave', () => {\r\n stars.forEach(s => s.textContent = '☆');\r\n });\r\n }\r\n\r\n // Format relative time for messages\r\n const formatRelativeTime = (timestamp) => {\r\n const now = Date.now();\r\n const diff = Math.floor((now - timestamp) / 1000); // difference in seconds\r\n\r\n if (diff < 10) return 'just now';\r\n if (diff < 60) return `${diff} secs ago`;\r\n if (diff < 3600) {\r\n const mins = Math.floor(diff / 60);\r\n return mins === 1 ? '1 min ago' : `${mins} mins ago`;\r\n }\r\n if (diff < 86400) {\r\n const hours = Math.floor(diff / 3600);\r\n return hours === 1 ? '1 hour ago' : `${hours} hours ago`;\r\n }\r\n const days = Math.floor(diff / 86400);\r\n return days === 1 ? '1 day ago' : `${days} days ago`;\r\n };\r\n\r\n // Update all message timestamps\r\n const updateTimestamps = () => {\r\n const timestamps = messagesDiv.querySelectorAll('.message-timestamp');\r\n timestamps.forEach(span => {\r\n const timestamp = parseInt(span.getAttribute('data-timestamp'));\r\n span.textContent = formatRelativeTime(timestamp);\r\n });\r\n };\r\n\r\n // Update timestamps every 60 seconds\r\n setInterval(updateTimestamps, 60000);\r\n\r\n // Apply accent color to all links and message backgrounds\r\n const applyAccentToLinks = () => {\r\n const links = messagesDiv.querySelectorAll('.message-text a');\r\n links.forEach(link => {\r\n link.style.color = linkColor;\r\n });\r\n \r\n // Apply dynamic colors to message bubbles\r\n const userMessages = messagesDiv.querySelectorAll('.message.user .message-text');\r\n userMessages.forEach(msg => {\r\n msg.style.backgroundColor = userMessageBg;\r\n msg.style.color = userMessageText;\r\n });\r\n \r\n const botMessages = messagesDiv.querySelectorAll('.message.bot .message-text');\r\n botMessages.forEach(msg => {\r\n msg.style.backgroundColor = botMessageBg;\r\n msg.style.color = botMessageText;\r\n });\r\n };\r\n\r\n // Initialize localStorage manager\r\n const storageManager = new LocalStorageManager();\r\n \r\n // Get visitor ID from localStorage (persists across resets)\r\n let visitorId = storageManager.getVisitorId(chatbotId);\r\n \r\n // Get session ID from localStorage (cleared on reset for new conversation)\r\n let sessionId = storageManager.getSessionId(chatbotId);\r\n \r\n // Rating tracking\r\n let botMessageCount = 0;\r\n let lastRatedAtMessageCount = 0;\r\n let isRatingVisible = false;\r\n\r\n // Helper to save current chat history\r\n const saveChatToLocalStorage = () => {\r\n if (!sessionId) return; // Only save if session ID exists\r\n \r\n const messages = Array.from(messagesDiv.querySelectorAll('.message:not(.typing):not(.error)')).map(msg => {\r\n const isUser = msg.classList.contains('user');\r\n const isGreeting = msg.classList.contains('greeting');\r\n const messageText = msg.querySelector('.message-text');\r\n const timestampEl = msg.querySelector('.message-timestamp');\r\n \r\n return {\r\n type: isUser ? 'user' : 'bot',\r\n text: messageText ? messageText.innerHTML : '',\r\n timestamp: timestampEl ? parseInt(timestampEl.getAttribute('data-timestamp')) : Date.now(),\r\n isGreeting: isGreeting\r\n };\r\n });\r\n \r\n storageManager.saveChatHistory(chatbotId, sessionId, messages);\r\n };\r\n\r\n // Calculate remaining time until limit expires\r\n const calculateRemainingTime = (limitDateStr) => {\r\n let limitDate;\r\n \r\n // If the date string doesn't include time (just YYYY-MM-DD), \r\n // set it to end of day (23:59:59.999 UTC)\r\n if (limitDateStr.length === 10 && !limitDateStr.includes('T')) {\r\n limitDate = new Date(limitDateStr + 'T23:59:59.999Z');\r\n } else {\r\n limitDate = new Date(limitDateStr);\r\n }\r\n \r\n const now = new Date();\r\n const diffMs = limitDate - now;\r\n \r\n if (diffMs <= 0) return \"0 minutes\";\r\n \r\n const diffMinutes = Math.ceil(diffMs / (1000 * 60));\r\n const hours = Math.floor(diffMinutes / 60);\r\n const minutes = diffMinutes % 60;\r\n \r\n if (hours > 0 && minutes > 0) {\r\n return `${hours} hour${hours !== 1 ? 's' : ''} and ${minutes} minute${minutes !== 1 ? 's' : ''}`;\r\n } else if (hours > 0) {\r\n return `${hours} hour${hours !== 1 ? 's' : ''}`;\r\n } else {\r\n return `${minutes} minute${minutes !== 1 ? 's' : ''}`;\r\n }\r\n };\r\n\r\n // Show usage limit warning banner\r\n const showLimitWarning = (limitDateStr) => {\r\n const timeRemaining = calculateRemainingTime(limitDateStr);\r\n \r\n // Remove any existing warning\r\n const existingWarning = chatWindow.querySelector('.aptolix-limit-warning');\r\n if (existingWarning) existingWarning.remove();\r\n \r\n const warningBanner = document.createElement('div');\r\n warningBanner.className = 'aptolix-limit-warning';\r\n warningBanner.style.cssText = `\r\n background: linear-gradient(135deg, #fef3c7 0%, #fed7aa 100%);\r\n border-top: 2px solid #f59e0b;\r\n border-bottom: 2px solid #f59e0b;\r\n color: #92400e;\r\n padding: 6px 12px;\r\n font-size: 12px;\r\n line-height: 1.3;\r\n font-weight: 500;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n `;\r\n warningBanner.innerHTML = `\r\n <span style=\"font-size: 14px;\">⚠️</span>\r\n <span>Usage limit reached. Try again in ${timeRemaining}.</span>\r\n `;\r\n \r\n // Insert warning above input area\r\n const inputArea = chatWindow.querySelector('#aptolix-chat-input');\r\n inputArea.parentNode.insertBefore(warningBanner, inputArea);\r\n \r\n // Disable input completely\r\n input.disabled = true;\r\n input.placeholder = \"Chat unavailable\";\r\n input.style.cursor = \"not-allowed\";\r\n sendButton.disabled = true;\r\n sendButton.style.opacity = \"0.5\";\r\n sendButton.style.cursor = \"not-allowed\";\r\n };\r\n\r\n // Enable chat input\r\n const enableChatInput = () => {\r\n input.disabled = false;\r\n input.placeholder = \"Type your message...\";\r\n input.style.cursor = \"text\";\r\n sendButton.disabled = false;\r\n sendButton.style.opacity = \"1\";\r\n sendButton.style.cursor = \"pointer\";\r\n \r\n const warningBanner = chatWindow.querySelector('.aptolix-limit-warning');\r\n if (warningBanner) warningBanner.remove();\r\n };\r\n\r\n // Show rating prompt\r\n const showRatingPrompt = () => {\r\n if (!config.allowRating || isRatingVisible) return;\r\n \r\n const ratingDiv = chatWindow.querySelector('#aptolix-rating');\r\n const separator = chatWindow.querySelector('#aptolix-footer-separator');\r\n \r\n if (!ratingDiv || !separator) return;\r\n \r\n isRatingVisible = true;\r\n \r\n // Show separator and rating with smooth transitions\r\n setTimeout(() => {\r\n separator.classList.add('show');\r\n ratingDiv.classList.add('show');\r\n }, 10);\r\n };\r\n\r\n // Hide rating prompt\r\n const hideRatingPrompt = (showThankYou = false) => {\r\n const poweredBy = chatWindow.querySelector('#aptolix-powered-by');\r\n const ratingDiv = chatWindow.querySelector('#aptolix-rating');\r\n const separator = chatWindow.querySelector('#aptolix-footer-separator');\r\n \r\n if (!poweredBy || !ratingDiv || !separator) return;\r\n \r\n if (showThankYou) {\r\n // Show thank you message briefly\r\n const originalContent = poweredBy.innerHTML;\r\n poweredBy.innerHTML = '✓ Thanks for your feedback!';\r\n \r\n // Hide separator and rating smoothly\r\n separator.classList.remove('show');\r\n ratingDiv.classList.remove('show');\r\n \r\n // Reset after 2 seconds\r\n setTimeout(() => {\r\n poweredBy.innerHTML = originalContent;\r\n isRatingVisible = false;\r\n }, 2000);\r\n } else {\r\n // Just hide without thank you\r\n separator.classList.remove('show');\r\n ratingDiv.classList.remove('show');\r\n setTimeout(() => {\r\n isRatingVisible = false;\r\n }, 400);\r\n }\r\n };\r\n\r\n // Submit rating\r\n const submitRating = async (rating) => {\r\n try {\r\n // Rating API requires both visitor_id and session_id\r\n if (!visitorId || !sessionId) {\r\n hideRatingPrompt(true);\r\n return;\r\n }\r\n \r\n const requestBody = {\r\n rating: rating,\r\n visitor_id: visitorId,\r\n session_id: sessionId\r\n };\r\n \r\n await fetch(`${apiHost}/chatbot/${chatbotId}/rating`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(requestBody)\r\n });\r\n \r\n lastRatedAtMessageCount = botMessageCount;\r\n hideRatingPrompt(true);\r\n } catch (error) {\r\n hideRatingPrompt(true); // Still show thank you even if API fails\r\n }\r\n };\r\n\r\n // Check if should show rating\r\n const checkAndShowRating = () => {\r\n if (!config.allowRating) return;\r\n \r\n const shouldShow = botMessageCount >= config.ratingThreshold && \r\n botMessageCount >= lastRatedAtMessageCount + config.ratingInterval;\r\n \r\n if (shouldShow) {\r\n showRatingPrompt();\r\n }\r\n };\r\n\r\n if (config.mode === \"bubble\") {\r\n closeBtn.addEventListener(\"click\", () => {\r\n chatWindow.style.display = \"none\";\r\n });\r\n }\r\n\r\n resetBtn.addEventListener(\"click\", () => {\r\n messagesDiv.innerHTML = \"\";\r\n input.value = \"\";\r\n if (sessionId) {\r\n storageManager.clearChatHistory(chatbotId, sessionId);\r\n storageManager.clearSessionId(chatbotId); // Clear session to start new conversation\r\n sessionId = null;\r\n }\r\n // Reset rating counters\r\n botMessageCount = 0;\r\n lastRatedAtMessageCount = 0;\r\n hideRatingPrompt(false);\r\n \r\n // Close the menu dropdown\r\n menuDropdown.classList.remove(\"show\");\r\n \r\n // Check if usage limit is still active\r\n const limitData = visitorId ? storageManager.getUsageLimitReached(chatbotId, visitorId) : null;\r\n if (limitData && limitData.limitReachedDate) {\r\n // Show greeting but keep limit warning\r\n showGreeting();\r\n showLimitWarning(limitData.limitReachedDate);\r\n } else {\r\n // Normal reset - show greeting and enable input\r\n showGreeting();\r\n enableChatInput();\r\n }\r\n saveChatToLocalStorage(); // Save greeting to localStorage\r\n });\r\n\r\n if (config.mode === \"bubble\" && bubble) {\r\n bubble.addEventListener(\"click\", () => {\r\n const wasClosed = chatWindow.style.display === \"none\";\r\n chatWindow.style.display = wasClosed ? \"flex\" : \"none\";\r\n bubble.removeAttribute(\"data-unread\");\r\n \r\n if (wasClosed) {\r\n // Check usage limit when opening chat\r\n const limitData = storageManager.getUsageLimitReached(chatbotId, visitorId);\r\n if (limitData) {\r\n showLimitWarning(limitData.limitReachedDate);\r\n } else {\r\n enableChatInput();\r\n showGreeting();\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (config.mode === \"bubble\") {\r\n document.addEventListener(\"mousedown\", function onOutsideClick(event) {\r\n if (chatWindow.style.display !== \"none\") {\r\n if (\r\n !chatWindow.contains(event.target) &&\r\n !bubble.contains(event.target)\r\n ) {\r\n chatWindow.style.display = \"none\";\r\n }\r\n }\r\n });\r\n }\r\n\r\n async function sendMessage(isRetry = false, previousText = null) {\r\n // Block if input is disabled (e.g., usage limit reached)\r\n if (input.disabled && !isRetry) {\r\n return;\r\n }\r\n \r\n const userText = previousText || input.value.trim();\r\n if (!userText) return;\r\n if (!isRetry) {\r\n input.value = \"\";\r\n input.rows = 1;\r\n input.style.height = \"32px\"; // or your default line height\r\n input.style.overflowY = \"hidden\";\r\n }\r\n if (!isRetry) {\r\n const userMsg = document.createElement(\"div\");\r\n userMsg.className = \"message user\";\r\n const timestamp = Date.now();\r\n userMsg.innerHTML = `\r\n <div class=\"message-avatar\">\r\n ${userAvatarHTML}\r\n <div class=\"message-sender\">${config.username}</div>\r\n </div>\r\n <div class=\"message-content\">\r\n <div class=\"message-text\" style=\"background-color: ${userMessageBg}; color: ${userMessageText};\">${userText}</div>\r\n <span class=\"message-timestamp\" data-timestamp=\"${timestamp}\">${formatRelativeTime(timestamp)}</span>\r\n </div>\r\n `;\r\n messagesDiv.appendChild(userMsg);\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n saveChatToLocalStorage();\r\n }\r\n\r\n const typingMsg = document.createElement(\"div\");\r\n typingMsg.className = \"message bot typing\";\r\n typingMsg.innerHTML = `<span class=\"typing-dots\"><span>.</span><span>.</span><span>.</span></span>`;\r\n messagesDiv.appendChild(typingMsg);\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n\r\n function showError() {\r\n typingMsg.remove();\r\n const errorMsg = document.createElement(\"div\");\r\n errorMsg.className = \"message bot error\";\r\n errorMsg.innerHTML = `\r\n <div>\r\n <strong>⚠️ Unable to connect to the assistant.</strong><br>\r\n Please check your internet connection or try again later.\r\n </div>\r\n <button class=\"aptolix-retry-btn\">Retry</button>\r\n `;\r\n messagesDiv.appendChild(errorMsg);\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n\r\n const retryBtn = errorMsg.querySelector('.aptolix-retry-btn');\r\n if (retryBtn) {\r\n retryBtn.addEventListener('click', () => {\r\n errorMsg.remove();\r\n sendMessage(true, userText);\r\n });\r\n }\r\n }\r\n\r\n try {\r\n // Build request body - include visitor_id and session_id if they exist\r\n const requestBody = { message: userText };\r\n \r\n if (visitorId) {\r\n requestBody.visitor_id = visitorId;\r\n }\r\n \r\n if (sessionId) {\r\n requestBody.session_id = sessionId;\r\n }\r\n\r\n const res = await fetch(`${apiHost}/chatbot/${chatbotId}`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify(requestBody),\r\n });\r\n const data = await res.json();\r\n\r\n // Always update visitor_id and session_id from API response (backend is source of truth)\r\n if (data.visitor_id) {\r\n visitorId = data.visitor_id;\r\n storageManager.saveVisitorId(chatbotId, visitorId);\r\n }\r\n \r\n if (data.session_id) {\r\n sessionId = data.session_id;\r\n storageManager.saveSessionId(chatbotId, sessionId);\r\n }\r\n\r\n // Check if usage limit reached\r\n if (data.limitReachedDate) {\r\n storageManager.setUsageLimitReached(chatbotId, visitorId, data.limitReachedDate);\r\n typingMsg.remove();\r\n showLimitWarning(data.limitReachedDate);\r\n return;\r\n }\r\n\r\n typingMsg.remove();\r\n\r\n const botMsg = document.createElement(\"div\");\r\n botMsg.className = \"message bot\";\r\n const timestamp = Date.now();\r\n botMsg.innerHTML = `\r\n ${botAvatarHTML ? `<div class=\"message-avatar\">${botAvatarHTML}<div class=\"message-sender\">${config.botname}</div></div>` : ''}\r\n <div class=\"message-content\">\r\n <div class=\"message-text\" style=\"background-color: ${botMessageBg}; color: ${botMessageText};\">${marked.parse(data.response || data.text || \"[No response]\")}</div>\r\n <span class=\"message-timestamp\" data-timestamp=\"${timestamp}\">${formatRelativeTime(timestamp)}</span>\r\n </div>\r\n `;\r\n messagesDiv.appendChild(botMsg);\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n \r\n // Apply accent color to any links in the bot message\r\n applyAccentToLinks();\r\n \r\n // Save chat history\r\n saveChatToLocalStorage();\r\n \r\n // Increment bot message count and check for rating\r\n botMessageCount++;\r\n checkAndShowRating();\r\n\r\n if (config.mode === \"bubble\" && chatWindow.style.display === \"none\") {\r\n bubble.setAttribute(\"data-unread\", \"true\");\r\n }\r\n } catch (err) {\r\n showError();\r\n if (config.mode === \"bubble\" && chatWindow.style.display === \"none\") {\r\n bubble.setAttribute(\"data-unread\", \"true\");\r\n }\r\n }\r\n }\r\n\r\n // Send on Enter key or button click\r\n sendButton.addEventListener(\"click\", () => sendMessage());\r\n input.addEventListener(\"keydown\", (e) => {\r\n if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n sendMessage();\r\n }\r\n });\r\n\r\n let expanded = false;\r\n if (config.mode === \"bubble\" && expandBtn) {\r\n expandBtn.addEventListener(\"click\", () => {\r\n expanded = !expanded;\r\n if (expanded) {\r\n chatWindow.style.width = \"600px\";\r\n chatWindow.style.height = \"80vh\";\r\n expandIcon.textContent = \"⤡\";\r\n } else {\r\n chatWindow.style.width = \"400px\";\r\n chatWindow.style.height = \"595px\";\r\n expandIcon.textContent = \"⤢\";\r\n }\r\n });\r\n }\r\n\r\n function showGreeting() {\r\n // Check usage limit first\r\n const limitData = storageManager.getUsageLimitReached(chatbotId, visitorId);\r\n if (limitData) {\r\n showLimitWarning(limitData.limitReachedDate);\r\n return;\r\n }\r\n \r\n enableChatInput();\r\n \r\n // Remove any previous greeting messages\r\n messagesDiv.querySelectorAll('.message.greeting').forEach(el => el.remove());\r\n const greetMsg = config.greetingMessage;\r\n const greetingDiv = document.createElement(\"div\");\r\n greetingDiv.className = \"message bot greeting\";\r\n const timestamp = Date.now();\r\n greetingDiv.innerHTML = `\r\n ${botAvatarHTML ? `<div class=\"message-avatar\">${botAvatarHTML}<div class=\"message-sender\">${config.botname}</div></div>` : ''}\r\n <div class=\"message-content\">\r\n <div class=\"message-text\" style=\"background-color: ${botMessageBg}; color: ${botMessageText};\">${greetMsg}</div>\r\n <span class=\"message-timestamp\" data-timestamp=\"${timestamp}\">${formatRelativeTime(timestamp)}</span>\r\n </div>\r\n `;\r\n messagesDiv.appendChild(greetingDiv);\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n \r\n // Apply accent color to any links in greeting\r\n applyAccentToLinks();\r\n }\r\n\r\n // Restore chat history or show greeting\r\n function initializeChat() {\r\n // Check for usage limit first (but don't return early - allow history to load)\r\n let isLimitActive = false;\r\n if (visitorId) {\r\n const limitData = storageManager.getUsageLimitReached(chatbotId, visitorId);\r\n \r\n // If limitData exists, the limit is active (localStorageManager already checked expiry)\r\n if (limitData && limitData.limitReachedDate) {\r\n showLimitWarning(limitData.limitReachedDate);\r\n isLimitActive = true;\r\n }\r\n }\r\n \r\n // Try to restore chat history if session ID exists\r\n if (sessionId) {\r\n const history = storageManager.getChatHistory(chatbotId, sessionId) || [];\r\n history.forEach(msg => {\r\n const messageDiv = document.createElement('div');\r\n messageDiv.className = `message ${msg.type}${msg.isGreeting ? ' greeting' : ''}`;\r\n \r\n const avatarHTML = msg.type === 'user' ? userAvatarHTML : botAvatarHTML;\r\n const senderName = msg.type === 'user' ? config.username : config.botname;\r\n const messageBg = msg.type === 'user' ? userMessageBg : botMessageBg;\r\n const messageTextColor = msg.type === 'user' ? userMessageText : botMessageText;\r\n \r\n messageDiv.innerHTML = msg.type === 'user'\r\n ? `<div class=\"message-avatar\">${avatarHTML}<div class=\"message-sender\">${senderName}</div></div><div class=\"message-content\"><div class=\"message-text\" style=\"background-color: ${messageBg}; color: ${messageTextColor};\">${msg.text}</div><span class=\"message-timestamp\" data-timestamp=\"${msg.timestamp}\">${formatRelativeTime(msg.timestamp)}</span></div>`\r\n : `${avatarHTML ? `<div class=\"message-avatar\">${avatarHTML}<div class=\"message-sender\">${senderName}</div></div>` : ''}<div class=\"message-content\"><div class=\"message-text\" style=\"background-color: ${messageBg}; color: ${messageTextColor};\">${msg.text}</div><span class=\"message-timestamp\" data-timestamp=\"${msg.timestamp}\">${formatRelativeTime(msg.timestamp)}</span></div>`;\r\n messagesDiv.appendChild(messageDiv);\r\n });\r\n messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n applyAccentToLinks();\r\n return;\r\n }\r\n \r\n // No history found, show greeting\r\n showGreeting();\r\n }\r\n \r\n setTimeout(initializeChat, 100);\r\n\r\n input.addEventListener('input', function() {\r\n // Block input if disabled (e.g., limit reached)\r\n if (this.disabled) {\r\n this.value = '';\r\n return;\r\n }\r\n // Restrict to configured max characters\r\n if (this.value.length > config.inputCharLimit) {\r\n this.value = this.value.slice(0, config.inputCharLimit);\r\n return;\r\n }\r\n // If textarea is empty, reset to default size\r\n if (this.value === \"\") {\r\n this.rows = 1;\r\n this.style.height = \"32px\";\r\n this.style.overflowY = \"hidden\";\r\n return;\r\n }\r\n // Count the number of lines in the textarea\r\n const lines = this.value.split('\\n');\r\n // Set the number of rows, max 4\r\n this.rows = Math.min(lines.length, 4);\r\n // Calculate the max height for 4 rows (approximate line height: 32px)\r\n const maxHeight = 3 * 36; // 128px\r\n this.style.height = 'auto';\r\n this.style.height = Math.min(this.scrollHeight, maxHeight) + 'px';\r\n // Show scrollbar only if content exceeds maxHeight\r\n if (this.scrollHeight > maxHeight) {\r\n this.style.overflowY = 'auto';\r\n } else {\r\n this.style.overflowY = 'hidden';\r\n }\r\n });\r\n\r\n if (downloadBtn) {\r\n downloadBtn.addEventListener(\"click\", () => {\r\n // Close the menu dropdown\r\n menuDropdown.classList.remove(\"show\");\r\n \r\n // Generate transcript header\r\n const now = new Date();\r\n const dateStr = now.toLocaleDateString('en-US', { \r\n year: 'numeric', \r\n month: 'long', \r\n day: 'numeric' \r\n });\r\n const timeStr = now.toLocaleTimeString('en-US', { \r\n hour: '2-digit', \r\n minute: '2-digit' \r\n });\r\n \r\n const header = `Chat Transcript - ${config.botname}\\n` +\r\n `Website: ${window.location.href}\\n` +\r\n `Downloaded on: ${dateStr} at ${timeStr}\\n` +\r\n `${'='.repeat(60)}\\n\\n`;\r\n\r\n // Collect all messages with timestamps\r\n const messages = Array.from(messagesDiv.querySelectorAll('.message')).map(msg => {\r\n const isUser = msg.classList.contains('user');\r\n const sender = isUser ? config.username : config.botname;\r\n \r\n // Get the message text (excluding sender name and timestamp)\r\n const messageText = msg.querySelector('.message-text');\r\n const text = messageText ? (messageText.innerText || messageText.textContent) : '';\r\n \r\n // Get actual timestamp (not relative)\r\n const timestampEl = msg.querySelector('.message-timestamp');\r\n let actualTime = '';\r\n if (timestampEl) {\r\n const timestamp = parseInt(timestampEl.getAttribute('data-timestamp'));\r\n const msgDate = new Date(timestamp);\r\n actualTime = msgDate.toLocaleTimeString('en-US', { \r\n hour: '2-digit', \r\n minute: '2-digit',\r\n second: '2-digit'\r\n });\r\n }\r\n \r\n return `[${actualTime}] ${sender}:\\n${text}`;\r\n }).join('\\n\\n');\r\n\r\n const fullTranscript = header + messages;\r\n\r\n // Create a blob and trigger download\r\n const blob = new Blob([fullTranscript], { type: \"text/plain\" });\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = `${config.botname}_chat_${now.getTime()}.txt`;\r\n document.body.appendChild(a);\r\n a.click();\r\n setTimeout(() => {\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }, 100);\r\n });\r\n }\r\n\r\n \r\n },\r\n initFull: function(options) {\r\n let el = document.querySelector('aptolix-chatbot');\r\n if (!el) {\r\n return;\r\n }\r\n Object.entries(options).forEach(([key, value]) => {\r\n el.setAttribute(key, value);\r\n });\r\n }\r\n};\r\n\r\n// Custom element for section embedding\r\nclass AptolixChatbotElement extends HTMLElement {\r\n static get observedAttributes() {\r\n return [\r\n 'apihost', 'chatbotid', 'botname', 'widgeticon', 'companylogo', 'companylogourl',\r\n 'botavatar', 'botavatarurl', 'botaccentcolor', 'floatingwelcomemessage',\r\n 'floatingwelcomedelay', 'greetingmessage', 'allowdownloadtranscript',\r\n 'allowexpandchatwindow', 'allowfullpagechat', 'inputcharlimit', 'target'\r\n ];\r\n }\r\n\r\n connectedCallback() {\r\n this.tryInit();\r\n }\r\n\r\n attributeChangedCallback() {\r\n // Remove previous chat window if present\r\n const existingChatWindow = this.querySelector('#aptolix-chat-window');\r\n if (existingChatWindow) existingChatWindow.remove();\r\n // Re-initialize to update greeting and other attributes\r\n this._initialized = false;\r\n this.tryInit();\r\n }\r\n\r\n tryInit() {\r\n const apiHost = this.getAttribute('apihost');\r\n const chatbotId = this.getAttribute('chatbotid');\r\n if (!apiHost || !chatbotId) return;\r\n\r\n const botname = this.getAttribute('botname');\r\n const widgetIcon = this.getAttribute('widgeticon');\r\n const companyLogo = this.getAttribute('companylogo');\r\n const companyLogoUrl = this.getAttribute('companylogourl');\r\n const botAvatar = this.getAttribute('botavatar');\r\n const botavatarUrl = this.getAttribute('botavatarurl');\r\n const botaccentColor = this.getAttribute('botaccentcolor');\r\n const floatingWelcomeMessage = this.getAttribute('floatingwelcomemessage');\r\n const floatingWelcomeDelay = this.getAttribute('floatingwelcomedelay');\r\n const greetingMessage = this.getAttribute('greetingmessage');\r\n const allowDownloadTranscript = this.getAttribute('allowdownloadtranscript') === 'true';\r\n const allowExpandChatWindow = this.getAttribute('allowexpandchatwindow') === 'true';\r\n const allowFullPageChat = this.getAttribute('allowfullpagechat') === 'true';\r\n const inputCharLimit = parseInt(this.getAttribute('inputcharlimit')) || undefined;\r\n const targetAttr = this.getAttribute('target');\r\n \r\n let target = this;\r\n if (targetAttr) {\r\n const found = document.querySelector(targetAttr);\r\n if (found) target = found;\r\n }\r\n\r\n if (this._initialized) return;\r\n this._initialized = true;\r\n\r\n AptolixChatbot.init({\r\n apiHost,\r\n chatbotId,\r\n botname,\r\n widgetIcon,\r\n companyLogo,\r\n companyLogoUrl,\r\n botAvatar,\r\n botavatarUrl,\r\n botaccentColor,\r\n floatingWelcomeMessage,\r\n floatingWelcomeDelay,\r\n greetingMessage,\r\n allowDownloadTranscript,\r\n allowExpandChatWindow,\r\n allowFullPageChat,\r\n inputCharLimit,\r\n mode: \"section\",\r\n target\r\n });\r\n }\r\n}\r\ncustomElements.define('aptolix-chatbot', AptolixChatbotElement);\r\n\r\n// Export as default so consumers use Chatbot.init and Chatbot.initFull\r\nexport default AptolixChatbot;\r\n\r\n\r\n\r\n\r\n\r\n"],"names":["L","async","breaks","extensions","gfm","hooks","pedantic","renderer","silent","tokenizer","walkTokens","O","H","l","E","exec","h","e","t","source","n","replace","r","i","s","m","caret","getRegex","RegExp","codeRemoveIndent","outputLinkReplace","indentCodeCompensation","beginningSpace","endingHash","startingSpaceChar","endingSpaceChar","nonSpaceChar","newLineCharGlobal","tabCharGlobal","multipleSpaceGlobal","blankLine","doubleBlankLine","blockquoteStart","blockquoteSetextReplace","blockquoteSetextReplace2","listReplaceTabs","listReplaceNesting","listIsTask","listReplaceTask","anyLine","hrefBrackets","tableDelimiter","tableAlignChars","tableRowBlankLine","tableAlignRight","tableAlignCenter","tableAlignLeft","startATag","endATag","startPreScriptTag","endPreScriptTag","startAngleBracket","endAngleBracket","pedanticHrefTitle","unicodeAlphaNumeric","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","unescapeTest","percentDecode","findPipe","splitPipe","slashPipe","carriageReturn","spaceLine","notSpaceStart","endingNewline","listItemRegex","nextBulletRegex","Math","min","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","C","j","se","ie","Te","F","Q","ye","Pe","v","U","Se","oe","K","blockquote","code","def","fences","heading","hr","html","lheading","list","newline","paragraph","table","text","re","_e","Le","ae","D","W","le","Ee","ue","pe","qe","ve","ce","De","Ze","Ge","He","Ne","je","Fe","q","Qe","he","de","X","_backpedal","anyPunctuation","autolink","blockSkip","br","del","emStrongLDelim","emStrongRDelimAst","emStrongRDelimUnd","escape","link","nolink","punctuation","reflink","reflinkSearch","tag","url","Ke","N","We","I","normal","M","Xe","ke","w","test","J","encodeURI","V","o","a","u","split","trim","shift","length","at","pop","splice","push","z","charAt","slice","fe","href","title","other","state","inLink","type","raw","tokens","inlineTokens","y","options","rules","lexer","constructor","this","space","block","codeBlockStyle","match","map","join","Je","lang","inline","depth","p","c","f","top","blockTokens","k","x","g","T","substring","ordered","start","loose","items","Z","repeat","trimStart","search","ee","te","ne","me","A","G","Y","task","checked","trimEnd","filter","some","pre","toLowerCase","header","align","rows","inRawBlock","indexOf","ge","emStrong","lastIndex","index","codespan","inlineText","escaped","b","inlineQueue","links","Object","create","lex","lexInline","src","call","endsWith","startBlock","forEach","charCodeAt","console","error","Error","keys","includes","lastIndexOf","startInline","P","parser","parse","parseInline","listitem","checkbox","unshift","tablecell","tablerow","strong","em","image","textRenderer","S","R","renderers","$","static","Set","preprocess","postprocess","processAllTokens","provideLexer","provideParser","_","defaults","setOptions","parseMarkdown","Parser","Renderer","TextRenderer","Lexer","Tokenizer","Hooks","use","concat","childTokens","flat","name","apply","level","passThroughHooks","has","Promise","resolve","then","onError","prototype","toString","all","catch","message","reject","d","getDefaults","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","LocalStorageManager","config","_getState","chatbotId","key","stored","localStorage","getItem","JSON","_saveState","timestamp","Date","now","version","setItem","stringify","_isToday","today","storedDate","getFullYear","getMonth","getDate","_getTodayStart","setHours","getTime","saveConfig","data","getConfig","clearConfig","removeItem","hasConfig","saveVisitorId","visitorId","getVisitorId","clearVisitorId","hasVisitorId","saveSessionId","sessionId","getSessionId","clearSessionId","hasSessionId","saveChatHistory","messages","history","getChatHistory","clearChatHistory","hasChatHistory","setUsageLimitReached","limitReachedDate","usageLimitReached","getUsageLimitReached","limitDate","clearUsageLimitReached","hasUsageLimitReached","clearAll","defaultConfig","mode","botname","widgetIcon","companyLogoBlack","companyLogoWhite","botAvatar","userAvatar","username","botaccentColor","floatingWelcomeMessage","floatingWelcomeDelay","greetingMessage","allowDownloadTranscript","allowExpandChatWindow","allowFullPageChat","inputCharLimit","allowRating","ratingThreshold","ratingInterval","isValidWidgetIcon","iconValue","loadConfig","apiHost","storage","apiConfig","response","fetch","method","headers","ok","apiData","json","bot_name","widget_icon","companyLogo","company_logo","bot_avatar","user_avatar","accent_color","floating_welcome_message","floating_welcome_delay","greeting_message","download_transcript","expand_chat_window","full_page_chat","input_char_limit","allow_rating","rating_threshold","rating_interval","fetchConfigFromAPI","cachedConfig","AptolixChatbot","init","companyLogoUrl","botavatarUrl","target","undefined","isUrlPattern","str","canLoadImage","img","Image","timeout","setTimeout","onload","clearTimeout","onerror","isValidSvg","svgString","doc","DOMParser","parseFromString","querySelector","theme","primaryColor","hexToRgb","hex","cleanHex","result","parseInt","lightenColor","color","percent","rgb","round","padStart","darkenColor","max","addAlpha","opacity","isAccentLight","startsWith","Number","isLightColor","primary","isLight","background","button","border","userBackground","userText","botBackground","botText","window","shadow","input","placeholder","buttonBackground","buttonText","footer","bubble","icon","hint","closeButton","menu","hover","rating","star","utils","lighten","darken","generateColorTheme","userMessageBg","userMessageText","botMessageBg","botMessageText","linkColor","headerTextColor","headerButtonColor","sendButtonTextColor","windowBorderColor","windowBackgroundColor","inputBorderColor","headerBorderColor","footerTextColor","windowShadowColor","logoToValidate","validatedLogo","logoLoadFailed","avatarToValidate","validatedAvatar","avatarLoadFailed","modeClass","chatWindow","hintBubbleTimeout","hintBubble","id","backgroundColor","innerHTML","innerText","body","existingHintBubble","getElementById","remove","className","display","position","right","bottom","zIndex","hintTextSpan","textContent","hintCloseBtn","setAttribute","fontSize","cursor","padding","addEventListener","sessionStorage","classList","add","borderColor","boxShadow","targetEl","logoHTML","botAvatarHTML","userAvatarHTML","aptolixLink","encodeURIComponent","location","hostname","closeBtn","resetBtn","expandBtn","expandIcon","sendButton","messagesDiv","downloadBtn","menuBtn","menuDropdown","querySelectorAll","item","stopPropagation","toggle","contains","stars","getAttribute","idx","submitRating","starsContainer","formatRelativeTime","diff","floor","mins","hours","days","setInterval","span","applyAccentToLinks","msg","storageManager","botMessageCount","lastRatedAtMessageCount","isRatingVisible","saveChatToLocalStorage","Array","from","isUser","isGreeting","messageText","timestampEl","showLimitWarning","limitDateStr","timeRemaining","diffMs","diffMinutes","ceil","minutes","calculateRemainingTime","existingWarning","warningBanner","inputArea","parentNode","disabled","enableChatInput","hideRatingPrompt","showThankYou","poweredBy","ratingDiv","separator","originalContent","requestBody","visitor_id","session_id","checkAndShowRating","showRatingPrompt","sendMessage","isRetry","previousText","value","height","overflowY","userMsg","scrollTop","scrollHeight","typingMsg","res","botMsg","marked","err","errorMsg","retryBtn","showError","limitData","showGreeting","wasClosed","removeAttribute","event","preventDefault","expanded","el","greetMsg","greetingDiv","width","messageDiv","avatarHTML","senderName","messageBg","messageTextColor","lines","dateStr","toLocaleDateString","year","month","day","timeStr","toLocaleTimeString","hour","minute","sender","actualTime","second","blob","Blob","URL","createObjectURL","download","click","removeChild","revokeObjectURL","initFull","entries","AptolixChatbotElement","HTMLElement","observedAttributes","connectedCallback","tryInit","attributeChangedCallback","existingChatWindow","_initialized","targetAttr","found","customElements","define"],"mappings":"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"}
|