@pinecall/web 0.1.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 +168 -0
- package/dist/chat/index.cjs +250 -0
- package/dist/chat/index.cjs.map +1 -0
- package/dist/chat/index.d.cts +48 -0
- package/dist/chat/index.d.ts +48 -0
- package/dist/chat/index.js +3 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/react.cjs +292 -0
- package/dist/chat/react.cjs.map +1 -0
- package/dist/chat/react.d.cts +35 -0
- package/dist/chat/react.d.ts +35 -0
- package/dist/chat/react.js +4 -0
- package/dist/chat/react.js.map +1 -0
- package/dist/chunk-LHZA26Z5.js +43 -0
- package/dist/chunk-LHZA26Z5.js.map +1 -0
- package/dist/chunk-LPRH4KOL.js +552 -0
- package/dist/chunk-LPRH4KOL.js.map +1 -0
- package/dist/chunk-MCAQMGBG.js +248 -0
- package/dist/chunk-MCAQMGBG.js.map +1 -0
- package/dist/core/index.cjs +554 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +100 -0
- package/dist/core/index.d.ts +100 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.cjs +4351 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +434 -0
- package/dist/index.d.ts +434 -0
- package/dist/index.js +3510 -0
- package/dist/index.js.map +1 -0
- package/dist/types-CKfTJcH8.d.cts +144 -0
- package/dist/types-CKfTJcH8.d.ts +144 -0
- package/dist/types-W0229iUB.d.cts +61 -0
- package/dist/types-W0229iUB.d.ts +61 -0
- package/package.json +113 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/widget/useVoiceSession.ts","../src/widget/styles.ts","../src/widget/presets.ts","../src/widget/VoiceWidget.tsx","../src/widget/locales.ts","../src/widget/hub-styles.ts","../src/widget/hub-chat-styles.ts","../node_modules/.pnpm/marked@18.0.5/node_modules/marked/src/defaults.ts","../node_modules/.pnpm/marked@18.0.5/node_modules/marked/src/rules.ts","../node_modules/.pnpm/marked@18.0.5/node_modules/marked/src/helpers.ts","../node_modules/.pnpm/marked@18.0.5/node_modules/marked/src/Tokenizer.ts","../node_modules/.pnpm/marked@18.0.5/node_modules/marked/src/Lexer.ts","../node_modules/.pnpm/marked@18.0.5/node_modules/marked/src/Renderer.ts","../node_modules/.pnpm/marked@18.0.5/node_modules/marked/src/TextRenderer.ts","../node_modules/.pnpm/marked@18.0.5/node_modules/marked/src/Parser.ts","../node_modules/.pnpm/marked@18.0.5/node_modules/marked/src/Hooks.ts","../node_modules/.pnpm/marked@18.0.5/node_modules/marked/src/Instance.ts","../node_modules/.pnpm/marked@18.0.5/node_modules/marked/src/marked.ts","../src/widget/ChatView.tsx","../src/widget/ContactHub.tsx","../src/widget/useAgentInfo.ts"],"names":["useState","useEffect","useCallback","preset","m","v","_getDefaults","_defaults","changeDefaults","newDefaults","noopTest","cachedIndentRegex","createRegex","cache","indent","cacheIndex","regex","edit","opt","source","obj","name","val","valSource","other","supportsLookbehind","a","bull","newline","blockCode","fences","hr","heading","bullet","lheadingCore","lheading","lheadingGfm","_paragraph","blockText","_blockLabel","def","list","_tag","_comment","html","paragraph","blockquote","blockNormal","gfmTable","blockGfm","blockPedantic","escape","inlineCode","br","inlineText","_punctuation","_punctuationOrSpace","_notPunctuationOrSpace","punctuation","_punctuationGfmStrongEm","_punctuationOrSpaceGfmStrongEm","_notPunctuationOrSpaceGfmStrongEm","blockSkip","emStrongLDelimCore","emStrongLDelim","emStrongLDelimGfm","emStrongRDelimAstCore","emStrongRDelimAst","emStrongRDelimAstGfm","emStrongRDelimUnd","delLDelim","delRDelimCore","delRDelim","anyPunctuation","autolink","_inlineComment","tag","_inlineLabel","link","reflink","nolink","reflinkSearch","_caseInsensitiveProtocol","inlineNormal","inlinePedantic","inlineGfm","inlineBreaks","block","inline","escapeReplacements","getEscapeReplacement","ch","escapeHtmlEntities","encode","cleanUrl","href","splitCells","tableRow","count","row","match","offset","str","escaped","curr","cells","i","rtrim","c","invert","l","suffLen","currChar","trimTrailingBlankLines","lines","end","findClosingBracket","b","level","expandTabs","line","col","expanded","char","added","outputLink","cap","raw","lexer","rules","title","text","token","indentCodeCompensation","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","_Tokenizer","options","src","trimmed","tokens","inBlockquote","currentLines","currentRaw","currentText","top","lastToken","oldToken","newText","newToken","isordered","itemRegex","endsWithBlankLine","endEarly","itemContents","nextLine","blankLine","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","blockquoteBeginRegex","rawLine","nextLineWithoutTabs","lastItem","item","itemToken","taskRaw","checkboxToken","spacers","t","hasMultipleLineBreaks","headers","aligns","rows","align","cell","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","links","linkString","maskedSrc","prevChar","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","lastCharLength","hasNonSpaceChars","hasSpaceCharsOnBothEnds","prevCapZero","_Lexer","__Lexer","next","lastParagraphClipped","srcLength","extTokenizer","cutSrc","startIndex","tempSrc","tempStart","getStartIndex","keepPrevChar","byte","errMsg","_Renderer","lang","langString","code","depth","ordered","start","body","j","type","startAttr","checked","header","k","content","cleanHref","out","_TextRenderer","_Parser","__Parser","anyToken","genericToken","ret","renderer","_Hooks","markdown","Marked","args","callback","values","tableToken","listToken","childTokens","extensions","pack","opts","ext","prevRenderer","extLevel","prop","rendererProp","rendererFunc","tokenizer","tokenizerProp","tokenizerFunc","prevTokenizer","hooks","hooksProp","hooksFunc","prevHook","arg","walkTokens","packWalktokens","blockType","origOpt","throwError","processedSrc","processedTokens","e","silent","async","msg","markedInstance","marked","jsxs","jsx","useRef","useMemo","IconMic","status"],"mappings":";;;;;;AASO,SAAS,gBAAgB,IAAA,EAA2B;AACzD,EAAA,MAAM,CAAC,OAAO,CAAA,GAAI,QAAA,CAAS,MAAM,IAAI,YAAA,CAAa,IAAI,CAAC,CAAA;AAEvD,EAAA,MAAM,KAAA,GAAQ,oBAAA;AAAA,IACZ,WAAA,CAAY,CAAC,EAAA,KAAO,OAAA,CAAQ,UAAU,EAAE,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAAA,IACpD,MAAM,QAAQ,QAAA,EAAS;AAAA,IACvB,MAAM,QAAQ,QAAA;AAAS,GACzB;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,OAAA,CAAQ,OAAA,EAAQ;AAAA,IAClB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,OAAA,GAAU,YAAY,MAAM,OAAA,CAAQ,SAAQ,EAAG,CAAC,OAAO,CAAC,CAAA;AAC9D,EAAA,MAAM,UAAA,GAAa,YAAY,MAAM,OAAA,CAAQ,YAAW,EAAG,CAAC,OAAO,CAAC,CAAA;AACpE,EAAA,MAAM,UAAA,GAAa,YAAY,MAAM,OAAA,CAAQ,YAAW,EAAG,CAAC,OAAO,CAAC,CAAA;AACpE,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,KAAA,KAAmB,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA;AAAA,IAC1C,CAAC,OAAO;AAAA,GACV;AACA,EAAA,MAAM,SAAA,GAAY,WAAA;AAAA,IAChB,CAAC,MAAA,KAAoC,OAAA,CAAQ,SAAA,CAAU,MAAM,CAAA;AAAA,IAC7D,CAAC,OAAO;AAAA,GACV;AACA,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,CAAC,KAAA,KACC,OAAA,CAAQ,aAAA,CAAc,KAAK,CAAA;AAAA,IAC7B,CAAC,OAAO;AAAA,GACV;AACA,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,IAAA,KAAiB,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAAA,IACvC,CAAC,OAAO;AAAA,GACV;AACA,EAAA,MAAM,WAAA,GAAc,WAAA;AAAA,IAClB,CAAC,UAAA,KAAuB,OAAA,CAAQ,WAAA,CAAY,UAAU,CAAA;AAAA,IACtD,CAAC,OAAO;AAAA,GACV;AACA,EAAA,MAAM,UAAA,GAAa,WAAA;AAAA,IACjB,CAAC,GAAA,EAAa,KAAA,KAAyB,OAAA,CAAQ,UAAA,CAAW,KAAK,KAAK,CAAA;AAAA,IACpE,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,OAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACpDO,IAAM,UAAA;AAAA;AAAA,EAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;;;ACF1B,IAAM,aAAA,GAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","file":"index.js","sourcesContent":["import { useEffect, useState, useSyncExternalStore, useCallback } from \"react\";\nimport { VoiceSession } from \"../core\";\nimport type { VoiceSessionOptions } from \"../core\";\n\n/**\n * React hook wrapping VoiceSession. Re-exports the entire state plus\n * bound action methods. The underlying session is created once and\n * destroyed on unmount.\n */\nexport function useVoiceSession(opts: VoiceSessionOptions) {\n const [session] = useState(() => new VoiceSession(opts));\n\n const state = useSyncExternalStore(\n useCallback((cb) => session.subscribe(cb), [session]),\n () => session.getState(),\n () => session.getState(),\n );\n\n useEffect(() => {\n return () => {\n session.destroy();\n };\n }, [session]);\n\n const connect = useCallback(() => session.connect(), [session]);\n const disconnect = useCallback(() => session.disconnect(), [session]);\n const toggleMute = useCallback(() => session.toggleMute(), [session]);\n const setMuted = useCallback(\n (muted: boolean) => session.setMuted(muted),\n [session],\n );\n const configure = useCallback(\n (config: Record<string, unknown>) => session.configure(config),\n [session],\n );\n const updateOptions = useCallback(\n (patch: Partial<Pick<VoiceSessionOptions, \"config\" | \"metadata\">>) =>\n session.updateOptions(patch),\n [session],\n );\n const sendText = useCallback(\n (text: string) => session.sendText(text),\n [session],\n );\n const dismissTool = useCallback(\n (toolCallId: string) => session.dismissTool(toolCallId),\n [session],\n );\n const setContext = useCallback(\n (key: string, value: string | null) => session.setContext(key, value),\n [session],\n );\n\n return {\n ...state,\n connect,\n disconnect,\n toggleMute,\n setMuted,\n configure,\n updateOptions,\n sendText,\n dismissTool,\n setContext,\n };\n}\n","/**\n * Voice Widget CSS — injected once at runtime.\n *\n * All colors are driven by CSS custom properties (--vw-*) defined\n * on `.vw-wrap`. Consumers override them via the `theme` prop or\n * external CSS.\n *\n * RGB-triplet vars (e.g. --vw-color-accent: 124, 58, 237) are used\n * with rgba() for flexible alpha control.\n *\n * Classes: .vw-wrap, .vw-orb, .vw-label, .vw-bubble-*, .vw-tp-*\n * States: .connecting, .active, .user-speaking, .speaking, .thinking\n */\nexport const WIDGET_CSS = /* css */ `\n/* ── Container + CSS custom-property defaults ── */\n.vw-wrap {\n /* ── Orb idle gradient (RGB triplets) ── */\n --vw-orb-from: 255, 255, 255;\n --vw-orb-mid: 240, 238, 231;\n --vw-orb-to: 184, 181, 168;\n\n /* ── State colors (RGB triplets) ── */\n --vw-color-connecting: 245, 158, 11;\n --vw-color-active: 76, 175, 80;\n --vw-color-user-speaking: 52, 211, 153;\n --vw-color-speaking: 248, 113, 113;\n --vw-color-thinking: 139, 92, 246;\n --vw-color-warning: 255, 160, 0;\n --vw-color-accent: 124, 58, 237;\n --vw-ring-color: 216, 65, 44;\n\n /* ── Panel / bubble (full CSS values) ── */\n --vw-panel-bg: rgba(16, 14, 20, .92);\n --vw-panel-border: rgba(255, 255, 255, .08);\n --vw-bubble-bot-bg: rgba(18, 16, 22, .9);\n --vw-bubble-bot-color: #e8e4f0;\n --vw-bubble-user-color: #e0d4f7;\n --vw-label-bg: #181818;\n --vw-label-color: #fff;\n\n position: fixed;\n right: 28px;\n bottom: 28px;\n z-index: 100;\n overflow: visible;\n}\n\n/* ── Orb ── */\n.vw-orb {\n width: 64px;\n height: 64px;\n border-radius: 999px;\n background:\n radial-gradient(circle at 30% 30%,\n rgb(var(--vw-orb-from)),\n rgb(var(--vw-orb-mid)) 35%,\n rgba(var(--vw-orb-to), .85) 70%,\n rgb(var(--vw-orb-to)));\n box-shadow:\n 0 1px 0 rgba(255, 255, 255, .9) inset,\n 0 -10px 24px rgba(var(--vw-ring-color), .15) inset,\n 0 14px 40px -10px rgba(0, 0, 0, .25),\n 0 0 0 1px rgba(0, 0, 0, .06);\n cursor: pointer;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform .2s ease;\n}\n\n.vw-orb:hover { transform: scale(1.04); }\n\n.vw-orb::after {\n content: \"\";\n position: absolute;\n inset: -8px;\n border-radius: 999px;\n border: 1px solid rgba(var(--vw-ring-color), .2);\n animation: vw-breathe 3.2s ease-in-out infinite;\n}\n\n.vw-orb::before {\n content: \"\";\n position: absolute;\n inset: -16px;\n border-radius: 999px;\n border: 1px solid rgba(var(--vw-ring-color), .08);\n animation: vw-breathe 3.2s ease-in-out .5s infinite;\n}\n\n@keyframes vw-breathe {\n 0%, 100% { transform: scale(1); opacity: .9; }\n 50% { transform: scale(1.08); opacity: .3; }\n}\n\n/* ── Label tooltip ── */\n.vw-label {\n position: absolute;\n right: 76px;\n top: 50%;\n transform: translateY(-50%);\n background: var(--vw-label-bg);\n color: var(--vw-label-color);\n padding: 8px 12px;\n border-radius: 999px;\n font-size: 12px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n white-space: nowrap;\n opacity: 0;\n pointer-events: none;\n transition: opacity .2s, transform .2s;\n font-variant-numeric: tabular-nums;\n}\n\n.vw-wrap:hover .vw-label { opacity: 1; transform: translateY(-50%) translateX(-2px); }\n.vw-wrap.is-live .vw-label { display: none; }\n\n/* ── State: connecting ── */\n.vw-orb.connecting {\n background: radial-gradient(circle at 30% 30%, #fff,\n rgba(var(--vw-color-connecting), .35) 35%,\n rgba(var(--vw-color-connecting), .7) 70%,\n rgba(var(--vw-color-connecting), 1));\n animation: vw-breathe 1s ease-in-out infinite;\n}\n.vw-orb.connecting::after,\n.vw-orb.connecting::before { border-color: rgba(var(--vw-color-connecting), .25); }\n\n/* ── State: active ── */\n.vw-orb.active {\n background: radial-gradient(circle at 30% 30%, #fff,\n rgba(var(--vw-color-active), .15) 35%,\n rgba(var(--vw-color-active), .3) 70%,\n rgba(var(--vw-color-active), .5));\n box-shadow: 0 1px 0 rgba(255, 255, 255, .9) inset,\n 0 14px 40px -10px rgba(0, 0, 0, .2),\n 0 0 20px rgba(var(--vw-color-active), .15);\n}\n.vw-orb.active::after,\n.vw-orb.active::before { border-color: rgba(var(--vw-color-active), .2); }\n\n/* ── State: user speaking ── */\n.vw-orb.user-speaking {\n background: radial-gradient(circle at 30% 30%, #fff,\n rgba(var(--vw-color-user-speaking), .35) 35%,\n rgba(var(--vw-color-user-speaking), .7) 70%,\n rgba(var(--vw-color-user-speaking), 1));\n box-shadow: 0 1px 0 rgba(255, 255, 255, .9) inset,\n 0 14px 40px -10px rgba(0, 0, 0, .2),\n 0 0 30px rgba(var(--vw-color-user-speaking), .3);\n}\n.vw-orb.user-speaking::after,\n.vw-orb.user-speaking::before { border-color: rgba(var(--vw-color-user-speaking), .3); }\n\n/* ── State: agent speaking ── */\n.vw-orb.speaking {\n background: radial-gradient(circle at 30% 30%, #fff,\n rgba(var(--vw-color-speaking), .35) 35%,\n rgba(var(--vw-color-speaking), .7) 70%,\n rgba(var(--vw-color-speaking), 1));\n box-shadow: 0 1px 0 rgba(255, 255, 255, .9) inset,\n 0 14px 40px -10px rgba(0, 0, 0, .2),\n 0 0 30px rgba(var(--vw-color-speaking), .3);\n animation: vw-speak-pulse .8s ease-in-out infinite;\n}\n.vw-orb.speaking::after,\n.vw-orb.speaking::before { border-color: rgba(var(--vw-color-speaking), .3); }\n\n@keyframes vw-speak-pulse {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.06); }\n}\n\n/* ── State: thinking ── */\n.vw-orb.thinking {\n background: radial-gradient(circle at 30% 30%, #fff,\n rgba(var(--vw-color-thinking), .35) 35%,\n rgba(var(--vw-color-thinking), .7) 70%,\n rgba(var(--vw-color-thinking), 1));\n box-shadow: 0 1px 0 rgba(255, 255, 255, .9) inset,\n 0 14px 40px -10px rgba(0, 0, 0, .2),\n 0 0 24px rgba(var(--vw-color-thinking), .25);\n animation: vw-think-pulse 1.6s ease-in-out infinite;\n}\n.vw-orb.thinking::after,\n.vw-orb.thinking::before { border-color: rgba(var(--vw-color-thinking), .25); }\n\n@keyframes vw-think-pulse {\n 0%, 100% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.03); opacity: .85; }\n}\n\n/* ── State: idle warning ── */\n.vw-orb.idle-warning {\n background: radial-gradient(circle at 30% 30%, #fff,\n rgba(var(--vw-color-warning), .35) 35%,\n rgba(var(--vw-color-warning), .7) 70%,\n rgba(var(--vw-color-warning), 1));\n box-shadow: 0 1px 0 rgba(255, 255, 255, .9) inset,\n 0 14px 40px -10px rgba(0, 0, 0, .2),\n 0 0 30px rgba(var(--vw-color-warning), .35);\n animation: vw-warning-blink .6s ease-in-out infinite;\n}\n.vw-orb.idle-warning::after,\n.vw-orb.idle-warning::before { border-color: rgba(var(--vw-color-warning), .4); }\n\n@keyframes vw-warning-blink {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: .55; transform: scale(.96); }\n}\n\n/* ══════════════════════════════════════════════════\n SPEECH BUBBLE — single bubble floating above orb\n Like Apple notification banners — floats to the left\n ══════════════════════════════════════════════════ */\n\n.vw-bubble {\n position: absolute;\n bottom: 12px;\n right: 76px;\n width: max-content;\n max-width: 300px;\n min-width: 120px;\n padding: 10px 16px;\n font-size: 13.5px;\n line-height: 1.5;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n word-break: break-word;\n animation: vw-bubble-in .2s ease-out;\n pointer-events: none;\n z-index: 1;\n}\n\n/* Tail pointer → points right toward the orb */\n.vw-bubble::after {\n content: \"\";\n position: absolute;\n top: 50%;\n right: -6px;\n margin-top: -6px;\n width: 12px;\n height: 12px;\n transform: rotate(45deg);\n border-radius: 0 3px 0 0;\n}\n\n@keyframes vw-bubble-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n/* User bubble — accent glass */\n.vw-bubble.vw-bubble--user {\n background: rgba(var(--vw-color-accent), .15);\n border: 1px solid rgba(var(--vw-color-accent), .25);\n color: var(--vw-bubble-user-color);\n border-radius: 14px 14px 4px 14px;\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n box-shadow: 0 8px 32px -8px rgba(var(--vw-color-accent), .2);\n}\n.vw-bubble.vw-bubble--user::after {\n background: rgba(var(--vw-color-accent), .15);\n border-top: 1px solid rgba(var(--vw-color-accent), .25);\n border-right: 1px solid rgba(var(--vw-color-accent), .25);\n}\n\n.vw-bubble.vw-bubble--user.vw-interim {\n opacity: .5;\n border-style: dashed;\n}\n.vw-bubble.vw-bubble--user.vw-interim::after {\n border-style: dashed;\n}\n\n/* Bot bubble — dark frosted glass */\n.vw-bubble.vw-bubble--bot {\n background: var(--vw-bubble-bot-bg);\n border: 1px solid rgba(255, 255, 255, .1);\n color: var(--vw-bubble-bot-color);\n border-radius: 14px 14px 14px 4px;\n backdrop-filter: blur(16px);\n -webkit-backdrop-filter: blur(16px);\n box-shadow: 0 8px 32px -8px rgba(0, 0, 0, .4);\n}\n.vw-bubble.vw-bubble--bot::after {\n background: var(--vw-bubble-bot-bg);\n border-top: 1px solid rgba(255, 255, 255, .1);\n border-right: 1px solid rgba(255, 255, 255, .1);\n}\n\n.vw-bubble.vw-bubble--bot.vw-speaking {\n border-color: rgba(var(--vw-color-speaking), .25);\n box-shadow: 0 8px 32px -8px rgba(var(--vw-color-speaking), .15);\n}\n.vw-bubble.vw-bubble--bot.vw-speaking::after {\n border-color: rgba(var(--vw-color-speaking), .25);\n}\n\n.vw-bubble.vw-bubble--bot.vw-interrupted {\n opacity: .45;\n text-decoration: line-through;\n text-decoration-color: rgba(255, 107, 178, .4);\n}\n\n/* Typing dots */\n.vw-dots { display: inline-flex; gap: 4px; align-items: center; height: 18px; }\n.vw-dots span {\n width: 5px; height: 5px; border-radius: 999px;\n background: rgba(255, 255, 255, .35);\n animation: vw-dot-bounce .6s ease-in-out infinite;\n}\n.vw-dots span:nth-child(2) { animation-delay: .12s; }\n.vw-dots span:nth-child(3) { animation-delay: .24s; }\n\n@keyframes vw-dot-bounce {\n 0%, 100% { transform: translateY(0); opacity: .3; }\n 50% { transform: translateY(-4px); opacity: 1; }\n}\n\n/* Tool indicator — shown during tool execution */\n.vw-tool-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n color: rgba(var(--vw-color-thinking), 1);\n}\n.vw-tool-indicator .vw-tool-icon { font-size: 14px; }\n.vw-tool-indicator .vw-tool-name {\n opacity: .85;\n font-weight: 500;\n letter-spacing: .01em;\n}\n.vw-tool-indicator .vw-dots { height: 14px; }\n.vw-tool-indicator .vw-dots span {\n width: 4px; height: 4px;\n background: rgba(var(--vw-color-thinking), .6);\n}\n\n/* ══════════════════════════════════════════════════\n TRANSCRIPT PANEL — expandable conversation view\n ══════════════════════════════════════════════════ */\n\n.vw-tp-btn {\n position: absolute;\n right: 72px;\n bottom: 16px;\n width: 32px;\n height: 32px;\n border-radius: 999px;\n border: 1px solid rgba(255, 255, 255, .1);\n background: rgba(24, 24, 24, .8);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n color: rgba(255, 255, 255, .6);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all .15s;\n font-size: 14px;\n z-index: 2;\n}\n\n.vw-tp-btn:hover {\n border-color: rgba(255, 255, 255, .25);\n color: #fff;\n transform: scale(1.08);\n}\n\n/* Panel */\n.vw-tp {\n position: absolute;\n right: 0;\n bottom: 80px;\n width: 320px;\n max-height: 400px;\n background: var(--vw-panel-bg);\n border: 1px solid var(--vw-panel-border);\n border-radius: 16px;\n backdrop-filter: blur(20px);\n -webkit-backdrop-filter: blur(20px);\n box-shadow: 0 20px 60px -15px rgba(0, 0, 0, .5);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n animation: vw-panel-in .2s ease-out;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n z-index: 3;\n}\n\n@keyframes vw-panel-in {\n from { opacity: 0; transform: translateY(10px) scale(.97); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n}\n\n/* Panel header */\n.vw-tp-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid rgba(255, 255, 255, .06);\n}\n\n.vw-tp-title {\n font-size: 11px;\n font-weight: 600;\n letter-spacing: .06em;\n text-transform: uppercase;\n color: rgba(255, 255, 255, .5);\n}\n\n.vw-tp-close {\n width: 22px; height: 22px;\n border-radius: 999px;\n border: 1px solid rgba(255, 255, 255, .1);\n background: transparent;\n color: rgba(255, 255, 255, .4);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n transition: all .15s;\n}\n.vw-tp-close:hover { border-color: rgba(255, 255, 255, .3); color: #fff; }\n\n/* Panel body — scrollable */\n.vw-tp-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px 14px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n scrollbar-width: thin;\n scrollbar-color: rgba(255,255,255,.08) transparent;\n}\n.vw-tp-body::-webkit-scrollbar { width: 4px; }\n.vw-tp-body::-webkit-scrollbar-track { background: transparent; }\n.vw-tp-body::-webkit-scrollbar-thumb { background: rgba(255,255,255,.1); border-radius: 4px; }\n\n/* Message in panel */\n.vw-tp-msg {\n max-width: 85%;\n padding: 8px 12px;\n border-radius: 12px;\n font-size: 13px;\n line-height: 1.45;\n animation: vw-bubble-in .15s ease-out;\n}\n\n.vw-tp-msg--user {\n align-self: flex-end;\n background: rgba(var(--vw-color-accent), .15);\n border: 1px solid rgba(var(--vw-color-accent), .2);\n color: var(--vw-bubble-user-color);\n border-radius: 12px 12px 4px 12px;\n}\n\n.vw-tp-msg--user.vw-interim {\n opacity: .5;\n border-style: dashed;\n}\n\n.vw-tp-msg--bot {\n align-self: flex-start;\n background: rgba(255, 255, 255, .04);\n border: 1px solid rgba(255, 255, 255, .06);\n color: #d4d0e0;\n border-radius: 12px 12px 12px 4px;\n}\n\n.vw-tp-msg--bot.vw-speaking {\n border-color: rgba(var(--vw-color-speaking), .15);\n}\n\n.vw-tp-msg--bot.vw-interrupted {\n opacity: .45;\n}\n\n.vw-tp-msg--system {\n align-self: center;\n max-width: 90%;\n background: rgba(255, 255, 255, .03);\n border: 1px solid rgba(255, 255, 255, .06);\n color: rgba(255, 255, 255, .4);\n border-radius: 8px;\n font-size: 11.5px;\n padding: 5px 12px;\n text-align: center;\n letter-spacing: .02em;\n}\n\n/* Empty state */\n.vw-tp-empty {\n text-align: center;\n color: rgba(255, 255, 255, .25);\n font-size: 12px;\n padding: 40px 20px;\n letter-spacing: .02em;\n}\n\n/* Tool UI — rendered inline in transcript */\n.vw-tp-tool {\n padding: 4px 0;\n animation: vw-bubble-in .2s ease-out;\n}\n\n/* ── Mobile ── */\n@media (max-width: 768px) {\n .vw-wrap { right: 16px; bottom: 16px; }\n .vw-orb { width: 52px; height: 52px; }\n .vw-label { display: none; }\n .vw-bubble { bottom: 68px; max-width: 220px; font-size: 12px; }\n .vw-tp { width: 280px; max-height: 320px; bottom: 68px; }\n .vw-tp-btn { right: 60px; }\n .vw-lang-bar { bottom: 64px; }\n}\n\n/* ══════════════════════════════════════════════════\n LANGUAGE SELECTOR — pill bar above the orb\n Hidden by default, shown on hover or during active call\n ══════════════════════════════════════════════════ */\n\n.vw-lang-bar {\n position: absolute;\n bottom: 76px;\n right: 0;\n display: flex;\n gap: 4px;\n padding: 4px;\n background: rgba(16, 14, 20, .75);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n border: 1px solid rgba(255, 255, 255, .08);\n border-radius: 999px;\n z-index: 2;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n\n /* Hidden by default — revealed on hover */\n opacity: 0;\n pointer-events: none;\n transform: translateY(4px);\n transition: opacity .2s ease, transform .2s ease;\n}\n\n/* Show on hover (pre-call) */\n.vw-wrap:hover .vw-lang-bar {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n}\n\n/* Always visible during active call */\n.vw-wrap.is-live .vw-lang-bar {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n}\n\n.vw-lang-pill {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 5px 10px;\n border-radius: 999px;\n border: 1px solid transparent;\n background: transparent;\n color: rgba(255, 255, 255, .5);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: all .15s ease;\n white-space: nowrap;\n letter-spacing: .02em;\n}\n\n.vw-lang-pill:hover {\n color: rgba(255, 255, 255, .8);\n background: rgba(255, 255, 255, .06);\n}\n\n.vw-lang-pill--active {\n background: rgba(var(--vw-color-accent), .2);\n border-color: rgba(var(--vw-color-accent), .3);\n color: #fff;\n font-weight: 600;\n}\n\n.vw-lang-pill--active:hover {\n background: rgba(var(--vw-color-accent), .25);\n}\n\n.vw-lang-flag {\n font-size: 14px;\n line-height: 1;\n}\n\n.vw-lang-code {\n line-height: 1;\n}\n`;\n","import type { VoiceWidgetTheme, VoiceWidgetPreset } from \"./types\";\n\n/**\n * Built-in theme presets. Each is a complete VoiceWidgetTheme with all fields set.\n * Users can override individual fields via the `theme` prop.\n */\n\n/** \"dark\" — Refined pearl orb on dark bg. Warm ring glow, violet accent. */\nconst dark: Required<VoiceWidgetTheme> = {\n orbFrom: \"255, 255, 255\",\n orbMid: \"240, 238, 231\",\n orbTo: \"184, 181, 168\",\n colorConnecting: \"245, 158, 11\",\n colorActive: \"76, 175, 80\",\n colorUserSpeaking: \"52, 211, 153\",\n colorSpeaking: \"248, 113, 113\",\n colorThinking: \"139, 92, 246\",\n colorWarning: \"255, 160, 0\",\n colorAccent: \"124, 58, 237\",\n ringColor: \"216, 65, 44\",\n panelBg: \"rgba(16, 14, 20, .92)\",\n panelBorder: \"rgba(255, 255, 255, .08)\",\n bubbleBotBg: \"rgba(18, 16, 22, .9)\",\n bubbleBotColor: \"#e8e4f0\",\n bubbleUserColor: \"#e0d4f7\",\n labelBg: \"#181818\",\n labelColor: \"#fff\",\n};\n\n/** \"midnight\" — Deep sapphire orb, ice-blue rings, navy panels. */\nconst midnight: Required<VoiceWidgetTheme> = {\n orbFrom: \"190, 210, 255\",\n orbMid: \"90, 120, 200\",\n orbTo: \"40, 55, 130\",\n colorConnecting: \"100, 180, 255\",\n colorActive: \"60, 200, 180\",\n colorUserSpeaking: \"80, 220, 200\",\n colorSpeaking: \"140, 160, 255\",\n colorThinking: \"100, 120, 240\",\n colorWarning: \"255, 180, 60\",\n colorAccent: \"100, 140, 255\",\n ringColor: \"70, 110, 210\",\n panelBg: \"rgba(10, 15, 35, .94)\",\n panelBorder: \"rgba(100, 140, 255, .12)\",\n bubbleBotBg: \"rgba(15, 20, 45, .92)\",\n bubbleBotColor: \"#c8d0f0\",\n bubbleUserColor: \"#b8c8ff\",\n labelBg: \"rgba(15, 20, 40, .92)\",\n labelColor: \"#c8d4ff\",\n};\n\n/** \"aurora\" — Emerald/teal orb, green rings, northern lights feel. */\nconst aurora: Required<VoiceWidgetTheme> = {\n orbFrom: \"170, 255, 215\",\n orbMid: \"60, 190, 150\",\n orbTo: \"20, 130, 90\",\n colorConnecting: \"255, 200, 60\",\n colorActive: \"50, 220, 140\",\n colorUserSpeaking: \"100, 240, 180\",\n colorSpeaking: \"180, 100, 255\",\n colorThinking: \"140, 80, 220\",\n colorWarning: \"255, 200, 60\",\n colorAccent: \"50, 200, 140\",\n ringColor: \"40, 170, 110\",\n panelBg: \"rgba(8, 20, 14, .94)\",\n panelBorder: \"rgba(50, 200, 140, .1)\",\n bubbleBotBg: \"rgba(10, 25, 18, .92)\",\n bubbleBotColor: \"#c0ecd4\",\n bubbleUserColor: \"#a8e8c4\",\n labelBg: \"rgba(10, 24, 16, .92)\",\n labelColor: \"#a8e8c4\",\n};\n\n/** \"sunset\" — Warm coral/amber orb, golden rings, warm dark panels. */\nconst sunset: Required<VoiceWidgetTheme> = {\n orbFrom: \"255, 215, 190\",\n orbMid: \"235, 140, 90\",\n orbTo: \"195, 70, 50\",\n colorConnecting: \"255, 180, 60\",\n colorActive: \"240, 160, 80\",\n colorUserSpeaking: \"255, 200, 100\",\n colorSpeaking: \"255, 100, 80\",\n colorThinking: \"240, 140, 100\",\n colorWarning: \"255, 180, 40\",\n colorAccent: \"240, 120, 60\",\n ringColor: \"215, 95, 45\",\n panelBg: \"rgba(25, 12, 8, .94)\",\n panelBorder: \"rgba(240, 120, 60, .1)\",\n bubbleBotBg: \"rgba(30, 16, 10, .92)\",\n bubbleBotColor: \"#f0d4c0\",\n bubbleUserColor: \"#ffd8b4\",\n labelBg: \"rgba(28, 14, 10, .92)\",\n labelColor: \"#f0d0b0\",\n};\n\n/** \"light\" — Clean white orb, soft blue rings, light panels. For light-bg sites. */\nconst light: Required<VoiceWidgetTheme> = {\n orbFrom: \"255, 255, 255\",\n orbMid: \"225, 230, 245\",\n orbTo: \"190, 200, 225\",\n colorConnecting: \"230, 140, 10\",\n colorActive: \"34, 150, 60\",\n colorUserSpeaking: \"20, 170, 110\",\n colorSpeaking: \"210, 50, 50\",\n colorThinking: \"100, 60, 200\",\n colorWarning: \"230, 140, 10\",\n colorAccent: \"80, 40, 200\",\n ringColor: \"100, 120, 200\",\n panelBg: \"rgba(255, 255, 255, .95)\",\n panelBorder: \"rgba(0, 0, 0, .08)\",\n bubbleBotBg: \"rgba(245, 245, 250, .95)\",\n bubbleBotColor: \"#2a2a3a\",\n bubbleUserColor: \"#3a2a5a\",\n labelBg: \"rgba(255, 255, 255, .92)\",\n labelColor: \"#333\",\n};\n\nexport const PRESETS: Record<VoiceWidgetPreset, Required<VoiceWidgetTheme>> = {\n dark,\n midnight,\n aurora,\n sunset,\n light,\n};\n","/**\n * VoiceWidget — Embeddable voice AI orb with real-time transcript.\n *\n * Features:\n * - Pearl-gradient orb with animated rings (click to start/stop)\n * - Live speech bubbles around the orb (current turn only)\n * - Expandable transcript panel with full conversation history\n * - Word-by-word bot response rendering\n * - React context for external tool UI rendering via useVoice() hook\n */\nimport { useState, useEffect, useCallback, useRef, useMemo, createContext, useContext } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { TranscriptMessage, ToolUI, SessionStatus, VoiceSessionState } from \"../core\";\nimport type { VoiceWidgetProps, VoiceWidgetTheme } from \"./types\";\nimport { useVoiceSession } from \"./useVoiceSession\";\nimport { WIDGET_CSS } from \"./styles\";\nimport { PRESETS } from \"./presets\";\n\n// ── Voice Context — lets consumers render tool UI anywhere ──────────\n\ntype VoiceContextValue = ReturnType<typeof useVoiceSession> | null;\nconst VoiceContext = createContext<VoiceContextValue>(null);\n\n/**\n * Hook to access the VoiceWidget session from any child component.\n *\n * Must be used inside a `<VoiceWidget>` tree. Returns the full session\n * state (toolCalls, messages, status, etc.) plus action methods\n * (sendText, dismissTool, connect, disconnect, etc.).\n *\n * @example\n * ```tsx\n * function SlotPicker() {\n * const { toolCalls, sendText, dismissTool } = useVoice();\n * const slots = toolCalls.find(tc => tc.name === \"getSlots\" && tc.result);\n * if (!slots) return null;\n * return slots.result.map(s => (\n * <button onClick={() => { sendText(`Book ${s}`); dismissTool(slots.toolCallId); }}>{s}</button>\n * ));\n * }\n * ```\n */\nexport function useVoice() {\n const ctx = useContext(VoiceContext);\n if (!ctx) throw new Error(\"useVoice() must be used inside <VoiceWidget>\");\n return ctx;\n}\n\n/** Map theme keys → CSS custom property names */\nconst THEME_VAR_MAP: Record<keyof VoiceWidgetTheme, string> = {\n orbFrom: \"--vw-orb-from\",\n orbMid: \"--vw-orb-mid\",\n orbTo: \"--vw-orb-to\",\n colorConnecting: \"--vw-color-connecting\",\n colorActive: \"--vw-color-active\",\n colorUserSpeaking: \"--vw-color-user-speaking\",\n colorSpeaking: \"--vw-color-speaking\",\n colorThinking: \"--vw-color-thinking\",\n colorWarning: \"--vw-color-warning\",\n colorAccent: \"--vw-color-accent\",\n ringColor: \"--vw-ring-color\",\n panelBg: \"--vw-panel-bg\",\n panelBorder: \"--vw-panel-border\",\n bubbleBotBg: \"--vw-bubble-bot-bg\",\n bubbleBotColor: \"--vw-bubble-bot-color\",\n bubbleUserColor: \"--vw-bubble-user-color\",\n labelBg: \"--vw-label-bg\",\n labelColor: \"--vw-label-color\",\n};\n\nfunction fmt(s: number): string {\n return `${Math.floor(s / 60)}:${(s % 60).toString().padStart(2, \"0\")}`;\n}\n\n/** Typing dots indicator */\nfunction Dots() {\n return (\n <span className=\"vw-dots\">\n <span />\n <span />\n <span />\n </span>\n );\n}\n\n/** Tool-aware thinking indicator — shows tool name when a tool is pending */\nfunction ThinkingIndicator({ toolCalls }: { toolCalls: ToolUI[] }) {\n const pending = toolCalls.find((tc) => tc.result === undefined);\n if (pending) {\n return (\n <span className=\"vw-tool-indicator\">\n <span className=\"vw-tool-icon\">🔧</span>{\" \"}\n <span className=\"vw-tool-name\">{pending.name}</span>\n <Dots />\n </span>\n );\n }\n return <Dots />;\n}\n\nexport function VoiceWidget({\n agent,\n server,\n name = \"Agent\",\n label,\n config: userConfig,\n metadata,\n className,\n preset = \"dark\",\n theme,\n onStatusChange,\n tools,\n trackedTools: trackedToolsProp,\n languages,\n defaultLanguage,\n onLanguageChange,\n tokenProvider,\n children,\n}: VoiceWidgetProps & { children?: ReactNode }) {\n const hasLanguages = languages && Object.keys(languages).length >= 2;\n const langKeys = hasLanguages ? Object.keys(languages!) : [];\n const initialLang = defaultLanguage || (langKeys[0] ?? \"\");\n const [selectedLang, setSelectedLang] = useState(initialLang);\n\n // Merge language preset config with user config\n const mergedConfig = useMemo(() => {\n const langPreset = languages?.[selectedLang];\n const langConfig: Record<string, unknown> = {};\n if (langPreset?.voice) langConfig.voice = langPreset.voice;\n if (langPreset?.stt) langConfig.stt = langPreset.stt;\n if (langPreset?.language) langConfig.language = langPreset.language;\n return { ...langConfig, ...userConfig };\n }, [selectedLang, languages, userConfig]);\n\n // Derive tracked tool names from both sources\n const trackedTools = useMemo(\n () => trackedToolsProp ?? (tools ? Object.keys(tools) : undefined),\n [tools, trackedToolsProp],\n );\n\n const session = useVoiceSession({\n server,\n agent,\n config: Object.keys(mergedConfig).length > 0 ? mergedConfig : undefined,\n metadata,\n trackedTools,\n tokenProvider,\n });\n const [panelOpen, setPanelOpen] = useState(false);\n\n /** Merge preset + custom theme overrides → CSS custom properties */\n const themeStyle = useMemo(() => {\n const base = PRESETS[preset] ?? PRESETS.dark;\n const merged = { ...base, ...theme };\n const vars: Record<string, string> = {};\n for (const [key, cssVar] of Object.entries(THEME_VAR_MAP)) {\n const val = merged[key as keyof VoiceWidgetTheme];\n if (val !== undefined) vars[cssVar] = val;\n }\n return Object.keys(vars).length > 0 ? vars : undefined;\n }, [preset, theme]);\n\n const scrollRef = useRef<HTMLDivElement>(null);\n\n /* Inject CSS once */\n useEffect(() => {\n if (document.getElementById(\"vw-styles\")) return;\n const el = document.createElement(\"style\");\n el.id = \"vw-styles\";\n el.textContent = WIDGET_CSS;\n document.head.appendChild(el);\n }, []);\n\n useEffect(() => {\n onStatusChange?.(session.status);\n }, [session.status, onStatusChange]);\n\n /* Auto-scroll transcript panel */\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [session.messages, session.toolCalls]);\n\n /* Auto-open panel when a tool result arrives with a matching renderer */\n useEffect(() => {\n if (!tools) return;\n const hasRenderable = session.toolCalls.some(\n (tc) => tc.result !== undefined && tools[tc.name],\n );\n if (hasRenderable && !panelOpen) {\n setPanelOpen(true);\n }\n }, [session.toolCalls, tools]);\n\n // ── Language change handler ──\n const handleLanguageChange = useCallback(\n (lang: string) => {\n if (lang === selectedLang) return;\n setSelectedLang(lang);\n const preset = languages?.[lang];\n if (!preset) return;\n\n // Build config from preset\n const cfg: Record<string, unknown> = {};\n if (preset.voice) cfg.voice = preset.voice;\n if (preset.stt) cfg.stt = preset.stt;\n if (preset.language) cfg.language = preset.language;\n\n // Mid-call → send via DataChannel\n if (session.status === \"connected\" && Object.keys(cfg).length > 0) {\n session.configure(cfg);\n } else {\n // Pre-call → update options for next connect()\n session.updateOptions({ config: { ...cfg, ...userConfig } });\n }\n\n onLanguageChange?.(lang, preset);\n },\n [selectedLang, languages, session, userConfig, onLanguageChange],\n );\n\n // ── Orb click — always connect/disconnect ──\n const handleClick = useCallback(async () => {\n if (session.status === \"connected\") {\n session.disconnect();\n setPanelOpen(false);\n } else if (session.status === \"idle\" || session.status === \"error\") {\n await session.connect();\n }\n }, [session]);\n\n const isActive = session.status === \"connected\";\n const idleLabel = label || `Talk to ${name}`;\n\n const orbState = session.agentSpeaking\n ? \"speaking\"\n : session.userSpeaking\n ? \"user-speaking\"\n : session.phase === \"thinking\"\n ? \"thinking\"\n : session.idleWarning != null\n ? \"idle-warning\"\n : isActive\n ? \"active\"\n : session.status === \"connecting\"\n ? \"connecting\"\n : \"\";\n\n const statusLabel = (() => {\n if (session.status === \"connecting\") return \"Connecting\";\n if (session.status === \"error\") return session.error || \"Connection failed\";\n if (!isActive) return idleLabel;\n return `${name} · ${fmt(session.duration)}`;\n })();\n\n /* Active bubble — most recent message (or empty bot msg during tool calls) */\n const hasPendingTools = session.toolCalls.some((tc) => tc.result === undefined);\n const activeBubble = [...session.messages].reverse().find(\n (m) => m.role === \"user\" || (m.role === \"bot\" && (m.text || hasPendingTools)),\n );\n\n const showBubble = isActive && activeBubble && !panelOpen;\n const showTranscriptBtn = isActive && session.messages.length > 0;\n\n const widget = (\n <div\n className={`vw-wrap ${isActive ? \"is-live\" : \"\"} ${className || \"\"}`}\n style={themeStyle as React.CSSProperties}\n >\n {/* Language selector pills */}\n {hasLanguages && (\n <div className=\"vw-lang-bar\">\n {langKeys.map((key) => {\n const lp = languages![key];\n const isSelected = key === selectedLang;\n return (\n <button\n key={key}\n className={`vw-lang-pill ${isSelected ? \"vw-lang-pill--active\" : \"\"}`}\n onClick={() => handleLanguageChange(key)}\n aria-label={lp.label || key}\n aria-pressed={isSelected}\n >\n {lp.flag && <span className=\"vw-lang-flag\">{lp.flag}</span>}\n <span className=\"vw-lang-code\">\n {lp.label || key.toUpperCase()}\n </span>\n </button>\n );\n })}\n </div>\n )}\n\n {/* Idle label */}\n <div className=\"vw-label\">{statusLabel}</div>\n\n {/* Single active bubble */}\n {showBubble && (\n <div\n className={`vw-bubble ${activeBubble!.role === \"user\" ? \"vw-bubble--user\" : \"vw-bubble--bot\"} ${activeBubble!.isInterim ? \"vw-interim\" : \"\"} ${activeBubble!.speaking ? \"vw-speaking\" : \"\"} ${activeBubble!.interrupted ? \"vw-interrupted\" : \"\"}`}\n key={activeBubble!.id}\n >\n {activeBubble!.text || <ThinkingIndicator toolCalls={session.toolCalls} />}\n </div>\n )}\n\n {/* Transcript toggle button */}\n {showTranscriptBtn && (\n <button\n className=\"vw-tp-btn\"\n onClick={() => setPanelOpen((p) => !p)}\n aria-label={panelOpen ? \"Close transcript\" : \"Open transcript\"}\n >\n {panelOpen ? \"✕\" : \"☰\"}\n </button>\n )}\n\n {/* Transcript panel */}\n {panelOpen && (\n <div className=\"vw-tp\">\n <div className=\"vw-tp-head\">\n <div className=\"vw-tp-title\">\n Transcript · {fmt(session.duration)}\n </div>\n <button\n className=\"vw-tp-close\"\n onClick={() => setPanelOpen(false)}\n >\n ✕\n </button>\n </div>\n <div className=\"vw-tp-body\" ref={scrollRef}>\n {session.messages.length === 0 ? (\n <div className=\"vw-tp-empty\">Waiting for conversation…</div>\n ) : (\n session.messages.map((msg) => (\n <TranscriptMsg key={msg.id} msg={msg} toolCalls={session.toolCalls} />\n ))\n )}\n {/* Tool UI components — rendered inline after messages */}\n {tools &&\n session.toolCalls\n .filter((tc) => tc.result !== undefined && tools[tc.name])\n .map((tc) => (\n <div key={tc.toolCallId} className=\"vw-tp-tool\">\n {tools[tc.name](\n tc.result,\n {\n respond: (text: string) => {\n session.sendText(text);\n session.dismissTool(tc.toolCallId);\n },\n dismiss: () => session.dismissTool(tc.toolCallId),\n },\n tc,\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Orb */}\n <div\n className={`vw-orb ${orbState}`}\n role=\"button\"\n tabIndex={0}\n aria-label={isActive ? \"End call\" : idleLabel}\n onClick={handleClick}\n onKeyDown={(e) => e.key === \"Enter\" && handleClick()}\n />\n </div>\n );\n\n // Always wrap in context provider\n return (\n <VoiceContext.Provider value={session}>\n {widget}\n {children}\n </VoiceContext.Provider>\n );\n}\n\n/** Single message in the transcript panel */\nfunction TranscriptMsg({ msg, toolCalls = [] }: { msg: TranscriptMessage; toolCalls?: ToolUI[] }) {\n if (msg.role === \"system\") {\n return <div className=\"vw-tp-msg vw-tp-msg--system\">{msg.text}</div>;\n }\n\n const isUser = msg.role === \"user\";\n\n // Hide empty bot bubbles when speaking is done OR when tools are pending\n // (tool indicator shows in the active bubble instead)\n const hasPending = toolCalls.some((tc) => tc.result === undefined);\n if (!isUser && !msg.text && (!msg.speaking || hasPending)) return null;\n\n const cls = [\n \"vw-tp-msg\",\n isUser ? \"vw-tp-msg--user\" : \"vw-tp-msg--bot\",\n msg.isInterim ? \"vw-interim\" : \"\",\n msg.speaking ? \"vw-speaking\" : \"\",\n msg.interrupted ? \"vw-interrupted\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return <div className={cls}>{msg.text || <ThinkingIndicator toolCalls={toolCalls} />}</div>;\n}\n","import type { LocaleStrings } from \"./types.js\";\n\nexport const en: LocaleStrings = {\n \"hub.title\": \"How would you like to reach us?\",\n \"hub.subtitle\": \"Choose the option that suits you best\",\n \"hub.voice\": \"Talk to {name}\",\n \"hub.voiceDesc\": \"Live voice assistant\",\n \"hub.chat\": \"Chat with {name}\",\n \"hub.chatDesc\": \"Text chat — ask anything\",\n \"hub.whatsapp\": \"WhatsApp\",\n \"hub.whatsappDesc\": \"Chat with us instantly\",\n \"hub.callMe\": \"Call me\",\n \"hub.callMeDesc\": \"{name} calls you in seconds\",\n \"callMe.title\": \"We'll call you\",\n \"callMe.placeholder\": \"+1 (555) 123-4567\",\n \"callMe.submit\": \"Call me now\",\n \"callMe.formNote\": \"\",\n \"callMe.calling\": \"Calling...\",\n \"callMe.ended\": \"Call ended\",\n \"callMe.error\": \"Could not connect the call\",\n \"callMe.back\": \"Back\",\n};\n\nexport const es: LocaleStrings = {\n \"hub.title\": \"¿Cómo prefieres contactarnos?\",\n \"hub.subtitle\": \"Elige la opción que más te convenga\",\n \"hub.voice\": \"Hablar con {name}\",\n \"hub.voiceDesc\": \"Asistente de voz en vivo\",\n \"hub.chat\": \"Chatear con {name}\",\n \"hub.chatDesc\": \"Chat de texto — preguntá lo que quieras\",\n \"hub.whatsapp\": \"WhatsApp\",\n \"hub.whatsappDesc\": \"Chatea con nosotros al instante\",\n \"hub.callMe\": \"Te llamamos\",\n \"hub.callMeDesc\": \"{name} te llama en segundos\",\n \"callMe.title\": \"Te llamamos\",\n \"callMe.placeholder\": \"+51 987 654 321\",\n \"callMe.submit\": \"Llamarme ahora\",\n \"callMe.formNote\": \"\",\n \"callMe.calling\": \"Llamando...\",\n \"callMe.ended\": \"Llamada finalizada\",\n \"callMe.error\": \"No se pudo conectar la llamada\",\n \"callMe.back\": \"Volver\",\n};\n\nexport const de: LocaleStrings = {\n \"hub.title\": \"Wie möchten Sie uns erreichen?\",\n \"hub.subtitle\": \"Wählen Sie die passende Option\",\n \"hub.voice\": \"Mit {name} sprechen\",\n \"hub.voiceDesc\": \"Live-Sprachassistent\",\n \"hub.chat\": \"Mit {name} chatten\",\n \"hub.chatDesc\": \"Text-Chat — fragen Sie alles\",\n \"hub.whatsapp\": \"WhatsApp\",\n \"hub.whatsappDesc\": \"Chatten Sie sofort mit uns\",\n \"hub.callMe\": \"Rückruf\",\n \"hub.callMeDesc\": \"{name} ruft Sie in Sekunden an\",\n \"callMe.title\": \"Wir rufen Sie an\",\n \"callMe.placeholder\": \"+49 170 1234567\",\n \"callMe.submit\": \"Jetzt anrufen\",\n \"callMe.formNote\": \"\",\n \"callMe.calling\": \"Anruf wird verbunden...\",\n \"callMe.ended\": \"Anruf beendet\",\n \"callMe.error\": \"Verbindung fehlgeschlagen\",\n \"callMe.back\": \"Zurück\",\n};\n\nexport const pt: LocaleStrings = {\n \"hub.title\": \"Como prefere nos contactar?\",\n \"hub.subtitle\": \"Escolha a opção mais conveniente\",\n \"hub.voice\": \"Falar com {name}\",\n \"hub.voiceDesc\": \"Assistente de voz ao vivo\",\n \"hub.chat\": \"Conversar com {name}\",\n \"hub.chatDesc\": \"Chat de texto — pergunte o que quiser\",\n \"hub.whatsapp\": \"WhatsApp\",\n \"hub.whatsappDesc\": \"Converse conosco instantaneamente\",\n \"hub.callMe\": \"Ligue-me\",\n \"hub.callMeDesc\": \"{name} liga para você em segundos\",\n \"callMe.title\": \"Vamos ligar para você\",\n \"callMe.placeholder\": \"+55 11 98765-4321\",\n \"callMe.submit\": \"Ligar agora\",\n \"callMe.formNote\": \"\",\n \"callMe.calling\": \"Ligando...\",\n \"callMe.ended\": \"Chamada encerrada\",\n \"callMe.error\": \"Não foi possível conectar a chamada\",\n \"callMe.back\": \"Voltar\",\n};\n\nconst locales: Record<string, LocaleStrings> = { en, es, de, pt };\n\n/**\n * Get a locale string with variable interpolation.\n *\n * @param locale - Locale code (\"en\", \"es\", \"de\", \"pt\")\n * @param key - Dot-notated string key\n * @param overrides - User-provided label overrides\n * @param vars - Variables to interpolate (e.g. { name: \"Florencia\" })\n */\nexport function t(\n locale: string,\n key: keyof LocaleStrings,\n overrides?: Partial<LocaleStrings>,\n vars?: Record<string, string>,\n): string {\n const base = locales[locale] ?? locales.en;\n let str = overrides?.[key] ?? base[key] ?? key;\n if (vars) {\n for (const [k, v] of Object.entries(vars)) {\n str = str.replace(`{${k}}`, v);\n }\n }\n return str;\n}\n","/**\n * ContactHub CSS — injected at runtime alongside WIDGET_CSS.\n *\n * Prefix: .vw-hub- for the popover, .vw-cm- for Call Me.\n * Uses CSS custom properties from the widget's theme system.\n */\nexport const HUB_CSS = /* css */ `\n\n/* ═══════════════════════════════════════\n ContactHub — above-orb contact menu\n ═══════════════════════════════════════ */\n\n/* ── Backdrop ── */\n.vw-hub-backdrop {\n position: fixed;\n inset: 0;\n z-index: 200;\n background: rgba(0, 0, 0, 0.45);\n backdrop-filter: blur(6px);\n -webkit-backdrop-filter: blur(6px);\n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n padding: 20px;\n animation: vwHubFade .2s ease;\n}\n@keyframes vwHubFade { from { opacity: 0; } to { opacity: 1; } }\n\n/* ── Panel ── */\n.vw-hub-panel {\n position: relative;\n width: 100%;\n max-width: 320px;\n background: var(--vw-panel-bg, rgba(16, 14, 20, .92));\n border: 1px solid var(--vw-panel-border, rgba(255, 255, 255, .08));\n border-radius: 20px;\n padding: 26px 22px 22px;\n box-shadow: 0 24px 56px -12px rgba(0, 0, 0, 0.5);\n animation: vwHubUp .25s cubic-bezier(.2,.8,.2,1);\n margin-bottom: 70px;\n}\n.vw-hub-panel--chat {\n max-width: 400px;\n padding: 0;\n overflow: hidden;\n}\n@keyframes vwHubUp {\n from { opacity: 0; transform: translateY(16px) scale(0.96); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n}\n\n/* Close */\n.vw-hub-close {\n position: absolute;\n top: 10px; right: 10px;\n background: none;\n border: none;\n color: rgba(255, 255, 255, .4);\n cursor: pointer;\n padding: 6px;\n border-radius: 50%;\n transition: color .2s, background .2s;\n line-height: 1;\n}\n.vw-hub-close:hover { color: #fff; background: rgba(255, 255, 255, .06); }\n\n/* ── Header ── */\n.vw-hub-header { text-align: center; margin-bottom: 16px; }\n.vw-hub-avatar { font-size: 28px; margin-bottom: 6px; }\n.vw-hub-header h3 {\n font-size: 17px;\n color: #fff;\n margin: 0 0 3px;\n font-weight: 500;\n font-family: inherit;\n}\n.vw-hub-header p { font-size: 12px; color: rgba(255, 255, 255, .5); margin: 0; }\n\n/* ── Option Cards ── */\n.vw-hub-options { display: flex; flex-direction: column; gap: 8px; }\n\n.vw-hub-opt {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 14px;\n border-radius: 12px;\n background: rgba(255, 255, 255, .03);\n border: 1px solid rgba(255, 255, 255, .06);\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n transition: background .2s, border-color .2s, transform .15s;\n font-family: inherit;\n text-align: left;\n width: 100%;\n font-size: 14px;\n}\n.vw-hub-opt:hover {\n background: rgba(255, 255, 255, .06);\n border-color: rgba(255, 255, 255, .1);\n transform: translateX(2px);\n}\n\n.vw-hub-icon {\n width: 36px; height: 36px;\n border-radius: 10px;\n display: grid; place-items: center;\n flex-shrink: 0;\n}\n.vw-hub-icon--voice { background: rgba(124, 58, 237, .15); color: rgba(139, 92, 246, 1); }\n.vw-hub-icon--wa { background: rgba(34, 197, 94, .15); color: rgba(34, 197, 94, 1); }\n.vw-hub-icon--call {\n background: rgba(var(--vw-accent, 124, 58, 237), .12);\n color: rgba(var(--vw-accent, 124, 58, 237), 1);\n}\n.vw-hub-icon--chat { background: rgba(59, 130, 246, .15); color: rgba(96, 165, 250, 1); }\n\n.vw-hub-body { display: flex; flex-direction: column; gap: 1px; flex: 1; min-width: 0; }\n.vw-hub-title { font-weight: 600; font-size: 13px; }\n.vw-hub-desc { font-size: 11px; color: rgba(255, 255, 255, .45); }\n.vw-hub-arrow { color: rgba(255, 255, 255, .3); font-size: 14px; flex-shrink: 0; }\n\n/* ═══════════════════════════════════════\n Call Me — form + transcript\n ═══════════════════════════════════════ */\n\n/* ── Form View ── */\n.vw-cm { text-align: center; padding: 4px 0; }\n.vw-cm-back {\n background: none; border: none; color: rgba(255, 255, 255, .4);\n cursor: pointer; font-size: 12px; margin-bottom: 16px;\n padding: 4px 8px; border-radius: 6px;\n transition: color .2s; font-family: inherit;\n}\n.vw-cm-back:hover { color: #fff; }\n\n.vw-cm h3 {\n font-size: 19px;\n color: #fff; margin: 0 0 6px; font-weight: 500;\n font-family: inherit;\n}\n.vw-cm p {\n font-size: 12.5px; color: rgba(255, 255, 255, .5);\n line-height: 1.55; margin: 0 0 18px;\n}\n\n.vw-cm-phone-icon {\n width: 54px; height: 54px; border-radius: 50%;\n background: linear-gradient(135deg, rgba(var(--vw-accent, 124, 58, 237), .15), rgba(var(--vw-accent, 124, 58, 237), .06));\n border: 1.5px solid rgba(var(--vw-accent, 124, 58, 237), .3);\n display: grid; place-items: center;\n margin: 0 auto 14px;\n color: rgba(var(--vw-accent, 124, 58, 237), 1);\n position: relative;\n}\n.vw-cm-phone-icon::after {\n content: '';\n position: absolute;\n inset: -6px;\n border-radius: 50%;\n border: 1.5px solid rgba(var(--vw-accent, 124, 58, 237), .15);\n animation: vwCmIconPulse 2.5s ease-in-out infinite;\n}\n@keyframes vwCmIconPulse {\n 0%, 100% { opacity: 0.6; transform: scale(1); }\n 50% { opacity: 0; transform: scale(1.25); }\n}\n\n.vw-cm-form { display: flex; flex-direction: column; gap: 10px; }\n.vw-cm-form input {\n width: 100%; padding: 14px 16px; border-radius: 12px;\n background: rgba(255, 255, 255, .05);\n border: 1px solid rgba(255, 255, 255, .1);\n color: #fff; font-family: inherit; font-size: 16px;\n outline: none; transition: border-color .2s, box-shadow .2s; box-sizing: border-box;\n letter-spacing: 0.04em;\n}\n.vw-cm-form input:focus {\n border-color: rgba(var(--vw-accent, 124, 58, 237), .7);\n box-shadow: 0 0 0 3px rgba(var(--vw-accent, 124, 58, 237), .12);\n}\n.vw-cm-form input::placeholder { color: rgba(255, 255, 255, .25); letter-spacing: 0.02em; }\n.vw-cm-form button {\n display: flex; align-items: center; justify-content: center; gap: 8px;\n padding: 13px; border-radius: 12px;\n background: linear-gradient(135deg, rgba(var(--vw-accent, 124, 58, 237), 1), rgba(var(--vw-accent, 124, 58, 237), .8));\n color: #fff; font-family: inherit;\n font-weight: 600; font-size: 14px; border: none; cursor: pointer;\n transition: transform .2s, box-shadow .2s;\n letter-spacing: 0.01em;\n}\n.vw-cm-form button:hover:not(:disabled) {\n transform: translateY(-1px);\n box-shadow: 0 10px 28px -6px rgba(var(--vw-accent, 124, 58, 237), .5);\n}\n.vw-cm-form button:disabled { opacity: 0.4; cursor: not-allowed; }\n.vw-cm-error {\n font-size: 11px; color: rgba(248, 113, 113, 1);\n padding: 6px 0; line-height: 1.4;\n}\n.vw-cm-note {\n font-size: 10px; color: rgba(255, 255, 255, .3);\n line-height: 1.45; margin-top: 4px; opacity: 0.7;\n}\n.vw-cm-note a { color: rgba(var(--vw-accent, 124, 58, 237), 1); text-decoration: none; }\n\n/* ── Dialing Animation (used inside hub before call connects) ── */\n\n.vw-cm-dialing {\n display: flex; flex-direction: column; align-items: center;\n gap: 14px; padding: 28px 0;\n}\n.vw-cm-dialing-ring {\n width: 60px; height: 60px; border-radius: 50%;\n background: linear-gradient(135deg, rgba(var(--vw-accent, 124, 58, 237), .12), rgba(var(--vw-accent, 124, 58, 237), .04));\n border: 2px solid rgba(var(--vw-accent, 124, 58, 237), .3);\n display: grid; place-items: center;\n animation: vwCmRing 1.5s ease infinite;\n color: rgba(var(--vw-accent, 124, 58, 237), 1);\n position: relative;\n}\n.vw-cm-dialing-ring::after {\n content: '';\n position: absolute;\n inset: -8px;\n border-radius: 50%;\n border: 2px solid rgba(var(--vw-accent, 124, 58, 237), .2);\n animation: vwCmDialPulse 1.4s ease-out infinite;\n}\n.vw-cm-dialing-ring::before {\n content: '';\n position: absolute;\n inset: -16px;\n border-radius: 50%;\n border: 1.5px solid rgba(var(--vw-accent, 124, 58, 237), .1);\n animation: vwCmDialPulse 1.4s ease-out 0.3s infinite;\n}\n@keyframes vwCmRing {\n 0%, 100% { transform: scale(1); border-color: rgba(var(--vw-accent, 124, 58, 237), .3); }\n 50% { transform: scale(1.06); border-color: rgba(var(--vw-accent, 124, 58, 237), .6); }\n}\n@keyframes vwCmDialPulse {\n 0% { transform: scale(0.9); opacity: 1; }\n 100% { transform: scale(1.4); opacity: 0; }\n}\n.vw-cm-dialing-text { font-size: 13px; color: rgba(255, 255, 255, .55); font-weight: 500; }\n.vw-cm-dialing-phone { font-size: 12px; color: rgba(255, 255, 255, .35); letter-spacing: 0.06em; }\n\n.vw-cm-error-view {\n display: flex; flex-direction: column; align-items: center;\n gap: 10px; padding: 24px 0;\n}\n.vw-cm-error-text { font-size: 13px; color: rgba(248, 113, 113, .9); text-align: center; line-height: 1.5; }\n\n/* ── Mobile ── */\n@media (max-width: 640px) {\n .vw-hub-backdrop { padding: 14px; }\n .vw-hub-panel { max-width: 100%; margin-bottom: 56px; border-radius: 16px; padding: 22px 18px 18px; }\n\n /* Chat: fullscreen takeover on mobile */\n .vw-hub-backdrop:has(.vw-hub-panel--chat) {\n padding: 0;\n background: var(--vw-panel-bg, rgba(16, 14, 20, .98));\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n }\n .vw-hub-panel--chat {\n max-width: 100%;\n height: 100%;\n margin-bottom: 0;\n border-radius: 0;\n border: none;\n box-shadow: none;\n }\n .vw-hub-panel--chat .vw-cv {\n height: 100%;\n max-height: 100%;\n }\n}\n`;\n","/**\n * hub-chat-styles.ts — CSS for the ChatView inside ContactHub.\n * Dark theme matching the hub panel aesthetic.\n */\nexport const CHAT_VIEW_CSS = `\n/* ── ChatView container ───────────────────────────────────── */\n.vw-cv {\n display: flex;\n flex-direction: column;\n height: 480px;\n max-height: 70vh;\n}\n\n/* ── Header ───────────────────────────────────────────────── */\n.vw-cv-head {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 14px 16px;\n border-bottom: 1px solid rgba(255,255,255,.06);\n}\n\n.vw-cv-back {\n background: none;\n border: none;\n color: rgba(255,255,255,.5);\n cursor: pointer;\n padding: 4px;\n border-radius: 6px;\n transition: color .2s, background .2s;\n}\n.vw-cv-back:hover {\n color: #fff;\n background: rgba(255,255,255,.08);\n}\n\n.vw-cv-avatar {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: linear-gradient(135deg, rgba(var(--vw-color-accent, 197,140,95), .3), rgba(var(--vw-color-accent, 197,140,95), .1));\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n font-weight: 600;\n color: rgb(var(--vw-color-accent, 197,140,95));\n flex-shrink: 0;\n}\n\n.vw-cv-who {\n flex: 1;\n min-width: 0;\n}\n.vw-cv-name {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: #fff;\n line-height: 1.2;\n}\n.vw-cv-status {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: rgba(255,255,255,.45);\n}\n\n.vw-cv-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: #4ade80;\n box-shadow: 0 0 6px rgba(74,222,128,.5);\n flex-shrink: 0;\n}\n.vw-cv-dot--off {\n background: #f59e0b;\n box-shadow: 0 0 6px rgba(245,158,11,.5);\n}\n\n.vw-cv-actions {\n display: flex;\n gap: 4px;\n}\n\n.vw-cv-action {\n background: none;\n border: 1px solid rgba(255,255,255,.08);\n color: rgba(255,255,255,.45);\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n transition: all .2s;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.vw-cv-action:hover {\n color: #fff;\n background: rgba(255,255,255,.08);\n border-color: rgba(255,255,255,.15);\n}\n.vw-cv-action--voice {\n color: rgb(var(--vw-color-accent, 197,140,95));\n border-color: rgba(var(--vw-color-accent, 197,140,95), .25);\n}\n.vw-cv-action--voice:hover {\n background: rgba(var(--vw-color-accent, 197,140,95), .12);\n color: rgb(var(--vw-color-accent, 197,140,95));\n border-color: rgba(var(--vw-color-accent, 197,140,95), .4);\n}\n\n/* ── Messages body ────────────────────────────────────────── */\n.vw-cv-body {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n scrollbar-width: thin;\n scrollbar-color: rgba(255,255,255,.1) transparent;\n}\n\n.vw-cv-msg {\n max-width: 85%;\n padding: 10px 14px;\n border-radius: 14px;\n font-size: 13.5px;\n line-height: 1.5;\n word-break: break-word;\n}\n\n.vw-cv-msg--user {\n align-self: flex-end;\n background: rgba(var(--vw-color-accent, 197,140,95), .18);\n color: rgba(255,255,255,.92);\n border-bottom-right-radius: 4px;\n}\n\n.vw-cv-msg--bot {\n align-self: flex-start;\n background: rgba(255,255,255,.05);\n color: rgba(255,255,255,.85);\n border-bottom-left-radius: 4px;\n border: 1px solid rgba(255,255,255,.06);\n}\n\n/* Markdown inside bot messages */\n.vw-cv-md p { margin: 0 0 6px; }\n.vw-cv-md p:last-child { margin-bottom: 0; }\n.vw-cv-md strong { color: #fff; font-weight: 600; }\n.vw-cv-md em { font-style: italic; }\n.vw-cv-md code {\n background: rgba(255,255,255,.08);\n padding: 1px 5px;\n border-radius: 4px;\n font-size: 12px;\n font-family: monospace;\n}\n.vw-cv-md a {\n color: rgb(var(--vw-color-accent, 197,140,95));\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.vw-cv-md ul, .vw-cv-md ol {\n margin: 4px 0;\n padding-left: 18px;\n}\n.vw-cv-md li { margin-bottom: 2px; }\n\n/* Streaming cursor */\n.vw-cv-cursor {\n display: inline-block;\n width: 2px;\n height: 14px;\n background: rgb(var(--vw-color-accent, 197,140,95));\n margin-left: 2px;\n vertical-align: text-bottom;\n animation: vw-cv-blink .8s infinite;\n}\n\n@keyframes vw-cv-blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n}\n\n/* Typing skeleton */\n.vw-cv-skeleton {\n display: flex;\n gap: 4px;\n padding: 14px 18px;\n}\n.vw-cv-sk-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: rgba(255,255,255,.25);\n animation: vw-cv-bounce 1.4s infinite ease-in-out;\n}\n.vw-cv-sk-dot:nth-child(2) { animation-delay: .16s; }\n.vw-cv-sk-dot:nth-child(3) { animation-delay: .32s; }\n\n@keyframes vw-cv-bounce {\n 0%, 80%, 100% { transform: translateY(0); }\n 40% { transform: translateY(-5px); }\n}\n\n/* Tool calls */\n.vw-cv-tool {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n margin: 2px 0;\n border-radius: 10px;\n font-size: 11px;\n font-family: monospace;\n background: rgba(167,139,250,.06);\n border: 1px solid rgba(167,139,250,.15);\n align-self: center;\n max-width: 90%;\n}\n.vw-cv-tool-icon { font-size: 12px; }\n.vw-cv-tool-name { color: rgb(167,139,250); font-weight: 600; }\n.vw-cv-tool-args { color: rgba(255,255,255,.4); font-size: 10px; word-break: break-all; }\n\n/* ── Quick options ────────────────────────────────────────── */\n.vw-cv-quick {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 8px 16px;\n border-top: 1px solid rgba(255,255,255,.04);\n}\n.vw-cv-quick button {\n background: rgba(255,255,255,.05);\n border: 1px solid rgba(255,255,255,.1);\n color: rgba(255,255,255,.7);\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 12px;\n cursor: pointer;\n transition: all .2s;\n white-space: nowrap;\n}\n.vw-cv-quick button:hover:not(:disabled) {\n background: rgba(var(--vw-color-accent, 197,140,95), .12);\n border-color: rgba(var(--vw-color-accent, 197,140,95), .3);\n color: rgb(var(--vw-color-accent, 197,140,95));\n}\n.vw-cv-quick button:disabled {\n opacity: .4;\n cursor: default;\n}\n\n/* ── Input bar ────────────────────────────────────────────── */\n.vw-cv-input {\n display: flex;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid rgba(255,255,255,.06);\n}\n.vw-cv-input input {\n flex: 1;\n background: rgba(255,255,255,.05);\n border: 1px solid rgba(255,255,255,.1);\n color: #fff;\n padding: 10px 14px;\n border-radius: 12px;\n font-size: 16px; /* ≥16px prevents iOS Safari auto-zoom on focus */\n outline: none;\n transition: border-color .2s;\n}\n.vw-cv-input input::placeholder {\n color: rgba(255,255,255,.3);\n}\n.vw-cv-input input:focus {\n border-color: rgba(var(--vw-color-accent, 197,140,95), .4);\n}\n\n.vw-cv-send {\n background: rgb(var(--vw-color-accent, 197,140,95));\n border: none;\n color: #fff;\n width: 38px;\n height: 38px;\n border-radius: 10px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: opacity .2s, transform .15s;\n flex-shrink: 0;\n}\n.vw-cv-send:hover:not(:disabled) {\n transform: scale(1.05);\n}\n.vw-cv-send:disabled {\n opacity: .3;\n cursor: default;\n}\n`;\n","import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n _defaults = newDefaults;\n}\n","const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction cachedIndentRegex(createRegex: (indent: number) => RegExp) {\n const cache: RegExp[] = [];\n return (indent: number) => {\n const cacheIndex = Math.max(0, Math.min(3, indent - 1));\n let regex = cache[cacheIndex];\n if (!regex) {\n regex = createRegex(cacheIndex);\n cache[cacheIndex] = regex;\n }\n return regex;\n };\n}\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\n// use a default variable to ensure the regex is evaluated on client an not removed by minifiers\nconst supportsLookbehind = ((a = '') => {\ntry {\n return !!new RegExp('(?<=1)(?<!1)' + a);\n} catch {\n // See browser support here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n return false;\n}\n})();\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] +\\S/,\n listReplaceTask: /^\\[[ xX]\\] +/,\n listTaskCheckbox: /\\[[ xX]\\]/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`)),\n hrRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`)),\n fencesBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:\\`\\`\\`|~~~)`)),\n headingBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}#`)),\n htmlBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}<(?:[a-z].*>|!--)`, 'i')),\n blockquoteBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}>`)),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = / {0,3}(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^(bull)([ \\t][^\\n]*?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]') // only non-empty lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // any bullet ends the table rows\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]') // only non-empty lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n .replace('html', /<(?! )[^<>]*?>/)\n .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\n// Tilde left delimiter for strikethrough (similar to emStrongLDelim for asterisk)\nconst delLDelim = edit(/^~~?(?:((?!~)punct)|[^\\s~])/, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\n// Tilde delimiter patterns for strikethrough (similar to asterisk)\nconst delRDelimCore =\n '^[^~]+(?=[^~])' // Consume to delim\n+ '|(?!~)punct(~~?)(?=[\\\\s]|$)' // (1) #~~ can only be a Right Delimiter\n+ '|notPunctSpace(~~?)(?!~)(?=punctSpace|$)' // (2) a~~#, a~~ can only be a Right Delimiter\n+ '|(?!~)punctSpace(~~?)(?=notPunctSpace)' // (3) #~~a, ~~a can only be Left Delimiter\n+ '|[\\\\s](~~?)(?!~)(?=punct)' // (4) ~~# can only be Left Delimiter\n+ '|(?!~)punct(~~?)(?!~)(?=punct)' // (5) #~~# can be either Left or Right Delimiter\n+ '|notPunctSpace(~~?)(?=notPunctSpace)'; // (6) a~~a can be either Left or Right Delimiter\n\nconst delRDelim = edit(delRDelimCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n delLDelim: noopTest,\n delRDelim: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n delLDelim,\n delRDelim,\n url: edit(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('protocol', _caseInsensitiveProtocol)\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: edit(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/)\n .replace('protocol', _caseInsensitiveProtocol)\n .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n","import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escapeHtmlEntities(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function trimTrailingBlankLines(str: string) {\n const lines = str.split('\\n');\n let end = lines.length - 1;\n while (end >= 0 && other.blankLine.test(lines[end])) {\n end--;\n }\n if (lines.length - end <= 2) {\n // we want to keep single trailing blank lines\n return str;\n }\n\n return lines.slice(0, end + 1).join('\\n');\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n\nexport function expandTabs(line: string, indent = 0) {\n let col = indent;\n let expanded = '';\n for (const char of line) {\n if (char === '\\t') {\n const added = 4 - (col % 4);\n expanded += ' '.repeat(added);\n col += added;\n } else {\n expanded += char;\n col++;\n }\n }\n\n return expanded;\n}\n","import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n expandTabs,\n trimTrailingBlankLines,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const raw = this.options.pedantic\n ? cap[0]\n : trimTrailingBlankLines(cap[0]);\n const text = raw.replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw,\n codeBlockStyle: 'indented',\n text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: rtrim(cap[0], '\\n'),\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = expandTabs(cap[2].split('\\n', 1)[0], cap[1].length);\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = line.search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n const blockquoteBeginRegex = this.rules.other.blockquoteBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of blockquote\n if (blockquoteBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n blankLine = !nextLine.trim();\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!this.options.gfm && this.rules.other.listIsTask.test(itemContents),\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (const item of list.items) {\n this.lexer.state.top = false;\n item.tokens = this.lexer.blockTokens(item.text, []);\n const itemToken = item.tokens[0];\n if (item.task && (itemToken?.type === 'text' || itemToken?.type === 'paragraph')) {\n // Remove checkbox markdown from item tokens\n item.text = item.text.replace(this.rules.other.listReplaceTask, '');\n itemToken.raw = itemToken.raw.replace(this.rules.other.listReplaceTask, '');\n itemToken.text = itemToken.text.replace(this.rules.other.listReplaceTask, '');\n for (let i = this.lexer.inlineQueue.length - 1; i >= 0; i--) {\n if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[i].src)) {\n this.lexer.inlineQueue[i].src = this.lexer.inlineQueue[i].src.replace(this.rules.other.listReplaceTask, '');\n break;\n }\n }\n\n const taskRaw = this.rules.other.listTaskCheckbox.exec(item.raw);\n if (taskRaw) {\n const checkboxToken: Tokens.Checkbox = {\n type: 'checkbox',\n raw: taskRaw[0] + ' ',\n checked: taskRaw[0] !== '[ ]',\n };\n item.checked = checkboxToken.checked;\n if (list.loose) {\n if (item.tokens[0] && ['paragraph', 'text'].includes(item.tokens[0].type) && 'tokens' in item.tokens[0] && item.tokens[0].tokens) {\n item.tokens[0].raw = checkboxToken.raw + item.tokens[0].raw;\n item.tokens[0].text = checkboxToken.raw + item.tokens[0].text;\n item.tokens[0].tokens.unshift(checkboxToken);\n } else {\n item.tokens.unshift({\n type: 'paragraph',\n raw: checkboxToken.raw,\n text: checkboxToken.raw,\n tokens: [checkboxToken],\n });\n }\n } else {\n item.tokens.unshift(checkboxToken);\n }\n }\n } else if (item.task) {\n item.task = false;\n }\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = item.tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (const item of list.items) {\n item.loose = true;\n for (const token of item.tokens) {\n if (token.type === 'text') {\n token.type = 'paragraph';\n }\n }\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const raw = trimTrailingBlankLines(cap[0]);\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw,\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: raw,\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: rtrim(cap[0], '\\n'),\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: rtrim(cap[0], '\\n'),\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n const text = cap[1].trim();\n return {\n type: 'heading',\n raw: rtrim(cap[0], '\\n'),\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n if (!match[1] && !match[2] && !match[3] && !match[4]) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[4] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[3] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) !== null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string, maskedSrc: string, prevChar = ''): Tokens.Del | undefined {\n let match = this.rules.inline.delLDelim.exec(src);\n if (!match) return;\n\n const nextChar = match[1] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength;\n\n const endReg = this.rules.inline.delRDelim;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) !== null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue;\n\n rLength = [...rDelim].length;\n\n if (rLength !== lLength) continue;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters\n rLength = Math.min(rLength, rLength + delimTotal);\n // char length can be >1 for unicode characters\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create del token - only single ~ or double ~~ supported\n const text = raw.slice(lLength, -lLength);\n return {\n type: 'del',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n","import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n tokens: TokensList;\n options: MarkedOptions<ParserOutput, RendererOutput>;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n public inlineQueue: { src: string, tokens: Token[] }[];\n\n private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n this.tokenizer.lexer = this;\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n let srcLength = Infinity;\n while (src) {\n if (src.length < srcLength) {\n srcLength = src.length;\n } else {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n tokens.push(token);\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n this.tokenizer.lexer = this;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) !== null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) !== null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n let offset;\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) !== null) {\n offset = match[2] ? match[2].length : 0;\n maskedSrc = maskedSrc.slice(0, match.index + offset) + '[' + 'a'.repeat(match[0].length - offset - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out blocks from extensions\n maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n let keepPrevChar = false;\n let prevChar = '';\n let srcLength = Infinity;\n while (src) {\n if (src.length < srcLength) {\n srcLength = src.length;\n } else {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n }\n\n return tokens;\n }\n\n private infiniteLoopError(byte: number) {\n const errMsg = 'Infinite loop on byte: ' + byte;\n if (this.options.silent) {\n console.error(errMsg);\n } else {\n throw new Error(errMsg);\n }\n }\n}\n","import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escapeHtmlEntities,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): RendererOutput {\n return '' as RendererOutput;\n }\n\n code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n return '<pre><code class=\"language-'\n + escapeHtmlEntities(langString)\n + '\">'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n def(token: Tokens.Def): RendererOutput {\n return '' as RendererOutput;\n }\n\n heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n }\n\n hr(token: Tokens.Hr): RendererOutput {\n return '<hr>\\n' as RendererOutput;\n }\n\n list(token: Tokens.List): RendererOutput {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n }\n\n listitem(item: Tokens.ListItem): RendererOutput {\n return `<li>${this.parser.parse(item.tokens)}</li>\\n` as RendererOutput;\n }\n\n checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"> ' as RendererOutput;\n }\n\n paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n }\n\n table(token: Tokens.Table): RendererOutput {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell as ParserOutput });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell as ParserOutput });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n' as RendererOutput;\n }\n\n tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n }\n\n tablecell(token: Tokens.TableCell): RendererOutput {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n` as RendererOutput;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): RendererOutput {\n return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n }\n\n em({ tokens }: Tokens.Em): RendererOutput {\n return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return `<code>${escapeHtmlEntities(text, true)}</code>` as RendererOutput;\n }\n\n br(token: Tokens.Br): RendererOutput {\n return '<br>' as RendererOutput;\n }\n\n del({ tokens }: Tokens.Del): RendererOutput {\n return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n }\n\n link({ href, title, tokens }: Tokens.Link): RendererOutput {\n const text = this.parser.parseInline(tokens) as string;\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text as RendererOutput;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escapeHtmlEntities(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out as RendererOutput;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escapeHtmlEntities(text) as RendererOutput;\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${escapeHtmlEntities(text)}\"`;\n if (title) {\n out += ` title=\"${escapeHtmlEntities(title)}\"`;\n }\n out += '>';\n return out as RendererOutput;\n }\n\n text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n : ('escaped' in token && token.escaped ? token.text as RendererOutput : escapeHtmlEntities(token.text) as RendererOutput);\n }\n}\n","import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n // no need for block level renderers\n strong({ text }: Tokens.Strong): RendererOutput {\n return text as RendererOutput;\n }\n\n em({ text }: Tokens.Em): RendererOutput {\n return text as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return text as RendererOutput;\n }\n\n del({ text }: Tokens.Del): RendererOutput {\n return text as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n link({ text }: Tokens.Link): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n image({ text }: Tokens.Image): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n br(): RendererOutput {\n return '' as RendererOutput;\n }\n\n checkbox({ raw }: Tokens.Checkbox): RendererOutput {\n return raw as RendererOutput;\n }\n}\n","import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n renderer: _Renderer<ParserOutput, RendererOutput>;\n textRenderer: _TextRenderer<RendererOutput>;\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer<RendererOutput>();\n }\n\n /**\n * Static Parse Method\n */\n static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[]): ParserOutput {\n this.renderer.parser = this;\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n break;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n break;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n break;\n }\n case 'code': {\n out += this.renderer.code(token);\n break;\n }\n case 'table': {\n out += this.renderer.table(token);\n break;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n break;\n }\n case 'list': {\n out += this.renderer.list(token);\n break;\n }\n case 'checkbox': {\n out += this.renderer.checkbox(token);\n break;\n }\n case 'html': {\n out += this.renderer.html(token);\n break;\n }\n case 'def': {\n out += this.renderer.def(token);\n break;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n break;\n }\n case 'text': {\n out += this.renderer.text(token);\n break;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out as ParserOutput;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n this.renderer.parser = this;\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'checkbox': {\n out += renderer.checkbox(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out as ParserOutput;\n }\n}\n","import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n block?: boolean;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n 'emStrongMask',\n ]);\n\n static passThroughHooksRespectAsync = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: ParserOutput) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Mask contents that should not be interpreted as em/strong delimiters\n */\n emStrongMask(src: string) {\n return src;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer(block = this.block) {\n return block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser(block = this.block) {\n return block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n }\n}\n","import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escapeHtmlEntities } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n defaults = _getDefaults<ParserOutput, RendererOutput>();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser<ParserOutput, RendererOutput>;\n Renderer = _Renderer<ParserOutput, RendererOutput>;\n TextRenderer = _TextRenderer<RendererOutput>;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return (ret || '') as RendererOutput;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n return (async() => {\n const ret = await hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n })();\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n if (this.defaults.async) {\n return (async() => {\n let ret = await hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = await prevHook.apply(hooks, args);\n }\n return ret;\n })();\n }\n\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n if (opt.async) {\n return (async() => {\n const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n const lexer = opt.hooks ? await opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const tokens = await lexer(processedSrc, opt);\n const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n if (opt.walkTokens) {\n await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n }\n const parser = opt.hooks ? await opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n const html = await parser(processedTokens, opt);\n return opt.hooks ? await opt.hooks.postprocess(html) : html;\n })().catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n const parser = opt.hooks ? opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch(e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escapeHtmlEntities(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n","import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n","/**\n * ChatView — LLM text chat inside the ContactHub popover.\n *\n * Uses @pinecall/web/chat for WebSocket chat + marked for markdown.\n * StreamingText uses rAF-based character reveal (ported from blossom Chat.jsx).\n */\nimport React, { useState, useRef, useCallback, useEffect, useMemo } from \"react\";\nimport { usePinecallChat } from \"../chat/react\";\nimport { marked } from \"marked\";\nimport type { ChatConfig, LocaleStrings } from \"./types.js\";\nimport { t } from \"./locales.js\";\n\n// Configure marked\nmarked.setOptions({ breaks: true, gfm: true });\n\nfunction sanitize(html: string): string {\n return html.replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, \"\");\n}\n\nfunction renderMarkdown(text: string): string {\n if (!text) return \"\";\n return sanitize(marked.parse(text) as string);\n}\n\n// ── Icons ─────────────────────────────────────────────────────────\n\nconst IconMic = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"9\" y=\"1\" width=\"6\" height=\"11\" rx=\"3\" />\n <path d=\"M19 10v1a7 7 0 0 1-14 0v-1\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\" />\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\" />\n </svg>\n);\n\nconst IconSend = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2 8l12-6-4 14-3-6-5-2z\" />\n </svg>\n);\n\nconst IconTrash = () => (\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\">\n <path d=\"M2 4h12M5 4V3a1 1 0 011-1h4a1 1 0 011 1v1M6 7v5M10 7v5M3 4l1 9a2 2 0 002 2h4a2 2 0 002-2l1-9\" />\n </svg>\n);\n\nconst IconBack = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n);\n\n// ── StreamingText — rAF character reveal + marked ─────────────────\n\nfunction StreamingText({ targetText, streaming }: { targetText: string; streaming: boolean }) {\n const CHARS_PER_FRAME = 2;\n const displayedRef = useRef(0);\n const rafRef = useRef<number | null>(null);\n const nodeRef = useRef<HTMLDivElement>(null);\n const prevTargetRef = useRef(\"\");\n\n if (targetText.length < prevTargetRef.current.length) {\n displayedRef.current = 0;\n }\n prevTargetRef.current = targetText;\n\n useEffect(() => {\n if (!streaming) {\n displayedRef.current = targetText.length;\n if (nodeRef.current) {\n nodeRef.current.innerHTML = renderMarkdown(targetText);\n }\n return;\n }\n\n function tick() {\n const target = targetText.length;\n const current = displayedRef.current;\n if (current < target) {\n displayedRef.current = Math.min(current + CHARS_PER_FRAME, target);\n const visible = targetText.slice(0, displayedRef.current);\n if (nodeRef.current) {\n nodeRef.current.innerHTML = renderMarkdown(visible);\n }\n // Keep animating only while there's more text to reveal\n rafRef.current = requestAnimationFrame(tick);\n }\n // Stop when caught up — no more rAF calls\n }\n\n rafRef.current = requestAnimationFrame(tick);\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n };\n }, [targetText, streaming]);\n\n const initialHtml = useMemo(() => {\n if (!streaming) return renderMarkdown(targetText);\n const visible = targetText.slice(0, displayedRef.current);\n return renderMarkdown(visible);\n }, [targetText, streaming]);\n\n return <div className=\"vw-cv-md\" ref={nodeRef} dangerouslySetInnerHTML={{ __html: initialHtml }} />;\n}\n\n// ── ToolCallBubble ────────────────────────────────────────────────\n\nfunction ToolCallBubble({ name, args }: { name: string; args?: string }) {\n let parsed = \"\";\n try {\n if (args) {\n const obj = JSON.parse(args);\n parsed = Object.entries(obj).map(([k, v]) => `${k}: ${v}`).join(\", \");\n }\n } catch { parsed = args || \"\"; }\n\n return (\n <div className=\"vw-cv-tool\">\n <span className=\"vw-cv-tool-icon\">⚙️</span>\n <span className=\"vw-cv-tool-name\">{name}</span>\n {parsed && <span className=\"vw-cv-tool-args\">({parsed})</span>}\n </div>\n );\n}\n\n// ── ChatView Component ────────────────────────────────────────────\n\ninterface ChatViewProps {\n agent: string;\n server?: string;\n name: string;\n locale: string;\n labels?: Partial<LocaleStrings>;\n chat: ChatConfig;\n tokenProvider?: () => Promise<{ token: string; server: string; expires_in?: number }>;\n onBack: () => void;\n onVoiceCall: () => void;\n}\n\nexport function ChatView({\n agent, server, name, locale, labels, chat, tokenProvider, onBack, onVoiceCall,\n}: ChatViewProps) {\n const [input, setInput] = useState(\"\");\n const bodyRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Resolve token provider: chat-specific > widget-level\n const chatTokenProvider = chat.tokenProvider || tokenProvider;\n\n const { messages, send, connected, typing, error } = usePinecallChat({\n agent,\n server,\n tokenProvider: chatTokenProvider as any,\n });\n\n // Auto-scroll on new messages\n useEffect(() => {\n requestAnimationFrame(() => {\n if (bodyRef.current) {\n bodyRef.current.scrollTo({ top: bodyRef.current.scrollHeight, behavior: \"smooth\" });\n }\n });\n }, [messages, typing]);\n\n // Show greeting as first message if configured\n const allMessages = useMemo(() => {\n if (!chat.greeting) return messages;\n const greetingMsg = {\n id: 0,\n role: \"bot\" as const,\n text: chat.greeting,\n isStreaming: false,\n };\n return [greetingMsg, ...messages];\n }, [messages, chat.greeting]);\n\n const hasUserMessages = messages.some((m) => m.role === \"user\");\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!input.trim() || typing) return;\n send(input.trim());\n setInput(\"\");\n requestAnimationFrame(() => inputRef.current?.focus({ preventScroll: true }));\n };\n\n const handleQuick = useCallback((query: string) => {\n send(query);\n }, [send]);\n\n const handleClear = useCallback(() => {\n // Disconnect + reconnect to start fresh session\n // For now, just reload — ChatSession doesn't expose clearChat\n window.location.reload();\n }, []);\n\n return (\n <div className=\"vw-cv\">\n {/* Header */}\n <div className=\"vw-cv-head\">\n <button className=\"vw-cv-back\" onClick={onBack}><IconBack /></button>\n <div className=\"vw-cv-avatar\">\n {name.charAt(0)}\n </div>\n <div className=\"vw-cv-who\">\n <span className=\"vw-cv-name\">{name}</span>\n <span className=\"vw-cv-status\">\n <span className={`vw-cv-dot ${connected ? \"\" : \"vw-cv-dot--off\"}`} />\n {connected ? \"en línea\" : \"conectando…\"}\n </span>\n </div>\n <div className=\"vw-cv-actions\">\n {hasUserMessages && (\n <button className=\"vw-cv-action\" onClick={handleClear} title=\"Nueva conversación\">\n <IconTrash />\n </button>\n )}\n <button className=\"vw-cv-action vw-cv-action--voice\" onClick={onVoiceCall} title=\"Llamada de voz\">\n <IconMic />\n </button>\n </div>\n </div>\n\n {/* Messages */}\n <div className=\"vw-cv-body\" ref={bodyRef}>\n {allMessages.map((msg) => {\n if (msg.role === \"user\") {\n return (\n <div key={msg.id} className=\"vw-cv-msg vw-cv-msg--user\">\n {msg.text}\n </div>\n );\n }\n return (\n <div key={msg.id} className={`vw-cv-msg vw-cv-msg--bot ${msg.isStreaming ? \"vw-cv-streaming\" : \"\"}`}>\n <StreamingText targetText={msg.text || \"\"} streaming={!!msg.isStreaming} />\n {msg.isStreaming && <span className=\"vw-cv-cursor\" />}\n </div>\n );\n })}\n\n {/* Typing skeleton */}\n {typing && !messages.some((m) => m.isStreaming) && (\n <div className=\"vw-cv-msg vw-cv-msg--bot vw-cv-skeleton\">\n <span className=\"vw-cv-sk-dot\" />\n <span className=\"vw-cv-sk-dot\" />\n <span className=\"vw-cv-sk-dot\" />\n </div>\n )}\n\n {/* Error display */}\n {error && (\n <div className=\"vw-cv-msg vw-cv-msg--bot\" style={{ color: \"rgba(248,113,113,.9)\", borderColor: \"rgba(248,113,113,.2)\" }}>\n ⚠️ {error}\n </div>\n )}\n </div>\n\n {/* Quick options — show before first user message */}\n {!hasUserMessages && chat.quickOptions && chat.quickOptions.length > 0 && (\n <div className=\"vw-cv-quick\">\n {chat.quickOptions.map((opt, i) => (\n <button key={i} onClick={() => handleQuick(opt.query)} disabled={typing}>\n {opt.label}\n </button>\n ))}\n </div>\n )}\n\n {/* Input */}\n <form className=\"vw-cv-input\" onSubmit={handleSubmit} autoComplete=\"off\">\n <input\n ref={inputRef}\n type=\"text\"\n placeholder=\"Escribí tu mensaje...\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n disabled={typing}\n />\n <button type=\"submit\" className=\"vw-cv-send\" disabled={typing || !input.trim()}>\n <IconSend />\n </button>\n </form>\n </div>\n );\n}\n","import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { t } from \"./locales.js\";\nimport { HUB_CSS } from \"./hub-styles.js\";\nimport { CHAT_VIEW_CSS } from \"./hub-chat-styles.js\";\nimport { ChatView } from \"./ChatView.js\";\nimport type { TranscriptMessage } from \"../core\";\nimport type { AgentChannel, LocaleStrings, ChatConfig } from \"./types.js\";\n\n// ── Call Me state (lifted to VoiceWidget) ─────────────────────────\n\nexport interface CallMeState {\n status: \"dialing\" | \"connected\" | \"ended\" | \"error\";\n messages: TranscriptMessage[];\n duration: number;\n phone: string;\n error?: string;\n}\n\n// ── Inline SVG icons (no external deps) ──────────────────────────\n\nconst IconMic = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"9\" y=\"1\" width=\"6\" height=\"11\" rx=\"3\" />\n <path d=\"M19 10v1a7 7 0 0 1-14 0v-1\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\" />\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\" />\n </svg>\n);\n\nconst IconWhatsApp = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"20\" height=\"20\">\n <path d=\"M17.5 14.4c-.3-.1-1.7-.8-2-.9-.3-.1-.5-.2-.7.1-.2.3-.8.9-1 1.1-.2.2-.4.2-.7.1-.3-.1-1.3-.5-2.4-1.5-.9-.8-1.5-1.8-1.7-2.1-.2-.3 0-.5.1-.6.1-.1.3-.4.4-.5.1-.2.2-.3.3-.5.1-.2 0-.4 0-.5-.1-.1-.7-1.7-.9-2.3-.2-.6-.5-.5-.7-.5h-.6c-.2 0-.5.1-.8.4-.3.3-1 1-1 2.4 0 1.4 1 2.8 1.2 3 .1.2 2 3 4.8 4.2.7.3 1.2.5 1.6.6.7.2 1.3.2 1.8.1.6-.1 1.7-.7 1.9-1.3.2-.7.2-1.2.2-1.3-.1-.1-.3-.2-.6-.3zM12 2C6.5 2 2 6.5 2 12c0 1.8.5 3.5 1.3 5L2 22l5.2-1.3c1.4.8 3 1.2 4.7 1.2h.1c5.5 0 10-4.5 10-10S17.5 2 12 2z\" />\n </svg>\n);\n\nconst IconPhone = ({ size = 20 }: { size?: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\" />\n </svg>\n);\n\nconst IconX = ({ size = 16 }: { size?: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" /><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n);\n\n// ── Helpers ───────────────────────────────────────────────────────\n\nfunction findLastIndex<T>(arr: T[], fn: (item: T) => boolean): number {\n for (let i = arr.length - 1; i >= 0; i--) {\n if (fn(arr[i])) return i;\n }\n return -1;\n}\n\nfunction whatsappUrl(phone: string): string {\n const clean = phone.replace(/\\D/g, \"\");\n return `https://wa.me/${clean}`;\n}\n\n// ── Types ─────────────────────────────────────────────────────────\n\ninterface ContactHubProps {\n open: boolean;\n onClose: () => void;\n channels: AgentChannel[];\n name: string;\n locale: string;\n labels?: Partial<LocaleStrings>;\n avatar?: string;\n callMeEndpoint?: string;\n agent: string;\n server?: string;\n chat?: ChatConfig;\n tokenProvider?: () => Promise<{ token: string; server: string; expires_in?: number }>;\n /** Called when Call Me state changes */\n onCallMeState?: (state: CallMeState | null) => void;\n /** Connect to WebRTC voice session. Passed explicitly instead of using useVoice(). */\n connect: () => Promise<void>;\n}\n\n// ── ContactHub Component ──────────────────────────────────────────\n\nexport function ContactHub({\n open, onClose, channels, name, locale, labels, avatar, callMeEndpoint,\n agent, server, chat, tokenProvider, onCallMeState, connect,\n}: ContactHubProps) {\n const [view, setView] = useState<\"menu\" | \"call\" | \"chat\">(\"menu\");\n const [phone, setPhone] = useState(\"\");\n const [status, setStatus] = useState<\"idle\" | \"error\">(\"idle\");\n const [errorMsg, setErrorMsg] = useState(\"\");\n\n /* Inject hub + chat CSS once */\n useEffect(() => {\n if (document.getElementById(\"vw-hub-styles\")) return;\n const el = document.createElement(\"style\");\n el.id = \"vw-hub-styles\";\n el.textContent = HUB_CSS + CHAT_VIEW_CSS;\n document.head.appendChild(el);\n }, []);\n\n // ── SSE refs — persist across hub open/close ──\n const sseAbortRef = useRef<AbortController | null>(null);\n const sseMessagesRef = useRef<TranscriptMessage[]>([]);\n const sseIdCounter = useRef(0);\n const sseDurationRef = useRef(0);\n const sseTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const sseStartTimeRef = useRef<number | null>(null);\n const ssePhoneRef = useRef(\"\");\n\n // Reset on close\n useEffect(() => {\n if (!open) {\n const timer = setTimeout(() => {\n setView(\"menu\");\n setStatus(\"idle\");\n setPhone(\"\");\n setErrorMsg(\"\");\n }, 300);\n return () => clearTimeout(timer);\n }\n }, [open]);\n\n // Cleanup SSE on unmount\n useEffect(() => {\n return () => {\n sseAbortRef.current?.abort();\n if (sseTimerRef.current) clearInterval(sseTimerRef.current);\n };\n }, []);\n\n const hasWebrtc = channels.some((c) => c.type === \"webrtc\");\n const hasChat = channels.some((c) => c.type === \"chat\") && !!chat;\n const waChannel = channels.find((c) => c.type === \"whatsapp\" && c.phone);\n const phoneChannel = channels.find((c) => c.type === \"phone\");\n const showCallMe = !!callMeEndpoint && !!phoneChannel;\n\n const handleVoice = async () => {\n onClose();\n await connect();\n };\n\n const l = (key: keyof LocaleStrings) => t(locale, key, labels, { name });\n\n const handleVoiceFromChat = async () => {\n onClose();\n await connect();\n };\n\n // ── SSE emit helper ──\n const emitSSEState = (status: CallMeState[\"status\"]) => {\n onCallMeState?.({\n status,\n messages: [...sseMessagesRef.current],\n duration: sseDurationRef.current,\n phone: ssePhoneRef.current,\n });\n };\n\n // ── SSE event handler ──\n const handleSSEEvent = (event: string, data: any) => {\n switch (event) {\n case \"call.started\": {\n sseStartTimeRef.current = Date.now();\n sseTimerRef.current = setInterval(() => {\n sseDurationRef.current = Math.floor((Date.now() - sseStartTimeRef.current!) / 1000);\n emitSSEState(\"connected\");\n }, 1000);\n emitSSEState(\"connected\");\n break;\n }\n case \"bot.word\": {\n const mid = data.messageId;\n const msgs = sseMessagesRef.current;\n const idx = msgs.findIndex((m) => m.role === \"bot\" && m.messageId === mid);\n if (idx >= 0) {\n msgs[idx] = { ...msgs[idx], text: data.text, speaking: true };\n } else {\n msgs.push({ id: ++sseIdCounter.current, role: \"bot\", messageId: mid, text: data.text, speaking: true });\n }\n sseMessagesRef.current = [...msgs];\n emitSSEState(\"connected\");\n break;\n }\n case \"bot.confirmed\": {\n const mid = data.messageId;\n const msgs = sseMessagesRef.current;\n const idx = msgs.findIndex((m) => m.role === \"bot\" && m.messageId === mid);\n if (idx >= 0) {\n msgs[idx] = { ...msgs[idx], text: data.text, speaking: false };\n } else {\n msgs.push({ id: ++sseIdCounter.current, role: \"bot\", messageId: mid, text: data.text, speaking: false });\n }\n sseMessagesRef.current = [...msgs];\n emitSSEState(\"connected\");\n break;\n }\n case \"user.speaking\": {\n if (!data.text) break;\n const msgs = sseMessagesRef.current;\n const lastUserIdx = findLastIndex(msgs, (m) => m.role === \"user\");\n const hasBotAfter = lastUserIdx >= 0 && msgs.slice(lastUserIdx + 1).some((m) => m.role === \"bot\");\n if (lastUserIdx >= 0 && !hasBotAfter) {\n msgs[lastUserIdx] = { ...msgs[lastUserIdx], text: data.text, isInterim: true };\n } else {\n msgs.push({ id: ++sseIdCounter.current, role: \"user\", text: data.text, isInterim: true });\n }\n sseMessagesRef.current = [...msgs];\n emitSSEState(\"connected\");\n break;\n }\n case \"user.message\": {\n if (!data.text) break;\n const msgs = sseMessagesRef.current;\n const idx = findLastIndex(msgs, (m) => m.role === \"user\" && !!m.isInterim);\n if (idx >= 0) {\n msgs[idx] = { ...msgs[idx], text: data.text, isInterim: false };\n } else {\n msgs.push({ id: ++sseIdCounter.current, role: \"user\", text: data.text, isInterim: false });\n }\n sseMessagesRef.current = [...msgs];\n emitSSEState(\"connected\");\n break;\n }\n case \"call.ended\": {\n sseDurationRef.current = data.duration || sseDurationRef.current;\n if (sseTimerRef.current) clearInterval(sseTimerRef.current);\n onCallMeState?.({\n status: \"ended\",\n messages: [...sseMessagesRef.current],\n duration: sseDurationRef.current,\n phone: ssePhoneRef.current,\n });\n break;\n }\n case \"error\": {\n if (sseTimerRef.current) clearInterval(sseTimerRef.current);\n onCallMeState?.({\n status: \"error\",\n messages: [],\n duration: 0,\n phone: ssePhoneRef.current,\n error: data.message,\n });\n break;\n }\n }\n };\n\n // ── Start Call Me — triggered by FORM SUBMIT, not useEffect ──\n const startCallMe = async (phoneNum: string) => {\n // Reset SSE state\n sseMessagesRef.current = [];\n sseIdCounter.current = 0;\n sseDurationRef.current = 0;\n sseStartTimeRef.current = null;\n ssePhoneRef.current = phoneNum;\n\n const controller = new AbortController();\n sseAbortRef.current = controller;\n\n // Emit dialing state immediately\n onCallMeState?.({ status: \"dialing\", messages: [], duration: 0, phone: phoneNum });\n\n let res: Response;\n try {\n res = await fetch(callMeEndpoint!, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ phone: phoneNum }),\n signal: controller.signal,\n });\n } catch (err: any) {\n if (err.name === \"AbortError\") return;\n onCallMeState?.({ status: \"error\", messages: [], duration: 0, phone: phoneNum, error: l(\"callMe.error\") });\n return;\n }\n\n const ct = res.headers.get(\"content-type\") || \"\";\n if (ct.includes(\"application/json\")) {\n const data = await res.json().catch(() => ({}));\n onCallMeState?.({ status: \"error\", messages: [], duration: 0, phone: phoneNum, error: data.error || l(\"callMe.error\") });\n return;\n }\n\n // Parse SSE stream\n const reader = res.body!.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop()!;\n let currentEvent = \"\";\n for (const line of lines) {\n if (line.startsWith(\"event: \")) {\n currentEvent = line.slice(7).trim();\n } else if (line.startsWith(\"data: \") && currentEvent) {\n try {\n const data = JSON.parse(line.slice(6));\n handleSSEEvent(currentEvent, data);\n } catch { /* skip malformed */ }\n currentEvent = \"\";\n }\n }\n }\n } catch (err: any) {\n if (err.name !== \"AbortError\") {\n console.error(\"[ContactHub] Stream error:\", err);\n }\n }\n };\n\n const handleStartCall = (e: React.FormEvent) => {\n e.preventDefault();\n if (!phone.trim()) return;\n // Close hub, start SSE — triggered by click, NOT useEffect\n onClose();\n startCallMe(phone.trim());\n };\n\n if (!open) return null;\n\n return (\n <div className=\"vw-hub-backdrop\" onClick={(e) => { if (e.target === e.currentTarget) onClose(); }}>\n <div className={`vw-hub-panel${view === \"chat\" ? \" vw-hub-panel--chat\" : \"\"}`}>\n {view !== \"chat\" && (\n <button className=\"vw-hub-close\" onClick={onClose}><IconX /></button>\n )}\n\n {view === \"menu\" ? (\n <div className=\"vw-hub-menu\">\n <div className=\"vw-hub-header\">\n {avatar && <div className=\"vw-hub-avatar\">{avatar}</div>}\n <h3>{l(\"hub.title\")}</h3>\n <p>{l(\"hub.subtitle\")}</p>\n </div>\n\n <div className=\"vw-hub-options\">\n {hasWebrtc && (\n <button className=\"vw-hub-opt\" onClick={handleVoice}>\n <span className=\"vw-hub-icon vw-hub-icon--voice\"><IconMic /></span>\n <span className=\"vw-hub-body\">\n <span className=\"vw-hub-title\">{l(\"hub.voice\")}</span>\n <span className=\"vw-hub-desc\">{l(\"hub.voiceDesc\")}</span>\n </span>\n <span className=\"vw-hub-arrow\">→</span>\n </button>\n )}\n\n {hasChat && (\n <button className=\"vw-hub-opt\" onClick={() => setView(\"chat\")}>\n <span className=\"vw-hub-icon vw-hub-icon--chat\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n </span>\n <span className=\"vw-hub-body\">\n <span className=\"vw-hub-title\">{l(\"hub.chat\")}</span>\n <span className=\"vw-hub-desc\">{l(\"hub.chatDesc\")}</span>\n </span>\n <span className=\"vw-hub-arrow\">→</span>\n </button>\n )}\n\n {waChannel && (\n <a\n className=\"vw-hub-opt\"\n href={whatsappUrl(waChannel.phone!)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onClose}\n >\n <span className=\"vw-hub-icon vw-hub-icon--wa\"><IconWhatsApp /></span>\n <span className=\"vw-hub-body\">\n <span className=\"vw-hub-title\">{l(\"hub.whatsapp\")}</span>\n <span className=\"vw-hub-desc\">{l(\"hub.whatsappDesc\")}</span>\n </span>\n <span className=\"vw-hub-arrow\">→</span>\n </a>\n )}\n\n {showCallMe && (\n <button className=\"vw-hub-opt\" onClick={() => setView(\"call\")}>\n <span className=\"vw-hub-icon vw-hub-icon--call\"><IconPhone /></span>\n <span className=\"vw-hub-body\">\n <span className=\"vw-hub-title\">{l(\"hub.callMe\")}</span>\n <span className=\"vw-hub-desc\">{l(\"hub.callMeDesc\")}</span>\n </span>\n <span className=\"vw-hub-arrow\">→</span>\n </button>\n )}\n </div>\n </div>\n ) : view === \"call\" ? (\n <div className=\"vw-cm\">\n <button className=\"vw-cm-back\" onClick={() => setView(\"menu\")}>← {l(\"callMe.back\")}</button>\n <div className=\"vw-cm-phone-icon\"><IconPhone size={24} /></div>\n <h3>{l(\"callMe.title\")}</h3>\n\n <form className=\"vw-cm-form\" onSubmit={handleStartCall}>\n <input\n type=\"tel\"\n placeholder={l(\"callMe.placeholder\")}\n value={phone}\n onChange={(e) => { setPhone(e.target.value); if (status === \"error\") setStatus(\"idle\"); }}\n autoFocus\n />\n <button type=\"submit\" disabled={!phone.trim()}>\n <IconPhone size={16} />{l(\"callMe.submit\")}\n </button>\n {status === \"error\" && <span className=\"vw-cm-error\">{errorMsg}</span>}\n {l(\"callMe.formNote\") && (\n <span className=\"vw-cm-note\" dangerouslySetInnerHTML={{ __html: l(\"callMe.formNote\") }} />\n )}\n </form>\n </div>\n ) : view === \"chat\" ? (\n <ChatView\n agent={agent}\n server={server}\n name={name}\n locale={locale}\n labels={labels}\n chat={chat!}\n tokenProvider={tokenProvider}\n onBack={() => setView(\"menu\")}\n onVoiceCall={handleVoiceFromChat}\n />\n ) : null}\n </div>\n </div>\n );\n}\n","import { useState, useEffect, useRef } from \"react\";\nimport type { AgentInfo } from \"./types.js\";\n\nconst cache = new Map<string, AgentInfo>();\n\n/**\n * Fetch agent channel info from the server for auto-discovery.\n * Caches results per agent+server combo to avoid re-fetching.\n */\nexport function useAgentInfo(\n agentId: string,\n server: string = \"https://voice.pinecall.io\",\n): { info: AgentInfo | null; loading: boolean } {\n const key = `${server}|${agentId}`;\n const [info, setInfo] = useState<AgentInfo | null>(cache.get(key) ?? null);\n const [loading, setLoading] = useState(!cache.has(key));\n const mountedRef = useRef(true);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => { mountedRef.current = false; };\n }, []);\n\n useEffect(() => {\n if (cache.has(key)) {\n setInfo(cache.get(key)!);\n setLoading(false);\n return;\n }\n\n let cancelled = false;\n setLoading(true);\n\n const baseUrl = server.replace(/\\/$/, \"\");\n fetch(`${baseUrl}/api/sdk/agent-info/${encodeURIComponent(agentId)}`)\n .then((res) => {\n if (!res.ok) throw new Error(`${res.status}`);\n return res.json();\n })\n .then((data: AgentInfo) => {\n if (!cancelled && mountedRef.current) {\n cache.set(key, data);\n setInfo(data);\n setLoading(false);\n }\n })\n .catch(() => {\n // Failed to fetch — not critical, widget still works without auto-discovery\n if (!cancelled && mountedRef.current) {\n setLoading(false);\n }\n });\n\n return () => { cancelled = true; };\n }, [key]);\n\n return { info, loading };\n}\n"]}
|