@visma-swno/gaia-chat-ui 0.0.4
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/CHANGELOG.md +0 -0
- package/README.md +1 -0
- package/dist/components/avatar/avatar.d.ts +13 -0
- package/dist/components/avatar/avatar.d.ts.map +1 -0
- package/dist/components/avatar/avatar.styles.d.ts +2 -0
- package/dist/components/avatar/avatar.styles.d.ts.map +1 -0
- package/dist/components/base.d.ts +7 -0
- package/dist/components/base.d.ts.map +1 -0
- package/dist/components/button/button.d.ts +11 -0
- package/dist/components/button/button.d.ts.map +1 -0
- package/dist/components/button/button.styles.d.ts +2 -0
- package/dist/components/button/button.styles.d.ts.map +1 -0
- package/dist/components/card/card-content.d.ts +6 -0
- package/dist/components/card/card-content.d.ts.map +1 -0
- package/dist/components/card/card-content.styles.d.ts +2 -0
- package/dist/components/card/card-content.styles.d.ts.map +1 -0
- package/dist/components/card/card-footer.d.ts +6 -0
- package/dist/components/card/card-footer.d.ts.map +1 -0
- package/dist/components/card/card-footer.styles.d.ts +2 -0
- package/dist/components/card/card-footer.styles.d.ts.map +1 -0
- package/dist/components/card/card-header.d.ts +7 -0
- package/dist/components/card/card-header.d.ts.map +1 -0
- package/dist/components/card/card-header.styles.d.ts +2 -0
- package/dist/components/card/card-header.styles.d.ts.map +1 -0
- package/dist/components/card/card.d.ts +6 -0
- package/dist/components/card/card.d.ts.map +1 -0
- package/dist/components/card/card.styles.d.ts +2 -0
- package/dist/components/card/card.styles.d.ts.map +1 -0
- package/dist/components/chat/chat.d.ts +28 -0
- package/dist/components/chat/chat.d.ts.map +1 -0
- package/dist/components/chat/chat.styles.d.ts +2 -0
- package/dist/components/chat/chat.styles.d.ts.map +1 -0
- package/dist/components/chat-input/chat-input.d.ts +16 -0
- package/dist/components/chat-input/chat-input.d.ts.map +1 -0
- package/dist/components/chat-input/chat-input.styles.d.ts +2 -0
- package/dist/components/chat-input/chat-input.styles.d.ts.map +1 -0
- package/dist/components/chat-message/chat-message.d.ts +19 -0
- package/dist/components/chat-message/chat-message.d.ts.map +1 -0
- package/dist/components/chat-message/chat-message.styles.d.ts +2 -0
- package/dist/components/chat-message/chat-message.styles.d.ts.map +1 -0
- package/dist/components/chat-message/chat-message.utils.d.ts +2 -0
- package/dist/components/chat-message/chat-message.utils.d.ts.map +1 -0
- package/dist/components/chat-message/markdown.styles.d.ts +2 -0
- package/dist/components/chat-message/markdown.styles.d.ts.map +1 -0
- package/dist/components/index.d.ts +16 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/loader/loader.d.ts +10 -0
- package/dist/components/loader/loader.d.ts.map +1 -0
- package/dist/components/loader/loader.styles.d.ts +2 -0
- package/dist/components/loader/loader.styles.d.ts.map +1 -0
- package/dist/components/menu/menu-item.d.ts +11 -0
- package/dist/components/menu/menu-item.d.ts.map +1 -0
- package/dist/components/menu/menu-item.styles.d.ts +2 -0
- package/dist/components/menu/menu-item.styles.d.ts.map +1 -0
- package/dist/components/menu/menu.d.ts +11 -0
- package/dist/components/menu/menu.d.ts.map +1 -0
- package/dist/components/menu/menu.styles.d.ts +2 -0
- package/dist/components/menu/menu.styles.d.ts.map +1 -0
- package/dist/components/popover/popover.d.ts +18 -0
- package/dist/components/popover/popover.d.ts.map +1 -0
- package/dist/components/popover/popover.styles.d.ts +2 -0
- package/dist/components/popover/popover.styles.d.ts.map +1 -0
- package/dist/components/spacing/spacing.d.ts +7 -0
- package/dist/components/spacing/spacing.d.ts.map +1 -0
- package/dist/components/spacing/spacing.styles.d.ts +2 -0
- package/dist/components/spacing/spacing.styles.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip.d.ts +16 -0
- package/dist/components/tooltip/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip.styles.d.ts +2 -0
- package/dist/components/tooltip/tooltip.styles.d.ts.map +1 -0
- package/dist/config/constants.d.ts +51 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/constants/icon-map.d.ts +3 -0
- package/dist/constants/icon-map.d.ts.map +1 -0
- package/dist/controllers/chat-controller.d.ts +22 -0
- package/dist/controllers/chat-controller.d.ts.map +1 -0
- package/dist/controllers/support-controller.d.ts +36 -0
- package/dist/controllers/support-controller.d.ts.map +1 -0
- package/dist/gaia-chat-ui.es.js +5403 -0
- package/dist/gaia-chat-ui.es.js.map +1 -0
- package/dist/gaia-chat-ui.umd.js +2313 -0
- package/dist/gaia-chat-ui.umd.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/services/base-service.d.ts +21 -0
- package/dist/services/base-service.d.ts.map +1 -0
- package/dist/services/chat-service.d.ts +14 -0
- package/dist/services/chat-service.d.ts.map +1 -0
- package/dist/services/chat-service.dto.d.ts +12 -0
- package/dist/services/chat-service.dto.d.ts.map +1 -0
- package/dist/services/liveleader-service.d.ts +10 -0
- package/dist/services/liveleader-service.d.ts.map +1 -0
- package/dist/services/liveleader-service.dto.d.ts +109 -0
- package/dist/services/liveleader-service.dto.d.ts.map +1 -0
- package/dist/services/websocket-manager.d.ts +38 -0
- package/dist/services/websocket-manager.d.ts.map +1 -0
- package/dist/styles.d.ts +2 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/types/events.d.ts +9 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/icons.d.ts +2 -0
- package/dist/types/icons.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/interfaces/chat-controller-host.d.ts +9 -0
- package/dist/types/interfaces/chat-controller-host.d.ts.map +1 -0
- package/dist/types/models/chat-message.d.ts +75 -0
- package/dist/types/models/chat-message.d.ts.map +1 -0
- package/dist/types/models/conversation.d.ts +6 -0
- package/dist/types/models/conversation.d.ts.map +1 -0
- package/dist/types/server-sent-events.d.ts +29 -0
- package/dist/types/server-sent-events.d.ts.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +27 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/object.d.ts +3 -0
- package/dist/utils/object.d.ts.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaia-chat-ui.es.js","sources":["../src/components/avatar/avatar.styles.ts","../src/components/avatar/avatar.ts","../node_modules/classnames/index.js","../node_modules/lucide-static/dist/esm/icons/arrow-up-right.js","../node_modules/lucide-static/dist/esm/icons/arrow-up.js","../node_modules/lucide-static/dist/esm/icons/copy.js","../node_modules/lucide-static/dist/esm/icons/ellipsis.js","../node_modules/lucide-static/dist/esm/icons/info.js","../node_modules/lucide-static/dist/esm/icons/pin.js","../node_modules/lucide-static/dist/esm/icons/refresh-cw.js","../node_modules/lucide-static/dist/esm/icons/shield.js","../node_modules/lucide-static/dist/esm/icons/square-arrow-out-up-right.js","../node_modules/lucide-static/dist/esm/icons/square-pen.js","../node_modules/lucide-static/dist/esm/icons/text.js","../node_modules/lucide-static/dist/esm/icons/thumbs-down.js","../node_modules/lucide-static/dist/esm/icons/thumbs-up.js","../node_modules/lucide-static/dist/esm/icons/trash-2.js","../src/constants/icon-map.ts","../src/components/button/button.styles.ts","../src/components/button/button.ts","../src/components/card/card.styles.ts","../src/components/card/card.ts","../src/components/card/card-content.styles.ts","../src/components/card/card-content.ts","../src/components/card/card-footer.styles.ts","../src/components/card/card-footer.ts","../src/components/card/card-header.styles.ts","../src/components/card/card-header.ts","../src/components/chat-input/chat-input.styles.ts","../src/components/chat-input/chat-input.ts","../node_modules/marked/lib/marked.esm.js","../src/types/events.ts","../src/types/models/chat-message.ts","../src/components/chat-message/chat-message.styles.ts","../src/components/chat-message/markdown.styles.ts","../src/components/chat-message/chat-message.ts","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../src/config/constants.ts","../src/utils/logger.ts","../src/services/base-service.ts","../src/services/chat-service.ts","../src/utils/object.ts","../src/controllers/chat-controller.ts","../src/services/liveleader-service.ts","../src/services/websocket-manager.ts","../src/controllers/support-controller.ts","../src/styles.ts","../src/components/base.ts","../src/components/chat/chat.styles.ts","../src/components/chat/chat.ts","../src/components/loader/loader.styles.ts","../src/components/loader/loader.ts","../src/components/menu/menu.styles.ts","../src/components/menu/menu.ts","../src/components/menu/menu-item.styles.ts","../src/components/menu/menu-item.ts","../src/components/popover/popover.styles.ts","../src/components/popover/popover.ts","../src/components/spacing/spacing.styles.ts","../src/components/spacing/spacing.ts","../src/components/tooltip/tooltip.styles.ts","../src/components/tooltip/tooltip.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const avatarStyles = css`\n :host {\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n aspect-ratio: 1 / 1;\n overflow: hidden;\n }\n\n :host([size='xs']) {\n width: var(--size-16);\n height: var(--size-16);\n font-weight: var(--font-weight-medium);\n font-size: var(--font-size-xs);\n line-height: var(--lineheight-xs);\n letter-spacing: var(--tracking-xs);\n }\n\n :host([size='sm']) {\n width: var(--size-24);\n height: var(--size-24);\n font-weight: var(--font-weight-bold);\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n }\n\n :host([size='md']) {\n width: var(--size-40);\n height: var(--size-40);\n font-weight: var(--font-weight-bold);\n font-size: var(--font-size-lg);\n line-height: var(--lineheight-lg);\n letter-spacing: var(--tracking-lg);\n }\n\n :host([size='lg']) {\n width: var(--size-64);\n height: var(--size-64);\n font-weight: var(--font-weight-bold);\n font-size: var(--font-size-2xl);\n line-height: var(--lineheight-2xl);\n letter-spacing: var(--tracking-2xl);\n }\n\n .avatar {\n position: relative;\n display: inline-flex;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n border: var(--border-width-sm) solid var(--border-disabled);\n background-color: var(--surface-disabled);\n overflow: hidden;\n }\n\n .avatar > img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n border-radius: 50%;\n }\n\n .avatar__overlay {\n position: absolute;\n inset: 0;\n background: #13344540;\n pointer-events: none;\n opacity: 0;\n z-index: 1;\n }\n\n :host(:not([disabled])) .avatar,\n :host(:not([disabled])) .avatar__overlay {\n transition-property:\n color, background-color, border-color, text-decoration-color, opacity, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n }\n\n :host([disabled]) .avatar > img {\n filter: saturate(0%);\n }\n\n :host([disabled]) .avatar__overlay {\n background: #ffffffb2;\n opacity: 1;\n }\n\n .avatar:has(.avatar__initials) {\n background-color: var(--surface-primary);\n border-color: var(--border-primary);\n }\n\n :host(:not([disabled])) .avatar:hover {\n cursor: pointer;\n }\n\n :host(:not([disabled])) .avatar:hover:has(.avatar__initials) {\n background-color: var(--surface-action-hover-2);\n border-color: var(--border-action-hover);\n color: var(--text-action);\n }\n\n :host([disabled]) .avatar:has(.avatar__initials) {\n background-color: var(--surface-disabled);\n border-color: var(--border-disabled);\n color: var(--text-on-disabled);\n }\n\n :host(:not([disabled])) .avatar:hover:has(.avatar__image) .avatar__overlay {\n opacity: 1;\n }\n\n .avatar__status-container {\n position: absolute;\n box-sizing: border-box;\n bottom: -1px;\n right: -1px;\n aspect-ratio: 1 / 1;\n border-radius: 50%;\n background-color: var(--surface-primary);\n z-index: 2;\n border: var(--border-width-sm) solid var(--surface-primary);\n }\n\n :host([size='xs']) .avatar__status-container {\n visibility: hidden;\n opacity: 0;\n }\n\n :host([size='sm']) .avatar__status-container {\n width: 14px;\n height: 14px;\n }\n\n :host([size='md']) .avatar__status-container {\n width: 20px;\n height: 20px;\n padding: 2px;\n }\n\n :host([size='lg']) .avatar__status-container {\n width: 30px;\n height: 30px;\n padding: 2px;\n }\n\n .avatar__status-icon {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: inherit;\n background-color: var(--icon-success);\n border: var(--border-width-sm) solid var(--surface-primary);\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { avatarStyles } from './avatar.styles';\n\n@customElement('gaia-avatar')\nexport class Avatar extends LitElement {\n static styles = [avatarStyles];\n\n @property({ type: String, attribute: 'size', reflect: true })\n size: 'xs' | 'sm' | 'md' | 'lg' = 'md';\n\n @property({ type: Boolean, attribute: 'disabled', reflect: true })\n disabled: boolean = false;\n\n @property({ type: String, attribute: 'status', reflect: true })\n status: 'active' | 'away' | 'offline' | undefined = undefined;\n\n @property({ type: String, attribute: 'src' })\n src: string | undefined = undefined;\n\n @property({ type: String, attribute: 'initials' })\n initials: string | undefined = undefined;\n\n @property({ type: String, attribute: 'fallback' })\n fallback: string = 'https://github.com/shadcn.png';\n\n private _renderAvatar() {\n if (this.src) {\n return html`<img class=\"avatar__image\" src=${this.src} alt=\"Avatar\" />\n <div class=\"avatar__overlay\"></div>`;\n }\n\n if (this.initials) {\n return html`<div class=\"avatar__initials\">\n ${this.initials.substring(0, 2).toUpperCase()}\n </div>`;\n }\n\n return html`<img class=\"avatar__image\" src=${this.fallback} alt=\"Avatar\" />\n <div class=\"avatar__overlay\"></div>`;\n }\n render() {\n return html`\n <div class=\"avatar\">${this._renderAvatar()}</div>\n ${this.status\n ? html`<div class=\"avatar__status-container\">\n <div class=\"avatar__status-icon\"></div>\n </div>`\n : ''}\n `;\n }\n}\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst ArrowUpRight = `\n<svg\n class=\"lucide lucide-arrow-up-right\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path d=\"M7 7h10v10\" />\n <path d=\"M7 17 17 7\" />\n</svg>\n`;\n\nexport { ArrowUpRight as default };\n//# sourceMappingURL=arrow-up-right.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst ArrowUp = `\n<svg\n class=\"lucide lucide-arrow-up\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n</svg>\n`;\n\nexport { ArrowUp as default };\n//# sourceMappingURL=arrow-up.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst Copy = `\n<svg\n class=\"lucide lucide-copy\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n</svg>\n`;\n\nexport { Copy as default };\n//# sourceMappingURL=copy.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst Ellipsis = `\n<svg\n class=\"lucide lucide-ellipsis\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n</svg>\n`;\n\nexport { Ellipsis as default };\n//# sourceMappingURL=ellipsis.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst Info = `\n<svg\n class=\"lucide lucide-info\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n</svg>\n`;\n\nexport { Info as default };\n//# sourceMappingURL=info.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst Pin = `\n<svg\n class=\"lucide lucide-pin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path d=\"M12 17v5\" />\n <path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z\" />\n</svg>\n`;\n\nexport { Pin as default };\n//# sourceMappingURL=pin.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst RefreshCw = `\n<svg\n class=\"lucide lucide-refresh-cw\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n</svg>\n`;\n\nexport { RefreshCw as default };\n//# sourceMappingURL=refresh-cw.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst Shield = `\n<svg\n class=\"lucide lucide-shield\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n</svg>\n`;\n\nexport { Shield as default };\n//# sourceMappingURL=shield.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst SquareArrowOutUpRight = `\n<svg\n class=\"lucide lucide-square-arrow-out-up-right\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path d=\"M21 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h6\" />\n <path d=\"m21 3-9 9\" />\n <path d=\"M15 3h6v6\" />\n</svg>\n`;\n\nexport { SquareArrowOutUpRight as default };\n//# sourceMappingURL=square-arrow-out-up-right.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst SquarePen = `\n<svg\n class=\"lucide lucide-square-pen\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\" />\n</svg>\n`;\n\nexport { SquarePen as default };\n//# sourceMappingURL=square-pen.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst Text = `\n<svg\n class=\"lucide lucide-text\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path d=\"M15 18H3\" />\n <path d=\"M17 6H3\" />\n <path d=\"M21 12H3\" />\n</svg>\n`;\n\nexport { Text as default };\n//# sourceMappingURL=text.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst ThumbsDown = `\n<svg\n class=\"lucide lucide-thumbs-down\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n</svg>\n`;\n\nexport { ThumbsDown as default };\n//# sourceMappingURL=thumbs-down.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst ThumbsUp = `\n<svg\n class=\"lucide lucide-thumbs-up\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n</svg>\n`;\n\nexport { ThumbsUp as default };\n//# sourceMappingURL=thumbs-up.js.map\n","/**\n * @license lucide-static v0.510.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst Trash2 = `\n<svg\n class=\"lucide lucide-trash-2\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n <line x1=\"10\" x2=\"10\" y1=\"11\" y2=\"17\" />\n <line x1=\"14\" x2=\"14\" y1=\"11\" y2=\"17\" />\n</svg>\n`;\n\nexport { Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","import {\n ArrowUp,\n ArrowUpRight,\n Copy,\n Ellipsis,\n Info,\n Pin,\n RefreshCw,\n Shield,\n SquareArrowOutUpRight,\n SquarePen,\n Text,\n ThumbsDown,\n ThumbsUp,\n Trash2,\n} from 'lucide-static';\n\nimport { Icon } from '@/types/icons';\n\nexport const ICON_MAP: Record<Icon, string> = {\n 'arrow-up': ArrowUp,\n 'arrow-up-right': ArrowUpRight,\n copy: Copy,\n ellipsis: Ellipsis,\n info: Info,\n pin: Pin,\n 'refresh-cw': RefreshCw,\n shield: Shield,\n 'square-arrow-out-up-right': SquareArrowOutUpRight,\n 'square-pen': SquarePen,\n text: Text,\n 'thumbs-down': ThumbsDown,\n 'thumbs-up': ThumbsUp,\n 'trash-2': Trash2,\n};\n","import { css } from 'lit';\n\nexport const buttonStyles = css`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n }\n\n button {\n display: inline-flex;\n box-sizing: border-box;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n gap: var(--size-8);\n white-space: nowrap;\n background: none;\n border: 1px solid transparent;\n border-radius: var(--radius-default);\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n font-weight: var(--font-weight-medium);\n line-height: var(--lineheight-lg);\n }\n\n button:not(:disabled) {\n cursor: pointer;\n }\n\n button:focus-visible {\n outline-color: var(--border-focus);\n outline-width: var(--border-width-md);\n outline-style: solid;\n outline-offset: var(--size-2);\n }\n\n svg {\n display: block;\n flex-shrink: 0;\n fill: none;\n stroke: currentColor;\n pointer-events: none;\n width: var(--size-24);\n height: var(--size-24);\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n\n .btn--default {\n height: var(--size-40);\n padding: var(--size-8) var(--size-16);\n }\n\n .btn--icon {\n height: var(--size-40);\n width: var(--size-40);\n }\n\n .btn--icon-sm {\n height: var(--size-24);\n width: var(--size-24);\n }\n\n .btn--icon-sm > svg {\n width: var(--size-16);\n height: var(--size-16);\n }\n\n .btn--icon > .btn__text,\n .btn--icon-sm > .btn__text {\n display: none;\n }\n\n .btn--primary {\n background-color: var(--surface-action);\n color: var(--text-on-action);\n }\n\n .btn--primary > svg {\n color: var(--icon-on-action);\n }\n\n .btn--primary:hover {\n background-color: var(--surface-action-hover);\n }\n\n .btn--primary:disabled {\n background-color: var(--surface-disabled);\n color: var(--text-disable-selected);\n }\n\n .btn--primary:disabled > svg {\n color: var(--icon-on-disabled);\n }\n\n .btn--secondary {\n background-color: var(--surface-primary);\n color: var(--text-action);\n border-color: var(--border-action);\n }\n\n .btn--secondary > svg {\n color: var(--icon-action);\n }\n\n .btn--secondary:hover {\n background-color: var(--surface-action-hover-2);\n color: var(--text-action-hover);\n }\n\n .btn--secondary:hover > svg {\n color: var(--icon-action-hover);\n }\n\n .btn--secondary:disabled {\n background-color: var(--surface-page);\n color: var(--text-disabled);\n border-color: var(--border-disabled);\n }\n\n .btn--secondary:disabled > svg {\n color: var(--icon-on-disabled);\n }\n\n .btn--ghost {\n color: var(--text-action);\n }\n\n .btn--ghost > svg {\n color: var(--icon-action);\n }\n\n .btn--ghost:hover {\n color: var(--text-action-hover);\n }\n\n .btn--ghost:hover > svg {\n color: var(--icon-action-hover);\n }\n\n .btn--ghost:disabled {\n color: var(--text-disabled);\n }\n\n .btn--ghost:disabled > svg {\n color: var(--icon-disabled);\n }\n`;\n","import classnames from 'classnames';\nimport { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\n\nimport { ICON_MAP } from '@/constants/icon-map';\nimport { Icon } from '@/types/icons';\n\nimport { buttonStyles } from './button.styles';\n\n@customElement('gaia-button')\nexport class Button extends LitElement {\n static styles = [buttonStyles];\n\n @property({ type: String })\n variant: 'primary' | 'secondary' | 'ghost' = 'primary';\n\n @property({ type: String })\n size: 'default' | 'icon' | 'icon-sm' = 'default';\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @property({ type: String })\n icon: Icon | undefined = undefined;\n\n render() {\n return html`\n <button\n ?disabled=${this.disabled}\n class=${classnames({\n 'btn--primary': this.variant === 'primary',\n 'btn--secondary': this.variant === 'secondary',\n 'btn--ghost': this.variant === 'ghost',\n 'btn--default': this.size === 'default',\n 'btn--icon': this.size === 'icon',\n 'btn--icon-sm': this.size === 'icon-sm',\n })}\n >\n ${this.icon ? unsafeSVG(ICON_MAP[this.icon]) : ''}\n <slot class=\"btn__text\"></slot>\n </button>\n `;\n }\n}\n","import { css } from 'lit';\n\nexport const cardStyles = css`\n .card {\n height: 100%;\n max-height: 100vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\nimport { cardStyles } from './card.styles';\n\n@customElement('gaia-card')\nexport class Card extends LitElement {\n static styles = [cardStyles];\n\n render() {\n return html`\n <div class=\"card\">\n <slot></slot>\n </div>\n `;\n }\n}\n","import { css } from 'lit';\n\nexport const cardContentStyles = css`\n :host {\n overflow: hidden;\n display: flex;\n flex: 1 0 0;\n padding: var(--size-8) var(--size-4);\n background-color: var(--surface-primary);\n }\n\n @supports selector(::-webkit-scrollbar) {\n .scroller::-webkit-scrollbar-thumb {\n background: var(--icon-disabled);\n border-radius: var(--radius-default);\n cursor: pointer;\n }\n .scroller::-webkit-scrollbar-track {\n background: var(--surface-page);\n }\n .scroller::-webkit-scrollbar-thumb:hover {\n background: var(--icon-on-disabled);\n }\n .scroller::-webkit-scrollbar {\n max-width: var(--size-4);\n max-height: var(--size-4);\n }\n }\n\n .scroller {\n width: 100%;\n height: 100%;\n position: relative;\n\n &:has(.content) {\n overflow-y: auto;\n overscroll-behavior: contain;\n }\n\n .content {\n padding-right: var(--size-8);\n *:first-child {\n margin-top: 0;\n }\n *:last-child {\n margin-bottom: 0;\n }\n }\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\nimport { cardContentStyles } from './card-content.styles';\n\n@customElement('gaia-card-content')\nexport class CardContent extends LitElement {\n static styles = [cardContentStyles];\n\n render() {\n return html`\n <div class=\"scroller\">\n <div class=\"content\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n}\n","import { css } from 'lit';\n\nexport const cardFooterStyles = css`\n :host {\n background-color: var(--surface-primary);\n }\n .card-footer {\n display: flex;\n align-items: center;\n padding: var(--size-8) var(--size-16) var(--size-16) var(--size-16);\n border: var(--border-width-none);\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\nimport { cardFooterStyles } from './card-footer.styles';\n\n@customElement('gaia-card-footer')\nexport class CardFooter extends LitElement {\n static styles = [cardFooterStyles];\n\n render() {\n return html`\n <div class=\"card-footer\">\n <slot></slot>\n </div>\n `;\n }\n}\n","import { css } from 'lit';\n\nexport const cardHeaderStyles = css`\n :host {\n box-sizing: border-box;\n background-color: var(--surface-primary);\n }\n\n .card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--size-16);\n border-bottom: var(--border-width-sm) solid var(--color-neutral-20);\n }\n\n .card-header__title {\n color: var(--text-body);\n font-weight: var(--font-weight-bold);\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { cardHeaderStyles } from './card-header.styles';\n\n@customElement('gaia-card-header')\nexport class CardHeader extends LitElement {\n static styles = [cardHeaderStyles];\n\n @property({ type: String })\n title: string = '';\n\n render() {\n return html`\n <div class=\"card-header\">\n <div class=\"card-header__title\">${this.title}</div>\n <div class=\"card-header__actions\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n}\n","import { css } from 'lit';\n\nexport const chatInputStyles = css`\n :host {\n display: flex;\n flex: 1 1 0;\n flex-direction: row;\n justify-content: space-between;\n align-items: flex-end;\n gap: var(--size-8);\n width: 100%;\n border-radius: var(--radius-default);\n padding: var(--size-8);\n background-color: var(--surface-primary);\n border: var(--border-width-sm) solid var(--border-primary);\n overflow: hidden;\n\n --chat-input-height: 24px;\n --chat-input-max-rows: 5;\n }\n\n :host:has(textarea:disabled) {\n background-color: var(--surface-disabled);\n border-color: var(--border-disabled);\n }\n\n :host:has(textarea:focus-visible) {\n outline: var(--border-width-md) solid var(--border-focus);\n }\n\n textarea.chat-input__textarea {\n width: 100%;\n height: var(--chat-input-height);\n max-height: calc(var(--chat-input-height) * var(--chat-input-max-rows));\n padding: 0;\n resize: none;\n border: none;\n outline: none;\n border-radius: 0;\n position: relative;\n font-family: var(--font-family-base);\n font-size: var(--font-size-md);\n line-height: var(--chat-input-height);\n font-weight: var(--font-weight-regular);\n color: var(--text-body);\n background: none;\n }\n\n .chat-input__loader {\n height: var(--size-24);\n width: var(--size-24);\n }\n\n textarea::placeholder {\n color: var(--text-disabled);\n }\n\n textarea:disabled::placeholder {\n color: var(--text-disable-selected);\n }\n\n textarea::-webkit-scrollbar-thumb {\n background: var(--icon-disabled);\n border-radius: var(--radius-default);\n cursor: pointer;\n }\n textarea::-webkit-scrollbar-track {\n background: var(--surface-page);\n }\n textarea::-webkit-scrollbar-thumb:hover {\n background: var(--icon-on-disabled);\n }\n textarea::-webkit-scrollbar {\n max-width: var(--size-4);\n max-height: var(--size-4);\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\n\nimport { chatInputStyles } from './chat-input.styles';\n\n@customElement('gaia-chat-input')\nexport class ChatInput extends LitElement {\n static styles = [chatInputStyles];\n\n @property({ type: Boolean, attribute: false })\n disabled: boolean = false;\n\n @property({ type: Boolean, attribute: false })\n loading: boolean = false;\n\n @state()\n private isButtonDisabled: boolean = true;\n\n @query('textarea.chat-input__textarea')\n private textarea?: HTMLTextAreaElement;\n\n private getChatInputHeight(): number {\n const style = getComputedStyle(this);\n return Number(style.getPropertyValue('--chat-input-height').trim().replace('px', ''));\n }\n\n private getChatInputMaxRows(): number {\n const style = getComputedStyle(this);\n return Number(style.getPropertyValue('--chat-input-max-rows').trim());\n }\n\n private updateTextareaStyles() {\n if (!this.textarea) {\n return;\n }\n\n const height = this.getChatInputHeight();\n const maxHeight = height * this.getChatInputMaxRows();\n if (this.textarea.value === '') {\n this.textarea.style.height = `${height}px`;\n return;\n }\n\n this.isButtonDisabled = this.textarea.value === '';\n this.textarea.style.height = `${this.textarea.scrollHeight}px`;\n if (this.textarea.scrollHeight > maxHeight) {\n this.textarea.style.overflowY = 'auto';\n } else {\n this.textarea.style.overflowY = 'hidden';\n }\n }\n\n private handleInput() {\n this.updateTextareaStyles();\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n this.sendMessage();\n }\n }\n\n private sendMessage() {\n if (!this.textarea || !this.textarea.value) {\n return;\n }\n this.dispatchEvent(new CustomEvent('send-message', { detail: this.textarea.value }));\n this.textarea.value = '';\n this.updateTextareaStyles();\n }\n\n render() {\n return html`\n <textarea\n class=\"chat-input__textarea\"\n name=\"message\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n placeholder=\"Ask anything\"\n rows=\"1\"\n ?disabled=${this.disabled}\n @input=${this.handleInput}\n @keydown=${this.handleKeyDown}\n ></textarea>\n ${this.loading && !this.disabled\n ? html`<gaia-loader class=\"chat-input__loader\" size=\"sm\"></gaia-loader>`\n : html`<gaia-button\n ?disabled=${this.isButtonDisabled || this.disabled}\n class=\"chat-input__button\"\n size=\"icon-sm\"\n icon=\"arrow-up\"\n @click=${this.sendMessage}\n ></gaia-button>`}\n `;\n }\n}\n","/**\n * marked v15.0.11 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n/**\n * Gets the original marked default options.\n */\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\nlet _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\nconst noopTest = { exec: () => null };\nfunction edit(regex, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\nconst other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] /,\n listReplaceTask: /^\\[[ xX]\\] +/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n};\n/**\n * Block-Level Grammar\n */\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit('^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n + ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n/**\n * Normal Block Grammar\n */\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n/**\n * GFM Block Grammar\n */\nconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\nconst blockGfm = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nconst blockPedantic = {\n ...blockNormal,\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n/**\n * Inline-Level Grammar\n */\nconst escape$1 = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = /\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<[^<>]*?>/g;\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\nconst emStrongRDelimAstCore = '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n + '|[^*]+(?=[^*])' // Consume to delim\n + '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n + '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n + '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n + '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n + '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n + '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit('^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n + '|[^_]+(?=[^_])' // Consume to delim\n + '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n + '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n + '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n + '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n + '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit('^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n/**\n * Normal Inline Grammar\n */\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape: escape$1,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n/**\n * Pedantic Inline Grammar\n */\nconst inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n/**\n * GFM Inline Grammar\n */\nconst inlineGfm = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/,\n};\n/**\n * GFM + Line Breaks Inline Grammar\n */\nconst inlineBreaks = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n/**\n * exports\n */\nconst block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\nconst inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\n/**\n * Helpers\n */\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n }\n else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n }\n catch {\n return null;\n }\n return href;\n}\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\')\n escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n }\n else {\n // add space before unescaped |\n return ' |';\n }\n }), cells = row.split(other.splitPipe);\n let i = 0;\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n }\n else {\n while (cells.length < count)\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && true) {\n suffLen++;\n }\n else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n }\n else if (str[i] === b[0]) {\n level++;\n }\n else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n return -1;\n}\n\nfunction outputLink(cap, link, raw, lexer, rules) {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n lexer.state.inLink = true;\n const token = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\nfunction indentCodeCompensation(raw, text, rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n })\n .join('\\n');\n}\n/**\n * Tokenizer\n */\nclass _Tokenizer {\n options;\n rules; // set by the lexer\n lexer; // set by the lexer\n constructor(options) {\n this.options = options || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n }\n else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens = [];\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n }\n else if (!inBlockquote) {\n currentLines.push(lines[i]);\n }\n else {\n break;\n }\n }\n lines = lines.slice(i);\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n }\n else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n }\n else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1).raw.length).split('\\n');\n continue;\n }\n }\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split('\\n', 1)[0].replace(this.rules.other.listReplaceTabs, (t) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n }\n else if (blankLine) {\n indent = cap[1].length + 1;\n }\n else {\n indent = cap[2].search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n }\n else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n }\n else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n }\n else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n // Check for task list items\n if (this.options.gfm) {\n istask = this.rules.other.listIsTask.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(this.rules.other.listReplaceTask, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: [],\n });\n list.raw += raw;\n }\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n }\n else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n list.loose = hasMultipleLineBreaks;\n }\n }\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n const item = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n }\n else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n }\n else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n }\n else {\n item.align.push(null);\n }\n }\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n }\n else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n }\n else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n }\n else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n }\n else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n }\n else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match)\n return;\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric))\n return;\n const nextChar = match[1] || match[2] || '';\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim)\n continue; // skip single * in __abc*abc__\n rLength = [...rDelim].length;\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0)\n continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2]),\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n }\n else {\n text = cap[1];\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n }\n else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n }\n else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n\n/**\n * Block Lexer\n */\nclass _Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options) {\n // TokenList cannot be created in one go\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n }\n else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n }\n else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new _Lexer(options);\n return lexer.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new _Lexer(options);\n return lexer.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src.replace(other.carriageReturn, '\\n');\n this.blockTokens(src, this.tokens);\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n return this.tokens;\n }\n blockTokens(src, tokens = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n while (src) {\n let token;\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1).src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1).src = lastToken.text;\n }\n else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n }\n continue;\n }\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match = null;\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n let keepPrevChar = false;\n let prevChar = '';\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n let token;\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n}\n\n/**\n * Renderer\n */\nclass _Renderer {\n options;\n parser; // set by the parser\n constructor(options) {\n this.options = options || _defaults;\n }\n space(token) {\n return '';\n }\n code({ text, lang, escaped }) {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n const code = text.replace(other.endingNewline, '') + '\\n';\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n';\n }\n return '<pre><code class=\"language-'\n + escape(langString)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n';\n }\n blockquote({ tokens }) {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n`;\n }\n html({ text }) {\n return text;\n }\n heading({ tokens, depth }) {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n`;\n }\n hr(token) {\n return '<hr>\\n';\n }\n list(token) {\n const ordered = token.ordered;\n const start = token.start;\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n';\n }\n listitem(item) {\n let itemBody = '';\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens[0]?.type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + escape(item.tokens[0].tokens[0].text);\n item.tokens[0].tokens[0].escaped = true;\n }\n }\n else {\n item.tokens.unshift({\n type: 'text',\n raw: checkbox + ' ',\n text: checkbox + ' ',\n escaped: true,\n });\n }\n }\n else {\n itemBody += checkbox + ' ';\n }\n }\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n return `<li>${itemBody}</li>\\n`;\n }\n checkbox({ checked }) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\">';\n }\n paragraph({ tokens }) {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n`;\n }\n table(token) {\n let header = '';\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell });\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n body += this.tablerow({ text: cell });\n }\n if (body)\n body = `<tbody>${body}</tbody>`;\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n tablerow({ text }) {\n return `<tr>\\n${text}</tr>\\n`;\n }\n tablecell(token) {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n`;\n }\n /**\n * span level renderer\n */\n strong({ tokens }) {\n return `<strong>${this.parser.parseInline(tokens)}</strong>`;\n }\n em({ tokens }) {\n return `<em>${this.parser.parseInline(tokens)}</em>`;\n }\n codespan({ text }) {\n return `<code>${escape(text, true)}</code>`;\n }\n br(token) {\n return '<br>';\n }\n del({ tokens }) {\n return `<del>${this.parser.parseInline(tokens)}</del>`;\n }\n link({ href, title, tokens }) {\n const text = this.parser.parseInline(tokens);\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escape(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n image({ href, title, text, tokens }) {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer);\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape(text);\n }\n href = cleanHref;\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${escape(title)}\"`;\n }\n out += '>';\n return out;\n }\n text(token) {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens)\n : ('escaped' in token && token.escaped ? token.text : escape(token.text));\n }\n}\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nclass _TextRenderer {\n // no need for block level renderers\n strong({ text }) {\n return text;\n }\n em({ text }) {\n return text;\n }\n codespan({ text }) {\n return text;\n }\n del({ text }) {\n return text;\n }\n html({ text }) {\n return text;\n }\n text({ text }) {\n return text;\n }\n link({ text }) {\n return '' + text;\n }\n image({ text }) {\n return '' + text;\n }\n br() {\n return '';\n }\n}\n\n/**\n * Parsing & Compiling\n */\nclass _Parser {\n options;\n renderer;\n textRenderer;\n constructor(options) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer();\n }\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new _Parser(options);\n return parser.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new _Parser(options);\n return parser.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n continue;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token);\n continue;\n }\n case 'table': {\n out += this.renderer.table(token);\n continue;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n continue;\n }\n case 'list': {\n out += this.renderer.list(token);\n continue;\n }\n case 'html': {\n out += this.renderer.html(token);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = this.renderer.text(textToken);\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i];\n body += '\\n' + this.renderer.text(textToken);\n }\n if (top) {\n out += this.renderer.paragraph({\n type: 'paragraph',\n raw: body,\n text: body,\n tokens: [{ type: 'text', raw: body, text: body, escaped: true }],\n });\n }\n else {\n out += body;\n }\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer = this.renderer) {\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n\nclass _Hooks {\n options;\n block;\n constructor(options) {\n this.options = options || _defaults;\n }\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html) {\n return html;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse : _Parser.parseInline;\n }\n}\n\nclass Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens, callback));\n });\n }\n else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack };\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function (...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n }\n else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n }\n else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n }\n else {\n extensions.startBlock = [ext.start];\n }\n }\n else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n }\n else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n }\n else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function (token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n parser(tokens, options) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n parseMarkdown(blockType) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse = (src, options) => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n const throwError = this.onError(!!opt.silent, !!opt.async);\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n }\n catch (e) {\n return throwError(e);\n }\n };\n return parse;\n }\n onError(silent, async) {\n return (e) => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n\nconst markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function (options) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = _Parser.parse;\nconst lexer = _Lexer.lex;\n\nexport { _Hooks as Hooks, _Lexer as Lexer, Marked, _Parser as Parser, _Renderer as Renderer, _TextRenderer as TextRenderer, _Tokenizer as Tokenizer, _defaults as defaults, _getDefaults as getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n//# sourceMappingURL=marked.esm.js.map\n","type ActionApprovalEventDetail = {\n messageId: string;\n isApproved: boolean;\n};\n\nexport class ActionApprovalEvent extends CustomEvent<ActionApprovalEventDetail> {\n constructor(messageId: string, isApproved: boolean) {\n super('action-approval', { detail: { messageId, isApproved } });\n }\n}\n","export type ChatMessageMetadata = {\n threadId: string;\n citations: Citation[];\n operatorId?: string;\n operatorName?: string;\n operatorAvatar?: string;\n};\n\ntype Citation = {\n title: string;\n url: string;\n score: number;\n};\n\ntype BaseChatMessage = {\n id: string;\n role: string;\n status: string;\n content: string;\n timestamp: string;\n};\n\nexport type SystemChatMessage = BaseChatMessage & {\n role: 'system';\n status: 'info' | 'error' | 'warning' | 'success';\n};\n\n/**\n * AI Chat Messages\n */\n\ntype BaseAIChatMessage = BaseChatMessage & {\n status:\n | 'pending'\n | 'completed'\n | 'failed'\n | 'cancelled'\n | 'waitingForApproval'\n | 'approved'\n | 'declined';\n};\n\nexport type UserChatMessage = BaseAIChatMessage & {\n role: 'user';\n};\n\nexport type ToolChatMessage = BaseAIChatMessage & {\n role: 'tool';\n};\n\nexport type AssistantChatMessage = BaseAIChatMessage & {\n role: 'assistant' | 'operator';\n metadata?: {\n citations?: Citation[];\n };\n};\n\nexport type AIChatMessage = AssistantChatMessage | OperatorChatMessage;\n\n/**\n * Support Chat Messages\n */\n\ntype BaseSupportChatMessage = BaseChatMessage & {\n status: 'completed' | 'typing';\n};\n\nexport type VisitorChatMessage = BaseSupportChatMessage & {\n role: 'visitor';\n seenTimestamp?: string;\n};\n\nexport type OperatorChatMessage = BaseSupportChatMessage & {\n role: 'operator';\n operatorId: string;\n operatorName: string;\n operatorAvatar: string | null;\n};\n\nexport type SupportChatMessage = VisitorChatMessage | OperatorChatMessage;\n\n/**\n * Union of all Chat Messages\n */\n\nexport type ChatMessage =\n | UserChatMessage\n | ToolChatMessage\n | AssistantChatMessage\n | VisitorChatMessage\n | OperatorChatMessage\n | SystemChatMessage;\n\nexport type ChatMessageRole = ChatMessage['role'];\nexport type ChatMessageStatus = ChatMessage['status'];\n\nexport function isAIChatMessage(message: ChatMessage): message is AIChatMessage {\n return message.role === 'assistant' || message.role === 'operator';\n}\n\nexport function isSupportChatMessage(message: ChatMessage): message is SupportChatMessage {\n return message.role === 'visitor' || message.role === 'operator';\n}\n\nexport function isUserChatMessage(message: ChatMessage): message is UserChatMessage {\n return message.role === 'user';\n}\n\nexport function isToolChatMessage(message: ChatMessage): message is ToolChatMessage {\n return message.role === 'tool';\n}\n\nexport function isAssistantChatMessage(message: ChatMessage): message is AssistantChatMessage {\n return message.role === 'assistant';\n}\n\nexport function isSystemChatMessage(message: ChatMessage): message is SystemChatMessage {\n return message.role === 'system';\n}\n\nexport function isVisitorChatMessage(message: ChatMessage): message is VisitorChatMessage {\n return message.role === 'visitor';\n}\n\nexport function isOperatorChatMessage(message: ChatMessage): message is OperatorChatMessage {\n return message.role === 'operator';\n}\n","import { css } from 'lit';\n\nexport const chatMessageStyles = css`\n :host {\n display: block;\n width: 100%;\n color: var(--text-body);\n box-sizing: border-box;\n }\n\n .message {\n display: flex;\n flex-direction: row;\n position: relative;\n padding: var(--size-8) 0;\n max-width: 100%;\n }\n\n .button-group {\n display: flex;\n flex-direction: row;\n height: 100%;\n gap: var(--size-4);\n align-items: center;\n padding-top: var(--size-8);\n }\n\n .message__content--left {\n display: inline-flex;\n align-items: flex-start;\n justify-content: center;\n width: var(--size-24);\n padding: var(--size-6) var(--size-0) var(--size-4) var(--size-0);\n flex-shrink: 0;\n }\n\n .message__content--right {\n display: flex;\n flex-direction: column;\n height: 100%;\n border-radius: var(--radius-default);\n padding: var(--size-8);\n overflow: hidden;\n }\n\n .message--user {\n justify-content: flex-end;\n }\n\n .message--user > .message__content--right {\n background-color: var(--color-neutral-10);\n }\n\n .message--assistant {\n align-self: flex-start;\n padding-left: var(--size-16);\n }\n\n .message--system {\n justify-content: center;\n min-width: 100px;\n }\n\n .message--system .message__content--right .markdown {\n font-size: var(--font-size-xs);\n line-height: var(--lineheight-xs);\n font-weight: var(--font-weight-regular);\n letter-spacing: var(--tracking-xs);\n color: var(--text-body);\n text-align: center;\n }\n\n .message--system.status--warning > .message__content--right {\n background-color: #fcf0e7;\n border: 1px solid #bb5822;\n }\n\n .message--system.status--info > .message__content--right {\n background-color: #edf4fe;\n border: 1px solid #366af6;\n }\n\n .message--system.status--success > .message__content--right {\n background-color: #eef5ee;\n border: 1px solid #448548;\n }\n\n .message--system.status--error > .message__content--right {\n background-color: #fcf1ee;\n border: 1px solid #cc453e;\n }\n\n .message__citations {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n padding-top: var(--size-8);\n gap: var(--size-4);\n }\n\n .citation {\n display: flex;\n padding: 0 var(--size-2);\n transition-property: color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n }\n\n .citation a {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--size-4);\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n font-weight: var(--font-weight-regular);\n letter-spacing: var(--tracking-sm);\n color: var(--text-action);\n text-decoration: none;\n transition-property: inherit;\n transition-timing-function: inherit;\n transition-duration: inherit;\n }\n\n .citation a > svg {\n color: var(--icon-action);\n width: var(--size-16);\n height: var(--size-16);\n flex-shrink: 0;\n transition-property: inherit;\n transition-timing-function: inherit;\n transition-duration: inherit;\n }\n\n .citation:hover a {\n color: var(--text-action-hover);\n }\n\n .citation:hover a > svg {\n color: var(--icon-action-hover);\n }\n`;\n","import { css } from 'lit';\n\nexport const markdownStyles = css`\n .markdown {\n color: var(--text-body);\n font-size: var(--font-size-md);\n line-height: var(--lineheight-md);\n letter-spacing: var(--tracking-md);\n font-weight: var(--font-weight-regular);\n\n overflow-x: hidden;\n overflow-wrap: break-word;\n }\n\n .markdown > pre {\n white-space: pre-wrap;\n }\n .markdown {\n color: var(--text-body);\n }\n\n .markdown > *::-webkit-scrollbar-thumb {\n background: var(--icon-disabled);\n border-radius: var(--radius-default);\n cursor: pointer;\n }\n .markdown > *::-webkit-scrollbar-track {\n background: var(--surface-page);\n }\n .markdown > *::-webkit-scrollbar-thumb:hover {\n background: var(--icon-on-disabled);\n }\n .markdown > *::-webkit-scrollbar {\n max-width: var(--size-4);\n max-height: var(--size-4);\n }\n\n .markdown :where(p) {\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n }\n .markdown :where(a) {\n font-weight: var(--font-weight-semibold);\n color: var(--text-action);\n text-decoration: none;\n }\n .markdown :where(a:hover) {\n color: var(--text-action-hover);\n }\n .markdown :where(a:visited) {\n color: var(--text-link-visited);\n }\n .markdown :where(strong) {\n color: var(--text-headings);\n font-weight: var(--font-weight-semibold);\n }\n .markdown :where(a strong) {\n color: inherit;\n }\n .markdown :where(blockquote strong) {\n color: inherit;\n }\n .markdown :where(thead th strong) {\n color: inherit;\n }\n .markdown :where(ol) {\n list-style-type: decimal;\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n padding-inline-start: var(--size-28);\n }\n .markdown :where(ol[type='A']) {\n list-style-type: upper-alpha;\n }\n .markdown :where(ol[type='a']) {\n list-style-type: lower-alpha;\n }\n .markdown :where(ol[type='A s']) {\n list-style-type: upper-alpha;\n }\n .markdown :where(ol[type='a s']) {\n list-style-type: lower-alpha;\n }\n .markdown :where(ol[type='I']) {\n list-style-type: upper-roman;\n }\n .markdown :where(ol[type='i']) {\n list-style-type: lower-roman;\n }\n .markdown :where(ol[type='I s']) {\n list-style-type: upper-roman;\n }\n .markdown :where(ol[type='i s']) {\n list-style-type: lower-roman;\n }\n .markdown :where(ol[type='1']) {\n list-style-type: decimal;\n }\n .markdown :where(ul) {\n list-style-type: disc;\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n padding-inline-start: var(--size-28);\n }\n .markdown :where(ol > li)::marker {\n font-weight: var(--font-weight-medium);\n color: var(--text-body);\n }\n .markdown :where(ul > li)::marker {\n color: var(--text-body);\n }\n .markdown :where(dt) {\n color: var(--text-headings);\n font-weight: var(--font-weight-semibold);\n margin-top: var(--size-16);\n }\n .markdown :where(hr) {\n border-top: var(--border-width-sm) solid var(--border-primary);\n margin-top: var(--size-32);\n margin-bottom: var(--size-32);\n }\n .markdown :where(blockquote) {\n font-weight: var(--font-weight-medium);\n font-style: italic;\n color: var(--text-body);\n border-left: var(--border-width-lg) solid var(--border-primary);\n quotes: '“' '”' '‘' '’';\n margin-top: var(--size-24);\n margin-bottom: var(--size-24);\n padding-inline-start: var(--size-16);\n margin-inline-start: 0;\n }\n .markdown :where(blockquote p:first-of-type):before {\n content: open-quote;\n }\n .markdown :where(blockquote p:last-of-type):after {\n content: close-quote;\n }\n .markdown :where(h1) {\n color: var(--text-headings);\n font-weight: var(--font-weight-medium);\n font-size: var(--font-size-2xl);\n line-height: var(--lineheight-2xl);\n letter-spacing: var(--tracking-2xl);\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n }\n .markdown :where(h1 strong) {\n font-weight: var(--font-weight-bold);\n color: inherit;\n }\n .markdown :where(h2) {\n color: var(--text-headings);\n font-weight: var(--font-weight-medium);\n font-size: var(--font-size-xl);\n line-height: var(--lineheight-xl);\n letter-spacing: var(--tracking-xl);\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n }\n .markdown :where(h2 strong) {\n font-weight: var(--font-weight-bold);\n color: inherit;\n }\n .markdown :where(h3) {\n color: var(--text-headings);\n font-weight: var(--font-weight-medium);\n font-size: var(--font-size-lg);\n line-height: var(--lineheight-lg);\n letter-spacing: var(--tracking-lg);\n margin-top: var(--size-16);\n margin-bottom: var(--size-8);\n }\n .markdown :where(h3 strong) {\n font-weight: var(--font-weight-bold);\n color: inherit;\n }\n .markdown :where(h4) {\n color: var(--text-headings);\n font-weight: var(--font-weight-medium);\n font-size: var(--font-size-md);\n line-height: var(--lineheight-md);\n letter-spacing: var(--tracking-md);\n margin-top: var(--size-16);\n margin-bottom: var(--size-8);\n }\n .markdown :where(h4 strong) {\n font-weight: var(--font-weight-bold);\n color: inherit;\n }\n .markdown :where(h5) {\n color: var(--text-headings);\n font-weight: var(--font-weight-semibold);\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n margin-top: var(--size-16);\n margin-bottom: var(--size-4);\n }\n .markdown :where(h5 strong) {\n font-weight: var(--font-weight-bold);\n color: inherit;\n }\n .markdown :where(h6) {\n color: var(--text-headings);\n font-weight: var(--font-weight-bold);\n font-size: var(--font-size-xs);\n line-height: var(--lineheight-xs);\n letter-spacing: var(--tracking-xs);\n margin-top: var(--size-16);\n margin-bottom: var(--size-0);\n }\n .markdown :where(h6 strong) {\n font-weight: var(--font-weight-bold);\n color: inherit;\n }\n .markdown :where(img) {\n object-fit: contain;\n object-position: center;\n width: 100%;\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n }\n .markdown :where(picture) {\n display: block;\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n }\n .markdown :where(video) {\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n }\n .markdown :where(kbd) {\n font-weight: var(--font-weight-medium);\n font-family: inherit;\n color: var(--text-action);\n box-shadow:\n 0 0 0 1px rgb(17 24 39 / 10%),\n 0 3px rgb(17 24 39 / 10%);\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n border-radius: var(--radius-default);\n padding-top: var(--size-4);\n padding-inline-end: var(--size-8);\n padding-bottom: var(--size-4);\n padding-inline-start: var(--size-8);\n }\n .markdown :where(code) {\n font-weight: var(--font-weight-semibold);\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n color: var(--text-information);\n background-color: var(--surface-information);\n border-radius: var(--radius-default);\n padding: 2px var(--size-4);\n }\n .markdown :where(a code) {\n color: inherit;\n }\n .markdown :where(h1 code) {\n color: inherit;\n }\n .markdown :where(h2 code) {\n color: inherit;\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n }\n .markdown :where(h3 code) {\n color: inherit;\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n }\n .markdown :where(h4 code) {\n color: inherit;\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n }\n .markdown :where(h5 code) {\n color: inherit;\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n }\n .markdown :where(h6 code) {\n color: inherit;\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n }\n .markdown :where(blockquote code) {\n color: inherit;\n }\n .markdown :where(thead th code) {\n color: inherit;\n }\n .markdown :where(pre) {\n color: var(--text-code);\n background-color: var(--surface-code);\n overflow-x: auto;\n font-weight: var(--font-weight-regular);\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n border-radius: var(--radius-default);\n padding-top: var(--size-14);\n padding-inline-end: var(--size-20);\n padding-bottom: var(--size-14);\n padding-inline-start: var(--size-20);\n }\n .markdown :where(pre code) {\n background-color: transparent;\n border-width: 0;\n border-radius: 0;\n padding: 0;\n font-weight: inherit;\n color: inherit;\n font-size: inherit;\n line-height: inherit;\n letter-spacing: inherit;\n font-family: inherit;\n }\n .markdown :where(pre code):before {\n content: none;\n }\n .markdown :where(pre code):after {\n content: none;\n }\n .markdown :where(table) {\n border-collapse: collapse;\n width: 100%;\n table-layout: auto;\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n border-spacing: 0;\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n display: block;\n overflow-x: auto;\n }\n .markdown :where(thead th) {\n color: var(--text-headings);\n font-weight: var(--font-weight-semibold);\n vertical-align: bottom;\n padding-inline-end: var(--size-8);\n padding-top: var(--size-8);\n padding-bottom: var(--size-8);\n padding-inline-start: var(--size-8);\n }\n .markdown :where(tbody tr:last-child) {\n border-bottom-width: 0;\n }\n .markdown :where(tbody td) {\n vertical-align: baseline;\n }\n .markdown :where(tfoot td) {\n vertical-align: top;\n }\n .markdown :where(th, td) {\n text-align: start;\n border: var(--border-width-sm) solid var(--border-primary);\n }\n .markdown :where(figure > *) {\n margin-top: 0;\n margin-bottom: 0;\n }\n .markdown :where(figcaption) {\n color: var(--text-body);\n font-size: var(--font-size-sm);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n margin-top: var(--size-14);\n }\n .markdown :where(picture > img) {\n margin-top: 0;\n margin-bottom: 0;\n }\n .markdown :where(li) {\n margin-top: var(--size-8);\n margin-bottom: var(--size-8);\n }\n .markdown :where(ol > li) {\n padding-inline-start: var(--size-8);\n }\n .markdown :where(ul > li) {\n padding-inline-start: var(--size-8);\n }\n .markdown :where(.markdown > ul > li p) {\n margin-top: var(--size-12);\n margin-bottom: var(--size-12);\n }\n .markdown :where(.markdown > ul > li > p:first-child) {\n margin-top: var(--size-16);\n }\n .markdown :where(.markdown > ul > li > p:last-child) {\n margin-bottom: var(--size-16);\n }\n .markdown :where(.markdown > ol > li > p:first-child) {\n margin-top: var(--size-16);\n }\n .markdown :where(.markdown > ol > li > p:last-child) {\n margin-bottom: var(--size-16);\n }\n .markdown :where(ul ul, ul ol, ol ul, ol ol) {\n margin-top: var(--size-12);\n margin-bottom: var(--size-12);\n }\n .markdown :where(dl) {\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n }\n .markdown :where(dd) {\n margin-top: var(--size-8);\n padding-inline-start: var(--size-28);\n }\n .markdown :where(hr + *) {\n margin-top: 0;\n }\n .markdown :where(h2 + *) {\n margin-top: 0;\n }\n .markdown :where(h3 + *) {\n margin-top: 0;\n }\n .markdown :where(h4 + *) {\n margin-top: 0;\n }\n .markdown :where(h5 + *) {\n margin-top: 0;\n }\n .markdown :where(h6 + *) {\n margin-top: 0;\n }\n .markdown :where(tbody td, tfoot td) {\n padding-top: var(--size-8);\n padding-inline-end: var(--size-8);\n padding-bottom: var(--size-8);\n padding-inline-start: var(--size-8);\n }\n .markdown :where(figure) {\n margin-top: var(--size-16);\n margin-bottom: var(--size-16);\n }\n .markdown :where(.markdown > :first-child) {\n margin-top: 0;\n }\n .markdown :where(.markdown > :last-child) {\n margin-bottom: 0;\n }\n`;\n","import classnames from 'classnames';\nimport { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { SquareArrowOutUpRight } from 'lucide-static';\nimport { marked } from 'marked';\n\nimport { ActionApprovalEvent } from '@/types/events';\nimport {\n AssistantChatMessage,\n ChatMessage as ChatMessageType,\n isAssistantChatMessage,\n isOperatorChatMessage,\n isSystemChatMessage,\n isUserChatMessage,\n isVisitorChatMessage,\n OperatorChatMessage,\n SystemChatMessage,\n UserChatMessage,\n VisitorChatMessage,\n} from '@/types/models/chat-message';\n\nimport { chatMessageStyles } from './chat-message.styles';\nimport { markdownStyles } from './markdown.styles';\n\n@customElement('gaia-chat-message')\nexport class ChatMessage extends LitElement {\n static styles = [chatMessageStyles, markdownStyles];\n\n @property({ type: Object })\n data: ChatMessageType | null = null;\n\n @property({ type: Boolean, attribute: 'loading' })\n loading = false;\n\n @property({ type: String, attribute: 'loading-text' })\n loadingText = 'Thinking...';\n\n private submitActionApproval(isApproved: boolean) {\n if (!this.data?.id) {\n throw new Error('Message ID is required');\n }\n this.dispatchEvent(new ActionApprovalEvent(this.data.id, isApproved));\n }\n\n private renderUserMessage(message: UserChatMessage) {\n return html`\n <div class=\"message__content--left\"></div>\n <div class=\"message__content--right\">\n <div class=\"markdown\">\n ${unsafeHTML(\n marked(message.content, {\n async: false,\n })\n )}\n </div>\n </div>\n `;\n }\n\n private _copyToClipboard(content: string) {\n navigator.clipboard.writeText(content);\n }\n\n private renderAssistantMessage(message: AssistantChatMessage) {\n const renderExtras = () => {\n switch (message.status) {\n case 'completed':\n return html`\n ${message.metadata?.citations && message.metadata.citations.length > 0\n ? html`<div class=\"message__citations\">\n ${message.metadata.citations.map(\n (citation) => html`\n <div class=\"citation\">\n <a href=\"${citation.url}\" target=\"_blank\"\n >${citation.title} ${unsafeSVG(SquareArrowOutUpRight)}</a\n >\n </div>\n `\n )}\n </div> `\n : ''}\n <div class=\"button-group\">\n <gaia-tooltip text=\"Copy\" position=\"bottom\">\n <gaia-button\n icon=\"copy\"\n variant=\"ghost\"\n size=\"icon-sm\"\n @click=${() => this._copyToClipboard(message.content)}\n ></gaia-button>\n </gaia-tooltip>\n <gaia-spacing direction=\"vertical\"></gaia-spacing>\n <gaia-tooltip text=\"Good response\" position=\"bottom\">\n <gaia-button icon=\"thumbs-up\" variant=\"ghost\" size=\"icon-sm\"></gaia-button>\n </gaia-tooltip>\n <gaia-tooltip text=\"Bad response\" position=\"bottom\">\n <gaia-button icon=\"thumbs-down\" variant=\"ghost\" size=\"icon-sm\"></gaia-button>\n </gaia-tooltip>\n </div>\n `;\n case 'waitingForApproval':\n return html`<div class=\"button-group\">\n <gaia-button variant=\"secondary\" @click=${() => this.submitActionApproval(true)}\n >Yes</gaia-button\n >\n <gaia-button variant=\"secondary\" @click=${() => this.submitActionApproval(false)}\n >No</gaia-button\n >\n </div>`;\n default:\n return '';\n }\n };\n return html`\n <div class=\"message__content--left\">\n <gaia-avatar size=\"sm\" initials=\"AI\"></gaia-avatar>\n </div>\n\n <div class=\"message__content--right\">\n <div class=\"markdown\">\n ${unsafeHTML(\n marked(message.content, {\n async: false,\n })\n )}\n </div>\n ${renderExtras()}\n </div>\n `;\n }\n\n private renderVisitorMessage(message: VisitorChatMessage) {\n return html`\n <div class=\"message__content--left\"></div>\n <div class=\"message__content--right\">\n <div class=\"markdown\">\n ${unsafeHTML(\n marked(message.content, {\n async: false,\n })\n )}\n </div>\n </div>\n `;\n }\n\n private renderOperatorMessage(message: OperatorChatMessage) {\n return html`\n <div class=\"message__content--left\">\n <gaia-tooltip text=\"Active\" position=\"right\">\n <gaia-avatar\n size=\"sm\"\n status=\"active\"\n .src=${message.operatorAvatar ?? undefined}\n ></gaia-avatar>\n </gaia-tooltip>\n </div>\n\n <div class=\"message__content--right\">\n <div class=\"markdown\">\n ${message.status === 'typing'\n ? html`<gaia-loader type=\"typing\"></gaia-loader>`\n : unsafeHTML(\n marked(message.content, {\n async: false,\n })\n )}\n </div>\n </div>\n `;\n }\n\n private renderSystemMessage(message: SystemChatMessage) {\n return html`\n <div class=\"message__content--left\"></div>\n <div class=\"message__content--right\">\n <div class=\"message__content markdown\">\n ${unsafeHTML(\n marked(message.content, {\n async: false,\n })\n )}\n </div>\n </div>\n `;\n }\n\n private renderLoadingMessage() {\n return html`<div class=\"message__content--left\">\n <gaia-loader type=\"thinking\"></gaia-loader>\n </div>\n <div class=\"message__content--right\">\n <div class=\"markdown\">${this.loadingText}</div>\n </div> `;\n }\n\n private renderMessage(message: ChatMessageType) {\n if (isUserChatMessage(message)) {\n return this.renderUserMessage(message);\n } else if (isVisitorChatMessage(message)) {\n return this.renderVisitorMessage(message);\n } else if (isAssistantChatMessage(message)) {\n return this.renderAssistantMessage(message);\n } else if (isOperatorChatMessage(message)) {\n return this.renderOperatorMessage(message);\n } else if (isSystemChatMessage(message)) {\n return this.renderSystemMessage(message);\n }\n return '';\n }\n\n render() {\n if (this.loading) {\n return html` <div class=\"message message--assistant\">${this.renderLoadingMessage()}</div> `;\n }\n if (!this.data || (this.data.status !== 'typing' && this.data.content === '')) {\n return null;\n }\n\n return html`\n <div\n class=\"message ${classnames({\n 'message--user': this.data.role === 'user' || this.data.role === 'visitor',\n 'message--assistant': this.data.role === 'assistant' || this.data.role === 'operator',\n 'message--system': this.data.role === 'system',\n 'status--error': this.data.status === 'error',\n 'status--info': this.data.status === 'info',\n 'status--warning': this.data.status === 'warning',\n 'status--success': this.data.status === 'success',\n })}\"\n >\n ${this.renderMessage(this.data)}\n </div>\n `;\n }\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","export const API_CONFIG = {\n PING_INTERVAL: 60 * 1000, // 60 seconds\n REQUEST_TIMEOUT: 30 * 1000, // 30 seconds\n RETRY_ATTEMPTS: 3,\n RETRY_DELAY: 1000, // 1 second\n} as const;\n\nexport const WEBSOCKET_EVENTS = {\n PING: 'ping',\n CLOSE: 'close',\n TEXT: 'text',\n FILE: 'file',\n TRANSFER: 'transfer',\n TYPING: 'typing',\n SEEN: 'seen',\n} as const;\n\nexport const MESSAGE_ROLES = {\n USER: 'user',\n ASSISTANT: 'assistant',\n OPERATOR: 'operator',\n VISITOR: 'visitor',\n SYSTEM: 'system',\n TOOL: 'tool',\n} as const;\n\nexport const MESSAGE_STATUS = {\n PENDING: 'pending',\n COMPLETED: 'completed',\n FAILED: 'failed',\n CANCELLED: 'cancelled',\n WAITING_FOR_APPROVAL: 'waitingForApproval',\n APPROVED: 'approved',\n DECLINED: 'declined',\n TYPING: 'typing',\n INFO: 'info',\n ERROR: 'error',\n WARNING: 'warning',\n SUCCESS: 'success',\n} as const;\n\nexport const SERVER_SENT_EVENTS = {\n UPDATE: 'update',\n MESSAGE: 'message',\n ERROR: 'error',\n CLOSE: 'close',\n} as const;\n\nexport const DEFAULT_VALUES = {\n LOADING_TEXT: 'Thinking...',\n OPERATOR_NAME: 'Support Agent',\n VISITOR_NAME: 'John Doe',\n VISITOR_EMAIL: 'john@example.com',\n START_URL: 'https://visma.com',\n} as const;\n","export enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n}\n\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n context?: Record<string, unknown>;\n error?: Error;\n}\n\nexport class Logger {\n private static instance: Logger;\n private minLevel: LogLevel = LogLevel.INFO;\n\n private constructor() {}\n\n static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n return Logger.instance;\n }\n\n setLevel(level: LogLevel): void {\n this.minLevel = level;\n }\n\n private log(\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>,\n error?: Error\n ): void {\n if (level < this.minLevel) return;\n\n const entry: LogEntry = {\n level,\n message,\n timestamp: new Date(),\n context,\n error,\n };\n\n const levelName = LogLevel[level];\n const timestamp = entry.timestamp.toISOString();\n\n let logMessage = `[${timestamp}] ${levelName}: ${message}`;\n\n if (context) {\n logMessage += ` ${JSON.stringify(context)}`;\n }\n\n switch (level) {\n case LogLevel.DEBUG:\n console.debug(logMessage);\n break;\n case LogLevel.INFO:\n console.info(logMessage);\n break;\n case LogLevel.WARN:\n console.warn(logMessage);\n break;\n case LogLevel.ERROR:\n console.error(logMessage);\n break;\n }\n }\n\n debug(message: string, context?: Record<string, unknown>): void {\n this.log(LogLevel.DEBUG, message, context);\n }\n\n info(message: string, context?: Record<string, unknown>): void {\n this.log(LogLevel.INFO, message, context);\n }\n\n warn(message: string, context?: Record<string, unknown>): void {\n this.log(LogLevel.WARN, message, context);\n }\n\n error(message: string, context?: Record<string, unknown>, error?: Error): void {\n this.log(LogLevel.ERROR, message, context, error);\n }\n}\n\nexport const logger = Logger.getInstance();\n","import { API_CONFIG } from '@/config/constants';\nimport { logger } from '@/utils/logger';\n\nexport interface RequestConfig {\n timeout?: number;\n headers?: Record<string, string>;\n}\n\nexport interface ApiError extends Error {\n status?: number;\n response?: Response;\n}\n\nexport abstract class BaseService {\n protected baseUrl: string = '';\n protected defaultHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n constructor(baseUrl?: string) {\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n }\n\n setBaseUrl(url: string): void {\n this.baseUrl = url;\n }\n\n protected async request<T>(\n endpoint: string,\n options: RequestInit & RequestConfig = {}\n ): Promise<T> {\n const { timeout = API_CONFIG.REQUEST_TIMEOUT, headers = {}, ...fetchOptions } = options;\n\n const url = this.buildUrl(endpoint);\n const requestHeaders = { ...this.defaultHeaders, ...headers };\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n logger.debug('Making HTTP request', { url, method: fetchOptions.method || 'GET' });\n\n const response = await fetch(url, {\n ...fetchOptions,\n headers: requestHeaders,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const error = new Error(`HTTP ${response.status}: ${response.statusText}`) as ApiError;\n error.status = response.status;\n error.response = response;\n throw error;\n }\n\n const contentType = response.headers.get('content-type');\n if (contentType?.includes('application/json')) {\n return await response.json();\n }\n\n return (await response.text()) as unknown as T;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw new Error('Request timeout');\n }\n\n throw error;\n }\n }\n\n protected async get<T>(endpoint: string, config?: RequestConfig): Promise<T> {\n return this.request<T>(endpoint, { ...config, method: 'GET' });\n }\n\n protected async post<T>(endpoint: string, data?: unknown, config?: RequestConfig): Promise<T> {\n return this.request<T>(endpoint, {\n ...config,\n method: 'POST',\n body: data ? JSON.stringify(data) : undefined,\n });\n }\n\n protected async put<T>(endpoint: string, data?: unknown, config?: RequestConfig): Promise<T> {\n return this.request<T>(endpoint, {\n ...config,\n method: 'PUT',\n body: data ? JSON.stringify(data) : undefined,\n });\n }\n\n protected async delete<T>(endpoint: string, config?: RequestConfig): Promise<T> {\n return this.request<T>(endpoint, { ...config, method: 'DELETE' });\n }\n\n private buildUrl(endpoint: string): string {\n if (endpoint.startsWith('http')) {\n return endpoint;\n }\n\n const cleanBaseUrl = this.baseUrl.endsWith('/') ? this.baseUrl.slice(0, -1) : this.baseUrl;\n const cleanEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;\n\n return `${cleanBaseUrl}${cleanEndpoint}`;\n }\n}\n","import { SERVER_SENT_EVENTS } from '@/config/constants';\nimport { BaseService } from '@/services/base-service';\nimport { SendMessageRequest, SubmitActionApprovalRequest } from '@/services/chat-service.dto';\nimport { SSEvent, SSEventType } from '@/types/server-sent-events';\nimport { logger } from '@/utils/logger';\n\nexport class ChatService extends BaseService {\n private abortController: AbortController | null = null;\n\n constructor(baseUrl?: string) {\n super(baseUrl);\n }\n\n async *streamMessages(payload: SendMessageRequest): AsyncGenerator<SSEvent, void, unknown> {\n this.abort();\n this.abortController = new AbortController();\n\n try {\n logger.info('Starting message stream', { conversationId: payload.conversationId });\n\n const response = await fetch(`${this.baseUrl}/api/v1/conversations/stream`, {\n method: 'POST',\n body: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json',\n },\n signal: this.abortController.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to send message: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is empty');\n }\n\n yield* this.processStreamResponse(response.body);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n logger.error(\n 'Error in message stream',\n { error: errorMessage },\n error instanceof Error ? error : undefined\n );\n\n if (!(error instanceof DOMException && error.name === 'AbortError')) {\n throw error;\n }\n } finally {\n this.abort();\n }\n }\n\n private async *processStreamResponse(\n stream: ReadableStream<Uint8Array>\n ): AsyncGenerator<SSEvent, void, unknown> {\n const decoder = new TextDecoder();\n const reader = stream.getReader();\n let jsonBuffer = '';\n let done = false;\n\n try {\n while (!done) {\n const { value, done: readerDone } = await reader.read();\n done = readerDone;\n\n if (!value) continue;\n\n const chunk = decoder.decode(value, { stream: true });\n jsonBuffer += chunk;\n const chunks = jsonBuffer.split('\\n\\n');\n jsonBuffer = chunks.pop() || '';\n\n for (const chunk of chunks) {\n const event = this.parseSSEChunk(chunk);\n if (event) {\n yield event;\n }\n }\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n logger.error(\n 'Error processing stream response',\n { error: errorMessage },\n error instanceof Error ? error : undefined\n );\n throw error;\n } finally {\n reader.releaseLock();\n }\n }\n\n private parseSSEChunk(chunk: string): SSEvent | null {\n const match = /event: (.*)\\ndata: (.*)/gm.exec(chunk);\n\n if (!match) {\n logger.warn('Malformed SSE chunk', { chunk });\n return null;\n }\n\n const [eventType, jsonString] = match.slice(1) as [SSEventType, string];\n\n if (!this.isValidEventType(eventType)) {\n logger.warn('Unknown SSE event type', { eventType });\n return null;\n }\n\n try {\n return {\n type: eventType,\n data: JSON.parse(jsonString),\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n logger.error(\n 'Failed to parse SSE data',\n { jsonString, error: errorMessage },\n error instanceof Error ? error : undefined\n );\n return null;\n }\n }\n\n private isValidEventType(eventType: string): eventType is SSEventType {\n return Object.values(SERVER_SENT_EVENTS).includes(eventType as SSEventType);\n }\n\n async submitActionApproval(payload: SubmitActionApprovalRequest): Promise<void> {\n const { conversationId, messageId, isApproved } = payload;\n\n logger.info('Submitting action approval', { conversationId, messageId, isApproved });\n\n await this.post(`/api/v1/conversations/${conversationId}/messages/${messageId}/approve`, {\n approved: isApproved,\n });\n }\n\n abort(): void {\n if (this.abortController && !this.abortController.signal.aborted) {\n logger.debug('Aborting chat service request');\n this.abortController.abort();\n }\n this.abortController = null;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { UpdateOperation } from '@/types/server-sent-events';\nexport function updateObjectAtPathImmutable<T>(\n obj: T,\n path: string,\n operation: UpdateOperation,\n value: unknown\n): T {\n const keys = path.split('/');\n\n function helper(curr: any, idx: number): any {\n if (idx === keys.length - 1) {\n const lastKey = keys[idx];\n if (operation === 'set') {\n return {\n ...curr,\n [lastKey]: value,\n };\n }\n if (operation === 'append') {\n const oldVal = curr[lastKey];\n let newVal;\n if (Array.isArray(oldVal)) {\n newVal = Array.isArray(value) ? [...oldVal, ...value] : [...oldVal, value];\n } else if (typeof oldVal === 'string' || typeof oldVal === 'number') {\n newVal = (oldVal as any) + (value as any);\n } else {\n throw new Error(`Cannot perform 'append' on non-string/non-number at path '${path}'`);\n }\n return {\n ...curr,\n [lastKey]: newVal,\n };\n }\n throw new Error(`Unknown operation '${operation}'`);\n } else {\n const key = keys[idx];\n return {\n ...curr,\n [key]: helper(curr[key], idx + 1),\n };\n }\n }\n\n return helper(obj, 0);\n}\n","import { ReactiveController } from 'lit';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { MESSAGE_ROLES, MESSAGE_STATUS, SERVER_SENT_EVENTS } from '@/config/constants';\nimport { ChatService } from '@/services/chat-service';\nimport { ActionApprovalEvent } from '@/types/events';\nimport { ChatMessage, SystemChatMessage, UserChatMessage } from '@/types/models/chat-message';\nimport { SSEvent, SSUpdateEvent, UpdateOperation } from '@/types/server-sent-events';\nimport { logger } from '@/utils/logger';\nimport { updateObjectAtPathImmutable } from '@/utils/object';\n\nimport { ChatControllerHost } from '../types/interfaces/chat-controller-host';\n\nexport class ChatController implements ReactiveController {\n host: ChatControllerHost;\n private currentPath: string = '';\n private currentOperation: UpdateOperation = 'set';\n private readonly chatService: ChatService;\n\n constructor(host: ChatControllerHost) {\n (this.host = host).addController(this);\n this.chatService = new ChatService();\n }\n\n hostConnected() {\n this.chatService.setBaseUrl(this.host.baseUrl);\n logger.debug('Chat controller host connected', { baseUrl: this.host.baseUrl });\n }\n\n hostDisconnected() {\n logger.debug('Chat controller host disconnected');\n this.chatService.abort();\n }\n\n async sendMessage(message: string): Promise<void> {\n if (!this.host.profileId) {\n throw new Error('Profile ID is required');\n }\n\n const userMessage = this.createUserMessage(message);\n this.addMessage(userMessage);\n\n this.host.loading = true;\n\n try {\n logger.info('Sending message to AI assistant', {\n profileId: this.host.profileId,\n conversationId: this.host.conversation.id,\n messageId: userMessage.id,\n });\n\n for await (const event of this.chatService.streamMessages({\n profileId: this.host.profileId,\n conversationId: this.host.conversation.id,\n messageId: userMessage.id,\n content: message,\n })) {\n this.handleStreamEvent(event);\n }\n\n logger.info('Message sent to AI assistant successfully', {\n profileId: this.host.profileId,\n messageId: userMessage.id,\n });\n } catch (error) {\n const errorMessage = 'An error occurred while sending the message';\n logger.error(\n errorMessage,\n {\n profileId: this.host.profileId,\n messageId: userMessage.id,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n\n this.addMessage(this.createSystemMessage(errorMessage, MESSAGE_STATUS.ERROR));\n } finally {\n if (this.host.loading) {\n this.host.loading = false;\n this.host.requestUpdate();\n }\n }\n }\n\n private handleStreamEvent(event: SSEvent): void {\n switch (event.type) {\n case SERVER_SENT_EVENTS.UPDATE:\n if (this.host.loading && this.isLoadingComplete()) {\n this.host.loading = false;\n this.host.requestUpdate();\n this.updateConversation(event);\n } else {\n this.updateConversation(event);\n this.requestUpdate();\n }\n break;\n\n case SERVER_SENT_EVENTS.MESSAGE:\n this.addMessage(this.createSystemMessage(event.data.message, MESSAGE_STATUS.INFO));\n break;\n\n case SERVER_SENT_EVENTS.ERROR:\n this.addMessage(this.createSystemMessage(event.data.message, MESSAGE_STATUS.ERROR));\n logger.error('Error from AI assistant', { error: event.data.message });\n break;\n\n case SERVER_SENT_EVENTS.CLOSE:\n logger.info('AI assistant stream closed');\n this.requestUpdate();\n break;\n\n default:\n logger.warn('Unknown event type from AI assistant', {\n type: (event as unknown as SSEvent).type,\n });\n }\n }\n\n async sendActionApproval(event: ActionApprovalEvent): Promise<void> {\n if (!this.host.conversation.id) {\n throw new Error('Conversation ID is required');\n }\n\n try {\n logger.info('Submitting action approval', {\n conversationId: this.host.conversation.id,\n messageId: event.detail.messageId,\n isApproved: event.detail.isApproved,\n });\n\n await this.chatService.submitActionApproval({\n conversationId: this.host.conversation.id,\n messageId: event.detail.messageId,\n isApproved: event.detail.isApproved,\n });\n\n logger.info('Action approval submitted successfully', {\n messageId: event.detail.messageId,\n isApproved: event.detail.isApproved,\n });\n } catch (error) {\n const errorMessage = 'Failed to submit action approval';\n logger.error(\n errorMessage,\n {\n messageId: event.detail.messageId,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n\n this.addMessage(this.createSystemMessage(errorMessage, MESSAGE_STATUS.ERROR));\n throw error;\n }\n }\n\n private requestUpdate(): void {\n if (!this.host.loading) {\n this.host.requestUpdate();\n }\n }\n\n private isLoadingComplete(): boolean {\n const messages = Object.values(this.host.conversation.messages);\n const lastMessage = messages[messages.length - 1];\n return (\n lastMessage && lastMessage.role === MESSAGE_ROLES.ASSISTANT && lastMessage.content.length > 0\n );\n }\n\n private updateConversation(event: SSUpdateEvent): void {\n const { p, o, v: value } = event.data;\n this.currentPath = p ?? this.currentPath;\n this.currentOperation = o ?? this.currentOperation;\n\n try {\n this.host.conversation = updateObjectAtPathImmutable(\n this.host.conversation,\n this.currentPath,\n this.currentOperation,\n value\n );\n this.host.requestUpdate();\n } catch (error) {\n logger.error(\n 'Failed to update conversation',\n {\n path: this.currentPath,\n operation: this.currentOperation,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n private addMessage(message: ChatMessage): void {\n const newMessages = { ...this.host.conversation.messages, [message.id]: message };\n this.host.conversation = {\n ...this.host.conversation,\n messages: newMessages,\n };\n this.host.requestUpdate();\n }\n\n private createUserMessage(message: string): UserChatMessage {\n return {\n id: uuidv4(),\n role: MESSAGE_ROLES.USER,\n content: message,\n status: MESSAGE_STATUS.PENDING,\n timestamp: new Date().toISOString(),\n };\n }\n\n private createSystemMessage(\n message: string,\n status: SystemChatMessage['status']\n ): SystemChatMessage {\n return {\n id: uuidv4(),\n role: MESSAGE_ROLES.SYSTEM,\n content: message,\n status,\n timestamp: new Date().toISOString(),\n };\n }\n}\n","import { BaseService } from '@/services/base-service';\nimport { logger } from '@/utils/logger';\n\nimport {\n GetGroupByIdResponse,\n GetOperatorByIdResponse,\n SendMessageRequest,\n SendMessageResponse,\n StartConversationRequest,\n StartConversationResponse,\n} from './liveleader-service.dto';\n\nexport class LiveleaderService extends BaseService {\n constructor(baseUrl?: string) {\n super(baseUrl);\n }\n\n async startConversation(payload: StartConversationRequest): Promise<StartConversationResponse> {\n logger.info('Starting LiveLeader conversation', {\n teamId: payload.teamId,\n messageCount: payload.messages.length,\n });\n\n try {\n const response = await this.post<StartConversationResponse>(\n '/api/v1/liveleader/conversations',\n payload\n );\n\n logger.info('LiveLeader conversation started successfully', {\n conversationId: response.id,\n });\n\n return response;\n } catch (error) {\n logger.error(\n 'Failed to start LiveLeader conversation',\n {\n teamId: payload.teamId,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n throw error;\n }\n }\n\n async sendMessage(payload: SendMessageRequest): Promise<SendMessageResponse> {\n const { conversationId, message } = payload;\n\n logger.info('Sending message to LiveLeader', {\n conversationId,\n messageRole: message.role,\n });\n\n try {\n const response = await this.post<SendMessageResponse>(\n `/api/v1/liveleader/conversations/${conversationId}/messages`,\n payload\n );\n\n logger.info('Message sent successfully to LiveLeader', {\n conversationId,\n messageId: response.id,\n });\n\n return response;\n } catch (error) {\n logger.error(\n 'Failed to send message to LiveLeader',\n {\n conversationId,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n throw error;\n }\n }\n\n async getGroupById(teamId: string): Promise<GetGroupByIdResponse> {\n logger.info('Fetching group information from LiveLeader', { teamId });\n\n try {\n const response = await this.get<GetGroupByIdResponse>(`/api/v1/liveleader/groups/${teamId}`);\n\n logger.info('Group information fetched successfully', {\n teamId,\n groupName: response.name,\n available: response.available,\n });\n\n return response;\n } catch (error) {\n logger.error(\n 'Failed to fetch group information',\n {\n teamId,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n throw error;\n }\n }\n\n async getOperatorById(operatorId: string): Promise<GetOperatorByIdResponse> {\n logger.info('Fetching operator information from LiveLeader', { operatorId });\n try {\n const response = await this.get<GetOperatorByIdResponse>(\n `/api/v1/liveleader/operators/${operatorId}`\n );\n\n logger.info('Operator information fetched successfully', {\n operatorId,\n operatorName: response.name,\n operatorEmail: response.email,\n operatorPicture: response.picture,\n });\n\n return response;\n } catch (error) {\n logger.error(\n 'Failed to fetch operator information',\n {\n operatorId,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n throw error;\n }\n }\n}\n","import { API_CONFIG, WEBSOCKET_EVENTS } from '@/config/constants';\nimport { logger } from '@/utils/logger';\n\nexport interface WebSocketConfig {\n url: string;\n pingInterval?: number;\n reconnectAttempts?: number;\n reconnectDelay?: number;\n}\n\nexport interface WebSocketMessage {\n type: string;\n data?: unknown;\n}\n\nexport class WebSocketManager {\n private ws: WebSocket | null = null;\n private config: Required<WebSocketConfig>;\n private pingInterval: NodeJS.Timeout | null = null;\n private pingCounter = 0;\n private reconnectAttempts = 0;\n private isManualClose = false;\n private messageHandlers: Map<string, (data: unknown) => void> = new Map();\n private connectionHandlers: {\n onOpen?: () => void;\n onClose?: (reason?: string) => void;\n onError?: (error: Event) => void;\n } = {};\n\n constructor(config: WebSocketConfig) {\n this.config = {\n pingInterval: API_CONFIG.PING_INTERVAL,\n reconnectAttempts: API_CONFIG.RETRY_ATTEMPTS,\n reconnectDelay: API_CONFIG.RETRY_DELAY,\n ...config,\n };\n }\n\n connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n try {\n logger.info('Connecting to WebSocket', { url: this.config.url });\n\n this.ws = new WebSocket(this.config.url);\n this.isManualClose = false;\n\n this.ws.onopen = () => {\n logger.info('WebSocket connection established');\n this.reconnectAttempts = 0;\n this.startPingInterval();\n this.connectionHandlers.onOpen?.();\n resolve();\n };\n\n this.ws.onclose = (event) => {\n this.handleClose(event);\n };\n\n this.ws.onerror = (error) => {\n logger.error('WebSocket error', { error: error.type });\n this.connectionHandlers.onError?.(error);\n reject(new Error('WebSocket connection failed'));\n };\n\n this.ws.onmessage = (event) => {\n this.handleMessage(event);\n };\n } catch (error) {\n logger.error(\n 'Failed to create WebSocket connection',\n {\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n reject(error);\n }\n });\n }\n\n disconnect(reason?: string): void {\n logger.info('Disconnecting WebSocket', { reason });\n\n this.isManualClose = true;\n this.stopPingInterval();\n\n if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n this.ws.close(1000, reason);\n }\n\n this.ws = null;\n }\n\n send(message: string | WebSocketMessage): void {\n if (!this.isConnected()) {\n throw new Error('WebSocket is not connected');\n }\n\n const payload = typeof message === 'string' ? message : JSON.stringify(message);\n\n logger.debug('Sending WebSocket message', {\n type: typeof message === 'object' ? message.type : 'raw',\n size: payload.length,\n });\n\n this.ws!.send(payload);\n }\n\n isConnected(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n\n onMessage<T = unknown>(type: string, handler: (data: T) => void): void {\n this.messageHandlers.set(type, handler as (data: unknown) => void);\n }\n\n offMessage(type: string): void {\n this.messageHandlers.delete(type);\n }\n\n onConnection(handlers: {\n onOpen?: () => void;\n onClose?: (reason?: string) => void;\n onError?: (error: Event) => void;\n }): void {\n this.connectionHandlers = handlers;\n }\n\n private handleMessage(event: MessageEvent<string>): void {\n try {\n if (event.data.startsWith('ping:')) {\n return;\n }\n\n const message = JSON.parse(event.data) as WebSocketMessage;\n logger.debug('Received WebSocket message', { type: message.type });\n\n const handler = this.messageHandlers.get(message.type);\n if (handler) {\n handler(message);\n } else {\n logger.warn('No handler for WebSocket message type', { type: message.type });\n }\n } catch (error) {\n logger.error(\n 'Failed to parse WebSocket message',\n {\n data: event.data,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n private handleClose(event: CloseEvent): void {\n logger.info('WebSocket connection closed', {\n code: event.code,\n reason: event.reason,\n wasClean: event.wasClean,\n });\n\n this.stopPingInterval();\n\n const reason = event.reason || (event.wasClean ? 'Normal closure' : 'Connection lost');\n this.connectionHandlers.onClose?.(reason);\n\n // Attempt reconnection if not manually closed\n if (!this.isManualClose && this.reconnectAttempts < this.config.reconnectAttempts) {\n this.attemptReconnect();\n }\n }\n\n private attemptReconnect(): void {\n this.reconnectAttempts++;\n const delay = this.config.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);\n\n logger.info('Attempting WebSocket reconnection', {\n attempt: this.reconnectAttempts,\n maxAttempts: this.config.reconnectAttempts,\n delay,\n });\n\n setTimeout(() => {\n this.connect().catch((error) => {\n logger.error(\n 'WebSocket reconnection failed',\n {\n attempt: this.reconnectAttempts,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n });\n }, delay);\n }\n\n private startPingInterval(): void {\n this.stopPingInterval();\n\n this.pingInterval = setInterval(() => {\n if (this.isConnected()) {\n this.send(`${WEBSOCKET_EVENTS.PING}:${this.pingCounter}`);\n this.pingCounter++;\n }\n }, this.config.pingInterval);\n }\n\n private stopPingInterval(): void {\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = null;\n }\n }\n}\n","import { ReactiveController } from 'lit';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n DEFAULT_VALUES,\n MESSAGE_ROLES,\n MESSAGE_STATUS,\n WEBSOCKET_EVENTS,\n} from '@/config/constants';\nimport { LiveleaderService } from '@/services/liveleader-service';\nimport {\n GetOperatorByIdResponse,\n LiveLeaderMessage,\n SendMessageResponse,\n WSMessage,\n WSSeenMessage,\n WSTextMessage,\n WSTypingMessage,\n} from '@/services/liveleader-service.dto';\nimport { WebSocketManager } from '@/services/websocket-manager';\nimport {\n ChatMessage,\n OperatorChatMessage,\n SystemChatMessage,\n VisitorChatMessage,\n} from '@/types/models/chat-message';\nimport { Conversation } from '@/types/models/conversation';\nimport { logger } from '@/utils/logger';\n\nimport { ChatControllerHost } from '../types/interfaces/chat-controller-host';\n\nexport interface SupportControllerConfig {\n visitor?: {\n name?: string;\n email?: string;\n };\n}\n\nexport class SupportController implements ReactiveController {\n private _host: ChatControllerHost;\n private _liveleaderService: LiveleaderService;\n private _websocketManager: WebSocketManager | null = null;\n private _conversationId: string | null = null;\n private _config: SupportControllerConfig;\n private _operatorCache: Map<string, GetOperatorByIdResponse> = new Map();\n\n public isConnected = false;\n\n constructor(host: ChatControllerHost, config?: SupportControllerConfig) {\n (this._host = host).addController(this);\n this._config = config || {};\n this._liveleaderService = new LiveleaderService();\n }\n\n hostConnected() {\n this._liveleaderService.setBaseUrl(this._host.baseUrl);\n logger.debug('Support controller host connected');\n }\n\n hostDisconnected() {\n logger.debug('Support controller host disconnected');\n this.disconnectFromSupport();\n }\n\n updateConfig(config: Partial<SupportControllerConfig>): void {\n this._config = { ...this._config, ...config };\n }\n\n async connectToSupport(conversation: Conversation, teamId: string): Promise<void> {\n try {\n logger.info('Connecting to support', { teamId });\n\n if (!teamId) {\n throw new Error('Team ID is required');\n }\n\n if (!Object.keys(conversation.messages).length) {\n throw new Error('Conversation is empty');\n }\n\n const response = await this._liveleaderService.startConversation({\n teamId,\n startUrl: DEFAULT_VALUES.START_URL,\n messages: this.mapConversationToLiveLeaderMessages(conversation),\n visitor: {\n name: this._config.visitor?.name || DEFAULT_VALUES.VISITOR_NAME,\n email: this._config.visitor?.email || DEFAULT_VALUES.VISITOR_EMAIL,\n },\n routeToPartner: undefined,\n });\n\n this._conversationId = response.id;\n await this.establishWebSocketConnection(response.webSocketUrl);\n\n this.addMessage(\n this.createSystemMessage('You have been connected to support', MESSAGE_STATUS.INFO)\n );\n\n logger.info('Successfully connected to support', { conversationId: this._conversationId });\n } catch (error) {\n const errorMessage = 'Failed to connect to support';\n logger.error(\n errorMessage,\n {\n teamId,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n\n this.addMessage(this.createSystemMessage(errorMessage, MESSAGE_STATUS.ERROR));\n throw error;\n }\n }\n\n private async establishWebSocketConnection(webSocketUrl: string): Promise<void> {\n this._websocketManager = new WebSocketManager({ url: webSocketUrl });\n\n this._websocketManager.onConnection({\n onOpen: () => {\n this.isConnected = true;\n logger.info('WebSocket connection established for support');\n },\n onClose: (reason) => {\n this.isConnected = false;\n const message = reason || 'You have been disconnected from support';\n this.addMessage(this.createSystemMessage(message, MESSAGE_STATUS.INFO));\n logger.info('WebSocket connection closed for support', { reason });\n },\n onError: (error) => {\n logger.error('WebSocket error in support', { error: error.type });\n this.addMessage(\n this.createSystemMessage(\n 'An error occurred with the support connection',\n MESSAGE_STATUS.ERROR\n )\n );\n },\n });\n\n this._websocketManager.onMessage<WSMessage>(WEBSOCKET_EVENTS.CLOSE, () => {\n this.disconnectFromSupport('The operator has closed the conversation');\n });\n\n this._websocketManager.onMessage<WSTextMessage>(WEBSOCKET_EVENTS.TEXT, async (message) => {\n this.addMessage(await this.createOperatorMessage(message));\n });\n\n this._websocketManager.onMessage<WSTypingMessage>(WEBSOCKET_EVENTS.TYPING, (message) => {\n this.handleTypingMessage(message);\n });\n\n this._websocketManager.onMessage<WSSeenMessage>(WEBSOCKET_EVENTS.SEEN, (message) => {\n this.handleSeenMessage(message);\n });\n\n await this._websocketManager.connect();\n }\n\n async sendMessage(message: string): Promise<void> {\n if (!this._conversationId) {\n throw new Error('No active support conversation');\n }\n\n if (!this.isConnected) {\n throw new Error('Not connected to support');\n }\n\n try {\n logger.info('Sending message to support', { conversationId: this._conversationId });\n\n const response = await this._liveleaderService.sendMessage({\n message: {\n role: MESSAGE_ROLES.VISITOR,\n text: message,\n time: new Date().toISOString(),\n },\n conversationId: this._conversationId,\n });\n\n this.addMessage(this.createVisitorMessage(response));\n\n logger.info('Message sent to support successfully', {\n conversationId: this._conversationId,\n messageId: response.id,\n });\n } catch (error) {\n const errorMessage = 'Failed to send message to support';\n logger.error(\n errorMessage,\n {\n conversationId: this._conversationId,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n\n this.addMessage(this.createSystemMessage(errorMessage, MESSAGE_STATUS.ERROR));\n throw error;\n }\n }\n\n disconnectFromSupport(reason?: string): void {\n logger.info('Disconnecting from support', { reason });\n\n this._conversationId = null;\n this.isConnected = false;\n\n if (this._websocketManager) {\n this._websocketManager.disconnect(reason);\n this._websocketManager = null;\n }\n\n this._operatorCache.clear();\n }\n\n private async getOperatorInfo(operatorId: string): Promise<GetOperatorByIdResponse> {\n if (this._operatorCache.has(operatorId)) {\n logger.debug('Using cached operator information', { operatorId });\n return this._operatorCache.get(operatorId)!;\n }\n\n try {\n logger.info('Fetching operator information', { operatorId });\n const operatorInfo = await this._liveleaderService.getOperatorById(operatorId);\n\n this._operatorCache.set(operatorId, operatorInfo);\n\n return operatorInfo;\n } catch (error) {\n logger.error(\n 'Failed to fetch operator information',\n {\n operatorId,\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n error instanceof Error ? error : undefined\n );\n\n // TODO: Maybe we should throw an error here?\n return {\n id: operatorId,\n name: DEFAULT_VALUES.OPERATOR_NAME,\n email: '',\n picture: '',\n };\n }\n }\n\n private async handleTypingMessage(message: WSTypingMessage): Promise<void> {\n try {\n const operatorInfo = await this.getOperatorInfo(message.operatorId);\n\n if (operatorInfo.id in this._host.conversation.messages) {\n return;\n }\n\n logger.debug('Operator typing', {\n operatorId: message.operatorId,\n operatorName: operatorInfo.name,\n });\n\n const typingMessage: OperatorChatMessage = {\n id: message.operatorId,\n role: MESSAGE_ROLES.OPERATOR,\n content: '',\n status: MESSAGE_STATUS.TYPING,\n timestamp: message.time,\n operatorId: message.operatorId,\n operatorName: operatorInfo.name,\n operatorAvatar: operatorInfo.picture,\n };\n this.addMessage(typingMessage);\n\n // Remove typing indicator after a delay\n setTimeout(() => {\n this.removeTypingMessage(message.operatorId);\n }, 10000);\n } catch (error) {\n logger.error('Error handling typing message', {\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n }\n }\n\n private async handleSeenMessage(message: WSSeenMessage): Promise<void> {\n try {\n const operatorInfo = await this.getOperatorInfo(message.operatorId);\n\n logger.debug('Message seen by operator', {\n operatorId: message.operatorId,\n operatorName: operatorInfo.name,\n seenMessageId: message.seenMessageId,\n });\n } catch (error) {\n logger.error('Error handling seen message', {\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n }\n }\n\n private mapConversationToLiveLeaderMessages(conversation: Conversation): LiveLeaderMessage[] {\n const messages: LiveLeaderMessage[] = [];\n\n for (const message of Object.values(conversation.messages)) {\n if (message.role === MESSAGE_ROLES.USER || message.role === MESSAGE_ROLES.ASSISTANT) {\n messages.push({\n role:\n message.role === MESSAGE_ROLES.USER ? MESSAGE_ROLES.VISITOR : MESSAGE_ROLES.ASSISTANT,\n text: message.content,\n time: message.timestamp,\n });\n }\n }\n\n return messages;\n }\n\n private addMessage(message: ChatMessage): void {\n const newMessages = { ...this._host.conversation.messages, [message.id]: message };\n this._host.conversation = {\n ...this._host.conversation,\n messages: newMessages,\n };\n this._host.requestUpdate();\n }\n\n private createVisitorMessage(data: SendMessageResponse): VisitorChatMessage {\n return {\n id: data.id,\n role: MESSAGE_ROLES.VISITOR,\n content: data.text,\n timestamp: data.time,\n status: MESSAGE_STATUS.COMPLETED,\n };\n }\n\n private removeTypingMessage(messageId: string): void {\n const newMessages = { ...this._host.conversation.messages };\n delete newMessages[messageId];\n this._host.conversation = {\n ...this._host.conversation,\n messages: newMessages,\n };\n this._host.requestUpdate();\n }\n\n private async createOperatorMessage(data: WSTextMessage): Promise<OperatorChatMessage> {\n const operatorInfo = await this.getOperatorInfo(data.operatorId);\n\n if (data.operatorId in this._host.conversation.messages) {\n this.removeTypingMessage(data.operatorId);\n }\n\n return {\n id: data.id,\n role: MESSAGE_ROLES.OPERATOR,\n content: data.text,\n timestamp: data.time,\n status: MESSAGE_STATUS.COMPLETED,\n operatorId: data.operatorId,\n operatorName: operatorInfo.name,\n operatorAvatar: operatorInfo.picture,\n };\n }\n\n private createSystemMessage(\n message: string,\n status: SystemChatMessage['status']\n ): SystemChatMessage {\n return {\n id: uuidv4(),\n role: MESSAGE_ROLES.SYSTEM,\n content: message,\n status,\n timestamp: new Date().toISOString(),\n };\n }\n}\n","import { css } from 'lit';\n\nexport const globalStyles = css`\n :host,\n :root {\n --font-family-base: 'Inter', sans-serif;\n --font-size-xs: 11px;\n --font-size-sm: 12px;\n --font-size-md: 14px;\n --font-size-lg: 16px;\n --font-size-xl: 20px;\n --font-size-2xl: 24px;\n --font-size-3xl: 36px;\n\n --font-size-body-sm: var(--font-size-sm);\n --font-size-body-md: var(--font-size-md);\n --font-size-body-lg: var(--font-size-lg);\n\n --font-weight-regular: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n\n --lineheight-xs: var(--size-16);\n --lineheight-sm: var(--size-20);\n --lineheight-md: var(--size-20);\n --lineheight-lg: var(--size-24);\n --lineheight-xl: var(--size-32);\n --lineheight-2xl: var(--size-36);\n --lineheight-3xl: var(--size-56);\n\n --tracking-xs: 0.08px;\n --tracking-sm: 0px;\n --tracking-md: -0.096px;\n --tracking-lg: -0.176px;\n --tracking-xl: -0.272px;\n --tracking-2xl: -0.304px;\n --tracking-3xl: -0.352px;\n\n --color-primary-70: #2a6480;\n --color-primary-90: #133445;\n --color-secondary-default: #fae0ce;\n --color-neutral-10: #f2f3f5;\n --color-neutral-20: #e2e4e9;\n\n --text-headings: #133445;\n --text-body: #133445;\n --text-action: #1f4e66;\n --text-action-hover: #133445;\n --text-disabled: #b9b9b9;\n --text-information: #133445;\n --text-on-action: #fcf0e7;\n --text-link-visited: #591ab5;\n --text-disable-selected: #6f7687;\n --text-on-disabled: #6f7687;\n --text-code: #e5e7eb;\n\n --surface-primary: #ffffff;\n --surface-page: #f2f3f5;\n --surface-disabled: #e2e4e9;\n --surface-information: #edf4fe;\n --surface-action: #1f4e66;\n --surface-action-hover: #133445;\n --surface-action-hover-2: #fae0ce;\n --surface-code: #1f2937;\n\n --border-primary: #cccfd7;\n --border-disabled: #cccfd7;\n --border-action: #1f4e66;\n --border-action-hover: #377ea0;\n --border-action-hover-2: #f5c3a1;\n --border-focus: #1f4e66;\n\n --icon-primary: #133445;\n --icon-success: #448548;\n --icon-error: #cc453e;\n --icon-on-disabled: #6f7687;\n --icon-on-action: #fae0ce;\n --icon-action: #1f4e66;\n --icon-action-hover: #377ea0;\n --icon-disabled: #cccfd7;\n\n --border-width-none: 0px;\n --border-width-sm: 1px;\n --border-width-md: 2px;\n --border-width-lg: 4px;\n\n --radius-round: 100%;\n --radius-default: 4px;\n --radius-sharp: 0.28px;\n\n --size-0: 0px;\n --size-2: 2px;\n --size-4: 4px;\n --size-6: 6px;\n --size-8: 8px;\n --size-10: 10px;\n --size-12: 12px;\n --size-14: 14px;\n --size-16: 16px;\n --size-20: 20px;\n --size-24: 24px;\n --size-28: 28px;\n --size-30: 30px;\n --size-32: 32px;\n --size-36: 36px;\n --size-40: 40px;\n --size-48: 48px;\n --size-56: 56px;\n --size-64: 64px;\n\n font-family: var(--font-family-base);\n font-optical-sizing: auto;\n font-style: normal;\n font-weight: var(--font-weight-bold);\n font-size: var(--font-size-md);\n line-height: var(--lineheight-md);\n letter-spacing: var(--tracking-md);\n }\n`;\n","import { adoptStyles, LitElement } from 'lit';\n\nimport { globalStyles } from '@/styles';\n\nconst StyleMixin = <T extends LitMixin>(Base: T): T =>\n class extends Base {\n override connectedCallback() {\n super.connectedCallback();\n if (this.shadowRoot) {\n adoptStyles(this.shadowRoot, [globalStyles, ...this.shadowRoot.adoptedStyleSheets]);\n }\n }\n };\n\nexport class BaseComponent extends StyleMixin(LitElement) {\n constructor() {\n super();\n const font = document.createElement('link');\n font.href =\n 'https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap';\n font.rel = 'stylesheet';\n document.head.appendChild(font);\n }\n}\n","import { css } from 'lit';\n\nexport const chatStyles = css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n }\n .chat-container {\n flex: 1 1 0;\n }\n`;\n","import { html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\n\nimport { ChatController } from '@/controllers/chat-controller';\nimport { SupportController } from '@/controllers/support-controller';\nimport { ActionApprovalEvent } from '@/types/events';\nimport { ChatControllerHost } from '@/types/interfaces/chat-controller-host';\nimport { Conversation } from '@/types/models/conversation';\n\nimport { BaseComponent } from '../base';\nimport { CardContent } from '../card/card-content';\n\nimport { chatStyles } from './chat.styles';\n\n@customElement('gaia-chat')\nexport class ChatContainer extends BaseComponent implements ChatControllerHost {\n static styles = [chatStyles];\n\n private readonly chatController: ChatController;\n private readonly supportController: SupportController;\n\n private cardContentRef = createRef<CardContent>();\n\n constructor() {\n super();\n this.chatController = new ChatController(this);\n this.supportController = new SupportController(this);\n }\n\n public onMessageAdded() {\n this.requestUpdate();\n const chatContent = this.cardContentRef.value;\n if (!chatContent?.shadowRoot) return;\n\n const messageWrapper = chatContent.shadowRoot.querySelector<HTMLDivElement>('.content');\n const scroller = chatContent.shadowRoot.querySelector<HTMLDivElement>('.scroller');\n const slot = chatContent.shadowRoot.querySelector<HTMLSlotElement>('slot');\n if (!messageWrapper || !scroller || !slot) return;\n\n const messages = slot.assignedElements();\n if (messages.length === 0) return;\n const lastMessage = messages[messages.length - 1] as HTMLElement;\n\n const scrollerRect = scroller.getBoundingClientRect();\n\n const replySpace = scrollerRect.height - 52 - 8; // view height - message height - padding\n\n messageWrapper.style.height = `${lastMessage.offsetTop + lastMessage.offsetHeight + replySpace}px`;\n\n const scrollOffset =\n lastMessage.offsetTop - (scroller.clientHeight - lastMessage.offsetHeight - replySpace);\n\n scroller.scrollTo({ top: scrollOffset, behavior: 'smooth' });\n\n if (scroller.scrollTop < 0) scroller.scrollTop = 0;\n }\n\n @property({ type: String, attribute: 'profile-id' })\n profileId: string | null = null;\n\n @property({ type: String, attribute: 'base-url' })\n baseUrl: string =\n 'https://ca-aiasst-api-stag-noe.salmonsea-e473e4fa.norwayeast.azurecontainerapps.io';\n\n @property({ type: String, attribute: 'team-id' })\n teamId: string | null = null;\n\n @state()\n conversation: Conversation = {\n id: null,\n messages: {},\n };\n\n @state()\n loading = false;\n\n private _newConversation() {\n this.supportController.disconnectFromSupport();\n this.conversation = {\n id: null,\n messages: {},\n };\n }\n\n handleConnectSupport() {\n if (!this.teamId) {\n return;\n }\n\n this.supportController.connectToSupport(this.conversation, this.teamId);\n }\n\n handleSendMessage(event: CustomEvent<string>) {\n this.onMessageAdded();\n if (this.supportController.isConnected) {\n this.supportController.sendMessage(event.detail);\n } else {\n this.chatController.sendMessage(event.detail);\n }\n }\n\n handleActionApproval(event: ActionApprovalEvent) {\n this.chatController.sendActionApproval(event);\n }\n\n render() {\n return html`\n <div class=\"chat-container\">\n <gaia-card>\n <gaia-card-header title=\"Assistant\">\n <gaia-button\n variant=\"ghost\"\n size=\"icon-sm\"\n icon=\"square-pen\"\n @click=${this._newConversation}\n ></gaia-button>\n <gaia-menu>\n <gaia-menu-item iconLeft=\"trash-2\" label=\"Clear data history\">\n By clearing data history, the chat will be restarted.\n </gaia-menu-item>\n <gaia-spacing></gaia-spacing>\n <gaia-menu-item\n iconLeft=\"info\"\n iconRight=\"arrow-up-right\"\n label=\"Learn more\"\n ></gaia-menu-item>\n <gaia-menu-item\n iconLeft=\"text\"\n iconRight=\"arrow-up-right\"\n label=\"Terms of use\"\n ></gaia-menu-item>\n <gaia-menu-item\n iconLeft=\"shield\"\n iconRight=\"arrow-up-right\"\n label=\"Privacy statement\"\n ></gaia-menu-item>\n <gaia-spacing></gaia-spacing>\n <gaia-menu-item\n iconLeft=\"thumbs-up\"\n iconRight=\"arrow-up-right\"\n label=\"Give feedback\"\n ></gaia-menu-item>\n </gaia-menu>\n </gaia-card-header>\n <gaia-card-content ${ref(this.cardContentRef)}>\n <!--\n Uncomment this to enable support chat\n <gaia-button @click=${this.handleConnectSupport}>Connect to support</gaia-button> \n -->\n ${Object.values(this.conversation.messages)\n .filter((message) => message.role !== 'tool')\n .map(\n (message) => html`\n <gaia-chat-message\n .data=${message}\n @action-approval=${this.handleActionApproval}\n ></gaia-chat-message>\n `\n )}\n ${this.loading ? html`<gaia-chat-message loading></gaia-chat-message>` : ''}\n </gaia-card-content>\n <gaia-card-footer>\n <gaia-chat-input @send-message=${this.handleSendMessage}></gaia-chat-input>\n </gaia-card-footer>\n </gaia-card>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gaia-chat': ChatContainer;\n }\n}\n","import { css } from 'lit';\n\nexport const loaderStyles = css`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-regular);\n line-height: var(--lineheight-sm);\n letter-spacing: var(--tracking-sm);\n color: var(--text-body);\n gap: var(--size-4);\n }\n\n :host([alignment='right']) {\n flex-direction: row-reverse;\n }\n\n .loader-text {\n box-sizing: border-box;\n }\n\n /**\n * Spinner Animation\n */\n\n :host([type='spinner']) .loader {\n width: var(--size-16);\n height: var(--size-16);\n border-style: solid;\n border-color: var(--color-secondary-default);\n border-top-color: var(--color-primary-70);\n border-radius: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n animation: spin 1.2s linear infinite;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0);\n }\n 25% {\n transform: rotate(90deg);\n }\n 50% {\n transform: rotate(180deg);\n }\n 75% {\n transform: rotate(270deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n\n /**\n * Typing Animation\n */\n\n :host([type='typing']) {\n --typing-dot-size: 8px;\n --typing-dot-padding: 4px;\n --typing-dot-highlight-color: var(--icon-primary);\n --typing-dot-color: var(--surface-disabled);\n }\n\n :host([type='typing']) .loader {\n width: var(--typing-dot-size);\n height: var(--typing-dot-size);\n transform: translateX(calc(var(--typing-dot-size) + var(--typing-dot-padding)));\n border-radius: 50%;\n margin-right: calc((var(--typing-dot-size) + var(--typing-dot-padding)) * 2);\n display: block;\n position: relative;\n background: var(--typing-dot-color);\n box-shadow:\n calc((var(--typing-dot-size) + var(--typing-dot-padding)) * -1) 0 var(--typing-dot-color),\n calc(var(--typing-dot-size) + var(--typing-dot-padding)) 0 var(--typing-dot-color);\n animation: typing 3s linear infinite;\n }\n\n @keyframes typing {\n 33% {\n background: var(--typing-dot-color);\n box-shadow:\n calc((var(--typing-dot-size) + var(--typing-dot-padding)) * -1) 0\n var(--typing-dot-highlight-color),\n calc(var(--typing-dot-size) + var(--typing-dot-padding)) 0 var(--typing-dot-color);\n }\n 66% {\n background: var(--typing-dot-highlight-color);\n box-shadow:\n calc((var(--typing-dot-size) + var(--typing-dot-padding)) * -1) 0 var(--typing-dot-color),\n calc(var(--typing-dot-size) + var(--typing-dot-padding)) 0 var(--typing-dot-color);\n }\n 100% {\n background: var(--typing-dot-color);\n box-shadow:\n calc((var(--typing-dot-size) + var(--typing-dot-padding)) * -1) 0 var(--typing-dot-color),\n calc(var(--typing-dot-size) + var(--typing-dot-padding)) 0 var(--typing-dot-highlight-color);\n }\n }\n\n /**\n * Thinking Animation\n */\n\n :host([type='thinking']) {\n --thinking-dot-size: 24px;\n --thinking-dot-color: var(--icon-primary);\n }\n\n :host([type='thinking']) .loader {\n width: var(--thinking-dot-size);\n height: var(--thinking-dot-size);\n display: inline-block;\n position: relative;\n }\n\n :host([type='thinking']) .loader::after,\n :host([type='thinking']) .loader::before {\n content: '';\n box-sizing: border-box;\n width: var(--thinking-dot-size);\n height: var(--thinking-dot-size);\n border-radius: 50%;\n background: var(--thinking-dot-color);\n position: absolute;\n left: 0;\n top: 0;\n opacity: 0;\n animation: thinking 1500ms linear infinite;\n }\n :host([type='thinking']) .loader::after {\n animation-delay: 750ms;\n }\n\n @keyframes thinking {\n 0% {\n transform: scale(0);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n opacity: 0;\n }\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { loaderStyles } from './loader.styles';\n\n@customElement('gaia-loader')\nexport class Loader extends LitElement {\n static styles = [loaderStyles];\n\n @property({ type: String, attribute: 'type', reflect: true })\n type: 'spinner' | 'typing' | 'thinking' = 'spinner';\n\n @property({ type: String, attribute: 'alignment', reflect: true })\n alignment: 'left' | 'right' = 'left';\n\n @property({ type: Boolean, attribute: 'show-text' })\n showText: boolean = true;\n\n @property({ type: String, attribute: 'text' })\n text: string | undefined = undefined;\n\n render() {\n return html`\n <div class=\"loader\" role=\"status\" aria-live=\"polite\" aria-busy=\"true\"></div>\n ${this.text && this.showText ? html`<span class=\"loader-text\">${this.text}</span>` : ''}\n `;\n }\n}\n","import { css } from 'lit';\n\nexport const menuStyles = css`\n .menu {\n display: inline-flex;\n position: relative;\n }\n\n .menu__button {\n display: inline-flex;\n border-radius: var(--radius-default);\n }\n\n .menu__button.active {\n outline: var(--border-width-md) solid var(--border-focus);\n }\n\n .menu__content {\n display: none;\n }\n\n .menu__content.open {\n display: block;\n width: 206px;\n position: absolute;\n z-index: 1000;\n transform: translateY(var(--border-width-md)) translateX(var(--border-width-md));\n /* padding: var(--size-4) var(--size-0) var(--size-4) var(--size-8); */\n top: 100%;\n right: 0;\n background-color: var(--surface-primary);\n border: var(--border-width-sm) solid var(--border-primary);\n border-radius: var(--radius-default);\n box-shadow:\n -2px 0px 5px 0px #1334451a,\n -8px 0px 8px 0px #13344517,\n -19px 0px 11px 0px #1334450d,\n -34px 0px 14px 0px #13344503,\n -53px 0px 15px 0px #13344500;\n }\n`;\n","import classnames from 'classnames';\nimport { LitElement, html } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\n\nimport { menuStyles } from './menu.styles';\n\n@customElement('gaia-menu')\nexport class Menu extends LitElement {\n static styles = [menuStyles];\n\n @state()\n open = false;\n\n private boundHandleClickOutside = this.handleClickOutside.bind(this);\n\n toggleDropdown(event: Event) {\n event.stopPropagation();\n this.open = !this.open;\n\n if (this.open) {\n document.addEventListener('click', this.boundHandleClickOutside);\n } else {\n document.removeEventListener('click', this.boundHandleClickOutside);\n }\n }\n\n handleClickOutside(event: MouseEvent) {\n if (this.open && !this.contains(event.target as Node)) {\n this.open = false;\n document.removeEventListener('click', this.boundHandleClickOutside);\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('click', this.boundHandleClickOutside);\n }\n\n render() {\n return html`\n <div class=\"menu\">\n <div\n class=${classnames('menu__button', {\n active: this.open,\n })}\n >\n <gaia-button\n variant=\"ghost\"\n size=\"icon-sm\"\n icon=\"ellipsis\"\n @click=${this.toggleDropdown}\n ></gaia-button>\n </div>\n <div\n class=${classnames('menu__content', {\n open: this.open,\n })}\n >\n <slot></slot>\n </div>\n </div>\n `;\n }\n}\n","import { css } from 'lit';\n\nexport const menuItemStyles = css`\n .menu-item {\n display: flex;\n align-items: flex-start;\n gap: var(--size-8);\n padding: var(--size-8) var(--size-12) var(--size-8) var(--size-12);\n border-bottom-width: var(--border-width-sm);\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n }\n\n .menu-item:hover:not(.menu-item--disabled) {\n background-color: var(--surface-action-hover-2);\n cursor: pointer;\n }\n\n .menu-item:hover:not(.menu-item--disabled) .menu-item__label {\n color: var(--text-action-hover);\n }\n\n .menu-item__content {\n display: inline-flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: flex-start;\n width: 100%;\n flex: 1 1 0;\n }\n\n .menu-item__label {\n display: inline-flex;\n align-items: center;\n height: var(--size-20);\n font-weight: var(--font-weight-medium);\n line-height: var(--size-16);\n color: var(--text-action);\n }\n\n .menu-item__description {\n font-size: var(--font-size-xs);\n font-weight: var(--font-weight-regular);\n line-height: var(--lineheight-xs);\n letter-spacing: var(--tracking-xs);\n color: var(--text-disable-selected);\n }\n\n .menu-item__icon {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n padding-top: var(--size-2);\n padding-bottom: var(--size-2);\n }\n\n .menu-item__icon svg {\n color: var(--icon-primary);\n width: var(--size-16);\n height: var(--size-16);\n }\n\n .menu-item--disabled .menu-item__label {\n color: var(--text-disable-selected);\n }\n\n .menu-item--disabled .menu-item__icon svg {\n color: var(--icon-on-disabled);\n }\n\n .menu-item--disabled .menu-item__description {\n color: var(--text-disable-selected);\n }\n`;\n","import classnames from 'classnames';\nimport { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\n\nimport { ICON_MAP } from '@/constants/icon-map';\nimport { Icon } from '@/types/icons';\n\nimport { menuItemStyles } from './menu-item.styles';\n\n@customElement('gaia-menu-item')\nexport class MenuItem extends LitElement {\n static styles = [menuItemStyles];\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @property({ type: String })\n iconLeft: Icon | undefined;\n\n @property({ type: String })\n iconRight: Icon | undefined;\n\n @property({ type: String })\n label: string | undefined;\n\n render() {\n return html`\n <div\n class=\"menu-item ${classnames({\n 'menu-item--disabled': this.disabled,\n })}\"\n >\n ${this.iconLeft &&\n html`<div class=\"menu-item__icon menu-item__icon--left\">\n ${unsafeSVG(ICON_MAP[this.iconLeft])}\n </div>`}\n <span class=\"menu-item__content\">\n <span class=\"menu-item__label\">${this.label}</span>\n <span class=\"menu-item__description\">\n <slot></slot>\n </span>\n </span>\n ${this.iconRight &&\n html`<div class=\"menu-item__icon menu-item__icon--right\">\n ${unsafeSVG(ICON_MAP[this.iconRight])}\n </div>`}\n </div>\n `;\n }\n}\n","import { css } from 'lit';\n\nexport const popoverStyles = css`\n :host {\n display: none;\n box-sizing: border-box;\n position: relative;\n height: 100%;\n width: 100%;\n background-color: var(--surface-primary);\n border: var(--border-width-sm) solid var(--color-neutral-20);\n box-shadow:\n -2px 0px 5px 0px #1334451a,\n -8px 0px 8px 0px #13344517,\n -19px 0px 11px 0px #1334450d,\n -34px 0px 14px 0px #13344503,\n -53px 0px 15px 0px #13344500;\n }\n\n :host([open]) {\n display: flex;\n }\n`;\n","import { html, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { BaseComponent } from '@/components/base';\n\nimport { popoverStyles } from './popover.styles';\n\n@customElement('gaia-popover')\nexport class Popover extends BaseComponent {\n static styles = [popoverStyles];\n\n @property({\n type: Boolean,\n attribute: 'open',\n reflect: true,\n })\n open = true;\n\n updated(changedProperties: PropertyValues) {\n if (changedProperties.has('open')) {\n this.toggle();\n }\n }\n\n private boundHandleClickOutside = this.handleClickOutside.bind(this);\n\n toggle() {\n if (this.open) {\n document.addEventListener('click', this.boundHandleClickOutside);\n } else {\n document.removeEventListener('click', this.boundHandleClickOutside);\n }\n }\n\n handleClickOutside(event: MouseEvent) {\n if (this.open && !this.contains(event.target as Node)) {\n this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('click', this.boundHandleClickOutside);\n }\n\n render() {\n return html` <slot></slot> `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gaia-popover': Popover;\n }\n}\n","import { css } from 'lit';\n\nexport const spacingStyles = css`\n :host {\n align-items: center;\n }\n\n :host:has(.spacing--horizontal) {\n display: flex;\n width: 100%;\n flex-direction: row;\n }\n\n :host:has(.spacing--vertical) {\n display: inline-flex;\n height: 100%;\n flex-direction: column;\n }\n\n .spacing {\n background-color: var(--border-primary);\n }\n\n .spacing--horizontal {\n height: 1px;\n width: 100%;\n margin: var(--size-4) 0;\n }\n\n .spacing--vertical {\n display: inline-flex;\n width: 1px;\n margin: 0 var(--size-4);\n height: var(--size-16);\n }\n`;\n","import classnames from 'classnames';\nimport { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { spacingStyles } from './spacing.styles';\n\n@customElement('gaia-spacing')\nexport class Spacing extends LitElement {\n static styles = [spacingStyles];\n\n @property({ type: String })\n direction: 'vertical' | 'horizontal' = 'horizontal';\n\n render() {\n return html`\n <div\n class=\"spacing ${classnames({\n 'spacing--vertical': this.direction === 'vertical',\n 'spacing--horizontal': this.direction === 'horizontal',\n })}\"\n ></div>\n `;\n }\n}\n","import { css } from 'lit';\n\nexport const tooltipStyles = css`\n :host {\n position: relative;\n display: inline-flex;\n }\n\n .tooltip {\n position: absolute;\n background-color: var(--surface-action-hover);\n display: flex;\n min-width: fit-content;\n width: max-content;\n max-width: 400px;\n flex-direction: column;\n gap: var(--size-4);\n padding: var(--size-8);\n border-radius: var(--radius-default);\n color: var(--text-on-action);\n pointer-events: none;\n z-index: 1000;\n opacity: 0;\n visibility: hidden;\n transition:\n opacity 300ms ease-in-out,\n visibility 300ms ease-in-out;\n }\n\n .tooltip[open] {\n opacity: 1;\n visibility: visible;\n }\n\n .tooltip::after {\n content: '';\n position: absolute;\n box-sizing: border-box;\n border-width: 8px;\n border-style: solid;\n }\n\n .tooltip .tooltip__title {\n font-weight: var(--font-weight-semibold);\n }\n\n .tooltip .tooltip__text {\n font-weight: var(--font-weight-regular);\n }\n\n /* Bottom */\n\n :host([position='bottom']) .tooltip {\n top: calc(100% + var(--size-10));\n }\n\n :host([position='bottom']) .tooltip::after {\n bottom: 100%;\n border-color: transparent transparent var(--surface-action-hover) transparent;\n }\n\n :host([position='bottom'][alignment='start']) .tooltip {\n left: 0;\n }\n\n :host([position='bottom'][alignment='start']) .tooltip::after {\n left: var(--size-24);\n }\n\n :host([position='bottom'][alignment='center']) .tooltip {\n left: 50%;\n transform: translateX(-50%);\n }\n\n :host([position='bottom'][alignment='center']) .tooltip::after {\n left: 50%;\n transform: translateX(-50%);\n }\n\n :host([position='bottom'][alignment='end']) .tooltip {\n right: 0;\n }\n\n :host([position='bottom'][alignment='end']) .tooltip::after {\n right: var(--size-24);\n }\n\n /* Right */\n\n :host([position='right']) .tooltip {\n left: calc(100% + var(--size-10));\n }\n\n :host([position='right']) .tooltip::after {\n right: 100%;\n border-color: transparent var(--surface-action-hover) transparent transparent;\n }\n\n :host([position='right'][alignment='start']) .tooltip {\n top: 0;\n }\n\n :host([position='right'][alignment='start']) .tooltip::after {\n top: var(--size-24);\n }\n\n :host([position='right'][alignment='center']) .tooltip {\n top: 50%;\n transform: translateY(-50%);\n }\n\n :host([position='right'][alignment='center']) .tooltip::after {\n top: 50%;\n transform: translateY(-50%);\n }\n\n :host([position='right'][alignment='end']) .tooltip {\n bottom: 0;\n }\n\n :host([position='right'][alignment='end']) .tooltip::after {\n bottom: var(--size-24);\n }\n\n /* Top */\n\n :host([position='top']) .tooltip {\n bottom: calc(100% + var(--size-10));\n }\n\n :host([position='top']) .tooltip::after {\n top: 100%;\n border-color: var(--surface-action-hover) transparent transparent transparent;\n }\n\n :host([position='top'][alignment='start']) .tooltip {\n left: 0;\n }\n\n :host([position='top'][alignment='start']) .tooltip::after {\n left: var(--size-24);\n }\n\n :host([position='top'][alignment='center']) .tooltip {\n left: 50%;\n transform: translateX(-50%);\n }\n\n :host([position='top'][alignment='center']) .tooltip::after {\n left: 50%;\n transform: translateX(-50%);\n }\n\n :host([position='top'][alignment='end']) .tooltip {\n right: 0;\n }\n\n :host([position='top'][alignment='end']) .tooltip::after {\n right: var(--size-24);\n }\n\n /* Left */\n\n :host([position='left']) .tooltip {\n right: calc(100% + var(--size-10));\n }\n\n :host([position='left']) .tooltip::after {\n left: 100%;\n border-color: transparent transparent transparent var(--surface-action-hover);\n }\n\n :host([position='left'][alignment='start']) .tooltip {\n top: 0;\n }\n\n :host([position='left'][alignment='start']) .tooltip::after {\n top: var(--size-24);\n }\n\n :host([position='left'][alignment='center']) .tooltip {\n top: 50%;\n transform: translateY(-50%);\n }\n\n :host([position='left'][alignment='center']) .tooltip::after {\n top: 50%;\n transform: translateY(-50%);\n }\n\n :host([position='left'][alignment='end']) .tooltip {\n bottom: 0;\n }\n\n :host([position='left'][alignment='end']) .tooltip::after {\n bottom: var(--size-24);\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { tooltipStyles } from './tooltip.styles';\n\n@customElement('gaia-tooltip')\nexport class Tooltip extends LitElement {\n static styles = [tooltipStyles];\n\n @state()\n _open: boolean = false;\n\n @property({ type: String, attribute: 'position', reflect: true })\n position: 'bottom' | 'right' | 'left' | 'top' = 'top';\n\n @property({ type: String, attribute: 'alignment', reflect: true })\n alignment: 'start' | 'center' | 'end' = 'center';\n\n @property({ type: String, attribute: 'title' })\n title: string = '';\n\n @property({ type: String, attribute: 'text' })\n text: string = '';\n\n @property({ type: Number, attribute: 'delay' })\n delay: number = 500;\n\n @property({ type: Boolean, attribute: 'disabled' })\n disabled: boolean = true; // Disable for now, not working properly\n\n private _timeoutId: number | undefined;\n\n _show() {\n if (this.disabled) return;\n this._timeoutId = window.setTimeout(() => {\n this._open = true;\n }, this.delay);\n }\n\n _hide() {\n if (this._timeoutId) {\n clearTimeout(this._timeoutId);\n this._timeoutId = undefined;\n }\n this._open = false;\n }\n\n render() {\n return html`\n <slot @mouseenter=${this._show} @mouseleave=${this._hide}></slot>\n <div class=\"tooltip\" ?open=${this._open}>\n ${this.title && this.title.length > 0\n ? html`<div class=\"tooltip__title\">${this.title}</div>`\n : null}\n <div class=\"tooltip__text\">${this.text}</div>\n </div>\n `;\n }\n}\n"],"names":["avatarStyles","css","Avatar","LitElement","html","__decorateClass","property","customElement","hasOwn","classNames","classes","i","arg","appendClass","parseValue","key","value","newClass","module","ArrowUpRight","ArrowUp","Copy","Ellipsis","Info","Pin","RefreshCw","Shield","SquareArrowOutUpRight","SquarePen","Text","ThumbsDown","ThumbsUp","Trash2","ICON_MAP","buttonStyles","Button","classnames","unsafeSVG","cardStyles","Card","cardContentStyles","CardContent","cardFooterStyles","CardFooter","cardHeaderStyles","CardHeader","chatInputStyles","ChatInput","style","height","maxHeight","event","state","query","_getDefaults","_defaults","changeDefaults","newDefaults","noopTest","edit","regex","opt","source","obj","name","val","valSource","other","bull","indent","newline","blockCode","fences","hr","heading","bullet","lheadingCore","lheading","lheadingGfm","_paragraph","blockText","_blockLabel","def","list","_tag","_comment","paragraph","blockquote","blockNormal","gfmTable","blockGfm","blockPedantic","escape$1","inlineCode","br","inlineText","_punctuation","_punctuationOrSpace","_notPunctuationOrSpace","punctuation","_punctuationGfmStrongEm","_punctuationOrSpaceGfmStrongEm","_notPunctuationOrSpaceGfmStrongEm","blockSkip","emStrongLDelimCore","emStrongLDelim","emStrongLDelimGfm","emStrongRDelimAstCore","emStrongRDelimAst","emStrongRDelimAstGfm","emStrongRDelimUnd","anyPunctuation","autolink","_inlineComment","tag","_inlineLabel","link","reflink","nolink","reflinkSearch","inlineNormal","inlinePedantic","inlineGfm","inlineBreaks","block","inline","escapeReplacements","getEscapeReplacement","ch","escape","encode","cleanUrl","href","splitCells","tableRow","count","row","match","offset","str","escaped","curr","cells","_a","rtrim","c","invert","l","suffLen","findClosingBracket","b","level","outputLink","cap","raw","lexer","rules","title","text","token","indentCodeCompensation","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","_Tokenizer","options","__publicField","src","trimmed","lines","tokens","inBlockquote","currentLines","currentRaw","currentText","top","lastToken","oldToken","newText","newToken","isordered","itemRegex","endsWithBlankLine","endEarly","itemContents","line","t","nextLine","blankLine","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","rawLine","nextLineWithoutTabs","istask","ischecked","lastItem","spacers","hasMultipleLineBreaks","headers","aligns","rows","item","align","cell","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","links","linkString","maskedSrc","prevChar","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","lastCharLength","hasNonSpaceChars","hasSpaceCharsOnBothEnds","prevCapZero","_Lexer","next","lastParagraphClipped","_b","extTokenizer","cutSrc","_c","startIndex","tempSrc","tempStart","getStartIndex","errMsg","keepPrevChar","_Renderer","lang","langString","code","depth","ordered","start","body","j","type","startAttr","itemBody","checkbox","checked","header","k","content","cleanHref","out","_TextRenderer","_Parser","anyToken","genericToken","ret","textToken","renderer","_Hooks","markdown","Marked","args","callback","values","tableToken","listToken","childTokens","extensions","pack","opts","ext","prevRenderer","extLevel","prop","rendererProp","rendererFunc","tokenizer","tokenizerProp","tokenizerFunc","prevTokenizer","hooks","hooksProp","hooksFunc","prevHook","walkTokens","packWalktokens","blockType","origOpt","throwError","parser","e","silent","async","msg","markedInstance","marked","ActionApprovalEvent","messageId","isApproved","isUserChatMessage","message","isAssistantChatMessage","isSystemChatMessage","isVisitorChatMessage","isOperatorChatMessage","chatMessageStyles","markdownStyles","ChatMessage","unsafeHTML","renderExtras","citation","getRandomValues","rnds8","rng","byteToHex","unsafeStringify","arr","randomUUID","native","v4","buf","rnds","API_CONFIG","WEBSOCKET_EVENTS","MESSAGE_ROLES","MESSAGE_STATUS","SERVER_SENT_EVENTS","DEFAULT_VALUES","LogLevel","Logger","context","error","entry","levelName","logMessage","logger","BaseService","baseUrl","url","endpoint","timeout","fetchOptions","requestHeaders","controller","timeoutId","response","contentType","config","data","cleanBaseUrl","cleanEndpoint","ChatService","payload","errorMessage","stream","decoder","reader","jsonBuffer","done","readerDone","chunk","chunks","eventType","jsonString","conversationId","updateObjectAtPathImmutable","path","operation","keys","helper","idx","lastKey","oldVal","newVal","ChatController","host","userMessage","messages","lastMessage","p","o","newMessages","uuidv4","status","LiveleaderService","teamId","operatorId","WebSocketManager","resolve","reject","reason","handler","handlers","delay","SupportController","conversation","webSocketUrl","operatorInfo","typingMessage","globalStyles","StyleMixin","Base","adoptStyles","BaseComponent","font","chatStyles","ChatContainer","createRef","chatContent","messageWrapper","scroller","slot","replySpace","scrollOffset","ref","loaderStyles","Loader","menuStyles","Menu","menuItemStyles","MenuItem","popoverStyles","Popover","changedProperties","spacingStyles","Spacing","tooltipStyles","Tooltip"],"mappings":"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AA,GCApByT,KAAiBzT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,30,36,37,38,39]}
|