quikchat 1.2.4 → 1.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -4
- package/dist/build-manifest.json +73 -80
- package/dist/quikchat-md-full.cjs.js +630 -256
- package/dist/quikchat-md-full.cjs.js.map +1 -1
- package/dist/quikchat-md-full.cjs.min.js +3 -3
- package/dist/quikchat-md-full.cjs.min.js.map +1 -1
- package/dist/quikchat-md-full.esm.js +630 -256
- package/dist/quikchat-md-full.esm.js.map +1 -1
- package/dist/quikchat-md-full.esm.min.js +3 -3
- package/dist/quikchat-md-full.esm.min.js.map +1 -1
- package/dist/quikchat-md-full.umd.js +630 -256
- package/dist/quikchat-md-full.umd.js.map +1 -1
- package/dist/quikchat-md-full.umd.min.js +3 -3
- package/dist/quikchat-md-full.umd.min.js.map +1 -1
- package/dist/quikchat-md.cjs.js +614 -246
- package/dist/quikchat-md.cjs.js.map +1 -1
- package/dist/quikchat-md.cjs.min.js +3 -3
- package/dist/quikchat-md.cjs.min.js.map +1 -1
- package/dist/quikchat-md.esm.js +614 -246
- package/dist/quikchat-md.esm.js.map +1 -1
- package/dist/quikchat-md.esm.min.js +3 -3
- package/dist/quikchat-md.esm.min.js.map +1 -1
- package/dist/quikchat-md.umd.js +614 -246
- package/dist/quikchat-md.umd.js.map +1 -1
- package/dist/quikchat-md.umd.min.js +3 -3
- package/dist/quikchat-md.umd.min.js.map +1 -1
- package/dist/quikchat.cjs.js +3 -3
- package/dist/quikchat.cjs.js.map +1 -1
- package/dist/quikchat.cjs.min.js +1 -1
- package/dist/quikchat.cjs.min.js.map +1 -1
- package/dist/quikchat.css +351 -120
- package/dist/quikchat.esm.js +3 -3
- package/dist/quikchat.esm.js.map +1 -1
- package/dist/quikchat.esm.min.js +1 -1
- package/dist/quikchat.esm.min.js.map +1 -1
- package/dist/quikchat.min.css +1 -1
- package/dist/quikchat.umd.js +3 -3
- package/dist/quikchat.umd.js.map +1 -1
- package/dist/quikchat.umd.min.js +1 -1
- package/dist/quikchat.umd.min.js.map +1 -1
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quikchat-md.cjs.js","sources":["../src/quikchat.js","../node_modules/quikdown/dist/quikdown.esm.js","../src/quikchat-md.js"],"sourcesContent":["\nclass quikchat {\n /**\n *\n * @param string or DOM element parentElement\n * @param {*} meta\n */\n constructor(parentElement, onSend = () => { }, options = {}) {\n const defaultOpts = {\n theme: 'quikchat-theme-light',\n trackHistory: true,\n showTimestamps: false,\n titleArea: { title: \"Chat\", show: false, align: \"center\" },\n messagesArea: { alternating: true },\n };\n const meta = { ...defaultOpts, ...options }; // merge options with defaults\n\n if (typeof parentElement === 'string') {\n parentElement = document.querySelector(parentElement);\n }\n this._parentElement = parentElement;\n this._theme = meta.theme;\n this._onSend = onSend ? onSend : () => { }; // call back function for onSend\n this._messageFormatter = meta.messageFormatter || null;\n this._sanitize = meta.sanitize || false;\n this._createWidget();\n // title area\n if (meta.titleArea) {\n this.titleAreaSetContents(meta.titleArea.title, meta.titleArea.align);\n if (meta.titleArea.show === true) {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n // messages area\n if (meta.messagesArea) {\n this.messagesAreaAlternateColors(meta.messagesArea.alternating);\n }\n // timestamps\n if (meta.showTimestamps) {\n this.messagesAreaShowTimestamps(true);\n }\n // direction (ltr/rtl)\n if (meta.direction) {\n this.setDirection(meta.direction);\n }\n // plumbing\n this._attachEventListeners();\n this.trackHistory = meta.trackHistory !== false;\n this._historyLimit = 10000000;\n this._history = [];\n }\n\n _createWidget() {\n const widgetHTML =\n `\n <div class=\"quikchat-base ${this.theme}\">\n <div class=\"quikchat-title-area\"></div>\n <div class=\"quikchat-messages-wrapper\"><div class=\"quikchat-messages-area\" role=\"log\" aria-live=\"polite\" aria-label=\"Chat messages\"></div><button class=\"quikchat-scroll-bottom\" aria-label=\"Scroll to bottom\"></button></div>\n <div class=\"quikchat-input-area\">\n <textarea class=\"quikchat-input-textbox\" rows=\"1\" aria-label=\"Type a message\"></textarea>\n <button class=\"quikchat-input-send-btn\">Send</button>\n </div>\n </div>\n `;\n\n this._parentElement.innerHTML = widgetHTML;\n this._chatWidget = this._parentElement.querySelector('.quikchat-base');\n this._titleArea = this._chatWidget.querySelector('.quikchat-title-area');\n this._messagesWrapper = this._chatWidget.querySelector('.quikchat-messages-wrapper');\n this._messagesArea = this._chatWidget.querySelector('.quikchat-messages-area');\n this._scrollBottomBtn = this._messagesWrapper.querySelector('.quikchat-scroll-bottom');\n this._inputArea = this._chatWidget.querySelector('.quikchat-input-area');\n this._textEntry = this._inputArea.querySelector('.quikchat-input-textbox');\n this._sendButton = this._inputArea.querySelector('.quikchat-input-send-btn');\n this.msgid = 0;\n }\n\n /**\n * Attach event listeners to the widget\n */\n _attachEventListeners() {\n this._sendButton.addEventListener('click', () => {\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n });\n this._textEntry.addEventListener('keydown', (event) => {\n // Check if Shift + Enter is pressed\n if (event.shiftKey && event.keyCode === 13) {\n event.preventDefault();\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n }\n });\n\n // Auto-grow textarea\n this._textEntry.addEventListener('input', () => this._autoGrowTextarea());\n\n this._messagesArea.addEventListener('scroll', () => {\n const { scrollTop, scrollHeight, clientHeight } = this._messagesArea;\n this.userScrolledUp = scrollTop + clientHeight < scrollHeight - 1;\n this._updateScrollBottomBtn();\n });\n\n // Scroll-to-bottom button\n this._scrollBottomBtn.addEventListener('click', () => this.scrollToBottom());\n\n // Ctrl+End to scroll to bottom\n this._chatWidget.addEventListener('keydown', (event) => {\n if (event.ctrlKey && event.key === 'End') {\n event.preventDefault();\n this.scrollToBottom();\n }\n });\n\n // Use ResizeObserver to detect parent container resize\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => this._handleContainerResize());\n this._resizeObserver.observe(this._parentElement);\n }\n }\n\n // set the onSend function callback.\n setCallbackOnSend(callback) {\n this._onSend = callback;\n }\n // set a callback for everytime a message is added (listener)\n setCallbackonMessageAdded(callback) {\n this._onMessageAdded = callback;\n }\n setCallbackonMessageAppend(callback) {\n this._onMessageAppend = callback;\n }\n setCallbackonMessageReplace(callback) {\n this._onMessageReplace = callback;\n }\n setCallbackonMessageDelete(callback) {\n this._onMessageDelete = callback;\n }\n\n // Public methods\n titleAreaToggle() {\n if (this._titleArea.style.display === 'none') {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n\n titleAreaShow() {\n this._titleArea.style.display = '';\n }\n\n titleAreaHide() {\n this._titleArea.style.display = 'none';\n }\n\n titleAreaSetContents(title, align = 'center') {\n this._titleArea.innerHTML = title;\n this._titleArea.style.textAlign = align;\n }\n\n titleAreaGetContents() {\n return this._titleArea.innerHTML;\n }\n\n inputAreaToggle() {\n if (this._inputArea.style.display === 'none') {\n this.inputAreaShow();\n } else {\n this.inputAreaHide();\n }\n }\n\n inputAreaShow() {\n this._inputArea.style.display = '';\n }\n\n inputAreaHide() {\n this._inputArea.style.display = 'none';\n }\n\n inputAreaSetEnabled(enabled) {\n this._textEntry.disabled = !enabled;\n this._sendButton.disabled = !enabled;\n }\n\n inputAreaSetButtonText(text) {\n this._sendButton.textContent = text;\n }\n\n inputAreaGetButtonText() {\n return this._sendButton.textContent;\n }\n\n setDirection(dir) {\n const d = dir === 'rtl' ? 'rtl' : 'ltr';\n this._chatWidget.setAttribute('dir', d);\n if (d === 'rtl') {\n this._chatWidget.classList.add('quikchat-rtl');\n } else {\n this._chatWidget.classList.remove('quikchat-rtl');\n }\n }\n\n getDirection() {\n return this._chatWidget.getAttribute('dir') || 'ltr';\n }\n\n _handleContainerResize() {\n // Layout is handled by CSS flexbox — no JS height calculation needed.\n // This hook exists for future use or custom resize callbacks.\n }\n\n scrollToBottom() {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n this.userScrolledUp = false;\n this._updateScrollBottomBtn();\n }\n\n _updateScrollBottomBtn() {\n if (this.userScrolledUp) {\n this._scrollBottomBtn.classList.add('quikchat-scroll-bottom-visible');\n } else {\n this._scrollBottomBtn.classList.remove('quikchat-scroll-bottom-visible');\n }\n }\n\n _autoGrowTextarea() {\n const el = this._textEntry;\n el.style.height = 'auto';\n const maxHeight = parseInt(getComputedStyle(el).getPropertyValue('--quikchat-input-max-height')) || 120;\n el.style.height = Math.min(el.scrollHeight, maxHeight) + 'px';\n el.style.overflowY = el.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }\n\n _formatTimestamp(isoString) {\n const d = new Date(isoString);\n const h = d.getHours();\n const m = String(d.getMinutes()).padStart(2, '0');\n const ampm = h >= 12 ? 'PM' : 'AM';\n const h12 = h % 12 || 12;\n return h12 + ':' + m + ' ' + ampm;\n }\n\n messagesAreaShowTimestamps(show) {\n if (show) {\n this._messagesArea.classList.add('quikchat-show-timestamps');\n } else {\n this._messagesArea.classList.remove('quikchat-show-timestamps');\n }\n }\n\n messagesAreaShowTimestampsGet() {\n return this._messagesArea.classList.contains('quikchat-show-timestamps');\n }\n\n messagesAreaShowTimestampsToggle() {\n this._messagesArea.classList.toggle('quikchat-show-timestamps');\n }\n\n _escapeHTML(str) {\n const div = document.createElement('div');\n div.textContent = str;\n return div.innerHTML;\n }\n\n _processContent(content) {\n if (this._sanitize === true) {\n content = this._escapeHTML(content);\n } else if (typeof this._sanitize === 'function') {\n content = this._sanitize(content);\n }\n if (this._messageFormatter) {\n content = this._messageFormatter(content);\n }\n return content;\n }\n\n //messagesArea functions\n messagesAreaAlternateColors(alt = true) {\n if (alt) {\n this._messagesArea.classList.add('quikchat-messages-area-alt');\n }\n else {\n this._messagesArea.classList.remove('quikchat-messages-area-alt');\n }\n return alt === true;\n }\n messagesAreaAlternateColorsToggle() {\n this._messagesArea.classList.toggle('quikchat-messages-area-alt');\n }\n messagesAreaAlternateColorsGet() {\n return this._messagesArea.classList.contains('quikchat-messages-area-alt');\n }\n // message functions\n messageAddFull(input = { content: \"\", userString: \"user\", align: \"right\", role: \"user\", userID: -1 }) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n messageDiv.classList.add('quikchat-message', msgidClass);\n messageDiv.classList.add('quikchat-role-' + (input.role || 'user'));\n messageDiv.classList.add('quikchat-align-' + (input.align || 'right'));\n this.msgid++;\n messageDiv.classList.add(this._messagesArea.children.length % 2 === 1 ? 'quikchat-message-1' : 'quikchat-message-2');\n\n // Visibility: default true, hidden messages get display:none\n const visible = input.visible !== false;\n if (!visible) {\n messageDiv.style.display = 'none';\n }\n\n // Tags: array of strings for group-based visibility control\n const tags = Array.isArray(input.tags) ? input.tags.slice() : [];\n\n const userDiv = document.createElement('div');\n userDiv.classList.add('quikchat-user-label');\n userDiv.style.textAlign = input.align;\n userDiv.innerHTML = input.userString;\n\n const contentDiv = document.createElement('div');\n contentDiv.classList.add('quikchat-message-content');\n contentDiv.style.textAlign = input.align;\n contentDiv.innerHTML = this._processContent(input.content);\n\n const timestamp = new Date().toISOString();\n const timestampSpan = document.createElement('span');\n timestampSpan.classList.add('quikchat-timestamp');\n timestampSpan.textContent = this._formatTimestamp(timestamp);\n\n messageDiv.appendChild(userDiv);\n messageDiv.appendChild(contentDiv);\n messageDiv.appendChild(timestampSpan);\n this._messagesArea.appendChild(messageDiv);\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n\n this._textEntry.value = '';\n this._autoGrowTextarea();\n const updatedtime = timestamp;\n\n if (this.trackHistory) {\n this._history.push({ msgid, ...input, visible, tags, timestamp, updatedtime, messageDiv });\n if (this._history.length > this._historyLimit) {\n this._history.shift();\n }\n }\n\n if (this._onMessageAdded) {\n this._onMessageAdded(this, msgid);\n }\n\n return msgid;\n }\n\n\n messageAddNew(content = \"\", userString = \"user\", align = \"right\", role = \"user\") {\n return this.messageAddFull(\n { content: content, userString: userString, align: align, role: role }\n );\n }\n messageRemove(n) {\n let success = false;\n try {\n this._messagesArea.removeChild(this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`));\n success = true;\n }\n catch (_error) {\n // Message ID not found\n }\n if (success) {\n this._history.splice(this._history.findIndex((item) => item.msgid === n), 1);\n if (this._onMessageDelete) {\n this._onMessageDelete(this, n);\n }\n }\n return success;\n }\n /* returns the message html object from the DOM\n */\n messageGetDOMObject(n) {\n let msg = null;\n try {\n msg = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n }\n catch (_error) {\n // Message ID not found\n }\n return msg;\n }\n /* returns the message content only\n */\n messageGetContent(n) {\n let content = \"\";\n try {\n content = this._history.filter((item) => item.msgid === n)[0].content;\n }\n catch (_error) {\n // Message ID not found\n }\n return content;\n }\n\n messageSetVisible(n, visible) {\n const msgEl = this.messageGetDOMObject(n);\n if (!msgEl) return false;\n msgEl.style.display = visible ? '' : 'none';\n const item = this._history.find((entry) => entry.msgid === n);\n if (item) item.visible = visible;\n return true;\n }\n\n messageGetVisible(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item ? item.visible !== false : false;\n }\n\n messageToggleVisible(n) {\n const current = this.messageGetVisible(n);\n return this.messageSetVisible(n, !current);\n }\n\n messageSetVisibleByTag(tag, visible) {\n let count = 0;\n for (const item of this._history) {\n if (item.tags && item.tags.includes(tag)) {\n this.messageSetVisible(item.msgid, visible);\n count++;\n }\n }\n return count;\n }\n\n messageGetTags(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item && item.tags ? item.tags.slice() : [];\n }\n\n messageSetTags(n, tags) {\n const item = this._history.find((entry) => entry.msgid === n);\n if (!item) return false;\n item.tags = Array.isArray(tags) ? tags.slice() : [];\n return true;\n }\n\n /* append message to the message content\n */\n messageAppendContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content += content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(item.content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageAppend) {\n this._onMessageAppend(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n /* replace message content\n */\n messageReplaceContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content = content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageReplace) {\n this._onMessageReplace(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n messageAddTypingIndicator(userString = '', align = 'left') {\n const msgid = this.messageAddFull({\n content: '',\n userString: userString,\n align: align,\n role: 'assistant',\n });\n const msgEl = this.messageGetDOMObject(msgid);\n msgEl.classList.add('quikchat-typing');\n const contentDiv = msgEl.querySelector('.quikchat-message-content');\n contentDiv.innerHTML = '<span class=\"quikchat-typing-dots\"><span>.</span><span>.</span><span>.</span></span>';\n return msgid;\n }\n\n setMessageFormatter(formatter) {\n this._messageFormatter = formatter;\n }\n\n setSanitize(sanitize) {\n this._sanitize = sanitize;\n }\n\n // history functions\n /**\n *\n * @param {*} n\n * @param {*} m\n * @returns array of history messages\n */\n historyGet(n, m) {\n if (n === undefined) {\n return this._history.slice();\n }\n if (m === undefined) {\n if (n < 0) {\n return this._history.slice(n);\n }\n return this._history.slice(n, n + 1);\n }\n return this._history.slice(n, m);\n }\n\n historyClear() {\n this.msgid = 0;\n this._history = [];\n }\n\n historyGetLength() {\n return this._history.length;\n }\n\n historyGetMessage(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n];\n }\n return {};\n }\n\n historyGetMessageContent(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n].content;\n }\n return \"\";\n }\n\n historyExport() {\n return this._history.map((item) => ({\n msgid: item.msgid,\n content: item.content,\n userString: item.userString,\n align: item.align,\n role: item.role,\n userID: item.userID,\n visible: item.visible,\n tags: item.tags ? item.tags.slice() : [],\n timestamp: item.timestamp,\n updatedtime: item.updatedtime,\n }));\n }\n\n historyImport(data) {\n // Clear existing messages from DOM and history\n this._messagesArea.innerHTML = '';\n this._history = [];\n this.msgid = 0;\n\n for (const entry of data) {\n this.messageAddFull({\n content: entry.content || '',\n userString: entry.userString || 'user',\n align: entry.align || 'right',\n role: entry.role || 'user',\n userID: entry.userID,\n visible: entry.visible,\n tags: entry.tags,\n });\n }\n }\n\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n get theme() {\n return this._theme;\n }\n\n static version() {\n return { \"version\": \"1.2.4\", \"license\": \"BSD-2\", \"url\": \"https://github/deftio/quikchat\" };\n }\n\n /**\n * quikchat.loremIpsum() - Generate a simple string of Lorem Ipsum text (sample typographer's text) of numChars in length.\n * borrowed from github.com/deftio/bitwrench.js\n * @param {number} numChars - The number of characters to generate (random btw 25 and 150 if undefined).\n * @param {number} [startSpot=0] - The starting index in the Lorem Ipsum text. If undefined, a random startSpot will be generated.\n * @param {boolean} [startWithCapitalLetter=true] - If true, capitalize the first character or inject a capital letter if the first character isn't a capital letter.\n *\n * @returns {string} A string of Lorem Ipsum text.\n *\n * @example\n * // Returns 200 characters of Lorem Ipsum starting from index 50\n * loremIpsum(200, 50);\n *\n * @example\n * //Returns a 200 Lorem Ipsum characters starting from a random index\n * loremIpsum(200);\n */\n\n static loremIpsum(numChars, startSpot = undefined, startWithCapitalLetter = true) {\n const loremText = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \";\n\n if (typeof numChars !== \"number\") {\n numChars = Math.floor(Math.random() * 126) + 25;\n }\n\n if (startSpot === undefined) {\n startSpot = Math.floor(Math.random() * loremText.length);\n }\n\n startSpot = startSpot % loremText.length;\n\n // Move startSpot to the next non-whitespace and non-punctuation character\n while (loremText[startSpot] === ' ' || /[.,:;!?]/.test(loremText[startSpot])) {\n startSpot = (startSpot + 1) % loremText.length;\n }\n\n const l = loremText.substring(startSpot) + loremText.substring(0, startSpot);\n\n let s = \"\";\n while (numChars > 0) {\n s += numChars < l.length ? l.substring(0, numChars) : l;\n numChars -= l.length;\n }\n\n if (s[s.length - 1] === \" \") {\n s = s.substring(0, s.length - 1) + \".\"; // always end on non-whitespace. \".\" was chosen arbitrarily.\n }\n\n if (startWithCapitalLetter) {\n s = s[0].toUpperCase() + s.substring(1);\n }\n\n return s;\n };\n\n\n}\n\nexport default quikchat;\n","/**\n * quikdown - Lightweight Markdown Parser\n * @version 1.1.1\n * @license BSD-2-Clause\n * @copyright DeftIO 2025\n */\n/**\n * quikdown - A minimal markdown parser optimized for chat/LLM output\n * Supports tables, code blocks, lists, and common formatting\n * @param {string} markdown - The markdown source text\n * @param {Object} options - Optional configuration object\n * @param {Function} options.fence_plugin - Custom renderer for fenced code blocks\n * (content, fence_string) => html string\n * @param {boolean} options.inline_styles - If true, uses inline styles instead of classes\n * @param {boolean} options.bidirectional - If true, adds data-qd attributes for source tracking\n * @param {boolean} options.lazy_linefeeds - If true, single newlines become <br> tags\n * @returns {string} - The rendered HTML\n */\n\n// Version will be injected at build time \nconst quikdownVersion = '1.1.1';\n\n// Constants for reuse\nconst CLASS_PREFIX = 'quikdown-';\nconst PLACEHOLDER_CB = '§CB';\nconst PLACEHOLDER_IC = '§IC';\n\n// Escape map at module level\nconst ESC_MAP = {'&':'&','<':'<','>':'>','\"':'"',\"'\":'''};\n\n// Single source of truth for all style definitions - optimized\nconst QUIKDOWN_STYLES = {\n h1: 'font-size:2em;font-weight:600;margin:.67em 0;text-align:left',\n h2: 'font-size:1.5em;font-weight:600;margin:.83em 0',\n h3: 'font-size:1.25em;font-weight:600;margin:1em 0',\n h4: 'font-size:1em;font-weight:600;margin:1.33em 0',\n h5: 'font-size:.875em;font-weight:600;margin:1.67em 0',\n h6: 'font-size:.85em;font-weight:600;margin:2em 0',\n pre: 'background:#f4f4f4;padding:10px;border-radius:4px;overflow-x:auto;margin:1em 0',\n code: 'background:#f0f0f0;padding:2px 4px;border-radius:3px;font-family:monospace',\n blockquote: 'border-left:4px solid #ddd;margin-left:0;padding-left:1em',\n table: 'border-collapse:collapse;width:100%;margin:1em 0',\n th: 'border:1px solid #ddd;padding:8px;background-color:#f2f2f2;font-weight:bold;text-align:left',\n td: 'border:1px solid #ddd;padding:8px;text-align:left',\n hr: 'border:none;border-top:1px solid #ddd;margin:1em 0',\n img: 'max-width:100%;height:auto',\n a: 'color:#06c;text-decoration:underline',\n strong: 'font-weight:bold',\n em: 'font-style:italic',\n del: 'text-decoration:line-through',\n ul: 'margin:.5em 0;padding-left:2em',\n ol: 'margin:.5em 0;padding-left:2em',\n li: 'margin:.25em 0',\n // Task list specific styles\n 'task-item': 'list-style:none',\n 'task-checkbox': 'margin-right:.5em'\n};\n\n// Factory function to create getAttr for a given context\nfunction createGetAttr(inline_styles, styles) {\n return function(tag, additionalStyle = '') {\n if (inline_styles) {\n let style = styles[tag];\n if (!style && !additionalStyle) return '';\n \n // Remove default text-align if we're adding a different alignment\n if (additionalStyle && additionalStyle.includes('text-align') && style && style.includes('text-align')) {\n style = style.replace(/text-align:[^;]+;?/, '').trim();\n if (style && !style.endsWith(';')) style += ';';\n }\n \n /* istanbul ignore next - defensive: additionalStyle without style doesn't occur with current tags */\n const fullStyle = additionalStyle ? (style ? `${style}${additionalStyle}` : additionalStyle) : style;\n return ` style=\"${fullStyle}\"`;\n } else {\n const classAttr = ` class=\"${CLASS_PREFIX}${tag}\"`;\n // Apply inline styles for alignment even when using CSS classes\n if (additionalStyle) {\n return `${classAttr} style=\"${additionalStyle}\"`;\n }\n return classAttr;\n }\n };\n}\n\nfunction quikdown(markdown, options = {}) {\n if (!markdown || typeof markdown !== 'string') {\n return '';\n }\n \n const { fence_plugin, inline_styles = false, bidirectional = false, lazy_linefeeds = false } = options;\n const styles = QUIKDOWN_STYLES; // Use module-level styles\n const getAttr = createGetAttr(inline_styles, styles); // Create getAttr once\n\n // Escape HTML entities to prevent XSS\n function escapeHtml(text) {\n return text.replace(/[&<>\"']/g, m => ESC_MAP[m]);\n }\n \n // Helper to add data-qd attributes for bidirectional support\n const dataQd = bidirectional ? (marker) => ` data-qd=\"${escapeHtml(marker)}\"` : () => '';\n \n // Sanitize URLs to prevent XSS attacks\n function sanitizeUrl(url, allowUnsafe = false) {\n /* istanbul ignore next - defensive programming, regex ensures url is never empty */\n if (!url) return '';\n \n // If unsafe URLs are explicitly allowed, return as-is\n if (allowUnsafe) return url;\n \n const trimmedUrl = url.trim();\n const lowerUrl = trimmedUrl.toLowerCase();\n \n // Block dangerous protocols\n const dangerousProtocols = ['javascript:', 'vbscript:', 'data:'];\n \n for (const protocol of dangerousProtocols) {\n if (lowerUrl.startsWith(protocol)) {\n // Exception: Allow data:image/* for images\n if (protocol === 'data:' && lowerUrl.startsWith('data:image/')) {\n return trimmedUrl;\n }\n // Return safe empty link for dangerous protocols\n return '#';\n }\n }\n \n return trimmedUrl;\n }\n\n // Process the markdown in phases\n let html = markdown;\n \n // Phase 1: Extract and protect code blocks and inline code\n const codeBlocks = [];\n const inlineCodes = [];\n \n // Extract fenced code blocks first (supports both ``` and ~~~)\n // Match paired fences - ``` with ``` and ~~~ with ~~~\n // Fence must be at start of line\n html = html.replace(/^(```|~~~)([^\\n]*)\\n([\\s\\S]*?)^\\1$/gm, (match, fence, lang, code) => {\n const placeholder = `${PLACEHOLDER_CB}${codeBlocks.length}§`;\n \n // Trim the language specification\n const langTrimmed = lang ? lang.trim() : '';\n \n // If custom fence plugin is provided, use it (v1.1.0: object format required)\n if (fence_plugin && fence_plugin.render && typeof fence_plugin.render === 'function') {\n codeBlocks.push({\n lang: langTrimmed,\n code: code.trimEnd(),\n custom: true,\n fence: fence,\n hasReverse: !!fence_plugin.reverse\n });\n } else {\n codeBlocks.push({\n lang: langTrimmed,\n code: escapeHtml(code.trimEnd()),\n custom: false,\n fence: fence\n });\n }\n return placeholder;\n });\n \n // Extract inline code\n html = html.replace(/`([^`]+)`/g, (match, code) => {\n const placeholder = `${PLACEHOLDER_IC}${inlineCodes.length}§`;\n inlineCodes.push(escapeHtml(code));\n return placeholder;\n });\n \n // Now escape HTML in the rest of the content\n html = escapeHtml(html);\n \n // Phase 2: Process block elements\n \n // Process tables\n html = processTable(html, getAttr);\n \n // Process headings (supports optional trailing #'s)\n html = html.replace(/^(#{1,6})\\s+(.+?)\\s*#*$/gm, (match, hashes, content) => {\n const level = hashes.length;\n return `<h${level}${getAttr('h' + level)}${dataQd(hashes)}>${content}</h${level}>`;\n });\n \n // Process blockquotes (must handle escaped > since we already escaped HTML)\n html = html.replace(/^>\\s+(.+)$/gm, `<blockquote${getAttr('blockquote')}>$1</blockquote>`);\n // Merge consecutive blockquotes\n html = html.replace(/<\\/blockquote>\\n<blockquote>/g, '\\n');\n \n // Process horizontal rules (allow trailing spaces)\n html = html.replace(/^---+\\s*$/gm, `<hr${getAttr('hr')}>`);\n \n // Process lists\n html = processLists(html, getAttr, inline_styles, bidirectional);\n \n // Phase 3: Process inline elements\n \n // Images (must come before links, with URL sanitization)\n html = html.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, (match, alt, src) => {\n const sanitizedSrc = sanitizeUrl(src, options.allow_unsafe_urls);\n const altAttr = bidirectional && alt ? ` data-qd-alt=\"${escapeHtml(alt)}\"` : '';\n const srcAttr = bidirectional ? ` data-qd-src=\"${escapeHtml(src)}\"` : '';\n return `<img${getAttr('img')} src=\"${sanitizedSrc}\" alt=\"${alt}\"${altAttr}${srcAttr}${dataQd('!')}>`;\n });\n \n // Links (with URL sanitization)\n html = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (match, text, href) => {\n // Sanitize URL to prevent XSS\n const sanitizedHref = sanitizeUrl(href, options.allow_unsafe_urls);\n const isExternal = /^https?:\\/\\//i.test(sanitizedHref);\n const rel = isExternal ? ' rel=\"noopener noreferrer\"' : '';\n const textAttr = bidirectional ? ` data-qd-text=\"${escapeHtml(text)}\"` : '';\n return `<a${getAttr('a')} href=\"${sanitizedHref}\"${rel}${textAttr}${dataQd('[')}>${text}</a>`;\n });\n \n // Autolinks - convert bare URLs to clickable links\n html = html.replace(/(^|\\s)(https?:\\/\\/[^\\s<]+)/g, (match, prefix, url) => {\n const sanitizedUrl = sanitizeUrl(url, options.allow_unsafe_urls);\n return `${prefix}<a${getAttr('a')} href=\"${sanitizedUrl}\" rel=\"noopener noreferrer\">${url}</a>`;\n });\n \n // Process inline formatting (bold, italic, strikethrough)\n const inlinePatterns = [\n [/\\*\\*(.+?)\\*\\*/g, 'strong', '**'],\n [/__(.+?)__/g, 'strong', '__'],\n [/(?<!\\*)\\*(?!\\*)(.+?)(?<!\\*)\\*(?!\\*)/g, 'em', '*'],\n [/(?<!_)_(?!_)(.+?)(?<!_)_(?!_)/g, 'em', '_'],\n [/~~(.+?)~~/g, 'del', '~~']\n ];\n \n inlinePatterns.forEach(([pattern, tag, marker]) => {\n html = html.replace(pattern, `<${tag}${getAttr(tag)}${dataQd(marker)}>$1</${tag}>`);\n });\n \n // Line breaks\n if (lazy_linefeeds) {\n // Lazy linefeeds: single newline becomes <br> (except between paragraphs and after/before block elements)\n const blocks = [];\n let bi = 0;\n \n // Protect tables and lists \n html = html.replace(/<(table|[uo]l)[^>]*>[\\s\\S]*?<\\/\\1>/g, m => {\n blocks[bi] = m;\n return `§B${bi++}§`;\n });\n \n // Handle paragraphs and block elements\n html = html.replace(/\\n\\n+/g, '§P§')\n // After block elements\n .replace(/(<\\/(?:h[1-6]|blockquote|pre)>)\\n/g, '$1§N§')\n .replace(/(<(?:h[1-6]|blockquote|pre|hr)[^>]*>)\\n/g, '$1§N§')\n // Before block elements \n .replace(/\\n(<(?:h[1-6]|blockquote|pre|hr)[^>]*>)/g, '§N§$1')\n .replace(/\\n(§B\\d+§)/g, '§N§$1')\n .replace(/(§B\\d+§)\\n/g, '$1§N§')\n // Convert remaining newlines\n .replace(/\\n/g, `<br${getAttr('br')}>`)\n // Restore\n .replace(/§N§/g, '\\n')\n .replace(/§P§/g, '</p><p>');\n \n // Restore protected blocks\n blocks.forEach((b, i) => html = html.replace(`§B${i}§`, b));\n \n html = '<p>' + html + '</p>';\n } else {\n // Standard: two spaces at end of line for line breaks\n html = html.replace(/ $/gm, `<br${getAttr('br')}>`);\n \n // Paragraphs (double newlines)\n // Don't add </p> after block elements (they're not in paragraphs)\n html = html.replace(/\\n\\n+/g, (match, offset) => {\n // Check if we're after a block element closing tag\n const before = html.substring(0, offset);\n if (before.match(/<\\/(h[1-6]|blockquote|ul|ol|table|pre|hr)>$/)) {\n return '<p>'; // Just open a new paragraph\n }\n return '</p><p>'; // Normal paragraph break\n });\n html = '<p>' + html + '</p>';\n }\n \n // Clean up empty paragraphs and unwrap block elements\n const cleanupPatterns = [\n [/<p><\\/p>/g, ''],\n [/<p>(<h[1-6][^>]*>)/g, '$1'],\n [/(<\\/h[1-6]>)<\\/p>/g, '$1'],\n [/<p>(<blockquote[^>]*>)/g, '$1'],\n [/(<\\/blockquote>)<\\/p>/g, '$1'],\n [/<p>(<ul[^>]*>|<ol[^>]*>)/g, '$1'],\n [/(<\\/ul>|<\\/ol>)<\\/p>/g, '$1'],\n [/<p>(<hr[^>]*>)<\\/p>/g, '$1'],\n [/<p>(<table[^>]*>)/g, '$1'],\n [/(<\\/table>)<\\/p>/g, '$1'],\n [/<p>(<pre[^>]*>)/g, '$1'],\n [/(<\\/pre>)<\\/p>/g, '$1'],\n [new RegExp(`<p>(${PLACEHOLDER_CB}\\\\d+§)<\\/p>`, 'g'), '$1']\n ];\n \n cleanupPatterns.forEach(([pattern, replacement]) => {\n html = html.replace(pattern, replacement);\n });\n \n // Fix orphaned closing </p> tags after block elements\n // When a paragraph follows a block element, ensure it has opening <p>\n html = html.replace(/(<\\/(?:h[1-6]|blockquote|ul|ol|table|pre|hr)>)\\n([^<])/g, '$1\\n<p>$2');\n \n // Phase 4: Restore code blocks and inline code\n \n // Restore code blocks\n codeBlocks.forEach((block, i) => {\n let replacement;\n \n if (block.custom && fence_plugin && fence_plugin.render) {\n // Use custom fence plugin (v1.1.0: object format with render function)\n replacement = fence_plugin.render(block.code, block.lang);\n \n // If plugin returns undefined, fall back to default rendering\n if (replacement === undefined) {\n const langClass = !inline_styles && block.lang ? ` class=\"language-${block.lang}\"` : '';\n const codeAttr = inline_styles ? getAttr('code') : langClass;\n const langAttr = bidirectional && block.lang ? ` data-qd-lang=\"${escapeHtml(block.lang)}\"` : '';\n const fenceAttr = bidirectional ? ` data-qd-fence=\"${escapeHtml(block.fence)}\"` : '';\n replacement = `<pre${getAttr('pre')}${fenceAttr}${langAttr}><code${codeAttr}>${escapeHtml(block.code)}</code></pre>`;\n } else if (bidirectional) {\n // If bidirectional and plugin provided HTML, add data attributes for roundtrip\n replacement = replacement.replace(/^<(\\w+)/, \n `<$1 data-qd-fence=\"${escapeHtml(block.fence)}\" data-qd-lang=\"${escapeHtml(block.lang)}\" data-qd-source=\"${escapeHtml(block.code)}\"`);\n }\n } else {\n // Default rendering\n const langClass = !inline_styles && block.lang ? ` class=\"language-${block.lang}\"` : '';\n const codeAttr = inline_styles ? getAttr('code') : langClass;\n const langAttr = bidirectional && block.lang ? ` data-qd-lang=\"${escapeHtml(block.lang)}\"` : '';\n const fenceAttr = bidirectional ? ` data-qd-fence=\"${escapeHtml(block.fence)}\"` : '';\n replacement = `<pre${getAttr('pre')}${fenceAttr}${langAttr}><code${codeAttr}>${block.code}</code></pre>`;\n }\n \n const placeholder = `${PLACEHOLDER_CB}${i}§`;\n html = html.replace(placeholder, replacement);\n });\n \n // Restore inline code\n inlineCodes.forEach((code, i) => {\n const placeholder = `${PLACEHOLDER_IC}${i}§`;\n html = html.replace(placeholder, `<code${getAttr('code')}${dataQd('`')}>${code}</code>`);\n });\n \n return html.trim();\n}\n\n/**\n * Process inline markdown formatting\n */\nfunction processInlineMarkdown(text, getAttr) {\n \n // Process inline formatting patterns\n const patterns = [\n [/\\*\\*(.+?)\\*\\*/g, 'strong'],\n [/__(.+?)__/g, 'strong'],\n [/(?<!\\*)\\*(?!\\*)(.+?)(?<!\\*)\\*(?!\\*)/g, 'em'],\n [/(?<!_)_(?!_)(.+?)(?<!_)_(?!_)/g, 'em'],\n [/~~(.+?)~~/g, 'del'],\n [/`([^`]+)`/g, 'code']\n ];\n \n patterns.forEach(([pattern, tag]) => {\n text = text.replace(pattern, `<${tag}${getAttr(tag)}>$1</${tag}>`);\n });\n \n return text;\n}\n\n/**\n * Process markdown tables\n */\nfunction processTable(text, getAttr) {\n const lines = text.split('\\n');\n const result = [];\n let inTable = false;\n let tableLines = [];\n \n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n \n // Check if this line looks like a table row (with or without trailing |)\n if (line.includes('|') && (line.startsWith('|') || /[^\\\\|]/.test(line))) {\n if (!inTable) {\n inTable = true;\n tableLines = [];\n }\n tableLines.push(line);\n } else {\n // Not a table line\n if (inTable) {\n // Process the accumulated table\n const tableHtml = buildTable(tableLines, getAttr);\n if (tableHtml) {\n result.push(tableHtml);\n } else {\n // Not a valid table, restore original lines\n result.push(...tableLines);\n }\n inTable = false;\n tableLines = [];\n }\n result.push(lines[i]);\n }\n }\n \n // Handle table at end of text\n if (inTable && tableLines.length > 0) {\n const tableHtml = buildTable(tableLines, getAttr);\n if (tableHtml) {\n result.push(tableHtml);\n } else {\n result.push(...tableLines);\n }\n }\n \n return result.join('\\n');\n}\n\n/**\n * Build an HTML table from markdown table lines\n */\nfunction buildTable(lines, getAttr) {\n \n if (lines.length < 2) return null;\n \n // Check for separator line (second line should be the separator)\n let separatorIndex = -1;\n for (let i = 1; i < lines.length; i++) {\n // Support separator with or without leading/trailing pipes\n if (/^\\|?[\\s\\-:|]+\\|?$/.test(lines[i]) && lines[i].includes('-')) {\n separatorIndex = i;\n break;\n }\n }\n \n if (separatorIndex === -1) return null;\n \n const headerLines = lines.slice(0, separatorIndex);\n const bodyLines = lines.slice(separatorIndex + 1);\n \n // Parse alignment from separator\n const separator = lines[separatorIndex];\n // Handle pipes at start/end or not\n const separatorCells = separator.trim().replace(/^\\|/, '').replace(/\\|$/, '').split('|');\n const alignments = separatorCells.map(cell => {\n const trimmed = cell.trim();\n if (trimmed.startsWith(':') && trimmed.endsWith(':')) return 'center';\n if (trimmed.endsWith(':')) return 'right';\n return 'left';\n });\n \n let html = `<table${getAttr('table')}>\\n`;\n \n // Build header\n // Note: headerLines will always have length > 0 since separatorIndex starts from 1\n html += `<thead${getAttr('thead')}>\\n`;\n headerLines.forEach(line => {\n html += `<tr${getAttr('tr')}>\\n`;\n // Handle pipes at start/end or not\n const cells = line.trim().replace(/^\\|/, '').replace(/\\|$/, '').split('|');\n cells.forEach((cell, i) => {\n const alignStyle = alignments[i] && alignments[i] !== 'left' ? `text-align:${alignments[i]}` : '';\n const processedCell = processInlineMarkdown(cell.trim(), getAttr);\n html += `<th${getAttr('th', alignStyle)}>${processedCell}</th>\\n`;\n });\n html += '</tr>\\n';\n });\n html += '</thead>\\n';\n \n // Build body\n if (bodyLines.length > 0) {\n html += `<tbody${getAttr('tbody')}>\\n`;\n bodyLines.forEach(line => {\n html += `<tr${getAttr('tr')}>\\n`;\n // Handle pipes at start/end or not\n const cells = line.trim().replace(/^\\|/, '').replace(/\\|$/, '').split('|');\n cells.forEach((cell, i) => {\n const alignStyle = alignments[i] && alignments[i] !== 'left' ? `text-align:${alignments[i]}` : '';\n const processedCell = processInlineMarkdown(cell.trim(), getAttr);\n html += `<td${getAttr('td', alignStyle)}>${processedCell}</td>\\n`;\n });\n html += '</tr>\\n';\n });\n html += '</tbody>\\n';\n }\n \n html += '</table>';\n return html;\n}\n\n/**\n * Process markdown lists (ordered and unordered)\n */\nfunction processLists(text, getAttr, inline_styles, bidirectional) {\n \n const lines = text.split('\\n');\n const result = [];\n let listStack = []; // Track nested lists\n \n // Helper to escape HTML for data-qd attributes\n const escapeHtml = (text) => text.replace(/[&<>\"']/g, m => ({'&':'&','<':'<','>':'>','\"':'"',\"'\":'''})[m]);\n const dataQd = bidirectional ? (marker) => ` data-qd=\"${escapeHtml(marker)}\"` : () => '';\n \n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const match = line.match(/^(\\s*)([*\\-+]|\\d+\\.)\\s+(.+)$/);\n \n if (match) {\n const [, indent, marker, content] = match;\n const level = Math.floor(indent.length / 2);\n const isOrdered = /^\\d+\\./.test(marker);\n const listType = isOrdered ? 'ol' : 'ul';\n \n // Check for task list items\n let listItemContent = content;\n let taskListClass = '';\n const taskMatch = content.match(/^\\[([x ])\\]\\s+(.*)$/i);\n if (taskMatch && !isOrdered) {\n const [, checked, taskContent] = taskMatch;\n const isChecked = checked.toLowerCase() === 'x';\n const checkboxAttr = inline_styles \n ? ' style=\"margin-right:.5em\"' \n : ` class=\"${CLASS_PREFIX}task-checkbox\"`;\n listItemContent = `<input type=\"checkbox\"${checkboxAttr}${isChecked ? ' checked' : ''} disabled> ${taskContent}`;\n taskListClass = inline_styles ? ' style=\"list-style:none\"' : ` class=\"${CLASS_PREFIX}task-item\"`;\n }\n \n // Close deeper levels\n while (listStack.length > level + 1) {\n const list = listStack.pop();\n result.push(`</${list.type}>`);\n }\n \n // Open new level if needed\n if (listStack.length === level) {\n // Need to open a new list\n listStack.push({ type: listType, level });\n result.push(`<${listType}${getAttr(listType)}>`);\n } else if (listStack.length === level + 1) {\n // Check if we need to switch list type\n const currentList = listStack[listStack.length - 1];\n if (currentList.type !== listType) {\n result.push(`</${currentList.type}>`);\n listStack.pop();\n listStack.push({ type: listType, level });\n result.push(`<${listType}${getAttr(listType)}>`);\n }\n }\n \n const liAttr = taskListClass || getAttr('li');\n result.push(`<li${liAttr}${dataQd(marker)}>${listItemContent}</li>`);\n } else {\n // Not a list item, close all lists\n while (listStack.length > 0) {\n const list = listStack.pop();\n result.push(`</${list.type}>`);\n }\n result.push(line);\n }\n }\n \n // Close any remaining lists\n while (listStack.length > 0) {\n const list = listStack.pop();\n result.push(`</${list.type}>`);\n }\n \n return result.join('\\n');\n}\n\n/**\n * Emit CSS styles for quikdown elements\n * @param {string} prefix - Optional class prefix (default: 'quikdown-')\n * @param {string} theme - Optional theme: 'light' (default) or 'dark'\n * @returns {string} CSS string with quikdown styles\n */\nquikdown.emitStyles = function(prefix = 'quikdown-', theme = 'light') {\n const styles = QUIKDOWN_STYLES;\n \n // Define theme color overrides\n const themeOverrides = {\n dark: {\n '#f4f4f4': '#2a2a2a', // pre background\n '#f0f0f0': '#2a2a2a', // code background\n '#f2f2f2': '#2a2a2a', // th background\n '#ddd': '#3a3a3a', // borders\n '#06c': '#6db3f2', // links\n _textColor: '#e0e0e0'\n },\n light: {\n _textColor: '#333' // Explicit text color for light theme\n }\n };\n \n let css = '';\n for (const [tag, style] of Object.entries(styles)) {\n let themedStyle = style;\n \n // Apply theme overrides if dark theme\n if (theme === 'dark' && themeOverrides.dark) {\n // Replace colors\n for (const [oldColor, newColor] of Object.entries(themeOverrides.dark)) {\n if (!oldColor.startsWith('_')) {\n themedStyle = themedStyle.replace(new RegExp(oldColor, 'g'), newColor);\n }\n }\n \n // Add text color for certain elements in dark theme\n const needsTextColor = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'td', 'li', 'blockquote'];\n if (needsTextColor.includes(tag)) {\n themedStyle += `;color:${themeOverrides.dark._textColor}`;\n }\n } else if (theme === 'light' && themeOverrides.light) {\n // Add explicit text color for light theme elements too\n const needsTextColor = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'td', 'li', 'blockquote'];\n if (needsTextColor.includes(tag)) {\n themedStyle += `;color:${themeOverrides.light._textColor}`;\n }\n }\n \n css += `.${prefix}${tag} { ${themedStyle} }\\n`;\n }\n \n return css;\n};\n\n/**\n * Configure quikdown with options and return a function\n * @param {Object} options - Configuration options\n * @returns {Function} Configured quikdown function\n */\nquikdown.configure = function(options) {\n return function(markdown) {\n return quikdown(markdown, options);\n };\n};\n\n/**\n * Version information\n */\nquikdown.version = quikdownVersion;\n\n// Export for both CommonJS and ES6\n/* istanbul ignore next */\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = quikdown;\n}\n\n// For browser global\n/* istanbul ignore next */\nif (typeof window !== 'undefined') {\n window.quikdown = quikdown;\n}\n\nexport { quikdown as default };\n","import quikchat from './quikchat.js';\nimport quikdown from 'quikdown';\n\n// Subclass that pre-wires quikdown as the message formatter\nclass quikchatMD extends quikchat {\n constructor(parentElement, onSend, options = {}) {\n if (!options.messageFormatter) {\n options.messageFormatter = (content) => quikdown(content);\n }\n super(parentElement, onSend, options);\n }\n}\n\n// Expose quikdown on the class for direct access\nquikchatMD.quikdown = quikdown;\n\nexport default quikchatMD;\n"],"names":["quikchat","parentElement","onSend","arguments","length","undefined","options","_classCallCheck","defaultOpts","theme","trackHistory","showTimestamps","titleArea","title","show","align","messagesArea","alternating","meta","_objectSpread","document","querySelector","_parentElement","_theme","_onSend","_messageFormatter","messageFormatter","_sanitize","sanitize","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","messagesAreaAlternateColors","messagesAreaShowTimestamps","direction","setDirection","_attachEventListeners","_historyLimit","_history","_createClass","key","value","widgetHTML","concat","innerHTML","_chatWidget","_titleArea","_messagesWrapper","_messagesArea","_scrollBottomBtn","_inputArea","_textEntry","_sendButton","msgid","_this","addEventListener","text","trim","event","shiftKey","keyCode","preventDefault","_autoGrowTextarea","_this$_messagesArea","scrollTop","scrollHeight","clientHeight","userScrolledUp","_updateScrollBottomBtn","scrollToBottom","ctrlKey","ResizeObserver","_resizeObserver","_handleContainerResize","observe","setCallbackOnSend","callback","setCallbackonMessageAdded","_onMessageAdded","setCallbackonMessageAppend","_onMessageAppend","setCallbackonMessageReplace","_onMessageReplace","setCallbackonMessageDelete","_onMessageDelete","titleAreaToggle","style","display","textAlign","titleAreaGetContents","inputAreaToggle","inputAreaShow","inputAreaHide","inputAreaSetEnabled","enabled","disabled","inputAreaSetButtonText","textContent","inputAreaGetButtonText","dir","d","setAttribute","classList","add","remove","getDirection","getAttribute","el","height","maxHeight","parseInt","getComputedStyle","getPropertyValue","Math","min","overflowY","_formatTimestamp","isoString","Date","h","getHours","m","String","getMinutes","padStart","ampm","h12","messagesAreaShowTimestampsGet","contains","messagesAreaShowTimestampsToggle","toggle","_escapeHTML","str","div","createElement","_processContent","content","alt","messagesAreaAlternateColorsToggle","messagesAreaAlternateColorsGet","messageAddFull","input","userString","role","userID","messageDiv","msgidClass","children","visible","tags","Array","isArray","slice","userDiv","contentDiv","timestamp","toISOString","timestampSpan","appendChild","updatedtime","push","shift","messageAddNew","messageRemove","n","success","removeChild","_error","splice","findIndex","item","messageGetDOMObject","msg","messageGetContent","filter","messageSetVisible","msgEl","find","entry","messageGetVisible","messageToggleVisible","current","messageSetVisibleByTag","tag","count","_iterator","_createForOfIteratorHelper","_step","s","done","includes","err","e","f","messageGetTags","messageSetTags","messageAppendContent","messageReplaceContent","messageAddTypingIndicator","setMessageFormatter","formatter","setSanitize","historyGet","historyClear","historyGetLength","historyGetMessage","historyGetMessageContent","historyExport","map","historyImport","data","_iterator2","_step2","changeTheme","newTheme","get","version","loremIpsum","numChars","startSpot","startWithCapitalLetter","loremText","floor","random","test","l","substring","toUpperCase","quikchatMD","_quikchat","quikdown","_callSuper","_inherits"],"mappings":"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","x_google_ignoreList":[1]}
|
|
1
|
+
{"version":3,"file":"quikchat-md.cjs.js","sources":["../src/quikchat.js","../node_modules/quikdown/dist/quikdown.esm.js","../src/quikchat-md.js"],"sourcesContent":["\nclass quikchat {\n /**\n *\n * @param string or DOM element parentElement\n * @param {*} meta\n */\n constructor(parentElement, onSend = () => { }, options = {}) {\n const defaultOpts = {\n theme: 'quikchat-theme-light',\n trackHistory: true,\n showTimestamps: false,\n titleArea: { title: \"Chat\", show: false, align: \"center\" },\n messagesArea: { alternating: true },\n };\n const meta = { ...defaultOpts, ...options }; // merge options with defaults\n\n if (typeof parentElement === 'string') {\n parentElement = document.querySelector(parentElement);\n }\n this._parentElement = parentElement;\n this._theme = meta.theme;\n this._onSend = onSend ? onSend : () => { }; // call back function for onSend\n this._messageFormatter = meta.messageFormatter || null;\n this._sanitize = meta.sanitize || false;\n this._createWidget();\n // title area\n if (meta.titleArea) {\n this.titleAreaSetContents(meta.titleArea.title, meta.titleArea.align);\n if (meta.titleArea.show === true) {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n // messages area\n if (meta.messagesArea) {\n this.messagesAreaAlternateColors(meta.messagesArea.alternating);\n }\n // timestamps\n if (meta.showTimestamps) {\n this.messagesAreaShowTimestamps(true);\n }\n // direction (ltr/rtl)\n if (meta.direction) {\n this.setDirection(meta.direction);\n }\n // plumbing\n this._attachEventListeners();\n this.trackHistory = meta.trackHistory !== false;\n this._historyLimit = 10000000;\n this._history = [];\n }\n\n _createWidget() {\n const widgetHTML =\n `\n <div class=\"quikchat-base ${this.theme}\">\n <div class=\"quikchat-title-area\"></div>\n <div class=\"quikchat-messages-wrapper\"><div class=\"quikchat-messages-area\" role=\"log\" aria-live=\"polite\" aria-label=\"Chat messages\"></div><button class=\"quikchat-scroll-bottom\" aria-label=\"Scroll to bottom\"></button></div>\n <div class=\"quikchat-input-area\">\n <textarea class=\"quikchat-input-textbox\" rows=\"1\" aria-label=\"Type a message\"></textarea>\n <button class=\"quikchat-input-send-btn\">Send</button>\n </div>\n </div>\n `;\n\n this._parentElement.innerHTML = widgetHTML;\n this._chatWidget = this._parentElement.querySelector('.quikchat-base');\n this._titleArea = this._chatWidget.querySelector('.quikchat-title-area');\n this._messagesWrapper = this._chatWidget.querySelector('.quikchat-messages-wrapper');\n this._messagesArea = this._chatWidget.querySelector('.quikchat-messages-area');\n this._scrollBottomBtn = this._messagesWrapper.querySelector('.quikchat-scroll-bottom');\n this._inputArea = this._chatWidget.querySelector('.quikchat-input-area');\n this._textEntry = this._inputArea.querySelector('.quikchat-input-textbox');\n this._sendButton = this._inputArea.querySelector('.quikchat-input-send-btn');\n this.msgid = 0;\n }\n\n /**\n * Attach event listeners to the widget\n */\n _attachEventListeners() {\n this._sendButton.addEventListener('click', () => {\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n });\n this._textEntry.addEventListener('keydown', (event) => {\n // Check if Shift + Enter is pressed\n if (event.shiftKey && event.keyCode === 13) {\n event.preventDefault();\n const text = this._textEntry.value.trim();\n if (text === '') return;\n this._onSend(this, text);\n }\n });\n\n // Auto-grow textarea\n this._textEntry.addEventListener('input', () => this._autoGrowTextarea());\n\n this._messagesArea.addEventListener('scroll', () => {\n const { scrollTop, scrollHeight, clientHeight } = this._messagesArea;\n this.userScrolledUp = scrollTop + clientHeight < scrollHeight - 1;\n this._updateScrollBottomBtn();\n });\n\n // Scroll-to-bottom button\n this._scrollBottomBtn.addEventListener('click', () => this.scrollToBottom());\n\n // Ctrl+End to scroll to bottom\n this._chatWidget.addEventListener('keydown', (event) => {\n if (event.ctrlKey && event.key === 'End') {\n event.preventDefault();\n this.scrollToBottom();\n }\n });\n\n // Use ResizeObserver to detect parent container resize\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => this._handleContainerResize());\n this._resizeObserver.observe(this._parentElement);\n }\n }\n\n // set the onSend function callback.\n setCallbackOnSend(callback) {\n this._onSend = callback;\n }\n // set a callback for everytime a message is added (listener)\n setCallbackonMessageAdded(callback) {\n this._onMessageAdded = callback;\n }\n setCallbackonMessageAppend(callback) {\n this._onMessageAppend = callback;\n }\n setCallbackonMessageReplace(callback) {\n this._onMessageReplace = callback;\n }\n setCallbackonMessageDelete(callback) {\n this._onMessageDelete = callback;\n }\n\n // Public methods\n titleAreaToggle() {\n if (this._titleArea.style.display === 'none') {\n this.titleAreaShow();\n } else {\n this.titleAreaHide();\n }\n }\n\n titleAreaShow() {\n this._titleArea.style.display = '';\n }\n\n titleAreaHide() {\n this._titleArea.style.display = 'none';\n }\n\n titleAreaSetContents(title, align = 'center') {\n this._titleArea.innerHTML = title;\n this._titleArea.style.textAlign = align;\n }\n\n titleAreaGetContents() {\n return this._titleArea.innerHTML;\n }\n\n inputAreaToggle() {\n if (this._inputArea.style.display === 'none') {\n this.inputAreaShow();\n } else {\n this.inputAreaHide();\n }\n }\n\n inputAreaShow() {\n this._inputArea.style.display = '';\n }\n\n inputAreaHide() {\n this._inputArea.style.display = 'none';\n }\n\n inputAreaSetEnabled(enabled) {\n this._textEntry.disabled = !enabled;\n this._sendButton.disabled = !enabled;\n }\n\n inputAreaSetButtonText(text) {\n this._sendButton.textContent = text;\n }\n\n inputAreaGetButtonText() {\n return this._sendButton.textContent;\n }\n\n setDirection(dir) {\n const d = dir === 'rtl' ? 'rtl' : 'ltr';\n this._chatWidget.setAttribute('dir', d);\n if (d === 'rtl') {\n this._chatWidget.classList.add('quikchat-rtl');\n } else {\n this._chatWidget.classList.remove('quikchat-rtl');\n }\n }\n\n getDirection() {\n return this._chatWidget.getAttribute('dir') || 'ltr';\n }\n\n _handleContainerResize() {\n // Layout is handled by CSS flexbox — no JS height calculation needed.\n // This hook exists for future use or custom resize callbacks.\n }\n\n scrollToBottom() {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n this.userScrolledUp = false;\n this._updateScrollBottomBtn();\n }\n\n _updateScrollBottomBtn() {\n if (this.userScrolledUp) {\n this._scrollBottomBtn.classList.add('quikchat-scroll-bottom-visible');\n } else {\n this._scrollBottomBtn.classList.remove('quikchat-scroll-bottom-visible');\n }\n }\n\n _autoGrowTextarea() {\n const el = this._textEntry;\n el.style.height = 'auto';\n const maxHeight = 120;\n el.style.height = Math.min(el.scrollHeight, maxHeight) + 'px';\n el.style.overflowY = el.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }\n\n _formatTimestamp(isoString) {\n const d = new Date(isoString);\n const h = d.getHours();\n const m = String(d.getMinutes()).padStart(2, '0');\n const ampm = h >= 12 ? 'PM' : 'AM';\n const h12 = h % 12 || 12;\n return h12 + ':' + m + ' ' + ampm;\n }\n\n messagesAreaShowTimestamps(show) {\n if (show) {\n this._messagesArea.classList.add('quikchat-show-timestamps');\n } else {\n this._messagesArea.classList.remove('quikchat-show-timestamps');\n }\n }\n\n messagesAreaShowTimestampsGet() {\n return this._messagesArea.classList.contains('quikchat-show-timestamps');\n }\n\n messagesAreaShowTimestampsToggle() {\n this._messagesArea.classList.toggle('quikchat-show-timestamps');\n }\n\n _escapeHTML(str) {\n const div = document.createElement('div');\n div.textContent = str;\n return div.innerHTML;\n }\n\n _processContent(content) {\n if (this._sanitize === true) {\n content = this._escapeHTML(content);\n } else if (typeof this._sanitize === 'function') {\n content = this._sanitize(content);\n }\n if (this._messageFormatter) {\n content = this._messageFormatter(content);\n }\n return content;\n }\n\n //messagesArea functions\n messagesAreaAlternateColors(alt = true) {\n if (alt) {\n this._messagesArea.classList.add('quikchat-messages-area-alt');\n }\n else {\n this._messagesArea.classList.remove('quikchat-messages-area-alt');\n }\n return alt === true;\n }\n messagesAreaAlternateColorsToggle() {\n this._messagesArea.classList.toggle('quikchat-messages-area-alt');\n }\n messagesAreaAlternateColorsGet() {\n return this._messagesArea.classList.contains('quikchat-messages-area-alt');\n }\n // message functions\n messageAddFull(input = { content: \"\", userString: \"user\", align: \"right\", role: \"user\", userID: -1 }) {\n const msgid = this.msgid;\n const messageDiv = document.createElement('div');\n const msgidClass = 'quikchat-msgid-' + String(msgid).padStart(10, '0');\n messageDiv.classList.add('quikchat-message', msgidClass);\n messageDiv.classList.add('quikchat-role-' + (input.role || 'user'));\n messageDiv.classList.add('quikchat-align-' + (input.align || 'right'));\n this.msgid++;\n messageDiv.classList.add(this._messagesArea.children.length % 2 === 1 ? 'quikchat-message-1' : 'quikchat-message-2');\n\n // Visibility: default true, hidden messages get display:none\n const visible = input.visible !== false;\n if (!visible) {\n messageDiv.style.display = 'none';\n }\n\n // Tags: array of strings for group-based visibility control\n const tags = Array.isArray(input.tags) ? input.tags.slice() : [];\n\n const userDiv = document.createElement('div');\n userDiv.classList.add('quikchat-user-label');\n userDiv.style.textAlign = input.align;\n userDiv.innerHTML = input.userString;\n\n const contentDiv = document.createElement('div');\n contentDiv.classList.add('quikchat-message-content');\n contentDiv.style.textAlign = input.align;\n contentDiv.innerHTML = this._processContent(input.content);\n\n const timestamp = new Date().toISOString();\n const timestampSpan = document.createElement('span');\n timestampSpan.classList.add('quikchat-timestamp');\n timestampSpan.textContent = this._formatTimestamp(timestamp);\n\n messageDiv.appendChild(userDiv);\n messageDiv.appendChild(contentDiv);\n messageDiv.appendChild(timestampSpan);\n this._messagesArea.appendChild(messageDiv);\n\n // Scroll to the last message only if the user is not actively scrolling up\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n\n this._textEntry.value = '';\n this._autoGrowTextarea();\n const updatedtime = timestamp;\n\n if (this.trackHistory) {\n this._history.push({ msgid, ...input, visible, tags, timestamp, updatedtime, messageDiv });\n if (this._history.length > this._historyLimit) {\n this._history.shift();\n }\n }\n\n if (this._onMessageAdded) {\n this._onMessageAdded(this, msgid);\n }\n\n return msgid;\n }\n\n\n messageAddNew(content = \"\", userString = \"user\", align = \"right\", role = \"user\") {\n return this.messageAddFull(\n { content: content, userString: userString, align: align, role: role }\n );\n }\n messageRemove(n) {\n let success = false;\n try {\n this._messagesArea.removeChild(this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`));\n success = true;\n }\n catch (_error) {\n // Message ID not found\n }\n if (success) {\n this._history.splice(this._history.findIndex((item) => item.msgid === n), 1);\n if (this._onMessageDelete) {\n this._onMessageDelete(this, n);\n }\n }\n return success;\n }\n /* returns the message html object from the DOM\n */\n messageGetDOMObject(n) {\n let msg = null;\n try {\n msg = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n }\n catch (_error) {\n // Message ID not found\n }\n return msg;\n }\n /* returns the message content only\n */\n messageGetContent(n) {\n let content = \"\";\n try {\n content = this._history.filter((item) => item.msgid === n)[0].content;\n }\n catch (_error) {\n // Message ID not found\n }\n return content;\n }\n\n messageSetVisible(n, visible) {\n const msgEl = this.messageGetDOMObject(n);\n if (!msgEl) return false;\n msgEl.style.display = visible ? '' : 'none';\n const item = this._history.find((entry) => entry.msgid === n);\n if (item) item.visible = visible;\n return true;\n }\n\n messageGetVisible(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item ? item.visible !== false : false;\n }\n\n messageToggleVisible(n) {\n const current = this.messageGetVisible(n);\n return this.messageSetVisible(n, !current);\n }\n\n messageSetVisibleByTag(tag, visible) {\n let count = 0;\n for (const item of this._history) {\n if (item.tags && item.tags.includes(tag)) {\n this.messageSetVisible(item.msgid, visible);\n count++;\n }\n }\n return count;\n }\n\n messageGetTags(n) {\n const item = this._history.find((entry) => entry.msgid === n);\n return item && item.tags ? item.tags.slice() : [];\n }\n\n messageSetTags(n, tags) {\n const item = this._history.find((entry) => entry.msgid === n);\n if (!item) return false;\n item.tags = Array.isArray(tags) ? tags.slice() : [];\n return true;\n }\n\n /* append message to the message content\n */\n messageAppendContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content += content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(item.content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageAppend) {\n this._onMessageAppend(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n /* replace message content\n */\n messageReplaceContent(n, content) {\n let success = false;\n try {\n const msgEl = this._messagesArea.querySelector(`.quikchat-msgid-${String(n).padStart(10, '0')}`);\n const item = this._history.filter((entry) => entry.msgid === n)[0];\n item.content = content;\n item.updatedtime = new Date().toISOString();\n msgEl.querySelector('.quikchat-message-content').innerHTML = this._processContent(content);\n msgEl.classList.remove('quikchat-typing');\n success = true;\n\n if (!this.userScrolledUp) {\n this._messagesArea.scrollTop = this._messagesArea.scrollHeight;\n }\n if (this._onMessageReplace) {\n this._onMessageReplace(this, n, content);\n }\n } catch (_error) {\n // Message ID not found\n }\n return success;\n }\n\n messageAddTypingIndicator(userString = '', align = 'left') {\n const msgid = this.messageAddFull({\n content: '',\n userString: userString,\n align: align,\n role: 'assistant',\n });\n const msgEl = this.messageGetDOMObject(msgid);\n msgEl.classList.add('quikchat-typing');\n const contentDiv = msgEl.querySelector('.quikchat-message-content');\n contentDiv.innerHTML = '<span class=\"quikchat-typing-dots\"><span>.</span><span>.</span><span>.</span></span>';\n return msgid;\n }\n\n setMessageFormatter(formatter) {\n this._messageFormatter = formatter;\n }\n\n setSanitize(sanitize) {\n this._sanitize = sanitize;\n }\n\n // history functions\n /**\n *\n * @param {*} n\n * @param {*} m\n * @returns array of history messages\n */\n historyGet(n, m) {\n if (n === undefined) {\n return this._history.slice();\n }\n if (m === undefined) {\n if (n < 0) {\n return this._history.slice(n);\n }\n return this._history.slice(n, n + 1);\n }\n return this._history.slice(n, m);\n }\n\n historyClear() {\n this.msgid = 0;\n this._history = [];\n }\n\n historyGetLength() {\n return this._history.length;\n }\n\n historyGetMessage(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n];\n }\n return {};\n }\n\n historyGetMessageContent(n) {\n if (n >= 0 && n < this._history.length) {\n return this._history[n].content;\n }\n return \"\";\n }\n\n historyExport() {\n return this._history.map((item) => ({\n msgid: item.msgid,\n content: item.content,\n userString: item.userString,\n align: item.align,\n role: item.role,\n userID: item.userID,\n visible: item.visible,\n tags: item.tags ? item.tags.slice() : [],\n timestamp: item.timestamp,\n updatedtime: item.updatedtime,\n }));\n }\n\n historyImport(data) {\n // Clear existing messages from DOM and history\n this._messagesArea.innerHTML = '';\n this._history = [];\n this.msgid = 0;\n\n for (const entry of data) {\n this.messageAddFull({\n content: entry.content || '',\n userString: entry.userString || 'user',\n align: entry.align || 'right',\n role: entry.role || 'user',\n userID: entry.userID,\n visible: entry.visible,\n tags: entry.tags,\n });\n }\n }\n\n changeTheme(newTheme) {\n this._chatWidget.classList.remove(this._theme);\n this._chatWidget.classList.add(newTheme);\n this._theme = newTheme;\n }\n\n get theme() {\n return this._theme;\n }\n\n static version() {\n return { \"version\": \"1.2.7\", \"license\": \"BSD-2\", \"url\": \"https://github.com/deftio/quikchat\" };\n }\n\n /**\n * quikchat.loremIpsum() - Generate a simple string of Lorem Ipsum text (sample typographer's text) of numChars in length.\n * borrowed from github.com/deftio/bitwrench.js\n * @param {number} numChars - The number of characters to generate (random btw 25 and 150 if undefined).\n * @param {number} [startSpot=0] - The starting index in the Lorem Ipsum text. If undefined, a random startSpot will be generated.\n * @param {boolean} [startWithCapitalLetter=true] - If true, capitalize the first character or inject a capital letter if the first character isn't a capital letter.\n *\n * @returns {string} A string of Lorem Ipsum text.\n *\n * @example\n * // Returns 200 characters of Lorem Ipsum starting from index 50\n * loremIpsum(200, 50);\n *\n * @example\n * //Returns a 200 Lorem Ipsum characters starting from a random index\n * loremIpsum(200);\n */\n\n static loremIpsum(numChars, startSpot = undefined, startWithCapitalLetter = true) {\n const loremText = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \";\n\n if (typeof numChars !== \"number\") {\n numChars = Math.floor(Math.random() * 126) + 25;\n }\n\n if (startSpot === undefined) {\n startSpot = Math.floor(Math.random() * loremText.length);\n }\n\n startSpot = startSpot % loremText.length;\n\n // Move startSpot to the next non-whitespace and non-punctuation character\n while (loremText[startSpot] === ' ' || /[.,:;!?]/.test(loremText[startSpot])) {\n startSpot = (startSpot + 1) % loremText.length;\n }\n\n const l = loremText.substring(startSpot) + loremText.substring(0, startSpot);\n\n let s = \"\";\n while (numChars > 0) {\n s += numChars < l.length ? l.substring(0, numChars) : l;\n numChars -= l.length;\n }\n\n if (s[s.length - 1] === \" \") {\n s = s.substring(0, s.length - 1) + \".\"; // always end on non-whitespace. \".\" was chosen arbitrarily.\n }\n\n if (startWithCapitalLetter) {\n s = s[0].toUpperCase() + s.substring(1);\n }\n\n return s;\n };\n\n\n}\n\nexport default quikchat;\n","/**\n * quikdown - Lightweight Markdown Parser\n * @version 1.2.12\n * @license BSD-2-Clause\n * @copyright DeftIO 2025\n */\n/**\n * quikdown_classify — Shared line-classification utilities\n * ═════════════════════════════════════════════════════════\n *\n * Pure functions for classifying markdown lines. Used by both the main\n * parser (quikdown.js) and the editor (quikdown_edit.js) so the logic\n * lives in one place.\n *\n * All functions operate on a **trimmed** line (caller must trim).\n * None use regexes with nested quantifiers — every check is either a\n * simple regex or a linear scan, so there is zero ReDoS risk.\n */\n\n\n/**\n * Dash-only HR check — exact parity with the main parser's original\n * regex `/^---+\\s*$/`. Only matches lines of three or more dashes\n * with optional trailing whitespace (no interspersed spaces).\n *\n * @param {string} trimmed The line, already trimmed\n * @returns {boolean}\n */\nfunction isDashHRLine(trimmed) {\n if (trimmed.length < 3) return false;\n for (let i = 0; i < trimmed.length; i++) {\n const ch = trimmed[i];\n if (ch === '-') continue;\n // Allow trailing whitespace only\n if (ch === ' ' || ch === '\\t') {\n for (let j = i + 1; j < trimmed.length; j++) {\n if (trimmed[j] !== ' ' && trimmed[j] !== '\\t') return false;\n }\n return i >= 3; // at least 3 dashes before whitespace\n }\n return false;\n }\n return true; // all dashes\n}\n\n/**\n * quikdown — A compact, scanner-based markdown parser\n * ════════════════════════════════════════════════════\n *\n * Architecture overview (v1.2.8 — lexer rewrite)\n * ───────────────────────────────────────────────\n * Prior to v1.2.8, quikdown used a multi-pass regex pipeline: each block\n * type (headings, blockquotes, HR, lists, tables) and each inline format\n * (bold, italic, links, …) was handled by its own global regex applied\n * sequentially to the full document string. That worked but made the code\n * hard to extend and debug — a new construct meant adding another regex\n * pass, and ordering bugs between passes were subtle.\n *\n * Starting in v1.2.8 the parser uses a **line-scanning** approach for\n * block detection and a **per-block inline pass** for formatting:\n *\n * ┌─────────────────────────────────────────────────────────┐\n * │ Phase 1 — Code Extraction │\n * │ Scan for fenced code blocks (``` / ~~~) and inline │\n * │ code spans (`…`). Replace with §CB§ / §IC§ place- │\n * │ holders so code content is never touched by later │\n * │ phases. │\n * ├─────────────────────────────────────────────────────────┤\n * │ Phase 2 — HTML Escaping │\n * │ Escape &, <, >, \", ' in the remaining text to prevent │\n * │ XSS. (Skipped when allow_unsafe_html is true.) │\n * ├─────────────────────────────────────────────────────────┤\n * │ Phase 3 — Block Scanning │\n * │ Walk the text **line by line**. At each line, the │\n * │ scanner checks (in order): │\n * │ • table rows (|) │\n * │ • headings (#) │\n * │ • HR (---) │\n * │ • blockquotes (>) │\n * │ • list items (-, *, +, 1.) │\n * │ • code-block placeholder (§CB…§) │\n * │ • paragraph text (everything else) │\n * │ │\n * │ Block text is run through the **inline formatter** │\n * │ which handles bold, italic, strikethrough, links, │\n * │ images, and autolinks. │\n * │ │\n * │ Paragraphs are wrapped in <p> tags. Lazy linefeeds │\n * │ (single \\n → <br>) are handled here too. │\n * ├─────────────────────────────────────────────────────────┤\n * │ Phase 4 — Code Restoration │\n * │ Replace §CB§ / §IC§ placeholders with rendered <pre> │\n * │ / <code> HTML, applying the fence_plugin if present. │\n * └─────────────────────────────────────────────────────────┘\n *\n * Why this design?\n * • Single pass over lines for block identification — no re-scanning.\n * • Each block type is a clearly separated branch, easy to add new ones.\n * • Inline formatting is confined to block text — can't accidentally\n * match across block boundaries or inside HTML tags.\n * • Code extraction still uses a simple regex (it's one pattern, not a\n * chain) because the §-placeholder approach is proven and simple.\n *\n * @param {string} markdown The markdown source text\n * @param {Object} options Configuration (see below)\n * @returns {string} Rendered HTML\n */\n\n\n// ────────────────────────────────────────────────────────────────────\n// Constants\n// ────────────────────────────────────────────────────────────────────\n\n/** Build-time version stamp (injected by tools/updateVersion) */\nconst quikdownVersion = '1.2.12';\n\n/** CSS class prefix used for all generated elements */\nconst CLASS_PREFIX = 'quikdown-';\n\n/** Placeholder sigils — chosen to be extremely unlikely in real text */\nconst PLACEHOLDER_CB = '§CB'; // fenced code blocks\nconst PLACEHOLDER_IC = '§IC'; // inline code spans\nconst PLACEHOLDER_HT = '§HT'; // safe HTML tags (limited mode)\n\n/** Attributes whose values need URL sanitization */\nconst URL_ATTRIBUTES = { href:1, src:1, action:1, formaction:1 };\n\n/** HTML entity escape map */\nconst ESC_MAP = {'&':'&','<':'<','>':'>','\"':'"',\"'\":'''};\n\n// ────────────────────────────────────────────────────────────────────\n// Style definitions\n// ────────────────────────────────────────────────────────────────────\n\n/**\n * Inline styles for every element quikdown can emit.\n * When `inline_styles: true` these are injected as style=\"…\" attributes.\n * When `inline_styles: false` (default) we use class=\"quikdown-<tag>\"\n * and these same values are emitted by `quikdown.emitStyles()`.\n */\nconst QUIKDOWN_STYLES = {\n h1: 'font-size:2em;font-weight:600;margin:.67em 0;text-align:left',\n h2: 'font-size:1.5em;font-weight:600;margin:.83em 0',\n h3: 'font-size:1.25em;font-weight:600;margin:1em 0',\n h4: 'font-size:1em;font-weight:600;margin:1.33em 0',\n h5: 'font-size:.875em;font-weight:600;margin:1.67em 0',\n h6: 'font-size:.85em;font-weight:600;margin:2em 0',\n pre: 'background:#f4f4f4;padding:10px;border-radius:4px;overflow-x:auto;margin:1em 0',\n code: 'background:#f0f0f0;padding:2px 4px;border-radius:3px;font-family:monospace',\n blockquote: 'border-left:4px solid #ddd;margin-left:0;padding-left:1em',\n table: 'border-collapse:collapse;width:100%;margin:1em 0',\n th: 'border:1px solid #ddd;padding:8px;background-color:#f2f2f2;font-weight:bold;text-align:left',\n td: 'border:1px solid #ddd;padding:8px;text-align:left',\n hr: 'border:none;border-top:1px solid #ddd;margin:1em 0',\n img: 'max-width:100%;height:auto',\n a: 'color:#06c;text-decoration:underline',\n strong: 'font-weight:bold',\n em: 'font-style:italic',\n del: 'text-decoration:line-through',\n ul: 'margin:.5em 0;padding-left:2em',\n ol: 'margin:.5em 0;padding-left:2em',\n li: 'margin:.25em 0',\n 'task-item': 'list-style:none',\n 'task-checkbox': 'margin-right:.5em'\n};\n\n// ────────────────────────────────────────────────────────────────────\n// Attribute factory\n// ────────────────────────────────────────────────────────────────────\n\n/**\n * Creates a `getAttr(tag, additionalStyle?)` helper that returns\n * either a class=\"…\" or style=\"…\" attribute string depending on mode.\n *\n * @param {boolean} inline_styles True → emit style=\"…\"; false → class=\"…\"\n * @param {Object} styles The QUIKDOWN_STYLES map\n * @returns {Function}\n */\nfunction createGetAttr(inline_styles, styles) {\n return function(tag, additionalStyle = '') {\n if (inline_styles) {\n let style = styles[tag];\n if (!style && !additionalStyle) return '';\n\n // When adding alignment that conflicts with the tag's default,\n // strip the default text-align first.\n if (additionalStyle && additionalStyle.includes('text-align') && style && style.includes('text-align')) {\n style = style.replace(/text-align:[^;]+;?/, '').trim();\n /* istanbul ignore next */\n if (style && !style.endsWith(';')) style += ';';\n }\n\n /* istanbul ignore next - defensive: additionalStyle without style doesn't occur with current tags */\n const fullStyle = additionalStyle ? (style ? `${style}${additionalStyle}` : additionalStyle) : style;\n return ` style=\"${fullStyle}\"`;\n } else {\n const classAttr = ` class=\"${CLASS_PREFIX}${tag}\"`;\n if (additionalStyle) {\n return `${classAttr} style=\"${additionalStyle}\"`;\n }\n return classAttr;\n }\n };\n}\n\n// ════════════════════════════════════════════════════════════════════\n// Main parser function\n// ════════════════════════════════════════════════════════════════════\n\nfunction quikdown(markdown, options = {}) {\n // ── Guard: only process non-empty strings ──\n if (!markdown || typeof markdown !== 'string') {\n return '';\n }\n\n // ── Unpack options ──\n const { fence_plugin, inline_styles = false, bidirectional = false, lazy_linefeeds = false, allow_unsafe_html = false } = options;\n const styles = QUIKDOWN_STYLES;\n const getAttr = createGetAttr(inline_styles, styles);\n\n // ── Helpers (closed over options) ──\n\n /** Escape the five HTML-special characters. */\n function escapeHtml(text) {\n return text.replace(/[&<>\"']/g, m => ESC_MAP[m]);\n }\n\n /**\n * Bidirectional marker helper.\n * When bidirectional mode is on, returns ` data-qd=\"…\"`.\n * The non-bidirectional branch is a trivial no-op arrow; it is\n * exercised in the core bundle but never in quikdown_bd.\n */\n /* istanbul ignore next - trivial no-op fallback */\n const dataQd = bidirectional ? (marker) => ` data-qd=\"${escapeHtml(marker)}\"` : () => '';\n\n /**\n * Sanitize a URL to block javascript:, vbscript:, and non-image data: URIs.\n * Returns '#' for blocked URLs.\n */\n function sanitizeUrl(url, allowUnsafe = false) {\n /* istanbul ignore next - defensive programming, regex ensures url is never empty */\n if (!url) return '';\n if (allowUnsafe) return url;\n\n const trimmedUrl = url.trim();\n const lowerUrl = trimmedUrl.toLowerCase();\n const dangerousProtocols = ['javascript:', 'vbscript:', 'data:'];\n\n for (const protocol of dangerousProtocols) {\n if (lowerUrl.startsWith(protocol)) {\n if (protocol === 'data:' && lowerUrl.startsWith('data:image/')) {\n return trimmedUrl;\n }\n return '#';\n }\n }\n return trimmedUrl;\n }\n\n /**\n * Sanitize attributes on an HTML tag string for limited mode.\n * Strips on* event handlers (case-insensitive) and runs sanitizeUrl()\n * on href/src/action/formaction values.\n */\n function sanitizeHtmlTagAttrs(tagStr) {\n // Self-closing or void tag without attributes — pass through\n if (!/\\s/.test(tagStr.replace(/<\\/?[a-zA-Z][a-zA-Z0-9]*/, '').replace(/\\/?>$/, ''))) {\n return tagStr;\n }\n // Parse: <tagname ...attrs... > or <tagname ...attrs... />\n const m = tagStr.match(/^(<\\/?[a-zA-Z][a-zA-Z0-9]*)([\\s\\S]*?)(\\/?>)$/);\n /* istanbul ignore next - defensive: Phase 1.5 regex guarantees valid tag shape */\n if (!m) return tagStr;\n\n const [, open, attrStr, close] = m;\n // Match individual attributes: name=\"value\", name='value', name=value, or bare name\n // eslint-disable-next-line security/detect-unsafe-regex -- linear: no nested quantifiers\n const attrRe = /([a-zA-Z_][\\w\\-.:]*)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|(\\S+)))?/g;\n const attrs = [];\n let am;\n while ((am = attrRe.exec(attrStr)) !== null) {\n const name = am[1];\n const value = am[2] !== undefined ? am[2] : am[3] !== undefined ? am[3] : am[4];\n // Strip event handlers (on*)\n if (/^on/i.test(name)) continue;\n if (value === undefined) {\n // Boolean attribute (e.g. disabled, checked)\n attrs.push(name);\n } else {\n let sanitized = value;\n if (name.toLowerCase() in URL_ATTRIBUTES) {\n sanitized = sanitizeUrl(value);\n }\n attrs.push(`${name}=\"${sanitized}\"`);\n }\n }\n return open + (attrs.length ? ' ' + attrs.join(' ') : '') + close;\n }\n\n // ────────────────────────────────────────────────────────────────\n // Phase 1 — Code Extraction\n // ────────────────────────────────────────────────────────────────\n // Why extract code first? Fenced blocks and inline code spans can\n // contain markdown-like characters (*, _, #, |, etc.) that must NOT\n // be interpreted as formatting. By pulling them out and replacing\n // with unique placeholders, the rest of the pipeline never sees them.\n\n let html = markdown;\n const codeBlocks = []; // Array of {lang, code, custom, fence, hasReverse}\n const inlineCodes = []; // Array of escaped-HTML strings\n\n // ── Fenced code blocks ──\n // Matches paired fences: ``` with ``` and ~~~ with ~~~.\n // The fence must start at column 0 of a line (^ with /m flag).\n // Group 1 = fence marker, Group 2 = language hint, Group 3 = code body.\n html = html.replace(/^(```|~~~)([^\\n]*)\\n([\\s\\S]*?)^\\1$/gm, (match, fence, lang, code) => {\n const placeholder = `${PLACEHOLDER_CB}${codeBlocks.length}§`;\n const langTrimmed = lang ? lang.trim() : '';\n\n if (fence_plugin && fence_plugin.render && typeof fence_plugin.render === 'function') {\n // Custom plugin — store raw code (un-escaped) so the plugin\n // receives the original source.\n codeBlocks.push({\n lang: langTrimmed,\n code: code.trimEnd(),\n custom: true,\n fence: fence,\n hasReverse: !!fence_plugin.reverse\n });\n } else {\n // Default — pre-escape the code for safe HTML output.\n codeBlocks.push({\n lang: langTrimmed,\n code: escapeHtml(code.trimEnd()),\n custom: false,\n fence: fence\n });\n }\n return placeholder;\n });\n\n // ── Inline code spans ──\n // Matches a single backtick pair: `content`.\n // Content is captured and HTML-escaped immediately.\n html = html.replace(/`([^`]+)`/g, (match, code) => {\n const placeholder = `${PLACEHOLDER_IC}${inlineCodes.length}§`;\n inlineCodes.push(escapeHtml(code));\n return placeholder;\n });\n\n // ────────────────────────────────────────────────────────────────\n // Phase 1.5 — Safe HTML Extraction (whitelist mode)\n // ────────────────────────────────────────────────────────────────\n // When allow_unsafe_html is an object or array, extract whitelisted\n // HTML tags, sanitize their attributes, and replace with placeholders.\n // Non-whitelisted tags stay in text so Phase 2 will escape them.\n\n const safeTags = [];\n // Normalize: array → object for O(1) lookup; object used as-is\n const htmlAllow = Array.isArray(allow_unsafe_html)\n ? Object.fromEntries(allow_unsafe_html.map(t => [t, 1]))\n : (allow_unsafe_html && typeof allow_unsafe_html === 'object') ? allow_unsafe_html : null;\n\n if (htmlAllow) {\n // Pass through HTML comments — browsers render them as nothing\n html = html.replace(/<!--[\\s\\S]*?-->/g, (match) => {\n const idx = safeTags.length;\n safeTags.push(match);\n return `${PLACEHOLDER_HT}${idx}§`;\n });\n html = html.replace(/<\\/?([a-zA-Z][a-zA-Z0-9]*)\\b[^>]*\\/?>/g, (match, tagName) => {\n if (tagName.toLowerCase() in htmlAllow) {\n const sanitized = sanitizeHtmlTagAttrs(match);\n const idx = safeTags.length;\n safeTags.push(sanitized);\n return `${PLACEHOLDER_HT}${idx}§`;\n }\n // Not whitelisted — leave in text for Phase 2 to escape\n return match;\n });\n }\n\n // ────────────────────────────────────────────────────────────────\n // Phase 2 — HTML Escaping\n // ────────────────────────────────────────────────────────────────\n // All remaining text (everything except code placeholders) is escaped\n // to prevent XSS. The `allow_unsafe_html` option skips this for\n // trusted pipelines that intentionally embed raw HTML.\n // For whitelist mode, escaping still runs (only `true` bypasses it).\n\n if (allow_unsafe_html !== true) {\n html = escapeHtml(html);\n }\n\n // Restore safe HTML tag placeholders after escaping\n if (htmlAllow) {\n safeTags.forEach((tag, i) => {\n html = html.replace(`${PLACEHOLDER_HT}${i}§`, tag);\n });\n }\n\n // ────────────────────────────────────────────────────────────────\n // Phase 3 — Block Scanning + Inline Formatting + Paragraphs\n // ────────────────────────────────────────────────────────────────\n // This is the heart of the lexer rewrite. Instead of applying\n // 10+ global regex passes, we:\n // 1. Process tables (line walker — tables need multi-line lookahead)\n // 2. Scan remaining lines for headings, HR, blockquotes\n // 3. Process lists (line walker — lists need indent tracking)\n // 4. Apply inline formatting to all text content\n // 5. Wrap remaining text in <p> tags\n //\n // Steps 1 and 3 are line-walkers that process the full text in a\n // single pass each. Step 2 replaces global regex with a per-line\n // scanner. Steps 4-5 are applied to the result.\n //\n // Total: 3 structured passes instead of 10+ regex passes.\n\n // ── Step 1: Tables ──\n // Tables need multi-line lookahead (header → separator → body rows)\n // so they're handled by a dedicated line-walker first.\n html = processTable(html, getAttr);\n\n // ── Step 2: Headings, HR, Blockquotes ──\n // These are simple line-level constructs. We scan each line once\n // and replace matching lines with their HTML representation.\n html = scanLineBlocks(html, getAttr, dataQd);\n\n // ── Step 3: Lists ──\n // Lists need indent-level tracking across lines, so they get their\n // own line-walker.\n html = processLists(html, getAttr, inline_styles, bidirectional);\n\n // ── Step 4: Inline formatting ──\n // Apply bold, italic, strikethrough, images, links, and autolinks\n // to all text content. This runs on the output of steps 1-3, so\n // it sees text inside headings, blockquotes, table cells, list\n // items, and paragraph text.\n\n // Images (must come before links —  vs [text](url))\n html = html.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, (match, alt, src) => {\n const sanitizedSrc = sanitizeUrl(src, options.allow_unsafe_urls);\n /* istanbul ignore next - bd-only branch */\n const altAttr = bidirectional && alt ? ` data-qd-alt=\"${escapeHtml(alt)}\"` : '';\n /* istanbul ignore next - bd-only branch */\n const srcAttr = bidirectional ? ` data-qd-src=\"${escapeHtml(src)}\"` : '';\n return `<img${getAttr('img')} src=\"${sanitizedSrc}\" alt=\"${alt}\"${altAttr}${srcAttr}${dataQd('!')}>`;\n });\n\n // Links\n html = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (match, text, href) => {\n const sanitizedHref = sanitizeUrl(href, options.allow_unsafe_urls);\n const isExternal = /^https?:\\/\\//i.test(sanitizedHref);\n const rel = isExternal ? ' rel=\"noopener noreferrer\"' : '';\n /* istanbul ignore next - bd-only branch */\n const textAttr = bidirectional ? ` data-qd-text=\"${escapeHtml(text)}\"` : '';\n return `<a${getAttr('a')} href=\"${sanitizedHref}\"${rel}${textAttr}${dataQd('[')}>${text}</a>`;\n });\n\n // Autolinks — bare https?:// URLs become clickable <a> tags\n html = html.replace(/(^|\\s)(https?:\\/\\/[^\\s<]+)/g, (match, prefix, url) => {\n const sanitizedUrl = sanitizeUrl(url, options.allow_unsafe_urls);\n return `${prefix}<a${getAttr('a')} href=\"${sanitizedUrl}\" rel=\"noopener noreferrer\">${url}</a>`;\n });\n\n // Protect rendered tags so emphasis regexes don't see attribute\n // values — fixes #3 (underscores in URLs interpreted as emphasis).\n const savedTags = [];\n html = html.replace(/<[^>]+>/g, m => { savedTags.push(m); return `%%T${savedTags.length - 1}%%`; });\n\n // Bold, italic, strikethrough\n const inlinePatterns = [\n [/\\*\\*(.+?)\\*\\*/g, 'strong', '**'],\n [/__(.+?)__/g, 'strong', '__'],\n [/(?<!\\*)\\*(?!\\*)(.+?)(?<!\\*)\\*(?!\\*)/g, 'em', '*'],\n [/(?<!_)_(?!_)(.+?)(?<!_)_(?!_)/g, 'em', '_'],\n [/~~(.+?)~~/g, 'del', '~~']\n ];\n inlinePatterns.forEach(([pattern, tag, marker]) => {\n html = html.replace(pattern, `<${tag}${getAttr(tag)}${dataQd(marker)}>$1</${tag}>`);\n });\n\n // Restore protected tags\n html = html.replace(/%%T(\\d+)%%/g, (_, i) => savedTags[i]);\n\n // ── Step 5: Line breaks + paragraph wrapping ──\n if (lazy_linefeeds) {\n // Lazy linefeeds mode: every single \\n becomes <br> EXCEPT:\n // • Double newlines → paragraph break\n // • Newlines adjacent to block elements (h, blockquote, pre, hr, table, list)\n //\n // Strategy: protect block-adjacent newlines with §N§, convert\n // the rest, then restore.\n\n const blocks = [];\n let bi = 0;\n\n // Protect tables and lists from <br> injection\n html = html.replace(/<(table|[uo]l)[^>]*>[\\s\\S]*?<\\/\\1>/g, m => {\n blocks[bi] = m;\n return `§B${bi++}§`;\n });\n\n html = html.replace(/\\n\\n+/g, '§P§')\n // After block-level closing tags\n .replace(/(<\\/(?:h[1-6]|blockquote|pre)>)\\n/g, '$1§N§')\n .replace(/(<(?:h[1-6]|blockquote|pre|hr)[^>]*>)\\n/g, '$1§N§')\n // Before block-level opening tags\n .replace(/\\n(<(?:h[1-6]|blockquote|pre|hr)[^>]*>)/g, '§N§$1')\n .replace(/\\n(§B\\d+§)/g, '§N§$1')\n .replace(/(§B\\d+§)\\n/g, '$1§N§')\n // Convert surviving newlines to <br>\n .replace(/\\n/g, `<br${getAttr('br')}>`)\n // Restore\n .replace(/§N§/g, '\\n')\n .replace(/§P§/g, '</p><p>');\n\n // Restore protected blocks\n blocks.forEach((b, i) => html = html.replace(`§B${i}§`, b));\n\n html = '<p>' + html + '</p>';\n } else {\n // Standard mode: two trailing spaces → <br>, double newline → new paragraph\n html = html.replace(/ {2}$/gm, `<br${getAttr('br')}>`);\n\n html = html.replace(/\\n\\n+/g, (match, offset) => {\n const before = html.substring(0, offset);\n if (before.match(/<\\/(h[1-6]|blockquote|ul|ol|table|pre|hr)>$/)) {\n return '<p>';\n }\n return '</p><p>';\n });\n html = '<p>' + html + '</p>';\n }\n\n // ── Step 6: Cleanup ──\n // Remove <p> wrappers that accidentally enclose block elements.\n // This is simpler than trying to prevent them during wrapping.\n const cleanupPatterns = [\n [/<p><\\/p>/g, ''],\n [/<p>(<h[1-6][^>]*>)/g, '$1'],\n [/(<\\/h[1-6]>)<\\/p>/g, '$1'],\n [/<p>(<blockquote[^>]*>)/g, '$1'],\n [/(<\\/blockquote>)<\\/p>/g, '$1'],\n [/<p>(<ul[^>]*>|<ol[^>]*>)/g, '$1'],\n [/(<\\/ul>|<\\/ol>)<\\/p>/g, '$1'],\n [/<p>(<hr[^>]*>)<\\/p>/g, '$1'],\n [/<p>(<table[^>]*>)/g, '$1'],\n [/(<\\/table>)<\\/p>/g, '$1'],\n [/<p>(<pre[^>]*>)/g, '$1'],\n [/(<\\/pre>)<\\/p>/g, '$1'],\n [new RegExp(`<p>(${PLACEHOLDER_CB}\\\\d+§)</p>`, 'g'), '$1']\n ];\n cleanupPatterns.forEach(([pattern, replacement]) => {\n html = html.replace(pattern, replacement);\n });\n\n // When a block element is followed by a newline and then text, open a <p>.\n html = html.replace(/(<\\/(?:h[1-6]|blockquote|ul|ol|table|pre|hr)>)\\n([^<])/g, '$1\\n<p>$2');\n\n // ────────────────────────────────────────────────────────────────\n // Phase 4 — Code Restoration\n // ────────────────────────────────────────────────────────────────\n // Replace placeholders with rendered HTML. For fenced blocks this\n // means wrapping in <pre><code>…</code></pre> (or calling the\n // fence_plugin). For inline code it means <code>…</code>.\n\n codeBlocks.forEach((block, i) => {\n let replacement;\n\n if (block.custom && fence_plugin && fence_plugin.render) {\n // Delegate to the user-provided fence plugin.\n replacement = fence_plugin.render(block.code, block.lang);\n\n if (replacement === undefined) {\n // Plugin declined — fall back to default rendering.\n const langClass = !inline_styles && block.lang ? ` class=\"language-${block.lang}\"` : '';\n const codeAttr = inline_styles ? getAttr('code') : langClass;\n /* istanbul ignore next - bd-only branch */\n const langAttr = bidirectional && block.lang ? ` data-qd-lang=\"${escapeHtml(block.lang)}\"` : '';\n /* istanbul ignore next - bd-only branch */\n const fenceAttr = bidirectional ? ` data-qd-fence=\"${escapeHtml(block.fence)}\"` : '';\n replacement = `<pre${getAttr('pre')}${fenceAttr}${langAttr}><code${codeAttr}>${escapeHtml(block.code)}</code></pre>`;\n } else /* istanbul ignore next - bd-only branch */ if (bidirectional) {\n // Plugin returned HTML — inject data attributes for roundtrip.\n replacement = replacement.replace(/^<(\\w+)/,\n `<$1 data-qd-fence=\"${escapeHtml(block.fence)}\" data-qd-lang=\"${escapeHtml(block.lang)}\" data-qd-source=\"${escapeHtml(block.code)}\"`);\n }\n } else {\n // Default rendering — wrap in <pre><code>.\n const langClass = !inline_styles && block.lang ? ` class=\"language-${block.lang}\"` : '';\n const codeAttr = inline_styles ? getAttr('code') : langClass;\n /* istanbul ignore next - bd-only branch */\n const langAttr = bidirectional && block.lang ? ` data-qd-lang=\"${escapeHtml(block.lang)}\"` : '';\n /* istanbul ignore next - bd-only branch */\n const fenceAttr = bidirectional ? ` data-qd-fence=\"${escapeHtml(block.fence)}\"` : '';\n replacement = `<pre${getAttr('pre')}${fenceAttr}${langAttr}><code${codeAttr}>${block.code}</code></pre>`;\n }\n\n const placeholder = `${PLACEHOLDER_CB}${i}§`;\n html = html.replace(placeholder, replacement);\n });\n\n // Restore inline code spans\n inlineCodes.forEach((code, i) => {\n const placeholder = `${PLACEHOLDER_IC}${i}§`;\n html = html.replace(placeholder, `<code${getAttr('code')}${dataQd('`')}>${code}</code>`);\n });\n\n return html.trim();\n}\n\n// ════════════════════════════════════════════════════════════════════\n// Block-level line scanner\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * scanLineBlocks — single-pass line scanner for headings, HR, blockquotes\n *\n * Walks the text line by line. For each line it checks (in order):\n * 1. Heading — starts with 1-6 '#' followed by a space\n * 2. HR — line is entirely '---…' (3+ dashes, optional trailing space)\n * 3. Blockquote — starts with '> ' (the > was already HTML-escaped)\n *\n * Lines that don't match any block pattern are passed through unchanged.\n *\n * This replaces three separate global regex passes from the pre-1.2.8\n * architecture with one structured scan.\n *\n * @param {string} text The document text (HTML-escaped, code extracted)\n * @param {Function} getAttr Attribute factory (class or style)\n * @param {Function} dataQd Bidirectional marker factory\n * @returns {string} Text with block-level elements rendered\n */\nfunction scanLineBlocks(text, getAttr, dataQd) {\n const lines = text.split('\\n');\n const result = [];\n let i = 0;\n\n while (i < lines.length) {\n const line = lines[i];\n\n // ── Markdown comment (reference-link hack) ──\n // [//]: # (comment) or [//]: # \"comment\" or [//]: #\n // These produce no output — standard markdown comment convention.\n if (/^\\[\\/\\/\\]: #/.test(line)) {\n i++;\n continue;\n }\n\n // ── Heading ──\n // Count leading '#' characters. Valid heading: 1-6 hashes then a space.\n // Example: \"## Hello World ##\" → <h2>Hello World</h2>\n let hashCount = 0;\n while (hashCount < line.length && hashCount < 7 && line[hashCount] === '#') {\n hashCount++;\n }\n if (hashCount >= 1 && hashCount <= 6 && line[hashCount] === ' ') {\n // Extract content after \"# \" and strip trailing hashes\n const content = line.slice(hashCount + 1).replace(/\\s*#+\\s*$/, '');\n const tag = 'h' + hashCount;\n result.push(`<${tag}${getAttr(tag)}${dataQd('#'.repeat(hashCount))}>${content}</${tag}>`);\n i++;\n continue;\n }\n\n // ── Horizontal Rule ──\n // Three or more dashes, optional trailing whitespace, nothing else.\n if (isDashHRLine(line)) {\n result.push(`<hr${getAttr('hr')}>`);\n i++;\n continue;\n }\n\n // ── Blockquote ──\n // After Phase 2, the '>' character has been escaped to '>'.\n // Pattern: \"> content\" or merged consecutive blockquotes.\n if (/^>\\s+/.test(line)) {\n result.push(`<blockquote${getAttr('blockquote')}>${line.replace(/^>\\s+/, '')}</blockquote>`);\n i++;\n continue;\n }\n\n // ── Pass-through ──\n result.push(line);\n i++;\n }\n\n // Merge consecutive blockquotes into a single element.\n // <blockquote>A</blockquote>\\n<blockquote>B</blockquote>\n // → <blockquote>A\\nB</blockquote>\n let joined = result.join('\\n');\n joined = joined.replace(/<\\/blockquote>\\n<blockquote>/g, '\\n');\n return joined;\n}\n\n// ════════════════════════════════════════════════════════════════════\n// Table processing (line walker)\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * Inline markdown formatter for table cells.\n * Handles bold, italic, strikethrough, and code within cell text.\n * Links / images / autolinks are handled by the global inline pass\n * (Phase 3 Step 4) which runs after table processing.\n */\nfunction processInlineMarkdown(text, getAttr) {\n const patterns = [\n [/\\*\\*(.+?)\\*\\*/g, 'strong'],\n [/__(.+?)__/g, 'strong'],\n [/(?<!\\*)\\*(?!\\*)(.+?)(?<!\\*)\\*(?!\\*)/g, 'em'],\n [/(?<!_)_(?!_)(.+?)(?<!_)_(?!_)/g, 'em'],\n [/~~(.+?)~~/g, 'del'],\n [/`([^`]+)`/g, 'code']\n ];\n patterns.forEach(([pattern, tag]) => {\n text = text.replace(pattern, `<${tag}${getAttr(tag)}>$1</${tag}>`);\n });\n return text;\n}\n\n/**\n * processTable — line walker for markdown tables\n *\n * Walks through lines looking for runs of pipe-containing lines.\n * Each run is validated (must contain a separator row: |---|---|)\n * and rendered as an HTML <table>. Invalid runs are restored as-is.\n *\n * @param {string} text Full document text\n * @param {Function} getAttr Attribute factory\n * @returns {string} Text with tables rendered\n */\nfunction processTable(text, getAttr) {\n const lines = text.split('\\n');\n const result = [];\n let inTable = false;\n let tableLines = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n\n if (line.includes('|') && (line.startsWith('|') || /[^\\\\|]/.test(line))) {\n if (!inTable) {\n inTable = true;\n tableLines = [];\n }\n tableLines.push(line);\n } else {\n if (inTable) {\n const tableHtml = buildTable(tableLines, getAttr);\n if (tableHtml) {\n result.push(tableHtml);\n } else {\n result.push(...tableLines);\n }\n inTable = false;\n tableLines = [];\n }\n result.push(lines[i]);\n }\n }\n\n // Handle table at end of document\n if (inTable && tableLines.length > 0) {\n const tableHtml = buildTable(tableLines, getAttr);\n if (tableHtml) {\n result.push(tableHtml);\n } else {\n result.push(...tableLines);\n }\n }\n\n return result.join('\\n');\n}\n\n/**\n * buildTable — validate and render a table from accumulated lines\n *\n * @param {string[]} lines Array of pipe-containing lines\n * @param {Function} getAttr Attribute factory\n * @returns {string|null} HTML table string, or null if invalid\n */\nfunction buildTable(lines, getAttr) {\n if (lines.length < 2) return null;\n\n // Find the separator row (---|---|)\n let separatorIndex = -1;\n for (let i = 1; i < lines.length; i++) {\n if (/^\\|?[\\s\\-:|]+\\|?$/.test(lines[i]) && lines[i].includes('-')) {\n separatorIndex = i;\n break;\n }\n }\n if (separatorIndex === -1) return null;\n\n const headerLines = lines.slice(0, separatorIndex);\n const bodyLines = lines.slice(separatorIndex + 1);\n\n // Parse alignment from separator cells (:--- = left, :---: = center, ---: = right)\n const separator = lines[separatorIndex];\n const separatorCells = separator.trim().replace(/^\\|/, '').replace(/\\|$/, '').split('|');\n const alignments = separatorCells.map(cell => {\n const trimmed = cell.trim();\n if (trimmed.startsWith(':') && trimmed.endsWith(':')) return 'center';\n if (trimmed.endsWith(':')) return 'right';\n return 'left';\n });\n\n let html = `<table${getAttr('table')}>\\n`;\n\n // Header\n html += `<thead${getAttr('thead')}>\\n`;\n headerLines.forEach(line => {\n html += `<tr${getAttr('tr')}>\\n`;\n const cells = line.trim().replace(/^\\|/, '').replace(/\\|$/, '').split('|');\n cells.forEach((cell, i) => {\n const alignStyle = alignments[i] && alignments[i] !== 'left' ? `text-align:${alignments[i]}` : '';\n const processedCell = processInlineMarkdown(cell.trim(), getAttr);\n html += `<th${getAttr('th', alignStyle)}>${processedCell}</th>\\n`;\n });\n html += '</tr>\\n';\n });\n html += '</thead>\\n';\n\n // Body\n if (bodyLines.length > 0) {\n html += `<tbody${getAttr('tbody')}>\\n`;\n bodyLines.forEach(line => {\n html += `<tr${getAttr('tr')}>\\n`;\n const cells = line.trim().replace(/^\\|/, '').replace(/\\|$/, '').split('|');\n cells.forEach((cell, i) => {\n const alignStyle = alignments[i] && alignments[i] !== 'left' ? `text-align:${alignments[i]}` : '';\n const processedCell = processInlineMarkdown(cell.trim(), getAttr);\n html += `<td${getAttr('td', alignStyle)}>${processedCell}</td>\\n`;\n });\n html += '</tr>\\n';\n });\n html += '</tbody>\\n';\n }\n\n html += '</table>';\n return html;\n}\n\n// ════════════════════════════════════════════════════════════════════\n// List processing (line walker)\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * processLists — line walker for ordered, unordered, and task lists\n *\n * Scans each line for list markers (-, *, +, 1., 2., etc.) with\n * optional leading indentation for nesting. Non-list lines close\n * any open lists and pass through unchanged.\n *\n * Task lists (- [ ] / - [x]) are detected and rendered with\n * checkbox inputs.\n *\n * @param {string} text Full document text\n * @param {Function} getAttr Attribute factory\n * @param {boolean} inline_styles Whether to use inline styles\n * @param {boolean} bidirectional Whether to add data-qd markers\n * @returns {string} Text with lists rendered\n */\nfunction processLists(text, getAttr, inline_styles, bidirectional) {\n const lines = text.split('\\n');\n const result = [];\n const listStack = []; // tracks nesting: [{type:'ul', level:0}, …]\n\n // Helper to escape HTML for data-qd attributes. List markers (`-`, `*`,\n // `+`, `1.`, etc.) never contain HTML-special chars, so the replace\n // callback is defensive-only and never actually fires in practice.\n /* istanbul ignore next - defensive: list markers never trigger escaping */\n const escapeHtml = (text) => text.replace(/[&<>\"']/g,\n /* istanbul ignore next - defensive: list markers never contain HTML specials */\n m => ({'&':'&','<':'<','>':'>','\"':'"',\"'\":'''})[m]);\n /* istanbul ignore next - trivial no-op fallback; not exercised via bd bundle */\n const dataQd = bidirectional ? (marker) => ` data-qd=\"${escapeHtml(marker)}\"` : () => '';\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const match = line.match(/^(\\s*)([*\\-+]|\\d+\\.)\\s+(.+)$/);\n\n if (match) {\n const [, indent, marker, content] = match;\n const level = Math.floor(indent.length / 2);\n const isOrdered = /^\\d+\\./.test(marker);\n const listType = isOrdered ? 'ol' : 'ul';\n\n // Task list detection (only in unordered lists)\n let listItemContent = content;\n let taskListClass = '';\n const taskMatch = content.match(/^\\[([x ])\\]\\s+(.*)$/i);\n if (taskMatch && !isOrdered) {\n const [, checked, taskContent] = taskMatch;\n const isChecked = checked.toLowerCase() === 'x';\n const checkboxAttr = inline_styles\n ? ' style=\"margin-right:.5em\"'\n : ` class=\"${CLASS_PREFIX}task-checkbox\"`;\n listItemContent = `<input type=\"checkbox\"${checkboxAttr}${isChecked ? ' checked' : ''} disabled> ${taskContent}`;\n taskListClass = inline_styles ? ' style=\"list-style:none\"' : ` class=\"${CLASS_PREFIX}task-item\"`;\n }\n\n // Close deeper nesting levels\n while (listStack.length > level + 1) {\n const list = listStack.pop();\n result.push(`</${list.type}>`);\n }\n\n // Open new list or switch type at current level\n if (listStack.length === level) {\n listStack.push({ type: listType, level });\n result.push(`<${listType}${getAttr(listType)}>`);\n } else if (listStack.length === level + 1) {\n const currentList = listStack[listStack.length - 1];\n if (currentList.type !== listType) {\n result.push(`</${currentList.type}>`);\n listStack.pop();\n listStack.push({ type: listType, level });\n result.push(`<${listType}${getAttr(listType)}>`);\n }\n }\n\n const liAttr = taskListClass || getAttr('li');\n result.push(`<li${liAttr}${dataQd(marker)}>${listItemContent}</li>`);\n } else {\n // Not a list item — close all open lists\n while (listStack.length > 0) {\n const list = listStack.pop();\n result.push(`</${list.type}>`);\n }\n result.push(line);\n }\n }\n\n // Close any remaining open lists\n while (listStack.length > 0) {\n const list = listStack.pop();\n result.push(`</${list.type}>`);\n }\n\n return result.join('\\n');\n}\n\n// ════════════════════════════════════════════════════════════════════\n// Static API\n// ════════════════════════════════════════════════════════════════════\n\n/**\n * Emit CSS rules for all quikdown elements.\n *\n * @param {string} prefix Class prefix (default: 'quikdown-')\n * @param {string} theme 'light' (default) or 'dark'\n * @returns {string} CSS text\n */\nquikdown.emitStyles = function(prefix = 'quikdown-', theme = 'light') {\n const styles = QUIKDOWN_STYLES;\n\n const themeOverrides = {\n dark: {\n '#f4f4f4': '#2a2a2a', // pre background\n '#f0f0f0': '#2a2a2a', // code background\n '#f2f2f2': '#2a2a2a', // th background\n '#ddd': '#3a3a3a', // borders\n '#06c': '#6db3f2', // links\n _textColor: '#e0e0e0'\n },\n light: {\n _textColor: '#333'\n }\n };\n\n let css = '';\n for (const [tag, style] of Object.entries(styles)) {\n let themedStyle = style;\n\n if (theme === 'dark' && themeOverrides.dark) {\n for (const [oldColor, newColor] of Object.entries(themeOverrides.dark)) {\n if (!oldColor.startsWith('_')) {\n themedStyle = themedStyle.replaceAll(oldColor, newColor);\n }\n }\n const needsTextColor = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'td', 'li', 'blockquote'];\n if (needsTextColor.includes(tag)) {\n themedStyle += `;color:${themeOverrides.dark._textColor}`;\n }\n } else if (theme === 'light' && themeOverrides.light) {\n const needsTextColor = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'td', 'li', 'blockquote'];\n if (needsTextColor.includes(tag)) {\n themedStyle += `;color:${themeOverrides.light._textColor}`;\n }\n }\n\n css += `.${prefix}${tag} { ${themedStyle} }\\n`;\n }\n\n return css;\n};\n\n/**\n * Create a pre-configured parser with baked-in options.\n *\n * @param {Object} options Options to bake in\n * @returns {Function} Configured quikdown(markdown) function\n */\nquikdown.configure = function(options) {\n return function(markdown) {\n return quikdown(markdown, options);\n };\n};\n\n/** Semantic version (injected at build time) */\nquikdown.version = quikdownVersion;\n\n\n// ════════════════════════════════════════════════════════════════════\n// Exports\n// ════════════════════════════════════════════════════════════════════\n\n/* istanbul ignore next */\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = quikdown;\n}\n\n/* istanbul ignore next */\nif (typeof window !== 'undefined') {\n window.quikdown = quikdown;\n}\n\nexport { quikdown as default };\n","import quikchat from './quikchat.js';\nimport quikdown from 'quikdown';\n\n// Subclass that pre-wires quikdown as the message formatter\nclass quikchatMD extends quikchat {\n constructor(parentElement, onSend, options = {}) {\n if (!options.messageFormatter) {\n options.messageFormatter = (content) => quikdown(content);\n }\n super(parentElement, onSend, options);\n }\n}\n\n// Expose quikdown on the class for direct access\nquikchatMD.quikdown = quikdown;\n\nexport default quikchatMD;\n"],"names":["quikchat","parentElement","onSend","arguments","length","undefined","options","_classCallCheck","defaultOpts","theme","trackHistory","showTimestamps","titleArea","title","show","align","messagesArea","alternating","meta","_objectSpread","document","querySelector","_parentElement","_theme","_onSend","_messageFormatter","messageFormatter","_sanitize","sanitize","_createWidget","titleAreaSetContents","titleAreaShow","titleAreaHide","messagesAreaAlternateColors","messagesAreaShowTimestamps","direction","setDirection","_attachEventListeners","_historyLimit","_history","_createClass","key","value","widgetHTML","concat","innerHTML","_chatWidget","_titleArea","_messagesWrapper","_messagesArea","_scrollBottomBtn","_inputArea","_textEntry","_sendButton","msgid","_this","addEventListener","text","trim","event","shiftKey","keyCode","preventDefault","_autoGrowTextarea","_this$_messagesArea","scrollTop","scrollHeight","clientHeight","userScrolledUp","_updateScrollBottomBtn","scrollToBottom","ctrlKey","ResizeObserver","_resizeObserver","_handleContainerResize","observe","setCallbackOnSend","callback","setCallbackonMessageAdded","_onMessageAdded","setCallbackonMessageAppend","_onMessageAppend","setCallbackonMessageReplace","_onMessageReplace","setCallbackonMessageDelete","_onMessageDelete","titleAreaToggle","style","display","textAlign","titleAreaGetContents","inputAreaToggle","inputAreaShow","inputAreaHide","inputAreaSetEnabled","enabled","disabled","inputAreaSetButtonText","textContent","inputAreaGetButtonText","dir","d","setAttribute","classList","add","remove","getDirection","getAttribute","el","height","maxHeight","Math","min","overflowY","_formatTimestamp","isoString","Date","h","getHours","m","String","getMinutes","padStart","ampm","h12","messagesAreaShowTimestampsGet","contains","messagesAreaShowTimestampsToggle","toggle","_escapeHTML","str","div","createElement","_processContent","content","alt","messagesAreaAlternateColorsToggle","messagesAreaAlternateColorsGet","messageAddFull","input","userString","role","userID","messageDiv","msgidClass","children","visible","tags","Array","isArray","slice","userDiv","contentDiv","timestamp","toISOString","timestampSpan","appendChild","updatedtime","push","shift","messageAddNew","messageRemove","n","success","removeChild","_error","splice","findIndex","item","messageGetDOMObject","msg","messageGetContent","filter","messageSetVisible","msgEl","find","entry","messageGetVisible","messageToggleVisible","current","messageSetVisibleByTag","tag","count","_iterator","_createForOfIteratorHelper","_step","s","done","includes","err","e","f","messageGetTags","messageSetTags","messageAppendContent","messageReplaceContent","messageAddTypingIndicator","setMessageFormatter","formatter","setSanitize","historyGet","historyClear","historyGetLength","historyGetMessage","historyGetMessageContent","historyExport","map","historyImport","data","_iterator2","_step2","changeTheme","newTheme","get","version","loremIpsum","numChars","startSpot","startWithCapitalLetter","loremText","floor","random","test","l","substring","toUpperCase","quikchatMD","_quikchat","quikdown","_callSuper","_inherits"],"mappings":"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","x_google_ignoreList":[1]}
|