kempo-ui 0.4.4 → 0.4.6

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.
Files changed (185) hide show
  1. package/dist/components/Chat.js +201 -0
  2. package/dist/components/CodeEditor.js +21 -2
  3. package/dist/components/Dropdown.js +1 -1
  4. package/dist/components/HtmlEditor.js +42 -3
  5. package/dist/components/MarkdownEditor.js +173 -0
  6. package/dist/components/Resize.js +12 -2
  7. package/dist/components/TextToSpeech.js +4 -4
  8. package/dist/components/VoiceSelector.js +49 -0
  9. package/dist/components/markdownEditorControls/Bold.js +11 -0
  10. package/dist/components/markdownEditorControls/BulletList.js +11 -0
  11. package/dist/components/markdownEditorControls/Code.js +11 -0
  12. package/dist/components/markdownEditorControls/FormatBlock.js +30 -0
  13. package/dist/components/markdownEditorControls/Heading.js +11 -0
  14. package/dist/components/markdownEditorControls/Image.js +93 -0
  15. package/dist/components/markdownEditorControls/Italic.js +11 -0
  16. package/dist/components/markdownEditorControls/Link.js +11 -0
  17. package/dist/components/markdownEditorControls/MarkdownEditorControl.js +39 -0
  18. package/dist/components/markdownEditorControls/Menu.js +30 -0
  19. package/dist/components/markdownEditorControls/NumberedList.js +11 -0
  20. package/dist/components/markdownEditorControls/Quote.js +11 -0
  21. package/dist/components/markdownEditorControls/SpeechToText.js +16 -0
  22. package/dist/components/markdownEditorControls/Strikethrough.js +11 -0
  23. package/dist/components/markdownEditorControls/Table.js +80 -0
  24. package/dist/utils/marked.esm.js +1 -0
  25. package/dist/utils/renderMarkdown.js +1 -0
  26. package/dist/utils/sanitizeHtml.js +1 -0
  27. package/dist/utils/voice.js +1 -0
  28. package/docs/components/accordion.html +19 -0
  29. package/docs/components/aside.html +19 -0
  30. package/docs/components/calendar.html +19 -0
  31. package/docs/components/card.html +19 -0
  32. package/docs/components/chat.html +715 -0
  33. package/docs/components/code-editor.html +55 -0
  34. package/docs/components/color-picker.html +19 -0
  35. package/docs/components/combobox.html +19 -0
  36. package/docs/components/content-slider.html +19 -0
  37. package/docs/components/context.html +19 -0
  38. package/docs/components/dialog.html +19 -0
  39. package/docs/components/dropdown.html +19 -0
  40. package/docs/components/filter-list.html +19 -0
  41. package/docs/components/focus-capture.html +19 -0
  42. package/docs/components/html-editor.html +60 -0
  43. package/docs/components/hybrid-component.html +19 -0
  44. package/docs/components/icon.html +19 -0
  45. package/docs/components/import.html +19 -0
  46. package/docs/components/light-component.html +19 -0
  47. package/docs/components/markdown-editor.html +924 -0
  48. package/docs/components/nav-spacer.html +19 -0
  49. package/docs/components/nav.html +19 -0
  50. package/docs/components/photo-viewer.html +19 -0
  51. package/docs/components/progress.html +19 -0
  52. package/docs/components/resize.html +22 -0
  53. package/docs/components/rich-textarea.html +650 -0
  54. package/docs/components/shadow-component.html +19 -0
  55. package/docs/components/show-more.html +19 -0
  56. package/docs/components/slider.html +19 -0
  57. package/docs/components/sortable.html +19 -0
  58. package/docs/components/speech-to-text.html +19 -0
  59. package/docs/components/spinner.html +19 -0
  60. package/docs/components/split.html +19 -0
  61. package/docs/components/table.html +19 -0
  62. package/docs/components/tableControls.html +19 -0
  63. package/docs/components/tableCustomFields.html +19 -0
  64. package/docs/components/tableFetchRecords.html +19 -0
  65. package/docs/components/tableFieldSortHide.html +19 -0
  66. package/docs/components/tablePagination.html +19 -0
  67. package/docs/components/tablePlaceholder.html +19 -0
  68. package/docs/components/tableRecordEditing.html +19 -0
  69. package/docs/components/tableRecordFiltering.html +19 -0
  70. package/docs/components/tableRecordHiding.html +19 -0
  71. package/docs/components/tableRecordSearching.html +19 -0
  72. package/docs/components/tableRecordSelection.html +19 -0
  73. package/docs/components/tableRowControls.html +19 -0
  74. package/docs/components/tableServerSync.html +19 -0
  75. package/docs/components/tableSorting.html +19 -0
  76. package/docs/components/tabs.html +19 -0
  77. package/docs/components/tags.html +19 -0
  78. package/docs/components/text-to-speech.html +63 -1
  79. package/docs/components/theme-select.html +19 -0
  80. package/docs/components/theme-switcher.html +19 -0
  81. package/docs/components/time.html +19 -0
  82. package/docs/components/timestamp.html +19 -0
  83. package/docs/components/toast.html +19 -0
  84. package/docs/components/toggle.html +19 -0
  85. package/docs/components/tree.html +19 -0
  86. package/docs/components/voice-selector.html +610 -0
  87. package/docs/icons/done_all.svg +1 -0
  88. package/docs/icons/format_quote.svg +1 -0
  89. package/docs/icons/format_strikethrough.svg +1 -0
  90. package/docs/icons/send.svg +1 -0
  91. package/docs/icons/text_fields.svg +1 -0
  92. package/docs/index.html +49 -0
  93. package/docs/src/components/Chat.js +201 -0
  94. package/docs/src/components/CodeEditor.js +21 -2
  95. package/docs/src/components/Dropdown.js +1 -1
  96. package/docs/src/components/HtmlEditor.js +42 -3
  97. package/docs/src/components/MarkdownEditor.js +173 -0
  98. package/docs/src/components/Resize.js +12 -2
  99. package/docs/src/components/TextToSpeech.js +4 -4
  100. package/docs/src/components/VoiceSelector.js +49 -0
  101. package/docs/src/components/markdownEditorControls/Bold.js +11 -0
  102. package/docs/src/components/markdownEditorControls/BulletList.js +11 -0
  103. package/docs/src/components/markdownEditorControls/Code.js +11 -0
  104. package/docs/src/components/markdownEditorControls/FormatBlock.js +30 -0
  105. package/docs/src/components/markdownEditorControls/Heading.js +11 -0
  106. package/docs/src/components/markdownEditorControls/Image.js +93 -0
  107. package/docs/src/components/markdownEditorControls/Italic.js +11 -0
  108. package/docs/src/components/markdownEditorControls/Link.js +11 -0
  109. package/docs/src/components/markdownEditorControls/MarkdownEditorControl.js +39 -0
  110. package/docs/src/components/markdownEditorControls/Menu.js +30 -0
  111. package/docs/src/components/markdownEditorControls/NumberedList.js +11 -0
  112. package/docs/src/components/markdownEditorControls/Quote.js +11 -0
  113. package/docs/src/components/markdownEditorControls/SpeechToText.js +16 -0
  114. package/docs/src/components/markdownEditorControls/Strikethrough.js +11 -0
  115. package/docs/src/components/markdownEditorControls/Table.js +80 -0
  116. package/docs/src/utils/marked.esm.js +1 -0
  117. package/docs/src/utils/renderMarkdown.js +1 -0
  118. package/docs/src/utils/sanitizeHtml.js +1 -0
  119. package/docs/src/utils/voice.js +1 -0
  120. package/docs/utils/context.html +19 -0
  121. package/docs/utils/cookie.html +19 -0
  122. package/docs/utils/debounce.html +19 -0
  123. package/docs/utils/drag.html +19 -0
  124. package/docs/utils/elevation.html +23 -10
  125. package/docs/utils/formatTimestamp.html +19 -0
  126. package/docs/utils/object.html +19 -0
  127. package/docs/utils/propConverters.html +19 -0
  128. package/docs/utils/sanitizeHtml.html +555 -0
  129. package/docs/utils/string.html +19 -0
  130. package/docs/utils/theme.html +19 -0
  131. package/docs/utils/toTitleCase.html +19 -0
  132. package/docs/utils/type.html +19 -0
  133. package/docs/utils/voice.html +548 -0
  134. package/docs/utils/wait.html +19 -0
  135. package/docs-src/components/chat.page.html +230 -0
  136. package/docs-src/components/code-editor.page.html +36 -0
  137. package/docs-src/components/html-editor.page.html +41 -0
  138. package/docs-src/components/markdown-editor.page.html +439 -0
  139. package/docs-src/components/resize.page.html +3 -0
  140. package/docs-src/components/text-to-speech.page.html +44 -1
  141. package/docs-src/components/voice-selector.page.html +125 -0
  142. package/docs-src/index.page.html +30 -0
  143. package/docs-src/nav.fragment.html +19 -0
  144. package/docs-src/utils/elevation.page.html +4 -10
  145. package/docs-src/utils/sanitizeHtml.page.html +73 -0
  146. package/docs-src/utils/voice.page.html +66 -0
  147. package/icons/done_all.svg +1 -0
  148. package/icons/format_quote.svg +1 -0
  149. package/icons/format_strikethrough.svg +1 -0
  150. package/icons/send.svg +1 -0
  151. package/icons/text_fields.svg +1 -0
  152. package/llms.txt +7 -2
  153. package/package.json +3 -2
  154. package/src/components/Chat.js +435 -0
  155. package/src/components/CodeEditor.js +58 -2
  156. package/src/components/Dropdown.js +1 -1
  157. package/src/components/HtmlEditor.js +84 -4
  158. package/src/components/MarkdownEditor.js +654 -0
  159. package/src/components/Resize.js +17 -1
  160. package/src/components/TextToSpeech.js +13 -2
  161. package/src/components/VoiceSelector.js +271 -0
  162. package/src/components/markdownEditorControls/Bold.js +30 -0
  163. package/src/components/markdownEditorControls/BulletList.js +30 -0
  164. package/src/components/markdownEditorControls/Code.js +39 -0
  165. package/src/components/markdownEditorControls/FormatBlock.js +102 -0
  166. package/src/components/markdownEditorControls/Heading.js +45 -0
  167. package/src/components/markdownEditorControls/Image.js +250 -0
  168. package/src/components/markdownEditorControls/Italic.js +30 -0
  169. package/src/components/markdownEditorControls/Link.js +74 -0
  170. package/src/components/markdownEditorControls/MarkdownEditorControl.js +158 -0
  171. package/src/components/markdownEditorControls/Menu.js +86 -0
  172. package/src/components/markdownEditorControls/NumberedList.js +69 -0
  173. package/src/components/markdownEditorControls/Quote.js +30 -0
  174. package/src/components/markdownEditorControls/SpeechToText.js +65 -0
  175. package/src/components/markdownEditorControls/Strikethrough.js +35 -0
  176. package/src/components/markdownEditorControls/Table.js +164 -0
  177. package/src/utils/marked.esm.js +77 -0
  178. package/src/utils/renderMarkdown.js +29 -0
  179. package/src/utils/sanitizeHtml.js +137 -0
  180. package/src/utils/voice.js +103 -0
  181. package/tests/components/Chat.browser-test.js +540 -0
  182. package/tests/components/TextToSpeech.browser-test.js +150 -1
  183. package/tests/components/VoiceSelector.browser-test.js +374 -0
  184. package/tests/utils/sanitizeHtml.browser-test.js +179 -0
  185. package/tests/utils/voice.browser-test.js +128 -0
@@ -0,0 +1,11 @@
1
+ import t from"./MarkdownEditorControl.js";import{html as r}from"../../lit-all.min.js";import"../Icon.js";export default class e extends t{constructor(){super(),this.label="Strikethrough"}command(){this.wrapSelection("~~","~~","strikethrough")}render(){return r`
2
+ <button
3
+ type="button"
4
+ class=${this.btnClass}
5
+ title=${this.label}
6
+ aria-label=${this.label}
7
+ @click=${this.handleClick}
8
+ >
9
+ <k-icon name="format_strikethrough"></k-icon>
10
+ </button>
11
+ `}}customElements.define("k-md-strikethrough",e);
@@ -0,0 +1,80 @@
1
+ import t from"./MarkdownEditorControl.js";import{html as e,css as r}from"../../lit-all.min.js";import"../Icon.js";import"../Dropdown.js";export default class o extends t{constructor(){super(),this.label="Table"}command(){}handleDropdownOpened=()=>{requestAnimationFrame(()=>{const t=this.shadowRoot?.querySelector(".tbl-cols");t&&(t.value="3",t.select());const e=this.shadowRoot?.querySelector(".tbl-rows");e&&(e.value="2")})};handleFormKeydown=t=>{"Enter"===t.key?(t.preventDefault(),this.#t()):"Escape"===t.key&&this.shadowRoot?.querySelector("k-dropdown")?.close()};handleInsertClick=()=>this.#t();#t(){const t=this.#e(this.shadowRoot?.querySelector(".tbl-cols")?.value,1,20),e=this.#e(this.shadowRoot?.querySelector(".tbl-rows")?.value,1,50);if(!t||!e)return;const r=this.editor;r&&(r.replaceSelection(this.#r(t,e),{selectInserted:!1}),this.shadowRoot?.querySelector("k-dropdown")?.close())}#e(t,e,r){const o=parseInt(t,10);return Number.isFinite(o)?Math.max(e,Math.min(r,o)):0}#r(t,e){const r=Array.from({length:t},(t,e)=>` Header ${e+1} `).join("|"),o=Array.from({length:t},()=>" --- ").join("|"),n=Array.from({length:t},()=>" ").join("|");return`\n${[`|${r}|`,`|${o}|`,...Array.from({length:e},()=>`|${n}|`)].join("\n")}\n`}render(){return e`
2
+ <k-dropdown @opened=${this.handleDropdownOpened}>
3
+ <button
4
+ slot="trigger"
5
+ type="button"
6
+ class=${this.btnClass}
7
+ title=${this.label}
8
+ aria-label=${this.label}
9
+ >
10
+ <k-icon name="table"></k-icon>
11
+ </button>
12
+ <div class="tbl-form" @keydown=${this.handleFormKeydown}>
13
+ <input
14
+ class="tbl-cols"
15
+ type="number"
16
+ min="1"
17
+ max="20"
18
+ inputmode="numeric"
19
+ aria-label="Columns"
20
+ value="3"
21
+ />
22
+ <span class="tbl-x" aria-hidden="true">×</span>
23
+ <input
24
+ class="tbl-rows"
25
+ type="number"
26
+ min="1"
27
+ max="50"
28
+ inputmode="numeric"
29
+ aria-label="Rows"
30
+ value="2"
31
+ />
32
+ <button type="button" class="primary" @click=${this.handleInsertClick}>Insert</button>
33
+ </div>
34
+ </k-dropdown>
35
+ `}static styles=[t.styles,r`
36
+ .tbl-form {
37
+ display: flex;
38
+ align-items: center;
39
+ gap: 0.4rem;
40
+ padding: 0.5rem;
41
+ }
42
+ .tbl-form input {
43
+ width: 2.5rem;
44
+ padding: 0.35rem 0.4rem;
45
+ border: 1px solid var(--c_border);
46
+ border-radius: var(--radius);
47
+ font: inherit;
48
+ background: var(--c_bg);
49
+ color: var(--tc);
50
+ text-align: center;
51
+ /* Hide the up/down spinner buttons that take up extra width. */
52
+ -moz-appearance: textfield;
53
+ }
54
+ .tbl-form input::-webkit-inner-spin-button,
55
+ .tbl-form input::-webkit-outer-spin-button {
56
+ -webkit-appearance: none;
57
+ margin: 0;
58
+ }
59
+ .tbl-form input:focus-visible {
60
+ outline: none;
61
+ box-shadow: var(--focus_shadow);
62
+ }
63
+ .tbl-x {
64
+ color: var(--tc_muted);
65
+ font-weight: bold;
66
+ }
67
+ .tbl-form button.primary {
68
+ padding: 0.4rem 0.8rem;
69
+ border: 1px solid var(--c_primary);
70
+ border-radius: var(--radius);
71
+ background: var(--c_primary);
72
+ color: white;
73
+ cursor: pointer;
74
+ font: inherit;
75
+ }
76
+ .tbl-form button.primary:focus-visible {
77
+ outline: none;
78
+ box-shadow: var(--focus_shadow);
79
+ }
80
+ `]}customElements.define("k-md-table",o);
@@ -0,0 +1 @@
1
+ function e(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var t={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};function n(e){t=e}var r={exec:()=>null};function s(e,t=""){let n="string"==typeof e?e:e.source,r={replace:(e,t)=>{let s="string"==typeof t?t:t.source;return s=s.replace(i.caret,"$1"),n=n.replace(e,s),r},getRegex:()=>new RegExp(n,t)};return r}var l=((e="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+e)}catch{return!1}})(),i={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,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,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[\t ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}>`)},a=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,o=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,c=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,h=s(c).replace(/bull/g,o).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(),p=s(c).replace(/bull/g,o).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(),u=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,g=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,k=s(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",g).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),d=s(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,o).getRegex(),f="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",x=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,b=s("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",x).replace("tag",f).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),w=s(u).replace("hr",a).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[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",f).getRegex(),m={blockquote:s(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",w).getRegex(),code:/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,def:k,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:a,html:b,lheading:h,list:d,newline:/^(?:[ \t]*(?:\n|$))+/,paragraph:w,table:r,text:/^[^\n]+/},y=s("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",a).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",f).getRegex(),$={...m,lheading:p,table:y,paragraph:s(u).replace("hr",a).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",y).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",f).getRegex()},R={...m,html:s("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",x).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:r,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:s(u).replace("hr",a).replace("heading"," *#{1,6} *[^\n]").replace("lheading",h).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},S=/^( {2,}|\\)\n(?!\s*$)/,T=/[\p{P}\p{S}]/u,z=/[\s\p{P}\p{S}]/u,A=/[^\s\p{P}\p{S}]/u,_=s(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,z).getRegex(),P=/(?!~)[\p{P}\p{S}]/u,L=s(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",l?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),I=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,E=s(I,"u").replace(/punct/g,T).getRegex(),C=s(I,"u").replace(/punct/g,P).getRegex(),B="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",q=s(B,"gu").replace(/notPunctSpace/g,A).replace(/punctSpace/g,z).replace(/punct/g,T).getRegex(),v=s(B,"gu").replace(/notPunctSpace/g,/(?:[^\s\p{P}\p{S}]|~)/u).replace(/punctSpace/g,/(?!~)[\s\p{P}\p{S}]/u).replace(/punct/g,P).getRegex(),Z=s("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,A).replace(/punctSpace/g,z).replace(/punct/g,T).getRegex(),D=s(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,T).getRegex(),M=s("^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)","gu").replace(/notPunctSpace/g,A).replace(/punctSpace/g,z).replace(/punct/g,T).getRegex(),Q=s(/\\(punct)/,"gu").replace(/punct/g,T).getRegex(),H=s(/^<(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(),O=s(x).replace("(?:--\x3e|$)","--\x3e").getRegex(),j=s("^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",O).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),N=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,G=s(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",N).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),X=s(/^!?\[(label)\]\[(ref)\]/).replace("label",N).replace("ref",g).getRegex(),W=s(/^!?\[(ref)\](?:\[\])?/).replace("ref",g).getRegex(),F=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,U={_backpedal:r,anyPunctuation:Q,autolink:H,blockSkip:L,br:S,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:r,delLDelim:r,delRDelim:r,emStrongLDelim:E,emStrongRDelimAst:q,emStrongRDelimUnd:Z,escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,link:G,nolink:W,punctuation:_,reflink:X,reflinkSearch:s("reflink|nolink(?!\\()","g").replace("reflink",X).replace("nolink",W).getRegex(),tag:j,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,url:r},J={...U,link:s(/^!?\[(label)\]\((.*?)\)/).replace("label",N).getRegex(),reflink:s(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",N).getRegex()},K={...U,emStrongRDelimAst:v,emStrongLDelim:C,delLDelim:D,delRDelim:M,url:s(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",F).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:s(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",F).getRegex()},V={...K,br:s(S).replace("{2,}","*").getRegex(),text:s(K.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},Y={normal:m,gfm:$,pedantic:R},ee={normal:U,gfm:K,breaks:V,pedantic:J},te={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},ne=e=>te[e];function re(e,t){if(t){if(i.escapeTest.test(e))return e.replace(i.escapeReplace,ne)}else if(i.escapeTestNoEncode.test(e))return e.replace(i.escapeReplaceNoEncode,ne);return e}function se(e){try{e=encodeURI(e).replace(i.percentDecode,"%")}catch{return null}return e}function le(e,t){let n=e.replace(i.findPipe,(e,t,n)=>{let r=!1,s=t;for(;--s>=0&&"\\"===n[s];)r=!r;return r?"|":" |"}).split(i.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(i.slashPipe,"|");return n}function ie(e,t,n){let r=e.length;if(0===r)return"";let s=0;for(;s<r;){let l=e.charAt(r-s-1);if(l!==t||n){if(l===t||!n)break;s++}else s++}return e.slice(0,r-s)}function ae(e){let t=e.split("\n"),n=t.length-1;for(;n>=0&&i.blankLine.test(t[n]);)n--;return t.length-n<=2?e:t.slice(0,n+1).join("\n")}function oe(e,t=0){let n=t,r="";for(let t of e)if("\t"===t){let e=4-n%4;r+=" ".repeat(e),n+=e}else r+=t,n++;return r}function ce(e,t,n,r,s){let l=t.href,i=t.title||null,a=e[1].replace(s.other.outputLinkReplace,"$1");r.state.inLink=!0;let o={type:"!"===e[0].charAt(0)?"image":"link",raw:n,href:l,title:i,text:a,tokens:r.inlineTokens(a)};return r.state.inLink=!1,o}var he=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 e=this.options.pedantic?t[0]:ae(t[0]),n=e.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e,codeBlockStyle:"indented",text:n}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=function(e,t,n){let r=e.match(n.other.indentCodeCompensation);if(null===r)return t;let s=r[1];return t.split("\n").map(e=>{let t=e.match(n.other.beginningSpace);if(null===t)return e;let[r]=t;return r.length>=s.length?e.slice(s.length):e}).join("\n")}(e,t[3]||"",this.rules);return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(this.rules.other.endingHash.test(e)){let t=ie(e,"#");(this.options.pedantic||!t||this.rules.other.endingSpaceChar.test(t))&&(e=t.trim())}return{type:"heading",raw:ie(t[0],"\n"),depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:ie(t[0],"\n")}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=ie(t[0],"\n").split("\n"),n="",r="",s=[];for(;e.length>0;){let t,l=!1,i=[];for(t=0;t<e.length;t++)if(this.rules.other.blockquoteStart.test(e[t]))i.push(e[t]),l=!0;else{if(l)break;i.push(e[t])}e=e.slice(t);let a=i.join("\n"),o=a.replace(this.rules.other.blockquoteSetextReplace,"\n $1").replace(this.rules.other.blockquoteSetextReplace2,"");n=n?`${n}\n${a}`:a,r=r?`${r}\n${o}`:o;let c=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(o,s,!0),this.lexer.state.top=c,0===e.length)break;let h=s.at(-1);if("code"===h?.type)break;if("blockquote"===h?.type){let t=h,l=t.raw+"\n"+e.join("\n"),i=this.blockquote(l);s[s.length-1]=i,n=n.substring(0,n.length-t.raw.length)+i.raw,r=r.substring(0,r.length-t.text.length)+i.text;break}if("list"===h?.type){let t=h,l=t.raw+"\n"+e.join("\n"),i=this.list(l);s[s.length-1]=i,n=n.substring(0,n.length-h.raw.length)+i.raw,r=r.substring(0,r.length-t.raw.length)+i.raw,e=l.substring(s.at(-1).raw.length).split("\n");continue}}return{type:"blockquote",raw:n,tokens:s,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,s={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:"[*+-]");let l=this.rules.other.listItemRegex(n),i=!1;for(;e;){let n=!1,r="",a="";if(!(t=l.exec(e))||this.rules.block.hr.test(e))break;r=t[0],e=e.substring(r.length);let o=oe(t[2].split("\n",1)[0],t[1].length),c=e.split("\n",1)[0],h=!o.trim(),p=0;if(this.options.pedantic?(p=2,a=o.trimStart()):h?p=t[1].length+1:(p=o.search(this.rules.other.nonSpaceChar),p=p>4?1:p,a=o.slice(p),p+=t[1].length),h&&this.rules.other.blankLine.test(c)&&(r+=c+"\n",e=e.substring(c.length+1),n=!0),!n){let t=this.rules.other.nextBulletRegex(p),n=this.rules.other.hrRegex(p),s=this.rules.other.fencesBeginRegex(p),l=this.rules.other.headingBeginRegex(p),i=this.rules.other.htmlBeginRegex(p),u=this.rules.other.blockquoteBeginRegex(p);for(;e;){let g,k=e.split("\n",1)[0];if(c=k,this.options.pedantic?(c=c.replace(this.rules.other.listReplaceNesting," "),g=c):g=c.replace(this.rules.other.tabCharGlobal," "),s.test(c)||l.test(c)||i.test(c)||u.test(c)||t.test(c)||n.test(c))break;if(g.search(this.rules.other.nonSpaceChar)>=p||!c.trim())a+="\n"+g.slice(p);else{if(h||o.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||s.test(o)||l.test(o)||n.test(o))break;a+="\n"+c}h=!c.trim(),r+=k+"\n",e=e.substring(k.length+1),o=g.slice(p)}}s.loose||(i?s.loose=!0:this.rules.other.doubleBlankLine.test(r)&&(i=!0)),s.items.push({type:"list_item",raw:r,task:!!this.options.gfm&&this.rules.other.listIsTask.test(a),loose:!1,text:a,tokens:[]}),s.raw+=r}let a=s.items.at(-1);if(!a)return;a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd(),s.raw=s.raw.trimEnd();for(let e of s.items){if(this.lexer.state.top=!1,e.tokens=this.lexer.blockTokens(e.text,[]),e.task){if(e.text=e.text.replace(this.rules.other.listReplaceTask,""),"text"===e.tokens[0]?.type||"paragraph"===e.tokens[0]?.type){e.tokens[0].raw=e.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),e.tokens[0].text=e.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let e=this.lexer.inlineQueue.length-1;e>=0;e--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[e].src)){this.lexer.inlineQueue[e].src=this.lexer.inlineQueue[e].src.replace(this.rules.other.listReplaceTask,"");break}}let t=this.rules.other.listTaskCheckbox.exec(e.raw);if(t){let n={type:"checkbox",raw:t[0]+" ",checked:"[ ]"!==t[0]};e.checked=n.checked,s.loose?e.tokens[0]&&["paragraph","text"].includes(e.tokens[0].type)&&"tokens"in e.tokens[0]&&e.tokens[0].tokens?(e.tokens[0].raw=n.raw+e.tokens[0].raw,e.tokens[0].text=n.raw+e.tokens[0].text,e.tokens[0].tokens.unshift(n)):e.tokens.unshift({type:"paragraph",raw:n.raw,text:n.raw,tokens:[n]}):e.tokens.unshift(n)}}if(!s.loose){let t=e.tokens.filter(e=>"space"===e.type),n=t.length>0&&t.some(e=>this.rules.other.anyLine.test(e.raw));s.loose=n}}if(s.loose)for(let e of s.items){e.loose=!0;for(let t of e.tokens)"text"===t.type&&(t.type="paragraph")}return s}}html(e){let t=this.rules.block.html.exec(e);if(t){let e=ae(t[0]);return{type:"html",block:!0,raw:e,pre:"pre"===t[1]||"script"===t[1]||"style"===t[1],text:e}}}def(e){let t=this.rules.block.def.exec(e);if(t){let e=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),n=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:e,raw:ie(t[0],"\n"),href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=le(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),s=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split("\n"):[],l={type:"table",raw:ie(t[0],"\n"),header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)this.rules.other.tableAlignRight.test(e)?l.align.push("right"):this.rules.other.tableAlignCenter.test(e)?l.align.push("center"):this.rules.other.tableAlignLeft.test(e)?l.align.push("left"):l.align.push(null);for(let e=0;e<n.length;e++)l.header.push({text:n[e],tokens:this.lexer.inline(n[e]),header:!0,align:l.align[e]});for(let e of s)l.rows.push(le(e,l.header.length).map((e,t)=>({text:e,tokens:this.lexer.inline(e),header:!1,align:l.align[t]})));return l}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let e=t[1].trim();return{type:"heading",raw:ie(t[0],"\n"),depth:"="===t[2].charAt(0)?1:2,text:e,tokens:this.lexer.inline(e)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let e=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(e)){if(!this.rules.other.endAngleBracket.test(e))return;let t=ie(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{let e=function(e,t){if(-1===e.indexOf(t[1]))return-1;let n=0;for(let r=0;r<e.length;r++)if("\\"===e[r])r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return n>0?-2:-1}(t[2],"()");if(-2===e)return;if(e>-1){let n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){let e=this.rules.other.pedanticHrefTitle.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(n=this.options.pedantic&&!this.rules.other.endAngleBracket.test(e)?n.slice(1):n.slice(1,-1)),ce(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.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 e=t[(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," ").toLowerCase()];if(!e){let e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return ce(n,e,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let r=this.rules.inline.emStrongLDelim.exec(e);if(r&&(r[1]||r[2]||r[3]||r[4])&&(!r[4]||!n.match(this.rules.other.unicodeAlphaNumeric))&&(!r[1]&&!r[3]||!n||this.rules.inline.punctuation.exec(n))){let n,s,l=[...r[0]].length-1,i=l,a=0,o="*"===r[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(o.lastIndex=0,t=t.slice(-1*e.length+l);null!==(r=o.exec(t));){if(n=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!n)continue;if(s=[...n].length,r[3]||r[4]){i+=s;continue}if((r[5]||r[6])&&l%3&&!((l+s)%3)){a+=s;continue}if(i-=s,i>0)continue;s=Math.min(s,s+i+a);let t=[...r[0]][0].length,o=e.slice(0,l+r.index+t+s);if(Math.min(l,s)%2){let e=o.slice(1,-1);return{type:"em",raw:o,text:e,tokens:this.lexer.inlineTokens(e)}}let c=o.slice(2,-2);return{type:"strong",raw:o,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(this.rules.other.newLineCharGlobal," "),n=this.rules.other.nonSpaceChar.test(e),r=this.rules.other.startingSpaceChar.test(e)&&this.rules.other.endingSpaceChar.test(e);return n&&r&&(e=e.substring(1,e.length-1)),{type:"codespan",raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let r=this.rules.inline.delLDelim.exec(e);if(r&&(!r[1]||!n||this.rules.inline.punctuation.exec(n))){let n,s,l=[...r[0]].length-1,i=l,a=this.rules.inline.delRDelim;for(a.lastIndex=0,t=t.slice(-1*e.length+l);null!==(r=a.exec(t));){if(n=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!n||(s=[...n].length,s!==l))continue;if(r[3]||r[4]){i+=s;continue}if(i-=s,i>0)continue;s=Math.min(s,s+i);let t=[...r[0]][0].length,a=e.slice(0,l+r.index+t+s),o=a.slice(l,-l);return{type:"del",raw:a,text:o,tokens:this.lexer.inlineTokens(o)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return"@"===t[2]?(e=t[1],n="mailto:"+e):(e=t[1],n=e),{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if("@"===t[2])e=t[0],n="mailto:"+e;else{let r;do{r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??""}while(r!==t[0]);e=t[0],n="www."===t[1]?"http://"+t[0]:t[0]}return{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:e}}}},pe=class e{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||t,this.options.tokenizer=this.options.tokenizer||new he,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:i,block:Y.normal,inline:ee.normal};this.options.pedantic?(n.block=Y.pedantic,n.inline=ee.pedantic):this.options.gfm&&(n.block=Y.gfm,this.options.breaks?n.inline=ee.breaks:n.inline=ee.gfm),this.tokenizer.rules=n}static get rules(){return{block:Y,inline:ee}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){e=e.replace(i.carriageReturn,"\n"),this.blockTokens(e,this.tokens);for(let e=0;e<this.inlineQueue.length;e++){let t=this.inlineQueue[e];this.inlineTokens(t.src,t.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(i.tabCharGlobal," ").replace(i.spaceLine,""));let r=1/0;for(;e;){if(!(e.length<r)){this.infiniteLoopError(e.charCodeAt(0));break}let s;if(r=e.length,this.options.extensions?.block?.some(n=>!!(s=n.call({lexer:this},e,t))&&(e=e.substring(s.raw.length),t.push(s),!0)))continue;if(s=this.tokenizer.space(e)){e=e.substring(s.raw.length);let n=t.at(-1);1===s.raw.length&&void 0!==n?n.raw+="\n":t.push(s);continue}if(s=this.tokenizer.code(e)){e=e.substring(s.raw.length);let n=t.at(-1);"paragraph"===n?.type||"text"===n?.type?(n.raw+=(n.raw.endsWith("\n")?"":"\n")+s.raw,n.text+="\n"+s.text,this.inlineQueue.at(-1).src=n.text):t.push(s);continue}if(s=this.tokenizer.fences(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.heading(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.hr(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.blockquote(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.list(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.html(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.def(e)){e=e.substring(s.raw.length);let n=t.at(-1);"paragraph"===n?.type||"text"===n?.type?(n.raw+=(n.raw.endsWith("\n")?"":"\n")+s.raw,n.text+="\n"+s.raw,this.inlineQueue.at(-1).src=n.text):this.tokens.links[s.tag]||(this.tokens.links[s.tag]={href:s.href,title:s.title},t.push(s));continue}if(s=this.tokenizer.table(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.lheading(e)){e=e.substring(s.raw.length),t.push(s);continue}let l=e;if(this.options.extensions?.startBlock){let t,n=1/0,r=e.slice(1);this.options.extensions.startBlock.forEach(e=>{t=e.call({lexer:this},r),"number"==typeof t&&t>=0&&(n=Math.min(n,t))}),n<1/0&&n>=0&&(l=e.substring(0,n+1))}if(this.state.top&&(s=this.tokenizer.paragraph(l))){let r=t.at(-1);n&&"paragraph"===r?.type?(r.raw+=(r.raw.endsWith("\n")?"":"\n")+s.raw,r.text+="\n"+s.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):t.push(s),n=l.length!==e.length,e=e.substring(s.raw.length);continue}if(s=this.tokenizer.text(e)){e=e.substring(s.raw.length);let n=t.at(-1);"text"===n?.type?(n.raw+=(n.raw.endsWith("\n")?"":"\n")+s.raw,n.text+="\n"+s.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=n.text):t.push(s);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n,r=e,s=null;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;null!==(s=this.tokenizer.rules.inline.reflinkSearch.exec(r));)e.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(r=r.slice(0,s.index)+"["+"a".repeat(s[0].length-2)+"]"+r.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!==(s=this.tokenizer.rules.inline.anyPunctuation.exec(r));)r=r.slice(0,s.index)+"++"+r.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;null!==(s=this.tokenizer.rules.inline.blockSkip.exec(r));)n=s[2]?s[2].length:0,r=r.slice(0,s.index+n)+"["+"a".repeat(s[0].length-n-2)+"]"+r.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);r=this.options.hooks?.emStrongMask?.call({lexer:this},r)??r;let l=!1,i="",a=1/0;for(;e;){if(!(e.length<a)){this.infiniteLoopError(e.charCodeAt(0));break}let n;if(a=e.length,l||(i=""),l=!1,this.options.extensions?.inline?.some(r=>!!(n=r.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)))continue;if(n=this.tokenizer.escape(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.tag(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.link(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(n.raw.length);let r=t.at(-1);"text"===n.type&&"text"===r?.type?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(n=this.tokenizer.emStrong(e,r,i)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.codespan(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.br(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.del(e,r,i)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.autolink(e)){e=e.substring(n.raw.length),t.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(e))){e=e.substring(n.raw.length),t.push(n);continue}let s=e;if(this.options.extensions?.startInline){let t,n=1/0,r=e.slice(1);this.options.extensions.startInline.forEach(e=>{t=e.call({lexer:this},r),"number"==typeof t&&t>=0&&(n=Math.min(n,t))}),n<1/0&&n>=0&&(s=e.substring(0,n+1))}if(n=this.tokenizer.inlineText(s)){e=e.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(i=n.raw.slice(-1)),l=!0;let r=t.at(-1);"text"===r?.type?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t="Infinite loop on byte: "+e;if(!this.options.silent)throw new Error(t);console.error(t)}},ue=class{options;parser;constructor(e){this.options=e||t}space(e){return""}code({text:e,lang:t,escaped:n}){let r=(t||"").match(i.notSpaceStart)?.[0],s=e.replace(i.endingNewline,"")+"\n";return r?'<pre><code class="language-'+re(r)+'">'+(n?s:re(s,!0))+"</code></pre>\n":"<pre><code>"+(n?s:re(s,!0))+"</code></pre>\n"}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return"<hr>\n"}list(e){let t=e.ordered,n=e.start,r="";for(let t=0;t<e.items.length;t++){let n=e.items[t];r+=this.listitem(n)}let s=t?"ol":"ul";return"<"+s+(t&&1!==n?' start="'+n+'"':"")+">\n"+r+"</"+s+">\n"}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>\n`}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t="",n="";for(let t=0;t<e.header.length;t++)n+=this.tablecell(e.header[t]);t+=this.tablerow({text:n});let r="";for(let t=0;t<e.rows.length;t++){let s=e.rows[t];n="";for(let e=0;e<s.length;e++)n+=this.tablecell(s[e]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),"<table>\n<thead>\n"+t+"</thead>\n"+r+"</table>\n"}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${re(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),s=se(e);if(null===s)return r;let l='<a href="'+(e=s)+'"';return t&&(l+=' title="'+re(t)+'"'),l+=">"+r+"</a>",l}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let s=se(e);if(null===s)return re(n);let l=`<img src="${e=s}" alt="${re(n)}"`;return t&&(l+=` title="${re(t)}"`),l+=">",l}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:re(e.text)}},ge=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}},ke=class e{options;renderer;textRenderer;constructor(e){this.options=e||t,this.options.renderer=this.options.renderer||new ue,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new ge}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t="";for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(!1!==n||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(e.type)){t+=n||"";continue}}let s=r;switch(s.type){case"space":t+=this.renderer.space(s);break;case"hr":t+=this.renderer.hr(s);break;case"heading":t+=this.renderer.heading(s);break;case"code":t+=this.renderer.code(s);break;case"table":t+=this.renderer.table(s);break;case"blockquote":t+=this.renderer.blockquote(s);break;case"list":t+=this.renderer.list(s);break;case"checkbox":t+=this.renderer.checkbox(s);break;case"html":t+=this.renderer.html(s);break;case"def":t+=this.renderer.def(s);break;case"paragraph":t+=this.renderer.paragraph(s);break;case"text":t+=this.renderer.text(s);break;default:{let e='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(e),"";throw new Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n="";for(let r=0;r<e.length;r++){let s=e[r];if(this.options.extensions?.renderers?.[s.type]){let e=this.options.extensions.renderers[s.type].call({parser:this},s);if(!1!==e||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(s.type)){n+=e||"";continue}}let l=s;switch(l.type){case"escape":case"text":n+=t.text(l);break;case"html":n+=t.html(l);break;case"link":n+=t.link(l);break;case"image":n+=t.image(l);break;case"checkbox":n+=t.checkbox(l);break;case"strong":n+=t.strong(l);break;case"em":n+=t.em(l);break;case"codespan":n+=t.codespan(l);break;case"br":n+=t.br(l);break;case"del":n+=t.del(l);break;default:{let e='Token with "'+l.type+'" type was not found.';if(this.options.silent)return console.error(e),"";throw new Error(e)}}}return n}},de=class{options;block;constructor(e){this.options=e||t}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?pe.lex:pe.lexInline}provideParser(e=this.block){return e?ke.parse:ke.parseInline}},fe=class{defaults={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=ke;Renderer=ue;TextRenderer=ge;Lexer=pe;Tokenizer=he;Hooks=de;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 e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case"list":{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let s=e[r].flat(1/0);n=n.concat(this.walkTokens(s,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw new Error("extension name required");if("renderer"in e){let n=t.renderers[e.name];t.renderers[e.name]=n?function(...t){let r=e.renderer.apply(this,t);return!1===r&&(r=n.apply(this,t)),r}:e.renderer}if("tokenizer"in e){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&("block"===e.level?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:"inline"===e.level&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}"childTokens"in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new ue(this.defaults);for(let n in e.renderer){if(!(n in t))throw new Error(`renderer '${n}' does not exist`);if(["options","parser"].includes(n))continue;let r=n,s=e.renderer[r],l=t[r];t[r]=(...e)=>{let n=s.apply(t,e);return!1===n&&(n=l.apply(t,e)),n||""}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new he(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw new Error(`tokenizer '${n}' does not exist`);if(["options","rules","lexer"].includes(n))continue;let r=n,s=e.tokenizer[r],l=t[r];t[r]=(...e)=>{let n=s.apply(t,e);return!1===n&&(n=l.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new de;for(let n in e.hooks){if(!(n in t))throw new Error(`hook '${n}' does not exist`);if(["options","block"].includes(n))continue;let r=n,s=e.hooks[r],l=t[r];de.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async&&de.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await s.call(t,e);return l.call(t,n)})();let r=s.call(t,e);return l.call(t,r)}:t[r]=(...e)=>{if(this.defaults.async)return(async()=>{let n=await s.apply(t,e);return!1===n&&(n=await l.apply(t,e)),n})();let n=s.apply(t,e);return!1===n&&(n=l.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return pe.lex(e,t??this.defaults)}parser(e,t){return ke.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},s={...this.defaults,...r},l=this.onError(!!s.silent,!!s.async);if(!0===this.defaults.async&&!1===r.async)return l(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 t>"u"||null===t)return l(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof t)return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let n=s.hooks?await s.hooks.preprocess(t):t,r=await(s.hooks?await s.hooks.provideLexer(e):e?pe.lex:pe.lexInline)(n,s),l=s.hooks?await s.hooks.processAllTokens(r):r;s.walkTokens&&await Promise.all(this.walkTokens(l,s.walkTokens));let i=await(s.hooks?await s.hooks.provideParser(e):e?ke.parse:ke.parseInline)(l,s);return s.hooks?await s.hooks.postprocess(i):i})().catch(l);try{s.hooks&&(t=s.hooks.preprocess(t));let n=(s.hooks?s.hooks.provideLexer(e):e?pe.lex:pe.lexInline)(t,s);s.hooks&&(n=s.hooks.processAllTokens(n)),s.walkTokens&&this.walkTokens(n,s.walkTokens);let r=(s.hooks?s.hooks.provideParser(e):e?ke.parse:ke.parseInline)(n,s);return s.hooks&&(r=s.hooks.postprocess(r)),r}catch(e){return l(e)}}}onError(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){let e="<p>An error occurred:</p><pre>"+re(n.message+"",!0)+"</pre>";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}},xe=new fe;function be(e,t){return xe.parse(e,t)}be.options=be.setOptions=function(e){return xe.setOptions(e),be.defaults=xe.defaults,n(be.defaults),be},be.getDefaults=e,be.defaults=t,be.use=function(...e){return xe.use(...e),be.defaults=xe.defaults,n(be.defaults),be},be.walkTokens=function(e,t){return xe.walkTokens(e,t)},be.parseInline=xe.parseInline,be.Parser=ke,be.parser=ke.parse,be.Renderer=ue,be.TextRenderer=ge,be.Lexer=pe,be.lexer=pe.lex,be.Tokenizer=he,be.Hooks=de,be.parse=be;var we=be.options,me=be.setOptions,ye=be.use,$e=be.walkTokens,Re=be.parseInline,Se=be,Te=ke.parse,ze=pe.lex;export{de as Hooks,pe as Lexer,fe as Marked,ke as Parser,ue as Renderer,ge as TextRenderer,he as Tokenizer,t as defaults,e as getDefaults,ze as lexer,be as marked,we as options,Se as parse,Re as parseInline,Te as parser,me as setOptions,ye as use,$e as walkTokens};
@@ -0,0 +1 @@
1
+ import{marked as r}from"./marked.esm.js";export default function e(e,m={}){return r.parse(e||"",{gfm:!0,breaks:!1,...m})}
@@ -0,0 +1 @@
1
+ const e=new Set(["A","B","STRONG","I","EM","U","S","STRIKE","DEL","BR","HR","P","DIV","SPAN","IMG","INPUT","UL","OL","LI","BLOCKQUOTE","CODE","PRE","H1","H2","H3","H4","H5","H6","TABLE","THEAD","TBODY","TFOOT","TR","TD","TH"]),t=new Set(["SCRIPT","STYLE","IFRAME","OBJECT","EMBED","LINK","META","BASE","FRAME","FRAMESET","NOSCRIPT","SVG","MATH"]),n=new Set(["class"]),r={A:new Set(["href","title","target","rel"]),IMG:new Set(["src","alt","title","width","height"]),INPUT:new Set(["type","checked","disabled"]),TD:new Set(["colspan","rowspan","align"]),TH:new Set(["colspan","rowspan","scope","align"])},o=/^(https?:|mailto:|tel:|\/|#|\.\.?\/)/i,s=e=>{if(!e)return"";const t=String(e).trim();return o.test(t)?t:""},i=(e,t,n,r,o)=>{const a=[...e.childNodes];for(const l of a)if(l.nodeType===Node.ELEMENT_NODE){const a=l.tagName;if(o.has(a)){e.removeChild(l);continue}if(!t.has(a)){for(i(l,t,n,r,o);l.firstChild;)e.insertBefore(l.firstChild,l);e.removeChild(l);continue}const T=r[a]||new Set;for(const e of[...l.attributes]){const t=e.name.toLowerCase();if(n.has(t)||T.has(t)||t.startsWith("data-")){if("href"===t||"src"===t){const t=s(e.value);t?l.setAttribute(e.name,t):l.removeAttribute(e.name)}}else l.removeAttribute(e.name)}"A"===a&&"_blank"===l.getAttribute("target")&&l.setAttribute("rel","noopener noreferrer"),i(l,t,n,r,o)}else l.nodeType===Node.COMMENT_NODE&&e.removeChild(l)},a=(o,s={})=>{if(null==o)return"";const a=String(o);if(!a)return"";const l=s.allowedTags||e,T=s.allowedAttrs||n,c=s.allowedAttrsPerTag||r,E=s.stripCompletely||t,d=document.createElement("template");return d.innerHTML=a,i(d.content,l,T,c,E),d.innerHTML};export default a;export{a as sanitizeHtml,e as DEFAULT_TAGS,n as DEFAULT_ATTRS_GLOBAL,r as DEFAULT_ATTRS_PER_TAG,t as STRIP_COMPLETELY};
@@ -0,0 +1 @@
1
+ import e from"./context.js";const t="k-voice",o=e("voice",(()=>{try{return localStorage.getItem(t)||""}catch(e){return""}})());o.subscribe(e=>{try{e?localStorage.setItem(t,e):localStorage.removeItem(t)}catch(e){}}),"undefined"!=typeof window&&window.addEventListener("storage",e=>{e.key===t&&o.set(e.newValue||"")});export const setVoice=e=>o.set(e||"");export const getVoice=()=>o.get();export const subscribeToVoice=e=>o.subscribe(e);export const getAvailableVoices=()=>"undefined"!=typeof window&&window.speechSynthesis?window.speechSynthesis.getVoices():[];export const waitForVoices=(e=2e3)=>{if("undefined"==typeof window||!window.speechSynthesis)return Promise.resolve([]);const t=window.speechSynthesis,o=t.getVoices();return o.length>0?Promise.resolve(o):new Promise(o=>{let s=!1;const i=()=>{s||(s=!0,t.removeEventListener("voiceschanged",i),o(t.getVoices()))};t.addEventListener("voiceschanged",i),setTimeout(()=>{s||(s=!0,t.removeEventListener("voiceschanged",i),o(t.getVoices()))},e)})};export const subscribeToAvailableVoices=e=>{if("undefined"==typeof window||!window.speechSynthesis)return e([]),()=>{};const t=window.speechSynthesis,o=()=>e(t.getVoices());return t.addEventListener("voiceschanged",o),o(),()=>t.removeEventListener("voiceschanged",o)};export default{get:getVoice,set:setVoice,subscribe:subscribeToVoice,getAvailable:getAvailableVoices,waitForVoices:waitForVoices,subscribeAvailable:subscribeToAvailableVoices};
@@ -67,6 +67,9 @@
67
67
  >Calendar<br><small>Component</small></a></k-filter-item>
68
68
  <k-filter-item filter-keywords="card components"><a
69
69
  href="../components/card.html">Card<br><small>Component</small></a></k-filter-item>
70
+ <k-filter-item filter-keywords="chat message conversation messaging components"><a
71
+ href="../components/chat.html"
72
+ >Chat<br><small>Component</small></a></k-filter-item>
70
73
  <k-filter-item filter-keywords="code editor codeeditor monaco components"><a
71
74
  href="../components/code-editor.html"
72
75
  >Code Editor<br><small>Component</small></a></k-filter-item>
@@ -95,6 +98,9 @@
95
98
  <k-filter-item filter-keywords="html editor components"><a
96
99
  href="../components/html-editor.html">HTML
97
100
  Editor<br><small>Component</small></a></k-filter-item>
101
+ <k-filter-item filter-keywords="markdown editor markdowneditor write preview marked gfm tables components"><a
102
+ href="../components/markdown-editor.html"
103
+ >Markdown Editor<br><small>Component</small></a></k-filter-item>
98
104
  <k-filter-item filter-keywords="icon components"><a
99
105
  href="../components/icon.html">Icon<br><small>Component</small></a></k-filter-item>
100
106
  <k-filter-item filter-keywords="import components"><a
@@ -198,6 +204,9 @@
198
204
  >Toggle<br><small>Component</small></a></k-filter-item>
199
205
  <k-filter-item filter-keywords="tree treeview components"><a
200
206
  href="../components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
207
+ <k-filter-item filter-keywords="voice selector dropdown speech synthesis preference components"><a
208
+ href="../components/voice-selector.html"
209
+ >Voice Selector<br><small>Component</small></a></k-filter-item>
201
210
  <k-filter-item filter-keywords="shadow component base"><a
202
211
  href="../components/shadow-component.html"
203
212
  >Shadow Component<br><small>Base Component</small></a></k-filter-item>
@@ -225,12 +234,17 @@
225
234
  <k-filter-item filter-keywords="propconverters prop converters utils utility"><a
226
235
  href="../utils/propConverters.html"
227
236
  >propConverters<br><small>Utility</small></a></k-filter-item>
237
+ <k-filter-item filter-keywords="sanitizehtml sanitize html xss security utils utility"><a
238
+ href="../utils/sanitizeHtml.html"
239
+ >sanitizeHtml<br><small>Utility</small></a></k-filter-item>
228
240
  <k-filter-item filter-keywords="string utils utility"><a
229
241
  href="../utils/string.html">string<br><small>Utility</small></a></k-filter-item>
230
242
  <k-filter-item filter-keywords="theme utils utility"><a
231
243
  href="../utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
232
244
  <k-filter-item filter-keywords="type utils utility"><a
233
245
  href="../utils/type.html">type<br><small>Utility</small></a></k-filter-item>
246
+ <k-filter-item filter-keywords="voice speech synthesis preference utils utility"><a
247
+ href="../utils/voice.html">voice<br><small>Utility</small></a></k-filter-item>
234
248
  <k-filter-item filter-keywords="wait async utils utility"><a
235
249
  href="../utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
236
250
  </k-filter-list>
@@ -283,6 +297,7 @@
283
297
  <a href="../components/aside.html">Aside</a>
284
298
  <a href="../components/calendar.html">Calendar</a>
285
299
  <a href="../components/card.html">Card</a>
300
+ <a href="../components/chat.html">Chat</a>
286
301
  <a href="../components/code-editor.html">Code Editor</a>
287
302
  <a href="../components/combobox.html">Combobox</a>
288
303
  <a href="../components/color-picker.html">ColorPicker</a>
@@ -293,6 +308,7 @@
293
308
  <a href="../components/filter-list.html">Filter List</a>
294
309
  <a href="../components/focus-capture.html">FocusCapture</a>
295
310
  <a href="../components/html-editor.html">HTML Editor</a>
311
+ <a href="../components/markdown-editor.html">Markdown Editor</a>
296
312
  <a href="../components/icon.html">Icon</a>
297
313
  <a href="../components/import.html">Import</a>
298
314
  <a href="../components/nav.html">Nav</a>
@@ -317,6 +333,7 @@
317
333
  <a href="../components/toast.html">Toast</a>
318
334
  <a href="../components/toggle.html">Toggle</a>
319
335
  <a href="../components/tree.html">Tree</a>
336
+ <a href="../components/voice-selector.html">Voice Selector</a>
320
337
  </div>
321
338
 
322
339
  <h5 class="mb0">Base Components</h5>
@@ -336,9 +353,11 @@
336
353
  <a href="../utils/formatTimestamp.html">formatTimestamp</a>
337
354
  <a href="../utils/object.html">object</a>
338
355
  <a href="../utils/propConverters.html">propConverters</a>
356
+ <a href="../utils/sanitizeHtml.html">sanitizeHtml</a>
339
357
  <a href="../utils/string.html">string</a>
340
358
  <a href="../utils/theme.html">theme</a>
341
359
  <a href="../utils/type.html">type</a>
360
+ <a href="../utils/voice.html">voice</a>
342
361
  <a href="../utils/wait.html">wait</a>
343
362
  </div>
344
363
  </menu>
@@ -67,6 +67,9 @@
67
67
  >Calendar<br><small>Component</small></a></k-filter-item>
68
68
  <k-filter-item filter-keywords="card components"><a
69
69
  href="../components/card.html">Card<br><small>Component</small></a></k-filter-item>
70
+ <k-filter-item filter-keywords="chat message conversation messaging components"><a
71
+ href="../components/chat.html"
72
+ >Chat<br><small>Component</small></a></k-filter-item>
70
73
  <k-filter-item filter-keywords="code editor codeeditor monaco components"><a
71
74
  href="../components/code-editor.html"
72
75
  >Code Editor<br><small>Component</small></a></k-filter-item>
@@ -95,6 +98,9 @@
95
98
  <k-filter-item filter-keywords="html editor components"><a
96
99
  href="../components/html-editor.html">HTML
97
100
  Editor<br><small>Component</small></a></k-filter-item>
101
+ <k-filter-item filter-keywords="markdown editor markdowneditor write preview marked gfm tables components"><a
102
+ href="../components/markdown-editor.html"
103
+ >Markdown Editor<br><small>Component</small></a></k-filter-item>
98
104
  <k-filter-item filter-keywords="icon components"><a
99
105
  href="../components/icon.html">Icon<br><small>Component</small></a></k-filter-item>
100
106
  <k-filter-item filter-keywords="import components"><a
@@ -198,6 +204,9 @@
198
204
  >Toggle<br><small>Component</small></a></k-filter-item>
199
205
  <k-filter-item filter-keywords="tree treeview components"><a
200
206
  href="../components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
207
+ <k-filter-item filter-keywords="voice selector dropdown speech synthesis preference components"><a
208
+ href="../components/voice-selector.html"
209
+ >Voice Selector<br><small>Component</small></a></k-filter-item>
201
210
  <k-filter-item filter-keywords="shadow component base"><a
202
211
  href="../components/shadow-component.html"
203
212
  >Shadow Component<br><small>Base Component</small></a></k-filter-item>
@@ -225,12 +234,17 @@
225
234
  <k-filter-item filter-keywords="propconverters prop converters utils utility"><a
226
235
  href="../utils/propConverters.html"
227
236
  >propConverters<br><small>Utility</small></a></k-filter-item>
237
+ <k-filter-item filter-keywords="sanitizehtml sanitize html xss security utils utility"><a
238
+ href="../utils/sanitizeHtml.html"
239
+ >sanitizeHtml<br><small>Utility</small></a></k-filter-item>
228
240
  <k-filter-item filter-keywords="string utils utility"><a
229
241
  href="../utils/string.html">string<br><small>Utility</small></a></k-filter-item>
230
242
  <k-filter-item filter-keywords="theme utils utility"><a
231
243
  href="../utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
232
244
  <k-filter-item filter-keywords="type utils utility"><a
233
245
  href="../utils/type.html">type<br><small>Utility</small></a></k-filter-item>
246
+ <k-filter-item filter-keywords="voice speech synthesis preference utils utility"><a
247
+ href="../utils/voice.html">voice<br><small>Utility</small></a></k-filter-item>
234
248
  <k-filter-item filter-keywords="wait async utils utility"><a
235
249
  href="../utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
236
250
  </k-filter-list>
@@ -283,6 +297,7 @@
283
297
  <a href="../components/aside.html">Aside</a>
284
298
  <a href="../components/calendar.html">Calendar</a>
285
299
  <a href="../components/card.html">Card</a>
300
+ <a href="../components/chat.html">Chat</a>
286
301
  <a href="../components/code-editor.html">Code Editor</a>
287
302
  <a href="../components/combobox.html">Combobox</a>
288
303
  <a href="../components/color-picker.html">ColorPicker</a>
@@ -293,6 +308,7 @@
293
308
  <a href="../components/filter-list.html">Filter List</a>
294
309
  <a href="../components/focus-capture.html">FocusCapture</a>
295
310
  <a href="../components/html-editor.html">HTML Editor</a>
311
+ <a href="../components/markdown-editor.html">Markdown Editor</a>
296
312
  <a href="../components/icon.html">Icon</a>
297
313
  <a href="../components/import.html">Import</a>
298
314
  <a href="../components/nav.html">Nav</a>
@@ -317,6 +333,7 @@
317
333
  <a href="../components/toast.html">Toast</a>
318
334
  <a href="../components/toggle.html">Toggle</a>
319
335
  <a href="../components/tree.html">Tree</a>
336
+ <a href="../components/voice-selector.html">Voice Selector</a>
320
337
  </div>
321
338
 
322
339
  <h5 class="mb0">Base Components</h5>
@@ -336,9 +353,11 @@
336
353
  <a href="../utils/formatTimestamp.html">formatTimestamp</a>
337
354
  <a href="../utils/object.html">object</a>
338
355
  <a href="../utils/propConverters.html">propConverters</a>
356
+ <a href="../utils/sanitizeHtml.html">sanitizeHtml</a>
339
357
  <a href="../utils/string.html">string</a>
340
358
  <a href="../utils/theme.html">theme</a>
341
359
  <a href="../utils/type.html">type</a>
360
+ <a href="../utils/voice.html">voice</a>
342
361
  <a href="../utils/wait.html">wait</a>
343
362
  </div>
344
363
  </menu>
@@ -67,6 +67,9 @@
67
67
  >Calendar<br><small>Component</small></a></k-filter-item>
68
68
  <k-filter-item filter-keywords="card components"><a
69
69
  href="../components/card.html">Card<br><small>Component</small></a></k-filter-item>
70
+ <k-filter-item filter-keywords="chat message conversation messaging components"><a
71
+ href="../components/chat.html"
72
+ >Chat<br><small>Component</small></a></k-filter-item>
70
73
  <k-filter-item filter-keywords="code editor codeeditor monaco components"><a
71
74
  href="../components/code-editor.html"
72
75
  >Code Editor<br><small>Component</small></a></k-filter-item>
@@ -95,6 +98,9 @@
95
98
  <k-filter-item filter-keywords="html editor components"><a
96
99
  href="../components/html-editor.html">HTML
97
100
  Editor<br><small>Component</small></a></k-filter-item>
101
+ <k-filter-item filter-keywords="markdown editor markdowneditor write preview marked gfm tables components"><a
102
+ href="../components/markdown-editor.html"
103
+ >Markdown Editor<br><small>Component</small></a></k-filter-item>
98
104
  <k-filter-item filter-keywords="icon components"><a
99
105
  href="../components/icon.html">Icon<br><small>Component</small></a></k-filter-item>
100
106
  <k-filter-item filter-keywords="import components"><a
@@ -198,6 +204,9 @@
198
204
  >Toggle<br><small>Component</small></a></k-filter-item>
199
205
  <k-filter-item filter-keywords="tree treeview components"><a
200
206
  href="../components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
207
+ <k-filter-item filter-keywords="voice selector dropdown speech synthesis preference components"><a
208
+ href="../components/voice-selector.html"
209
+ >Voice Selector<br><small>Component</small></a></k-filter-item>
201
210
  <k-filter-item filter-keywords="shadow component base"><a
202
211
  href="../components/shadow-component.html"
203
212
  >Shadow Component<br><small>Base Component</small></a></k-filter-item>
@@ -225,12 +234,17 @@
225
234
  <k-filter-item filter-keywords="propconverters prop converters utils utility"><a
226
235
  href="../utils/propConverters.html"
227
236
  >propConverters<br><small>Utility</small></a></k-filter-item>
237
+ <k-filter-item filter-keywords="sanitizehtml sanitize html xss security utils utility"><a
238
+ href="../utils/sanitizeHtml.html"
239
+ >sanitizeHtml<br><small>Utility</small></a></k-filter-item>
228
240
  <k-filter-item filter-keywords="string utils utility"><a
229
241
  href="../utils/string.html">string<br><small>Utility</small></a></k-filter-item>
230
242
  <k-filter-item filter-keywords="theme utils utility"><a
231
243
  href="../utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
232
244
  <k-filter-item filter-keywords="type utils utility"><a
233
245
  href="../utils/type.html">type<br><small>Utility</small></a></k-filter-item>
246
+ <k-filter-item filter-keywords="voice speech synthesis preference utils utility"><a
247
+ href="../utils/voice.html">voice<br><small>Utility</small></a></k-filter-item>
234
248
  <k-filter-item filter-keywords="wait async utils utility"><a
235
249
  href="../utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
236
250
  </k-filter-list>
@@ -283,6 +297,7 @@
283
297
  <a href="../components/aside.html">Aside</a>
284
298
  <a href="../components/calendar.html">Calendar</a>
285
299
  <a href="../components/card.html">Card</a>
300
+ <a href="../components/chat.html">Chat</a>
286
301
  <a href="../components/code-editor.html">Code Editor</a>
287
302
  <a href="../components/combobox.html">Combobox</a>
288
303
  <a href="../components/color-picker.html">ColorPicker</a>
@@ -293,6 +308,7 @@
293
308
  <a href="../components/filter-list.html">Filter List</a>
294
309
  <a href="../components/focus-capture.html">FocusCapture</a>
295
310
  <a href="../components/html-editor.html">HTML Editor</a>
311
+ <a href="../components/markdown-editor.html">Markdown Editor</a>
296
312
  <a href="../components/icon.html">Icon</a>
297
313
  <a href="../components/import.html">Import</a>
298
314
  <a href="../components/nav.html">Nav</a>
@@ -317,6 +333,7 @@
317
333
  <a href="../components/toast.html">Toast</a>
318
334
  <a href="../components/toggle.html">Toggle</a>
319
335
  <a href="../components/tree.html">Tree</a>
336
+ <a href="../components/voice-selector.html">Voice Selector</a>
320
337
  </div>
321
338
 
322
339
  <h5 class="mb0">Base Components</h5>
@@ -336,9 +353,11 @@
336
353
  <a href="../utils/formatTimestamp.html">formatTimestamp</a>
337
354
  <a href="../utils/object.html">object</a>
338
355
  <a href="../utils/propConverters.html">propConverters</a>
356
+ <a href="../utils/sanitizeHtml.html">sanitizeHtml</a>
339
357
  <a href="../utils/string.html">string</a>
340
358
  <a href="../utils/theme.html">theme</a>
341
359
  <a href="../utils/type.html">type</a>
360
+ <a href="../utils/voice.html">voice</a>
342
361
  <a href="../utils/wait.html">wait</a>
343
362
  </div>
344
363
  </menu>
@@ -67,6 +67,9 @@
67
67
  >Calendar<br><small>Component</small></a></k-filter-item>
68
68
  <k-filter-item filter-keywords="card components"><a
69
69
  href="../components/card.html">Card<br><small>Component</small></a></k-filter-item>
70
+ <k-filter-item filter-keywords="chat message conversation messaging components"><a
71
+ href="../components/chat.html"
72
+ >Chat<br><small>Component</small></a></k-filter-item>
70
73
  <k-filter-item filter-keywords="code editor codeeditor monaco components"><a
71
74
  href="../components/code-editor.html"
72
75
  >Code Editor<br><small>Component</small></a></k-filter-item>
@@ -95,6 +98,9 @@
95
98
  <k-filter-item filter-keywords="html editor components"><a
96
99
  href="../components/html-editor.html">HTML
97
100
  Editor<br><small>Component</small></a></k-filter-item>
101
+ <k-filter-item filter-keywords="markdown editor markdowneditor write preview marked gfm tables components"><a
102
+ href="../components/markdown-editor.html"
103
+ >Markdown Editor<br><small>Component</small></a></k-filter-item>
98
104
  <k-filter-item filter-keywords="icon components"><a
99
105
  href="../components/icon.html">Icon<br><small>Component</small></a></k-filter-item>
100
106
  <k-filter-item filter-keywords="import components"><a
@@ -198,6 +204,9 @@
198
204
  >Toggle<br><small>Component</small></a></k-filter-item>
199
205
  <k-filter-item filter-keywords="tree treeview components"><a
200
206
  href="../components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
207
+ <k-filter-item filter-keywords="voice selector dropdown speech synthesis preference components"><a
208
+ href="../components/voice-selector.html"
209
+ >Voice Selector<br><small>Component</small></a></k-filter-item>
201
210
  <k-filter-item filter-keywords="shadow component base"><a
202
211
  href="../components/shadow-component.html"
203
212
  >Shadow Component<br><small>Base Component</small></a></k-filter-item>
@@ -225,12 +234,17 @@
225
234
  <k-filter-item filter-keywords="propconverters prop converters utils utility"><a
226
235
  href="../utils/propConverters.html"
227
236
  >propConverters<br><small>Utility</small></a></k-filter-item>
237
+ <k-filter-item filter-keywords="sanitizehtml sanitize html xss security utils utility"><a
238
+ href="../utils/sanitizeHtml.html"
239
+ >sanitizeHtml<br><small>Utility</small></a></k-filter-item>
228
240
  <k-filter-item filter-keywords="string utils utility"><a
229
241
  href="../utils/string.html">string<br><small>Utility</small></a></k-filter-item>
230
242
  <k-filter-item filter-keywords="theme utils utility"><a
231
243
  href="../utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
232
244
  <k-filter-item filter-keywords="type utils utility"><a
233
245
  href="../utils/type.html">type<br><small>Utility</small></a></k-filter-item>
246
+ <k-filter-item filter-keywords="voice speech synthesis preference utils utility"><a
247
+ href="../utils/voice.html">voice<br><small>Utility</small></a></k-filter-item>
234
248
  <k-filter-item filter-keywords="wait async utils utility"><a
235
249
  href="../utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
236
250
  </k-filter-list>
@@ -283,6 +297,7 @@
283
297
  <a href="../components/aside.html">Aside</a>
284
298
  <a href="../components/calendar.html">Calendar</a>
285
299
  <a href="../components/card.html">Card</a>
300
+ <a href="../components/chat.html">Chat</a>
286
301
  <a href="../components/code-editor.html">Code Editor</a>
287
302
  <a href="../components/combobox.html">Combobox</a>
288
303
  <a href="../components/color-picker.html">ColorPicker</a>
@@ -293,6 +308,7 @@
293
308
  <a href="../components/filter-list.html">Filter List</a>
294
309
  <a href="../components/focus-capture.html">FocusCapture</a>
295
310
  <a href="../components/html-editor.html">HTML Editor</a>
311
+ <a href="../components/markdown-editor.html">Markdown Editor</a>
296
312
  <a href="../components/icon.html">Icon</a>
297
313
  <a href="../components/import.html">Import</a>
298
314
  <a href="../components/nav.html">Nav</a>
@@ -317,6 +333,7 @@
317
333
  <a href="../components/toast.html">Toast</a>
318
334
  <a href="../components/toggle.html">Toggle</a>
319
335
  <a href="../components/tree.html">Tree</a>
336
+ <a href="../components/voice-selector.html">Voice Selector</a>
320
337
  </div>
321
338
 
322
339
  <h5 class="mb0">Base Components</h5>
@@ -336,9 +353,11 @@
336
353
  <a href="../utils/formatTimestamp.html">formatTimestamp</a>
337
354
  <a href="../utils/object.html">object</a>
338
355
  <a href="../utils/propConverters.html">propConverters</a>
356
+ <a href="../utils/sanitizeHtml.html">sanitizeHtml</a>
339
357
  <a href="../utils/string.html">string</a>
340
358
  <a href="../utils/theme.html">theme</a>
341
359
  <a href="../utils/type.html">type</a>
360
+ <a href="../utils/voice.html">voice</a>
342
361
  <a href="../utils/wait.html">wait</a>
343
362
  </div>
344
363
  </menu>