/* COPYRIGHT Esri - https://js.arcgis.com/1.2/LICENSE.txt */
import { c as customElement } from "../../chunks/runtime.js";
import { ref } from "lit/directives/ref.js";
import { u as useT9n } from "../../chunks/useT9n.js";
import { LitElement, createEvent, nothing, safeClassMap } from "@arcgis/lumina";
import { css, html } from "lit";
import { render } from "lit-html";
import { unsafeHTML } from "lit/directives/unsafe-html.js";
import { useContextConsumer } from "@arcgis/lumina/context";
import { c as configContext } from "../../chunks/deployAppContexts.js";
import { T as TELEMETRY_CATEGORY } from "../../chunks/interfaces.js";
import { l as calculateDuration } from "../../chunks/helpers.js";
const styles = css`:host {
  display: block;
  height: 100%;
}

.display-flex-row {
  display: flex;
  flex-direction: row;
}

.padding-left-10 {
  padding-left: 10px;
}

.chat-container {
  display: flex;
  flex-direction: column;
  gap: 0px;
  max-width: 600px;
  height: 75%;
  background-color: var(--calcite-color-foreground-3);
  padding: 1px;
}

.chat-container_expanded {
  display: flex;
  flex-direction: column;
  gap: 0px;
  max-width: 100%;
  height: 95%;
  background-color: var(--calcite-color-background);
  border-radius: 10px;
  padding: 10px;
}

.chat-panel {
  --calcite-dialog-header-background-color: var(--calcite-color-brand);
  --calcite-dialog-header-action-background-color: var(--calcite-color-brand);
  --calcite-dialog-heading-text-color: var(--calcite-color-background);
  --calcite-dialog-header-action-text-color: var(--calcite-color-background);
  --calcite-dialog-header-action-text-color-press: var(--calcite-color-background);
  --calcite-dialog-min-size-y: 90vh;
  --calcite-dialog-max-size-y: 90vh;
}

.chat-panel-heading {
  font-size: var(--calcite-font-size-0);
  font-weight: var(--calcite-font-weight-medium);
  color: var(--calcite-color-background, var(--calcite-color-text-1));
}

.chat-messages {
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: 4px;
  height: 100%;
  overflow-y: auto;
}

.user-message {
  align-self: flex-end;
  background: var(--calcite-color-brand);
  border-radius: 8px;
  max-width: 90%;
  --calcite-card-corner-radius: 8px;
  --calcite-card-background-color: var(--calcite-color-brand);
  --calcite-card-border-color: var(--calcite-color-brand);
  color: var(--calcite-color-background);
  text-align: left;
}

.system-message {
  align-self: flex-start;
  background: var(--calcite-color-foreground-2);
  border-radius: 8px;
  max-width: 90%;
  --calcite-card-corner-radius: 8px;
  --calcite-card-background-color: var(--calcite-color-foreground-3);
  --calcite-card-border-color: var(--calcite-color-foreground-3);
  text-align: left;
}

.loader-message {
  align-self: flex-start;
  background: var(--calcite-color-foreground-3);
  border-radius: 8px;
  --calcite-card-corner-radius: 8px;
  --calcite-card-background-color: var(--calcite-color-foreground-3);
  --calcite-card-border-color: var(--calcite-color-foreground-3);
}

.message-content {
  padding: 0px;
  font-size: 14px;
}

.message-content p:first-child {
  margin-top: 0px;
}

.message-content img {
  max-width: 100%;
  height: auto;
  display: block;
  object-fit: contain;
}

.message-content-pad {
  padding-bottom: 10px;
  font-size: 14px;
}

.message-content-summary {
  padding-bottom: 14px;
}

.message-content-alignment {
  display: flex;
  align-items: center; /* Vertically centers icon and text */
  gap: var(--calcite-spacing-md); /* Uses Calcite spacing token */
  font-size: var(--calcite-font-size--1); /* Matches Calcite text size */
  color: var(--calcite-color-text-1); /* Calcite text color */
}

.padding-top-10 {
  padding-top: 10px;
}

.padding-right-8 {
  padding-right: 8px;
}

.padding-left-right-5 {
  padding-right: 5px;
  padding-left: 5px;
}

.chip-content {
  padding-top: 5px;
  padding-bottom: 5px;
  padding-right: 5px;
  padding-left: 0px;
}

.chat-input {
  display: flex;
  flex-direction: row;
  flex-grow: 1;
}

.table-cell {
  --calcite-table-cell-background: var(--calcite-color-foreground-3);
}

.cursor-pointer {
  cursor: pointer;
}

.notice-border-color {
  --temp-initial-brand: var(--calcite-color-brand);
}

.notice-border-color calcite-notice {
  --calcite-color-brand: #ddd;
  --calcite-icon-color: var(--temp-initial-brand);
}

.notice-border-color calcite-notice * {
  --calcite-color-brand: var(--temp-initial-brand);
}

.solution-card {
  padding: 5px 0px 5px 0px;
  text-decoration: none;
  display: block;
  width: 100%;
  cursor: pointer;
}

.solution-card calcite-card {
  display: flex;
  flex-direction: column;
  max-width: 520px;
  overflow: hidden;  /* Hide overflow content */
  --calcite-card-corner-radius: var(--calcite-corner-radius-round) !important;
  --calcite-card-shadow: var(--calcite-shadow-sm);
  --calcite-card-background-color: var(--calcite-card-background-color)
}

.solution-card div[slot="thumbnail"] {
  max-height: 100%;
  width: 100%;
  position: relative;

  &:after {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    transition: all 0.15s ease-in-out;
  }
}

.solution-card div[slot="thumbnail"] img {
  max-height: 100%;
  width: 100%;
  object-fit: cover;
}

.solution-card span[slot="description"] {
  padding-top: 10px;
}

.solution-card calcite-chip {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  visibility: hidden;
  pointer-events: none;
  opacity: 0;
  transition: all 0.15s ease-in-out;
  z-index: 9999;
}

.solution-card:hover calcite-chip {
  visibility: visible;
  opacity: 1;
}

.solution-card:hover div[slot="thumbnail"]:after {
  background-color: rgba(0, 0, 0, 0.5);
}

.solution-card:hover h3 {
  text-decoration: underline;
}

.references-container {
  padding-top: 10px;
  display: block;
}

.references-container.collapsed {
  display: none;
}

.width-100 {
  width: 100%;
}

.disclaimer-div {
  display: flex;
  gap: var(--calcite-spacing-sm); /* Uses Calcite spacing token */
  font-size: var(--calcite-font-size--0); /* Matches Calcite text size */
  color: var(--calcite-color-text-1); /* Calcite text color */
}

.display-none {
  display: none;
}

.chat-messages calcite-fab {
  position: absolute;
  bottom: 16px; /* adjust as needed */
  left: 50%;
  transform: translateX(-50%);
  z-index: 999; /* ensures it stays on top of other elements */
}

.icon-color-background {
  --calcite-button-icon-color: var(--calcite-color-background);
}

/* Hide snippet on very small screens */
@media (max-width: 430px) {
  .solution-card .solution-snippet {
    display: none;
  }
}
`;
const SOLUTIONURL = "https://www.arcgis.com/sharing/rest/content/items/";
async function querySolutions(itemId) {
  const solutionsList = await _requestSolutions(itemId);
  return solutionsList;
}
async function _requestSolutions(itemId) {
  const newURL = SOLUTIONURL + itemId + "?f=json";
  try {
    const response = await fetch(
      newURL,
      { method: "GET" }
    );
    if (!response.ok) {
      throw new Error(`HTTP error! Status: ${response.status}`);
    }
    const data = await response.json();
    return data;
  } catch (error) {
    return { error: error.message };
  }
}
function L() {
  return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null };
}
var T = L();
function Z(u3) {
  T = u3;
}
var C = { exec: () => null };
function k(u3, e = "") {
  let t = typeof u3 == "string" ? u3 : u3.source, n = { replace: (r, i) => {
    let s = typeof i == "string" ? i : i.source;
    return s = s.replace(m.caret, "$1"), t = t.replace(r, s), n;
  }, getRegex: () => new RegExp(t, e) };
  return n;
}
var me = (() => {
  try {
    return !!new RegExp("(?<=1)(?<!1)");
  } catch {
    return false;
  }
})(), m = { codeRemoveIndent: /^(?: {1,4}| {0,3}\t)/gm, outputLinkReplace: /\\([\[\]])/g, indentCodeCompensation: /^(\s+)(?:```)/, beginningSpace: /^\s+/, endingHash: /#$/, startingSpaceChar: /^ /, endingSpaceChar: / $/, nonSpaceChar: /[^ ]/, newLineCharGlobal: /\n/g, tabCharGlobal: /\t/g, multipleSpaceGlobal: /\s+/g, blankLine: /^[ \t]*$/, doubleBlankLine: /\n[ \t]*\n[ \t]*$/, blockquoteStart: /^ {0,3}>/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, listReplaceTabs: /^\t+/, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] +\S/, listReplaceTask: /^\[[ xX]\] +/, listTaskCheckbox: /\[[ xX]\]/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^<a /i, endATag: /^<\/a>/i, startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i, endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i, startAngleBracket: /^</, endAngleBracket: />$/, pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/, unicodeAlphaNumeric: /[\p{L}\p{N}]/u, escapeTest: /[&<>"']/, escapeReplace: /[&<>"']/g, escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, unescapeTest: /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: (u3) => new RegExp(`^( {0,3}${u3})((?:[	 ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: (u3) => new RegExp(`^ {0,${Math.min(3, u3 - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ 	][^\\n]*)?(?:\\n|$))`), hrRegex: (u3) => new RegExp(`^ {0,${Math.min(3, u3 - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`), fencesBeginRegex: (u3) => new RegExp(`^ {0,${Math.min(3, u3 - 1)}}(?:\`\`\`|~~~)`), headingBeginRegex: (u3) => new RegExp(`^ {0,${Math.min(3, u3 - 1)}}#`), htmlBeginRegex: (u3) => new RegExp(`^ {0,${Math.min(3, u3 - 1)}}<(?:[a-z].*>|!--)`, "i") }, xe = /^(?:[ \t]*(?:\n|$))+/, be = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/, Re = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/, I = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/, Te = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/, N = /(?:[*+-]|\d{1,9}[.)])/, re = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/, se = k(re).replace(/bull/g, N).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex(), Oe = k(re).replace(/bull/g, N).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(), Q = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/, we = /^[^\n]+/, F = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/, ye = k(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", F).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(), Pe = k(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, N).getRegex(), v = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul", j = /<!--(?:-?>|[\s\S]*?(?:-->|$))/, Se = k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ 	]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ 	]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ 	]*)+\\n|$))", "i").replace("comment", j).replace("tag", v).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(), ie = k(Q).replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex(), $e = k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", ie).getRegex(), U = { blockquote: $e, code: be, def: ye, fences: Re, heading: Te, hr: I, html: Se, lheading: se, list: Pe, newline: xe, paragraph: ie, table: C, text: we }, te = k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3}	)[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex(), _e = { ...U, lheading: Oe, table: te, paragraph: k(Q).replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", te).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex() }, Le = { ...U, html: k(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", j).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: C, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: k(Q).replace("hr", I).replace("heading", ` *#{1,6} *[^
]`).replace("lheading", se).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() }, Me = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, ze = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, oe = /^( {2,}|\\)\n(?!\s*$)/, Ae = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/, D = /[\p{P}\p{S}]/u, K = /[\s\p{P}\p{S}]/u, ae = /[^\s\p{P}\p{S}]/u, Ce = k(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, K).getRegex(), le = /(?!~)[\p{P}\p{S}]/u, Ie = /(?!~)[\s\p{P}\p{S}]/u, Ee = /(?:[^\s\p{P}\p{S}]|~)/u, Be = k(/link|precode-code|html/, "g").replace("link", /\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-", me ? "(?<!`)()" : "(^^|[^`])").replace("code", /(?<b>`+)[^`]+\k<b>(?!`)/).replace("html", /<(?! )[^<>]*?>/).getRegex(), ue = /^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/, qe = k(ue, "u").replace(/punct/g, D).getRegex(), ve = k(ue, "u").replace(/punct/g, le).getRegex(), pe = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)", De = k(pe, "gu").replace(/notPunctSpace/g, ae).replace(/punctSpace/g, K).replace(/punct/g, D).getRegex(), He = k(pe, "gu").replace(/notPunctSpace/g, Ee).replace(/punctSpace/g, Ie).replace(/punct/g, le).getRegex(), Ze = k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, ae).replace(/punctSpace/g, K).replace(/punct/g, D).getRegex(), Ge = k(/\\(punct)/, "gu").replace(/punct/g, D).getRegex(), Ne = k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(), Qe = k(j).replace("(?:-->|$)", "-->").getRegex(), Fe = k("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", Qe).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(), q = /(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/, je = k(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label", q).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(), ce = k(/^!?\[(label)\]\[(ref)\]/).replace("label", q).replace("ref", F).getRegex(), he = k(/^!?\[(ref)\](?:\[\])?/).replace("ref", F).getRegex(), Ue = k("reflink|nolink(?!\\()", "g").replace("reflink", ce).replace("nolink", he).getRegex(), ne = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/, W = { _backpedal: C, anyPunctuation: Ge, autolink: Ne, blockSkip: Be, br: oe, code: ze, del: C, emStrongLDelim: qe, emStrongRDelimAst: De, emStrongRDelimUnd: Ze, escape: Me, link: je, nolink: he, punctuation: Ce, reflink: ce, reflinkSearch: Ue, tag: Fe, text: Ae, url: C }, Ke = { ...W, link: k(/^!?\[(label)\]\((.*?)\)/).replace("label", q).getRegex(), reflink: k(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", q).getRegex() }, G = { ...W, emStrongRDelimAst: He, emStrongLDelim: ve, url: k(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol", ne).replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: k(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol", ne).getRegex() }, We = { ...G, br: k(oe).replace("{2,}", "*").getRegex(), text: k(G.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex() }, E = { normal: U, gfm: _e, pedantic: Le }, M = { normal: W, gfm: G, breaks: We, pedantic: Ke };
var Xe = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" }, ke = (u3) => Xe[u3];
function w(u3, e) {
  if (e) {
    if (m.escapeTest.test(u3)) return u3.replace(m.escapeReplace, ke);
  } else if (m.escapeTestNoEncode.test(u3)) return u3.replace(m.escapeReplaceNoEncode, ke);
  return u3;
}
function X(u3) {
  try {
    u3 = encodeURI(u3).replace(m.percentDecode, "%");
  } catch {
    return null;
  }
  return u3;
}
function J(u3, e) {
  let t = u3.replace(m.findPipe, (i, s, a) => {
    let o = false, l = s;
    for (; --l >= 0 && a[l] === "\\"; ) o = !o;
    return o ? "|" : " |";
  }), n = t.split(m.splitPipe), r = 0;
  if (n[0].trim() || n.shift(), n.length > 0 && !n.at(-1)?.trim() && n.pop(), e) if (n.length > e) n.splice(e);
  else for (; n.length < e; ) n.push("");
  for (; r < n.length; r++) n[r] = n[r].trim().replace(m.slashPipe, "|");
  return n;
}
function z(u3, e, t) {
  let n = u3.length;
  if (n === 0) return "";
  let r = 0;
  for (; r < n; ) {
    let i = u3.charAt(n - r - 1);
    if (i === e && true) r++;
    else break;
  }
  return u3.slice(0, n - r);
}
function de(u3, e) {
  if (u3.indexOf(e[1]) === -1) return -1;
  let t = 0;
  for (let n = 0; n < u3.length; n++) if (u3[n] === "\\") n++;
  else if (u3[n] === e[0]) t++;
  else if (u3[n] === e[1] && (t--, t < 0)) return n;
  return t > 0 ? -2 : -1;
}
function ge(u3, e, t, n, r) {
  let i = e.href, s = e.title || null, a = u3[1].replace(r.other.outputLinkReplace, "$1");
  n.state.inLink = true;
  let o = { type: u3[0].charAt(0) === "!" ? "image" : "link", raw: t, href: i, title: s, text: a, tokens: n.inlineTokens(a) };
  return n.state.inLink = false, o;
}
function Je(u3, e, t) {
  let n = u3.match(t.other.indentCodeCompensation);
  if (n === null) return e;
  let r = n[1];
  return e.split(`
`).map((i) => {
    let s = i.match(t.other.beginningSpace);
    if (s === null) return i;
    let [a] = s;
    return a.length >= r.length ? i.slice(r.length) : i;
  }).join(`
`);
}
var y = class {
  options;
  rules;
  lexer;
  constructor(e) {
    this.options = e || T;
  }
  space(e) {
    let t = this.rules.block.newline.exec(e);
    if (t && t[0].length > 0) return { type: "space", raw: t[0] };
  }
  code(e) {
    let t = this.rules.block.code.exec(e);
    if (t) {
      let n = t[0].replace(this.rules.other.codeRemoveIndent, "");
      return { type: "code", raw: t[0], codeBlockStyle: "indented", text: this.options.pedantic ? n : z(n, `
`) };
    }
  }
  fences(e) {
    let t = this.rules.block.fences.exec(e);
    if (t) {
      let n = t[0], r = Je(n, t[3] || "", this.rules);
      return { type: "code", raw: n, lang: t[2] ? t[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t[2], text: r };
    }
  }
  heading(e) {
    let t = this.rules.block.heading.exec(e);
    if (t) {
      let n = t[2].trim();
      if (this.rules.other.endingHash.test(n)) {
        let r = z(n, "#");
        (this.options.pedantic || !r || this.rules.other.endingSpaceChar.test(r)) && (n = r.trim());
      }
      return { type: "heading", raw: t[0], depth: t[1].length, text: n, tokens: this.lexer.inline(n) };
    }
  }
  hr(e) {
    let t = this.rules.block.hr.exec(e);
    if (t) return { type: "hr", raw: z(t[0], `
`) };
  }
  blockquote(e) {
    let t = this.rules.block.blockquote.exec(e);
    if (t) {
      let n = z(t[0], `
`).split(`
`), r = "", i = "", s = [];
      for (; n.length > 0; ) {
        let a = false, o = [], l;
        for (l = 0; l < n.length; l++) if (this.rules.other.blockquoteStart.test(n[l])) o.push(n[l]), a = true;
        else if (!a) o.push(n[l]);
        else break;
        n = n.slice(l);
        let p = o.join(`
`), c = p.replace(this.rules.other.blockquoteSetextReplace, `
    $1`).replace(this.rules.other.blockquoteSetextReplace2, "");
        r = r ? `${r}
${p}` : p, i = i ? `${i}
${c}` : c;
        let g = this.lexer.state.top;
        if (this.lexer.state.top = true, this.lexer.blockTokens(c, s, true), this.lexer.state.top = g, n.length === 0) break;
        let h = s.at(-1);
        if (h?.type === "code") break;
        if (h?.type === "blockquote") {
          let R = h, f = R.raw + `
` + n.join(`
`), O = this.blockquote(f);
          s[s.length - 1] = O, r = r.substring(0, r.length - R.raw.length) + O.raw, i = i.substring(0, i.length - R.text.length) + O.text;
          break;
        } else if (h?.type === "list") {
          let R = h, f = R.raw + `
` + n.join(`
`), O = this.list(f);
          s[s.length - 1] = O, r = r.substring(0, r.length - h.raw.length) + O.raw, i = i.substring(0, i.length - R.raw.length) + O.raw, n = f.substring(s.at(-1).raw.length).split(`
`);
          continue;
        }
      }
      return { type: "blockquote", raw: r, tokens: s, text: i };
    }
  }
  list(e) {
    let t = this.rules.block.list.exec(e);
    if (t) {
      let n = t[1].trim(), r = n.length > 1, i = { type: "list", raw: "", ordered: r, start: r ? +n.slice(0, -1) : "", loose: false, items: [] };
      n = r ? `\\d{1,9}\\${n.slice(-1)}` : `\\${n}`, this.options.pedantic && (n = r ? n : "[*+-]");
      let s = this.rules.other.listItemRegex(n), a = false;
      for (; e; ) {
        let l = false, p = "", c = "";
        if (!(t = s.exec(e)) || this.rules.block.hr.test(e)) break;
        p = t[0], e = e.substring(p.length);
        let g = t[2].split(`
`, 1)[0].replace(this.rules.other.listReplaceTabs, (O) => " ".repeat(3 * O.length)), h = e.split(`
`, 1)[0], R = !g.trim(), f = 0;
        if (this.options.pedantic ? (f = 2, c = g.trimStart()) : R ? f = t[1].length + 1 : (f = t[2].search(this.rules.other.nonSpaceChar), f = f > 4 ? 1 : f, c = g.slice(f), f += t[1].length), R && this.rules.other.blankLine.test(h) && (p += h + `
`, e = e.substring(h.length + 1), l = true), !l) {
          let O = this.rules.other.nextBulletRegex(f), V = this.rules.other.hrRegex(f), Y = this.rules.other.fencesBeginRegex(f), ee = this.rules.other.headingBeginRegex(f), fe = this.rules.other.htmlBeginRegex(f);
          for (; e; ) {
            let H = e.split(`
`, 1)[0], A;
            if (h = H, this.options.pedantic ? (h = h.replace(this.rules.other.listReplaceNesting, "  "), A = h) : A = h.replace(this.rules.other.tabCharGlobal, "    "), Y.test(h) || ee.test(h) || fe.test(h) || O.test(h) || V.test(h)) break;
            if (A.search(this.rules.other.nonSpaceChar) >= f || !h.trim()) c += `
` + A.slice(f);
            else {
              if (R || g.replace(this.rules.other.tabCharGlobal, "    ").search(this.rules.other.nonSpaceChar) >= 4 || Y.test(g) || ee.test(g) || V.test(g)) break;
              c += `
` + h;
            }
            !R && !h.trim() && (R = true), p += H + `
`, e = e.substring(H.length + 1), g = A.slice(f);
          }
        }
        i.loose || (a ? i.loose = true : this.rules.other.doubleBlankLine.test(p) && (a = true)), i.items.push({ type: "list_item", raw: p, task: !!this.options.gfm && this.rules.other.listIsTask.test(c), loose: false, text: c, tokens: [] }), i.raw += p;
      }
      let o = i.items.at(-1);
      if (o) o.raw = o.raw.trimEnd(), o.text = o.text.trimEnd();
      else return;
      i.raw = i.raw.trimEnd();
      for (let l of i.items) {
        if (this.lexer.state.top = false, l.tokens = this.lexer.blockTokens(l.text, []), l.task) {
          if (l.text = l.text.replace(this.rules.other.listReplaceTask, ""), l.tokens[0]?.type === "text" || l.tokens[0]?.type === "paragraph") {
            l.tokens[0].raw = l.tokens[0].raw.replace(this.rules.other.listReplaceTask, ""), l.tokens[0].text = l.tokens[0].text.replace(this.rules.other.listReplaceTask, "");
            for (let c = this.lexer.inlineQueue.length - 1; c >= 0; c--) if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[c].src)) {
              this.lexer.inlineQueue[c].src = this.lexer.inlineQueue[c].src.replace(this.rules.other.listReplaceTask, "");
              break;
            }
          }
          let p = this.rules.other.listTaskCheckbox.exec(l.raw);
          if (p) {
            let c = { type: "checkbox", raw: p[0] + " ", checked: p[0] !== "[ ]" };
            l.checked = c.checked, i.loose ? l.tokens[0] && ["paragraph", "text"].includes(l.tokens[0].type) && "tokens" in l.tokens[0] && l.tokens[0].tokens ? (l.tokens[0].raw = c.raw + l.tokens[0].raw, l.tokens[0].text = c.raw + l.tokens[0].text, l.tokens[0].tokens.unshift(c)) : l.tokens.unshift({ type: "paragraph", raw: c.raw, text: c.raw, tokens: [c] }) : l.tokens.unshift(c);
          }
        }
        if (!i.loose) {
          let p = l.tokens.filter((g) => g.type === "space"), c = p.length > 0 && p.some((g) => this.rules.other.anyLine.test(g.raw));
          i.loose = c;
        }
      }
      if (i.loose) for (let l of i.items) {
        l.loose = true;
        for (let p of l.tokens) p.type === "text" && (p.type = "paragraph");
      }
      return i;
    }
  }
  html(e) {
    let t = this.rules.block.html.exec(e);
    if (t) return { type: "html", block: true, raw: t[0], pre: t[1] === "pre" || t[1] === "script" || t[1] === "style", text: t[0] };
  }
  def(e) {
    let t = this.rules.block.def.exec(e);
    if (t) {
      let n = t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, " "), r = t[2] ? t[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", i = t[3] ? t[3].substring(1, t[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t[3];
      return { type: "def", tag: n, raw: t[0], href: r, title: i };
    }
  }
  table(e) {
    let t = this.rules.block.table.exec(e);
    if (!t || !this.rules.other.tableDelimiter.test(t[2])) return;
    let n = J(t[1]), r = t[2].replace(this.rules.other.tableAlignChars, "").split("|"), i = t[3]?.trim() ? t[3].replace(this.rules.other.tableRowBlankLine, "").split(`
`) : [], s = { type: "table", raw: t[0], header: [], align: [], rows: [] };
    if (n.length === r.length) {
      for (let a of r) this.rules.other.tableAlignRight.test(a) ? s.align.push("right") : this.rules.other.tableAlignCenter.test(a) ? s.align.push("center") : this.rules.other.tableAlignLeft.test(a) ? s.align.push("left") : s.align.push(null);
      for (let a = 0; a < n.length; a++) s.header.push({ text: n[a], tokens: this.lexer.inline(n[a]), header: true, align: s.align[a] });
      for (let a of i) s.rows.push(J(a, s.header.length).map((o, l) => ({ text: o, tokens: this.lexer.inline(o), header: false, align: s.align[l] })));
      return s;
    }
  }
  lheading(e) {
    let t = this.rules.block.lheading.exec(e);
    if (t) return { type: "heading", raw: t[0], depth: t[2].charAt(0) === "=" ? 1 : 2, text: t[1], tokens: this.lexer.inline(t[1]) };
  }
  paragraph(e) {
    let t = this.rules.block.paragraph.exec(e);
    if (t) {
      let n = t[1].charAt(t[1].length - 1) === `
` ? t[1].slice(0, -1) : t[1];
      return { type: "paragraph", raw: t[0], text: n, tokens: this.lexer.inline(n) };
    }
  }
  text(e) {
    let t = this.rules.block.text.exec(e);
    if (t) return { type: "text", raw: t[0], text: t[0], tokens: this.lexer.inline(t[0]) };
  }
  escape(e) {
    let t = this.rules.inline.escape.exec(e);
    if (t) return { type: "escape", raw: t[0], text: t[1] };
  }
  tag(e) {
    let t = this.rules.inline.tag.exec(e);
    if (t) return !this.lexer.state.inLink && this.rules.other.startATag.test(t[0]) ? this.lexer.state.inLink = true : this.lexer.state.inLink && this.rules.other.endATag.test(t[0]) && (this.lexer.state.inLink = false), !this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(t[0]) ? this.lexer.state.inRawBlock = true : this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(t[0]) && (this.lexer.state.inRawBlock = false), { type: "html", raw: t[0], inLink: this.lexer.state.inLink, inRawBlock: this.lexer.state.inRawBlock, block: false, text: t[0] };
  }
  link(e) {
    let t = this.rules.inline.link.exec(e);
    if (t) {
      let n = t[2].trim();
      if (!this.options.pedantic && this.rules.other.startAngleBracket.test(n)) {
        if (!this.rules.other.endAngleBracket.test(n)) return;
        let s = z(n.slice(0, -1), "\\");
        if ((n.length - s.length) % 2 === 0) return;
      } else {
        let s = de(t[2], "()");
        if (s === -2) return;
        if (s > -1) {
          let o = (t[0].indexOf("!") === 0 ? 5 : 4) + t[1].length + s;
          t[2] = t[2].substring(0, s), t[0] = t[0].substring(0, o).trim(), t[3] = "";
        }
      }
      let r = t[2], i = "";
      if (this.options.pedantic) {
        let s = this.rules.other.pedanticHrefTitle.exec(r);
        s && (r = s[1], i = s[3]);
      } else i = t[3] ? t[3].slice(1, -1) : "";
      return r = r.trim(), this.rules.other.startAngleBracket.test(r) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(n) ? r = r.slice(1) : r = r.slice(1, -1)), ge(t, { href: r && r.replace(this.rules.inline.anyPunctuation, "$1"), title: i && i.replace(this.rules.inline.anyPunctuation, "$1") }, t[0], this.lexer, this.rules);
    }
  }
  reflink(e, t) {
    let n;
    if ((n = this.rules.inline.reflink.exec(e)) || (n = this.rules.inline.nolink.exec(e))) {
      let r = (n[2] || n[1]).replace(this.rules.other.multipleSpaceGlobal, " "), i = t[r.toLowerCase()];
      if (!i) {
        let s = n[0].charAt(0);
        return { type: "text", raw: s, text: s };
      }
      return ge(n, i, n[0], this.lexer, this.rules);
    }
  }
  emStrong(e, t, n = "") {
    let r = this.rules.inline.emStrongLDelim.exec(e);
    if (!r || r[3] && n.match(this.rules.other.unicodeAlphaNumeric)) return;
    if (!(r[1] || r[2] || "") || !n || this.rules.inline.punctuation.exec(n)) {
      let s = [...r[0]].length - 1, a, o, l = s, p = 0, c = r[0][0] === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;
      for (c.lastIndex = 0, t = t.slice(-1 * e.length + s); (r = c.exec(t)) != null; ) {
        if (a = r[1] || r[2] || r[3] || r[4] || r[5] || r[6], !a) continue;
        if (o = [...a].length, r[3] || r[4]) {
          l += o;
          continue;
        } else if ((r[5] || r[6]) && s % 3 && !((s + o) % 3)) {
          p += o;
          continue;
        }
        if (l -= o, l > 0) continue;
        o = Math.min(o, o + l + p);
        let g = [...r[0]][0].length, h = e.slice(0, s + r.index + g + o);
        if (Math.min(s, o) % 2) {
          let f = h.slice(1, -1);
          return { type: "em", raw: h, text: f, tokens: this.lexer.inlineTokens(f) };
        }
        let R = h.slice(2, -2);
        return { type: "strong", raw: h, text: R, tokens: this.lexer.inlineTokens(R) };
      }
    }
  }
  codespan(e) {
    let t = this.rules.inline.code.exec(e);
    if (t) {
      let n = t[2].replace(this.rules.other.newLineCharGlobal, " "), r = this.rules.other.nonSpaceChar.test(n), i = this.rules.other.startingSpaceChar.test(n) && this.rules.other.endingSpaceChar.test(n);
      return r && i && (n = n.substring(1, n.length - 1)), { type: "codespan", raw: t[0], text: n };
    }
  }
  br(e) {
    let t = this.rules.inline.br.exec(e);
    if (t) return { type: "br", raw: t[0] };
  }
  del(e) {
    let t = this.rules.inline.del.exec(e);
    if (t) return { type: "del", raw: t[0], text: t[2], tokens: this.lexer.inlineTokens(t[2]) };
  }
  autolink(e) {
    let t = this.rules.inline.autolink.exec(e);
    if (t) {
      let n, r;
      return t[2] === "@" ? (n = t[1], r = "mailto:" + n) : (n = t[1], r = n), { type: "link", raw: t[0], text: n, href: r, tokens: [{ type: "text", raw: n, text: n }] };
    }
  }
  url(e) {
    let t;
    if (t = this.rules.inline.url.exec(e)) {
      let n, r;
      if (t[2] === "@") n = t[0], r = "mailto:" + n;
      else {
        let i;
        do
          i = t[0], t[0] = this.rules.inline._backpedal.exec(t[0])?.[0] ?? "";
        while (i !== t[0]);
        n = t[0], t[1] === "www." ? r = "http://" + t[0] : r = t[0];
      }
      return { type: "link", raw: t[0], text: n, href: r, tokens: [{ type: "text", raw: n, text: n }] };
    }
  }
  inlineText(e) {
    let t = this.rules.inline.text.exec(e);
    if (t) {
      let n = this.lexer.state.inRawBlock;
      return { type: "text", raw: t[0], text: t[0], escaped: n };
    }
  }
};
var x = class u {
  tokens;
  options;
  state;
  inlineQueue;
  tokenizer;
  constructor(e) {
    this.tokens = [], this.tokens.links = /* @__PURE__ */ Object.create(null), this.options = e || T, this.options.tokenizer = this.options.tokenizer || new y(), this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: false, inRawBlock: false, top: true };
    let t = { other: m, block: E.normal, inline: M.normal };
    this.options.pedantic ? (t.block = E.pedantic, t.inline = M.pedantic) : this.options.gfm && (t.block = E.gfm, this.options.breaks ? t.inline = M.breaks : t.inline = M.gfm), this.tokenizer.rules = t;
  }
  static get rules() {
    return { block: E, inline: M };
  }
  static lex(e, t) {
    return new u(t).lex(e);
  }
  static lexInline(e, t) {
    return new u(t).inlineTokens(e);
  }
  lex(e) {
    e = e.replace(m.carriageReturn, `
`), this.blockTokens(e, this.tokens);
    for (let t = 0; t < this.inlineQueue.length; t++) {
      let n = this.inlineQueue[t];
      this.inlineTokens(n.src, n.tokens);
    }
    return this.inlineQueue = [], this.tokens;
  }
  blockTokens(e, t = [], n = false) {
    for (this.options.pedantic && (e = e.replace(m.tabCharGlobal, "    ").replace(m.spaceLine, "")); e; ) {
      let r;
      if (this.options.extensions?.block?.some((s) => (r = s.call({ lexer: this }, e, t)) ? (e = e.substring(r.raw.length), t.push(r), true) : false)) continue;
      if (r = this.tokenizer.space(e)) {
        e = e.substring(r.raw.length);
        let s = t.at(-1);
        r.raw.length === 1 && s !== void 0 ? s.raw += `
` : t.push(r);
        continue;
      }
      if (r = this.tokenizer.code(e)) {
        e = e.substring(r.raw.length);
        let s = t.at(-1);
        s?.type === "paragraph" || s?.type === "text" ? (s.raw += (s.raw.endsWith(`
`) ? "" : `
`) + r.raw, s.text += `
` + r.text, this.inlineQueue.at(-1).src = s.text) : t.push(r);
        continue;
      }
      if (r = this.tokenizer.fences(e)) {
        e = e.substring(r.raw.length), t.push(r);
        continue;
      }
      if (r = this.tokenizer.heading(e)) {
        e = e.substring(r.raw.length), t.push(r);
        continue;
      }
      if (r = this.tokenizer.hr(e)) {
        e = e.substring(r.raw.length), t.push(r);
        continue;
      }
      if (r = this.tokenizer.blockquote(e)) {
        e = e.substring(r.raw.length), t.push(r);
        continue;
      }
      if (r = this.tokenizer.list(e)) {
        e = e.substring(r.raw.length), t.push(r);
        continue;
      }
      if (r = this.tokenizer.html(e)) {
        e = e.substring(r.raw.length), t.push(r);
        continue;
      }
      if (r = this.tokenizer.def(e)) {
        e = e.substring(r.raw.length);
        let s = t.at(-1);
        s?.type === "paragraph" || s?.type === "text" ? (s.raw += (s.raw.endsWith(`
`) ? "" : `
`) + r.raw, s.text += `
` + r.raw, this.inlineQueue.at(-1).src = s.text) : this.tokens.links[r.tag] || (this.tokens.links[r.tag] = { href: r.href, title: r.title }, t.push(r));
        continue;
      }
      if (r = this.tokenizer.table(e)) {
        e = e.substring(r.raw.length), t.push(r);
        continue;
      }
      if (r = this.tokenizer.lheading(e)) {
        e = e.substring(r.raw.length), t.push(r);
        continue;
      }
      let i = e;
      if (this.options.extensions?.startBlock) {
        let s = 1 / 0, a = e.slice(1), o;
        this.options.extensions.startBlock.forEach((l) => {
          o = l.call({ lexer: this }, a), typeof o == "number" && o >= 0 && (s = Math.min(s, o));
        }), s < 1 / 0 && s >= 0 && (i = e.substring(0, s + 1));
      }
      if (this.state.top && (r = this.tokenizer.paragraph(i))) {
        let s = t.at(-1);
        n && s?.type === "paragraph" ? (s.raw += (s.raw.endsWith(`
`) ? "" : `
`) + r.raw, s.text += `
` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r), n = i.length !== e.length, e = e.substring(r.raw.length);
        continue;
      }
      if (r = this.tokenizer.text(e)) {
        e = e.substring(r.raw.length);
        let s = t.at(-1);
        s?.type === "text" ? (s.raw += (s.raw.endsWith(`
`) ? "" : `
`) + r.raw, s.text += `
` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r);
        continue;
      }
      if (e) {
        let s = "Infinite loop on byte: " + e.charCodeAt(0);
        if (this.options.silent) {
          console.error(s);
          break;
        } else throw new Error(s);
      }
    }
    return this.state.top = true, t;
  }
  inline(e, t = []) {
    return this.inlineQueue.push({ src: e, tokens: t }), t;
  }
  inlineTokens(e, t = []) {
    let n = e, r = null;
    if (this.tokens.links) {
      let o = Object.keys(this.tokens.links);
      if (o.length > 0) for (; (r = this.tokenizer.rules.inline.reflinkSearch.exec(n)) != null; ) o.includes(r[0].slice(r[0].lastIndexOf("[") + 1, -1)) && (n = n.slice(0, r.index) + "[" + "a".repeat(r[0].length - 2) + "]" + n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex));
    }
    for (; (r = this.tokenizer.rules.inline.anyPunctuation.exec(n)) != null; ) n = n.slice(0, r.index) + "++" + n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);
    let i;
    for (; (r = this.tokenizer.rules.inline.blockSkip.exec(n)) != null; ) i = r[2] ? r[2].length : 0, n = n.slice(0, r.index + i) + "[" + "a".repeat(r[0].length - i - 2) + "]" + n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
    n = this.options.hooks?.emStrongMask?.call({ lexer: this }, n) ?? n;
    let s = false, a = "";
    for (; e; ) {
      s || (a = ""), s = false;
      let o;
      if (this.options.extensions?.inline?.some((p) => (o = p.call({ lexer: this }, e, t)) ? (e = e.substring(o.raw.length), t.push(o), true) : false)) continue;
      if (o = this.tokenizer.escape(e)) {
        e = e.substring(o.raw.length), t.push(o);
        continue;
      }
      if (o = this.tokenizer.tag(e)) {
        e = e.substring(o.raw.length), t.push(o);
        continue;
      }
      if (o = this.tokenizer.link(e)) {
        e = e.substring(o.raw.length), t.push(o);
        continue;
      }
      if (o = this.tokenizer.reflink(e, this.tokens.links)) {
        e = e.substring(o.raw.length);
        let p = t.at(-1);
        o.type === "text" && p?.type === "text" ? (p.raw += o.raw, p.text += o.text) : t.push(o);
        continue;
      }
      if (o = this.tokenizer.emStrong(e, n, a)) {
        e = e.substring(o.raw.length), t.push(o);
        continue;
      }
      if (o = this.tokenizer.codespan(e)) {
        e = e.substring(o.raw.length), t.push(o);
        continue;
      }
      if (o = this.tokenizer.br(e)) {
        e = e.substring(o.raw.length), t.push(o);
        continue;
      }
      if (o = this.tokenizer.del(e)) {
        e = e.substring(o.raw.length), t.push(o);
        continue;
      }
      if (o = this.tokenizer.autolink(e)) {
        e = e.substring(o.raw.length), t.push(o);
        continue;
      }
      if (!this.state.inLink && (o = this.tokenizer.url(e))) {
        e = e.substring(o.raw.length), t.push(o);
        continue;
      }
      let l = e;
      if (this.options.extensions?.startInline) {
        let p = 1 / 0, c = e.slice(1), g;
        this.options.extensions.startInline.forEach((h) => {
          g = h.call({ lexer: this }, c), typeof g == "number" && g >= 0 && (p = Math.min(p, g));
        }), p < 1 / 0 && p >= 0 && (l = e.substring(0, p + 1));
      }
      if (o = this.tokenizer.inlineText(l)) {
        e = e.substring(o.raw.length), o.raw.slice(-1) !== "_" && (a = o.raw.slice(-1)), s = true;
        let p = t.at(-1);
        p?.type === "text" ? (p.raw += o.raw, p.text += o.text) : t.push(o);
        continue;
      }
      if (e) {
        let p = "Infinite loop on byte: " + e.charCodeAt(0);
        if (this.options.silent) {
          console.error(p);
          break;
        } else throw new Error(p);
      }
    }
    return t;
  }
};
var P = class {
  options;
  parser;
  constructor(e) {
    this.options = e || T;
  }
  space(e) {
    return "";
  }
  code({ text: e, lang: t, escaped: n }) {
    let r = (t || "").match(m.notSpaceStart)?.[0], i = e.replace(m.endingNewline, "") + `
`;
    return r ? '<pre><code class="language-' + w(r) + '">' + (n ? i : w(i, true)) + `</code></pre>
` : "<pre><code>" + (n ? i : w(i, true)) + `</code></pre>
`;
  }
  blockquote({ tokens: e }) {
    return `<blockquote>
${this.parser.parse(e)}</blockquote>
`;
  }
  html({ text: e }) {
    return e;
  }
  def(e) {
    return "";
  }
  heading({ tokens: e, depth: t }) {
    return `<h${t}>${this.parser.parseInline(e)}</h${t}>
`;
  }
  hr(e) {
    return `<hr>
`;
  }
  list(e) {
    let t = e.ordered, n = e.start, r = "";
    for (let a = 0; a < e.items.length; a++) {
      let o = e.items[a];
      r += this.listitem(o);
    }
    let i = t ? "ol" : "ul", s = t && n !== 1 ? ' start="' + n + '"' : "";
    return "<" + i + s + `>
` + r + "</" + i + `>
`;
  }
  listitem(e) {
    return `<li>${this.parser.parse(e.tokens)}</li>
`;
  }
  checkbox({ checked: e }) {
    return "<input " + (e ? 'checked="" ' : "") + 'disabled="" type="checkbox"> ';
  }
  paragraph({ tokens: e }) {
    return `<p>${this.parser.parseInline(e)}</p>
`;
  }
  table(e) {
    let t = "", n = "";
    for (let i = 0; i < e.header.length; i++) n += this.tablecell(e.header[i]);
    t += this.tablerow({ text: n });
    let r = "";
    for (let i = 0; i < e.rows.length; i++) {
      let s = e.rows[i];
      n = "";
      for (let a = 0; a < s.length; a++) n += this.tablecell(s[a]);
      r += this.tablerow({ text: n });
    }
    return r && (r = `<tbody>${r}</tbody>`), `<table>
<thead>
` + t + `</thead>
` + r + `</table>
`;
  }
  tablerow({ text: e }) {
    return `<tr>
${e}</tr>
`;
  }
  tablecell(e) {
    let t = this.parser.parseInline(e.tokens), n = e.header ? "th" : "td";
    return (e.align ? `<${n} align="${e.align}">` : `<${n}>`) + t + `</${n}>
`;
  }
  strong({ tokens: e }) {
    return `<strong>${this.parser.parseInline(e)}</strong>`;
  }
  em({ tokens: e }) {
    return `<em>${this.parser.parseInline(e)}</em>`;
  }
  codespan({ text: e }) {
    return `<code>${w(e, true)}</code>`;
  }
  br(e) {
    return "<br>";
  }
  del({ tokens: e }) {
    return `<del>${this.parser.parseInline(e)}</del>`;
  }
  link({ href: e, title: t, tokens: n }) {
    let r = this.parser.parseInline(n), i = X(e);
    if (i === null) return r;
    e = i;
    let s = '<a href="' + e + '"';
    return t && (s += ' title="' + w(t) + '"'), s += ">" + r + "</a>", s;
  }
  image({ href: e, title: t, text: n, tokens: r }) {
    r && (n = this.parser.parseInline(r, this.parser.textRenderer));
    let i = X(e);
    if (i === null) return w(n);
    e = i;
    let s = `<img src="${e}" alt="${n}"`;
    return t && (s += ` title="${w(t)}"`), s += ">", s;
  }
  text(e) {
    return "tokens" in e && e.tokens ? this.parser.parseInline(e.tokens) : "escaped" in e && e.escaped ? e.text : w(e.text);
  }
};
var $ = class {
  strong({ text: e }) {
    return e;
  }
  em({ text: e }) {
    return e;
  }
  codespan({ text: e }) {
    return e;
  }
  del({ text: e }) {
    return e;
  }
  html({ text: e }) {
    return e;
  }
  text({ text: e }) {
    return e;
  }
  link({ text: e }) {
    return "" + e;
  }
  image({ text: e }) {
    return "" + e;
  }
  br() {
    return "";
  }
  checkbox({ raw: e }) {
    return e;
  }
};
var b = class u2 {
  options;
  renderer;
  textRenderer;
  constructor(e) {
    this.options = e || T, this.options.renderer = this.options.renderer || new P(), this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new $();
  }
  static parse(e, t) {
    return new u2(t).parse(e);
  }
  static parseInline(e, t) {
    return new u2(t).parseInline(e);
  }
  parse(e) {
    let t = "";
    for (let n = 0; n < e.length; n++) {
      let r = e[n];
      if (this.options.extensions?.renderers?.[r.type]) {
        let s = r, a = this.options.extensions.renderers[s.type].call({ parser: this }, s);
        if (a !== false || !["space", "hr", "heading", "code", "table", "blockquote", "list", "html", "def", "paragraph", "text"].includes(s.type)) {
          t += a || "";
          continue;
        }
      }
      let i = r;
      switch (i.type) {
        case "space": {
          t += this.renderer.space(i);
          break;
        }
        case "hr": {
          t += this.renderer.hr(i);
          break;
        }
        case "heading": {
          t += this.renderer.heading(i);
          break;
        }
        case "code": {
          t += this.renderer.code(i);
          break;
        }
        case "table": {
          t += this.renderer.table(i);
          break;
        }
        case "blockquote": {
          t += this.renderer.blockquote(i);
          break;
        }
        case "list": {
          t += this.renderer.list(i);
          break;
        }
        case "checkbox": {
          t += this.renderer.checkbox(i);
          break;
        }
        case "html": {
          t += this.renderer.html(i);
          break;
        }
        case "def": {
          t += this.renderer.def(i);
          break;
        }
        case "paragraph": {
          t += this.renderer.paragraph(i);
          break;
        }
        case "text": {
          t += this.renderer.text(i);
          break;
        }
        default: {
          let s = 'Token with "' + i.type + '" type was not found.';
          if (this.options.silent) return console.error(s), "";
          throw new Error(s);
        }
      }
    }
    return t;
  }
  parseInline(e, t = this.renderer) {
    let n = "";
    for (let r = 0; r < e.length; r++) {
      let i = e[r];
      if (this.options.extensions?.renderers?.[i.type]) {
        let a = this.options.extensions.renderers[i.type].call({ parser: this }, i);
        if (a !== false || !["escape", "html", "link", "image", "strong", "em", "codespan", "br", "del", "text"].includes(i.type)) {
          n += a || "";
          continue;
        }
      }
      let s = i;
      switch (s.type) {
        case "escape": {
          n += t.text(s);
          break;
        }
        case "html": {
          n += t.html(s);
          break;
        }
        case "link": {
          n += t.link(s);
          break;
        }
        case "image": {
          n += t.image(s);
          break;
        }
        case "checkbox": {
          n += t.checkbox(s);
          break;
        }
        case "strong": {
          n += t.strong(s);
          break;
        }
        case "em": {
          n += t.em(s);
          break;
        }
        case "codespan": {
          n += t.codespan(s);
          break;
        }
        case "br": {
          n += t.br(s);
          break;
        }
        case "del": {
          n += t.del(s);
          break;
        }
        case "text": {
          n += t.text(s);
          break;
        }
        default: {
          let a = 'Token with "' + s.type + '" type was not found.';
          if (this.options.silent) return console.error(a), "";
          throw new Error(a);
        }
      }
    }
    return n;
  }
};
var S = class {
  options;
  block;
  constructor(e) {
    this.options = e || T;
  }
  static passThroughHooks = /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens", "emStrongMask"]);
  static passThroughHooksRespectAsync = /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens"]);
  preprocess(e) {
    return e;
  }
  postprocess(e) {
    return e;
  }
  processAllTokens(e) {
    return e;
  }
  emStrongMask(e) {
    return e;
  }
  provideLexer() {
    return this.block ? x.lex : x.lexInline;
  }
  provideParser() {
    return this.block ? b.parse : b.parseInline;
  }
};
var B = class {
  defaults = L();
  options = this.setOptions;
  parse = this.parseMarkdown(true);
  parseInline = this.parseMarkdown(false);
  Parser = b;
  Renderer = P;
  TextRenderer = $;
  Lexer = x;
  Tokenizer = y;
  Hooks = S;
  constructor(...e) {
    this.use(...e);
  }
  walkTokens(e, t) {
    let n = [];
    for (let r of e) switch (n = n.concat(t.call(this, r)), r.type) {
      case "table": {
        let i = r;
        for (let s of i.header) n = n.concat(this.walkTokens(s.tokens, t));
        for (let s of i.rows) for (let a of s) n = n.concat(this.walkTokens(a.tokens, t));
        break;
      }
      case "list": {
        let i = r;
        n = n.concat(this.walkTokens(i.items, t));
        break;
      }
      default: {
        let i = r;
        this.defaults.extensions?.childTokens?.[i.type] ? this.defaults.extensions.childTokens[i.type].forEach((s) => {
          let a = i[s].flat(1 / 0);
          n = n.concat(this.walkTokens(a, t));
        }) : i.tokens && (n = n.concat(this.walkTokens(i.tokens, t)));
      }
    }
    return n;
  }
  use(...e) {
    let t = this.defaults.extensions || { renderers: {}, childTokens: {} };
    return e.forEach((n) => {
      let r = { ...n };
      if (r.async = this.defaults.async || r.async || false, n.extensions && (n.extensions.forEach((i) => {
        if (!i.name) throw new Error("extension name required");
        if ("renderer" in i) {
          let s = t.renderers[i.name];
          s ? t.renderers[i.name] = function(...a) {
            let o = i.renderer.apply(this, a);
            return o === false && (o = s.apply(this, a)), o;
          } : t.renderers[i.name] = i.renderer;
        }
        if ("tokenizer" in i) {
          if (!i.level || i.level !== "block" && i.level !== "inline") throw new Error("extension level must be 'block' or 'inline'");
          let s = t[i.level];
          s ? s.unshift(i.tokenizer) : t[i.level] = [i.tokenizer], i.start && (i.level === "block" ? t.startBlock ? t.startBlock.push(i.start) : t.startBlock = [i.start] : i.level === "inline" && (t.startInline ? t.startInline.push(i.start) : t.startInline = [i.start]));
        }
        "childTokens" in i && i.childTokens && (t.childTokens[i.name] = i.childTokens);
      }), r.extensions = t), n.renderer) {
        let i = this.defaults.renderer || new P(this.defaults);
        for (let s in n.renderer) {
          if (!(s in i)) throw new Error(`renderer '${s}' does not exist`);
          if (["options", "parser"].includes(s)) continue;
          let a = s, o = n.renderer[a], l = i[a];
          i[a] = (...p) => {
            let c = o.apply(i, p);
            return c === false && (c = l.apply(i, p)), c || "";
          };
        }
        r.renderer = i;
      }
      if (n.tokenizer) {
        let i = this.defaults.tokenizer || new y(this.defaults);
        for (let s in n.tokenizer) {
          if (!(s in i)) throw new Error(`tokenizer '${s}' does not exist`);
          if (["options", "rules", "lexer"].includes(s)) continue;
          let a = s, o = n.tokenizer[a], l = i[a];
          i[a] = (...p) => {
            let c = o.apply(i, p);
            return c === false && (c = l.apply(i, p)), c;
          };
        }
        r.tokenizer = i;
      }
      if (n.hooks) {
        let i = this.defaults.hooks || new S();
        for (let s in n.hooks) {
          if (!(s in i)) throw new Error(`hook '${s}' does not exist`);
          if (["options", "block"].includes(s)) continue;
          let a = s, o = n.hooks[a], l = i[a];
          S.passThroughHooks.has(s) ? i[a] = (p) => {
            if (this.defaults.async && S.passThroughHooksRespectAsync.has(s)) return (async () => {
              let g = await o.call(i, p);
              return l.call(i, g);
            })();
            let c = o.call(i, p);
            return l.call(i, c);
          } : i[a] = (...p) => {
            if (this.defaults.async) return (async () => {
              let g = await o.apply(i, p);
              return g === false && (g = await l.apply(i, p)), g;
            })();
            let c = o.apply(i, p);
            return c === false && (c = l.apply(i, p)), c;
          };
        }
        r.hooks = i;
      }
      if (n.walkTokens) {
        let i = this.defaults.walkTokens, s = n.walkTokens;
        r.walkTokens = function(a) {
          let o = [];
          return o.push(s.call(this, a)), i && (o = o.concat(i.call(this, a))), o;
        };
      }
      this.defaults = { ...this.defaults, ...r };
    }), this;
  }
  setOptions(e) {
    return this.defaults = { ...this.defaults, ...e }, this;
  }
  lexer(e, t) {
    return x.lex(e, t ?? this.defaults);
  }
  parser(e, t) {
    return b.parse(e, t ?? this.defaults);
  }
  parseMarkdown(e) {
    return (n, r) => {
      let i = { ...r }, s = { ...this.defaults, ...i }, a = this.onError(!!s.silent, !!s.async);
      if (this.defaults.async === true && i.async === false) return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));
      if (typeof n > "u" || n === null) return a(new Error("marked(): input parameter is undefined or null"));
      if (typeof n != "string") return a(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n) + ", string expected"));
      if (s.hooks && (s.hooks.options = s, s.hooks.block = e), s.async) return (async () => {
        let o = s.hooks ? await s.hooks.preprocess(n) : n, p = await (s.hooks ? await s.hooks.provideLexer() : e ? x.lex : x.lexInline)(o, s), c = s.hooks ? await s.hooks.processAllTokens(p) : p;
        s.walkTokens && await Promise.all(this.walkTokens(c, s.walkTokens));
        let h = await (s.hooks ? await s.hooks.provideParser() : e ? b.parse : b.parseInline)(c, s);
        return s.hooks ? await s.hooks.postprocess(h) : h;
      })().catch(a);
      try {
        s.hooks && (n = s.hooks.preprocess(n));
        let l = (s.hooks ? s.hooks.provideLexer() : e ? x.lex : x.lexInline)(n, s);
        s.hooks && (l = s.hooks.processAllTokens(l)), s.walkTokens && this.walkTokens(l, s.walkTokens);
        let c = (s.hooks ? s.hooks.provideParser() : e ? b.parse : b.parseInline)(l, s);
        return s.hooks && (c = s.hooks.postprocess(c)), c;
      } catch (o) {
        return a(o);
      }
    };
  }
  onError(e, t) {
    return (n) => {
      if (n.message += `
Please report this to https://github.com/markedjs/marked.`, e) {
        let r = "<p>An error occurred:</p><pre>" + w(n.message + "", true) + "</pre>";
        return t ? Promise.resolve(r) : r;
      }
      if (t) return Promise.reject(n);
      throw n;
    };
  }
};
var _ = new B();
function d(u3, e) {
  return _.parse(u3, e);
}
d.options = d.setOptions = function(u3) {
  return _.setOptions(u3), d.defaults = _.defaults, Z(d.defaults), d;
};
d.getDefaults = L;
d.defaults = T;
d.use = function(...u3) {
  return _.use(...u3), d.defaults = _.defaults, Z(d.defaults), d;
};
d.walkTokens = function(u3, e) {
  return _.walkTokens(u3, e);
};
d.parseInline = _.parseInline;
d.Parser = b;
d.parser = b.parse;
d.Renderer = P;
d.TextRenderer = $;
d.Lexer = x;
d.lexer = x.lex;
d.Tokenizer = y;
d.Hooks = S;
d.parse = d;
d.options;
d.setOptions;
d.use;
d.walkTokens;
d.parseInline;
b.parse;
x.lex;
class TypewriterText {
  constructor(text = "") {
    this._text = "";
    this._displayedText = "";
    this._pendingText = "";
    this._text = text;
    this._pendingText = text;
  }
  /** Set or update the text that will be type written
   * @param text the new or updated string to type write
   */
  setText(text) {
    this._text = text;
    if (this._displayedText && text.includes(this._displayedText)) {
      this._pendingText = text.substring(this._displayedText.length);
    } else {
      this._pendingText = this._text;
      this._displayedText = "";
    }
  }
  /** Gets the current text that is written out */
  getText() {
    return this._displayedText;
  }
  /** Clear all the text and state */
  clearText() {
    this._displayedText = "";
    this._text = "";
    this._pendingText = "";
  }
  /**
   * Updates the display text on what will be shown to the users.
   */
  updateDisplayText() {
    if (this._pendingText.length > 0) {
      const firstChar = this._pendingText[0];
      if (firstChar === "[" || firstChar === "<" || firstChar === "!") {
        const patternMatch = this._matchMarkdownPattern(
          this._displayedText + this._pendingText,
          this._displayedText.length
        );
        if (patternMatch) {
          const patternLength = patternMatch.end - patternMatch.start;
          const chunkToAdd = this._pendingText.substring(0, patternLength);
          this._displayedText += chunkToAdd;
          this._pendingText = this._pendingText.substring(patternLength);
        } else {
          this._displayedText += firstChar;
          this._pendingText = this._pendingText.substring(1);
        }
      } else {
        this._displayedText += firstChar;
        this._pendingText = this._pendingText.substring(1);
      }
    }
  }
  /**
   * Check the string for any markdown pattern and the length of that pattern.
   * @param text the string to check markdown
   * @param position The current position in the text to check
   * @returns the start and end positions.
   */
  _matchMarkdownPattern(text, position) {
    const patterns = [
      /<sup>\[\[[^\]]+\]\]\([^)]+\)<\/sup>/,
      // <sup>[[1]](url)</sup>
      /\[\[[^\]]+\]\]\([^)]+\)/,
      // [[1]](url)
      /\[[^\]]+\]\([^)]+\)/,
      // [text](url)
      /!\[[^\]]*\]\([^)]+\)/
      // ![alt](url)
    ];
    const remaining = text.substring(position);
    for (const pattern of patterns) {
      const match = remaining.match(pattern);
      if (match && match.index === 0) {
        return {
          start: position,
          end: position + match[0].length
        };
      }
    }
    return null;
  }
}
const ORG_ACCOUNT_LINK = "https://links.esri.com/solutions/agol-organizational-account";
const CONFIG_AI_LINK = "https://links.esri.com/solutions/configure-assistants";
class ArcgisSolutionsAssistant extends LitElement {
  constructor() {
    super();
    this.serverRoot = "https://aiservices-beta.arcgis.com";
    this.token = null;
    this.open = false;
    this.userFirstName = "";
    this.conversationStore = {
      conversationId: null,
      inquiryId: null,
      ackSequenceNumber: null
    };
    this._currentResponse = "";
    this._isAutoScroll = false;
    this._isLoading = false;
    this._isLoadingText = "";
    this.messages = [];
    this._orgSettings = {
      aiAssistantsEnabled: false,
      blockBetaApps: true,
      colocateCompute: false
    };
    this._translations = useT9n({ name: "arcgis-solutions-assistant", blocking: true });
    this._isTyping = false;
    this._configContextConsumer = useContextConsumer({
      context: configContext,
      subscribe: true,
      callback: (config) => {
        if (config?.userSession && !this.userFirstName) {
          this._loadUserFirstName();
        }
        if (config?.authentication?.PortalSubset?.orgSettings) {
          this._orgSettings = config?.authentication?.PortalSubset?.orgSettings;
          this._getAIServiceUrl();
        }
      }
    });
    this.closeAssistant = createEvent();
    this._resetConversation = () => {
      this.conversationStore.conversationId = null;
      this.conversationStore.inquiryId = null;
      this.conversationStore.ackSequenceNumber = null;
    };
    this._setMessageContainerRef = (el) => {
      this._chatContainer = el;
    };
    this._setInputRef = (el) => {
      this._inputRef = el;
      this._inputRef.addEventListener("keydown", (event) => {
        if (event.key === "Enter" && !event.shiftKey) {
          if (!this._isLoading && !this._isTyping) {
            event.preventDefault();
            if (this._inputRef) {
              void this.handleSendMessage(this._inputRef.value.trim());
              this._inputRef.value = "";
            }
          }
        }
      });
      setTimeout(() => {
        this._inputRef?.focus();
      }, 100);
    };
    this._submitQuestion = (value) => {
      this.handleSendMessage(value);
    };
    this._handleSignIn = () => {
      const signInParam = "aiOpen";
      this._configContextConsumer.value?.authentication?.signIn(signInParam);
    };
    this._checkURLOpenParameter = () => {
      this.open = this._configContextConsumer.value?.authentication?.SignInParam === "aiOpen" || this.open;
    };
    this.listenOn(window, "submitQuestion", (evt) => {
      this._submitQuestion(evt.detail);
    });
  }
  static {
    this.properties = { serverRoot: 1, token: 1, open: [5, {}, { type: Boolean }], userFirstName: 1, conversationStore: [16, {}, { state: true }], _currentResponse: [16, {}, { state: true }], _isAutoScroll: [16, {}, { state: true }], _isLoading: [16, {}, { state: true }], _isLoadingText: [16, {}, { state: true }], messages: [16, {}, { state: true }], _orgSettings: [16, {}, { state: true }], _translations: [16, {}, { state: true }], _isTyping: [16, {}, { state: true }] };
  }
  static {
    this.styles = styles;
  }
  get _telemetry() {
    return this._configContextConsumer.value?.telemetrySession;
  }
  get solutionAIurl() {
    return `${this.serverRoot}/skills/solution_deployment/chat`;
  }
  get docAIurl() {
    return `${this.serverRoot}/skills/doc_ai_assistant/chat`;
  }
  async handleSendMessage(inputValue) {
    this._isLoading = true;
    let userMessage = {
      message: inputValue,
      context: {
        debug: false,
        kind: "SolutionRequest"
      }
    };
    if (this.conversationStore.conversationId !== null) {
      userMessage["conversationId"] = this.conversationStore.conversationId;
      if (this.token) {
        const newMessage = {
          author: "human",
          conversationId: this.conversationStore.conversationId ? this.conversationStore.conversationId : "",
          message: inputValue,
          render: this._renderSimpleTextMessage(inputValue, "human", "", "Other")
        };
        this.messages = [...this.messages, newMessage];
        const response = await this.requestAIServer(userMessage, this.token, this.solutionAIurl);
        void this.loopRequest(response, this.token, this.solutionAIurl);
      }
    } else {
      if (this.token) {
        const newMessage = {
          author: "human",
          message: inputValue,
          render: this._renderSimpleTextMessage(inputValue, "human", "", "Other")
        };
        this.messages = [...this.messages, newMessage];
        const response = await this.requestAIServer(userMessage, this.token, this.solutionAIurl);
        this.conversationStore.conversationId = response.conversationId;
        this.conversationStore.inquiryId = response.inquiryId;
        this.conversationStore.ackSequenceNumber = response.sequenceNumber;
        void this.loopRequest(response, this.token, this.solutionAIurl);
      }
    }
  }
  async loopRequest(response, token, requestURL) {
    const startTime = Date.now();
    let originalIntent;
    let currentRequestURL = requestURL;
    this._isLoading = true;
    const responseMessageDiv = document.createElement("div");
    responseMessageDiv.classList.add("response-message", "message-content");
    let responseAdditionalInfoDiv = document.createElement("div");
    responseAdditionalInfoDiv.classList.add("display-none");
    const responseFeedbackDiv = document.createElement("div");
    responseFeedbackDiv.classList.add("display-none");
    const domId = response.conversationId + Date.now();
    const responseBlock = this._renderResponseBlock(responseMessageDiv, responseAdditionalInfoDiv, responseFeedbackDiv, domId);
    const textWriter = new TypewriterText(this._currentResponse);
    const newMessage = {
      author: "ai",
      conversationId: response.conversationId,
      message: response.message ?? "",
      render: responseBlock
    };
    this.messages.push(newMessage);
    this.requestUpdate();
    this._isAutoScroll = true;
    while (response.hasMore) {
      await new Promise((resolve) => setTimeout(resolve, 500));
      let msg = {
        conversationId: response.conversationId,
        ackSequenceNumber: response.sequenceNumber,
        inquiryId: response.inquiryId
      };
      if (response.context) {
        this.conversationStore.context = response.context;
        if (response.context.results && !response.context.intent) {
          for (const result of response.context.results) {
            this._currentResponse = result.reply;
            if (this._currentResponse !== "") {
              this._isLoading = false;
              this._isTyping = true;
              this._showCardById(domId);
              this._startTypeWriter(textWriter, this._currentResponse, responseMessageDiv, responseAdditionalInfoDiv, responseFeedbackDiv);
            }
            response = await this.requestAIServer(msg, token, currentRequestURL);
          }
        } else {
          if (response.context.intent === "Solution question") {
            originalIntent = response.context.intent;
            const userMessage = {
              message: response.message,
              conversationId: msg.conversationId,
              context: {
                kind: "DocAIAssistantRequest",
                filters: {
                  products: "ArcGIS Solutions"
                }
              }
            };
            currentRequestURL = this.docAIurl;
            response = await this.requestAIServer(userMessage, token, currentRequestURL);
          } else {
            this._currentResponse = response.message ?? "";
            if (response.context.kind && response.context.kind.toLowerCase() === "ArcGISErrorAsContext".toLowerCase()) {
              this._currentResponse = this._translations.genericErrorMessage;
            }
            if (this._currentResponse !== "") {
              this._isLoading = false;
              this._isTyping = true;
              this._showCardById(domId);
              this._startTypeWriter(textWriter, this._currentResponse, responseMessageDiv, responseAdditionalInfoDiv, responseFeedbackDiv);
            }
            response = await this.requestAIServer(msg, token, currentRequestURL);
          }
        }
      } else {
        response = await this.requestAIServer(msg, token, currentRequestURL);
      }
    }
    this._isLoading = false;
    const { context } = this.conversationStore;
    const previousQuestion = this.messages.length >= 2 ? this._getMostRecentQuestion() : "";
    const previousMessageText = typeof previousQuestion === "string" ? "" : previousQuestion?.message ?? "";
    const durationSeconds = calculateDuration(startTime);
    const intentForTelemetry = originalIntent || context?.intent || "Unknown";
    this._telemetry?.logEvent({
      category: TELEMETRY_CATEGORY.ASSISTANT,
      action: "Chat",
      dimensions: [intentForTelemetry],
      metrics: [durationSeconds]
    });
    if (context && context.intent) {
      switch (context.intent) {
        case "Recommend solution": {
          if (context.results) {
            const results = context.results;
            const solutionListTitles = results.map((solution) => `- ${solution.title}`).join("\n");
            const template = this._renderSuggestedSolutions(results);
            const feedBackTemplate = this._renderFeedback(this._currentResponse + "\n" + solutionListTitles, previousMessageText, this.conversationStore.conversationId, context.intent);
            render(template, responseAdditionalInfoDiv);
            render(feedBackTemplate, responseFeedbackDiv);
          } else {
            responseAdditionalInfoDiv.innerHTML = "";
          }
          this._scrollToBottom();
          break;
        }
        default: {
          const feedBackTemplate = this._renderFeedback(this._currentResponse, previousMessageText, this.conversationStore.conversationId, context.intent);
          render(feedBackTemplate, responseFeedbackDiv);
          this._scrollToBottom();
          break;
        }
      }
    } else {
      if (context && context.results && !context.intent) {
        for (const result of context.results) {
          const template = this._renderSolutionsQuestionTable(result.ref, result.followupQuestions);
          const feedBackTemplate = this._renderFeedback(this._currentResponse, previousMessageText, this.conversationStore.conversationId, "Solution question");
          render(template, responseAdditionalInfoDiv);
          render(feedBackTemplate, responseFeedbackDiv);
        }
      } else {
        if (context && context.kind && context.kind.toLowerCase() === "ArcGISErrorAsContext".toLowerCase()) {
          const feedBackTemplate = this._renderFeedback(this._currentResponse, previousMessageText, this.conversationStore.conversationId, "Error");
          render(feedBackTemplate, responseFeedbackDiv);
        }
      }
      this._scrollToBottom();
    }
  }
  async requestAIServer(requestInfo, token, requestURL) {
    try {
      const response = await fetch(requestURL, {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          token
        },
        body: JSON.stringify(requestInfo)
      });
      const data = await response.json();
      if (data) {
        return data;
      } else {
        throw new Error("No data returned");
      }
    } catch (error) {
      throw new Error(`Request failed: ${error}`);
    }
  }
  resetChat() {
    const lastMessage = this.messages[this.messages.length - 1];
    if (lastMessage.author !== "system" && lastMessage.conversationId !== "-1") {
      this._resetConversation();
      const newMessage = {
        author: "system",
        conversationId: "-1",
        message: this._translations.newConversationStarted,
        render: this._renderSimpleTextMessage(this._translations.newConversationStarted, "system", "", "Other", "speech-bubble-plus")
      };
      this.messages = [...this.messages, newMessage];
      if (this._inputRef) {
        this._inputRef.value = "";
      }
    }
  }
  loaded() {
    this._checkURLOpenParameter();
    const el = this._chatContainer;
    if (el) {
      el.addEventListener("scroll", () => {
        this._isAutoScroll = this._isAtBottom(el);
      });
    }
  }
  firstUpdated(_changedProperties) {
    this._loadUserFirstName();
  }
  willUpdate(_changedProperties) {
    if (this._configContextConsumer.value?.userSession?.token && this._configContextConsumer.value?.authentication?.CanUseAI) {
      if (this.messages.length === 0 && this._translations.defaultStartUpMessage) {
        const msg = this._translations.defaultStartUpMessage.replace("{{name}}", this.userFirstName);
        const questionsArray = Object.values(this._translations.defaultFollowUpQuestions);
        const followUp = this._renderSolutionQuestionFollowup(questionsArray);
        this.messages = [
          {
            author: "ai",
            conversationId: "",
            message: msg,
            render: this._renderSimpleTextMessage(msg, "ai", "", "Other", void 0, followUp)
          }
        ];
      }
    }
    if (_changedProperties.has("_isLoading") || _changedProperties.has("_isTyping")) {
      const chips = this.renderRoot.querySelectorAll(".assistant-followup-chip");
      chips.forEach((chip) => {
        chip.disabled = this._isLoading || this._isTyping;
      });
    }
  }
  updated(changedProperties) {
    if (changedProperties.size || this._isLoading) {
      this._scrollToBottom();
    }
  }
  _renderFeedback(message, previousMessage, conversationId, intent) {
    const stamp = Date.now();
    return html`
      <div>
        <calcite-button
          appearance='transparent'
          class='height-32-flex-auto'
          id='good-${stamp}'
          icon-start='thumbs-up'
          label='position feedback'
          kind='neutral'
          @click=${() => {
      this._sendFeedback(message, previousMessage, "Good", conversationId, intent);
    }}
        >
        </calcite-button>
        <calcite-tooltip placement='bottom' reference-element='good-${stamp}'>
          <span>${this._translations.tooltips.likeButton}</span>
        </calcite-tooltip>

        <calcite-button
          appearance='transparent'
          class='height-32-flex-auto'
          id='bad-${stamp}'
          icon-start='thumbs-down'
          label='position feedback'
          kind='neutral'
          @click=${() => {
      this._sendFeedback(message, previousMessage, "Bad", conversationId, intent);
    }}
        >
        </calcite-button>
        <calcite-tooltip placement='bottom' reference-element='bad-${stamp}'>
          <span>${this._translations.tooltips.dislikeButton}</span>
        </calcite-tooltip>

        <calcite-button
          appearance='transparent'
          class='height-32-flex-auto'
          id='copy-${stamp}'
          icon-start='copy'
          label='position feedback'
          kind='neutral'
          @click=${(evt) => {
      this._copyResponseToClipboard(message, evt);
    }}
        >
        </calcite-button>
        <calcite-tooltip placement='bottom' reference-element='copy-${stamp}'>
          <span>${this._translations.tooltips.copyButton}</span>
        </calcite-tooltip>
      </div>
    `;
  }
  _renderSolutionQuestionReferences(refList) {
    return html`
      ${refList.map((ref2) => html`
          <div class='message-content-pad'>
            <a href=${ref2.url} target='_blank'>
              ${ref2.title}
            </a>
          </div>
        `)}
    `;
  }
  _renderSolutionQuestionFollowup(followupQuestions) {
    return html`
      ${followupQuestions.map((question) => html`
          <calcite-chip
            class='chip-content cursor-pointer assistant-followup-chip'
            kind='brand'
            label=${question}
            @click=${() => {
      this._submitFollowupQuestion(question);
    }}
          >
            ${question}
          </calcite-chip>
        `)}
    `;
  }
  _renderSolutionsQuestionTable(refList, followupQuestions) {
    const referenceLinks = this._renderSolutionQuestionReferences(refList);
    const followupLinks = this._renderSolutionQuestionFollowup(followupQuestions);
    return html`
      <div slot='description' class='message-content'>
        <div style='display: flex; justify-content: flex-start;'>
          <calcite-button
            appearance='outline'
            icon-end='chevron-down'
            icon-start='link'
            @click=${(e) => {
      const button = e.currentTarget;
      const container = button.parentElement.nextElementSibling;
      container.classList.toggle("collapsed");
      button.setAttribute("icon-end", container.classList.contains("collapsed") ? "chevron-down" : "chevron-up");
    }}
          >
            ${refList.length}
            ${refList.length === 1 ? this._translations.solutionsDocReference : this._translations.solutionsDocReferences}
          </calcite-button>
        </div>

        <div class='references-container collapsed'>
          ${referenceLinks}
        </div>
      </div>

      <div class='padding-top-10'>
        ${followupLinks}
      </div>
    `;
  }
  _renderSolutionCard(item, id) {
    return html`
      <a
        class='solution-card'
        id='${id}'
        @click=${() => this._emitItemIdFromAI(id)}
      >
        <calcite-card thumbnail-position='inline-start'>
          <div slot='thumbnail'>
            <img src='${item.thumbnail}' alt='Thumbnail' />
            <calcite-chip icon='launch' label='View solution'>
              ${this._translations.viewSolutionInApp}
            </calcite-chip>
          </div>

          <h3 slot='heading'><b>${item.title}</b></h3>

          <span slot='description' class='solution-snippet'>${item.snippet}</span>
        </calcite-card>
      </a>
    `;
  }
  _renderResponseBlock(responseMessageDiv, responseAdditionalInfoDiv, responseFeedbackDiv, id) {
    return html`<calcite-card id=${id ?? nothing} class="system-message display-none">${responseMessageDiv}${responseAdditionalInfoDiv}${responseFeedbackDiv}</calcite-card>`;
  }
  _renderSimpleTextMessage(message, author, conversationId, intent, icon, followUp) {
    const previousQuestion = this.messages.length >= 2 ? this._getMostRecentQuestion() : "";
    const previousMessageText = typeof previousQuestion === "string" ? "" : previousQuestion?.message ?? "";
    if (author === "system") {
      return html`<div class="message-content message-content-alignment">${icon && html`<calcite-icon .icon=${icon}></calcite-icon>` || ""}${message}</div>`;
    } else {
      return html`<calcite-card class=${safeClassMap(author === "human" ? "user-message" : "system-message")}><div class="message-content">${unsafeHTML(message)}${followUp}${author === "ai" && conversationId !== "" && this._renderFeedback(message, previousMessageText, conversationId, intent) || ""}</div></calcite-card>`;
    }
  }
  _renderSuggestedSolutions(solutionList) {
    const cards = solutionList.map((item) => {
      const match = item.thumbnail.match(/\/items\/([a-f0-9]+)\//);
      return match ? this._renderSolutionCard(item, match[1]) : null;
    }).filter((card) => card !== null);
    return html`
      <div class='message-content'>
        ${cards}
      </div>
    `;
  }
  _renderNoSign() {
    return html`<calcite-notice open scale=m icon=effects kind=info><div slot=message>${this._translations.signInMessage}</div><calcite-link @click=${this._handleSignIn} slot=link title=${this._translations.signInMessage ?? nothing} class="padding-top-10">${this._translations.signIn}</calcite-link></calcite-notice>`;
  }
  _renderNoPermission() {
    return html`<calcite-notice open scale=m icon=effects kind=info><div slot=title>${this._translations.noPermissionTitle}</div><div slot=message class="padding-top-10">${unsafeHTML(this._translations.noPermissionMessage.replace("{{orgUrl}}", ORG_ACCOUNT_LINK).replace("{{configAI}}", CONFIG_AI_LINK))}</div></calcite-notice>`;
  }
  render() {
    return html`<calcite-dialog class="chat-panel" .open=${this.open} .heading=${this._translations.solutionAssistantTitle} placement=bottom-start @calciteDialogClose=${() => {
      this.closeAssistant.emit(true);
      this.open = false;
    }}><span class="chat-panel-heading" slot=header-content><span class="padding-right-8">${this._translations.solutionAssistantTitle}</span><calcite-chip .label=${this._translations.betaTag} .value=${this._translations.betaTag}>${this._translations.betaTag}</calcite-chip></span>${this.messages.length > 1 ? html`<calcite-button appearance=transparent class="icon-color-background" .disabled=${!!this._isLoading || this._isTyping} id=newChatButton icon-end=speech-bubble-plus kind=neutral label="New conversation" @click=${this.resetChat} scale=l slot=header-actions-end></calcite-button><calcite-tooltip placement=bottom reference-element=newChatButton><span>${this._translations.tooltips.newConversation}</span></calcite-tooltip>` : ""}<div class="chat-messages" ${ref(this._setMessageContainerRef)}>${this.messages.map((msg) => {
      return msg.render;
    })}${this._isLoading && html`<calcite-card class="loader-message"><div class="message-content display-flex-row"><calcite-loader .label=${this._isLoadingText} inline scale=s></calcite-loader>${this._isLoadingText != "" && html`<div class="padding-left-10">${this._isLoadingText}</div>` || ""}</div></calcite-card>` || ""}${this._chatContainer && !this._isAtBottom(this._chatContainer) && !this._isAutoScroll && html`<calcite-fab icon=arrow-down @click=${() => {
      this._isAutoScroll = true;
      this._scrollToBottom();
      setTimeout(() => {
        this.requestUpdate();
      }, 100);
    }} scale=m></calcite-fab>` || ""}${!this._configContextConsumer.value?.userSession?.token ? this._renderNoSign() : !this._configContextConsumer.value?.authentication?.CanUseAI ? this._renderNoPermission() : ""}</div><div slot=footer class="width-100"><div class="chat-input"><calcite-text-area .disabled=${!this._configContextConsumer.value?.userSession?.token || !this._configContextConsumer.value?.authentication?.CanUseAI} resize=none rows=3 .placeholder=${this._translations.sendMessage} value ${ref(this._setInputRef)}></calcite-text-area><calcite-button appearance=outline .disabled=${!!this._isLoading || this._isTyping || !this._configContextConsumer.value?.userSession?.token || !this._configContextConsumer.value?.authentication?.CanUseAI} icon-start=send id=sendQuestion kind=neutral @click=${() => {
      if (this._inputRef) {
        this.handleSendMessage(this._inputRef.value.trim());
        this._inputRef.value = "";
      }
    }}></calcite-button><calcite-tooltip placement=bottom reference-element=sendQuestion><span>${this._translations.tooltips.sendQuestion}</span></calcite-tooltip></div><div class="disclaimer-div padding-top-10" slot=footer><calcite-icon icon=information scale=s></calcite-icon>${this._translations.disclaimerMessage}<a href=https://links.esri.com/solutions/security-concern target=_blank>${this._translations.reportConcern}</a></div></div></calcite-dialog>`;
  }
  _scrollToBottom() {
    if (this._chatContainer && this._isAutoScroll) {
      setTimeout(() => {
        if (this._chatContainer) {
          this._chatContainer.scrollTop = this._chatContainer.scrollHeight;
        }
      }, 100);
    }
  }
  _emitItemIdFromAI(id) {
    this._querySolutions(id).then((results) => {
      const allKeywords = results.typeKeywords;
      const solutionKeyword = allKeywords.filter((keyword) => {
        return keyword.includes("solutionid");
      });
      const event = new CustomEvent("solutionIDFromAssistant", {
        detail: solutionKeyword.length > 0 ? solutionKeyword[0] : id,
        bubbles: true,
        composed: true
      });
      window.dispatchEvent(event);
    });
  }
  _submitFollowupQuestion(value) {
    const event = new CustomEvent("submitQuestion", {
      detail: value,
      bubbles: true,
      composed: true
    });
    window.dispatchEvent(event);
  }
  _getMostRecentQuestion() {
    return [...this.messages].reverse().find((msg) => msg.author === "human") || null;
  }
  async _querySolutions(query) {
    const results = await querySolutions(query);
    if ("error" in results) {
      throw new Error(results.error);
    }
    return results;
  }
  _sendFeedback(message, previousMessage, evaluation, conversationId, intent) {
    const surveyUrl = `https://survey123.arcgis.com/share/6e349a50b4504ca6b6107216d568db5f?field:_source=${encodeURIComponent("Solutions Assistant")}&field:user_evaluation=${encodeURIComponent(evaluation)}&field:question=${encodeURIComponent(previousMessage)}&field:answer=${encodeURIComponent(message)}&field:context=${encodeURIComponent(JSON.stringify({ intent }))}&field:conversation_id=${encodeURIComponent(conversationId)}&field:version=${encodeURIComponent("v1")}`;
    window.open(surveyUrl, "_blank");
  }
  _copyResponseToClipboard(message, evt) {
    navigator.clipboard.writeText(message);
    const button = evt.currentTarget;
    button.iconStart = "check";
    setTimeout(() => {
      button.iconStart = "copy";
    }, 3e3);
  }
  _startTypeWriter(textWriter, response, domDiv, addInfoDiv, feedbackDiv) {
    if (response.length > 0) {
      textWriter.setText(response);
      const revealNextChar = async () => {
        textWriter.updateDisplayText();
        const displayText = textWriter.getText();
        const parseText = await d.parse(displayText);
        domDiv.innerHTML = parseText.replace(/<a\s+/g, '<a target="_blank" ');
        if (displayText.length < this._currentResponse.length) {
          this._scrollToBottom();
          setTimeout(revealNextChar, 5);
        } else {
          this._isTyping = false;
          this._isAutoScroll = false;
          addInfoDiv.classList.remove("display-none");
          feedbackDiv.classList.remove("display-none");
        }
      };
      revealNextChar();
    }
  }
  _showCardById(id) {
    const el = this.renderRoot.querySelector(`#${id}`);
    if (el)
      el.classList.remove("display-none");
  }
  _isAtBottom(dom) {
    const isAtBottom = dom.scrollTop + dom.clientHeight >= dom.scrollHeight - 5;
    if (isAtBottom) {
      return true;
    }
    return false;
  }
  async _loadUserFirstName() {
    try {
      const user = await this._configContextConsumer.value?.userSession?.getUser();
      if (user?.fullName) {
        const userFirstName = user.fullName.split(" ")[0];
        this.userFirstName = userFirstName;
      }
    } catch (error) {
    }
  }
  _getAIServiceUrl() {
    if (this._configContextConsumer.value) {
      const context = this._configContextConsumer.value;
      if (context.authentication && context.authentication?.Portal && context.authentication?.Portal.helperServices.aiAssistantServices) {
        this.serverRoot = context.authentication?.Portal.helperServices.aiAssistantServices.url;
      }
    }
  }
}
customElement("arcgis-solutions-assistant", ArcgisSolutionsAssistant);
export {
  ArcgisSolutionsAssistant
};
