open-chat-studio-widget 0.4.8 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -20
- package/dist/cjs/{index-AhSI5tER.js → index-CC3Krx2K.js} +4 -2
- package/dist/cjs/index-CC3Krx2K.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/open-chat-studio-widget.cjs.entry.js +1116 -301
- package/dist/cjs/open-chat-studio-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/open-chat-studio-widget.cjs.js +2 -2
- package/dist/cjs/open-chat-studio-widget.entry.cjs.js.map +1 -1
- package/dist/collection/components/ocs-chat/{heroicons.js → icons.js} +23 -1
- package/dist/collection/components/ocs-chat/icons.js.map +1 -0
- package/dist/collection/components/ocs-chat/ocs-chat.css +596 -1983
- package/dist/collection/components/ocs-chat/ocs-chat.js +480 -273
- package/dist/collection/components/ocs-chat/ocs-chat.js.map +1 -1
- package/dist/collection/services/chat-session-service.js +145 -0
- package/dist/collection/services/chat-session-service.js.map +1 -0
- package/dist/collection/services/file-attachment-manager.js +125 -0
- package/dist/collection/services/file-attachment-manager.js.map +1 -0
- package/dist/collection/utils/cookies.js +5 -12
- package/dist/collection/utils/cookies.js.map +1 -1
- package/dist/collection/utils/markdown.js +1 -1
- package/dist/collection/utils/markdown.js.map +1 -1
- package/dist/collection/utils/translations.js +99 -0
- package/dist/collection/utils/translations.js.map +1 -0
- package/dist/components/open-chat-studio-widget.js +1122 -302
- package/dist/components/open-chat-studio-widget.js.map +1 -1
- package/dist/esm/{index-DkJ7OJTS.js → index-BF7CYZiN.js} +4 -3
- package/dist/esm/index-BF7CYZiN.js.map +1 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/open-chat-studio-widget.entry.js +1116 -301
- package/dist/esm/open-chat-studio-widget.entry.js.map +1 -1
- package/dist/esm/open-chat-studio-widget.js +3 -3
- package/dist/open-chat-studio-widget/open-chat-studio-widget.entry.esm.js.map +1 -1
- package/dist/open-chat-studio-widget/open-chat-studio-widget.esm.js +1 -1
- package/dist/open-chat-studio-widget/p-400b1f47.entry.js +4 -0
- package/dist/open-chat-studio-widget/p-400b1f47.entry.js.map +1 -0
- package/dist/open-chat-studio-widget/p-BF7CYZiN.js +3 -0
- package/dist/open-chat-studio-widget/p-BF7CYZiN.js.map +1 -0
- package/dist/types/components/ocs-chat/{heroicons.d.ts → icons.d.ts} +19 -0
- package/dist/types/components/ocs-chat/ocs-chat.d.ts +52 -36
- package/dist/types/components.d.ts +22 -8
- package/dist/types/services/chat-session-service.d.ts +78 -0
- package/dist/types/services/file-attachment-manager.d.ts +40 -0
- package/dist/types/utils/translations.d.ts +23 -0
- package/package.json +8 -3
- package/dist/cjs/index-AhSI5tER.js.map +0 -1
- package/dist/collection/components/ocs-chat/heroicons.js.map +0 -1
- package/dist/esm/index-DkJ7OJTS.js.map +0 -1
- package/dist/open-chat-studio-widget/p-DkJ7OJTS.js +0 -3
- package/dist/open-chat-studio-widget/p-DkJ7OJTS.js.map +0 -1
- package/dist/open-chat-studio-widget/p-bde68fbd.entry.js +0 -4
- package/dist/open-chat-studio-widget/p-bde68fbd.entry.js.map +0 -1
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{h as t,r as e,H as n,g as o}from"./p-DkJ7OJTS.js";const r=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18 18 6M6 6l12 12"}));const s=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"currentColor",viewBox:"0 0 24 24"},t("circle",{cx:"8",cy:"6",r:"1.5"}),t("circle",{cx:"8",cy:"12",r:"1.5"}),t("circle",{cx:"8",cy:"18",r:"1.5"}),t("circle",{cx:"16",cy:"6",r:"1.5"}),t("circle",{cx:"16",cy:"12",r:"1.5"}),t("circle",{cx:"16",cy:"18",r:"1.5"}));const i=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9v6m3-3H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"}));const a=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15"}));const l=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 9V4.5M9 9H4.5M9 9 3.75 3.75M15 9h4.5M15 9V4.5M15 9l5.25-5.25M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 15h4.5M15 15v4.5m0-4.5 5.25 5.25"}));const c=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m18.375 12.739-7.693 7.693a4.5 4.5 0 0 1-6.364-6.364l10.94-10.94A3 3 0 1 1 19.5 7.372L8.552 18.32m.009-.01-.01.01m5.699-9.941-7.81 7.81a1.5 1.5 0 0 0 2.112 2.13"}));const h=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M10.125 2.25h-4.5c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125v-9M10.125 2.25h.375a9 9 0 0 1 9 9v.375M10.125 2.25A3.375 3.375 0 0 1 13.5 5.625v1.5c0 .621.504 1.125 1.125 1.125h1.5a3.375 3.375 0 0 1 3.375 3.375M9 15l2.25 2.25L15 12"}));const d=()=>t("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18 18 6M6 6l12 12"}));function p(){return{async:false,baseUrl:null,breaks:false,extensions:null,gfm:true,headerIds:true,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:true,pedantic:false,renderer:null,sanitize:false,sanitizer:null,silent:false,smartypants:false,tokenizer:null,walkTokens:null,xhtml:false}}let f=p();function u(t){f=t}const m=/[&<>"']/;const w=new RegExp(m.source,"g");const g=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/;const b=new RegExp(g.source,"g");const v={"&":"&","<":"<",">":">",'"':""","'":"'"};const x=t=>v[t];function k(t,e){if(e){if(m.test(t)){return t.replace(w,x)}}else{if(g.test(t)){return t.replace(b,x)}}return t}const y=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function z(t){return t.replace(y,((t,e)=>{e=e.toLowerCase();if(e==="colon")return":";if(e.charAt(0)==="#"){return e.charAt(1)==="x"?String.fromCharCode(parseInt(e.substring(2),16)):String.fromCharCode(+e.substring(1))}return""}))}const S=/(^|[^\[])\^/g;function _(t,e){t=typeof t==="string"?t:t.source;e=e||"";const n={replace:(e,o)=>{o=o.source||o;o=o.replace(S,"$1");t=t.replace(e,o);return n},getRegex:()=>new RegExp(t,e)};return n}const $=/[^\w:]/g;const A=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function C(t,e,n){if(t){let t;try{t=decodeURIComponent(z(n)).replace($,"").toLowerCase()}catch(t){return null}if(t.indexOf("javascript:")===0||t.indexOf("vbscript:")===0||t.indexOf("data:")===0){return null}}if(e&&!A.test(n)){n=q(e,n)}try{n=encodeURI(n).replace(/%25/g,"%")}catch(t){return null}return n}const T={};const E=/^[^:]+:\/*[^/]*$/;const M=/^([^:]+:)[\s\S]*$/;const R=/^([^:]+:\/*[^/]*)[\s\S]*$/;function q(t,e){if(!T[" "+t]){if(E.test(t)){T[" "+t]=t+"/"}else{T[" "+t]=D(t,"/",true)}}t=T[" "+t];const n=t.indexOf(":")===-1;if(e.substring(0,2)==="//"){if(n){return e}return t.replace(M,"$1")+e}else if(e.charAt(0)==="/"){if(n){return e}return t.replace(R,"$1")+e}else{return t+e}}const I={exec:function t(){}};function F(t,e){const n=t.replace(/\|/g,((t,e,n)=>{let o=false,r=e;while(--r>=0&&n[r]==="\\")o=!o;if(o){return"|"}else{return" |"}})),o=n.split(/ \|/);let r=0;if(!o[0].trim()){o.shift()}if(o.length>0&&!o[o.length-1].trim()){o.pop()}if(o.length>e){o.splice(e)}else{while(o.length<e)o.push("")}for(;r<o.length;r++){o[r]=o[r].trim().replace(/\\\|/g,"|")}return o}function D(t,e,n){const o=t.length;if(o===0){return""}let r=0;while(r<o){const s=t.charAt(o-r-1);if(s===e&&!n){r++}else if(s!==e&&n){r++}else{break}}return t.slice(0,o-r)}function O(t,e){if(t.indexOf(e[1])===-1){return-1}const n=t.length;let o=0,r=0;for(;r<n;r++){if(t[r]==="\\"){r++}else if(t[r]===e[0]){o++}else if(t[r]===e[1]){o--;if(o<0){return r}}}return-1}function L(t){if(t&&t.sanitize&&!t.silent){console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")}}function j(t,e){if(e<1){return""}let n="";while(e>1){if(e&1){n+=t}e>>=1;t+=t}return n+t}function P(t,e,n,o){const r=e.href;const s=e.title?k(e.title):null;const i=t[1].replace(/\\([\[\]])/g,"$1");if(t[0].charAt(0)!=="!"){o.state.inLink=true;const t={type:"link",raw:n,href:r,title:s,text:i,tokens:o.inlineTokens(i)};o.state.inLink=false;return t}return{type:"image",raw:n,href:r,title:s,text:k(i)}}function U(t,e){const n=t.match(/^(\s+)(?:```)/);if(n===null){return e}const o=n[1];return e.split("\n").map((t=>{const e=t.match(/^\s+/);if(e===null){return t}const[n]=e;if(n.length>=o.length){return t.slice(o.length)}return t})).join("\n")}class B{constructor(t){this.options=t||f}space(t){const e=this.rules.block.newline.exec(t);if(e&&e[0].length>0){return{type:"space",raw:e[0]}}}code(t){const e=this.rules.block.code.exec(t);if(e){const t=e[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:!this.options.pedantic?D(t,"\n"):t}}}fences(t){const e=this.rules.block.fences.exec(t);if(e){const t=e[0];const n=U(t,e[3]||"");return{type:"code",raw:t,lang:e[2]?e[2].trim().replace(this.rules.inline._escapes,"$1"):e[2],text:n}}}heading(t){const e=this.rules.block.heading.exec(t);if(e){let t=e[2].trim();if(/#$/.test(t)){const e=D(t,"#");if(this.options.pedantic){t=e.trim()}else if(!e||/ $/.test(e)){t=e.trim()}}return{type:"heading",raw:e[0],depth:e[1].length,text:t,tokens:this.lexer.inline(t)}}}hr(t){const e=this.rules.block.hr.exec(t);if(e){return{type:"hr",raw:e[0]}}}blockquote(t){const e=this.rules.block.blockquote.exec(t);if(e){const t=e[0].replace(/^ *>[ \t]?/gm,"");const n=this.lexer.state.top;this.lexer.state.top=true;const o=this.lexer.blockTokens(t);this.lexer.state.top=n;return{type:"blockquote",raw:e[0],tokens:o,text:t}}}list(t){let e=this.rules.block.list.exec(t);if(e){let n,o,r,s,i,a,l,c,h,d,p,f;let u=e[1].trim();const m=u.length>1;const w={type:"list",raw:"",ordered:m,start:m?+u.slice(0,-1):"",loose:false,items:[]};u=m?`\\d{1,9}\\${u.slice(-1)}`:`\\${u}`;if(this.options.pedantic){u=m?u:"[*+-]"}const g=new RegExp(`^( {0,3}${u})((?:[\t ][^\\n]*)?(?:\\n|$))`);while(t){f=false;if(!(e=g.exec(t))){break}if(this.rules.block.hr.test(t)){break}n=e[0];t=t.substring(n.length);c=e[2].split("\n",1)[0].replace(/^\t+/,(t=>" ".repeat(3*t.length)));h=t.split("\n",1)[0];if(this.options.pedantic){s=2;p=c.trimLeft()}else{s=e[2].search(/[^ ]/);s=s>4?1:s;p=c.slice(s);s+=e[1].length}a=false;if(!c&&/^ *$/.test(h)){n+=h+"\n";t=t.substring(h.length+1);f=true}if(!f){const e=new RegExp(`^ {0,${Math.min(3,s-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`);const o=new RegExp(`^ {0,${Math.min(3,s-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`);const r=new RegExp(`^ {0,${Math.min(3,s-1)}}(?:\`\`\`|~~~)`);const i=new RegExp(`^ {0,${Math.min(3,s-1)}}#`);while(t){d=t.split("\n",1)[0];h=d;if(this.options.pedantic){h=h.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")}if(r.test(h)){break}if(i.test(h)){break}if(e.test(h)){break}if(o.test(t)){break}if(h.search(/[^ ]/)>=s||!h.trim()){p+="\n"+h.slice(s)}else{if(a){break}if(c.search(/[^ ]/)>=4){break}if(r.test(c)){break}if(i.test(c)){break}if(o.test(c)){break}p+="\n"+h}if(!a&&!h.trim()){a=true}n+=d+"\n";t=t.substring(d.length+1);c=h.slice(s)}}if(!w.loose){if(l){w.loose=true}else if(/\n *\n *$/.test(n)){l=true}}if(this.options.gfm){o=/^\[[ xX]\] /.exec(p);if(o){r=o[0]!=="[ ] ";p=p.replace(/^\[[ xX]\] +/,"")}}w.items.push({type:"list_item",raw:n,task:!!o,checked:r,loose:false,text:p});w.raw+=n}w.items[w.items.length-1].raw=n.trimRight();w.items[w.items.length-1].text=p.trimRight();w.raw=w.raw.trimRight();const b=w.items.length;for(i=0;i<b;i++){this.lexer.state.top=false;w.items[i].tokens=this.lexer.blockTokens(w.items[i].text,[]);if(!w.loose){const t=w.items[i].tokens.filter((t=>t.type==="space"));const e=t.length>0&&t.some((t=>/\n.*\n/.test(t.raw)));w.loose=e}}if(w.loose){for(i=0;i<b;i++){w.items[i].loose=true}}return w}}html(t){const e=this.rules.block.html.exec(t);if(e){const t={type:"html",raw:e[0],pre:!this.options.sanitizer&&(e[1]==="pre"||e[1]==="script"||e[1]==="style"),text:e[0]};if(this.options.sanitize){const n=this.options.sanitizer?this.options.sanitizer(e[0]):k(e[0]);t.type="paragraph";t.text=n;t.tokens=this.lexer.inline(n)}return t}}def(t){const e=this.rules.block.def.exec(t);if(e){const t=e[1].toLowerCase().replace(/\s+/g," ");const n=e[2]?e[2].replace(/^<(.*)>$/,"$1").replace(this.rules.inline._escapes,"$1"):"";const o=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline._escapes,"$1"):e[3];return{type:"def",tag:t,raw:e[0],href:n,title:o}}}table(t){const e=this.rules.block.table.exec(t);if(e){const t={type:"table",header:F(e[1]).map((t=>({text:t}))),align:e[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:e[3]&&e[3].trim()?e[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(t.header.length===t.align.length){t.raw=e[0];let n=t.align.length;let o,r,s,i;for(o=0;o<n;o++){if(/^ *-+: *$/.test(t.align[o])){t.align[o]="right"}else if(/^ *:-+: *$/.test(t.align[o])){t.align[o]="center"}else if(/^ *:-+ *$/.test(t.align[o])){t.align[o]="left"}else{t.align[o]=null}}n=t.rows.length;for(o=0;o<n;o++){t.rows[o]=F(t.rows[o],t.header.length).map((t=>({text:t})))}n=t.header.length;for(r=0;r<n;r++){t.header[r].tokens=this.lexer.inline(t.header[r].text)}n=t.rows.length;for(r=0;r<n;r++){i=t.rows[r];for(s=0;s<i.length;s++){i[s].tokens=this.lexer.inline(i[s].text)}}return t}}}lheading(t){const e=this.rules.block.lheading.exec(t);if(e){return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}}paragraph(t){const e=this.rules.block.paragraph.exec(t);if(e){const t=e[1].charAt(e[1].length-1)==="\n"?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:t,tokens:this.lexer.inline(t)}}}text(t){const e=this.rules.block.text.exec(t);if(e){return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}}escape(t){const e=this.rules.inline.escape.exec(t);if(e){return{type:"escape",raw:e[0],text:k(e[1])}}}tag(t){const e=this.rules.inline.tag.exec(t);if(e){if(!this.lexer.state.inLink&&/^<a /i.test(e[0])){this.lexer.state.inLink=true}else if(this.lexer.state.inLink&&/^<\/a>/i.test(e[0])){this.lexer.state.inLink=false}if(!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(e[0])){this.lexer.state.inRawBlock=true}else if(this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(e[0])){this.lexer.state.inRawBlock=false}return{type:this.options.sanitize?"text":"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):k(e[0]):e[0]}}}link(t){const e=this.rules.inline.link.exec(t);if(e){const t=e[2].trim();if(!this.options.pedantic&&/^</.test(t)){if(!/>$/.test(t)){return}const e=D(t.slice(0,-1),"\\");if((t.length-e.length)%2===0){return}}else{const t=O(e[2],"()");if(t>-1){const n=e[0].indexOf("!")===0?5:4;const o=n+e[1].length+t;e[2]=e[2].substring(0,t);e[0]=e[0].substring(0,o).trim();e[3]=""}}let n=e[2];let o="";if(this.options.pedantic){const t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);if(t){n=t[1];o=t[3]}}else{o=e[3]?e[3].slice(1,-1):""}n=n.trim();if(/^</.test(n)){if(this.options.pedantic&&!/>$/.test(t)){n=n.slice(1)}else{n=n.slice(1,-1)}}return P(e,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:o?o.replace(this.rules.inline._escapes,"$1"):o},e[0],this.lexer)}}reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){let t=(n[2]||n[1]).replace(/\s+/g," ");t=e[t.toLowerCase()];if(!t){const t=n[0].charAt(0);return{type:"text",raw:t,text:t}}return P(n,t,n[0],this.lexer)}}emStrong(t,e,n=""){let o=this.rules.inline.emStrong.lDelim.exec(t);if(!o)return;if(o[3]&&n.match(/[\p{L}\p{N}]/u))return;const r=o[1]||o[2]||"";if(!r||r&&(n===""||this.rules.inline.punctuation.exec(n))){const n=o[0].length-1;let r,s,i=n,a=0;const l=o[0][0]==="*"?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;l.lastIndex=0;e=e.slice(-1*t.length+n);while((o=l.exec(e))!=null){r=o[1]||o[2]||o[3]||o[4]||o[5]||o[6];if(!r)continue;s=r.length;if(o[3]||o[4]){i+=s;continue}else if(o[5]||o[6]){if(n%3&&!((n+s)%3)){a+=s;continue}}i-=s;if(i>0)continue;s=Math.min(s,s+i+a);const e=t.slice(0,n+o.index+(o[0].length-r.length)+s);if(Math.min(n,s)%2){const t=e.slice(1,-1);return{type:"em",raw:e,text:t,tokens:this.lexer.inlineTokens(t)}}const l=e.slice(2,-2);return{type:"strong",raw:e,text:l,tokens:this.lexer.inlineTokens(l)}}}}codespan(t){const e=this.rules.inline.code.exec(t);if(e){let t=e[2].replace(/\n/g," ");const n=/[^ ]/.test(t);const o=/^ /.test(t)&&/ $/.test(t);if(n&&o){t=t.substring(1,t.length-1)}t=k(t,true);return{type:"codespan",raw:e[0],text:t}}}br(t){const e=this.rules.inline.br.exec(t);if(e){return{type:"br",raw:e[0]}}}del(t){const e=this.rules.inline.del.exec(t);if(e){return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}}autolink(t,e){const n=this.rules.inline.autolink.exec(t);if(n){let t,o;if(n[2]==="@"){t=k(this.options.mangle?e(n[1]):n[1]);o="mailto:"+t}else{t=k(n[1]);o=t}return{type:"link",raw:n[0],text:t,href:o,tokens:[{type:"text",raw:t,text:t}]}}}url(t,e){let n;if(n=this.rules.inline.url.exec(t)){let t,o;if(n[2]==="@"){t=k(this.options.mangle?e(n[0]):n[0]);o="mailto:"+t}else{let e;do{e=n[0];n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(e!==n[0]);t=k(n[0]);if(n[1]==="www."){o="http://"+n[0]}else{o=n[0]}}return{type:"link",raw:n[0],text:t,href:o,tokens:[{type:"text",raw:t,text:t}]}}}inlineText(t,e){const n=this.rules.inline.text.exec(t);if(n){let t;if(this.lexer.state.inRawBlock){t=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(n[0]):k(n[0]):n[0]}else{t=k(this.options.smartypants?e(n[0]):n[0])}return{type:"text",raw:n[0],text:t}}}}const N={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:"+"<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)"+"|comment[^\\n]*(\\n+|$)"+"|<\\?[\\s\\S]*?(?:\\?>\\n*|$)"+"|<![A-Z][\\s\\S]*?(?:>\\n*|$)"+"|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)"+"|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)"+"|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)"+"|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)"+")",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:I,lheading:/^((?:.|\n(?!\n))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/};N._label=/(?!\s*\])(?:\\.|[^\[\]\\])+/;N._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;N.def=_(N.def).replace("label",N._label).replace("title",N._title).getRegex();N.bullet=/(?:[*+-]|\d{1,9}[.)])/;N.listItemStart=_(/^( *)(bull) */).replace("bull",N.bullet).getRegex();N.list=_(N.list).replace(/bull/g,N.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+N.def.source+")").getRegex();N._tag="address|article|aside|base|basefont|blockquote|body|caption"+"|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption"+"|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe"+"|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option"+"|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr"+"|track|ul";N._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/;N.html=_(N.html,"i").replace("comment",N._comment).replace("tag",N._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();N.paragraph=_(N._paragraph).replace("hr",N.hr).replace("heading"," {0,3}#{1,6} ").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",N._tag).getRegex();N.blockquote=_(N.blockquote).replace("paragraph",N.paragraph).getRegex();N.normal={...N};N.gfm={...N.normal,table:"^ *([^\\n ].*\\|.*)\\n"+" {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?"+"(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"};N.gfm.table=_(N.gfm.table).replace("hr",N.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",N._tag).getRegex();N.gfm.paragraph=_(N._paragraph).replace("hr",N.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",N.gfm.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",N._tag).getRegex();N.pedantic={...N.normal,html:_("^ *(?:comment *(?:\\n|\\s*$)"+"|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)"+"|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",N._comment).replace(/tag/g,"(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub"+"|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)"+"\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:I,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:_(N.normal._paragraph).replace("hr",N.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",N.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()};const H={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:I,tag:"^comment"+"|^</[a-zA-Z][\\w:-]*\\s*>"+"|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>"+"|^<\\?[\\s\\S]*?\\?>"+"|^<![a-zA-Z]+\\s[\\s\\S]*?>"+"|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^(?:[^_*\\]|\\.)*?\_\_(?:[^_*\\]|\\.)*?\*(?:[^_*\\]|\\.)*?(?=\_\_)|(?:[^*\\]|\\.)+(?=[^*])|[punct_](\*+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|(?:[^punct*_\s\\]|\\.)(\*+)(?=[^punct*_\s])/,rDelimUnd:/^(?:[^_*\\]|\\.)*?\*\*(?:[^_*\\]|\\.)*?\_(?:[^_*\\]|\\.)*?(?=\*\*)|(?:[^_\\]|\\.)+(?=[^_])|[punct*](\_+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:I,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/};H._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~";H.punctuation=_(H.punctuation).replace(/punctuation/g,H._punctuation).getRegex();H.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;H.escapedEmSt=/(?:^|[^\\])(?:\\\\)*\\[*_]/g;H._comment=_(N._comment).replace("(?:--\x3e|$)","--\x3e").getRegex();H.emStrong.lDelim=_(H.emStrong.lDelim).replace(/punct/g,H._punctuation).getRegex();H.emStrong.rDelimAst=_(H.emStrong.rDelimAst,"g").replace(/punct/g,H._punctuation).getRegex();H.emStrong.rDelimUnd=_(H.emStrong.rDelimUnd,"g").replace(/punct/g,H._punctuation).getRegex();H._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;H._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;H._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])?)+(?![-_])/;H.autolink=_(H.autolink).replace("scheme",H._scheme).replace("email",H._email).getRegex();H._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;H.tag=_(H.tag).replace("comment",H._comment).replace("attribute",H._attribute).getRegex();H._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;H._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;H._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;H.link=_(H.link).replace("label",H._label).replace("href",H._href).replace("title",H._title).getRegex();H.reflink=_(H.reflink).replace("label",H._label).replace("ref",N._label).getRegex();H.nolink=_(H.nolink).replace("ref",N._label).getRegex();H.reflinkSearch=_(H.reflinkSearch,"g").replace("reflink",H.reflink).replace("nolink",H.nolink).getRegex();H.normal={...H};H.pedantic={...H.normal,strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:_(/^!?\[(label)\]\((.*?)\)/).replace("label",H._label).getRegex(),reflink:_(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",H._label).getRegex()};H.gfm={...H.normal,escape:_(H.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/};H.gfm.url=_(H.gfm.url,"i").replace("email",H.gfm._extended_email).getRegex();H.breaks={...H.gfm,br:_(H.br).replace("{2,}","*").getRegex(),text:_(H.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()};function X(t){return t.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function Z(t){let e="",n,o;const r=t.length;for(n=0;n<r;n++){o=t.charCodeAt(n);if(Math.random()>.5){o="x"+o.toString(16)}e+="&#"+o+";"}return e}class W{constructor(t){this.tokens=[];this.tokens.links=Object.create(null);this.options=t||f;this.options.tokenizer=this.options.tokenizer||new B;this.tokenizer=this.options.tokenizer;this.tokenizer.options=this.options;this.tokenizer.lexer=this;this.inlineQueue=[];this.state={inLink:false,inRawBlock:false,top:true};const e={block:N.normal,inline:H.normal};if(this.options.pedantic){e.block=N.pedantic;e.inline=H.pedantic}else if(this.options.gfm){e.block=N.gfm;if(this.options.breaks){e.inline=H.breaks}else{e.inline=H.gfm}}this.tokenizer.rules=e}static get rules(){return{block:N,inline:H}}static lex(t,e){const n=new W(e);return n.lex(t)}static lexInline(t,e){const n=new W(e);return n.inlineTokens(t)}lex(t){t=t.replace(/\r\n|\r/g,"\n");this.blockTokens(t,this.tokens);let e;while(e=this.inlineQueue.shift()){this.inlineTokens(e.src,e.tokens)}return this.tokens}blockTokens(t,e=[]){if(this.options.pedantic){t=t.replace(/\t/g," ").replace(/^ +$/gm,"")}else{t=t.replace(/^( *)(\t+)/gm,((t,e,n)=>e+" ".repeat(n.length)))}let n,o,r,s;while(t){if(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((o=>{if(n=o.call({lexer:this},t,e)){t=t.substring(n.raw.length);e.push(n);return true}return false}))){continue}if(n=this.tokenizer.space(t)){t=t.substring(n.raw.length);if(n.raw.length===1&&e.length>0){e[e.length-1].raw+="\n"}else{e.push(n)}continue}if(n=this.tokenizer.code(t)){t=t.substring(n.raw.length);o=e[e.length-1];if(o&&(o.type==="paragraph"||o.type==="text")){o.raw+="\n"+n.raw;o.text+="\n"+n.text;this.inlineQueue[this.inlineQueue.length-1].src=o.text}else{e.push(n)}continue}if(n=this.tokenizer.fences(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.heading(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.hr(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.blockquote(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.list(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.html(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.def(t)){t=t.substring(n.raw.length);o=e[e.length-1];if(o&&(o.type==="paragraph"||o.type==="text")){o.raw+="\n"+n.raw;o.text+="\n"+n.raw;this.inlineQueue[this.inlineQueue.length-1].src=o.text}else if(!this.tokens.links[n.tag]){this.tokens.links[n.tag]={href:n.href,title:n.title}}continue}if(n=this.tokenizer.table(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.lheading(t)){t=t.substring(n.raw.length);e.push(n);continue}r=t;if(this.options.extensions&&this.options.extensions.startBlock){let e=Infinity;const n=t.slice(1);let o;this.options.extensions.startBlock.forEach((function(t){o=t.call({lexer:this},n);if(typeof o==="number"&&o>=0){e=Math.min(e,o)}}));if(e<Infinity&&e>=0){r=t.substring(0,e+1)}}if(this.state.top&&(n=this.tokenizer.paragraph(r))){o=e[e.length-1];if(s&&o.type==="paragraph"){o.raw+="\n"+n.raw;o.text+="\n"+n.text;this.inlineQueue.pop();this.inlineQueue[this.inlineQueue.length-1].src=o.text}else{e.push(n)}s=r.length!==t.length;t=t.substring(n.raw.length);continue}if(n=this.tokenizer.text(t)){t=t.substring(n.raw.length);o=e[e.length-1];if(o&&o.type==="text"){o.raw+="\n"+n.raw;o.text+="\n"+n.text;this.inlineQueue.pop();this.inlineQueue[this.inlineQueue.length-1].src=o.text}else{e.push(n)}continue}if(t){const e="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(e);break}else{throw new Error(e)}}}this.state.top=true;return e}inline(t,e=[]){this.inlineQueue.push({src:t,tokens:e});return e}inlineTokens(t,e=[]){let n,o,r;let s=t;let i;let a,l;if(this.tokens.links){const t=Object.keys(this.tokens.links);if(t.length>0){while((i=this.tokenizer.rules.inline.reflinkSearch.exec(s))!=null){if(t.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))){s=s.slice(0,i.index)+"["+j("a",i[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex)}}}}while((i=this.tokenizer.rules.inline.blockSkip.exec(s))!=null){s=s.slice(0,i.index)+"["+j("a",i[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex)}while((i=this.tokenizer.rules.inline.escapedEmSt.exec(s))!=null){s=s.slice(0,i.index+i[0].length-2)+"++"+s.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);this.tokenizer.rules.inline.escapedEmSt.lastIndex--}while(t){if(!a){l=""}a=false;if(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((o=>{if(n=o.call({lexer:this},t,e)){t=t.substring(n.raw.length);e.push(n);return true}return false}))){continue}if(n=this.tokenizer.escape(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.tag(t)){t=t.substring(n.raw.length);o=e[e.length-1];if(o&&n.type==="text"&&o.type==="text"){o.raw+=n.raw;o.text+=n.text}else{e.push(n)}continue}if(n=this.tokenizer.link(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(n.raw.length);o=e[e.length-1];if(o&&n.type==="text"&&o.type==="text"){o.raw+=n.raw;o.text+=n.text}else{e.push(n)}continue}if(n=this.tokenizer.emStrong(t,s,l)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.codespan(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.br(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.del(t)){t=t.substring(n.raw.length);e.push(n);continue}if(n=this.tokenizer.autolink(t,Z)){t=t.substring(n.raw.length);e.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(t,Z))){t=t.substring(n.raw.length);e.push(n);continue}r=t;if(this.options.extensions&&this.options.extensions.startInline){let e=Infinity;const n=t.slice(1);let o;this.options.extensions.startInline.forEach((function(t){o=t.call({lexer:this},n);if(typeof o==="number"&&o>=0){e=Math.min(e,o)}}));if(e<Infinity&&e>=0){r=t.substring(0,e+1)}}if(n=this.tokenizer.inlineText(r,X)){t=t.substring(n.raw.length);if(n.raw.slice(-1)!=="_"){l=n.raw.slice(-1)}a=true;o=e[e.length-1];if(o&&o.type==="text"){o.raw+=n.raw;o.text+=n.text}else{e.push(n)}continue}if(t){const e="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(e);break}else{throw new Error(e)}}}return e}}class Y{constructor(t){this.options=t||f}code(t,e,n){const o=(e||"").match(/\S*/)[0];if(this.options.highlight){const e=this.options.highlight(t,o);if(e!=null&&e!==t){n=true;t=e}}t=t.replace(/\n$/,"")+"\n";if(!o){return"<pre><code>"+(n?t:k(t,true))+"</code></pre>\n"}return'<pre><code class="'+this.options.langPrefix+k(o)+'">'+(n?t:k(t,true))+"</code></pre>\n"}blockquote(t){return`<blockquote>\n${t}</blockquote>\n`}html(t){return t}heading(t,e,n,o){if(this.options.headerIds){const r=this.options.headerPrefix+o.slug(n);return`<h${e} id="${r}">${t}</h${e}>\n`}return`<h${e}>${t}</h${e}>\n`}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(t,e,n){const o=e?"ol":"ul",r=e&&n!==1?' start="'+n+'"':"";return"<"+o+r+">\n"+t+"</"+o+">\n"}listitem(t){return`<li>${t}</li>\n`}checkbox(t){return"<input "+(t?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(t){return`<p>${t}</p>\n`}table(t,e){if(e)e=`<tbody>${e}</tbody>`;return"<table>\n"+"<thead>\n"+t+"</thead>\n"+e+"</table>\n"}tablerow(t){return`<tr>\n${t}</tr>\n`}tablecell(t,e){const n=e.header?"th":"td";const o=e.align?`<${n} align="${e.align}">`:`<${n}>`;return o+t+`</${n}>\n`}strong(t){return`<strong>${t}</strong>`}em(t){return`<em>${t}</em>`}codespan(t){return`<code>${t}</code>`}br(){return this.options.xhtml?"<br/>":"<br>"}del(t){return`<del>${t}</del>`}link(t,e,n){t=C(this.options.sanitize,this.options.baseUrl,t);if(t===null){return n}let o='<a href="'+t+'"';if(e){o+=' title="'+e+'"'}o+=">"+n+"</a>";return o}image(t,e,n){t=C(this.options.sanitize,this.options.baseUrl,t);if(t===null){return n}let o=`<img src="${t}" alt="${n}"`;if(e){o+=` title="${e}"`}o+=this.options.xhtml?"/>":">";return o}text(t){return t}}class G{strong(t){return t}em(t){return t}codespan(t){return t}del(t){return t}html(t){return t}text(t){return t}link(t,e,n){return""+n}image(t,e,n){return""+n}br(){return""}}class J{constructor(){this.seen={}}serialize(t){return t.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(t,e){let n=t;let o=0;if(this.seen.hasOwnProperty(n)){o=this.seen[t];do{o++;n=t+"-"+o}while(this.seen.hasOwnProperty(n))}if(!e){this.seen[t]=o;this.seen[n]=0}return n}slug(t,e={}){const n=this.serialize(t);return this.getNextSafeSlug(n,e.dryrun)}}class K{constructor(t){this.options=t||f;this.options.renderer=this.options.renderer||new Y;this.renderer=this.options.renderer;this.renderer.options=this.options;this.textRenderer=new G;this.slugger=new J}static parse(t,e){const n=new K(e);return n.parse(t)}static parseInline(t,e){const n=new K(e);return n.parseInline(t)}parse(t,e=true){let n="",o,r,s,i,a,l,c,h,d,p,f,u,m,w,g,b,v,x,k;const y=t.length;for(o=0;o<y;o++){p=t[o];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[p.type]){k=this.options.extensions.renderers[p.type].call({parser:this},p);if(k!==false||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(p.type)){n+=k||"";continue}}switch(p.type){case"space":{continue}case"hr":{n+=this.renderer.hr();continue}case"heading":{n+=this.renderer.heading(this.parseInline(p.tokens),p.depth,z(this.parseInline(p.tokens,this.textRenderer)),this.slugger);continue}case"code":{n+=this.renderer.code(p.text,p.lang,p.escaped);continue}case"table":{h="";c="";i=p.header.length;for(r=0;r<i;r++){c+=this.renderer.tablecell(this.parseInline(p.header[r].tokens),{header:true,align:p.align[r]})}h+=this.renderer.tablerow(c);d="";i=p.rows.length;for(r=0;r<i;r++){l=p.rows[r];c="";a=l.length;for(s=0;s<a;s++){c+=this.renderer.tablecell(this.parseInline(l[s].tokens),{header:false,align:p.align[s]})}d+=this.renderer.tablerow(c)}n+=this.renderer.table(h,d);continue}case"blockquote":{d=this.parse(p.tokens);n+=this.renderer.blockquote(d);continue}case"list":{f=p.ordered;u=p.start;m=p.loose;i=p.items.length;d="";for(r=0;r<i;r++){g=p.items[r];b=g.checked;v=g.task;w="";if(g.task){x=this.renderer.checkbox(b);if(m){if(g.tokens.length>0&&g.tokens[0].type==="paragraph"){g.tokens[0].text=x+" "+g.tokens[0].text;if(g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&g.tokens[0].tokens[0].type==="text"){g.tokens[0].tokens[0].text=x+" "+g.tokens[0].tokens[0].text}}else{g.tokens.unshift({type:"text",text:x})}}else{w+=x}}w+=this.parse(g.tokens,m);d+=this.renderer.listitem(w,v,b)}n+=this.renderer.list(d,f,u);continue}case"html":{n+=this.renderer.html(p.text);continue}case"paragraph":{n+=this.renderer.paragraph(this.parseInline(p.tokens));continue}case"text":{d=p.tokens?this.parseInline(p.tokens):p.text;while(o+1<y&&t[o+1].type==="text"){p=t[++o];d+="\n"+(p.tokens?this.parseInline(p.tokens):p.text)}n+=e?this.renderer.paragraph(d):d;continue}default:{const t='Token with "'+p.type+'" type was not found.';if(this.options.silent){console.error(t);return}else{throw new Error(t)}}}}return n}parseInline(t,e){e=e||this.renderer;let n="",o,r,s;const i=t.length;for(o=0;o<i;o++){r=t[o];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[r.type]){s=this.options.extensions.renderers[r.type].call({parser:this},r);if(s!==false||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(r.type)){n+=s||"";continue}}switch(r.type){case"escape":{n+=e.text(r.text);break}case"html":{n+=e.html(r.text);break}case"link":{n+=e.link(r.href,r.title,this.parseInline(r.tokens,e));break}case"image":{n+=e.image(r.href,r.title,r.text);break}case"strong":{n+=e.strong(this.parseInline(r.tokens,e));break}case"em":{n+=e.em(this.parseInline(r.tokens,e));break}case"codespan":{n+=e.codespan(r.text);break}case"br":{n+=e.br();break}case"del":{n+=e.del(this.parseInline(r.tokens,e));break}case"text":{n+=e.text(r.text);break}default:{const t='Token with "'+r.type+'" type was not found.';if(this.options.silent){console.error(t);return}else{throw new Error(t)}}}}return n}}class V{constructor(t){this.options=t||f}static passThroughHooks=new Set(["preprocess","postprocess"]);preprocess(t){return t}postprocess(t){return t}}function Q(t,e,n){return o=>{o.message+="\nPlease report this to https://github.com/markedjs/marked.";if(t){const t="<p>An error occurred:</p><pre>"+k(o.message+"",true)+"</pre>";if(e){return Promise.resolve(t)}if(n){n(null,t);return}return t}if(e){return Promise.reject(o)}if(n){n(o);return}throw o}}function tt(t,e){return(n,o,r)=>{if(typeof o==="function"){r=o;o=null}const s={...o};o={...et.defaults,...s};const i=Q(o.silent,o.async,r);if(typeof n==="undefined"||n===null){return i(new Error("marked(): input parameter is undefined or null"))}if(typeof n!=="string"){return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"))}L(o);if(o.hooks){o.hooks.options=o}if(r){const s=o.highlight;let a;try{if(o.hooks){n=o.hooks.preprocess(n)}a=t(n,o)}catch(t){return i(t)}const l=function(t){let n;if(!t){try{if(o.walkTokens){et.walkTokens(a,o.walkTokens)}n=e(a,o);if(o.hooks){n=o.hooks.postprocess(n)}}catch(e){t=e}}o.highlight=s;return t?i(t):r(null,n)};if(!s||s.length<3){return l()}delete o.highlight;if(!a.length)return l();let c=0;et.walkTokens(a,(function(t){if(t.type==="code"){c++;setTimeout((()=>{s(t.text,t.lang,(function(e,n){if(e){return l(e)}if(n!=null&&n!==t.text){t.text=n;t.escaped=true}c--;if(c===0){l()}}))}),0)}}));if(c===0){l()}return}if(o.async){return Promise.resolve(o.hooks?o.hooks.preprocess(n):n).then((e=>t(e,o))).then((t=>o.walkTokens?Promise.all(et.walkTokens(t,o.walkTokens)).then((()=>t)):t)).then((t=>e(t,o))).then((t=>o.hooks?o.hooks.postprocess(t):t)).catch(i)}try{if(o.hooks){n=o.hooks.preprocess(n)}const r=t(n,o);if(o.walkTokens){et.walkTokens(r,o.walkTokens)}let s=e(r,o);if(o.hooks){s=o.hooks.postprocess(s)}return s}catch(t){return i(t)}}}function et(t,e,n){return tt(W.lex,K.parse)(t,e,n)}et.options=et.setOptions=function(t){et.defaults={...et.defaults,...t};u(et.defaults);return et};et.getDefaults=p;et.defaults=f;et.use=function(...t){const e=et.defaults.extensions||{renderers:{},childTokens:{}};t.forEach((t=>{const n={...t};n.async=et.defaults.async||n.async||false;if(t.extensions){t.extensions.forEach((t=>{if(!t.name){throw new Error("extension name required")}if(t.renderer){const n=e.renderers[t.name];if(n){e.renderers[t.name]=function(...e){let o=t.renderer.apply(this,e);if(o===false){o=n.apply(this,e)}return o}}else{e.renderers[t.name]=t.renderer}}if(t.tokenizer){if(!t.level||t.level!=="block"&&t.level!=="inline"){throw new Error("extension level must be 'block' or 'inline'")}if(e[t.level]){e[t.level].unshift(t.tokenizer)}else{e[t.level]=[t.tokenizer]}if(t.start){if(t.level==="block"){if(e.startBlock){e.startBlock.push(t.start)}else{e.startBlock=[t.start]}}else if(t.level==="inline"){if(e.startInline){e.startInline.push(t.start)}else{e.startInline=[t.start]}}}}if(t.childTokens){e.childTokens[t.name]=t.childTokens}}));n.extensions=e}if(t.renderer){const e=et.defaults.renderer||new Y;for(const n in t.renderer){const o=e[n];e[n]=(...r)=>{let s=t.renderer[n].apply(e,r);if(s===false){s=o.apply(e,r)}return s}}n.renderer=e}if(t.tokenizer){const e=et.defaults.tokenizer||new B;for(const n in t.tokenizer){const o=e[n];e[n]=(...r)=>{let s=t.tokenizer[n].apply(e,r);if(s===false){s=o.apply(e,r)}return s}}n.tokenizer=e}if(t.hooks){const e=et.defaults.hooks||new V;for(const n in t.hooks){const o=e[n];if(V.passThroughHooks.has(n)){e[n]=r=>{if(et.defaults.async){return Promise.resolve(t.hooks[n].call(e,r)).then((t=>o.call(e,t)))}const s=t.hooks[n].call(e,r);return o.call(e,s)}}else{e[n]=(...r)=>{let s=t.hooks[n].apply(e,r);if(s===false){s=o.apply(e,r)}return s}}}n.hooks=e}if(t.walkTokens){const e=et.defaults.walkTokens;n.walkTokens=function(n){let o=[];o.push(t.walkTokens.call(this,n));if(e){o=o.concat(e.call(this,n))}return o}}et.setOptions(n)}))};et.walkTokens=function(t,e){let n=[];for(const o of t){n=n.concat(e.call(et,o));switch(o.type){case"table":{for(const t of o.header){n=n.concat(et.walkTokens(t.tokens,e))}for(const t of o.rows){for(const o of t){n=n.concat(et.walkTokens(o.tokens,e))}}break}case"list":{n=n.concat(et.walkTokens(o.items,e));break}default:{if(et.defaults.extensions&&et.defaults.extensions.childTokens&&et.defaults.extensions.childTokens[o.type]){et.defaults.extensions.childTokens[o.type].forEach((function(t){n=n.concat(et.walkTokens(o[t],e))}))}else if(o.tokens){n=n.concat(et.walkTokens(o.tokens,e))}}}}return n};et.parseInline=tt(W.lexInline,K.parseInline);et.Parser=K;et.parser=K.parse;et.Renderer=Y;et.TextRenderer=G;et.Lexer=W;et.lexer=W.lex;et.Tokenizer=B;et.Slugger=J;et.Hooks=V;et.parse=et;
|
|
2
|
-
/*! @license DOMPurify 3.2.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.6/LICENSE */const{entries:nt,setPrototypeOf:ot,isFrozen:rt,getPrototypeOf:st,getOwnPropertyDescriptor:it}=Object;let{freeze:at,seal:lt,create:ct}=Object;let{apply:ht,construct:dt}=typeof Reflect!=="undefined"&&Reflect;if(!at){at=function t(e){return e}}if(!lt){lt=function t(e){return e}}if(!ht){ht=function t(e,n,o){return e.apply(n,o)}}if(!dt){dt=function t(e,n){return new e(...n)}}const pt=$t(Array.prototype.forEach);const ft=$t(Array.prototype.lastIndexOf);const ut=$t(Array.prototype.pop);const mt=$t(Array.prototype.push);const wt=$t(Array.prototype.splice);const gt=$t(String.prototype.toLowerCase);const bt=$t(String.prototype.toString);const vt=$t(String.prototype.match);const xt=$t(String.prototype.replace);const kt=$t(String.prototype.indexOf);const yt=$t(String.prototype.trim);const zt=$t(Object.prototype.hasOwnProperty);const St=$t(RegExp.prototype.test);const _t=At(TypeError);function $t(t){return function(e){if(e instanceof RegExp){e.lastIndex=0}for(var n=arguments.length,o=new Array(n>1?n-1:0),r=1;r<n;r++){o[r-1]=arguments[r]}return ht(t,e,o)}}function At(t){return function(){for(var e=arguments.length,n=new Array(e),o=0;o<e;o++){n[o]=arguments[o]}return dt(t,n)}}function Ct(t,e){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:gt;if(ot){ot(t,null)}let o=e.length;while(o--){let r=e[o];if(typeof r==="string"){const t=n(r);if(t!==r){if(!rt(e)){e[o]=t}r=t}}t[r]=true}return t}function Tt(t){for(let e=0;e<t.length;e++){const n=zt(t,e);if(!n){t[e]=null}}return t}function Et(t){const e=ct(null);for(const[n,o]of nt(t)){const r=zt(t,n);if(r){if(Array.isArray(o)){e[n]=Tt(o)}else if(o&&typeof o==="object"&&o.constructor===Object){e[n]=Et(o)}else{e[n]=o}}}return e}function Mt(t,e){while(t!==null){const n=it(t,e);if(n){if(n.get){return $t(n.get)}if(typeof n.value==="function"){return $t(n.value)}}t=st(t)}function n(){return null}return n}const Rt=at(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]);const qt=at(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]);const It=at(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]);const Ft=at(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]);const Dt=at(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]);const Ot=at(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]);const Lt=at(["#text"]);const jt=at(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]);const Pt=at(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]);const Ut=at(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]);const Bt=at(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]);const Nt=lt(/\{\{[\w\W]*|[\w\W]*\}\}/gm);const Ht=lt(/<%[\w\W]*|[\w\W]*%>/gm);const Xt=lt(/\$\{[\w\W]*/gm);const Zt=lt(/^data-[\-\w.\u00B7-\uFFFF]+$/);const Wt=lt(/^aria-[\-\w]+$/);const Yt=lt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);const Gt=lt(/^(?:\w+script|data):/i);const Jt=lt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);const Kt=lt(/^html$/i);const Vt=lt(/^[a-z][.\w]*(-[.\w]+)+$/i);var Qt=Object.freeze({__proto__:null,ARIA_ATTR:Wt,ATTR_WHITESPACE:Jt,CUSTOM_ELEMENT:Vt,DATA_ATTR:Zt,DOCTYPE_NAME:Kt,ERB_EXPR:Ht,IS_ALLOWED_URI:Yt,IS_SCRIPT_OR_DATA:Gt,MUSTACHE_EXPR:Nt,TMPLIT_EXPR:Xt});const te={element:1,text:3,progressingInstruction:7,comment:8,document:9};const ee=function t(){return typeof window==="undefined"?null:window};const ne=function t(e,n){if(typeof e!=="object"||typeof e.createPolicy!=="function"){return null}let o=null;const r="data-tt-policy-suffix";if(n&&n.hasAttribute(r)){o=n.getAttribute(r)}const s="dompurify"+(o?"#"+o:"");try{return e.createPolicy(s,{createHTML(t){return t},createScriptURL(t){return t}})}catch(t){console.warn("TrustedTypes policy "+s+" could not be created.");return null}};const oe=function t(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function re(){let t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:ee();const e=t=>re(t);e.version="3.2.6";e.removed=[];if(!t||!t.document||t.document.nodeType!==te.document||!t.Element){e.isSupported=false;return e}let{document:n}=t;const o=n;const r=o.currentScript;const{DocumentFragment:s,HTMLTemplateElement:i,Node:a,Element:l,NodeFilter:c,NamedNodeMap:h=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:f}=t;const u=l.prototype;const m=Mt(u,"cloneNode");const w=Mt(u,"remove");const g=Mt(u,"nextSibling");const b=Mt(u,"childNodes");const v=Mt(u,"parentNode");if(typeof i==="function"){const t=n.createElement("template");if(t.content&&t.content.ownerDocument){n=t.content.ownerDocument}}let x;let k="";const{implementation:y,createNodeIterator:z,createDocumentFragment:S,getElementsByTagName:_}=n;const{importNode:$}=o;let A=oe();e.isSupported=typeof nt==="function"&&typeof v==="function"&&y&&y.createHTMLDocument!==undefined;const{MUSTACHE_EXPR:C,ERB_EXPR:T,TMPLIT_EXPR:E,DATA_ATTR:M,ARIA_ATTR:R,IS_SCRIPT_OR_DATA:q,ATTR_WHITESPACE:I,CUSTOM_ELEMENT:F}=Qt;let{IS_ALLOWED_URI:D}=Qt;let O=null;const L=Ct({},[...Rt,...qt,...It,...Dt,...Lt]);let j=null;const P=Ct({},[...jt,...Pt,...Ut,...Bt]);let U=Object.seal(ct(null,{tagNameCheck:{writable:true,configurable:false,enumerable:true,value:null},attributeNameCheck:{writable:true,configurable:false,enumerable:true,value:null},allowCustomizedBuiltInElements:{writable:true,configurable:false,enumerable:true,value:false}}));let B=null;let N=null;let H=true;let X=true;let Z=false;let W=true;let Y=false;let G=true;let J=false;let K=false;let V=false;let Q=false;let tt=false;let et=false;let ot=true;let rt=false;const st="user-content-";let it=true;let lt=false;let ht={};let dt=null;const $t=Ct({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let At=null;const Tt=Ct({},["audio","video","img","source","image","track"]);let Nt=null;const Ht=Ct({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]);const Xt="http://www.w3.org/1998/Math/MathML";const Zt="http://www.w3.org/2000/svg";const Wt="http://www.w3.org/1999/xhtml";let Gt=Wt;let Jt=false;let Vt=null;const se=Ct({},[Xt,Zt,Wt],bt);let ie=Ct({},["mi","mo","mn","ms","mtext"]);let ae=Ct({},["annotation-xml"]);const le=Ct({},["title","style","font","a","script"]);let ce=null;const he=["application/xhtml+xml","text/html"];const de="text/html";let pe=null;let fe=null;const ue=n.createElement("form");const me=function t(e){return e instanceof RegExp||e instanceof Function};const we=function t(){let e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};if(fe&&fe===e){return}if(!e||typeof e!=="object"){e={}}e=Et(e);ce=he.indexOf(e.PARSER_MEDIA_TYPE)===-1?de:e.PARSER_MEDIA_TYPE;pe=ce==="application/xhtml+xml"?bt:gt;O=zt(e,"ALLOWED_TAGS")?Ct({},e.ALLOWED_TAGS,pe):L;j=zt(e,"ALLOWED_ATTR")?Ct({},e.ALLOWED_ATTR,pe):P;Vt=zt(e,"ALLOWED_NAMESPACES")?Ct({},e.ALLOWED_NAMESPACES,bt):se;Nt=zt(e,"ADD_URI_SAFE_ATTR")?Ct(Et(Ht),e.ADD_URI_SAFE_ATTR,pe):Ht;At=zt(e,"ADD_DATA_URI_TAGS")?Ct(Et(Tt),e.ADD_DATA_URI_TAGS,pe):Tt;dt=zt(e,"FORBID_CONTENTS")?Ct({},e.FORBID_CONTENTS,pe):$t;B=zt(e,"FORBID_TAGS")?Ct({},e.FORBID_TAGS,pe):Et({});N=zt(e,"FORBID_ATTR")?Ct({},e.FORBID_ATTR,pe):Et({});ht=zt(e,"USE_PROFILES")?e.USE_PROFILES:false;H=e.ALLOW_ARIA_ATTR!==false;X=e.ALLOW_DATA_ATTR!==false;Z=e.ALLOW_UNKNOWN_PROTOCOLS||false;W=e.ALLOW_SELF_CLOSE_IN_ATTR!==false;Y=e.SAFE_FOR_TEMPLATES||false;G=e.SAFE_FOR_XML!==false;J=e.WHOLE_DOCUMENT||false;Q=e.RETURN_DOM||false;tt=e.RETURN_DOM_FRAGMENT||false;et=e.RETURN_TRUSTED_TYPE||false;V=e.FORCE_BODY||false;ot=e.SANITIZE_DOM!==false;rt=e.SANITIZE_NAMED_PROPS||false;it=e.KEEP_CONTENT!==false;lt=e.IN_PLACE||false;D=e.ALLOWED_URI_REGEXP||Yt;Gt=e.NAMESPACE||Wt;ie=e.MATHML_TEXT_INTEGRATION_POINTS||ie;ae=e.HTML_INTEGRATION_POINTS||ae;U=e.CUSTOM_ELEMENT_HANDLING||{};if(e.CUSTOM_ELEMENT_HANDLING&&me(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)){U.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck}if(e.CUSTOM_ELEMENT_HANDLING&&me(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)){U.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck}if(e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements==="boolean"){U.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements}if(Y){X=false}if(tt){Q=true}if(ht){O=Ct({},Lt);j=[];if(ht.html===true){Ct(O,Rt);Ct(j,jt)}if(ht.svg===true){Ct(O,qt);Ct(j,Pt);Ct(j,Bt)}if(ht.svgFilters===true){Ct(O,It);Ct(j,Pt);Ct(j,Bt)}if(ht.mathMl===true){Ct(O,Dt);Ct(j,Ut);Ct(j,Bt)}}if(e.ADD_TAGS){if(O===L){O=Et(O)}Ct(O,e.ADD_TAGS,pe)}if(e.ADD_ATTR){if(j===P){j=Et(j)}Ct(j,e.ADD_ATTR,pe)}if(e.ADD_URI_SAFE_ATTR){Ct(Nt,e.ADD_URI_SAFE_ATTR,pe)}if(e.FORBID_CONTENTS){if(dt===$t){dt=Et(dt)}Ct(dt,e.FORBID_CONTENTS,pe)}if(it){O["#text"]=true}if(J){Ct(O,["html","head","body"])}if(O.table){Ct(O,["tbody"]);delete B.tbody}if(e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=="function"){throw _t('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.')}if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=="function"){throw _t('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.')}x=e.TRUSTED_TYPES_POLICY;k=x.createHTML("")}else{if(x===undefined){x=ne(f,r)}if(x!==null&&typeof k==="string"){k=x.createHTML("")}}if(at){at(e)}fe=e};const ge=Ct({},[...qt,...It,...Ft]);const be=Ct({},[...Dt,...Ot]);const ve=function t(e){let n=v(e);if(!n||!n.tagName){n={namespaceURI:Gt,tagName:"template"}}const o=gt(e.tagName);const r=gt(n.tagName);if(!Vt[e.namespaceURI]){return false}if(e.namespaceURI===Zt){if(n.namespaceURI===Wt){return o==="svg"}if(n.namespaceURI===Xt){return o==="svg"&&(r==="annotation-xml"||ie[r])}return Boolean(ge[o])}if(e.namespaceURI===Xt){if(n.namespaceURI===Wt){return o==="math"}if(n.namespaceURI===Zt){return o==="math"&&ae[r]}return Boolean(be[o])}if(e.namespaceURI===Wt){if(n.namespaceURI===Zt&&!ae[r]){return false}if(n.namespaceURI===Xt&&!ie[r]){return false}return!be[o]&&(le[o]||!ge[o])}if(ce==="application/xhtml+xml"&&Vt[e.namespaceURI]){return true}return false};const xe=function t(n){mt(e.removed,{element:n});try{v(n).removeChild(n)}catch(t){w(n)}};const ke=function t(n,o){try{mt(e.removed,{attribute:o.getAttributeNode(n),from:o})}catch(t){mt(e.removed,{attribute:null,from:o})}o.removeAttribute(n);if(n==="is"){if(Q||tt){try{xe(o)}catch(t){}}else{try{o.setAttribute(n,"")}catch(t){}}}};const ye=function t(e){let o=null;let r=null;if(V){e="<remove></remove>"+e}else{const t=vt(e,/^[\r\n\t ]+/);r=t&&t[0]}if(ce==="application/xhtml+xml"&&Gt===Wt){e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>"}const s=x?x.createHTML(e):e;if(Gt===Wt){try{o=(new p).parseFromString(s,ce)}catch(t){}}if(!o||!o.documentElement){o=y.createDocument(Gt,"template",null);try{o.documentElement.innerHTML=Jt?k:s}catch(t){}}const i=o.body||o.documentElement;if(e&&r){i.insertBefore(n.createTextNode(r),i.childNodes[0]||null)}if(Gt===Wt){return _.call(o,J?"html":"body")[0]}return J?o.documentElement:i};const ze=function t(e){return z.call(e.ownerDocument||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)};const Se=function t(e){return e instanceof d&&(typeof e.nodeName!=="string"||typeof e.textContent!=="string"||typeof e.removeChild!=="function"||!(e.attributes instanceof h)||typeof e.removeAttribute!=="function"||typeof e.setAttribute!=="function"||typeof e.namespaceURI!=="string"||typeof e.insertBefore!=="function"||typeof e.hasChildNodes!=="function")};const _e=function t(e){return typeof a==="function"&&e instanceof a};function $e(t,n,o){pt(t,(t=>{t.call(e,n,o,fe)}))}const Ae=function t(n){let o=null;$e(A.beforeSanitizeElements,n,null);if(Se(n)){xe(n);return true}const r=pe(n.nodeName);$e(A.uponSanitizeElement,n,{tagName:r,allowedTags:O});if(G&&n.hasChildNodes()&&!_e(n.firstElementChild)&&St(/<[/\w!]/g,n.innerHTML)&&St(/<[/\w!]/g,n.textContent)){xe(n);return true}if(n.nodeType===te.progressingInstruction){xe(n);return true}if(G&&n.nodeType===te.comment&&St(/<[/\w]/g,n.data)){xe(n);return true}if(!O[r]||B[r]){if(!B[r]&&Te(r)){if(U.tagNameCheck instanceof RegExp&&St(U.tagNameCheck,r)){return false}if(U.tagNameCheck instanceof Function&&U.tagNameCheck(r)){return false}}if(it&&!dt[r]){const t=v(n)||n.parentNode;const e=b(n)||n.childNodes;if(e&&t){const o=e.length;for(let r=o-1;r>=0;--r){const o=m(e[r],true);o.__removalCount=(n.__removalCount||0)+1;t.insertBefore(o,g(n))}}}xe(n);return true}if(n instanceof l&&!ve(n)){xe(n);return true}if((r==="noscript"||r==="noembed"||r==="noframes")&&St(/<\/no(script|embed|frames)/i,n.innerHTML)){xe(n);return true}if(Y&&n.nodeType===te.text){o=n.textContent;pt([C,T,E],(t=>{o=xt(o,t," ")}));if(n.textContent!==o){mt(e.removed,{element:n.cloneNode()});n.textContent=o}}$e(A.afterSanitizeElements,n,null);return false};const Ce=function t(e,o,r){if(ot&&(o==="id"||o==="name")&&(r in n||r in ue)){return false}if(X&&!N[o]&&St(M,o));else if(H&&St(R,o));else if(!j[o]||N[o]){if(Te(e)&&(U.tagNameCheck instanceof RegExp&&St(U.tagNameCheck,e)||U.tagNameCheck instanceof Function&&U.tagNameCheck(e))&&(U.attributeNameCheck instanceof RegExp&&St(U.attributeNameCheck,o)||U.attributeNameCheck instanceof Function&&U.attributeNameCheck(o))||o==="is"&&U.allowCustomizedBuiltInElements&&(U.tagNameCheck instanceof RegExp&&St(U.tagNameCheck,r)||U.tagNameCheck instanceof Function&&U.tagNameCheck(r)));else{return false}}else if(Nt[o]);else if(St(D,xt(r,I,"")));else if((o==="src"||o==="xlink:href"||o==="href")&&e!=="script"&&kt(r,"data:")===0&&At[e]);else if(Z&&!St(q,xt(r,I,"")));else if(r){return false}else;return true};const Te=function t(e){return e!=="annotation-xml"&&vt(e,F)};const Ee=function t(n){$e(A.beforeSanitizeAttributes,n,null);const{attributes:o}=n;if(!o||Se(n)){return}const r={attrName:"",attrValue:"",keepAttr:true,allowedAttributes:j,forceKeepAttr:undefined};let s=o.length;while(s--){const t=o[s];const{name:i,namespaceURI:a,value:l}=t;const c=pe(i);const h=l;let d=i==="value"?h:yt(h);r.attrName=c;r.attrValue=d;r.keepAttr=true;r.forceKeepAttr=undefined;$e(A.uponSanitizeAttribute,n,r);d=r.attrValue;if(rt&&(c==="id"||c==="name")){ke(i,n);d=st+d}if(G&&St(/((--!?|])>)|<\/(style|title)/i,d)){ke(i,n);continue}if(r.forceKeepAttr){continue}if(!r.keepAttr){ke(i,n);continue}if(!W&&St(/\/>/i,d)){ke(i,n);continue}if(Y){pt([C,T,E],(t=>{d=xt(d,t," ")}))}const p=pe(n.nodeName);if(!Ce(p,c,d)){ke(i,n);continue}if(x&&typeof f==="object"&&typeof f.getAttributeType==="function"){if(a);else{switch(f.getAttributeType(p,c)){case"TrustedHTML":{d=x.createHTML(d);break}case"TrustedScriptURL":{d=x.createScriptURL(d);break}}}}if(d!==h){try{if(a){n.setAttributeNS(a,i,d)}else{n.setAttribute(i,d)}if(Se(n)){xe(n)}else{ut(e.removed)}}catch(t){ke(i,n)}}}$e(A.afterSanitizeAttributes,n,null)};const Me=function t(e){let n=null;const o=ze(e);$e(A.beforeSanitizeShadowDOM,e,null);while(n=o.nextNode()){$e(A.uponSanitizeShadowNode,n,null);Ae(n);Ee(n);if(n.content instanceof s){t(n.content)}}$e(A.afterSanitizeShadowDOM,e,null)};e.sanitize=function(t){let n=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};let r=null;let i=null;let l=null;let c=null;Jt=!t;if(Jt){t="\x3c!--\x3e"}if(typeof t!=="string"&&!_e(t)){if(typeof t.toString==="function"){t=t.toString();if(typeof t!=="string"){throw _t("dirty is not a string, aborting")}}else{throw _t("toString is not a function")}}if(!e.isSupported){return t}if(!K){we(n)}e.removed=[];if(typeof t==="string"){lt=false}if(lt){if(t.nodeName){const e=pe(t.nodeName);if(!O[e]||B[e]){throw _t("root node is forbidden and cannot be sanitized in-place")}}}else if(t instanceof a){r=ye("\x3c!----\x3e");i=r.ownerDocument.importNode(t,true);if(i.nodeType===te.element&&i.nodeName==="BODY"){r=i}else if(i.nodeName==="HTML"){r=i}else{r.appendChild(i)}}else{if(!Q&&!Y&&!J&&t.indexOf("<")===-1){return x&&et?x.createHTML(t):t}r=ye(t);if(!r){return Q?null:et?k:""}}if(r&&V){xe(r.firstChild)}const h=ze(lt?t:r);while(l=h.nextNode()){Ae(l);Ee(l);if(l.content instanceof s){Me(l.content)}}if(lt){return t}if(Q){if(tt){c=S.call(r.ownerDocument);while(r.firstChild){c.appendChild(r.firstChild)}}else{c=r}if(j.shadowroot||j.shadowrootmode){c=$.call(o,c,true)}return c}let d=J?r.outerHTML:r.innerHTML;if(J&&O["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&St(Kt,r.ownerDocument.doctype.name)){d="<!DOCTYPE "+r.ownerDocument.doctype.name+">\n"+d}if(Y){pt([C,T,E],(t=>{d=xt(d,t," ")}))}return x&&et?x.createHTML(d):d};e.setConfig=function(){let t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};we(t);K=true};e.clearConfig=function(){fe=null;K=false};e.isValidAttribute=function(t,e,n){if(!fe){we({})}const o=pe(t);const r=pe(e);return Ce(o,r,n)};e.addHook=function(t,e){if(typeof e!=="function"){return}mt(A[t],e)};e.removeHook=function(t,e){if(e!==undefined){const n=ft(A[t],e);return n===-1?undefined:wt(A[t],n,1)[0]}return ut(A[t])};e.removeHooks=function(t){A[t]=[]};e.removeAllHooks=function(){A=oe()};return e}var se=re();et.setOptions({breaks:true,gfm:true,smartypants:true});function ie(t){if(typeof window==="undefined"){return t}try{const e=document.createElement("div");e.innerHTML=t;const n=e.querySelectorAll("a[href]");n.forEach((t=>{const e=t.getAttribute("href");if(e&&(e.startsWith("http://")||e.startsWith("https://"))){t.setAttribute("target","_blank");t.setAttribute("rel","noopener noreferrer")}}));return e.innerHTML}catch(e){console.error("Error post-processing markdown HTML:",e);return t}}function ae(t){if(!t||typeof t!=="string"){return""}try{const e=et.parse(t);const n=se.sanitize(e,{ALLOWED_TAGS:["p","br","strong","b","em","i","u","code","pre","ul","ol","li","h1","h2","h3","h4","h5","h6","blockquote","a","img","hr","table","thead","tbody","tr","td","th","del","ins","sub","sup"],ALLOWED_ATTR:["href","target","rel","class","src","alt","title","width","height","align","colspan","rowspan"],ALLOWED_URI_REGEXP:/^(?:(?:https?):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,ADD_ATTR:["target"],FORBID_TAGS:["script","style","form","input","button"],FORBID_ATTR:["onclick","onload","onerror","onmouseover"]});return ie(n)}catch(e){console.error("Error rendering markdown sync:",e);return se.sanitize(t)}}
|
|
3
|
-
/*! js-cookie v3.0.5 | MIT */function le(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n){t[o]=n[o]}}return t}var ce={read:function(t){if(t[0]==='"'){t=t.slice(1,-1)}return t.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(t){return encodeURIComponent(t).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function he(t,e){function n(n,o,r){if(typeof document==="undefined"){return}r=le({},e,r);if(typeof r.expires==="number"){r.expires=new Date(Date.now()+r.expires*864e5)}if(r.expires){r.expires=r.expires.toUTCString()}n=encodeURIComponent(n).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var s="";for(var i in r){if(!r[i]){continue}s+="; "+i;if(r[i]===true){continue}s+="="+r[i].split(";")[0]}return document.cookie=n+"="+t.write(o,n)+s}function o(e){if(typeof document==="undefined"||arguments.length&&!e){return}var n=document.cookie?document.cookie.split("; "):[];var o={};for(var r=0;r<n.length;r++){var s=n[r].split("=");var i=s.slice(1).join("=");try{var a=decodeURIComponent(s[0]);o[a]=t.read(i,a);if(e===a){break}}catch(t){}}return e?o[e]:o}return Object.create({set:n,get:o,remove:function(t,e){n(t,"",le({},e,{expires:-1}))},withAttributes:function(t){return he(this.converter,le({},this.attributes,t))},withConverter:function(t){return he(le({},this.converter,t),this.attributes)}},{attributes:{value:Object.freeze(e)},converter:{value:Object.freeze(t)}})}var de=he(ce,{path:"/"});function pe(t){if(!fe(t)){return undefined}return de.get("csrftoken")}function fe(t){const e=window.location.hostname;const n=ue(t);if(!n){return false}return e===n}function ue(t){try{const e=new URL(t);return e.hostname}catch(t){return null}}const me=(t,e,n)=>{t=t.trim();if(t.includes("%")){const n=we(t);if(!isNaN(n)){return e*n}}else if(t.includes("px")){const e=parseFloat(t);if(!isNaN(e)){return e}}return n};const we=t=>{const e=parseFloat(t);if(isNaN(e)){return NaN}return e/100};const ge='*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}/*\n! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: \'\';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user\'s configured `sans` font-family by default.\n5. Use the user\'s configured `sans` font-feature-settings by default.\n6. Use the user\'s configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user\'s configured `mono` font-family by default.\n2. Use the user\'s configured `mono` font-feature-settings by default.\n3. Use the user\'s configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type=\'button\']),\ninput:where([type=\'reset\']),\ninput:where([type=\'submit\']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type=\'search\'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user\'s configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role="button"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don\'t get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden="until-found"])) {\n display: none;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .container {\n max-width: 1536px;\n }\n}\n#ocs-chat-window {\n z-index: var(--chat-z-index);\n font-size: var(--chat-window-font-size);\n }\n.starter-question {\n border-radius: 0.5rem;\n text-align: left;\n transition-duration: 200ms;\n padding: 0.75em;\n background-color: var(--starter-question-bg-color);\n border: 1px solid var(--starter-question-border-color);\n color: var(--starter-question-text-color);\n}\n.starter-question:hover {\n background-color: var(--starter-question-bg-hover-color);\n border-color: var(--starter-question-border-hover-color);\n }\n.chat-btn-text,\n .chat-btn-icon {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-radius: 0.5rem;\n border-width: 0px;\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n transition-property: all;\n transition-duration: 200ms;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.chat-btn-text:hover,\n .chat-btn-icon:hover {\n --tw-scale-x: 1.05;\n --tw-scale-y: 1.05;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.chat-btn-text,\n .chat-btn-icon {\n background-color: var(--button-background-color, white);\n border: 1px solid var(--button-border-color);\n z-index: var(--chat-z-index, 50);\n font-size: var(--button-font-size);\n padding: 0.5em;\n }\n.chat-btn-text:hover, .chat-btn-icon:hover {\n color: var(--button-text-color-hover, #1d4ed8);\n border: 1px solid var(--button-border-color-hover);\n }\n/* Button with text and icon */\n.chat-btn-text {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--button-text-color, #111827);\n}\n.chat-btn-text span {\n white-space: nowrap;\n font-weight: 500;\n}\n.chat-btn-text img {\n flex-shrink: 0;\n -o-object-fit: contain;\n object-fit: contain;\n width: var(--button-icon-size);\n height: var(--button-icon-size);\n}\n/* Icon-only button */\n.chat-btn-icon {\n }\n.chat-btn-icon img {\n -o-object-fit: contain;\n object-fit: contain;\n width: var(--button-icon-size);\n height: var(--button-icon-size);\n}\n.chat-btn-text.round,\n .chat-btn-icon.round {\n border-radius: 9999px;\n}\n/* Error message styling */\n.error-message {\n padding: 0.5em;\n color: var(--error-text-color);\n }\n/* Chat window positioning classes */\n.chat-window-fullscreen {\n position: fixed;\n inset: 0px;\n z-index: 9999;\n display: flex;\n height: 100%;\n max-height: 100%;\n width: 100%;\n flex-direction: column;\n overflow: hidden;\n border-radius: 0px;\n border-width: 0px;\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n transition-property: box-shadow;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 200ms;\n background-color: var(--chat-window-bg-color);\n max-width: var(--chat-window-fullscreen-width);\n}\n.chat-window-normal {\n position: fixed;\n display: flex;\n height: 100vh;\n min-height: 300px;\n width: 100vw;\n min-width: 300px;\n max-width: 1024px;\n flex-direction: column;\n overflow: hidden;\n border-radius: 0.5rem;\n}\n@media (min-width: 640px) {\n\n .chat-window-normal {\n height: var(--chat-window-height);\n width: var(--chat-window-width);\n }\n}\n.chat-window-normal {\n background-color: var(--chat-window-bg-color);\n border: 1px solid var(--chat-window-border-color);\n }\n.chat-window-dragging {\n cursor: grabbing;\n --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.chat-window-normal:not(.chat-window-dragging) {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n transition-property: box-shadow;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 200ms;\n}\n/* Header/drag bar classes */\n.chat-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n padding: 0.5em;\n background-color: var(--header-bg-color);\n border-bottom: 1px solid var(--header-border-color);\n font-size: var(--header-font-size);\n}\n.header-text {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--header-text-font-size);\n color: var(--header-text-color);\n}\n.chat-header:hover,\n .chat-header:active {\n background-color: var(--header-bg-hover-color);\n }\n.chat-header-draggable {\n cursor: grab;\n}\n.chat-header-dragging {\n cursor: grabbing;\n}\n.drag-indicator {\n display: none;\n}\n@media (min-width: 640px) {\n\n .drag-indicator {\n display: flex;\n }\n}\n.drag-dots {\n pointer-events: none;\n margin-left: 2px;\n display: flex;\n gap: 2px;\n}\n.header-buttons {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n/* Header button classes */\n.header-button {\n border-radius: 0.375rem;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 200ms;\n padding: 0.375em;\n color: var(--header-button-text-color);\n}\n.header-button svg {\n width: var(--header-button-icon-size);\n height: var(--header-button-icon-size);\n }\n.header-button:hover {\n background-color: var(--header-button-bg-hover-color);\n }\n.fullscreen-button {\n display: none;\n}\n@media (min-width: 640px) {\n\n .fullscreen-button {\n display: block;\n }\n}\n/* Chat content area */\n.chat-content {\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n overflow: hidden;\n}\n/* Loading state */\n.loading-container {\n display: flex;\n flex-grow: 1;\n align-items: center;\n justify-content: center;\n}\n.loading-text {\n margin-left: 2px;\n color: var(--loading-text-color);\n }\n/* Messages container */\n.messages-container {\n flex-grow: 1;\n}\n.messages-container > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.messages-container {\n overflow-y: auto;\n}\n.messages-container::-webkit-scrollbar {\n height: 0.375rem;\n width: 0.375rem;\n}\n.messages-container::-webkit-scrollbar-track {\n border-radius: 0.25rem;\n background-color: var(--scrollbar-track-color);\n}\n.messages-container::-webkit-scrollbar-thumb {\n border-radius: 0.25rem;\n background-color: var(--scrollbar-thumb-color);\n}\n.messages-container::-webkit-scrollbar-thumb:hover {\n background-color: var(--scrollbar-thumb-hover-color);\n}\n.messages-container {\n padding: 1em;\n }\n/* Message bubbles */\n.message-row {\n display: flex;\n}\n.message-row-user {\n justify-content: flex-end;\n}\n.message-row-assistant {\n justify-content: flex-start;\n}\n.message-bubble {\n border-radius: 0.5rem;\n padding: 0.5em 1em;\n}\n.message-bubble-user {\n background-color: var(--message-user-bg-color);\n color: var(--message-user-text-color);\n }\n.message-bubble-assistant {\n background-color: var(--message-assistant-bg-color);\n color: var(--message-assistant-text-color);\n }\n.message-bubble-system {\n background-color: var(--message-system-bg-color);\n color: var(--message-system-text-color);\n }\n.message-timestamp {\n margin-top: 4px;\n opacity: 0.7;\n font-size: var(--chat-window-font-size-sm);\n}\n.message-attachments {\n margin-top: 8px;\n}\n.message-attachments > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n/* Welcome messages */\n.welcome-messages > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n/* Typing indicator */\n.typing-indicator {\n height: 0.375rem;\n width: 100%;\n overflow: hidden;\n}\n.typing-progress {\n height: 100%;\n width: 100%;\n transform-origin: 0% 50%;\n}\n@keyframes progress {\n\n 0% {\n transform: translateX(0) scaleX(0);\n }\n\n 10% {\n transform: translateX(0) scaleX(0.3);\n }\n\n 50% {\n transform: translateX(100%) scaleX(0.3);\n }\n\n 90% {\n transform: translateX(0) scaleX(0.3);\n }\n\n 100% {\n transform: translateX(0) scaleX(0);\n }\n}\n.typing-progress {\n animation: progress 3s infinite linear;\n border-radius: 0.5rem;\n background-color: var(--typing-progress-bg-color);\n}\n.typing-text {\n width: 100%;\n justify-content: center;\n opacity: 0.7;\n font-size: var(--chat-window-font-size-sm);\n}\n@keyframes dots {\n\n 0%, 20% {\n color: rgba(0,0,0,0);\n text-shadow: .25em 0 0 rgba(0,0,0,0), .5em 0 0 rgba(0,0,0,0);\n }\n\n 40% {\n color: black;\n text-shadow: .25em 0 0 rgba(0,0,0,0), .5em 0 0 rgba(0,0,0,0);\n }\n\n 60% {\n text-shadow: .25em 0 0 black, .5em 0 0 rgba(0,0,0,0);\n }\n\n 80%, 100% {\n text-shadow: .25em 0 0 black, .5em 0 0 black;\n }\n}\n.typing-dots {\n animation: dots 1s steps(5, end) infinite;\n}\n.typing-dots:after {\n content: \' .\';\n}\n/* Starter questions */\n.starter-questions > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.starter-questions {\n padding: 1em;\n }\n.starter-question-row {\n display: flex;\n justify-content: flex-end;\n}\n/* Input area */\n.input-area {\n padding: 1em 1em 0 1em;\n background-color: var(--input-bg-color);\n border-top: 1px solid var(--input-border-color);\n }\n.input-container {\n display: flex;\n gap: 8px;\n}\n.message-textarea {\n flex-grow: 1;\n resize: none;\n border-radius: 0.375rem;\n border-width: 1px;\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n.message-textarea:focus {\n outline-color: #93c5fd;\n}\n.message-textarea {\n background-color: var(--input-bg-color);\n padding: 0.5em 0.75em;\n color: var(--input-text-color);\n border: 1px solid var(--input-border-color);\n }\n.message-textarea:focus {\n outline-color: var(--input-outline-focus-color);\n }\n.send-button {\n border-radius: 0.375rem;\n font-weight: 500;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 200ms;\n padding: 0.5em 1em;\n}\n.send-button-enabled {\n background-color: var(--send-button-bg-color);\n color: var(--send-button-text-color);\n }\n.send-button-enabled:hover {\n background-color: var(--send-button-bg-hover-color);\n }\n.send-button-disabled {\n cursor: not-allowed;\n background-color: var(--send-button-bg-disabled-color);\n color: var(--send-button-text-disabled-color);\n}\n/* Confirmation dialog */\n.confirmation-overlay {\n position: fixed;\n inset: 0px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--confirmation-overlay-bg-color);\n z-index: 9999;\n}\n.confirmation-dialog {\n margin-left: 1rem;\n margin-right: 1rem;\n width: 100%;\n max-width: 24rem;\n background-color: var(--confirmation-dialog-bg-color);\n border: 1px solid var(--confirmation-dialog-border-color);\n border-radius: 0.75em;\n box-shadow: 0 0.625em 1.5625em var(--confirmation-dialog-shadow-color);\n}\n.confirmation-content {\n padding: 1.5em;\n }\n.confirmation-title {\n margin-bottom: 0.5rem;\n font-weight: 600;\n color: var(--confirmation-title-color);\n font-size: var(--confirmation-title-font-size);\n}\n.confirmation-message {\n margin-bottom: 1rem;\n color: var(--confirmation-message-color);\n font-size: var(--confirmation-message-font-size);\n}\n.confirmation-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 0.75em;\n}\n.confirmation-button {\n border-radius: 0.375rem;\n font-weight: 500;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 200ms;\n padding: 0.5em 1em;\n}\n.confirmation-button-cancel {\n background-color: var(--confirmation-button-cancel-bg-color);\n color: var(--confirmation-button-cancel-text-color);\n }\n.confirmation-button-cancel:hover {\n background-color: var(--confirmation-button-cancel-bg-hover-color);\n }\n.confirmation-button-confirm {\n background-color: var(--confirmation-button-confirm-bg-color);\n color: var(--confirmation-button-confirm-text-color);\n }\n.confirmation-button-confirm:hover {\n background-color: var(--confirmation-button-confirm-bg-hover-color);\n }\n.\\!visible {\n visibility: visible !important;\n}\n.visible {\n visibility: visible;\n}\n.static {\n position: static;\n}\n.relative {\n position: relative;\n}\n.flex {\n display: flex;\n}\n.table {\n display: table;\n}\n.hidden {\n display: none;\n}\n.w-full {\n width: 100%;\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.resize {\n resize: both;\n}\n.items-center {\n align-items: center;\n}\n.justify-center {\n justify-content: center;\n}\n.gap-\\[0\\.5em\\] {\n gap: 0.5em;\n}\n.space-y-\\[0\\.25em\\] > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25em * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25em * var(--tw-space-y-reverse));\n}\n.border {\n border-width: 1px;\n}\n.py-\\[2px\\] {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.text-\\[0\\.8em\\] {\n font-size: 0.8em;\n}\n.font-light {\n font-weight: 300;\n}\n.text-slate-500 {\n --tw-text-opacity: 1;\n color: rgb(100 116 139 / var(--tw-text-opacity, 1));\n}\n.underline {\n text-decoration-line: underline;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n:host {\n /**\n * @prop --chat-z-index: Z-index for chat widget (50)\n *\n * @prop --button-background-color: Button background color (#ffffff)\n * @prop --button-background-color-hover: Button background color on hover (#f3f4f6)\n * @prop --button-text-color: Button text color (#111827)\n * @prop --button-text-color-hover: Button text color on hover (#1d4ed8)\n * @prop --button-border-color: Button border color (#6b7280)\n * @prop --button-border-color-hover: Button border color on hover (#374151)\n * @prop --button-font-size: Button text font size (0.875em)\n * @prop --button-icon-size: Button icon size (1.5em)\n *\n * @prop --chat-window-height: Chat window height in pixels or percent (60%)\n * @prop --chat-window-width: Chat window width in pixels or percent (25%)\n * @prop --chat-window-fullscreen-width: Chat window fullscreen width in pixels or percent (80%)\n * @prop --chat-window-bg-color: Chat window background color (#ffffff)\n * @prop --chat-window-border-color: Chat window border color (#d1d5db)\n * @prop --chat-window-shadow-color: Chat window shadow color (rgba(0, 0, 0, 0.1))\n * @prop --chat-window-font-size: Default font size for text in the chat window (0.875em)\n * @prop --chat-window-font-size-sm: Font size for small text in the chat window (0.75em)\n *\n * @prop --header-bg-color: Header background color (transparent)\n * @prop --header-bg-hover-color: Header background color on hover (#f9fafb)\n * @prop --header-border-color: Header border color (#f3f4f6)\n * @prop --header-button-text-color: Header button text color (#6b7280)\n * @prop --header-button-bg-hover-color: Header button background on hover (#f3f4f6)\n * @prop --header-font-size: Header font size (1em)\n * @prop --header-button-icon-size: Icon size for buttons in the header (1.5em)\n * @prop --header-text-font-size: Font size for the text in the header (1em)\n * @prop --header-text-color: Color for the text in the header (#525762)\n *\n * @prop --starter-question-bg-color: Starter question background color (transparent)\n * @prop --starter-question-bg-hover-color: Starter question background on hover (#eff6ff)\n * @prop --starter-question-text-color: Starter question text color (#3b82f6)\n * @prop --starter-question-border-color: Starter question border color (#3b82f6)\n * @prop --starter-question-border-hover-color: Starter question border on hover (#2563eb)\n *\n * @prop --message-user-bg-color: User message background color (#e4edfb)\n * @prop --message-user-text-color: User message text color (#1f2937)\n * @prop --message-user-link-color: User message link color (#155dfc)\n\n * @prop --message-assistant-bg-color: Assistant message background color (#eae7e8)\n * @prop --message-assistant-text-color: Assistant message text color (--message-user-text-color)\n * @prop --message-assistant-link-color: Assistant message link color (--message-user-link-color)\n\n * @prop --message-system-bg-color: System message background color (#fbe4f8)\n * @prop --message-system-text-color: System message text color (--message-user-text-color)\n * @prop --message-system-link-color: System message link color (--message-user-link-color)\n\n * @prop --message-timestamp-color: User message timestamp color (rgba(255, 255, 255, 0.7))\n * @prop --message-timestamp-assistant-color: Assistant message timestamp color (rgba(75, 85, 99, 0.7))\n *\n * @prop --input-bg-color: Input area background color (transparent)\n * @prop --input-border-color: Input field border color (#d1d5db)\n * @prop --input-text-color: Input text color (#111827)\n * @prop --input-placeholder-color: Input placeholder text color (#6b7280)\n * @prop --input-outline-focus-color: Input field focus ring color (#3b82f6)\n *\n * @prop --send-button-bg-color: Send button background color (#3b82f6)\n * @prop --send-button-bg-hover-color: Send button background on hover (#2563eb)\n * @prop --send-button-text-color: Send button text color (#ffffff)\n * @prop --send-button-bg-disabled-color: Send button background when disabled (#d1d5db)\n * @prop --send-button-text-disabled-color: Send button text when disabled (#6b7280)\n *\n * @prop --loading-text-color: Loading text color (#6b7280)\n * @prop --loading-spinner-track-color: Loading spinner track color (#e5e7eb)\n * @prop --loading-spinner-fill-color: Loading spinner fill color (#3b82f6)\n * @prop --loading-spinner-size: Loading spinner size (1.25em)\n *\n * @prop --typing-progress-bg-color: Typing progress bar background color (#ade3ff)\n *\n * @prop --scrollbar-track-color: Scrollbar track color (#f3f4f6)\n * @prop --scrollbar-thumb-color: Scrollbar thumb color (#d1d5db)\n * @prop --scrollbar-thumb-hover-color: Scrollbar thumb hover color (#9ca3af)\n *\n * @prop --error-text-color: Error text color (#ef4444)\n * @prop --success-text-color: Success text color (#10b981)\n *\n * @prop --code-bg-user-color: Code background in user messages (--message-user-bg-color + 20% white)\n * @prop --code-text-user-color: Code text color in user messages (--message-user-text-color)\n * @prop --code-border-user-color: Code border in user messages (--message-user-bg-color + 20% black)\n * @prop --code-bg-assistant-color: Code background in assistant messages (--message-assistant-bg-color + 50% white)\n * @prop --code-text-assistant-color: Code text color in assistant messages (--message-assistant-text-color)\n * @prop --code-border-assistant-color: Code border in assistant messages (--message-assistant-bg-color + 10% black)\n *\n * @prop --confirmation-overlay-bg-color: Confirmation dialog overlay background color (rgba(0, 0, 0, 0.5))\n * @prop --confirmation-dialog-bg-color: Confirmation dialog background color (uses --chat-window-bg-color)\n * @prop --confirmation-dialog-border-color: Confirmation dialog border color (uses --chat-window-border-color)\n * @prop --confirmation-dialog-shadow-color: Confirmation dialog shadow color (uses --chat-window-shadow-color)\n * @prop --confirmation-title-color: Confirmation dialog title text color (uses #111827)\n * @prop --confirmation-title-font-size: Confirmation dialog title font size (1.125em)\n * @prop --confirmation-message-color: Confirmation dialog message text color (uses --loading-text-color)\n * @prop --confirmation-message-font-size: Confirmation dialog message font size (uses 1em)\n * @prop --confirmation-button-cancel-bg-color: Cancel button background color (uses --button-background-color-hover)\n * @prop --confirmation-button-cancel-bg-hover-color: Cancel button background on hover (uses #e5e7eb)\n * @prop --confirmation-button-cancel-text-color: Cancel button text color (uses --header-button-text-color)\n * @prop --confirmation-button-confirm-bg-color: Confirm button background color (uses --error-text-color)\n * @prop --confirmation-button-confirm-bg-hover-color: Confirm button background on hover (uses --error-text-color)\n * @prop --confirmation-button-confirm-text-color: Confirm button text color (uses --send-button-text-color)\n * @prop --file-attachment-button-bg-color: Attach file button background color (transparent)\n * @prop --file-attachment-button-bg-hover-color: Attach file button background hover color (--header-button-bg-hover-color)\n * @prop --file-attachment-button-text-color: Attach file button text color (--header-button-text-color)\n * @prop --file-attachment-button-text-disabled-color: Attach file button disabled text color (--send-button-text-disabled-color)\n *\n * @prop --selected-files-bg-color: Selected files container background color (--chat-window-bg-color)\n * @prop --selected-files-border-color: Selected files container border color (--header-border-color)\n *\n * @prop --selected-file-bg-color: Selected file item background color (--message-system-bg-color)\n * @prop --selected-file-font-size: Selected file item font size (--chat-window-font-size-sm)\n * @prop --selected-file-name-color: Selected file name color (--message-assistant-text-color)\n * @prop --selected-file-size-color: Selected file size display color (--input-placeholder-color)\n * @prop --selected-file-icon-size: Selected file item icon size (1.25em)\n * @prop --selected-file-remove-icon-color: Selected file remove icon color (--error-text-color)\n * @prop --selected-file-remove-icon-hover-color: Selected file remove icon hover (#dc2626)\n *\n * @prop --message-attachment-icon-size: Message attachment icon size (1em)\n */\n /* Global variables */\n --chat-z-index: 50;\n\n /* Button variables */\n --button-background-color: #ffffff;\n --button-background-color-hover: #f3f4f6;\n --button-text-color: #111827;\n --button-text-color-hover: #1d4ed8;\n --button-border-color: #d1d5db;\n --button-border-color-hover: #6b7280;\n --button-font-size: 1em; /* text-sm */\n --button-icon-size: 1.5em;\n\n /* Chat window variables */\n --chat-window-height: 60%;\n --chat-window-width: 25%;\n --chat-window-fullscreen-width: 80%;\n --chat-window-bg-color: #ffffff;\n --chat-window-border-color: #d1d5db;\n --chat-window-shadow-color: rgba(0, 0, 0, 0.1);\n --chat-window-font-size: 0.875em; /* text-sm */\n --chat-window-font-size-sm: 0.75em; /* text-xs */\n\n /* Header variables */\n --header-bg-color: transparent;\n --header-bg-hover-color: #f9fafb;\n --header-border-color: #f3f4f6;\n --header-button-text-color: #6b7280;\n --header-button-bg-hover-color: #f3f4f6;\n --header-font-size: 1em;\n --header-text-font-size: 1em;\n --header-text-color: #525762;\n --header-button-icon-size: 1.5em;\n\n /* Starter question variables */\n --starter-question-bg-color: transparent;\n --starter-question-bg-hover-color: #eff6ff;\n --starter-question-text-color: #3b82f6;\n --starter-question-border-color: #3b82f6;\n --starter-question-border-hover-color: #2563eb;\n\n /* Message bubble variables */\n --message-user-bg-color: #e4edfb;\n --message-user-text-color: #1f2937;\n --message-user-link-color: #155dfc;\n\n --message-assistant-bg-color: #eae7e8;\n --message-assistant-text-color: var(--message-user-text-color);\n --message-assistant-link-color: var(--message-user-link-color);\n\n --message-system-bg-color: #fbe4f8;\n --message-system-text-color: var(--message-user-text-color);\n --message-system-link-color: var(--message-user-link-color);\n\n --message-timestamp-color: rgba(255, 255, 255, 0.7);\n --message-timestamp-assistant-color: rgba(75, 85, 99, 0.7);\n\n /* Input area variables */\n --input-bg-color: transparent;\n --input-border-color: #d1d5db;\n --input-text-color: #111827;\n --input-placeholder-color: #6b7280;\n --input-outline-focus-color: #3b82f6;\n\n /* Send button variables */\n --send-button-bg-color: #3b82f6;\n --send-button-bg-hover-color: #2563eb;\n --send-button-text-color: #ffffff;\n --send-button-bg-disabled-color: #d1d5db;\n --send-button-text-disabled-color: #6b7280;\n\n /* Loading variables */\n --loading-text-color: #6b7280;\n --loading-spinner-track-color: #e5e7eb;\n --loading-spinner-fill-color: #3b82f6;\n --loading-spinner-size: 1.25em;\n\n /* Typing indicator variables */\n --typing-progress-bg-color: #ade3ff;\n\n /* Scrollbar variables */\n --scrollbar-track-color: #f3f4f6;\n --scrollbar-thumb-color: #d1d5db;\n --scrollbar-thumb-hover-color: #9ca3af;\n\n /* Error variables */\n --error-text-color: #ef4444;\n --success-text-color: #10b981; /* Complementary green to existing blue palette */;\n\n /* Markdown code variables */\n --code-bg-user-color: color-mix(in srgb, var(--message-user-bg-color) 80%, white 20%);\n --code-text-user-color: var(--message-user-text-color);\n --code-border-user-color: color-mix(in srgb, var(--message-user-bg-color) 90%, black 10%);\n --code-bg-assistant-color: color-mix(in srgb, var(--message-assistant-bg-color) 50%, white 50%);\n --code-text-assistant-color: var(--message-assistant-text-color);\n --code-border-assistant-color: color-mix(in srgb, var(--message-assistant-bg-color) 90%, black 10%);;\n\n --confirmation-overlay-bg-color: rgba(0, 0, 0, 0.5);\n --confirmation-dialog-bg-color: var(--chat-window-bg-color);\n --confirmation-dialog-border-color: var(--chat-window-border-color);\n --confirmation-dialog-shadow-color: var(--chat-window-shadow-color);\n --confirmation-title-color: #111827;\n --confirmation-title-font-size: 1.125em;\n --confirmation-message-color: var(--loading-text-color);\n --confirmation-message-font-size: 1em;\n --confirmation-button-cancel-bg-color: var(--button-background-color-hover);\n --confirmation-button-cancel-bg-hover-color: #e5e7eb;\n --confirmation-button-cancel-text-color: var(--header-button-text-color);\n --confirmation-button-confirm-bg-color: var(--error-text-color);\n --confirmation-button-confirm-bg-hover-color: var(--error-text-color);\n --confirmation-button-confirm-text-color: var(--send-button-text-color);\n\n /* File upload variables */\n --file-attachment-button-bg-color: transparent;\n --file-attachment-button-bg-hover-color: var(--header-button-bg-hover-color); /* #f3f4f6 */\n --file-attachment-button-text-color: var(--header-button-text-color); /* #6b7280 */\n --file-attachment-button-text-disabled-color: var(--send-button-text-disabled-color); /* #6b7280 */\n\n /* Selected files variables */\n --selected-files-bg-color: var(--chat-window-bg-color); /* transparent */\n --selected-files-border-color: var(--header-border-color); /* #f3f4f6 */\n\n /* Selected file item variables */\n --selected-file-bg-color: var(--message-system-bg-color); /* #f3f4f6 */\n\n /* Selected file text variables */\n --selected-file-font-size: var(--chat-window-font-size-sm);\n --selected-file-name-color: var(--message-assistant-text-color); /* #1f2937 */\n --selected-file-size-color: var(--input-placeholder-color); /* #6b7280 */\n\n /* Selected file icon variables */\n --selected-file-icon-size: 1.25em;\n --selected-file-remove-icon-color: var(--error-text-color); /* #ef4444 */\n --selected-file-remove-icon-hover-color: #dc2626; /* Darker red for hover */\n\n /* Message attachment variables */\n --message-attachment-icon-size: 1em;\n\n display: block;\n position: fixed;\n right: 30px;\n bottom: 30px;\n}\ntextarea {\n max-height: 8rem;\n min-height: 2.5rem;\n resize: none;\n overflow-y: auto;\n}\ntextarea::-webkit-scrollbar {\n height: 0.375rem;\n width: 0.375rem;\n}\ntextarea::-webkit-scrollbar-track {\n border-radius: 0.25rem;\n background-color: var(--scrollbar-track-color);\n}\ntextarea::-webkit-scrollbar-thumb {\n border-radius: 0.25rem;\n background-color: var(--scrollbar-thumb-color);\n}\ntextarea::-webkit-scrollbar-thumb:hover {\n background-color: var(--scrollbar-thumb-hover-color);\n}\n@keyframes spin {\n\n to {\n transform: rotate(360deg);\n }\n}\n.loading-spinner {\n animation: spin 1s linear infinite;\n border-radius: 9999px;\n border-width: 2px;\n border-color: var(--loading-spinner-track-color);\n border-top-color: var(--loading-spinner-fill-color);\n width: var(--loading-spinner-size);\n height: var(--loading-spinner-size);\n}\n.overflow-y-auto::-webkit-scrollbar {\n height: 0.375rem;\n width: 0.375rem;\n}\n.overflow-y-auto::-webkit-scrollbar-track {\n border-radius: 0.25rem;\n background-color: var(--scrollbar-track-color);\n}\n.overflow-y-auto::-webkit-scrollbar-thumb {\n border-radius: 0.25rem;\n background-color: var(--scrollbar-thumb-color);\n}\n.overflow-y-auto::-webkit-scrollbar-thumb:hover {\n background-color: var(--scrollbar-thumb-hover-color);\n}\n/* Markdown content styling for chat messages */\n.chat-markdown {\n color: var(--tw-prose-body);\n max-width: 65ch;\n}\n.chat-markdown :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.25em;\n margin-bottom: 1.25em;\n}\n.chat-markdown :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-lead);\n font-size: 1.25em;\n line-height: 1.6;\n margin-top: 1.2em;\n margin-bottom: 1.2em;\n}\n.chat-markdown :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-links);\n text-decoration: underline;\n font-weight: 500;\n}\n.chat-markdown :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-bold);\n font-weight: 600;\n}\n.chat-markdown :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: inherit;\n}\n.chat-markdown :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: inherit;\n}\n.chat-markdown :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: inherit;\n}\n.chat-markdown :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n list-style-type: decimal;\n margin-top: 1.25em;\n margin-bottom: 1.25em;\n padding-inline-start: 1.625em;\n}\n.chat-markdown :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n list-style-type: upper-alpha;\n}\n.chat-markdown :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n list-style-type: lower-alpha;\n}\n.chat-markdown :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n list-style-type: upper-alpha;\n}\n.chat-markdown :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n list-style-type: lower-alpha;\n}\n.chat-markdown :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n list-style-type: upper-roman;\n}\n.chat-markdown :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n list-style-type: lower-roman;\n}\n.chat-markdown :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n list-style-type: upper-roman;\n}\n.chat-markdown :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n list-style-type: lower-roman;\n}\n.chat-markdown :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n list-style-type: decimal;\n}\n.chat-markdown :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n list-style-type: disc;\n margin-top: 1.25em;\n margin-bottom: 1.25em;\n padding-inline-start: 1.625em;\n}\n.chat-markdown :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {\n font-weight: 400;\n color: var(--tw-prose-counters);\n}\n.chat-markdown :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {\n color: var(--tw-prose-bullets);\n}\n.chat-markdown :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-headings);\n font-weight: 600;\n margin-top: 1.25em;\n}\n.chat-markdown :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n border-color: var(--tw-prose-hr);\n border-top-width: 1px;\n margin-top: 3em;\n margin-bottom: 3em;\n}\n.chat-markdown :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-weight: 500;\n font-style: italic;\n color: var(--tw-prose-quotes);\n border-inline-start-width: 0.25rem;\n border-inline-start-color: var(--tw-prose-quote-borders);\n quotes: "\\201C""\\201D""\\2018""\\2019";\n margin-top: 1.6em;\n margin-bottom: 1.6em;\n padding-inline-start: 1em;\n}\n.chat-markdown :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {\n content: open-quote;\n}\n.chat-markdown :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {\n content: close-quote;\n}\n.chat-markdown :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-headings);\n font-weight: 800;\n font-size: 2.25em;\n margin-top: 0;\n margin-bottom: 0.8888889em;\n line-height: 1.1111111;\n}\n.chat-markdown :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-weight: 900;\n color: inherit;\n}\n.chat-markdown :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-headings);\n font-weight: 700;\n font-size: 1.5em;\n margin-top: 2em;\n margin-bottom: 1em;\n line-height: 1.3333333;\n}\n.chat-markdown :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-weight: 800;\n color: inherit;\n}\n.chat-markdown :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-headings);\n font-weight: 600;\n font-size: 1.25em;\n margin-top: 1.6em;\n margin-bottom: 0.6em;\n line-height: 1.6;\n}\n.chat-markdown :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-weight: 700;\n color: inherit;\n}\n.chat-markdown :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-headings);\n font-weight: 600;\n margin-top: 1.5em;\n margin-bottom: 0.5em;\n line-height: 1.5;\n}\n.chat-markdown :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-weight: 700;\n color: inherit;\n}\n.chat-markdown :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 2em;\n margin-bottom: 2em;\n}\n.chat-markdown :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n display: block;\n margin-top: 2em;\n margin-bottom: 2em;\n}\n.chat-markdown :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 2em;\n margin-bottom: 2em;\n}\n.chat-markdown :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-weight: 500;\n font-family: inherit;\n color: var(--tw-prose-kbd);\n box-shadow: 0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%), 0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%);\n font-size: 0.875em;\n border-radius: 0.3125rem;\n padding-top: 0.1875em;\n padding-inline-end: 0.375em;\n padding-bottom: 0.1875em;\n padding-inline-start: 0.375em;\n}\n.chat-markdown :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-code);\n font-weight: 600;\n font-size: 0.875em;\n}\n.chat-markdown :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {\n content: "`";\n}\n.chat-markdown :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {\n content: "`";\n}\n.chat-markdown :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: inherit;\n}\n.chat-markdown :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: inherit;\n}\n.chat-markdown :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: inherit;\n font-size: 0.875em;\n}\n.chat-markdown :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: inherit;\n font-size: 0.9em;\n}\n.chat-markdown :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: inherit;\n}\n.chat-markdown :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: inherit;\n}\n.chat-markdown :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: inherit;\n}\n.chat-markdown :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-pre-code);\n background-color: var(--tw-prose-pre-bg);\n overflow-x: auto;\n font-weight: 400;\n font-size: 0.875em;\n line-height: 1.7142857;\n margin-top: 1.7142857em;\n margin-bottom: 1.7142857em;\n border-radius: 0.375rem;\n padding-top: 0.8571429em;\n padding-inline-end: 1.1428571em;\n padding-bottom: 0.8571429em;\n padding-inline-start: 1.1428571em;\n}\n.chat-markdown :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n background-color: transparent;\n border-width: 0;\n border-radius: 0;\n padding: 0;\n font-weight: inherit;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n}\n.chat-markdown :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {\n content: none;\n}\n.chat-markdown :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {\n content: none;\n}\n.chat-markdown :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n width: 100%;\n table-layout: auto;\n margin-top: 2em;\n margin-bottom: 2em;\n font-size: 0.875em;\n line-height: 1.7142857;\n}\n.chat-markdown :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n border-bottom-width: 1px;\n border-bottom-color: var(--tw-prose-th-borders);\n}\n.chat-markdown :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-headings);\n font-weight: 600;\n vertical-align: bottom;\n padding-inline-end: 0.5714286em;\n padding-bottom: 0.5714286em;\n padding-inline-start: 0.5714286em;\n}\n.chat-markdown :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n border-bottom-width: 1px;\n border-bottom-color: var(--tw-prose-td-borders);\n}\n.chat-markdown :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n border-bottom-width: 0;\n}\n.chat-markdown :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n vertical-align: baseline;\n}\n.chat-markdown :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n border-top-width: 1px;\n border-top-color: var(--tw-prose-th-borders);\n}\n.chat-markdown :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n vertical-align: top;\n}\n.chat-markdown :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n text-align: start;\n}\n.chat-markdown :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n margin-bottom: 0;\n}\n.chat-markdown :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n color: var(--tw-prose-captions);\n font-size: 0.875em;\n line-height: 1.4285714;\n margin-top: 0.8571429em;\n}\n.chat-markdown {\n --tw-prose-body: #374151;\n --tw-prose-headings: #111827;\n --tw-prose-lead: #4b5563;\n --tw-prose-links: #111827;\n --tw-prose-bold: #111827;\n --tw-prose-counters: #6b7280;\n --tw-prose-bullets: #d1d5db;\n --tw-prose-hr: #e5e7eb;\n --tw-prose-quotes: #111827;\n --tw-prose-quote-borders: #e5e7eb;\n --tw-prose-captions: #6b7280;\n --tw-prose-kbd: #111827;\n --tw-prose-kbd-shadows: 17 24 39;\n --tw-prose-code: #111827;\n --tw-prose-pre-code: #e5e7eb;\n --tw-prose-pre-bg: #1f2937;\n --tw-prose-th-borders: #d1d5db;\n --tw-prose-td-borders: #e5e7eb;\n --tw-prose-invert-body: #d1d5db;\n --tw-prose-invert-headings: #fff;\n --tw-prose-invert-lead: #9ca3af;\n --tw-prose-invert-links: #fff;\n --tw-prose-invert-bold: #fff;\n --tw-prose-invert-counters: #9ca3af;\n --tw-prose-invert-bullets: #4b5563;\n --tw-prose-invert-hr: #374151;\n --tw-prose-invert-quotes: #f3f4f6;\n --tw-prose-invert-quote-borders: #374151;\n --tw-prose-invert-captions: #9ca3af;\n --tw-prose-invert-kbd: #fff;\n --tw-prose-invert-kbd-shadows: 255 255 255;\n --tw-prose-invert-code: #fff;\n --tw-prose-invert-pre-code: #d1d5db;\n --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);\n --tw-prose-invert-th-borders: #4b5563;\n --tw-prose-invert-td-borders: #374151;\n font-size: 1rem;\n line-height: 1.75;\n}\n.chat-markdown :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n margin-bottom: 0;\n}\n.chat-markdown :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n.chat-markdown :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-start: 0.375em;\n}\n.chat-markdown :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-start: 0.375em;\n}\n.chat-markdown :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0.75em;\n margin-bottom: 0.75em;\n}\n.chat-markdown :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.25em;\n}\n.chat-markdown :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-bottom: 1.25em;\n}\n.chat-markdown :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.25em;\n}\n.chat-markdown :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-bottom: 1.25em;\n}\n.chat-markdown :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0.75em;\n margin-bottom: 0.75em;\n}\n.chat-markdown :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.25em;\n margin-bottom: 1.25em;\n}\n.chat-markdown :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0.5em;\n padding-inline-start: 1.625em;\n}\n.chat-markdown :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n}\n.chat-markdown :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n}\n.chat-markdown :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n}\n.chat-markdown :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n}\n.chat-markdown :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-start: 0;\n}\n.chat-markdown :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-end: 0;\n}\n.chat-markdown :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-top: 0.5714286em;\n padding-inline-end: 0.5714286em;\n padding-bottom: 0.5714286em;\n padding-inline-start: 0.5714286em;\n}\n.chat-markdown :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-start: 0;\n}\n.chat-markdown :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-end: 0;\n}\n.chat-markdown :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 2em;\n margin-bottom: 2em;\n}\n.chat-markdown :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n}\n.chat-markdown :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-bottom: 0;\n}\n.chat-markdown {\n font-size: 0.875rem;\n line-height: 1.7142857;\n}\n.chat-markdown :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.1428571em;\n margin-bottom: 1.1428571em;\n}\n.chat-markdown :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-size: 1.2857143em;\n line-height: 1.5555556;\n margin-top: 0.8888889em;\n margin-bottom: 0.8888889em;\n}\n.chat-markdown :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.3333333em;\n margin-bottom: 1.3333333em;\n padding-inline-start: 1.1111111em;\n}\n.chat-markdown :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-size: 2.1428571em;\n margin-top: 0;\n margin-bottom: 0.8em;\n line-height: 1.2;\n}\n.chat-markdown :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-size: 1.4285714em;\n margin-top: 1.6em;\n margin-bottom: 0.8em;\n line-height: 1.4;\n}\n.chat-markdown :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-size: 1.2857143em;\n margin-top: 1.5555556em;\n margin-bottom: 0.4444444em;\n line-height: 1.5555556;\n}\n.chat-markdown :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.4285714em;\n margin-bottom: 0.5714286em;\n line-height: 1.4285714;\n}\n.chat-markdown :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.7142857em;\n margin-bottom: 1.7142857em;\n}\n.chat-markdown :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.7142857em;\n margin-bottom: 1.7142857em;\n}\n.chat-markdown :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n margin-bottom: 0;\n}\n.chat-markdown :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.7142857em;\n margin-bottom: 1.7142857em;\n}\n.chat-markdown :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-size: 0.8571429em;\n border-radius: 0.3125rem;\n padding-top: 0.1428571em;\n padding-inline-end: 0.3571429em;\n padding-bottom: 0.1428571em;\n padding-inline-start: 0.3571429em;\n}\n.chat-markdown :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-size: 0.8571429em;\n}\n.chat-markdown :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-size: 0.9em;\n}\n.chat-markdown :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-size: 0.8888889em;\n}\n.chat-markdown :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-size: 0.8571429em;\n line-height: 1.6666667;\n margin-top: 1.6666667em;\n margin-bottom: 1.6666667em;\n border-radius: 0.25rem;\n padding-top: 0.6666667em;\n padding-inline-end: 1em;\n padding-bottom: 0.6666667em;\n padding-inline-start: 1em;\n}\n.chat-markdown :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.1428571em;\n margin-bottom: 1.1428571em;\n padding-inline-start: 1.5714286em;\n}\n.chat-markdown :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.1428571em;\n margin-bottom: 1.1428571em;\n padding-inline-start: 1.5714286em;\n}\n.chat-markdown :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0.2857143em;\n margin-bottom: 0.2857143em;\n}\n.chat-markdown :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-start: 0.4285714em;\n}\n.chat-markdown :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-start: 0.4285714em;\n}\n.chat-markdown :where(.prose-sm > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0.5714286em;\n margin-bottom: 0.5714286em;\n}\n.chat-markdown :where(.prose-sm > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.1428571em;\n}\n.chat-markdown :where(.prose-sm > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-bottom: 1.1428571em;\n}\n.chat-markdown :where(.prose-sm > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.1428571em;\n}\n.chat-markdown :where(.prose-sm > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-bottom: 1.1428571em;\n}\n.chat-markdown :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0.5714286em;\n margin-bottom: 0.5714286em;\n}\n.chat-markdown :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.1428571em;\n margin-bottom: 1.1428571em;\n}\n.chat-markdown :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.1428571em;\n}\n.chat-markdown :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0.2857143em;\n padding-inline-start: 1.5714286em;\n}\n.chat-markdown :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 2.8571429em;\n margin-bottom: 2.8571429em;\n}\n.chat-markdown :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n}\n.chat-markdown :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n}\n.chat-markdown :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n}\n.chat-markdown :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n}\n.chat-markdown :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-size: 0.8571429em;\n line-height: 1.5;\n}\n.chat-markdown :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-end: 1em;\n padding-bottom: 0.6666667em;\n padding-inline-start: 1em;\n}\n.chat-markdown :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-start: 0;\n}\n.chat-markdown :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-end: 0;\n}\n.chat-markdown :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-top: 0.6666667em;\n padding-inline-end: 1em;\n padding-bottom: 0.6666667em;\n padding-inline-start: 1em;\n}\n.chat-markdown :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-start: 0;\n}\n.chat-markdown :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n padding-inline-end: 0;\n}\n.chat-markdown :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 1.7142857em;\n margin-bottom: 1.7142857em;\n}\n.chat-markdown :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n margin-bottom: 0;\n}\n.chat-markdown :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n font-size: 0.8571429em;\n line-height: 1.3333333;\n margin-top: 0.6666667em;\n}\n.chat-markdown :where(.prose-sm > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-top: 0;\n}\n.chat-markdown :where(.prose-sm > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {\n margin-bottom: 0;\n}\n.chat-markdown {\n --tw-prose-body: #374151;\n --tw-prose-headings: #111827;\n --tw-prose-lead: #4b5563;\n --tw-prose-links: #111827;\n --tw-prose-bold: #111827;\n --tw-prose-counters: #6b7280;\n --tw-prose-bullets: #d1d5db;\n --tw-prose-hr: #e5e7eb;\n --tw-prose-quotes: #111827;\n --tw-prose-quote-borders: #e5e7eb;\n --tw-prose-captions: #6b7280;\n --tw-prose-kbd: #111827;\n --tw-prose-kbd-shadows: 17 24 39;\n --tw-prose-code: #111827;\n --tw-prose-pre-code: #e5e7eb;\n --tw-prose-pre-bg: #1f2937;\n --tw-prose-th-borders: #d1d5db;\n --tw-prose-td-borders: #e5e7eb;\n --tw-prose-invert-body: #d1d5db;\n --tw-prose-invert-headings: #fff;\n --tw-prose-invert-lead: #9ca3af;\n --tw-prose-invert-links: #fff;\n --tw-prose-invert-bold: #fff;\n --tw-prose-invert-counters: #9ca3af;\n --tw-prose-invert-bullets: #4b5563;\n --tw-prose-invert-hr: #374151;\n --tw-prose-invert-quotes: #f3f4f6;\n --tw-prose-invert-quote-borders: #374151;\n --tw-prose-invert-captions: #9ca3af;\n --tw-prose-invert-kbd: #fff;\n --tw-prose-invert-kbd-shadows: 255 255 255;\n --tw-prose-invert-code: #fff;\n --tw-prose-invert-pre-code: #d1d5db;\n --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);\n --tw-prose-invert-th-borders: #4b5563;\n --tw-prose-invert-td-borders: #374151;\n max-width: none;\n}\n.chat-markdown :is(:where(a):not(:where([class~="not-prose"],[class~="not-prose"] *))) {\n text-decoration-line: none;\n}\n.chat-markdown :is(:where(a):not(:where([class~="not-prose"],[class~="not-prose"] *))):hover {\n text-decoration-line: underline;\n}\n.chat-markdown {\n font-size: 1em;\n}\n/* override spacing */\n.chat-markdown > * {\n margin-top: 0.1em;\n margin-bottom: 0.1em;\n}\n.message-bubble-assistant .chat-markdown {\n --tw-prose-body: var(--message-assistant-text-color);\n --tw-prose-headings: var(--message-assistant-text-color);\n --tw-prose-lead: var(--message-assistant-text-color);\n --tw-prose-links: var(--message-assistant-link-color);\n --tw-prose-bold: var(--message-assistant-text-color);\n --tw-prose-counters: var(--message-assistant-text-color);\n --tw-prose-bullets: var(--message-assistant-text-color);\n --tw-prose-hr: var(--message-assistant-text-color);\n --tw-prose-quotes: var(--message-assistant-text-color);\n --tw-prose-quote-borders: var(--message-assistant-text-color);\n --tw-prose-captions: var(--message-assistant-text-color);\n --tw-prose-kbd: var(--message-assistant-text-color);\n --tw-prose-kbd-shadows: var(--message-assistant-text-color);\n --tw-prose-code: var(--code-text-assistant-color);\n --tw-prose-pre-code: var(--code-text-assistant-color);\n --tw-prose-pre-bg: var(--code-bg-assistant-color);\n --tw-prose-th-borders: var(--message-assistant-text-color);\n --tw-prose-td-borders: var(--message-assistant-text-color);\n}\n.message-bubble-user .chat-markdown {\n --tw-prose-body: var(--message-user-text-color);\n --tw-prose-headings: var(--message-user-text-color);\n --tw-prose-lead: var(--message-user-text-color);\n --tw-prose-links: var(--message-user-link-color);\n --tw-prose-bold: var(--message-user-text-color);\n --tw-prose-counters: var(--message-user-text-color);\n --tw-prose-bullets: var(--message-user-text-color);\n --tw-prose-hr: var(--message-user-text-color);\n --tw-prose-quotes: var(--message-user-text-color);\n --tw-prose-quote-borders: var(--message-user-text-color);\n --tw-prose-captions: var(--message-user-text-color);\n --tw-prose-kbd: var(--message-user-text-color);\n --tw-prose-kbd-shadows: var(--message-user-text-color);\n --tw-prose-code: var(--code-text-user-color);\n --tw-prose-pre-code: var(--code-text-user-color);\n --tw-prose-pre-bg: var(--code-bg-user-color);\n --tw-prose-th-borders: var(--message-user-text-color);\n --tw-prose-td-borders: var(--message-user-text-color);\n}\n.message-bubble-system .chat-markdown {\n --tw-prose-body: var(--message-system-text-color);\n --tw-prose-headings: var(--message-system-text-color);\n --tw-prose-lead: var(--message-system-text-color);\n --tw-prose-links: var(--message-system-link-color);\n --tw-prose-bold: var(--message-system-text-color);\n --tw-prose-counters: var(--message-system-text-color);\n --tw-prose-bullets: var(--message-system-text-color);\n --tw-prose-hr: var(--message-system-text-color);\n --tw-prose-quotes: var(--message-system-text-color);\n --tw-prose-quote-borders: var(--message-system-text-color);\n --tw-prose-captions: var(--message-system-text-color);\n --tw-prose-kbd: var(--message-system-text-color);\n --tw-prose-kbd-shadows: var(--message-system-text-color);\n --tw-prose-code: var(--message-system-text-color);\n --tw-prose-pre-code: var(--message-system-text-color);\n --tw-prose-pre-bg: var(--message-system-text-color);\n --tw-prose-th-borders: var(--message-system-text-color);\n --tw-prose-td-borders: var(--message-system-text-color);\n}\n.message-bubble-user .chat-markdown pre {\n border: 1px solid var(--code-border-user-color);\n}\n.message-bubble-assistant .chat-markdown pre {\n border: 1px solid var(--code-border-assistant-color);\n}\n.loading:after {\n content: \' .\';\n}\n/* File Upload Button */\n.file-attachment-button {\n border-radius: 0.375rem;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 200ms;\n}\n.file-attachment-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.file-attachment-button {\n padding: 0.375em;\n background-color: var(--file-attachment-button-bg-color);\n color: var(--file-attachment-button-text-color);\n}\n.file-attachment-button svg {\n width: 1.5em;\n height: 1.5em;\n}\n.file-attachment-button:hover:not(:disabled) {\n background-color: var(--file-attachment-button-bg-hover-color);\n}\n.file-attachment-button:disabled {\n color: var(--file-attachment-button-text-disabled-color);\n}\n/* Selected Files Container */\n.selected-files-container {\n padding: 1em 1em 0.5em 1em;\n background-color: var(--selected-files-bg-color);\n border-top: 1px solid var(--selected-files-border-color);\n}\n/* Selected File Item */\n.selected-file-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n background-color: var(--selected-file-bg-color);\n border-radius: 0.375em;\n padding: 0.25em 0.5em;\n font-size: var(--selected-file-font-size);\n color: var(--selected-file-name-color);\n}\n.selected-file-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.selected-file-icon svg {\n width: var(--selected-file-icon-size);\n height: var(--selected-file-icon-size);\n}\n.selected-file-size {\n color: var(--selected-file-size-color);\n}\n.selected-file-error {\n color: var(--error-text-color);\n}\n.selected-file-success-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--success-text-color);\n width: var(--selected-file-icon-size);\n height: var(--selected-file-icon-size);\n}\n.selected-file-remove-button {\n font-weight: 700;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 200ms;\n color: var(--selected-file-remove-icon-color);\n padding: 0.375em;\n}\n.selected-file-remove-button svg {\n width: var(--selected-file-icon-size);\n height: var(--selected-file-icon-size);\n}\n.selected-file-remove-button:hover {\n color: var(--selected-file-remove-icon-hover-color);\n}\n/* Message Attachments */\n.message-attachments {\n margin-top: 0.5em;\n}\n.message-attachments > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25em * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25em * var(--tw-space-y-reverse));\n}\n.message-attachments {\n font-size: var(--chat-window-font-size-sm);\n}\n.message-attachment-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--message-attachment-icon-size);\n height: var(--message-attachment-icon-size);\n}\n/* Update Send Button for Upload State */\n.send-button-disabled {\n cursor: not-allowed;\n background-color: var(--send-button-bg-disabled-color);\n color: var(--send-button-text-disabled-color);\n}\n';const be=class{constructor(t){e(this,t);this.apiBaseUrl="https://chatbots.dimagi.com";this.buttonShape="square";this.newChatConfirmationMessage="Starting a new chat will clear your current conversation. Continue?";this.visible=false;this.position="right";this.persistentSession=true;this.persistentSessionExpire=60*24;this.allowFullScreen=true;this.allowAttachments=false;this.typingIndicatorText="Preparing response";this.error="";this.messages=[];this.isLoading=false;this.isTyping=false;this.messageInput="";this.currentPollTaskId="";this.isDragging=false;this.dragOffset={x:0,y:0};this.windowPosition={x:0,y:0};this.fullscreenPosition={x:0};this.parsedWelcomeMessages=[];this.parsedStarterQuestions=[];this.isFullscreen=false;this.showNewChatConfirmation=false;this.selectedFiles=[];this.isUploadingFiles=false;this.chatWindowHeight=600;this.chatWindowWidth=450;this.chatWindowFullscreenWidth=1024;this.positionInitialized=false;this.handleMouseDown=t=>{if(!this.isFullscreen&&window.innerWidth<be.MOBILE_BREAKPOINT)return;if(t.target.closest("button"))return;const e=this.getPointerCoordinates(t);if(!e)return;this.startDrag(e);this.addEventListeners();t.preventDefault()};this.handleMouseMove=t=>{const e=this.getPointerCoordinates(t);if(!e)return;this.updateDragPosition(e)};this.handleMouseUp=()=>{this.endDrag()};this.handleTouchStart=t=>{if(t.target.closest("button"))return;if(!this.chatWindowRef)return;const e=this.getPointerCoordinates(t);if(!e)return;this.startDrag(e);this.addEventListeners();t.preventDefault()};this.handleTouchMove=t=>{const e=this.getPointerCoordinates(t);if(!e)return;this.updateDragPosition(e);t.preventDefault()};this.handleTouchEnd=()=>{this.endDrag()};this.handleWindowResize=()=>{this.positionInitialized=false;this.initializePosition()}}componentWillLoad(){if(!this.chatbotId){this.error="Chatbot ID is required";return}if(this.persistentSession&&this.isLocalStorageAvailable()){const{sessionId:t,messages:e}=this.loadSessionFromStorage();if(t&&e){this.sessionId=t;this.messages=e}}this.parseWelcomeMessages();this.parseStarterQuestions()}componentDidLoad(){const t=getComputedStyle(this.host);const e=t.getPropertyValue("--chat-window-height");const n=t.getPropertyValue("--chat-window-width");const o=t.getPropertyValue("--chat-window-fullscreen-width");this.chatWindowHeight=me(e,window.innerHeight,this.chatWindowHeight);this.chatWindowWidth=me(n,window.innerWidth,this.chatWindowWidth);this.chatWindowFullscreenWidth=me(o,window.innerWidth,this.chatWindowFullscreenWidth);if(this.visible){this.initializePosition()}if(this.visible&&!this.sessionId){this.startSession()}else if(this.visible&&this.sessionId){this.startPolling()}window.addEventListener("resize",this.handleWindowResize)}disconnectedCallback(){this.cleanup();this.removeEventListeners();window.removeEventListener("resize",this.handleWindowResize)}addErrorMessage(t){const e={created_at:(new Date).toISOString(),role:"system",content:`**Error:** ${t}\nPlease try again.`,attachments:[]};this.messages=[...this.messages,e];this.saveSessionToStorage();this.scrollToBottom()}handleError(t){this.addErrorMessage(t);this.isLoading=false;this.isTyping=false;this.isUploadingFiles=false;this.currentPollTaskId=""}parseJSONProp(t,e){try{if(t){try{return JSON.parse(t)}catch(e){const n=t.replace(/'/g,'"');return JSON.parse(n)}}}catch(t){console.warn(`Failed to parse ${e}:`,t)}return[]}parseWelcomeMessages(){this.parsedWelcomeMessages=this.parseJSONProp(this.welcomeMessages,"welcome messages")}parseStarterQuestions(){this.parsedStarterQuestions=this.parseJSONProp(this.starterQuestions,"starter questions")}cleanup(){if(this.pollingIntervalRef){clearInterval(this.pollingIntervalRef);this.pollingIntervalRef=undefined}this.currentPollTaskId=""}getApiBaseUrl(){return this.apiBaseUrl||window.location.origin}getApiHeaders(){const t={"Content-Type":"application/json"};const e=pe(this.getApiBaseUrl());if(e){t["X-CSRFToken"]=e}return t}async startSession(){try{this.isLoading=true;const t=this.getOrGenerateUserId();const e={chatbot_id:this.chatbotId,session_data:{source:"widget",page_url:window.location.href},participant_remote_id:t};if(this.userName){e.participant_name=this.userName}const n=await fetch(`${this.getApiBaseUrl()}/api/chat/start/`,{method:"POST",headers:this.getApiHeaders(),body:JSON.stringify(e)});if(!n.ok){this.handleError(`Failed to start session: ${n.statusText}`);return}const o=await n.json();this.sessionId=o.session_id;this.saveSessionToStorage();if(o.seed_message_task_id){this.isTyping=true;this.currentPollTaskId=o.seed_message_task_id;await this.pollTaskResponse()}this.startPolling()}catch(t){this.handleError("Failed to start chat session")}finally{this.isLoading=false}}markPendingFilesWithError(t){this.selectedFiles=this.selectedFiles.map((e=>{if(!e.error&&!e.uploaded){return Object.assign(Object.assign({},e),{error:t})}return e}))}async uploadFiles(){if(this.selectedFiles.length===0||!this.sessionId||!this.allowAttachments){return[]}this.isUploadingFiles=true;const t=[];try{const e=new FormData;for(const n of this.selectedFiles){if(!n.error&&!n.uploaded){e.append("files",n.file)}else if(n.uploaded){t.push(n.uploaded.id)}}const n=this.getOrGenerateUserId();e.append("participant_remote_id",n);if(this.userName){e.append("participant_name",this.userName)}if(e.has("files")){const n=await fetch(`${this.getApiBaseUrl()}/api/chat/${this.sessionId}/upload/`,{method:"POST",body:e});if(!n.ok){const e=await n.json();const o=e.error||"Failed to upload files";this.markPendingFilesWithError(o);return t}const o=await n.json();let r=0;this.selectedFiles=this.selectedFiles.map((t=>{if(!t.error&&!t.uploaded){return Object.assign(Object.assign({},t),{uploaded:o.files[r++]})}return t}));t.push(...o.files.map((t=>t.id)))}return t}catch(e){const n=e instanceof Error?e.message:"Failed to upload files";this.markPendingFilesWithError(n);return t}finally{this.isUploadingFiles=false}}async sendMessage(t){if(!this.sessionId||!t.trim())return;try{let e=[];if(this.allowAttachments&&this.selectedFiles.length>0){e=await this.uploadFiles();const t=this.selectedFiles.some((t=>t.error));if(t){this.handleError("Please remove or fix file errors before sending your message.");return}}if(this.messages.length===0&&this.parsedWelcomeMessages.length>0){const t=new Date;const e=this.parsedWelcomeMessages.map(((e,n)=>({created_at:new Date(t.getTime()-(this.parsedWelcomeMessages.length-n)*1e3).toISOString(),role:"assistant",content:e,attachments:[]})));this.messages=[...this.messages,...e]}const n={created_at:(new Date).toISOString(),role:"user",content:t.trim(),attachments:this.allowAttachments?this.selectedFiles.filter((t=>!t.error&&t.uploaded)).map((t=>({name:t.file.name,content_type:t.file.type,size:t.file.size}))):[]};this.messages=[...this.messages,n];this.saveSessionToStorage();this.messageInput="";if(this.allowAttachments){this.selectedFiles=[]}this.scrollToBottom();this.isTyping=true;const o={message:t.trim()};if(this.allowAttachments&&e.length>0){o.attachment_ids=e}const r=await fetch(`${this.getApiBaseUrl()}/api/chat/${this.sessionId}/message/`,{method:"POST",headers:this.getApiHeaders(),body:JSON.stringify(o)});if(!r.ok){throw new Error(`Failed to send message: ${r.statusText}`)}const s=await r.json();if(s.status==="error"){throw new Error(s.error||"Failed to send message")}this.currentPollTaskId=s.task_id;await this.pollTaskResponse()}catch(t){const e=t instanceof Error?t.message:"Failed to send message";this.handleError(e)}}handleStarterQuestionClick(t){this.sendMessage(t)}async pollTaskResponse(){if(!this.sessionId||!this.currentPollTaskId)return;this.pauseMessagePolling();let t=0;const e=async()=>{if(!this.sessionId||!this.currentPollTaskId)return;try{const n=await fetch(`${this.getApiBaseUrl()}/api/chat/${this.sessionId}/${this.currentPollTaskId}/poll/`);if(!n.ok){throw new Error(`Failed to poll task: ${n.statusText}`)}const o=await n.json();if(o.error){throw new Error(o.error)}if(o.status==="complete"&&o.message){this.messages=[...this.messages,o.message];this.saveSessionToStorage();this.scrollToBottom();this.isTyping=false;this.currentPollTaskId="";this.resumeMessagePolling();this.focusInput();return}if(o.status==="processing"&&t<be.TASK_POLLING_MAX_ATTEMPTS){t++;setTimeout(e,be.TASK_POLLING_INTERVAL_MS)}else if(t>=be.TASK_POLLING_MAX_ATTEMPTS){const t={created_at:(new Date).toISOString(),role:"system",content:"The response is taking longer than expected. The system may be experiencing delays. Please try sending your message again.",attachments:[]};this.messages=[...this.messages,t];this.saveSessionToStorage();this.scrollToBottom();this.isTyping=false;this.currentPollTaskId="";this.resumeMessagePolling();this.focusInput()}}catch(t){const e=t instanceof Error?t.message:"Failed to get response";this.handleError(e);this.currentPollTaskId="";this.resumeMessagePolling()}};await e()}startPolling(){if(this.pollingIntervalRef)return;this.pollingIntervalRef=setInterval((async()=>{if(!this.currentPollTaskId){await this.pollForMessages()}}),be.MESSAGE_POLLING_INTERVAL_MS)}pauseMessagePolling(){if(this.pollingIntervalRef){clearInterval(this.pollingIntervalRef);this.pollingIntervalRef=undefined}}resumeMessagePolling(){this.startPolling()}async pollForMessages(){if(!this.sessionId)return;try{const t=new URL(`${this.getApiBaseUrl()}/api/chat/${this.sessionId}/poll/`);if(this.messages&&this.messages.length>0){t.searchParams.set("since",this.messages.at(-1).created_at)}const e=await fetch(t.toString());if(!e.ok)return;const n=await e.json();if(n.messages.length>0){this.messages=[...this.messages,...n.messages];this.saveSessionToStorage();this.scrollToBottom();this.focusInput()}}catch(t){}}scrollToBottom(t=false){setTimeout((()=>{if(this.messageListRef){const e=this.messageListRef.lastElementChild;if(!t&&e){const t=this.messageListRef.getBoundingClientRect();const n=e.getBoundingClientRect();const o=this.messageListRef.scrollTop;const r=n.top-t.top;const s=o+r-t.height/2;this.messageListRef.scrollTo({top:s,behavior:"smooth"})}else{this.messageListRef.scrollTop=this.messageListRef.scrollHeight}}}),be.SCROLL_DELAY_MS)}focusInput(){setTimeout((()=>{if(this.textareaRef&&!this.isTyping){this.textareaRef.focus()}}),be.FOCUS_DELAY_MS)}handleKeyPress(t){if(t.key==="Enter"&&!t.shiftKey){t.preventDefault();this.sendMessage(this.messageInput)}}handleInputChange(t){this.messageInput=t.target.value}handleFileSelect(t){var e;if(!this.allowAttachments)return;const n=t.target;if(!n.files||n.files.length===0)return;const o=[];let r=this.selectedFiles.reduce(((t,e)=>t+e.file.size),0);for(let t=0;t<n.files.length;t++){const s=n.files[t];const i="."+((e=s.name.split(".").pop())===null||e===void 0?void 0:e.toLowerCase());if(!be.SUPPORTED_FILE_EXTENSIONS.includes(i)){o.push({file:s,error:`File type ${i} not supported`});continue}const a=s.size/(1024*1024);if(a>be.MAX_FILE_SIZE_MB){o.push({file:s,error:`File exceeds ${be.MAX_FILE_SIZE_MB}MB limit`});continue}r+=s.size;const l=r/(1024*1024);if(l>be.MAX_TOTAL_SIZE_MB){o.push({file:s,error:`Total size exceeds ${be.MAX_TOTAL_SIZE_MB}MB limit`});continue}o.push({file:s})}this.selectedFiles=[...this.selectedFiles,...o];n.value=""}removeSelectedFile(t){if(!this.allowAttachments)return;this.selectedFiles=this.selectedFiles.filter(((e,n)=>n!==t))}formatFileSize(t){if(t===0)return"0 KB";const e=1024;if(t<e*e){return Math.round(t/e*100)/100+" KB"}else{return Math.round(t/(e*e)*100)/100+" MB"}}formatTime(t){const e=new Date(t);return e.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}toggleWindowVisibility(){this.visible=!this.visible}async visibilityHandler(t){if(t){this.initializePosition()}if(t&&!this.sessionId){await this.startSession()}else if(!t){this.pauseMessagePolling()}else{this.scrollToBottom(true);this.resumeMessagePolling()}}setPosition(t){if(t===this.position)return;this.position=t}getPositionClasses(){if(this.isFullscreen){return"chat-window-fullscreen"}const t="chat-window-normal";const e=this.isDragging?" chat-window-dragging":"";return t+e}getFullscreenBounds(){const t=window.innerWidth;const e=Math.min(t,this.chatWindowFullscreenWidth);const n=(t-e)/2;const o=(t-e)/2;console.log(t,e,n,o);return{windowWidth:t,actualChatWidth:e,centeredX:n,maxOffset:o}}getPositionStyles(){if(this.isFullscreen){const{centeredX:t}=this.getFullscreenBounds();const e=t+this.fullscreenPosition.x;return{left:`${e}px`,top:"0px",transform:"none"}}return{left:`${this.windowPosition.x}px`,top:`${this.windowPosition.y}px`}}initializePosition(){if(this.positionInitialized){return}this.positionInitialized=true;const t=window.innerWidth;const e=window.innerHeight;const n=t<be.MOBILE_BREAKPOINT?t:this.chatWindowWidth;const o=t<be.MOBILE_BREAKPOINT;if(o){this.windowPosition={x:0,y:0};return}switch(this.position){case"left":this.windowPosition={x:be.WINDOW_MARGIN,y:e-this.chatWindowHeight-be.WINDOW_MARGIN};break;case"right":this.windowPosition={x:t-n-be.WINDOW_MARGIN,y:e-this.chatWindowHeight-be.WINDOW_MARGIN};break;case"center":this.windowPosition={x:(t-n)/2,y:(e-this.chatWindowHeight)/2};break}}getPointerCoordinates(t){if(t instanceof MouseEvent){return{clientX:t.clientX,clientY:t.clientY}}else if(t instanceof TouchEvent&&t.touches.length===1){const e=t.touches[0];return{clientX:e.clientX,clientY:e.clientY}}return null}startDrag(t){if(!this.chatWindowRef)return;this.isDragging=true;if(this.isFullscreen){this.dragOffset={x:t.clientX,y:t.clientY}}else{const e=this.chatWindowRef.getBoundingClientRect();this.dragOffset={x:t.clientX-e.left,y:t.clientY-e.top}}}updateDragPosition(t){if(!this.isDragging)return;if(this.isFullscreen){const{maxOffset:e}=this.getFullscreenBounds();const n=t.clientX-this.dragOffset.x;this.fullscreenPosition={x:Math.max(-e,Math.min(e,n))}}else{const e=t.clientX-this.dragOffset.x;const n=t.clientY-this.dragOffset.y;const o=window.innerWidth;const r=window.innerHeight;const s=o<be.MOBILE_BREAKPOINT?o:this.chatWindowWidth;const i=this.chatWindowRef.offsetHeight;this.windowPosition={x:Math.max(0,Math.min(e,o-s)),y:Math.max(0,Math.min(n,r-i))}}}endDrag(){this.isDragging=false;this.removeEventListeners()}addEventListeners(){document.addEventListener("mousemove",this.handleMouseMove);document.addEventListener("mouseup",this.handleMouseUp);document.addEventListener("touchmove",this.handleTouchMove,{passive:false});document.addEventListener("touchend",this.handleTouchEnd)}removeEventListeners(){document.removeEventListener("mousemove",this.handleMouseMove);document.removeEventListener("mouseup",this.handleMouseUp);document.removeEventListener("touchmove",this.handleTouchMove);document.removeEventListener("touchend",this.handleTouchEnd)}getDefaultIconUrl(){return`${this.getApiBaseUrl()}/static/images/favicons/favicon.svg`}getButtonClasses(){const t=this.buttonText&&this.buttonText.trim();const e=t?"chat-btn-text":"chat-btn-icon";const n=this.buttonShape==="round"?"round":"";return`${e} ${n}`.trim()}renderButton(){const e=this.buttonText&&this.buttonText.trim();const n=this.iconUrl&&this.iconUrl.trim();const o=n?this.iconUrl:this.getDefaultIconUrl();const r=this.getButtonClasses();if(e){return t("button",{class:r,onClick:()=>this.toggleWindowVisibility(),"aria-label":`Open chat - ${this.buttonText}`,title:this.buttonText},t("img",{src:o,alt:""}),t("span",null,this.buttonText))}else{return t("button",{class:r,onClick:()=>this.toggleWindowVisibility(),"aria-label":"Open chat",title:"Open chat"},t("img",{src:o,alt:"Chat"}))}}getStorageKeys(){return{sessionId:`ocs-chat-session-${this.chatbotId}`,messages:`ocs-chat-messages-${this.chatbotId}`,lastActivity:`ocs-chat-activity-${this.chatbotId}`}}saveSessionToStorage(){if(!this.persistentSession){return}const t=this.getStorageKeys();try{if(this.sessionId){localStorage.setItem(t.sessionId,this.sessionId);localStorage.setItem(t.lastActivity,(new Date).toISOString())}localStorage.setItem(t.messages,JSON.stringify(this.messages))}catch(t){console.warn("Failed to save chat session to localStorage:",t)}}loadSessionFromStorage(){const t=this.getStorageKeys();try{if(this.persistentSessionExpire>0){const e=localStorage.getItem(t.lastActivity);if(e){const t=new Date(e);const n=(Date.now()-t.getTime())/(1e3*60);if(n>this.persistentSessionExpire){this.clearSessionStorage();return{messages:[]}}}}const e=localStorage.getItem(t.sessionId);const n=e?e:undefined;const o=localStorage.getItem(t.messages);let r=[];if(o){try{const t=JSON.parse(o);r=Array.isArray(t)?t:[]}catch(t){console.warn("Failed to parse messages from localStorage:",t);r=[]}}return{sessionId:n,messages:r}}catch(t){console.warn("Failed to load chat session from localStorage, starting new session:",t);return{messages:[]}}}getOrGenerateUserId(){if(this.userId){return this.userId}if(this.generatedUserId){return this.generatedUserId}const t=`ocs-user-id`;const e=localStorage.getItem(t);if(e){this.generatedUserId=e;return e}const n=new Uint8Array(9);window.crypto.getRandomValues(n);const o=Array.from(n,(t=>t.toString(36))).join("").substr(0,9);const r=`ocs:${Date.now()}_${o}`;this.generatedUserId=r;localStorage.setItem(t,r);return r}clearSessionStorage(){const t=this.getStorageKeys();try{localStorage.removeItem(t.sessionId);localStorage.removeItem(t.messages);localStorage.removeItem(t.lastActivity)}catch(t){console.warn("Failed to clear chat session from localStorage:",t)}}isLocalStorageAvailable(){try{localStorage.setItem(be.LOCALSTORAGE_TEST_KEY,"test");localStorage.removeItem(be.LOCALSTORAGE_TEST_KEY);return true}catch(t){return false}}showConfirmationDialog(){this.showNewChatConfirmation=true}hideConfirmationDialog(){this.showNewChatConfirmation=false}async confirmNewChat(){this.hideConfirmationDialog();await this.actuallyStartNewChat()}async actuallyStartNewChat(){this.clearSessionStorage();this.sessionId=undefined;this.messages=[];this.isTyping=false;this.currentPollTaskId="";if(this.allowAttachments){this.selectedFiles=[]}this.cleanup();await this.startSession()}toggleFullscreen(){this.isFullscreen=!this.isFullscreen;this.fullscreenPosition={x:0}}render(){if(this.error&&!this.sessionId){return t(n,null,t("p",{class:"error-message"},this.error))}return t(n,null,this.renderButton(),this.visible&&t("div",{ref:t=>this.chatWindowRef=t,id:"ocs-chat-window",class:this.getPositionClasses(),style:this.getPositionStyles()},t("div",{class:`chat-header ${this.isDragging?"chat-header-dragging":"chat-header-draggable"}`,onMouseDown:this.handleMouseDown,onTouchStart:this.handleTouchStart},t("div",{class:"drag-indicator"},t("div",{class:"drag-dots header-button"},t(s,null))),t("div",{class:"header-text"},this.headerText),t("div",{class:"header-buttons"},this.messages.length>0&&t("button",{class:"header-button",onClick:()=>this.showConfirmationDialog(),title:"Start new chat","aria-label":"Start new chat"},t(i,null)),this.allowFullScreen&&t("button",{class:"header-button fullscreen-button",onClick:()=>this.toggleFullscreen(),title:this.isFullscreen?"Exit fullscreen":"Enter fullscreen","aria-label":this.isFullscreen?"Exit fullscreen":"Enter fullscreen"},this.isFullscreen?t(l,null):t(a,null)),t("button",{class:"header-button",onClick:()=>this.visible=false,"aria-label":"Close"},t(r,null)))),this.showNewChatConfirmation&&t("div",{class:"confirmation-overlay"},t("div",{class:"confirmation-dialog"},t("div",{class:"confirmation-content"},t("h3",{class:"confirmation-title"},"Start New Chat"),t("p",{class:"confirmation-message"},this.newChatConfirmationMessage),t("div",{class:"confirmation-buttons"},t("button",{class:"confirmation-button confirmation-button-cancel",onClick:()=>this.hideConfirmationDialog()},"Cancel"),t("button",{class:"confirmation-button confirmation-button-confirm",onClick:()=>this.confirmNewChat()},"Continue"))))),t("div",{class:"chat-content"},this.isLoading&&!this.sessionId&&t("div",{class:"loading-container"},t("div",{class:"loading-spinner"}),t("span",{class:"loading-text"},"Starting chat...")),t("div",{ref:t=>this.messageListRef=t,class:"messages-container"},this.messages.length===0&&this.parsedWelcomeMessages.length>0&&t("div",{class:"welcome-messages"},this.parsedWelcomeMessages.map(((e,n)=>t("div",{key:`welcome-${n}`,class:"message-row message-row-assistant"},t("div",{class:"message-bubble message-bubble-assistant"},t("div",{class:"chat-markdown",innerHTML:ae(e)})))))),this.messages.map(((e,n)=>t("div",{key:n,class:`message-row ${e.role==="user"?"message-row-user":"message-row-assistant"}`},t("div",{class:`message-bubble ${e.role==="user"?"message-bubble-user":e.role==="assistant"?"message-bubble-assistant":"message-bubble-system"}`},t("div",{class:"chat-markdown",innerHTML:ae(e.content)}),e.attachments&&e.attachments.length>0&&t("div",{class:"message-attachments"},e.attachments.map(((e,n)=>t("div",{key:n,class:"flex items-center gap-[0.5em]"},t("span",{class:"message-attachment-icon"},t(c,null)),t("span",{class:"message-attachment-name"},e.name))))),t("div",{class:"message-timestamp"},this.formatTime(e.created_at)))))),this.isTyping&&t("div",null,t("div",{class:"typing-indicator"},t("div",{class:"typing-progress"})),t("div",{class:"typing-text"},t("span",null,this.typingIndicatorText),t("span",{class:"typing-dots"})))),this.messages.length===0&&this.parsedStarterQuestions.length>0&&t("div",{class:"starter-questions"},this.parsedStarterQuestions.map(((e,n)=>t("div",{key:`starter-${n}`,class:"starter-question-row"},t("button",{class:"starter-question",onClick:()=>this.handleStarterQuestionClick(e)},e))))),this.allowAttachments&&this.selectedFiles.length>0&&t("div",{class:"selected-files-container"},t("div",{class:"space-y-[0.25em]"},this.selectedFiles.map(((e,n)=>t("div",{key:n,class:"selected-file-item"},t("div",{class:"flex items-center gap-[0.5em]"},t("span",{class:"selected-file-icon"},t(c,null)),t("span",null,e.file.name),t("span",{class:"selected-file-size"},"(",this.formatFileSize(e.file.size),")"),e.error&&t("span",{class:"selected-file-error"},e.error),e.uploaded&&t("span",{class:"selected-file-success-icon"},t(h,null))),t("button",{onClick:()=>this.removeSelectedFile(n),class:"selected-file-remove-button","aria-label":"Remove file"},t(d,null))))))),this.sessionId&&t("div",{class:"input-area"},t("div",{class:"input-container"},t("textarea",{ref:t=>this.textareaRef=t,class:"message-textarea",rows:1,placeholder:"Type your message...",value:this.messageInput,onInput:t=>this.handleInputChange(t),onKeyPress:t=>this.handleKeyPress(t),disabled:this.isTyping||this.isUploadingFiles}),this.allowAttachments&&t("input",{ref:t=>{if(t){this.fileInputRef=t}},id:"ocs-file-input",type:"file",multiple:true,accept:be.SUPPORTED_FILE_EXTENSIONS.join(","),onChange:t=>this.handleFileSelect(t),class:"hidden"}),this.allowAttachments&&t("button",{class:"file-attachment-button",onClick:()=>{var t;return(t=this.fileInputRef)===null||t===void 0?void 0:t.click()},disabled:this.isTyping||this.isUploadingFiles,title:"Attach files","aria-label":"Attach files"},t(c,null)),t("button",{class:`send-button ${!this.isTyping&&!!this.messageInput.trim()?"send-button-enabled":"send-button-disabled"}`,onClick:()=>this.sendMessage(this.messageInput),disabled:this.isTyping||this.isUploadingFiles||!this.messageInput.trim()},this.isUploadingFiles?"Uploading...":"Send"))),t("div",{class:"flex items-center justify-center text-[0.8em] font-light w-full text-slate-500 py-[2px]"},t("p",null,"Powered by ",t("a",{class:"underline",href:"https://www.dimagi.com",target:"_blank"},"Dimagi"))))))}get host(){return o(this)}static get watchers(){return{visible:["visibilityHandler"]}}};be.TASK_POLLING_MAX_ATTEMPTS=120;be.TASK_POLLING_INTERVAL_MS=1e3;be.MESSAGE_POLLING_INTERVAL_MS=3e4;be.SCROLL_DELAY_MS=100;be.FOCUS_DELAY_MS=100;be.MOBILE_BREAKPOINT=640;be.WINDOW_MARGIN=20;be.LOCALSTORAGE_TEST_KEY="__ocs_test__";be.MAX_FILE_SIZE_MB=50;be.MAX_TOTAL_SIZE_MB=50;be.SUPPORTED_FILE_EXTENSIONS=[".txt",".pdf",".doc",".docx",".xls",".xlsx",".csv",".jpg",".jpeg",".png",".gif",".bmp",".webp",".svg",".mp4",".mov",".avi",".mp3",".wav"];be.style=ge;export{be as open_chat_studio_widget};
|
|
4
|
-
//# sourceMappingURL=p-bde68fbd.entry.js.map
|