{"version":3,"file":"chatbot-core.mjs","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/localStorageManager.js","../node_modules/marked/lib/marked.esm.js","../src/messageFormatter.js","../src/themeGenerator.js","../src/chatbot-core.js"],"sourcesContent":["function styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nexport default styleInject;\n","/**\r\n * LocalStorage Manager\r\n * Handles storing and retrieving chatbot data from localStorage\r\n * Manages: Config and Conversation State (visitor, session, history, usage limits)\r\n */\r\nclass LocalStorageManager {\r\n    constructor(chatbotId = null) {\r\n        this.chatbotId = chatbotId; // Store chatbotId for instance methods\r\n        this.keys = {\r\n            config: 'aptolix_chatbot_config',\r\n            state: 'aptolix_chatbot_state'\r\n        };\r\n    }\r\n\r\n    // ============================================\r\n    // HELPER METHODS\r\n    // ============================================\r\n\r\n    /**\r\n     * Get conversation state object\r\n     * @param {string} chatbotId - The chatbot ID (optional, uses instance chatbotId if not provided)\r\n     * @returns {Object|null} State object or null if not found\r\n     */\r\n    _getState(chatbotId = null) {\r\n        chatbotId = chatbotId || this.chatbotId;\r\n        if (!chatbotId) return null;\r\n        \r\n        try {\r\n            const key = `${this.keys.state}_${chatbotId}`;\r\n            const stored = localStorage.getItem(key);\r\n            \r\n            if (!stored) {\r\n                return null;\r\n            }\r\n\r\n            return JSON.parse(stored);\r\n        } catch (error) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Save conversation state object\r\n     * @param {string} chatbotId - The chatbot ID (optional, uses instance chatbotId if not provided)\r\n     * @param {Object} state - State object to save\r\n     */\r\n    _saveState(chatbotId, state) {\r\n        // Handle both old signature (chatbotId, state) and new signature (state only)\r\n        if (typeof chatbotId === 'object' && state === undefined) {\r\n            state = chatbotId;\r\n            chatbotId = this.chatbotId;\r\n        }\r\n        if (!chatbotId) return;\r\n        \r\n        try {\r\n            const key = `${this.keys.state}_${chatbotId}`;\r\n            state.timestamp = Date.now();\r\n            state.version = __VERSION__;\r\n            localStorage.setItem(key, JSON.stringify(state));\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check if stored data is from today\r\n     * @param {number} timestamp - Timestamp to check\r\n     * @returns {boolean}\r\n     */\r\n    _isToday(timestamp) {\r\n        const today = new Date();\r\n        const storedDate = new Date(timestamp);\r\n        return (\r\n            today.getFullYear() === storedDate.getFullYear() &&\r\n            today.getMonth() === storedDate.getMonth() &&\r\n            today.getDate() === storedDate.getDate()\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Get start of today timestamp (00:00:00)\r\n     * @returns {number}\r\n     */\r\n    _getTodayStart() {\r\n        const today = new Date();\r\n        today.setHours(0, 0, 0, 0);\r\n        return today.getTime();\r\n    }\r\n\r\n    // ============================================\r\n    // 1. CONFIG MANAGEMENT\r\n    // ============================================\r\n\r\n    /**\r\n     * Save chatbot configuration\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @param {Object} config - Configuration object to store\r\n     */\r\n    saveConfig(chatbotId, config) {\r\n        try {\r\n            const key = `${this.keys.config}_${chatbotId}`;\r\n            const data = {\r\n                config: config,\r\n                timestamp: Date.now()\r\n            };\r\n            localStorage.setItem(key, JSON.stringify(data));\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Retrieve chatbot configuration\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @returns {Object|null} Configuration object or null if not found\r\n     */\r\n    getConfig(chatbotId) {\r\n        try {\r\n            const key = `${this.keys.config}_${chatbotId}`;\r\n            const stored = localStorage.getItem(key);\r\n            \r\n            if (!stored) {\r\n                return null;\r\n            }\r\n\r\n            const data = JSON.parse(stored);\r\n            return data.config;\r\n        } catch (error) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Clear chatbot configuration\r\n     * @param {string} chatbotId - The chatbot ID\r\n     */\r\n    clearConfig(chatbotId) {\r\n        try {\r\n            const key = `${this.keys.config}_${chatbotId}`;\r\n            localStorage.removeItem(key);\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check if config exists\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @returns {boolean}\r\n     */\r\n    hasConfig(chatbotId) {\r\n        const key = `${this.keys.config}_${chatbotId}`;\r\n        return localStorage.getItem(key) !== null;\r\n    }\r\n\r\n    // ============================================\r\n    // 2. VISITOR ID MANAGEMENT\r\n    // ============================================\r\n\r\n    /**\r\n     * Save visitor ID for a chatbot\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @param {string} visitorId - Unique visitor identifier\r\n     */\r\n    saveVisitorId(chatbotId, visitorId) {\r\n        try {\r\n            const state = this._getState(chatbotId) || {};\r\n            state.visitorId = visitorId;\r\n            this._saveState(chatbotId, state);\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Retrieve visitor ID for a chatbot\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @returns {string|null} Visitor ID or null if not found\r\n     */\r\n    getVisitorId(chatbotId) {\r\n        try {\r\n            const state = this._getState(chatbotId);\r\n            return state?.visitorId || null;\r\n        } catch (error) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Clear visitor ID\r\n     * @param {string} chatbotId - The chatbot ID\r\n     */\r\n    clearVisitorId(chatbotId) {\r\n        try {\r\n            const state = this._getState(chatbotId);\r\n            if (state) {\r\n                delete state.visitorId;\r\n                this._saveState(chatbotId, state);\r\n            }\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check if visitor ID exists\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @returns {boolean}\r\n     */\r\n    hasVisitorId(chatbotId) {\r\n        return this.getVisitorId(chatbotId) !== null;\r\n    }\r\n\r\n    // ============================================\r\n    // 3. SESSION ID MANAGEMENT\r\n    // ============================================\r\n\r\n    /**\r\n     * Save session ID for a chatbot\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @param {string} sessionId - Unique session identifier\r\n     */\r\n    saveSessionId(chatbotId, sessionId) {\r\n        try {\r\n            const state = this._getState(chatbotId) || {};\r\n            state.sessionId = sessionId;\r\n            this._saveState(chatbotId, state);\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Retrieve session ID for a chatbot\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @returns {string|null} Session ID or null if not found\r\n     */\r\n    getSessionId(chatbotId) {\r\n        try {\r\n            const state = this._getState(chatbotId);\r\n            return state?.sessionId || null;\r\n        } catch (error) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Clear session ID\r\n     * @param {string} chatbotId - The chatbot ID\r\n     */\r\n    clearSessionId(chatbotId) {\r\n        try {\r\n            const state = this._getState(chatbotId);\r\n            if (state) {\r\n                delete state.sessionId;\r\n                this._saveState(chatbotId, state);\r\n            }\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check if session ID exists\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @returns {boolean}\r\n     */\r\n    hasSessionId(chatbotId) {\r\n        return this.getSessionId(chatbotId) !== null;\r\n    }\r\n\r\n    // ============================================\r\n    // 4. CHAT HISTORY MANAGEMENT (with daily expiration)\r\n    // ============================================\r\n\r\n    /**\r\n     * Save chat history (expires next day)\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @param {string} sessionId - The session ID (not stored in history, validated against state.sessionId)\r\n     * @param {Array} messages - Array of message objects\r\n     */\r\n    saveChatHistory(chatbotId, sessionId, messages) {\r\n        try {\r\n            const state = this._getState(chatbotId) || {};\r\n            state.history = {\r\n                messages: messages,\r\n                timestamp: Date.now()\r\n            };\r\n            this._saveState(chatbotId, state);\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Retrieve chat history (returns null if expired)\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @param {string} sessionId - The session ID\r\n     * @returns {Array|null} Array of messages or null if not found/expired\r\n     */\r\n    getChatHistory(chatbotId, sessionId) {\r\n        try {\r\n            const state = this._getState(chatbotId);\r\n            \r\n            if (!state?.history) {\r\n                return null;\r\n            }\r\n\r\n            const { history } = state;\r\n            \r\n            // Check if history is for the current session\r\n            if (state.sessionId !== sessionId) {\r\n                return null;\r\n            }\r\n            \r\n            // Check if history is from today\r\n            if (!this._isToday(history.timestamp)) {\r\n                // History expired - clear it\r\n                this.clearChatHistory(chatbotId, sessionId);\r\n                return null;\r\n            }\r\n\r\n            return history.messages;\r\n        } catch (error) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Clear chat history\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @param {string} sessionId - The session ID\r\n     */\r\n    clearChatHistory(chatbotId, sessionId) {\r\n        try {\r\n            const state = this._getState(chatbotId);\r\n            if (state?.history && state.sessionId === sessionId) {\r\n                delete state.history;\r\n                this._saveState(chatbotId, state);\r\n            }\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check if chat history exists (and not expired)\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @param {string} sessionId - The session ID\r\n     * @returns {boolean}\r\n     */\r\n    hasChatHistory(chatbotId, sessionId) {\r\n        return this.getChatHistory(chatbotId, sessionId) !== null;\r\n    }\r\n\r\n    // ============================================\r\n    // 5. USAGE LIMIT REACHED MANAGEMENT (expires at limitReachedDate)\r\n    // ============================================\r\n\r\n    /**\r\n     * Set usage limit reached status with expiration date\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @param {string} visitorId - The visitor ID\r\n     * @param {string} limitReachedDate - UTC date string when limit expires\r\n     */\r\n    setUsageLimitReached(chatbotId, visitorId, limitReachedDate) {\r\n        try {\r\n            const state = this._getState(chatbotId) || {};\r\n            state.usageLimitReached = {\r\n                limitReachedDate: limitReachedDate,\r\n                timestamp: Date.now()\r\n            };\r\n            this._saveState(chatbotId, state);\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get usage limit data (returns null if expired)\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @param {string} visitorId - The visitor ID\r\n     * @returns {Object|null} Object with limitReachedDate or null if expired/not found\r\n     */\r\n    getUsageLimitReached(chatbotId, visitorId) {\r\n        try {\r\n            const state = this._getState(chatbotId);\r\n            \r\n            if (!state?.usageLimitReached) {\r\n                return null;\r\n            }\r\n\r\n            const { usageLimitReached } = state;\r\n            let limitDate;\r\n            \r\n            // If the date string doesn't include time (just YYYY-MM-DD), \r\n            // set it to end of day (23:59:59.999 UTC) instead of start of day (00:00:00 UTC)\r\n            if (usageLimitReached.limitReachedDate.length === 10 && !usageLimitReached.limitReachedDate.includes('T')) {\r\n                // Parse date and add time to make it end of day\r\n                limitDate = new Date(usageLimitReached.limitReachedDate + 'T23:59:59.999Z');\r\n            } else {\r\n                limitDate = new Date(usageLimitReached.limitReachedDate);\r\n            }\r\n            \r\n            const now = new Date();\r\n            \r\n            // Check if limit date has passed (strictly greater than)\r\n            if (now > limitDate) {\r\n                // Limit expired - clear it\r\n                this.clearUsageLimitReached(chatbotId, visitorId);\r\n                return null;\r\n            }\r\n\r\n            return {\r\n                limitReachedDate: usageLimitReached.limitReachedDate,\r\n                timestamp: usageLimitReached.timestamp\r\n            };\r\n        } catch (error) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Clear usage limit\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @param {string} visitorId - The visitor ID\r\n     */\r\n    clearUsageLimitReached(chatbotId, visitorId) {\r\n        try {\r\n            const state = this._getState(chatbotId);\r\n            if (state) {\r\n                delete state.usageLimitReached;\r\n                this._saveState(chatbotId, state);\r\n            }\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check if usage limit is active (not expired)\r\n     * @param {string} chatbotId - The chatbot ID\r\n     * @param {string} visitorId - The visitor ID\r\n     * @returns {boolean}\r\n     */\r\n    hasUsageLimitReached(chatbotId, visitorId) {\r\n        return this.getUsageLimitReached(chatbotId, visitorId) !== null;\r\n    }\r\n\r\n    // ============================================\r\n    // UTILITY METHODS\r\n    // ============================================\r\n\r\n    /**\r\n     * Clear all data for a specific chatbot\r\n     * @param {string} chatbotId - The chatbot ID (optional, uses instance chatbotId if not provided)\r\n     * @param {string} visitorId - The visitor ID (optional, for compatibility)\r\n     * @param {string} sessionId - The session ID (optional, for compatibility)\r\n     */\r\n    clearAll(chatbotId = null, visitorId = null, sessionId = null) {\r\n        chatbotId = chatbotId || this.chatbotId;\r\n        if (!chatbotId) return;\r\n        \r\n        this.clearConfig(chatbotId);\r\n        \r\n        // Clear entire state\r\n        try {\r\n            const key = `${this.keys.state}_${chatbotId}`;\r\n            localStorage.removeItem(key);\r\n        } catch (error) {\r\n        }\r\n    }\r\n\r\n    // ============================================\r\n    // WRAPPER METHODS FOR CHATBOT-CORE (Instance-based API)\r\n    // ============================================\r\n\r\n    /**\r\n     * Get conversation history (wrapper for getChatHistory without sessionId requirement)\r\n     * @returns {Array|null} Array of messages or null if not found\r\n     */\r\n    getConversationHistory() {\r\n        if (!this.chatbotId) return null;\r\n        const state = this._getState(this.chatbotId);\r\n\r\n        if (!state?.history) {\r\n            return null;\r\n        }\r\n\r\n        if (!this._isToday(state.history.timestamp)) {\r\n            this.clearConversationHistory();\r\n            return null;\r\n        }\r\n\r\n        return state.history.messages || null;\r\n    }\r\n\r\n    /**\r\n     * Save conversation history (wrapper for saveChatHistory without sessionId)\r\n     * @param {Array} messages - Array of message objects\r\n     */\r\n    saveConversationHistory(messages) {\r\n        if (!this.chatbotId) return;\r\n        const state = this._getState(this.chatbotId) || {};\r\n        state.history = {\r\n            messages: messages,\r\n            timestamp: Date.now()\r\n        };\r\n        this._saveState(this.chatbotId, state);\r\n    }\r\n\r\n    /**\r\n     * Clear conversation history (wrapper for clearChatHistory without sessionId)\r\n     */\r\n    clearConversationHistory() {\r\n        if (!this.chatbotId) return;\r\n        const state = this._getState(this.chatbotId);\r\n        if (state?.history) {\r\n            delete state.history;\r\n            this._saveState(this.chatbotId, state);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get rating for a conversation\r\n     * @param {string} conversationId - The conversation ID\r\n     * @returns {number|null} Rating value or null if not found\r\n     */\r\n    getRating(conversationId) {\r\n        if (!this.chatbotId) return null;\r\n        const state = this._getState(this.chatbotId);\r\n        return state?.ratings?.[conversationId] || null;\r\n    }\r\n\r\n    /**\r\n     * Save rating for a conversation\r\n     * @param {string} conversationId - The conversation ID\r\n     * @param {number} rating - Rating value (1-5)\r\n     */\r\n    saveRating(conversationId, rating) {\r\n        if (!this.chatbotId) return;\r\n        const state = this._getState(this.chatbotId) || {};\r\n        if (!state.ratings) {\r\n            state.ratings = {};\r\n        }\r\n        state.ratings[conversationId] = rating;\r\n        this._saveState(this.chatbotId, state);\r\n    }\r\n}\r\n\r\nexport default LocalStorageManager;\r\n","/**\n * marked v16.2.1 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var O=L();function H(l){O=l}var E={exec:()=>null};function h(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},xe=/^(?:[ \\t]*(?:\\n|$))+/,be=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,C=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Oe=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,j=/(?:[*+-]|\\d{1,9}[.)])/,se=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,ie=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Te=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),F=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,we=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,ye=h(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Pe=h(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,j).getRegex(),v=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Se=h(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),oe=h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),$e=h(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",oe).getRegex(),K={blockquote:$e,code:be,def:ye,fences:Re,heading:Oe,hr:C,html:Se,lheading:ie,list:Pe,newline:xe,paragraph:oe,table:E,text:we},re=h(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),_e={...K,lheading:Te,table:re,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},Le={...K,html:h(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",ie).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Me=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,ze=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,ae=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,W=/[\\s\\p{P}\\p{S}]/u,le=/[^\\s\\p{P}\\p{S}]/u,Ee=h(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,W).getRegex(),ue=/(?!~)[\\p{P}\\p{S}]/u,Ce=/(?!~)[\\s\\p{P}\\p{S}]/u,Ie=/(?:[^\\s\\p{P}\\p{S}]|~)/u,Be=/\\[[^\\[\\]]*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<(?! )[^<>]*?>/g,pe=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,qe=h(pe,\"u\").replace(/punct/g,D).getRegex(),ve=h(pe,\"u\").replace(/punct/g,ue).getRegex(),ce=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",De=h(ce,\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ze=h(ce,\"gu\").replace(/notPunctSpace/g,Ie).replace(/punctSpace/g,Ce).replace(/punct/g,ue).getRegex(),Ge=h(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),He=h(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),Ne=h(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),je=h(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Fe=h(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",je).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`[^`]*`|[^\\[\\]\\\\`])*?/,Qe=h(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),he=h(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),de=h(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),Ue=h(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",he).replace(\"nolink\",de).getRegex(),X={_backpedal:E,anyPunctuation:He,autolink:Ne,blockSkip:Be,br:ae,code:ze,del:E,emStrongLDelim:qe,emStrongRDelimAst:De,emStrongRDelimUnd:Ge,escape:Me,link:Qe,nolink:de,punctuation:Ee,reflink:he,reflinkSearch:Ue,tag:Fe,text:Ae,url:E},Ke={...X,link:h(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:h(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:Ze,emStrongLDelim:ve,url:h(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\"i\").replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/},We={...N,br:h(ae).replace(\"{2,}\",\"*\").getRegex(),text:h(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},I={normal:K,gfm:_e,pedantic:Le},M={normal:X,gfm:N,breaks:We,pedantic:Ke};var Xe={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},ke=l=>Xe[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ke)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ke);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,o)=>{let a=!1,u=s;for(;--u>=0&&o[u]===\"\\\\\";)a=!a;return a?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(l,e,t){let n=l.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=l.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return l.slice(0,n-r)}function ge(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===\"\\\\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(l,e,t,n,r){let i=e.href,s=e.title||null,o=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let a={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,a}function Je(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[o]=s;return o.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||O}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Je(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let o=!1,a=[],u;for(u=0;u<n.length;u++)if(this.rules.other.blockquoteStart.test(n[u]))a.push(n[u]),o=!0;else if(!o)a.push(n[u]);else break;n=n.slice(u);let p=a.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n    $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=f,n.length===0)break;let k=s.at(-1);if(k?.type===\"code\")break;if(k?.type===\"blockquote\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.blockquote(g);s[s.length-1]=T,r=r.substring(0,r.length-x.raw.length)+T.raw,i=i.substring(0,i.length-x.text.length)+T.text;break}else if(k?.type===\"list\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.list(g);s[s.length-1]=T,r=r.substring(0,r.length-k.raw.length)+T.raw,i=i.substring(0,i.length-x.raw.length)+T.raw,n=g.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),o=!1;for(;e;){let u=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let f=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,Z=>\" \".repeat(3*Z.length)),k=e.split(`\n`,1)[0],x=!f.trim(),g=0;if(this.options.pedantic?(g=2,c=f.trimStart()):x?g=t[1].length+1:(g=t[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,c=f.slice(g),g+=t[1].length),x&&this.rules.other.blankLine.test(k)&&(p+=k+`\n`,e=e.substring(k.length+1),u=!0),!u){let Z=this.rules.other.nextBulletRegex(g),ee=this.rules.other.hrRegex(g),te=this.rules.other.fencesBeginRegex(g),ne=this.rules.other.headingBeginRegex(g),me=this.rules.other.htmlBeginRegex(g);for(;e;){let G=e.split(`\n`,1)[0],A;if(k=G,this.options.pedantic?(k=k.replace(this.rules.other.listReplaceNesting,\"  \"),A=k):A=k.replace(this.rules.other.tabCharGlobal,\"    \"),te.test(k)||ne.test(k)||me.test(k)||Z.test(k)||ee.test(k))break;if(A.search(this.rules.other.nonSpaceChar)>=g||!k.trim())c+=`\n`+A.slice(g);else{if(x||f.replace(this.rules.other.tabCharGlobal,\"    \").search(this.rules.other.nonSpaceChar)>=4||te.test(f)||ne.test(f)||ee.test(f))break;c+=`\n`+k}!x&&!k.trim()&&(x=!0),p+=G+`\n`,e=e.substring(G.length+1),f=A.slice(g)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(o=!0));let T=null,Y;this.options.gfm&&(T=this.rules.other.listIsTask.exec(c),T&&(Y=T[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:p,task:!!T,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=p}let a=i.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let u=0;u<i.items.length;u++)if(this.lexer.state.top=!1,i.items[u].tokens=this.lexer.blockTokens(i.items[u].text,[]),!i.loose){let p=i.items[u].tokens.filter(f=>f.type===\"space\"),c=p.length>0&&p.some(f=>this.rules.other.anyLine.test(f.raw));i.loose=c}if(i.loose)for(let u=0;u<i.items.length;u++)i.items[u].loose=!0;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let o of r)this.rules.other.tableAlignRight.test(o)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(o)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(o)?s.align.push(\"left\"):s.align.push(null);for(let o=0;o<n.length;o++)s.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:s.align[o]});for(let o of i)s.rows.push(V(o,s.header.length).map((a,u)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:s.align[u]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=ge(t[2],\"()\");if(s===-2)return;if(s>-1){let a=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,a).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),fe(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return fe(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,o,a,u=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(a=[...o].length,r[3]||r[4]){u+=a;continue}else if((r[5]||r[6])&&s%3&&!((s+a)%3)){p+=a;continue}if(u-=a,u>0)continue;a=Math.min(a,a+u+p);let f=[...r[0]][0].length,k=e.slice(0,s+r.index+f+a);if(Math.min(s,a)%2){let g=k.slice(1,-1);return{type:\"em\",raw:k,text:g,tokens:this.lexer.inlineTokens(g)}}let x=k.slice(2,-2);return{type:\"strong\",raw:k,text:x,tokens:this.lexer.inlineTokens(x)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var b=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||O,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:I.normal,inline:M.normal};this.options.pedantic?(t.block=I.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=I.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:I,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\"    \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,o=e.slice(1),a;this.options.extensions.startBlock.forEach(u=>{a=u.call({lexer:this},o),typeof a==\"number\"&&a>=0&&(s=Math.min(s,a))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let i=!1,s=\"\";for(;e;){i||(s=\"\"),i=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,s)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let a=e;if(this.options.extensions?.startInline){let u=1/0,p=e.slice(1),c;this.options.extensions.startInline.forEach(f=>{c=f.call({lexer:this},p),typeof c==\"number\"&&c>=0&&(u=Math.min(u,c))}),u<1/0&&u>=0&&(a=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(a)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(s=o.raw.slice(-1)),i=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||O}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let o=0;o<e.items.length;o++){let a=e.items[o];r+=this.listitem(a)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let o=0;o<s.length;o++)n+=this.tablecell(s[o]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var S=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var R=class l{options;renderer;textRenderer;constructor(e){this.options=e||O,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new S}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=i,a=this.options.extensions.renderers[o.type].call({parser:this},o);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(o.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"space\":{n+=this.renderer.space(s);continue}case\"hr\":{n+=this.renderer.hr(s);continue}case\"heading\":{n+=this.renderer.heading(s);continue}case\"code\":{n+=this.renderer.code(s);continue}case\"table\":{n+=this.renderer.table(s);continue}case\"blockquote\":{n+=this.renderer.blockquote(s);continue}case\"list\":{n+=this.renderer.list(s);continue}case\"html\":{n+=this.renderer.html(s);continue}case\"def\":{n+=this.renderer.def(s);continue}case\"paragraph\":{n+=this.renderer.paragraph(s);continue}case\"text\":{let o=s,a=this.renderer.text(o);for(;r+1<e.length&&e[r+1].type===\"text\";)o=e[++r],a+=`\n`+this.renderer.text(o);t?n+=this.renderer.paragraph({type:\"paragraph\",raw:a,text:a,tokens:[{type:\"text\",raw:a,text:a,escaped:!0}]}):n+=a;continue}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=o||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}};var $=class{options;block;constructor(e){this.options=e||O}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}provideLexer(){return this.block?b.lex:b.lexInline}provideParser(){return this.block?R.parse:R.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=R;Renderer=P;TextRenderer=S;Lexer=b;Tokenizer=y;Hooks=$;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let o of s)n=n.concat(this.walkTokens(o.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let o=i[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...o){let a=i.renderer.apply(this,o);return a===!1&&(a=s.apply(this,o)),a}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let o=s,a=n.renderer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let o=s,a=n.tokenizer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new $;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let o=s,a=n.hooks[o],u=i[o];$.passThroughHooks.has(s)?i[o]=p=>{if(this.defaults.async)return Promise.resolve(a.call(i,p)).then(f=>u.call(i,f));let c=a.call(i,p);return u.call(i,c)}:i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(o){let a=[];return a.push(s.call(this,o)),i&&(a=a.concat(i.call(this,o))),a}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return b.lex(e,t??this.defaults)}parser(e,t){return R.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},o=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return o(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return o(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let a=s.hooks?s.hooks.provideLexer():e?b.lex:b.lexInline,u=s.hooks?s.hooks.provideParser():e?R.parse:R.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(p=>a(p,s)).then(p=>s.hooks?s.hooks.processAllTokens(p):p).then(p=>s.walkTokens?Promise.all(this.walkTokens(p,s.walkTokens)).then(()=>p):p).then(p=>u(p,s)).then(p=>s.hooks?s.hooks.postprocess(p):p).catch(o);try{s.hooks&&(n=s.hooks.preprocess(n));let p=a(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=u(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(p){return o(p)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function d(l,e){return _.parse(l,e)}d.options=d.setOptions=function(l){return _.setOptions(l),d.defaults=_.defaults,H(d.defaults),d};d.getDefaults=L;d.defaults=O;d.use=function(...l){return _.use(...l),d.defaults=_.defaults,H(d.defaults),d};d.walkTokens=function(l,e){return _.walkTokens(l,e)};d.parseInline=_.parseInline;d.Parser=R;d.parser=R.parse;d.Renderer=P;d.TextRenderer=S;d.Lexer=b;d.lexer=b.lex;d.Tokenizer=y;d.Hooks=$;d.parse=d;var Dt=d.options,Zt=d.setOptions,Gt=d.use,Ht=d.walkTokens,Nt=d.parseInline,jt=d,Ft=R.parse,Qt=b.lex;export{$ as Hooks,b as Lexer,B as Marked,R as Parser,P as Renderer,S as TextRenderer,y as Tokenizer,O as defaults,L as getDefaults,Qt as lexer,d as marked,Dt as options,jt as parse,Nt as parseInline,Ft as parser,Zt as setOptions,Gt as use,Ht as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","import { marked } from \"marked\";\r\n\r\n/**\r\n * Aptolix Message Formatter\r\n * Standalone utility to render messages with consistent Aptolix formatting\r\n * Use this in any project to maintain the same message markup/format\r\n */\r\n\r\n/**\r\n * Format messages to HTML with Aptolix styling\r\n * @param {Array} messages - Array of {type: 'user'|'bot', text: string, timestamp: number, rating?: number}\r\n * @param {Object} options - Configuration options\r\n * @param {boolean} options.showExactTime - Show exact time instead of relative (e.g., \"2:30 PM\" vs \"5 mins ago\")\r\n * @returns {string} HTML string with formatted messages\r\n */\r\nexport function formatMessages(messages, options = {}) {\r\n    const {\r\n        botname = 'AI Assistant',\r\n        username = 'You',\r\n        botaccentColor = '#4a57e2ff',\r\n        botAvatar = getDefaultBotAvatar(),\r\n        userAvatar = getDefaultUserAvatar(),\r\n        showExactTime = false\r\n    } = options;\r\n\r\n    // Calculate colors based on accent\r\n    const isLight = isLightColor(botaccentColor);\r\n    const userMessageBg = botaccentColor;\r\n    const userMessageText = isLight ? '#1f2937' : '#ffffff';\r\n    const botMessageBg = lightenColor(botaccentColor, 0.85);\r\n    const botMessageText = '#4b5563';\r\n\r\n    const messagesHTML = messages.map(msg => {\r\n        const isUser = msg.type === 'user';\r\n        const avatarHTML = isUser ? userAvatar : botAvatar;\r\n        const senderName = isUser ? username : botname;\r\n        const messageBg = isUser ? userMessageBg : botMessageBg;\r\n        const messageTextColor = isUser ? userMessageText : botMessageText;\r\n        \r\n        // Parse markdown for bot messages (full markdown support for lists, paragraphs, etc.)\r\n        const messageContent = msg.type === 'bot' ? marked.parse(msg.text || '') : (msg.text || '');\r\n        const timeStr = showExactTime ? formatExactTime(msg.timestamp) : formatRelativeTime(msg.timestamp);\r\n\r\n        let messageHTML = `\r\n            <div class=\"message ${msg.type}\">\r\n                <div class=\"message-avatar\">\r\n                    ${avatarHTML}\r\n                    <div class=\"message-sender\">${senderName}</div>\r\n                </div>\r\n                <div class=\"message-content\">\r\n                    <div class=\"message-text\" style=\"background-color: ${messageBg}; color: ${messageTextColor};\">\r\n                        ${messageContent}\r\n                    </div>\r\n                    <span class=\"message-timestamp\" data-timestamp=\"${msg.timestamp}\">${timeStr}</span>\r\n                    ${msg.rating && msg.rating > 0 ? `\r\n                    <div class=\"message-rating\">\r\n                        <span class=\"rating-stars\">${'★'.repeat(msg.rating)}${'☆'.repeat(5 - msg.rating)}</span>\r\n                    </div>\r\n                    ` : ''}\r\n                </div>\r\n            </div>\r\n        `;\r\n\r\n        return messageHTML;\r\n    }).join('');\r\n    \r\n    return `<div class=\"aptolix-messages-wrapper\">${messagesHTML}</div>`;\r\n}\r\n\r\n// Helper functions\r\nfunction formatRelativeTime(timestamp) {\r\n    const now = Date.now();\r\n    const diff = Math.floor((now - timestamp) / 1000);\r\n    \r\n    if (diff < 10) return 'just now';\r\n    if (diff < 60) return `${diff} secs ago`;\r\n    if (diff < 3600) {\r\n        const mins = Math.floor(diff / 60);\r\n        return mins === 1 ? '1 min ago' : `${mins} mins ago`;\r\n    }\r\n    if (diff < 86400) {\r\n        const hours = Math.floor(diff / 3600);\r\n        return hours === 1 ? '1 hour ago' : `${hours} hours ago`;\r\n    }\r\n    const days = Math.floor(diff / 86400);\r\n    return days === 1 ? '1 day ago' : `${days} days ago`;\r\n}\r\n\r\nfunction formatExactTime(timestamp) {\r\n    const date = new Date(timestamp);\r\n    const now = new Date();\r\n    \r\n    // Check if it's today\r\n    const isToday = date.toDateString() === now.toDateString();\r\n    \r\n    // Check if it's yesterday\r\n    const yesterday = new Date(now);\r\n    yesterday.setDate(yesterday.getDate() - 1);\r\n    const isYesterday = date.toDateString() === yesterday.toDateString();\r\n    \r\n    // Format time as HH:MM AM/PM\r\n    const timeStr = date.toLocaleTimeString('en-US', { \r\n        hour: 'numeric', \r\n        minute: '2-digit',\r\n        hour12: true \r\n    });\r\n    \r\n    if (isToday) {\r\n        return `Today at ${timeStr}`;\r\n    } else if (isYesterday) {\r\n        return `Yesterday at ${timeStr}`;\r\n    } else {\r\n        // Format as \"MMM DD, YYYY at HH:MM AM/PM\"\r\n        const dateStr = date.toLocaleDateString('en-US', { \r\n            month: 'short', \r\n            day: 'numeric',\r\n            year: 'numeric'\r\n        });\r\n        return `${dateStr} at ${timeStr}`;\r\n    }\r\n}\r\n\r\nfunction isLightColor(color) {\r\n    const hexToRgb = (hex) => {\r\n        const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i.exec(hex);\r\n        return result ? {\r\n            r: parseInt(result[1], 16),\r\n            g: parseInt(result[2], 16),\r\n            b: parseInt(result[3], 16)\r\n        } : null;\r\n    };\r\n    \r\n    let r, g, b;\r\n    if (color.startsWith('#')) {\r\n        const rgb = hexToRgb(color);\r\n        if (!rgb) return false;\r\n        r = rgb.r; g = rgb.g; b = rgb.b;\r\n    } else if (color.startsWith('rgb')) {\r\n        const match = color.match(/\\d+/g);\r\n        [r, g, b] = match.map(Number);\r\n    } else {\r\n        return false;\r\n    }\r\n    \r\n    return (0.299 * r + 0.587 * g + 0.114 * b) / 255 > 0.5;\r\n}\r\n\r\nfunction lightenColor(color, percent) {\r\n    const hexToRgb = (hex) => {\r\n        const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i.exec(hex);\r\n        return result ? {\r\n            r: parseInt(result[1], 16),\r\n            g: parseInt(result[2], 16),\r\n            b: parseInt(result[3], 16)\r\n        } : null;\r\n    };\r\n    \r\n    const rgb = hexToRgb(color);\r\n    if (!rgb) return color;\r\n    \r\n    const r = Math.min(255, Math.round(rgb.r + (255 - rgb.r) * percent));\r\n    const g = Math.min(255, Math.round(rgb.g + (255 - rgb.g) * percent));\r\n    const b = Math.min(255, Math.round(rgb.b + (255 - rgb.b) * percent));\r\n    \r\n    return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\r\n}\r\n\r\nfunction getDefaultBotAvatar() {\r\n    return `<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n        <circle cx=\"20\" cy=\"20\" r=\"18\" fill=\"#9333ea\"/>\r\n        <rect x=\"12\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\" fill=\"#fff\"/>\r\n        <rect x=\"22\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\" fill=\"#fff\"/>\r\n        <rect x=\"13\" y=\"26\" width=\"14\" height=\"4\" rx=\"2\" fill=\"#fff\"/>\r\n    </svg>`;\r\n}\r\n\r\nfunction getDefaultUserAvatar() {\r\n    return `<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n        <circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"#64748b\"/>\r\n        <circle cx=\"20\" cy=\"15\" r=\"6\" fill=\"#fff\"/>\r\n        <path d=\"M 8 35 Q 8 25 20 25 Q 32 25 32 35\" fill=\"#fff\"/>\r\n    </svg>`;\r\n}\r\n\r\nexport default formatMessages;\r\n","/**\r\n * ========================================================================\r\n * CENTRALIZED COLOR THEME GENERATOR\r\n * ========================================================================\r\n * This function generates a complete, consistent color palette based on\r\n * the primary accent color. All UI elements derive their colors from this\r\n * central theme to ensure visual harmony and easy debugging.\r\n * \r\n * HOW IT WORKS:\r\n * 1. Analyzes the primary color to determine if it's light or dark\r\n * 2. Generates complementary colors using lightening/darkening algorithms\r\n * 3. Creates high-contrast text colors based on background lightness\r\n * 4. Returns a structured theme object with colors for all UI elements\r\n * \r\n * THEME STRUCTURE:\r\n * - primary: The base accent color\r\n * - header: { background, text, button, border }\r\n * - messages: { userBackground, userText, botBackground, botText, link, timestamp }\r\n * - window: { background, border, shadow }\r\n * - input: { background, border, text, placeholder, buttonBackground, buttonText }\r\n * - footer: { text, link }\r\n * - bubble: { background, icon }\r\n * - hint: { background, text, border, closeButton }\r\n * - menu: { background, text, hover, border }\r\n * - rating: { star, text }\r\n * - utils: Helper functions for color manipulation\r\n * \r\n * DEBUGGING:\r\n * To debug color issues, log the entire theme object:\r\n * console.log('Theme:', theme);\r\n * \r\n * To adjust a specific color, modify the percentage in lightenColor/darkenColor calls\r\n * Example: lightenColor(primaryColor, 0.85) -> 85% lighter\r\n * \r\n * @param {string} primaryColor - The base accent color (hex format, e.g., '#4A90E2')\r\n * @returns {object} Complete color theme with all UI element colors\r\n */\r\nexport function generateTheme(primaryColor) {\r\n    // ===== Color Utility Functions =====\r\n    \r\n    // Convert hex to RGB (handles both 6 and 8 character hex codes)\r\n    const hexToRgb = (hex) => {\r\n        // Remove # if present and handle 8-char hex (with alpha)\r\n        const cleanHex = hex.replace('#', '').substring(0, 6);\r\n        const result = /^([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(cleanHex);\r\n        return result ? {\r\n            r: parseInt(result[1], 16),\r\n            g: parseInt(result[2], 16),\r\n            b: parseInt(result[3], 16)\r\n        } : null;\r\n    };\r\n    \r\n    // Determine if a color is light or dark (based on relative luminance)\r\n    const isLightColor = (color) => {\r\n        let r, g, b;\r\n        if (color.startsWith('#')) {\r\n            const rgb = hexToRgb(color);\r\n            if (!rgb) return false;\r\n            r = rgb.r;\r\n            g = rgb.g;\r\n            b = rgb.b;\r\n        } else if (color.startsWith('rgb')) {\r\n            const match = color.match(/\\d+/g);\r\n            [r, g, b] = match.map(Number);\r\n        } else {\r\n            return false;\r\n        }\r\n        \r\n        // Calculate relative luminance (perception-based)\r\n        const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\r\n        return luminance > 0.5;\r\n    };\r\n    \r\n    // Lighten a color by a percentage (0-1)\r\n    const lightenColor = (color, percent) => {\r\n        const rgb = hexToRgb(color);\r\n        if (!rgb) return color;\r\n        \r\n        const r = Math.min(255, Math.round(rgb.r + (255 - rgb.r) * percent));\r\n        const g = Math.min(255, Math.round(rgb.g + (255 - rgb.g) * percent));\r\n        const b = Math.min(255, Math.round(rgb.b + (255 - rgb.b) * percent));\r\n        \r\n        return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\r\n    };\r\n    \r\n    // Darken a color by a percentage (0-1)\r\n    const darkenColor = (color, percent) => {\r\n        const rgb = hexToRgb(color);\r\n        if (!rgb) return color;\r\n        \r\n        const r = Math.max(0, Math.round(rgb.r * (1 - percent)));\r\n        const g = Math.max(0, Math.round(rgb.g * (1 - percent)));\r\n        const b = Math.max(0, Math.round(rgb.b * (1 - percent)));\r\n        \r\n        return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\r\n    };\r\n    \r\n    // Add alpha transparency to a color\r\n    const addAlpha = (color, opacity) => {\r\n        const rgb = hexToRgb(color);\r\n        if (!rgb) return color;\r\n        return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`;\r\n    };\r\n    \r\n    // ===== Theme Generation =====\r\n    \r\n    const isAccentLight = isLightColor(primaryColor);\r\n    \r\n    return {\r\n        // Primary color\r\n        primary: primaryColor,\r\n        \r\n        // Contrast detection\r\n        isLight: isAccentLight,\r\n        \r\n        // Header colors\r\n        header: {\r\n            background: primaryColor,\r\n            text: isAccentLight ? '#1f2937' : '#ffffff',\r\n            // Light accents already use a muted title — keep subtitle at full title color.\r\n            // Bright white titles can take a slight fade without losing the pair.\r\n            subtitle: isAccentLight ? '#1f2937' : addAlpha('#ffffff', 0.9),\r\n            button: isAccentLight ? '#374151' : '#ffffff',\r\n            border: lightenColor(primaryColor, 0.85)\r\n        },\r\n        \r\n        // Message colors\r\n        messages: {\r\n            userBackground: primaryColor,\r\n            userText: isAccentLight ? '#1f2937' : '#ffffff',\r\n            botBackground: lightenColor(primaryColor, 0.85),\r\n            botText: '#4b5563',\r\n            link: darkenColor(primaryColor, 0.1),\r\n            timestamp: '#9ca3af'\r\n        },\r\n        \r\n        // Window/Container colors\r\n        window: {\r\n            background: lightenColor(primaryColor, 0.95),\r\n            border: isAccentLight ? darkenColor(primaryColor, 0.2) : lightenColor(primaryColor, 0.3),\r\n            shadow: addAlpha(primaryColor, 0.15)\r\n        },\r\n        \r\n        // Input area colors\r\n        input: {\r\n            background: '#ffffff',\r\n            border: lightenColor(primaryColor, 0.85),\r\n            text: '#1f2937',\r\n            placeholder: '#9ca3af',\r\n            buttonBackground: primaryColor,\r\n            buttonText: isAccentLight ? '#1f2937' : '#ffffff'\r\n        },\r\n        \r\n        // Footer colors\r\n        footer: {\r\n            text: isAccentLight ? darkenColor(primaryColor, 0.3) : lightenColor(primaryColor, 0.2),\r\n            link: darkenColor(primaryColor, 0.1)\r\n        },\r\n        \r\n        // Chat bubble (floating button)\r\n        bubble: {\r\n            background: primaryColor,\r\n            icon: isAccentLight ? '#1f2937' : '#ffffff'\r\n        },\r\n        \r\n        // Hint bubble\r\n        hint: {\r\n            background: '#ffffff',\r\n            text: '#1f2937',\r\n            border: lightenColor(primaryColor, 0.85),\r\n            closeButton: primaryColor\r\n        },\r\n        \r\n        // Menu dropdown\r\n        menu: {\r\n            background: '#ffffff',\r\n            text: '#1f2937',\r\n            hover: lightenColor(primaryColor, 0.9),\r\n            border: '#e5e7eb'\r\n        },\r\n        \r\n        // Rating stars\r\n        rating: {\r\n            star: '#fbbf24',\r\n            text: '#6b7280'\r\n        },\r\n        \r\n        // Utility colors\r\n        utils: {\r\n            lighten: lightenColor,\r\n            darken: darkenColor,\r\n            addAlpha: addAlpha,\r\n            hexToRgb: hexToRgb\r\n        }\r\n    };\r\n}\r\n\r\n// Only named export is used across the codebase; default export removed for consistency\r\n","/**\r\n * Aptolix Chatbot - Core UI & Logic\r\n * \r\n * This file contains the core chatbot functionality.\r\n * Can run in two contexts:\r\n * 1. Inside iframe (bubble mode) - receives config via postMessage\r\n * 2. Directly in page (section mode) - receives config via direct init call\r\n */\r\n\r\nimport './chatbotstyle.css';\r\nimport LocalStorageManager from './localStorageManager.js';\r\nimport { formatMessages } from './messageFormatter.js';\r\nimport { generateTheme } from './themeGenerator.js';\r\n\r\n// Detect if running in iframe\r\nconst isInIframe = window.self !== window.top;\r\n\r\n// Track if initialized\r\nlet initialized = false;\r\nlet config = null;\r\nlet conversationId = null;\r\nlet visitorId = null;\r\nlet sessionId = null;\r\nlet messageHistory = [];\r\nlet localStorageManager = null;\r\nlet apiHost = null;\r\nlet botMessageCount = 0;\r\nlet lastRatedAtMessageCount = 0;\r\n\r\n// Message types for parent-iframe communication (only used in iframe mode)\r\nconst MESSAGE_TYPES = {\r\n    // Parent → iframe\r\n    INIT: 'APTOLIX_INIT',\r\n    SHOW: 'APTOLIX_SHOW',\r\n    HIDE: 'APTOLIX_HIDE',\r\n    \r\n    // iframe → Parent\r\n    READY: 'APTOLIX_READY',\r\n    HEIGHT_CHANGE: 'APTOLIX_HEIGHT_CHANGE',\r\n    CLOSE_REQUESTED: 'APTOLIX_CLOSE_REQUESTED'\r\n};\r\n\r\n/**\r\n * Send message to parent window (only in iframe mode)\r\n */\r\nfunction sendToParent(type, payload = {}) {\r\n    if (isInIframe && window.parent) {\r\n        window.parent.postMessage({\r\n            type,\r\n            payload,\r\n            source: 'aptolix-chatbot-iframe'\r\n        }, '*');\r\n    }\r\n}\r\n\r\nfunction toAvatarHtml(avatar) {\r\n    if (!avatar || typeof avatar !== 'string') return undefined;\r\n    const trimmed = avatar.trim();\r\n    if (/^https?:\\/\\//.test(trimmed)) {\r\n        return `<img src=\"${trimmed}\" alt=\"\" style=\"width:32px;height:32px;border-radius:50%;object-fit:cover;\" />`;\r\n    }\r\n    return avatar;\r\n}\r\n\r\nfunction getFormatOptions() {\r\n    return {\r\n        botAvatar: toAvatarHtml(config.botAvatar),\r\n        userAvatar: toAvatarHtml(config.userAvatar),\r\n        botname: config.botname,\r\n        username: config.username || 'You',\r\n        botaccentColor: config.botaccentColor\r\n    };\r\n}\r\n\r\nfunction countRateableBotMessages(history) {\r\n    return (history || []).filter((msg) => (\r\n        msg.type === 'bot' &&\r\n        !String(msg.messageId || '').startsWith('greeting-') &&\r\n        !String(msg.messageId || '').startsWith('error-')\r\n    )).length;\r\n}\r\n\r\nfunction getChatInputEls() {\r\n    return {\r\n        input: document.querySelector(`#aptolix-chat-inputbox-${config.chatbotId}`),\r\n        sendButton: document.querySelector(`#aptolix-chat-input-${config.chatbotId} button`),\r\n        messagesDiv: document.querySelector(`#aptolix-chat-messages-${config.chatbotId}`),\r\n        ratingEl: document.getElementById(`aptolix-rating-${config.chatbotId}`)\r\n    };\r\n}\r\n\r\nfunction formatLimitDate(limitReachedDate) {\r\n    if (!limitReachedDate) return '';\r\n    try {\r\n        const limitDate = (String(limitReachedDate).length === 10 && !String(limitReachedDate).includes('T'))\r\n            ? new Date(`${limitReachedDate}T23:59:59.999Z`)\r\n            : new Date(limitReachedDate);\r\n        if (Number.isNaN(limitDate.getTime())) return String(limitReachedDate);\r\n        return limitDate.toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' });\r\n    } catch {\r\n        return String(limitReachedDate);\r\n    }\r\n}\r\n\r\nfunction setChatInputEnabled(enabled) {\r\n    const { input, sendButton } = getChatInputEls();\r\n    if (input) {\r\n        input.disabled = !enabled;\r\n        input.placeholder = enabled ? 'Type your message...' : 'Daily message limit reached';\r\n    }\r\n    if (sendButton) sendButton.disabled = !enabled;\r\n}\r\n\r\nfunction showLimitWarning(limitReachedDate) {\r\n    setChatInputEnabled(false);\r\n    const { messagesDiv } = getChatInputEls();\r\n    if (!messagesDiv || messagesDiv.querySelector('.aptolix-limit-warning')) return;\r\n\r\n    const warning = document.createElement('div');\r\n    warning.className = 'aptolix-limit-warning';\r\n    warning.textContent = `You've reached today's message limit. Please try again after ${formatLimitDate(limitReachedDate)}.`;\r\n    messagesDiv.appendChild(warning);\r\n    scrollToBottom();\r\n    notifyHeightChange();\r\n}\r\n\r\nfunction applyStoredUsageLimit() {\r\n    if (!visitorId || !localStorageManager) return false;\r\n    const limitData = localStorageManager.getUsageLimitReached(config.chatbotId, visitorId);\r\n    if (limitData?.limitReachedDate) {\r\n        showLimitWarning(limitData.limitReachedDate);\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction showRatingPrompt() {\r\n    const { ratingEl } = getChatInputEls();\r\n    if (ratingEl) ratingEl.classList.add('show');\r\n}\r\n\r\nfunction hideRatingPrompt() {\r\n    const { ratingEl } = getChatInputEls();\r\n    if (ratingEl) ratingEl.classList.remove('show');\r\n}\r\n\r\nfunction checkAndShowRating() {\r\n    if (!config?.allowRating) return;\r\n    const threshold = Number(config.ratingThreshold) || 0;\r\n    const interval = Number(config.ratingInterval) || 0;\r\n    const reachedThreshold = botMessageCount >= threshold;\r\n    const reachedInterval = lastRatedAtMessageCount === 0\r\n        ? true\r\n        : botMessageCount >= lastRatedAtMessageCount + interval;\r\n    if (reachedThreshold && reachedInterval) {\r\n        showRatingPrompt();\r\n    }\r\n}\r\n\r\n/**\r\n * Initialize chatbot UI\r\n * Can be called directly (section mode) or via postMessage (bubble mode in iframe)\r\n */\r\nasync function initializeChatbot(initConfig, initApiHost) {\r\n    if (initialized) return;\r\n    \r\n    config = initConfig;\r\n    apiHost = initApiHost || config.apiHost;\r\n    conversationId = config.conversationId || `${config.chatbotId}-${Date.now()}`;\r\n    localStorageManager = new LocalStorageManager(config.chatbotId);\r\n    \r\n    // Get visitor ID and session ID from localStorage (will be null if not present)\r\n    // API will provide these IDs in the response and we'll save them\r\n    visitorId = localStorageManager.getVisitorId(config.chatbotId);\r\n    sessionId = localStorageManager.getSessionId(config.chatbotId);\r\n    \r\n    // Build UI\r\n    renderChatWindow();\r\n    \r\n    // Restore conversation history\r\n    await restoreConversationHistory();\r\n    \r\n    // Setup event listeners\r\n    setupEventListeners();\r\n    \r\n    // Show greeting if no history\r\n    if (messageHistory.length === 0) {\r\n        showGreeting();\r\n    }\r\n\r\n    botMessageCount = countRateableBotMessages(messageHistory);\r\n    if (!applyStoredUsageLimit()) {\r\n        checkAndShowRating();\r\n    }\r\n    \r\n    initialized = true;\r\n    \r\n    // Notify parent that chatbot is ready (only in iframe mode)\r\n    if (isInIframe) {\r\n        sendToParent(MESSAGE_TYPES.READY);\r\n    }\r\n    \r\n    // Send initial height (only in iframe mode)\r\n    if (isInIframe) {\r\n        notifyHeightChange();\r\n    }\r\n\r\n    // Return chatbotId so callers can track instance\r\n    return config.chatbotId;\r\n}\r\n\r\n/**\r\n * Render the chat window UI\r\n */\r\nfunction renderChatWindow() {\r\n    const theme = generateTheme(config.botaccentColor);\r\n    const chatbotId = config.chatbotId;\r\n    \r\n    // Determine logo HTML\r\n    let logoHTML = '';\r\n    if (config.companyLogo) {\r\n        const isLogoUrl = /^https?:\\/\\//.test(config.companyLogo);\r\n        logoHTML = isLogoUrl\r\n            ? `<img src=\"${config.companyLogo}\" alt=\"Company Logo\" class=\"aptolix-company-logo\" style=\"max-width:40px;max-height:40px;\" />`\r\n            : config.companyLogo;\r\n    }\r\n    \r\n    // Construct Aptolix link with UTM parameters\r\n    const utmSource = encodeURIComponent(window.location.hostname);\r\n    const utmMedium = encodeURIComponent('widget');\r\n    const utmCampaign = encodeURIComponent('refback');\r\n    const aptolixLink = `https://aptolix.com?utm_source=${utmSource}&utm_medium=${utmMedium}&utm_campaign=${utmCampaign}`;\r\n    \r\n    // Detect localhost for dev indicator\r\n    // In iframe mode, use parent's hostname; otherwise use current hostname\r\n    const hostname = isInIframe && window.__parentHostname__ ? window.__parentHostname__ : window.location.hostname;\r\n    const isLocalhost = hostname === 'localhost' || \r\n                       hostname === '127.0.0.1' || \r\n                       hostname.startsWith('192.168.') ||\r\n                       hostname.endsWith('.local');\r\n    const localBadge = isLocalhost ? `<span style=\"background: #ef4444; color: white; padding: 2px 8px; border-radius: 4px; font-size: 10px; font-weight: 700; margin-left: 8px; letter-spacing: 0.5px;\">LOCAL</span>` : '';\r\n    \r\n    // For bubble mode, don't add box-shadow (iframe already has it)\r\n    const boxShadowStyle = isInIframe ? '' : `box-shadow: 0 4px 20px ${theme.window.shadow};`;\r\n    \r\n    const chatWindowHTML = `\r\n        <div id=\"aptolix-chat-window-${chatbotId}\" class=\"aptolix-chat-window ${isInIframe ? 'bubble-mode' : 'section-mode'}\" style=\"background-color: ${theme.window.background}; border-color: ${theme.window.border}; ${boxShadowStyle}\">\r\n            <div id=\"aptolix-chat-header-${chatbotId}\" style=\"background-color: ${config.botaccentColor}; color: ${theme.header.text}; border-bottom: 2px solid ${theme.header.border};\">\r\n                <div class=\"aptolix-header-flex\">\r\n                    <div class=\"aptolix-header-title\">\r\n                        ${logoHTML ? `<div class=\"aptolix-company-logo-wrapper\">${logoHTML}</div>` : ''}\r\n                        <div class=\"aptolix-header-copy\">\r\n                            <strong class=\"aptolix-bot-name\">${config.botname}${localBadge}</strong>\r\n                            ${config.subheading ? `<span class=\"aptolix-header-subtitle\" style=\"color: ${theme.header.subtitle};\">${config.subheading}</span>` : ''}\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"aptolix-header-actions\">\r\n                        ${(config.allowReset || config.allowDownloadTranscript) ? `<button id=\"aptolix-chat-menu-${chatbotId}\" title=\"More options\" aria-label=\"More options\" style=\"color: ${theme.header.button};\">⋮</button>` : ''}\r\n                        ${config.allowExpandChatWindow ? `<button id=\"aptolix-chat-expand-${chatbotId}\" title=\"Expand/Collapse\" aria-label=\"Expand/Collapse\" style=\"color: ${theme.header.button};\">\r\n                            <span id=\"aptolix-chat-expand-icon-${chatbotId}\">⤢</span>\r\n                        </button>` : ''}\r\n                        <button id=\"aptolix-chat-close-${chatbotId}\" title=\"Close chat\" aria-label=\"Close chat\" style=\"color: ${theme.header.button};\">×</button>\r\n                        ${(config.allowReset || config.allowDownloadTranscript) ? `<div id=\"aptolix-chat-menu-dropdown-${chatbotId}\" class=\"aptolix-menu-dropdown\" style=\"background-color: ${theme.menu.background}; border-color: ${theme.menu.border}; border: 1px solid ${theme.menu.border};\">\r\n                            ${config.allowReset ? `<button id=\"aptolix-chat-reset-${chatbotId}\" class=\"aptolix-menu-item\" title=\"Reset chat\" aria-label=\"Reset chat\" style=\"background-color: ${theme.menu.background}; color: ${theme.menu.text};\">\r\n                                <span class=\"aptolix-menu-icon\">⟲</span>\r\n                                <span class=\"aptolix-menu-text\">Reset Chat</span>\r\n                            </button>` : ''}\r\n                            ${config.allowDownloadTranscript ? `<button id=\"aptolix-chat-download-${chatbotId}\" class=\"aptolix-menu-item\" title=\"Download chat\" aria-label=\"Download chat\" style=\"background-color: ${theme.menu.background}; color: ${theme.menu.text};\">\r\n                                <span class=\"aptolix-menu-icon\">⤓</span>\r\n                                <span class=\"aptolix-menu-text\">Download Chat</span>\r\n                            </button>` : ''}\r\n                        </div>` : ''}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div id=\"aptolix-chat-messages-${chatbotId}\" style=\"background-color: ${theme.window.background}; position: relative;\">\r\n            </div>\r\n            <div id=\"aptolix-chat-input-${chatbotId}\" style=\"border-top: 2px solid ${theme.input.border};\">\r\n                <textarea id=\"aptolix-chat-inputbox-${chatbotId}\" rows=\"1\" placeholder=\"Type your message...\" style=\"resize:none; border-color: ${theme.input.border}; background-color: ${theme.window.background};\"></textarea>\r\n                <button style=\"background-color: ${config.botaccentColor}; color: ${theme.input.buttonText};\">Send</button>\r\n            </div>\r\n            <div class=\"aptolix-footer\">\r\n                <div class=\"aptolix-powered-by\" style=\"color: ${theme.footer.text};\">\r\n                    Powered by <a href=\"${aptolixLink}\" target=\"_blank\" rel=\"noopener\" class=\"aptolix-link\" style=\"color: ${config.botaccentColor};\">Aptolix</a>\r\n                </div>\r\n                ${config.allowRating ? `<span class=\"aptolix-footer-separator\">|</span>\r\n                <div class=\"aptolix-rating\" id=\"aptolix-rating-${chatbotId}\">\r\n                    <span class=\"aptolix-rating-label\">Rate this chat:</span>\r\n                    <div class=\"aptolix-stars\" id=\"aptolix-stars-${chatbotId}\">\r\n                        <span class=\"star\" data-rating=\"1\">☆</span>\r\n                        <span class=\"star\" data-rating=\"2\">☆</span>\r\n                        <span class=\"star\" data-rating=\"3\">☆</span>\r\n                        <span class=\"star\" data-rating=\"4\">☆</span>\r\n                        <span class=\"star\" data-rating=\"5\">☆</span>\r\n                    </div>\r\n                </div>` : ''}\r\n            </div>\r\n        </div>\r\n    `;\r\n    \r\n    // Inject HTML based on context\r\n    if (isInIframe) {\r\n        // In iframe: Replace entire body (safe because iframe has its own document)\r\n        document.body.innerHTML = chatWindowHTML;\r\n        \r\n        // Apply iframe-specific styles to html and body\r\n        document.documentElement.style.height = '100%';\r\n        document.documentElement.style.margin = '0';\r\n        document.documentElement.style.padding = '0';\r\n        \r\n        document.body.style.height = '100%';\r\n        document.body.style.margin = '0';\r\n        document.body.style.padding = '0';\r\n        document.body.style.overflow = 'hidden';\r\n        document.body.style.fontFamily = \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\";\r\n    } else {\r\n        // In section mode: Use target from config\r\n        let targetEl = document.body;\r\n        \r\n        if (config.target) {\r\n            const found = typeof config.target === \"string\" \r\n                ? document.querySelector(config.target) \r\n                : config.target;\r\n            if (found) targetEl = found;\r\n        }\r\n        \r\n        targetEl.insertAdjacentHTML('beforeend', chatWindowHTML);\r\n    }\r\n}\r\n\r\n/**\r\n * Setup all event listeners\r\n */\r\nfunction setupEventListeners() {\r\n    const chatbotId = config.chatbotId;\r\n    const theme = generateTheme(config.botaccentColor);\r\n    \r\n    const closeBtn = document.querySelector(`#aptolix-chat-close-${chatbotId}`);\r\n    const resetBtn = config.allowReset ? document.querySelector(`#aptolix-chat-reset-${chatbotId}`) : null;\r\n    const expandBtn = config.allowExpandChatWindow ? document.querySelector(`#aptolix-chat-expand-${chatbotId}`) : null;\r\n    const expandIcon = config.allowExpandChatWindow ? document.querySelector(`#aptolix-chat-expand-icon-${chatbotId}`) : null;\r\n    const input = document.querySelector(`#aptolix-chat-inputbox-${chatbotId}`);\r\n    const sendButton = document.querySelector(`#aptolix-chat-input-${chatbotId} button`);\r\n    const messagesDiv = document.querySelector(`#aptolix-chat-messages-${chatbotId}`);\r\n    const downloadBtn = config.allowDownloadTranscript ? document.querySelector(`#aptolix-chat-download-${chatbotId}`) : null;\r\n    const menuBtn = (config.allowReset || config.allowDownloadTranscript) ? document.querySelector(`#aptolix-chat-menu-${chatbotId}`) : null;\r\n    const menuDropdown = (config.allowReset || config.allowDownloadTranscript) ? document.querySelector(`#aptolix-chat-menu-dropdown-${chatbotId}`) : null;\r\n    \r\n    // Close button\r\n    if (closeBtn) {\r\n        closeBtn.addEventListener('click', () => {\r\n            if (isInIframe) {\r\n                // In iframe mode: notify parent to hide iframe\r\n                sendToParent(MESSAGE_TYPES.CLOSE_REQUESTED);\r\n            } else {\r\n                // In section mode: close button shouldn't exist, but if it does, hide container\r\n                const chatWindow = document.querySelector(`#aptolix-chat-window-${chatbotId}`);\r\n                if (chatWindow) chatWindow.style.display = 'none';\r\n            }\r\n        });\r\n    }\r\n    \r\n    // Reset button\r\n    if (resetBtn) {\r\n        resetBtn.addEventListener('click', async () => {\r\n            if (confirm('Are you sure you want to reset the chat? This will clear all messages.')) {\r\n                await resetChat();\r\n            }\r\n            if (menuDropdown) menuDropdown.style.display = 'none';\r\n        });\r\n    }\r\n    \r\n    // Expand button\r\n    if (expandBtn && expandIcon) {\r\n        let isExpanded = false;\r\n        expandBtn.addEventListener('click', () => {\r\n            isExpanded = !isExpanded;\r\n            const chatWindow = document.querySelector(`#aptolix-chat-window-${chatbotId}`);\r\n            \r\n            if (isExpanded) {\r\n                chatWindow.classList.add('expanded');\r\n                expandIcon.textContent = '⤡';\r\n            } else {\r\n                chatWindow.classList.remove('expanded');\r\n                expandIcon.textContent = '⤢';\r\n            }\r\n            \r\n            // In iframe mode, notify parent to resize iframe\r\n            if (isInIframe) {\r\n                sendToParent('APTOLIX_EXPAND_TOGGLE', { isExpanded });\r\n            }\r\n            \r\n            notifyHeightChange();\r\n        });\r\n    }\r\n    \r\n    // Download button\r\n    if (downloadBtn) {\r\n        downloadBtn.addEventListener('click', () => {\r\n            downloadTranscript();\r\n            if (menuDropdown) menuDropdown.style.display = 'none';\r\n        });\r\n    }\r\n    \r\n    // Menu button\r\n    if (menuBtn && menuDropdown) {\r\n        menuBtn.addEventListener('click', (e) => {\r\n            e.stopPropagation();\r\n            const isVisible = menuDropdown.style.display === 'block';\r\n            menuDropdown.style.display = isVisible ? 'none' : 'block';\r\n        });\r\n        \r\n        // Close menu when clicking outside\r\n        document.addEventListener('click', () => {\r\n            menuDropdown.style.display = 'none';\r\n        });\r\n        \r\n        // Apply hover effects\r\n        const menuItems = menuDropdown.querySelectorAll('.aptolix-menu-item');\r\n        menuItems.forEach(item => {\r\n            item.addEventListener('mouseenter', () => {\r\n                item.style.backgroundColor = theme.menu.hover;\r\n            });\r\n            item.addEventListener('mouseleave', () => {\r\n                item.style.backgroundColor = theme.menu.background;\r\n            });\r\n        });\r\n    }\r\n    \r\n    // Input focus/blur\r\n    if (input) {\r\n        input.addEventListener('focus', () => {\r\n            input.style.borderColor = theme.primary;\r\n        });\r\n        input.addEventListener('blur', () => {\r\n            input.style.borderColor = theme.input.border;\r\n        });\r\n        \r\n        // Handle input\r\n        input.addEventListener('keydown', (e) => {\r\n            if (e.key === 'Enter' && !e.shiftKey) {\r\n                e.preventDefault();\r\n                sendMessage();\r\n            }\r\n        });\r\n        \r\n        // Auto-resize textarea\r\n        input.addEventListener('input', () => {\r\n            input.style.height = 'auto';\r\n            input.style.height = input.scrollHeight + 'px';\r\n            notifyHeightChange();\r\n        });\r\n        \r\n        // Character limit\r\n        if (config.inputCharLimit) {\r\n            input.setAttribute('maxlength', config.inputCharLimit);\r\n        }\r\n    }\r\n    \r\n    // Send button\r\n    if (sendButton) {\r\n        sendButton.addEventListener('click', sendMessage);\r\n    }\r\n    \r\n    // Rating stars\r\n    if (config.allowRating) {\r\n        const stars = document.querySelectorAll(`#aptolix-stars-${chatbotId} .star`);\r\n        stars.forEach(star => {\r\n            star.addEventListener('click', () => {\r\n                const rating = parseInt(star.getAttribute('data-rating'));\r\n                submitRating(rating);\r\n            });\r\n            \r\n            star.addEventListener('mouseenter', () => {\r\n                const rating = parseInt(star.getAttribute('data-rating'));\r\n                highlightStars(rating);\r\n            });\r\n        });\r\n        \r\n        const starsContainer = document.querySelector(`#aptolix-stars-${chatbotId}`);\r\n        if (starsContainer) {\r\n            starsContainer.addEventListener('mouseleave', () => {\r\n                const submittedRating = localStorageManager.getRating(conversationId);\r\n                highlightStars(submittedRating || 0);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Show greeting message\r\n */\r\nfunction showGreeting() {\r\n    if (!config.greetingMessage) return;\r\n    \r\n    const greetingMsg = {\r\n        text: config.greetingMessage,\r\n        type: 'bot',\r\n        timestamp: Date.now(),\r\n        messageId: `greeting-${Date.now()}`\r\n    };\r\n    \r\n    messageHistory.push(greetingMsg);\r\n    renderMessage(greetingMsg);\r\n}\r\n\r\n/**\r\n * Restore conversation history from localStorage\r\n */\r\nasync function restoreConversationHistory() {\r\n    const history = localStorageManager.getConversationHistory();\r\n    \r\n    if (history && history.length > 0) {\r\n        messageHistory = history;\r\n        renderAllMessages();\r\n    }\r\n}\r\n\r\n/**\r\n * Render all messages\r\n */\r\nfunction renderAllMessages() {\r\n    const messagesDiv = document.querySelector(`#aptolix-chat-messages-${config.chatbotId}`);\r\n    if (!messagesDiv) return;\r\n    \r\n    messagesDiv.innerHTML = formatMessages(messageHistory, getFormatOptions());\r\n    \r\n    scrollToBottom();\r\n    notifyHeightChange();\r\n}\r\n\r\n/**\r\n * Render a single message\r\n */\r\nfunction renderMessage(message) {\r\n    const messagesDiv = document.querySelector(`#aptolix-chat-messages-${config.chatbotId}`);\r\n    if (!messagesDiv) return;\r\n    \r\n    const messageHTML = formatMessages([message], getFormatOptions());\r\n    \r\n    messagesDiv.insertAdjacentHTML('beforeend', messageHTML);\r\n    scrollToBottom();\r\n    notifyHeightChange();\r\n}\r\n\r\n/**\r\n * Send message\r\n */\r\nasync function sendMessage() {\r\n    const input = document.querySelector(`#aptolix-chat-inputbox-${config.chatbotId}`);\r\n    if (!input || input.disabled) return;\r\n    \r\n    const text = input.value.trim();\r\n    if (!text) return;\r\n    \r\n    // Clear input\r\n    input.value = '';\r\n    input.style.height = 'auto';\r\n    \r\n    // Add user message\r\n    const userMsg = {\r\n        text: text,\r\n        type: 'user',\r\n        timestamp: Date.now(),\r\n        messageId: `user-${Date.now()}`\r\n    };\r\n    \r\n    messageHistory.push(userMsg);\r\n    renderMessage(userMsg);\r\n    localStorageManager.saveConversationHistory(messageHistory);\r\n    \r\n    // Show typing indicator\r\n    showTypingIndicator();\r\n    \r\n    // Make API call directly (works in both iframe and section mode)\r\n    try {\r\n        const response = await fetch(`${apiHost}/chatbot/${config.chatbotId}`, {\r\n            method: 'POST',\r\n            headers: { 'Content-Type': 'application/json' },\r\n            body: JSON.stringify({\r\n                message: text,\r\n                chatbot_id: config.chatbotId,\r\n                visitor_id: visitorId,\r\n                session_id: sessionId\r\n            })\r\n        });\r\n        \r\n        if (!response.ok) {\r\n            throw new Error(`API error: ${response.status}`);\r\n        }\r\n        \r\n        const data = await response.json();\r\n        handleApiResponse({ data });\r\n    } catch (error) {\r\n        handleApiResponse({ error: error.message });\r\n    }\r\n}\r\n\r\n/**\r\n * Handle API response from parent\r\n */\r\nfunction handleApiResponse(response) {\r\n    hideTypingIndicator();\r\n    \r\n    if (response.error) {\r\n        const errorMsg = {\r\n            text: `Error: ${response.error}`,\r\n            type: 'bot',\r\n            timestamp: Date.now(),\r\n            messageId: `error-${Date.now()}`\r\n        };\r\n        messageHistory.push(errorMsg);\r\n        renderMessage(errorMsg);\r\n        return;\r\n    }\r\n    \r\n    const data = response.data;\r\n    \r\n    // Save visitor ID and session ID from API response\r\n    if (data.visitor_id) {\r\n        visitorId = data.visitor_id;\r\n        localStorageManager.saveVisitorId(config.chatbotId, visitorId);\r\n    }\r\n    if (data.session_id) {\r\n        sessionId = data.session_id;\r\n        localStorageManager.saveSessionId(config.chatbotId, sessionId);\r\n    }\r\n\r\n    if (data.limitReachedDate) {\r\n        localStorageManager.setUsageLimitReached(config.chatbotId, visitorId, data.limitReachedDate);\r\n        showLimitWarning(data.limitReachedDate);\r\n        return;\r\n    }\r\n    \r\n    // Add bot response\r\n    const botMsg = {\r\n        text: data.response || data.message || 'No response',\r\n        type: 'bot',\r\n        timestamp: Date.now(),\r\n        messageId: data.message_id || `bot-${Date.now()}`\r\n    };\r\n    \r\n    messageHistory.push(botMsg);\r\n    renderMessage(botMsg);\r\n    localStorageManager.saveConversationHistory(messageHistory);\r\n\r\n    botMessageCount++;\r\n    checkAndShowRating();\r\n}\r\n\r\n/**\r\n * Show typing indicator\r\n */\r\nfunction showTypingIndicator() {\r\n    const messagesDiv = document.querySelector(`#aptolix-chat-messages-${config.chatbotId}`);\r\n    if (!messagesDiv) return;\r\n    \r\n    const theme = generateTheme(config.botaccentColor);\r\n    \r\n    const indicator = document.createElement('div');\r\n    indicator.id = 'aptolix-typing-indicator';\r\n    indicator.innerHTML = `\r\n        <div class=\"aptolix-messages-wrapper\">\r\n            <div class=\"message bot typing\">\r\n                <div class=\"message-avatar\">\r\n                    ${toAvatarHtml(config.botAvatar) || ''}\r\n                </div>\r\n                <div class=\"message-content\">\r\n                    <div class=\"message-text\" style=\"background-color: ${theme.messages.botBackground}; color: ${theme.messages.botText};\">\r\n                        <span class=\"typing-dots\">\r\n                            <span>.</span><span>.</span><span>.</span>\r\n                        </span>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    `;\r\n    \r\n    messagesDiv.appendChild(indicator);\r\n    scrollToBottom();\r\n    notifyHeightChange();\r\n}\r\n\r\n/**\r\n * Hide typing indicator\r\n */\r\nfunction hideTypingIndicator() {\r\n    const indicator = document.getElementById('aptolix-typing-indicator');\r\n    if (indicator) {\r\n        indicator.remove();\r\n        notifyHeightChange();\r\n    }\r\n}\r\n\r\n/**\r\n * Reset chat\r\n */\r\nasync function resetChat() {\r\n    messageHistory = [];\r\n    conversationId = `${config.chatbotId}-${Date.now()}`;\r\n    \r\n    // Clear session ID - API will provide new one on next message\r\n    // Visitor ID stays the same\r\n    sessionId = null;\r\n    localStorageManager.clearSessionId(config.chatbotId);\r\n    \r\n    localStorageManager.clearConversationHistory();\r\n    \r\n    const messagesDiv = document.querySelector(`#aptolix-chat-messages-${config.chatbotId}`);\r\n    if (messagesDiv) {\r\n        messagesDiv.innerHTML = '';\r\n    }\r\n\r\n    botMessageCount = 0;\r\n    lastRatedAtMessageCount = 0;\r\n    hideRatingPrompt();\r\n    \r\n    // Show greeting again\r\n    showGreeting();\r\n\r\n    if (!applyStoredUsageLimit()) {\r\n        setChatInputEnabled(true);\r\n    }\r\n    \r\n    notifyHeightChange();\r\n}\r\n\r\n/**\r\n * Download transcript\r\n */\r\nfunction downloadTranscript() {\r\n    let transcript = `Aptolix Chat Transcript - ${config.botname}\\n`;\r\n    transcript += `Date: ${new Date().toLocaleString()}\\n`;\r\n    transcript += `${'='.repeat(50)}\\n\\n`;\r\n    \r\n    messageHistory.forEach(msg => {\r\n        const timestamp = new Date(msg.timestamp).toLocaleString();\r\n        const sender = msg.type === 'user' ? (config.username || 'You') : config.botname;\r\n        transcript += `[${timestamp}] ${sender}:\\n${msg.text}\\n\\n`;\r\n    });\r\n    \r\n    const blob = new Blob([transcript], { type: 'text/plain' });\r\n    const url = URL.createObjectURL(blob);\r\n    const a = document.createElement('a');\r\n    a.href = url;\r\n    a.download = `chat-transcript-${Date.now()}.txt`;\r\n    a.click();\r\n    URL.revokeObjectURL(url);\r\n}\r\n\r\n/**\r\n * Submit rating\r\n */\r\nasync function submitRating(rating) {\r\n    localStorageManager.saveRating(conversationId, rating);\r\n    highlightStars(rating);\r\n    lastRatedAtMessageCount = botMessageCount;\r\n    hideRatingPrompt();\r\n\r\n    if (!visitorId || !sessionId) return;\r\n    \r\n    // Send rating to API directly (works in both iframe and section mode)\r\n    try {\r\n        await fetch(`${apiHost}/chatbot/${config.chatbotId}/rating`, {\r\n            method: 'POST',\r\n            headers: { 'Content-Type': 'application/json' },\r\n            body: JSON.stringify({\r\n                chatbot_id: config.chatbotId,\r\n                visitor_id: visitorId,\r\n                session_id: sessionId,\r\n                rating: rating\r\n            })\r\n        });\r\n    } catch (error) {\r\n        console.error('Failed to submit rating:', error);\r\n    }\r\n}\r\n\r\n/**\r\n * Highlight rating stars\r\n */\r\nfunction highlightStars(rating) {\r\n    const stars = document.querySelectorAll(`#aptolix-stars-${config.chatbotId} .star`);\r\n    stars.forEach((star, index) => {\r\n        star.textContent = index < rating ? '★' : '☆';\r\n    });\r\n}\r\n\r\n/**\r\n * Scroll to bottom\r\n */\r\nfunction scrollToBottom() {\r\n    const messagesDiv = document.querySelector(`#aptolix-chat-messages-${config.chatbotId}`);\r\n    if (messagesDiv) {\r\n        messagesDiv.scrollTop = messagesDiv.scrollHeight;\r\n    }\r\n}\r\n\r\n/**\r\n * Notify parent of height change\r\n */\r\nfunction notifyHeightChange() {\r\n    // Use requestAnimationFrame to ensure DOM has updated\r\n    requestAnimationFrame(() => {\r\n        const height = document.body.scrollHeight;\r\n        sendToParent(MESSAGE_TYPES.HEIGHT_CHANGE, { height });\r\n    });\r\n}\r\n\r\n/**\r\n * Listen for messages from parent (only in iframe mode)\r\n */\r\nif (isInIframe) {\r\n    window.addEventListener('message', (event) => {\r\n        // Only accept messages from parent\r\n        if (event.source !== window.parent) return;\r\n        \r\n        const { type, payload } = event.data;\r\n        \r\n        switch (type) {\r\n            case MESSAGE_TYPES.INIT:\r\n                initializeChatbot(payload, payload.apiHost);\r\n                break;\r\n                \r\n            case MESSAGE_TYPES.SHOW:\r\n                // Parent is showing the iframe - scroll to bottom when visible\r\n                setTimeout(() => scrollToBottom(), 50);\r\n                break;\r\n                \r\n            case MESSAGE_TYPES.HIDE:\r\n                // Parent is hiding the iframe\r\n                break;\r\n        }\r\n    });\r\n    \r\n    // Notify parent that iframe script is loaded\r\n    sendToParent(MESSAGE_TYPES.READY);\r\n}\r\n\r\n// Export init function for direct mode (section mode)\r\nexport { initializeChatbot };\r\n"],"names":["css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","LocalStorageManager","constructor","chatbotId","this","keys","config","state","_getState","key","stored","localStorage","getItem","JSON","parse","error","_saveState","undefined","timestamp","Date","now","version","setItem","stringify","_isToday","today","storedDate","getFullYear","getMonth","getDate","_getTodayStart","setHours","getTime","saveConfig","data","getConfig","clearConfig","removeItem","hasConfig","saveVisitorId","visitorId","getVisitorId","clearVisitorId","hasVisitorId","saveSessionId","sessionId","getSessionId","clearSessionId","hasSessionId","saveChatHistory","messages","history","getChatHistory","clearChatHistory","hasChatHistory","setUsageLimitReached","limitReachedDate","usageLimitReached","getUsageLimitReached","limitDate","length","includes","clearUsageLimitReached","hasUsageLimitReached","clearAll","getConversationHistory","clearConversationHistory","saveConversationHistory","getRating","conversationId","ratings","saveRating","rating","L","async","breaks","extensions","gfm","hooks","pedantic","renderer","silent","tokenizer","walkTokens","O","H","l","E","exec","h","e","t","source","n","replace","r","i","s","m","caret","getRegex","RegExp","codeRemoveIndent","outputLinkReplace","indentCodeCompensation","beginningSpace","endingHash","startingSpaceChar","endingSpaceChar","nonSpaceChar","newLineCharGlobal","tabCharGlobal","multipleSpaceGlobal","blankLine","doubleBlankLine","blockquoteStart","blockquoteSetextReplace","blockquoteSetextReplace2","listReplaceTabs","listReplaceNesting","listIsTask","listReplaceTask","anyLine","hrefBrackets","tableDelimiter","tableAlignChars","tableRowBlankLine","tableAlignRight","tableAlignCenter","tableAlignLeft","startATag","endATag","startPreScriptTag","endPreScriptTag","startAngleBracket","endAngleBracket","pedanticHrefTitle","unicodeAlphaNumeric","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","unescapeTest","percentDecode","findPipe","splitPipe","slashPipe","carriageReturn","spaceLine","notSpaceStart","endingNewline","listItemRegex","nextBulletRegex","Math","min","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","C","j","se","ie","Te","F","Q","ye","Pe","v","U","Se","oe","K","blockquote","code","def","fences","heading","hr","html","lheading","list","newline","paragraph","table","text","re","_e","Le","ae","D","W","le","Ee","ue","pe","qe","ve","ce","De","Ze","Ge","He","Ne","je","Fe","q","Qe","he","de","X","_backpedal","anyPunctuation","autolink","blockSkip","br","del","emStrongLDelim","emStrongRDelimAst","emStrongRDelimUnd","escape","link","nolink","punctuation","reflink","reflinkSearch","tag","url","Ke","N","We","I","normal","M","Xe","ke","w","test","J","encodeURI","V","o","a","u","split","trim","shift","at","pop","splice","push","z","charAt","slice","fe","href","title","other","inLink","raw","tokens","inlineTokens","y","options","rules","lexer","space","block","codeBlockStyle","match","map","join","Je","lang","inline","depth","p","c","f","top","blockTokens","k","x","g","T","substring","ordered","start","loose","items","Z","repeat","trimStart","search","ee","te","ne","me","A","G","Y","task","checked","trimEnd","filter","some","pre","toLowerCase","header","align","rows","inRawBlock","indexOf","ge","emStrong","lastIndex","index","codespan","inlineText","escaped","b","inlineQueue","links","Object","create","lex","lexInline","src","call","endsWith","startBlock","forEach","charCodeAt","console","Error","lastIndexOf","startInline","P","parser","parseInline","listitem","checkbox","unshift","tablecell","tablerow","strong","em","image","textRenderer","S","R","renderers","$","static","Set","preprocess","postprocess","processAllTokens","provideLexer","provideParser","_","defaults","setOptions","parseMarkdown","Parser","Renderer","TextRenderer","Lexer","Tokenizer","Hooks","use","concat","childTokens","flat","name","apply","level","passThroughHooks","has","Promise","resolve","then","onError","prototype","toString","all","catch","message","reject","d","formatMessages","botname","username","botaccentColor","botAvatar","getDefaultBotAvatar","userAvatar","getDefaultUserAvatar","showExactTime","isLight","color","hexToRgb","hex","result","parseInt","startsWith","rgb","Number","isLightColor","userMessageBg","userMessageText","botMessageBg","percent","round","padStart","lightenColor","msg","isUser","avatarHTML","senderName","messageBg","messageTextColor","messageContent","marked","timeStr","date","isToday","toDateString","yesterday","setDate","isYesterday","toLocaleTimeString","hour","minute","hour12","toLocaleDateString","month","day","year","formatExactTime","diff","floor","mins","hours","days","formatRelativeTime","generateTheme","primaryColor","cleanHex","darkenColor","max","addAlpha","opacity","isAccentLight","primary","background","subtitle","button","border","userBackground","userText","botBackground","botText","window","shadow","input","placeholder","buttonBackground","buttonText","footer","bubble","icon","hint","closeButton","menu","hover","star","utils","lighten","darken","getDefaults","isInIframe","self","initialized","messageHistory","localStorageManager","apiHost","botMessageCount","lastRatedAtMessageCount","MESSAGE_TYPES","sendToParent","payload","parent","postMessage","toAvatarHtml","avatar","trimmed","getFormatOptions","getChatInputEls","querySelector","sendButton","messagesDiv","ratingEl","getElementById","setChatInputEnabled","enabled","disabled","showLimitWarning","warning","className","textContent","String","isNaN","formatLimitDate","scrollToBottom","notifyHeightChange","applyStoredUsageLimit","limitData","hideRatingPrompt","classList","remove","checkAndShowRating","allowRating","threshold","ratingThreshold","interval","ratingInterval","add","showRatingPrompt","initializeChatbot","initConfig","initApiHost","theme","logoHTML","companyLogo","utmSource","encodeURIComponent","location","hostname","utmMedium","utmCampaign","aptolixLink","__parentHostname__","localBadge","boxShadowStyle","chatWindowHTML","subheading","allowReset","allowDownloadTranscript","allowExpandChatWindow","body","innerHTML","documentElement","height","margin","padding","overflow","fontFamily","targetEl","target","found","insertAdjacentHTML","renderChatWindow","renderAllMessages","restoreConversationHistory","closeBtn","resetBtn","expandBtn","expandIcon","downloadBtn","menuBtn","menuDropdown","addEventListener","chatWindow","display","confirm","showGreeting","resetChat","isExpanded","transcript","toLocaleString","sender","blob","Blob","URL","createObjectURL","download","click","revokeObjectURL","downloadTranscript","stopPropagation","isVisible","querySelectorAll","item","backgroundColor","borderColor","shiftKey","preventDefault","sendMessage","scrollHeight","inputCharLimit","setAttribute","highlightStars","fetch","method","headers","chatbot_id","visitor_id","session_id","submitRating","getAttribute","starsContainer","setupEventListeners","messageId","greetingMessage","greetingMsg","renderMessage","messageHTML","value","userMsg","indicator","id","showTypingIndicator","response","ok","status","handleApiResponse","json","hideTypingIndicator","errorMsg","botMsg","message_id","scrollTop","requestAnimationFrame","event","setTimeout"],"mappings":"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"}