@richscripts/richtexteditor 2.14.1 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +173 -10
- package/angular/build-manifest.json +23 -0
- package/angular/index.d.ts +71 -76
- package/angular/index.mjs +2 -0
- package/angular/package.json +4 -0
- package/headless/index.d.ts +3 -1
- package/headless/index.js +72 -16
- package/index.d.ts +33 -54
- package/integrations/initialization-scope.js +27 -0
- package/integrations/native-mount.js +30 -0
- package/integrations/shared.d.ts +23 -1
- package/integrations/shared.js +58 -22
- package/package.json +25 -3
- package/react/index.js +118 -37
- package/react/index.mjs +29 -0
- package/richtexteditor/all_plugins.js +7001 -1078
- package/richtexteditor/all_plugins.min.js +62 -59
- package/richtexteditor/lang/emoji/LICENSE-CLDR.txt +41 -0
- package/richtexteditor/lang/emoji/rte-emoji-de.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-es.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-fr.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-it.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-ja.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-ko.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-nl.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-pt-pt.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-pt.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-ru.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-zh-Hans.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-zh-Hant.js +3 -0
- package/richtexteditor/lang/rte-lang-af.js +1 -0
- package/richtexteditor/lang/rte-lang-ar.js +1 -0
- package/richtexteditor/lang/rte-lang-bg.js +1 -0
- package/richtexteditor/lang/rte-lang-bn.js +1 -0
- package/richtexteditor/lang/rte-lang-bs.js +1 -0
- package/richtexteditor/lang/rte-lang-ca.js +1 -0
- package/richtexteditor/lang/rte-lang-cs.js +1 -0
- package/richtexteditor/lang/rte-lang-cy.js +1 -0
- package/richtexteditor/lang/rte-lang-da.js +1 -0
- package/richtexteditor/lang/rte-lang-de.js +1017 -2
- package/richtexteditor/lang/rte-lang-el.js +1 -0
- package/richtexteditor/lang/rte-lang-en.js +1 -0
- package/richtexteditor/lang/rte-lang-es.js +1023 -2
- package/richtexteditor/lang/rte-lang-et.js +1 -0
- package/richtexteditor/lang/rte-lang-fa.js +1 -0
- package/richtexteditor/lang/rte-lang-fi.js +1 -0
- package/richtexteditor/lang/rte-lang-fil.js +1 -0
- package/richtexteditor/lang/rte-lang-fj.js +1 -0
- package/richtexteditor/lang/rte-lang-fr.js +1023 -2
- package/richtexteditor/lang/rte-lang-ga.js +1 -0
- package/richtexteditor/lang/rte-lang-gu.js +1 -0
- package/richtexteditor/lang/rte-lang-he.js +1 -0
- package/richtexteditor/lang/rte-lang-hi.js +1 -0
- package/richtexteditor/lang/rte-lang-hr.js +1 -0
- package/richtexteditor/lang/rte-lang-ht.js +1 -0
- package/richtexteditor/lang/rte-lang-hu.js +1 -0
- package/richtexteditor/lang/rte-lang-id.js +1 -0
- package/richtexteditor/lang/rte-lang-is.js +1 -0
- package/richtexteditor/lang/rte-lang-it.js +1023 -2
- package/richtexteditor/lang/rte-lang-ja.js +1023 -2
- package/richtexteditor/lang/rte-lang-kn.js +1 -0
- package/richtexteditor/lang/rte-lang-ko.js +1023 -2
- package/richtexteditor/lang/rte-lang-lt.js +1 -0
- package/richtexteditor/lang/rte-lang-lv.js +1 -0
- package/richtexteditor/lang/rte-lang-mg.js +1 -0
- package/richtexteditor/lang/rte-lang-mi.js +1 -0
- package/richtexteditor/lang/rte-lang-ml.js +1 -0
- package/richtexteditor/lang/rte-lang-mr.js +1 -0
- package/richtexteditor/lang/rte-lang-ms.js +1 -0
- package/richtexteditor/lang/rte-lang-mt.js +1 -0
- package/richtexteditor/lang/rte-lang-mww.js +1 -0
- package/richtexteditor/lang/rte-lang-nb.js +1 -0
- package/richtexteditor/lang/rte-lang-nl.js +1023 -2
- package/richtexteditor/lang/rte-lang-otq.js +1 -0
- package/richtexteditor/lang/rte-lang-pa.js +1 -0
- package/richtexteditor/lang/rte-lang-pl.js +1 -0
- package/richtexteditor/lang/rte-lang-pt-pt.js +1023 -2
- package/richtexteditor/lang/rte-lang-pt.js +1023 -2
- package/richtexteditor/lang/rte-lang-ro.js +1 -0
- package/richtexteditor/lang/rte-lang-ru.js +1023 -2
- package/richtexteditor/lang/rte-lang-sk.js +1 -0
- package/richtexteditor/lang/rte-lang-sl.js +1 -0
- package/richtexteditor/lang/rte-lang-sm.js +1 -0
- package/richtexteditor/lang/rte-lang-sr-Cyrl.js +1 -0
- package/richtexteditor/lang/rte-lang-sr-Latn.js +1 -0
- package/richtexteditor/lang/rte-lang-sv.js +1 -0
- package/richtexteditor/lang/rte-lang-sw.js +1 -0
- package/richtexteditor/lang/rte-lang-ta.js +1 -0
- package/richtexteditor/lang/rte-lang-te.js +1 -0
- package/richtexteditor/lang/rte-lang-th.js +1 -0
- package/richtexteditor/lang/rte-lang-tlh-Latn.js +1 -0
- package/richtexteditor/lang/rte-lang-tlh-Piqd.js +1 -0
- package/richtexteditor/lang/rte-lang-to.js +1 -0
- package/richtexteditor/lang/rte-lang-tr.js +1 -0
- package/richtexteditor/lang/rte-lang-ty.js +1 -0
- package/richtexteditor/lang/rte-lang-uk.js +1 -0
- package/richtexteditor/lang/rte-lang-ur.js +1 -0
- package/richtexteditor/lang/rte-lang-vi.js +1 -0
- package/richtexteditor/lang/rte-lang-yua.js +1 -0
- package/richtexteditor/lang/rte-lang-zh-Hans.js +1017 -2
- package/richtexteditor/lang/rte-lang-zh-Hant.js +1017 -2
- package/richtexteditor/plugins/a11yenhance.js +2 -1
- package/richtexteditor/plugins/a11yenhance.min.js +1 -1
- package/richtexteditor/plugins/accessibilitychecker.js +252 -60
- package/richtexteditor/plugins/accessibilitychecker.min.js +1 -1
- package/richtexteditor/plugins/aitoolkit.js +966 -303
- package/richtexteditor/plugins/aitoolkit.min.js +7 -7
- package/richtexteditor/plugins/all_plugins.js +7001 -1078
- package/richtexteditor/plugins/all_plugins.min.js +62 -59
- package/richtexteditor/plugins/autocorrect.js +66 -31
- package/richtexteditor/plugins/autocorrect.min.js +1 -1
- package/richtexteditor/plugins/autoembed.js +17 -0
- package/richtexteditor/plugins/autoembed.min.js +1 -1
- package/richtexteditor/plugins/blocktypes.js +18 -9
- package/richtexteditor/plugins/blocktypes.min.js +1 -1
- package/richtexteditor/plugins/bookmarkcard.js +12 -5
- package/richtexteditor/plugins/bookmarkcard.min.js +2 -2
- package/richtexteditor/plugins/changecase.js +72 -19
- package/richtexteditor/plugins/changecase.min.js +1 -1
- package/richtexteditor/plugins/charlimit.js +62 -2
- package/richtexteditor/plugins/charlimit.min.js +2 -2
- package/richtexteditor/plugins/comments.js +458 -59
- package/richtexteditor/plugins/comments.min.js +4 -3
- package/richtexteditor/plugins/contentminimap.js +25 -6
- package/richtexteditor/plugins/contentminimap.min.js +1 -1
- package/richtexteditor/plugins/crossreference.js +1 -1
- package/richtexteditor/plugins/crossreference.min.js +1 -1
- package/richtexteditor/plugins/dialoga11y.js +26 -4
- package/richtexteditor/plugins/dialoga11y.min.js +1 -1
- package/richtexteditor/plugins/dictation.js +1 -1
- package/richtexteditor/plugins/documentimport.js +220 -51
- package/richtexteditor/plugins/documentimport.min.js +4 -4
- package/richtexteditor/plugins/documentoutline.js +47 -8
- package/richtexteditor/plugins/documentoutline.min.js +1 -1
- package/richtexteditor/plugins/docxexport.js +204 -32
- package/richtexteditor/plugins/docxexport.min.js +2 -2
- package/richtexteditor/plugins/draghandle.js +267 -3
- package/richtexteditor/plugins/draghandle.min.js +1 -1
- package/richtexteditor/plugins/emailtoolkit.js +28 -14
- package/richtexteditor/plugins/emailtoolkit.min.js +1 -1
- package/richtexteditor/plugins/emojiautocomplete.js +110 -56
- package/richtexteditor/plugins/emojiautocomplete.min.js +1 -1
- package/richtexteditor/plugins/footnotes.js +65 -11
- package/richtexteditor/plugins/footnotes.min.js +1 -1
- package/richtexteditor/plugins/formatpainter.js +10 -0
- package/richtexteditor/plugins/formatpainter.min.js +1 -1
- package/richtexteditor/plugins/formattingmarks.js +6 -6
- package/richtexteditor/plugins/formattingmarks.min.js +1 -1
- package/richtexteditor/plugins/gapcursor.js +60 -0
- package/richtexteditor/plugins/gapcursor.min.js +1 -1
- package/richtexteditor/plugins/ghostcomplete.js +1 -1
- package/richtexteditor/plugins/html2pdf.js +1 -1
- package/richtexteditor/plugins/html2pdf.min.js +1 -1
- package/richtexteditor/plugins/imageeditor.js +12 -6
- package/richtexteditor/plugins/imageeditor.min.js +1 -1
- package/richtexteditor/plugins/importstyles.js +1 -1
- package/richtexteditor/plugins/inlinecode.js +25 -0
- package/richtexteditor/plugins/inlinecode.min.js +1 -1
- package/richtexteditor/plugins/insertcode.js +21 -3
- package/richtexteditor/plugins/insertcode.min.js +4 -4
- package/richtexteditor/plugins/insertemoji.js +112 -15
- package/richtexteditor/plugins/insertemoji.min.js +1 -1
- package/richtexteditor/plugins/insertgallery.js +42 -36
- package/richtexteditor/plugins/insertgallery.min.js +1 -1
- package/richtexteditor/plugins/inserttemplate.js +33 -17
- package/richtexteditor/plugins/inserttemplate.min.js +1 -1
- package/richtexteditor/plugins/keyboarda11y.js +66 -3
- package/richtexteditor/plugins/keyboarda11y.min.js +1 -1
- package/richtexteditor/plugins/layouttable.js +20 -0
- package/richtexteditor/plugins/layouttable.min.js +1 -1
- package/richtexteditor/plugins/linkchecker.js +29 -9
- package/richtexteditor/plugins/linkchecker.min.js +1 -1
- package/richtexteditor/plugins/localdraft.js +51 -7
- package/richtexteditor/plugins/localdraft.min.js +1 -1
- package/richtexteditor/plugins/markdownexport.js +159 -0
- package/richtexteditor/plugins/markdownexport.min.js +2 -2
- package/richtexteditor/plugins/mathdialog.js +11 -5
- package/richtexteditor/plugins/mathdialog.min.js +1 -1
- package/richtexteditor/plugins/mentionplugin.js +88 -25
- package/richtexteditor/plugins/mentionplugin.min.js +1 -1
- package/richtexteditor/plugins/mermaiddiagram.js +9 -3
- package/richtexteditor/plugins/mermaiddiagram.min.js +2 -2
- package/richtexteditor/plugins/multilevellist.js +4 -0
- package/richtexteditor/plugins/multilevellist.min.js +1 -1
- package/richtexteditor/plugins/pdfexport.js +235 -35
- package/richtexteditor/plugins/pdfexport.min.js +12 -12
- package/richtexteditor/plugins/permanentpen.js +3 -3
- package/richtexteditor/plugins/permanentpen.min.js +1 -1
- package/richtexteditor/plugins/readabilitystats.js +25 -11
- package/richtexteditor/plugins/readabilitystats.min.js +1 -1
- package/richtexteditor/plugins/readaloud.js +29 -15
- package/richtexteditor/plugins/readaloud.min.js +1 -1
- package/richtexteditor/plugins/restrictedediting.js +166 -0
- package/richtexteditor/plugins/restrictedediting.min.js +2 -2
- package/richtexteditor/plugins/revisionhistory.js +169 -37
- package/richtexteditor/plugins/revisionhistory.min.js +3 -3
- package/richtexteditor/plugins/rubyannotation.js +19 -9
- package/richtexteditor/plugins/rubyannotation.min.js +1 -1
- package/richtexteditor/plugins/sanitizer.js +62 -3
- package/richtexteditor/plugins/sanitizer.min.js +1 -1
- package/richtexteditor/plugins/slashcommand.js +30 -16
- package/richtexteditor/plugins/slashcommand.min.js +2 -2
- package/richtexteditor/plugins/smartchips.js +36 -22
- package/richtexteditor/plugins/smartchips.min.js +2 -2
- package/richtexteditor/plugins/spellcheck.js +17 -8
- package/richtexteditor/plugins/spellcheck.min.js +2 -2
- package/richtexteditor/plugins/stateinspector.js +19 -9
- package/richtexteditor/plugins/stateinspector.min.js +2 -2
- package/richtexteditor/plugins/structured-content-bridge.js +56 -24
- package/richtexteditor/plugins/structured-content-bridge.min.js +7 -7
- package/richtexteditor/plugins/tableofcontents.js +5 -2
- package/richtexteditor/plugins/tableofcontents.min.js +1 -1
- package/richtexteditor/plugins/tabletools.js +388 -3
- package/richtexteditor/plugins/tabletools.min.js +1 -1
- package/richtexteditor/plugins/textdirection.js +18 -5
- package/richtexteditor/plugins/textdirection.min.js +1 -1
- package/richtexteditor/plugins/textpartlanguage.js +161 -32
- package/richtexteditor/plugins/textpartlanguage.min.js +1 -1
- package/richtexteditor/plugins/todolist.js +90 -6
- package/richtexteditor/plugins/todolist.min.js +1 -1
- package/richtexteditor/plugins/trackedchanges.js +1812 -25
- package/richtexteditor/plugins/trackedchanges.min.js +5 -3
- package/richtexteditor/plugins/wordexport.js +2 -2
- package/richtexteditor/plugins/yjscollab.js +9 -4
- package/richtexteditor/plugins/yjscollab.min.js +1 -1
- package/richtexteditor/plugins/zz_richtextbox_dialog_style.js +22 -13
- package/richtexteditor/plugins/zz_richtextbox_dialog_style.min.js +1 -1
- package/richtexteditor/rte-config.js +130 -50
- package/richtexteditor/rte-headless.js +19 -4
- package/richtexteditor/rte-webcomponent.js +89 -16
- package/richtexteditor/rte.js +132 -52
- package/scripts/build-angular.mjs +97 -0
- package/svelte/index.d.ts +2 -1
- package/svelte/index.js +80 -9
- package/vue/index.js +130 -34
- package/angular/component.ts +0 -297
- package/angular/index.ts +0 -24
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// Generated Angular partial-Ivy entry. See package license.
|
|
2
|
+
var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf;var __hasOwnProp=Object.prototype.hasOwnProperty;var __commonJS=(cb,mod)=>function __require(){try{return mod||(0,cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports}catch(e){throw mod=0,e}};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:true}):target,mod));var require_shared=__commonJS({"integrations/shared.js"(exports,module){var pendingLoadsByBasePath=Object.create(null);var failedLoadsByBasePath=Object.create(null);var INLINE_CONTAINER_TAGS={a:true,abbr:true,b:true,big:true,cite:true,code:true,del:true,em:true,font:true,i:true,label:true,mark:true,q:true,s:true,small:true,span:true,strike:true,strong:true,sub:true,sup:true,u:true};var BLOCK_CONTAINER_TAGS={article:true,aside:true,div:true,footer:true,header:true,main:true,section:true};var HTML_ENTITY_MAP={amp:"&",apos:"'",gt:">",lt:"<",nbsp:" ",quot:'"'};var HTML_VOID_TAGS={area:true,base:true,br:true,col:true,embed:true,hr:true,img:true,input:true,link:true,meta:true,param:true,source:true,track:true,wbr:true};var BLOCK_NODE_TYPES={blockquote:true,bulletList:true,codeBlock:true,footnotes:true,heading:true,horizontalRule:true,htmlBlock:true,image:true,orderedList:true,pageBreak:true,paragraph:true,tableOfContents:true,taskList:true,table:true};var INLINE_NODE_TYPES={footnoteReference:true,hardBreak:true,htmlInline:true,image:true,mergeField:true,text:true};var MARK_TYPES={bold:true,code:true,italic:true,link:true,strike:true,subscript:true,superscript:true,textStyle:true,underline:true};function ensureBrowserEnvironment(){if(typeof window==="undefined"||typeof document==="undefined"){throw new Error("RichTextEditor integrations require a browser environment.")}}function ensureRichTextEditorConstructor(){ensureBrowserEnvironment();if(!window.RichTextEditor){throw new Error("RichTextEditor core is not loaded. Serve the /richtexteditor assets or load rte.js before mounting the framework wrapper.")}return window.RichTextEditor}function isArray(value){return Object.prototype.toString.call(value)==="[object Array]"}function getElementTagName(node){return node&&node.tagName?String(node.tagName).toLowerCase():""}function normalizePlainText(value){return String(value||"").replace(/\s+/g," ").trim()}function getPlainTextFromHtml(html){return normalizePlainText(decodeHtmlEntities(String(html||"")).replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<script[\s\S]*?<\/script>/gi," ").replace(/<[^>]+>/g," "))}var CJK_WORD_CHAR=/[々〇-ヿ㐀-䶿一-鿿豈-]/g;function countWords(value){var normalized=normalizePlainText(value);if(!normalized){return 0}var cjkMatches=normalized.match(CJK_WORD_CHAR);var cjkCount=cjkMatches?cjkMatches.length:0;var tokenized=cjkCount?normalized.replace(CJK_WORD_CHAR," "):normalized;var tokenCount=tokenized.split(/\s+/).filter(Boolean).length;return cjkCount+tokenCount}function countCharactersNoSpaces(value){return normalizePlainText(value).replace(/\s/g,"").length}function normalizeMarkdownShortcutText(value){return String(value||"").replace(/\u00a0/g," ").replace(/\r\n?/g,"\n").replace(/[ \t]+/g," ").replace(/^\s+|\s+$/g,"")}function getMarkdownShortcutAction(value){var source=normalizeMarkdownShortcutText(value);if(!source){return null}if(/^(?:-{3,}|\*{3,}|_{3,})$/.test(source)){return{kind:"horizontalRule",token:source}}if(/^(?:```|~~~)([A-Za-z0-9_-]+)?$/.test(source)){return{kind:"codeBlock",token:source}}var taskListMatch=source.match(/^(?:(-|\*|\+)\s+)?\[( |x|X)\]$/);if(taskListMatch){return{kind:"taskList",checked:taskListMatch[2].toLowerCase()==="x",token:source}}if(/^#{1,6}$/.test(source)){return{kind:"heading",level:source.length,token:source}}if(source===">"||source===">"){return{kind:"blockquote",token:source}}if(/^(?:-|\*|\+)$/.test(source)){return{kind:"bulletList",token:source}}if(/^\d+[.)]$/.test(source)){return{kind:"orderedList",token:source}}return null}function getInlineMarkdownShortcutAction(value){var source=String(value||"").replace(/\u00a0/g," ");if(!source){return null}var patterns=[{kind:"link",command:"link",regex:/(^|[\s(\[{>])\[([^\]\n]+?)\]\((\S+?)\)$/},{kind:"bold",command:"bold",regex:/(^|[\s(\[{>])(\*\*|__)([^\s](?:[^\n]*?[^\s])?)\2$/},{kind:"strike",command:"strike",regex:/(^|[\s(\[{>])(~~)([^\s](?:[^\n]*?[^\s])?)~~$/},{kind:"code",command:"code",regex:/(^|[\s(\[{>])(`)([^`\n]+?)`$/},{kind:"italic",command:"italic",regex:/(^|[\s(\[{>])(\*|_)([^\s*_](?:[^\n]*?[^\s*_])?)\2$/}];for(var index=0;index<patterns.length;index++){var pattern=patterns[index];var match=pattern.regex.exec(source);if(!match){continue}var prefix=match[1]||"";var marker=match[2]||"";var content=match[3]||"";var href=null;if(pattern.kind==="link"){marker="[]()";content=match[2]||"";href=normalizeInlineMarkdownLinkHref(match[3]||"");if(!href){continue}}var rangeStart=match.index+prefix.length;var rangeEnd=source.length;var action={kind:pattern.kind,command:pattern.command,content,marker,token:source.slice(rangeStart,rangeEnd),rangeStart,rangeEnd,textStart:rangeStart+marker.length,textEnd:rangeEnd-marker.length};if(href){action.href=href;action.textStart=rangeStart+1;action.textEnd=action.textStart+content.length}return action}return null}function normalizeInlineMarkdownLinkHref(value){var href=String(value||"").replace(/^\s+|\s+$/g,"");if(!href||/[\r\n]/.test(href)){return null}var normalized=href.replace(/[\u0000-\u0020]+/g,"").toLowerCase();if(!normalized){return null}if(normalized.indexOf("javascript:")===0||normalized.indexOf("vbscript:")===0){return null}if(normalized.indexOf("data:")===0&&normalized.indexOf("data:image/")!==0){return null}return href}function createTextStatistics(text,selectedText){var plainText=String(text||"");var selection=String(selectedText||"");return{characters:plainText.length,charactersNoSpaces:countCharactersNoSpaces(plainText),words:countWords(plainText),selectedCharacters:selection.length,selectedCharactersNoSpaces:countCharactersNoSpaces(selection),selectedWords:countWords(selection)}}function countSentences(value){var normalized=normalizePlainText(value);if(!normalized){return 0}var matches=normalized.match(/[^.!?]+(?:[.!?]+|$)/g);if(!matches){return 0}var count=0;for(var index=0;index<matches.length;index++){if(normalizePlainText(matches[index])){count+=1}}return count}function roundMetric(value){return Math.round(value*10)/10}var PAGE_SETUP_FORMATS={A3:{width:"297mm",height:"420mm"},A4:{width:"210mm",height:"297mm"},A5:{width:"148mm",height:"210mm"},Legal:{width:"8.5in",height:"14in"},Letter:{width:"8.5in",height:"11in"},Tabloid:{width:"11in",height:"17in"}};function normalizePageMeasurement(value){if(value==null||value===""){return void 0}if(typeof value==="number"&&isFinite(value)){return String(value)+"px"}var normalized=String(value).replace(/^\s+|\s+$/g,"");return normalized||void 0}function normalizePageOrientation(value){var normalized=String(value||"").toLowerCase();if(normalized==="landscape"){return"landscape"}if(normalized==="portrait"){return"portrait"}return void 0}function normalizePageFormat(value){var normalized=String(value||"").replace(/^\s+|\s+$/g,"");if(!normalized){return void 0}var upper=normalized.toUpperCase();if(PAGE_SETUP_FORMATS[upper]){return upper}var title=normalized.charAt(0).toUpperCase()+normalized.substring(1).toLowerCase();if(PAGE_SETUP_FORMATS[title]){return title}return normalized}function normalizePageMargins(value){if(!value||typeof value!=="object"){return void 0}var margins={};var sides=["top","right","bottom","left"];for(var index=0;index<sides.length;index++){var side=sides[index];var measurement=normalizePageMeasurement(value[side]);if(measurement){margins[side]=measurement}}return Object.keys(margins).length?margins:void 0}function normalizeDocumentPageSetup(pageSetup){if(pageSetup==null){return null}if(typeof pageSetup!=="object"){return null}var normalized={};var format=normalizePageFormat(pageSetup.format);var orientation=normalizePageOrientation(pageSetup.orientation);var width=normalizePageMeasurement(pageSetup.width);var height=normalizePageMeasurement(pageSetup.height);var margins=normalizePageMargins(pageSetup.margins);var headerHtml=typeof pageSetup.headerHtml==="string"?pageSetup.headerHtml:void 0;var footerHtml=typeof pageSetup.footerHtml==="string"?pageSetup.footerHtml:void 0;if(format){normalized.format=format}if(orientation){normalized.orientation=orientation}if((!width||!height)&&format&&PAGE_SETUP_FORMATS[format]){width=width||PAGE_SETUP_FORMATS[format].width;height=height||PAGE_SETUP_FORMATS[format].height}if(width){normalized.width=width}if(height){normalized.height=height}if(margins){normalized.margins=margins}if(headerHtml!==void 0){normalized.headerHtml=headerHtml}if(footerHtml!==void 0){normalized.footerHtml=footerHtml}return Object.keys(normalized).length?normalized:null}function getPageSetupFromDocument(documentModel){if(!documentModel||typeof documentModel!=="object"){return null}return normalizeDocumentPageSetup(documentModel.attrs&&documentModel.attrs.pageSetup)}function getDocumentPageSetup2(value){return getPageSetupFromDocument(createStructuredDocument2(value))}function setDocumentPageSetup2(value,pageSetup){var documentModel=createStructuredDocument2(value);var nextPageSetup=normalizeDocumentPageSetup(pageSetup);var nextDocument={type:"doc",version:documentModel.version,format:documentModel.format,content:documentModel.content||[]};if(documentModel.attrs&&typeof documentModel.attrs==="object"){nextDocument.attrs=Object.assign({},documentModel.attrs)}if(nextPageSetup){if(!nextDocument.attrs){nextDocument.attrs={}}nextDocument.attrs.pageSetup=nextPageSetup}else if(nextDocument.attrs){delete nextDocument.attrs.pageSetup;if(!Object.keys(nextDocument.attrs).length){delete nextDocument.attrs}}return createStructuredDocument2(nextDocument)}function buildPageSetupMetadataAttributes(pageSetup){var attrs={"data-rte-page-setup":"true",contenteditable:"false",style:"display:none"};if(!pageSetup){return attrs}if(pageSetup.format){attrs["data-format"]=pageSetup.format}if(pageSetup.orientation){attrs["data-orientation"]=pageSetup.orientation}if(pageSetup.width){attrs["data-width"]=pageSetup.width}if(pageSetup.height){attrs["data-height"]=pageSetup.height}if(pageSetup.headerHtml!==void 0){attrs["data-header-html"]=pageSetup.headerHtml}if(pageSetup.footerHtml!==void 0){attrs["data-footer-html"]=pageSetup.footerHtml}var margins=pageSetup.margins||{};if(margins.top){attrs["data-margin-top"]=margins.top}if(margins.right){attrs["data-margin-right"]=margins.right}if(margins.bottom){attrs["data-margin-bottom"]=margins.bottom}if(margins.left){attrs["data-margin-left"]=margins.left}return attrs}function serializePageSetupMetadata(pageSetup){if(!pageSetup){return""}return"<div"+buildAttributeString(buildPageSetupMetadataAttributes(pageSetup))+"></div>"}function parsePageSetupNode(node){if(!node||node.nodeType!==1){return null}return normalizeDocumentPageSetup({footerHtml:node.getAttribute("data-footer-html"),format:node.getAttribute("data-format"),headerHtml:node.getAttribute("data-header-html"),height:node.getAttribute("data-height"),margins:{top:node.getAttribute("data-margin-top"),right:node.getAttribute("data-margin-right"),bottom:node.getAttribute("data-margin-bottom"),left:node.getAttribute("data-margin-left")},orientation:node.getAttribute("data-orientation"),width:node.getAttribute("data-width")})}function collectDocumentMetrics(nodes,metrics){var content=isArray(nodes)?nodes:[];for(var index=0;index<content.length;index++){var node=content[index];if(!node||typeof node!=="object"){continue}switch(node.type){case"paragraph":metrics.paragraphs+=1;break;case"heading":metrics.headings+=1;break;case"image":metrics.images+=1;break;case"table":metrics.tables+=1;break}var marks=isArray(node.marks)?node.marks:[];for(var markIndex=0;markIndex<marks.length;markIndex++){if(marks[markIndex]&&marks[markIndex].type==="link"){metrics.links+=1}}if(isArray(node.content)&&node.content.length){collectDocumentMetrics(node.content,metrics)}}}function createDocumentMetrics(text,selectedText,documentModel,options){var stats=createTextStatistics(text,selectedText);var metrics={characters:stats.characters,charactersNoSpaces:stats.charactersNoSpaces,words:stats.words,selectedCharacters:stats.selectedCharacters,selectedCharactersNoSpaces:stats.selectedCharactersNoSpaces,selectedWords:stats.selectedWords,paragraphs:0,sentences:countSentences(text),headings:0,images:0,tables:0,links:0,estimatedReadingMinutes:0};if(documentModel){collectDocumentMetrics(documentModel.content||[],metrics)}var wordsPerMinute=options&&parseFloat(options.wordsPerMinute,10);if(!wordsPerMinute||wordsPerMinute<1){wordsPerMinute=200}if(metrics.words>0){metrics.estimatedReadingMinutes=roundMetric(metrics.words/wordsPerMinute);if(metrics.estimatedReadingMinutes===0){metrics.estimatedReadingMinutes=.1}}return metrics}function getTextStatistics2(value,options){var selectionText=options&&options.selectionText;var documentModel=null;var plainText="";if(value&&typeof value==="object"&&value.type==="doc"){documentModel=createStructuredDocument2(value)}else if(typeof value==="string"){if(/<[a-z!\/?][^>]*>/i.test(value)){documentModel=createStructuredDocument2(value)}else{plainText=normalizePlainText(value)}}else if(value!=null){documentModel=createStructuredDocument2(value)}if(documentModel){plainText=normalizePlainText(documentModel.text||renderTextContent(documentModel.content||[]))}return createTextStatistics(plainText,selectionText)}function getDocumentMetrics2(value,options){var selectionText=options&&options.selectionText;var documentModel=null;var plainText="";if(value&&typeof value==="object"&&value.type==="doc"){documentModel=createStructuredDocument2(value)}else if(typeof value==="string"){if(/<[a-z!\/?][^>]*>/i.test(value)){documentModel=createStructuredDocument2(value)}else{plainText=normalizePlainText(value)}}else if(value!=null){documentModel=createStructuredDocument2(value)}if(documentModel){plainText=normalizePlainText(documentModel.text||renderTextContent(documentModel.content||[]))}return createDocumentMetrics(plainText,selectionText,documentModel,options)}function slugifyOutlineText(value){var normalized=String(value||"").toLowerCase();normalized=normalized.replace(/[^a-z0-9]+/g,"-");normalized=normalized.replace(/^-+|-+$/g,"");return normalized||"section"}function buildUniqueOutlineId(baseId,usedIds){var normalized=String(baseId||"").replace(/^\s+|\s+$/g,"");if(!normalized){normalized="section"}var candidate=normalized;var suffix=2;while(usedIds[candidate]){candidate=normalized+"-"+suffix;suffix+=1}usedIds[candidate]=true;return candidate}function collectDocumentOutline(nodes,items,usedIds,parentPath){var content=isArray(nodes)?nodes:[];for(var index=0;index<content.length;index++){var node=content[index];if(!node||typeof node!=="object"){continue}var path=parentPath+".content["+index+"]";if(node.type==="heading"){var headingAttrs=node.attrs||{};var level=parseInt(headingAttrs.level,10)||1;if(level<1){level=1}if(level>6){level=6}var text=normalizePlainText(getNodeTextContent(node));if(!text){text="Untitled Section"}items.push({id:buildUniqueOutlineId(headingAttrs.id||slugifyOutlineText(text),usedIds),level,path,text})}if(isArray(node.content)&&node.content.length){collectDocumentOutline(node.content,items,usedIds,path)}}}function normalizeDocumentHeadingIdsNodeList(nodes,usedIds){var content=isArray(nodes)?nodes:[];var normalized=[];for(var index=0;index<content.length;index++){var node=cloneStructuredNode(content[index]);if(!node||typeof node!=="object"){normalized.push(node);continue}if(node.type==="heading"){var headingAttrs=node.attrs?Object.assign({},node.attrs):{};var text=normalizePlainText(getNodeTextContent(node));if(!text){text="Untitled Section"}headingAttrs.id=buildUniqueOutlineId(headingAttrs.id||slugifyOutlineText(text),usedIds);node.attrs=headingAttrs}if(isArray(node.content)&&node.content.length){node.content=normalizeDocumentHeadingIdsNodeList(node.content,usedIds)}normalized.push(node)}return normalized}function normalizeDocumentHeadingIds(documentModel){if(!documentModel||typeof documentModel!=="object"){return documentModel}var clone={type:documentModel.type,version:documentModel.version,format:documentModel.format};if(documentModel.attrs&&typeof documentModel.attrs==="object"){clone.attrs=Object.assign({},documentModel.attrs)}if(documentModel.html!==void 0){clone.html=documentModel.html}if(documentModel.text!==void 0){clone.text=documentModel.text}clone.content=normalizeDocumentHeadingIdsNodeList(documentModel.content||[],{});return clone}function getDocumentOutline3(value){var documentModel=createStructuredDocument2(value);var items=[];collectDocumentOutline(documentModel.content||[],items,{},"content");return items}function normalizeHeadingLevelOption(value,fallback){var level=parseInt(value,10);if(isNaN(level)){level=fallback}if(level<1){level=1}if(level>6){level=6}return level}function getFilteredDocumentOutline(value,options){var outline=isArray(value)?value:getDocumentOutline3(value);var minLevel=normalizeHeadingLevelOption(options&&options.minLevel,1);var maxLevel=normalizeHeadingLevelOption(options&&options.maxLevel,6);if(maxLevel<minLevel){maxLevel=minLevel}var filtered=[];for(var index=0;index<outline.length;index++){var item=outline[index];if(!item||typeof item!=="object"){continue}var level=normalizeHeadingLevelOption(item.level,minLevel);if(level<minLevel||level>maxLevel){continue}filtered.push({id:item.id,level,path:item.path,text:item.text})}return filtered}function cloneTableOfContentsEntry(item){var clone={id:item.id,level:item.level,path:item.path,text:item.text};if(item.itemIndex!==void 0){clone.itemIndex=item.itemIndex}if(item.indexLabel!==void 0){clone.indexLabel=item.indexLabel}return clone}function normalizeOrderedListType(value){var normalized=String(value||"").replace(/^\s+|\s+$/g,"");if(!normalized){return void 0}if(normalized==="1"||normalized==="A"||normalized==="a"||normalized==="I"||normalized==="i"){return normalized}switch(normalized.toLowerCase()){case"decimal":return"1";case"upper-alpha":case"upper-latin":return"A";case"lower-alpha":case"lower-latin":return"a";case"upper-roman":return"I";case"lower-roman":return"i";default:return void 0}}function normalizeTableOfContentsIndexMode(value){var normalized=String(value||"").toLowerCase();if(normalized==="linear"||normalized==="hierarchical"){return normalized}return"none"}function buildTableOfContentsTreeFromItems(items){var roots=[];var stack=[];for(var index=0;index<items.length;index++){var item=items[index];var current=cloneTableOfContentsEntry(item);current.children=[];while(stack.length&&stack[stack.length-1].level>=current.level){stack.pop()}if(stack.length){stack[stack.length-1].children.push(current)}else{roots.push(current)}stack.push(current)}return roots}function assignLinearTableOfContentsIndexes(items){var counter=0;function visit(nodes){var list=isArray(nodes)?nodes:[];for(var index=0;index<list.length;index++){var item=list[index];if(!item||typeof item!=="object"){continue}counter+=1;item.itemIndex=counter;item.indexLabel=String(counter);if(isArray(item.children)&&item.children.length){visit(item.children)}}}visit(items)}function assignHierarchicalTableOfContentsIndexesToFlatItems(items){var list=isArray(items)?items:[];var stack=[];var rootIndex=0;for(var index=0;index<list.length;index++){var item=list[index];if(!item||typeof item!=="object"){continue}while(stack.length&&stack[stack.length-1].level>=item.level){stack.pop()}if(!stack.length){rootIndex+=1;item.itemIndex=rootIndex;item.indexLabel=String(rootIndex)}else{var parent=stack[stack.length-1];parent.childCount+=1;item.itemIndex=parent.childCount;item.indexLabel=parent.indexLabel+"."+item.itemIndex}stack.push({childCount:0,indexLabel:item.indexLabel,level:item.level})}}function applyTableOfContentsIndexMode(items,options){var list=isArray(items)?items:[];var indexMode=normalizeTableOfContentsIndexMode(options&&options.indexMode);if(indexMode==="hierarchical"){assignHierarchicalTableOfContentsIndexesToFlatItems(list)}else if(indexMode==="linear"){assignLinearTableOfContentsIndexes(list)}return list}function getTableOfContents3(value,options){var outline=applyTableOfContentsIndexMode(getFilteredDocumentOutline(value,options),options);var tree=buildTableOfContentsTreeFromItems(outline);return tree}function collectFootnotes(nodes,items,parentPath){var content=isArray(nodes)?nodes:[];for(var index=0;index<content.length;index++){var node=content[index];if(!node||typeof node!=="object"){continue}var path=parentPath+".content["+index+"]";if(node.type==="footnoteItem"){var attrs=node.attrs||{};var number=parseInt(attrs.number,10)||items.length+1;items.push({id:String(attrs.id||"rte-footnote-item-"+number),number,path,refId:attrs.refId?String(attrs.refId):"rte-footnote-ref-"+number,text:normalizePlainText(getNodeTextContent(node))})}if(isArray(node.content)&&node.content.length){collectFootnotes(node.content,items,path)}}}function getFootnotes3(value){var documentModel=createStructuredDocument2(value);var items=[];collectFootnotes(documentModel.content||[],items,"content");items.sort(function(a,b){if(a.number!==b.number){return a.number-b.number}return a.path<b.path?-1:a.path>b.path?1:0});return items}function cloneStructuredNode(node){if(!node||typeof node!=="object"){return node}var clone={};for(var key in node){if(!Object.prototype.hasOwnProperty.call(node,key)){continue}if(key==="attrs"){clone.attrs=node.attrs?Object.assign({},node.attrs):void 0;continue}if(key==="marks"){var marks=node.marks||[];clone.marks=[];for(var markIndex=0;markIndex<marks.length;markIndex++){var mark=marks[markIndex];if(!mark||typeof mark!=="object"){continue}clone.marks.push({type:mark.type,attrs:mark.attrs?Object.assign({},mark.attrs):void 0})}continue}if(key==="content"){var content=node.content||[];clone.content=[];for(var contentIndex=0;contentIndex<content.length;contentIndex++){clone.content.push(cloneStructuredNode(content[contentIndex]))}continue}clone[key]=node[key]}return clone}function syncTableOfContentsNodeList(nodes,items,options){var list=isArray(nodes)?nodes:[];var synced=[];var titleOverride=options&&typeof options.title==="string"?options.title:null;var includeTitle=options&&options.includeTitle===false?false:void 0;var ordered=options&&options.ordered===true?true:options&&options.ordered===false?false:void 0;var orderedListType=normalizeOrderedListType(options&&options.orderedListType);for(var index=0;index<list.length;index++){var sourceNode=list[index];var node=cloneStructuredNode(sourceNode);if(node&&node.type==="tableOfContents"){var attrs=node.attrs?Object.assign({},node.attrs):{};attrs.items=[];for(var itemIndex=0;itemIndex<items.length;itemIndex++){attrs.items.push(cloneTableOfContentsEntry(items[itemIndex]))}if(titleOverride!==null){attrs.title=titleOverride}if(includeTitle!==void 0){attrs.includeTitle=includeTitle}if(ordered!==void 0){attrs.ordered=ordered}if(orderedListType!==void 0){attrs.orderedListType=orderedListType}else if(ordered===false&&Object.prototype.hasOwnProperty.call(attrs,"orderedListType")){delete attrs.orderedListType}node.attrs=attrs}if(node&&isArray(node.content)&&node.content.length){node.content=syncTableOfContentsNodeList(node.content,items,options)}synced.push(node)}return synced}function syncTableOfContents3(value,options){var documentModel=createStructuredDocument2(value);var items=applyTableOfContentsIndexMode(getFilteredDocumentOutline(documentModel,options),options);var content=syncTableOfContentsNodeList(documentModel.content||[],items,options);return createStructuredDocument2({type:"doc",version:documentModel.version,format:documentModel.format,content})}function decodeHtmlEntities(value){return String(value||"").replace(/&(#x?[0-9a-f]+|[a-z]+);/gi,function(match,entity){var normalized=String(entity||"").toLowerCase();if(normalized.charAt(0)==="#"){var isHex=normalized.charAt(1)==="x";var codePoint=parseInt(normalized.substring(isHex?2:1),isHex?16:10);if(!isNaN(codePoint)){try{return String.fromCodePoint(codePoint)}catch(error){return match}}}if(Object.prototype.hasOwnProperty.call(HTML_ENTITY_MAP,normalized)){return HTML_ENTITY_MAP[normalized]}return match})}function kebabToCamelCase(value){return String(value||"").replace(/-([a-z])/g,function(match,letter){return letter.toUpperCase()})}function parseStyleText(value){var style={};var declarations=String(value||"").split(";");for(var index=0;index<declarations.length;index++){var declaration=declarations[index];if(!declaration){continue}var separatorIndex=declaration.indexOf(":");if(separatorIndex<0){continue}var key=kebabToCamelCase(declaration.substring(0,separatorIndex).replace(/^\s+|\s+$/g,""));var cssValue=declaration.substring(separatorIndex+1).replace(/^\s+|\s+$/g,"");if(!key||!cssValue){continue}style[key]=cssValue}return style}function createVirtualTextNode(value){var decoded=decodeHtmlEntities(value);return{childNodes:[],nodeType:3,nodeValue:decoded,outerHTML:"",textContent:decoded}}function createVirtualElementNode(tagName,attrs){var attributeMap=attrs||{};var normalizedTagName=String(tagName||"").toLowerCase();return{_attrs:attributeMap,childNodes:[],getAttribute:function(name){var normalizedName=String(name||"").toLowerCase();return Object.prototype.hasOwnProperty.call(attributeMap,normalizedName)?attributeMap[normalizedName]:null},nodeType:1,outerHTML:"",style:parseStyleText(attributeMap.style||""),tagName:normalizedTagName.toUpperCase(),textContent:""}}function parseHtmlAttributes(source){var attrs={};var pattern=/([^\s=\/>]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;var match=null;while(match=pattern.exec(source||"")){var name=String(match[1]||"").toLowerCase();if(!name){continue}var value=match[2];if(value===void 0){value=match[3]}if(value===void 0){value=match[4]}attrs[name]=decodeHtmlEntities(value===void 0?"":value)}return attrs}function finalizeVirtualNode(node){if(!node){return null}if(node.nodeType===3){node.textContent=node.nodeValue||"";node.outerHTML=escapeHtml(node.nodeValue||"");return node}var childHtml="";var textContent="";for(var index=0;index<node.childNodes.length;index++){var child=finalizeVirtualNode(node.childNodes[index]);if(!child){continue}childHtml+=child.nodeType===3?escapeHtml(child.nodeValue||""):child.outerHTML||"";textContent+=child.textContent||""}node.textContent=textContent;var tagName=getElementTagName(node);if(!tagName){node.outerHTML=childHtml;return node}if(tagName==="body"){node.outerHTML=childHtml;return node}var attrs=node._attrs||{};var attrString=buildAttributeString(attrs);if(HTML_VOID_TAGS[tagName]){node.outerHTML="<"+tagName+attrString+" />";return node}node.outerHTML="<"+tagName+attrString+">"+childHtml+"</"+tagName+">";return node}function createVirtualDocumentBody(html){var root=createVirtualElementNode("body",{});var stack=[root];var tokenPattern=/<!--[\s\S]*?-->|<!doctype[^>]*>|<\/?[^>]+>|[^<]+/gi;var match=null;while(match=tokenPattern.exec(String(html||""))){var token=match[0];if(!token){continue}if(/^<!--/.test(token)||/^<!doctype/i.test(token)){continue}if(token.charAt(0)!=="<"){var textNode=createVirtualTextNode(token);textNode.parentNode=stack[stack.length-1];stack[stack.length-1].childNodes.push(textNode);continue}if(/^<\//.test(token)){var closeTagMatch=/^<\s*\/\s*([^\s>\/]+)/.exec(token);if(!closeTagMatch){continue}var closingTag=String(closeTagMatch[1]||"").toLowerCase();while(stack.length>1){var currentTag=getElementTagName(stack[stack.length-1]);stack.pop();if(currentTag===closingTag){break}}continue}var openTagMatch=/^<\s*([^\s>\/]+)/.exec(token);if(!openTagMatch){continue}var tagName=String(openTagMatch[1]||"").toLowerCase();var attrSource=token.replace(/^<\s*[^\s>\/]+/,"").replace(/\/?\s*>$/,"");var element=createVirtualElementNode(tagName,parseHtmlAttributes(attrSource));element.parentNode=stack[stack.length-1];stack[stack.length-1].childNodes.push(element);if(!HTML_VOID_TAGS[tagName]&&!/\/\s*>$/.test(token)){stack.push(element)}}return finalizeVirtualNode(root)}function getDocumentBody(html){if(typeof document!=="undefined"&&document.implementation&&document.implementation.createHTMLDocument){var doc=document.implementation.createHTMLDocument("");doc.body.innerHTML=html||"";return doc.body}if(typeof DOMParser!=="undefined"){return new DOMParser().parseFromString("<!doctype html><html><body>"+(html||"")+"</body></html>","text/html").body}return createVirtualDocumentBody(html)}function copyAttributes(attrs){var next={};var hasValues=false;for(var key in attrs){if(!Object.prototype.hasOwnProperty.call(attrs,key)){continue}if(attrs[key]===void 0||attrs[key]===null||attrs[key]===""){continue}next[key]=attrs[key];hasValues=true}return hasValues?next:void 0}function cloneMark(mark){return{type:mark.type,attrs:copyAttributes(mark.attrs||{})}}function cloneMarks(marks){if(!marks||!marks.length){return void 0}var next=[];for(var index=0;index<marks.length;index++){next.push(cloneMark(marks[index]))}return next}function getMarkKey(mark){return mark.type+":"+JSON.stringify(mark.attrs||{})}function appendMark(marks,mark){var next=marks.slice();var markKey=getMarkKey(mark);for(var index=0;index<next.length;index++){if(getMarkKey(next[index])===markKey){return next}}next.push(cloneMark(mark));return next}function sameMarks(left,right){var leftLength=left?left.length:0;var rightLength=right?right.length:0;if(leftLength!==rightLength){return false}for(var index=0;index<leftLength;index++){if(getMarkKey(left[index])!==getMarkKey(right[index])){return false}}return true}function mergeAdjacentTextNodes(nodes){var merged=[];for(var index=0;index<nodes.length;index++){var current=nodes[index];if(!current){continue}if(current.type==="text"&¤t.text){var last=merged.length?merged[merged.length-1]:null;if(last&&last.type==="text"&&sameMarks(last.marks,current.marks)){last.text+=current.text;continue}}merged.push(current)}return merged}function createNode(type,options){var node={type};var source=options||{};if(source.attrs){var attrs=copyAttributes(source.attrs);if(attrs){node.attrs=attrs}}if(source.content&&source.content.length){node.content=source.content}if(source.text){node.text=source.text}if(source.marks&&source.marks.length){node.marks=source.marks}if(source.html){node.html=source.html}return node}function createStructuredContent2(editorOrHtml){var html="";var text="";var attrs=void 0;if(typeof editorOrHtml==="string"){html=editorOrHtml;text=getPlainTextFromHtml(html);var parsedPageSetup=parseStructuredDocumentAttributes(html);if(parsedPageSetup&&parsedPageSetup.pageSetup){attrs=parsedPageSetup}}else if(editorOrHtml){html=editorOrHtml.getHTMLCode?editorOrHtml.getHTMLCode():"";text=editorOrHtml.getPlainText?editorOrHtml.getPlainText():"";if(!text){text=getPlainTextFromHtml(html)}}return{type:"doc",version:2,format:"richtexteditor-json",attrs,html:html||"",text:text||"",content:parseStructuredContentHtml(html||"")}}function parseStructuredDocumentAttributes(html){var root=getDocumentBody(html);if(!root||!root.childNodes){return null}for(var index=0;index<root.childNodes.length;index++){var node=root.childNodes[index];if(!node||node.nodeType!==1){continue}if(hasElementAttributeValue(node,"data-rte-page-setup","true")){var pageSetup=parsePageSetupNode(node);if(pageSetup){return{pageSetup}}}}return null}function parseStructuredContentHtml(html){var root=getDocumentBody(html);if(!root){return[]}return parseBlockNodes(root.childNodes)}function parseBlockNodes(nodeList){var blocks=[];var inlineBuffer=[];function flushInlineBuffer(){if(!inlineBuffer.length){return}blocks.push(createNode("paragraph",{content:mergeAdjacentTextNodes(inlineBuffer)}));inlineBuffer=[]}for(var index=0;index<nodeList.length;index++){var node=nodeList[index];if(!node){continue}if(node.nodeType===3){var text=node.nodeValue||"";if(text.replace(/\s+/g,"")!==""){inlineBuffer=inlineBuffer.concat(parseInlineNode(node,[]))}continue}if(node.nodeType!==1){continue}var tagName=getElementTagName(node);if(tagName==="br"||INLINE_CONTAINER_TAGS[tagName]){inlineBuffer=inlineBuffer.concat(parseInlineNode(node,[]));continue}flushInlineBuffer();var blockNode=parseBlockNode(node);if(!blockNode){continue}if(isArray(blockNode)){for(var childIndex=0;childIndex<blockNode.length;childIndex++){blocks.push(blockNode[childIndex])}continue}blocks.push(blockNode)}flushInlineBuffer();return blocks}function parseBlockNode(node){var tagName=getElementTagName(node);var blockAlign=getElementTextAlignment(node,true);if(hasElementAttributeValue(node,"data-rte-page-setup","true")){return null}if(hasElementAttributeValue(node,"data-rte-page-break","true")){return parsePageBreakNode(node)}if(hasElementAttributeValue(node,"data-rte-toc","true")){return parseTableOfContentsNode(node)}if(hasElementAttributeValue(node,"data-rte-footnotes","true")){return parseFootnotesNode(node)}if(BLOCK_CONTAINER_TAGS[tagName]){var childBlocks=parseBlockNodes(node.childNodes);if(childBlocks.length){return childBlocks}return null}if(tagName==="p"){return createNode("paragraph",{attrs:blockAlign?{align:blockAlign}:void 0,content:parseInlineChildren(node)})}if(/^h[1-6]$/.test(tagName)){return createNode("heading",{attrs:createHeadingAttrs(parseInt(tagName.charAt(1),10)||1,blockAlign),content:parseInlineChildren(node)})}if(tagName==="blockquote"){return createNode("blockquote",{content:parseBlockNodes(node.childNodes)})}if(tagName==="pre"){return createNode("codeBlock",{text:node.textContent||""})}if(tagName==="ul"){if(isTaskListElement(node)){return createNode("taskList",{content:parseTaskListItems(node)})}return createNode("bulletList",{content:parseListItems(node)})}if(tagName==="ol"){var startValue=node.getAttribute("start");var orderedListType=normalizeOrderedListType(getElementAttribute(node,"type"));if(!orderedListType&&node.style&&typeof node.style.listStyleType==="string"){orderedListType=normalizeOrderedListType(node.style.listStyleType)}var orderedListAttrs={};if(startValue){orderedListAttrs.start=isFinite(parseInt(startValue,10))?parseInt(startValue,10):1}if(orderedListType){orderedListAttrs.orderedListType=orderedListType}return createNode("orderedList",{attrs:Object.keys(orderedListAttrs).length?orderedListAttrs:void 0,content:parseListItems(node)})}if(tagName==="li"){return createNode("listItem",{content:parseBlockNodes(node.childNodes)})}if(tagName==="hr"){return createNode("horizontalRule")}if(tagName==="img"){return parseImageNode(node)}if(tagName==="table"){return createNode("table",{content:parseTableRows(node)})}return createNode("htmlBlock",{html:node.outerHTML||"",text:normalizePlainText(node.textContent||"")})}function parsePageBreakNode(element){var attrs={};var labelText=normalizePlainText(element.textContent||"");if(labelText){attrs.label=labelText}return createNode("pageBreak",{attrs})}function parseTableOfContentsNode(element){var items=[];var listRoot=null;var ordered=false;var orderedListType;var orderedLists=findDescendantsByTagName(element,"ol");if(orderedLists.length){listRoot=orderedLists[0];ordered=true;orderedListType=normalizeOrderedListType(getElementAttribute(listRoot,"type"))}else{var unorderedLists=findDescendantsByTagName(element,"ul");if(unorderedLists.length){listRoot=unorderedLists[0]}}if(listRoot){collectTableOfContentsItemsFromList(listRoot,1,items)}else{var anchors=findDescendantsByTagName(element,"a");for(var index=0;index<anchors.length;index++){var anchor=anchors[index];var href=getElementAttribute(anchor,"href");if(!href||href.charAt(0)!=="#"){continue}var parent=anchor.parentNode;var marginLeft=0;if(parent&&parent.style&&typeof parent.style.marginLeft==="string"){marginLeft=parseInt(parent.style.marginLeft,10)||0}items.push({id:href.substring(1),level:Math.max(1,Math.floor(marginLeft/16)+1),text:normalizePlainText(anchor.textContent||"")})}}var attrs={};var titleNode=getFirstElementChild(element,"div");var titleText=titleNode?normalizePlainText(titleNode.textContent||""):"";if(titleText){attrs.title=titleText}else{attrs.includeTitle=false}if(items.length){attrs.items=items}if(ordered){attrs.ordered=true}if(orderedListType){attrs.orderedListType=orderedListType}return createNode("tableOfContents",{attrs})}function collectTableOfContentsItemsFromList(listNode,level,items){var children=listNode&&listNode.childNodes?listNode.childNodes:[];for(var index=0;index<children.length;index++){var child=children[index];if(!child||child.nodeType!==1||getElementTagName(child)!=="li"){continue}var anchors=findDescendantsByTagName(child,"a");var anchor=anchors.length?anchors[0]:null;if(anchor){var href=getElementAttribute(anchor,"href");if(href&&href.charAt(0)==="#"){items.push({id:href.substring(1),level,text:normalizePlainText(anchor.textContent||"")})}}var nestedList=getFirstElementChild(child,"ol")||getFirstElementChild(child,"ul");if(nestedList){collectTableOfContentsItemsFromList(nestedList,level+1,items)}}}function parseFootnoteItemNode(element){var attrs={};var number=parseInt(getElementAttribute(element,"data-rte-footnote-item"),10)||0;if(number){attrs.number=number}if(getElementAttribute(element,"id")){attrs.id=getElementAttribute(element,"id")}var childNodes=[];var children=element.childNodes||[];for(var index=0;index<children.length;index++){var child=children[index];if(!child){continue}if(child.nodeType===1&&getElementTagName(child)==="a"){var href=getElementAttribute(child,"href");if(href&&href.charAt(0)==="#"){attrs.refId=href.substring(1);continue}}childNodes.push(child)}var content=parseBlockNodes(childNodes);if(!content.length){content=[createNode("paragraph",{content:[createNode("text",{text:normalizePlainText(element.textContent||"")})]})]}return createNode("footnoteItem",{attrs,content})}function parseFootnotesNode(element){var attrs={};var titleNode=getFirstElementChild(element,"div");var titleText=titleNode?normalizePlainText(titleNode.textContent||""):"";if(titleText){attrs.title=titleText}var list=getFirstElementChild(element,"ol")||getFirstElementChild(element,"ul");var items=[];if(list){var itemElements=getElementChildElements(list,"li");for(var index=0;index<itemElements.length;index++){items.push(parseFootnoteItemNode(itemElements[index]))}}return createNode("footnotes",{attrs,content:items})}function parseListItems(listElement){var items=[];for(var index=0;index<listElement.childNodes.length;index++){var child=listElement.childNodes[index];if(child&&child.nodeType===1&&getElementTagName(child)==="li"){items.push(parseBlockNode(child))}}return items}function isTaskListElement(element){if(!element||getElementTagName(element)!=="ul"){return false}if(String(element.getAttribute("data-rte-task-list")||"").toLowerCase()==="true"){return true}for(var index=0;index<element.childNodes.length;index++){var child=element.childNodes[index];if(!child||child.nodeType!==1||getElementTagName(child)!=="li"){continue}if(findTaskListCheckbox(child)){return true}}return false}function findTaskListCheckbox(listItemElement){if(!listItemElement||listItemElement.nodeType!==1){return null}for(var index=0;index<listItemElement.childNodes.length;index++){var child=listItemElement.childNodes[index];if(!child||child.nodeType!==1){continue}if(getElementTagName(child)==="input"&&String(child.getAttribute("type")||"").toLowerCase()==="checkbox"){return child}if(getElementTagName(child)==="label"){for(var nestedIndex=0;nestedIndex<child.childNodes.length;nestedIndex++){var nestedChild=child.childNodes[nestedIndex];if(nestedChild&&nestedChild.nodeType===1&&getElementTagName(nestedChild)==="input"&&String(nestedChild.getAttribute("type")||"").toLowerCase()==="checkbox"){return nestedChild}}}}return null}function parseTaskListItems(listElement){var items=[];for(var index=0;index<listElement.childNodes.length;index++){var child=listElement.childNodes[index];if(child&&child.nodeType===1&&getElementTagName(child)==="li"){items.push(parseTaskListItem(child))}}return items}function parseTaskListItem(listItemElement){var attrs={};var checkbox=findTaskListCheckbox(listItemElement);var childNodes=[];if(checkbox){attrs.checked=checkbox.checked||String(checkbox.getAttribute("checked")||"").toLowerCase()==="checked"}for(var index=0;index<listItemElement.childNodes.length;index++){var child=listItemElement.childNodes[index];if(!child){continue}if(child===checkbox){continue}if(child.nodeType===3&&!normalizePlainText(child.nodeValue||"")){continue}if(child.nodeType===1&&getElementTagName(child)==="label"&&checkbox&&child.contains(checkbox)){for(var nestedIndex=0;nestedIndex<child.childNodes.length;nestedIndex++){var nestedChild=child.childNodes[nestedIndex];if(!nestedChild||nestedChild===checkbox){continue}childNodes.push(nestedChild)}continue}childNodes.push(child)}var content=parseBlockNodes(childNodes);if(!content.length){content=[createNode("paragraph",{content:parseInlineChildren(listItemElement)})]}return createNode("taskItem",{attrs,content})}function parseTableRows(tableElement){var rows=[];function collectRows(node){for(var index=0;index<node.childNodes.length;index++){var child=node.childNodes[index];if(!child||child.nodeType!==1){continue}var tagName=getElementTagName(child);if(tagName==="tr"){rows.push(parseTableRow(child));continue}if(tagName==="thead"||tagName==="tbody"||tagName==="tfoot"){collectRows(child)}}}collectRows(tableElement);return rows}function parseTableRow(rowElement){var cells=[];for(var index=0;index<rowElement.childNodes.length;index++){var cell=rowElement.childNodes[index];if(!cell||cell.nodeType!==1){continue}var tagName=getElementTagName(cell);if(tagName==="td"||tagName==="th"){cells.push(parseTableCell(cell))}}return createNode("tableRow",{content:cells})}function parseTableCell(cellElement){var attrs={};var colspan=cellElement.getAttribute("colspan");var rowspan=cellElement.getAttribute("rowspan");if(getElementTagName(cellElement)==="th"){attrs.header=true}var align=getElementTextAlignment(cellElement,false);if(align==="left"||align==="center"||align==="right"){attrs.align=align}if(colspan){attrs.colspan=parseInt(colspan,10)||1}if(rowspan){attrs.rowspan=parseInt(rowspan,10)||1}return createNode("tableCell",{attrs,content:parseBlockNodes(cellElement.childNodes)})}function createHeadingAttrs(level,align){var attrs={level};if(align){attrs.align=align}return attrs}function normalizeTextAlignment(value,allowJustify){var normalized=String(value||"").toLowerCase().replace(/^\s+|\s+$/g,"");if(normalized==="left"||normalized==="center"||normalized==="right"){return normalized}if(allowJustify&&normalized==="justify"){return normalized}return""}function getElementTextAlignment(element,allowJustify){var styleTextAlign="";if(element&&element.style&&typeof element.style.textAlign==="string"){styleTextAlign=element.style.textAlign}return normalizeTextAlignment(styleTextAlign||(element?element.getAttribute("align"):""),allowJustify)}function getElementAttribute(element,name){if(!element||typeof element.getAttribute!=="function"){return""}return element.getAttribute(name)||""}function hasElementAttributeValue(element,name,value){return String(getElementAttribute(element,name)).toLowerCase()===String(value||"").toLowerCase()}function getElementChildElements(element,tagName){var results=[];var normalizedTagName=tagName?String(tagName).toLowerCase():"";if(!element||!element.childNodes){return results}for(var index=0;index<element.childNodes.length;index++){var child=element.childNodes[index];if(!child||child.nodeType!==1){continue}if(!normalizedTagName||getElementTagName(child)===normalizedTagName){results.push(child)}}return results}function getFirstElementChild(element,tagName){var children=getElementChildElements(element,tagName);return children.length?children[0]:null}function findDescendantsByTagName(element,tagName,results){var matches=results||[];var normalizedTagName=String(tagName||"").toLowerCase();if(!element||!element.childNodes){return matches}for(var index=0;index<element.childNodes.length;index++){var child=element.childNodes[index];if(!child||child.nodeType!==1){continue}if(getElementTagName(child)===normalizedTagName){matches.push(child)}findDescendantsByTagName(child,normalizedTagName,matches)}return matches}function parseImageNode(element){return createNode("image",{attrs:{src:element.getAttribute("src")||"",alt:element.getAttribute("alt")||"",title:element.getAttribute("title")||"",width:element.getAttribute("width")||"",height:element.getAttribute("height")||""}})}function parseInlineChildren(element,marks){return mergeAdjacentTextNodes(parseInlineNodes(element.childNodes,marks||[]))}function parseMergeFieldNode(element,activeMarks){var name=getElementAttribute(element,"data-rte-merge-field");var label=normalizePlainText(element.textContent||"");var attrs={name};if(label){attrs.label=label}return createNode("mergeField",{attrs,marks:activeMarks.length?activeMarks.slice():void 0})}function parseFootnoteReferenceNode(element,activeMarks){var number=parseInt(getElementAttribute(element,"data-rte-footnote-ref"),10)||0;var link=getFirstElementChild(element,"a");var targetId=link?String(getElementAttribute(link,"href")).replace(/^#/,""):"";var attrs={number};if(getElementAttribute(element,"id")){attrs.id=getElementAttribute(element,"id")}if(targetId){attrs.targetId=targetId}return createNode("footnoteReference",{attrs,marks:activeMarks.length?activeMarks.slice():void 0})}function parseInlineNodes(nodeList,activeMarks){var nodes=[];for(var index=0;index<nodeList.length;index++){nodes=nodes.concat(parseInlineNode(nodeList[index],activeMarks))}return nodes}function parseInlineNode(node,activeMarks){if(!node){return[]}if(node.nodeType===3){if(!node.nodeValue){return[]}return[createNode("text",{text:node.nodeValue,marks:activeMarks.length?activeMarks.slice():void 0})]}if(node.nodeType!==1){return[]}var tagName=getElementTagName(node);if(tagName==="br"){return[createNode("hardBreak")]}if(getElementAttribute(node,"data-rte-merge-field")){return[parseMergeFieldNode(node,activeMarks)]}if(tagName==="sup"&&getElementAttribute(node,"data-rte-footnote-ref")){return[parseFootnoteReferenceNode(node,activeMarks)]}if(tagName==="img"){return[parseImageNode(node)]}var marks=activeMarks.slice();var extractedMarks=extractElementMarks(node);for(var index=0;index<extractedMarks.length;index++){marks=appendMark(marks,extractedMarks[index])}return parseInlineNodes(node.childNodes,marks)}function extractElementMarks(element){var marks=[];var tagName=getElementTagName(element);var style=element.style||{};var textDecoration=style.textDecorationLine||style.textDecoration||"";var styleAttrs={};function pushMark(type,attrs){marks.push({type,attrs:copyAttributes(attrs||{})})}if(tagName==="strong"||tagName==="b"){pushMark("bold")}if(tagName==="em"||tagName==="i"){pushMark("italic")}if(tagName==="u"){pushMark("underline")}if(tagName==="s"||tagName==="strike"||tagName==="del"){pushMark("strike")}if(tagName==="code"){pushMark("code")}if(tagName==="sub"){pushMark("subscript")}if(tagName==="sup"){pushMark("superscript")}if(tagName==="a"){pushMark("link",{href:element.getAttribute("href")||"",rel:element.getAttribute("rel")||"",target:element.getAttribute("target")||"",title:element.getAttribute("title")||""})}if(style.fontWeight&&/bold|[5-9]00/.test(style.fontWeight)){pushMark("bold")}if(style.fontStyle==="italic"){pushMark("italic")}if(textDecoration.indexOf("underline")>=0){pushMark("underline")}if(textDecoration.indexOf("line-through")>=0){pushMark("strike")}if(style.color){styleAttrs.color=style.color}if(style.backgroundColor){styleAttrs.backgroundColor=style.backgroundColor}else if(tagName==="mark"){styleAttrs.backgroundColor="#fff2ac"}if(style.fontSize){styleAttrs.fontSize=style.fontSize}if(style.fontFamily){styleAttrs.fontFamily=style.fontFamily}if(!styleAttrs.color&&element.getAttribute("color")){styleAttrs.color=element.getAttribute("color")}if(!styleAttrs.fontFamily&&element.getAttribute("face")){styleAttrs.fontFamily=element.getAttribute("face")}if(!styleAttrs.fontSize&&element.getAttribute("size")){styleAttrs.fontSize=element.getAttribute("size")}if(tagName==="small"&&!styleAttrs.fontSize){styleAttrs.fontSize="0.85em"}if(tagName==="big"&&!styleAttrs.fontSize){styleAttrs.fontSize="1.15em"}if(copyAttributes(styleAttrs)){pushMark("textStyle",styleAttrs)}return marks}function escapeHtml(value){return String(value||"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function escapeAttribute(value){return escapeHtml(value===void 0||value===null?"":String(value)).replace(/"/g,""")}function buildAttributeString(attrs){var result="";if(!attrs){return result}for(var key in attrs){if(!Object.prototype.hasOwnProperty.call(attrs,key)){continue}var value=attrs[key];if(value===void 0||value===null||value===""){continue}if((key==="href"||key==="src")&&normalizeInlineMarkdownLinkHref(value)===null){continue}result+=" "+key+'="'+escapeAttribute(value)+'"'}return result}function renderTableOfContentsList(items,ordered,orderedListType){var tagName=ordered?"ol":"ul";var attributes="";if(ordered&&orderedListType){attributes=' type="'+escapeAttribute(orderedListType)+'"'}var html="<"+tagName+attributes+' style="margin:0;padding-left:22px;color:#1e293b;">';for(var index=0;index<items.length;index++){var item=items[index]||{};html+='<li style="margin:6px 0;"><a href="#'+escapeAttribute(item.id||"")+'" style="color:#1d4ed8;text-decoration:none;">'+escapeHtml(item.text||"")+"</a>";if(isArray(item.children)&&item.children.length){html+=renderTableOfContentsList(item.children,ordered,orderedListType)}html+="</li>"}html+="</"+tagName+">";return html}function buildStyleString(attrs){if(!attrs){return""}var styles=[];if(attrs.color){styles.push("color: "+attrs.color)}if(attrs.backgroundColor){styles.push("background-color: "+attrs.backgroundColor)}if(attrs.fontSize){styles.push("font-size: "+attrs.fontSize)}if(attrs.fontFamily){styles.push("font-family: "+attrs.fontFamily)}return styles.join("; ")}function serializeInlineNodes(nodes){var html="";for(var index=0;index<(nodes||[]).length;index++){html+=serializeNode(nodes[index],true)}return html}function serializeBlockNodes(nodes){var html="";for(var index=0;index<(nodes||[]).length;index++){html+=serializeNode(nodes[index],false)}return html}function serializeListItemContent(nodes){if(!nodes||!nodes.length){return""}if(nodes.length===1&&nodes[0].type==="paragraph"){return serializeInlineNodes(nodes[0].content||[])}return serializeBlockNodes(nodes)}function serializeTableCellContent(nodes){if(!nodes||!nodes.length){return""}if(nodes.length===1&&nodes[0].type==="paragraph"){return serializeInlineNodes(nodes[0].content||[])}return serializeBlockNodes(nodes)}function applyMark(mark,html){var attrs=mark.attrs||{};if(mark.type==="bold"){return"<strong>"+html+"</strong>"}if(mark.type==="italic"){return"<em>"+html+"</em>"}if(mark.type==="underline"){return"<u>"+html+"</u>"}if(mark.type==="strike"){return"<s>"+html+"</s>"}if(mark.type==="code"){return"<code>"+html+"</code>"}if(mark.type==="subscript"){return"<sub>"+html+"</sub>"}if(mark.type==="superscript"){return"<sup>"+html+"</sup>"}if(mark.type==="link"){return"<a"+buildAttributeString({href:attrs.href,rel:attrs.rel,target:attrs.target,title:attrs.title})+">"+html+"</a>"}if(mark.type==="textStyle"){var style=buildStyleString(attrs);return style?'<span style="'+escapeAttribute(style)+'">'+html+"</span>":html}return html}function serializeNode(node,inlineMode){if(!node||typeof node!=="object"){return""}if(node.type==="doc"){return serializeBlockNodes(node.content||[])}if(node.type==="text"){var textHtml=escapeHtml(node.text||"");var marks=node.marks||[];for(var markIndex=marks.length-1;markIndex>=0;markIndex--){textHtml=applyMark(marks[markIndex],textHtml)}return textHtml}if(node.type==="hardBreak"){return"<br />"}if(node.type==="mergeField"){var mergeAttrs=node.attrs||{};var mergeName=String(mergeAttrs.name||"");var mergeLabel=String(mergeAttrs.label||mergeName||"");return'<span data-rte-merge-field="'+escapeAttribute(mergeName)+'" contenteditable="false" style="display:inline-flex;align-items:center;gap:6px;padding:2px 8px;border:1px solid #bfdbfe;border-radius:999px;background:#eff6ff;color:#1d4ed8;font-size:0.95em;font-weight:600;white-space:nowrap;">'+escapeHtml(mergeLabel)+"</span>"}if(node.type==="footnoteReference"){var referenceAttrs=node.attrs||{};var referenceNumber=parseInt(referenceAttrs.number,10)||1;var referenceId=String(referenceAttrs.id||"rte-footnote-ref-"+referenceNumber);var referenceTargetId=String(referenceAttrs.targetId||"rte-footnote-item-"+referenceNumber);return'<sup id="'+escapeAttribute(referenceId)+'" data-rte-footnote-ref="'+escapeAttribute(referenceNumber)+'" style="font-size:0.75em;line-height:1;vertical-align:super;"><a href="#'+escapeAttribute(referenceTargetId)+'" style="color:#1d4ed8;text-decoration:none;">['+escapeHtml(referenceNumber)+"]</a></sup>"}if(node.type==="image"){return"<img"+buildAttributeString(node.attrs||{})+" />"}if(node.type==="paragraph"){var paragraphAttrs=buildBlockAlignmentAttributes(node,true);return inlineMode?serializeInlineNodes(node.content||[]):"<p"+buildAttributeString(paragraphAttrs)+">"+serializeInlineNodes(node.content||[])+"</p>"}if(node.type==="heading"){var level=1;var headingAttrs=node.attrs||{};if(node.attrs&&node.attrs.level){level=parseInt(node.attrs.level,10)||1}if(level<1){level=1}if(level>6){level=6}var headingHtmlAttrs=buildBlockAlignmentAttributes(node,true);if(headingAttrs.id){headingHtmlAttrs.id=headingAttrs.id}return"<h"+level+buildAttributeString(headingHtmlAttrs)+">"+serializeInlineNodes(node.content||[])+"</h"+level+">"}if(node.type==="blockquote"){return"<blockquote>"+serializeBlockNodes(node.content||[])+"</blockquote>"}if(node.type==="codeBlock"){return"<pre><code>"+escapeHtml(node.text||"")+"</code></pre>"}if(node.type==="bulletList"){return"<ul>"+serializeBlockNodes(node.content||[])+"</ul>"}if(node.type==="orderedList"){var listAttrs={};if(node.attrs&&node.attrs.start!==void 0&&node.attrs.start!==null){listAttrs.start=node.attrs.start}if(node.attrs){var normalizedOrderedListType=normalizeOrderedListType(node.attrs.orderedListType);if(normalizedOrderedListType){listAttrs.type=normalizedOrderedListType}}return"<ol"+buildAttributeString(listAttrs)+">"+serializeBlockNodes(node.content||[])+"</ol>"}if(node.type==="listItem"){return"<li>"+serializeListItemContent(node.content||[])+"</li>"}if(node.type==="taskList"){return'<ul data-rte-task-list="true">'+serializeBlockNodes(node.content||[])+"</ul>"}if(node.type==="taskItem"){var checkboxAttrs={type:"checkbox",disabled:"disabled"};if(node.attrs&&node.attrs.checked){checkboxAttrs.checked="checked"}return'<li data-rte-task-item="true"><input'+buildAttributeString(checkboxAttrs)+" />"+serializeListItemContent(node.content||[])+"</li>"}if(node.type==="horizontalRule"){return"<hr />"}if(node.type==="pageBreak"){var pageBreakAttrs=node.attrs||{};var pageBreakLabel=String(pageBreakAttrs.label||"Page Break");return'<div data-rte-page-break="true" contenteditable="false" style="position:relative;text-align:center;border-top:2px dashed #94a3b8;margin:18px 0 14px;padding:0;height:0;line-height:0;user-select:none;"><span style="position:relative;top:-0.75em;display:inline-block;padding:0 10px;background:#fff;color:#64748b;font-size:12px;font-weight:600;letter-spacing:0.08em;text-transform:uppercase;line-height:1.6;">'+escapeHtml(pageBreakLabel)+"</span></div>"}if(node.type==="tableOfContents"){var tocAttrs=node.attrs||{};var tocItems=isArray(tocAttrs.items)?tocAttrs.items:[];var tocTitle=String(tocAttrs.title||"Table of Contents");var tocIncludeTitle=tocAttrs.includeTitle!==false;var tocOrdered=tocAttrs.ordered===true;var tocOrderedListType=normalizeOrderedListType(tocAttrs.orderedListType);var tocHtml="";if(tocIncludeTitle){tocHtml+='<div style="font-size:12px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;color:#475569;margin-bottom:10px;">'+escapeHtml(tocTitle)+"</div>"}tocHtml+=renderTableOfContentsList(buildTableOfContentsTreeFromItems(tocItems),tocOrdered,tocOrderedListType);return'<div data-rte-toc="true" contenteditable="false" style="margin:18px 0;padding:16px 18px;border:1px solid #dbeafe;border-radius:16px;background:#f8fbff;">'+tocHtml+"</div>"}if(node.type==="footnotes"){var footnotesAttrs=node.attrs||{};var footnotesTitle=String(footnotesAttrs.title||"Footnotes");return'<div data-rte-footnotes="true" style="margin-top:24px;padding-top:14px;border-top:1px solid #cbd5e1;"><div style="margin-bottom:10px;font-size:12px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;color:#475569;">'+escapeHtml(footnotesTitle)+'</div><ol style="margin:0;padding-left:22px;color:#334155;">'+serializeBlockNodes(node.content||[])+"</ol></div>"}if(node.type==="footnoteItem"){var footnoteItemAttrs=node.attrs||{};var footnoteItemNumber=parseInt(footnoteItemAttrs.number,10)||1;var footnoteItemId=String(footnoteItemAttrs.id||"rte-footnote-item-"+footnoteItemNumber);var footnoteRefId=String(footnoteItemAttrs.refId||"rte-footnote-ref-"+footnoteItemNumber);return'<li id="'+escapeAttribute(footnoteItemId)+'" data-rte-footnote-item="'+escapeAttribute(footnoteItemNumber)+'" style="margin:0 0 10px 0;line-height:1.7;">'+serializeListItemContent(node.content||[])+' <a href="#'+escapeAttribute(footnoteRefId)+'" style="color:#1d4ed8;text-decoration:none;">↩</a></li>'}if(node.type==="table"){return"<table>"+serializeBlockNodes(node.content||[])+"</table>"}if(node.type==="tableRow"){return"<tr>"+serializeBlockNodes(node.content||[])+"</tr>"}if(node.type==="tableCell"){var cellTag=node.attrs&&node.attrs.header?"th":"td";var cellAttrs={};if(node.attrs){if(node.attrs.align){cellAttrs.align=node.attrs.align;cellAttrs.style="text-align: "+node.attrs.align}if(node.attrs.colspan){cellAttrs.colspan=node.attrs.colspan}if(node.attrs.rowspan){cellAttrs.rowspan=node.attrs.rowspan}}return"<"+cellTag+buildAttributeString(cellAttrs)+">"+serializeTableCellContent(node.content||[])+"</"+cellTag+">"}if(node.type==="htmlBlock"||node.type==="htmlInline"){return node.html||""}if(isArray(node.content)){return inlineMode?serializeInlineNodes(node.content):serializeBlockNodes(node.content)}if(typeof node.html==="string"){return node.html}if(typeof node.text==="string"){return escapeHtml(node.text)}return""}function serializeStructuredContent(value){if(value==null){return""}if(typeof value==="string"){var trimmed=value.trim();if(trimmed&&(trimmed.charAt(0)==="{"||trimmed.charAt(0)==="[")){try{return serializeStructuredContent(JSON.parse(trimmed))}catch(error){return value}}return value}if(typeof value!=="object"){return String(value)}if(value.type==="doc"&&isArray(value.content)){var normalizedDocument=normalizeDocumentHeadingIds(value);return serializePageSetupMetadata(normalizeDocumentPageSetup(normalizedDocument.attrs&&normalizedDocument.attrs.pageSetup))+serializeBlockNodes(normalizedDocument.content)}if(value.type&&value.type!=="doc"){return serializeNode(value,false)}if(isArray(value.content)){var normalizedContentDocument=normalizeDocumentHeadingIds({type:"doc",version:typeof value.version==="number"?value.version:2,format:value.format||"richtexteditor-json",attrs:value.attrs,content:value.content});return serializePageSetupMetadata(normalizeDocumentPageSetup(normalizedContentDocument.attrs&&normalizedContentDocument.attrs.pageSetup))+serializeBlockNodes(normalizedContentDocument.content)}if(value.content&&typeof value.content.html==="string"){return value.content.html}if(typeof value.html==="string"){return value.html}return""}function normalizeStructuredContent2(value){return serializeStructuredContent(value)}function createValidationIssue(path,message){return{message,path}}function createAccessibilityIssue(path,code,message,severity){return{code,message,path,severity:severity||"warning"}}function buildBlockAlignmentAttributes(node,allowJustify){var align=node&&node.attrs?normalizeTextAlignment(node.attrs.align,allowJustify):"";if(!align){return{}}return{align,style:"text-align: "+align}}function isStructuredNodeObject(value){return!!value&&typeof value==="object"&&!isArray(value)}function createValidationDocument(value){if(value==null){return createStructuredDocument2(value)}if(typeof value==="string"){return createStructuredDocument2(value)}if(!isStructuredNodeObject(value)){return createStructuredDocument2(String(value))}if(value.type==="doc"){return{type:"doc",version:typeof value.version==="number"?value.version:2,format:typeof value.format==="string"?value.format:"richtexteditor-json",attrs:value.attrs&&typeof value.attrs==="object"?Object.assign({},value.attrs):void 0,html:typeof value.html==="string"?value.html:void 0,text:typeof value.text==="string"?value.text:void 0,content:isArray(value.content)?value.content:[]}}if(value.type&&value.type!=="doc"){return{type:"doc",version:2,format:"richtexteditor-json",content:[value]}}if(isArray(value.content)){return{type:"doc",version:typeof value.version==="number"?value.version:2,format:typeof value.format==="string"?value.format:"richtexteditor-json",attrs:value.attrs&&typeof value.attrs==="object"?Object.assign({},value.attrs):void 0,html:typeof value.html==="string"?value.html:void 0,text:typeof value.text==="string"?value.text:void 0,content:value.content}}if(value.content&&isStructuredNodeObject(value.content)){return{type:"doc",version:typeof value.version==="number"?value.version:2,format:typeof value.format==="string"?value.format:"richtexteditor-json",attrs:value.attrs&&typeof value.attrs==="object"?Object.assign({},value.attrs):void 0,html:typeof value.html==="string"?value.html:void 0,text:typeof value.text==="string"?value.text:void 0,content:[value.content]}}return createStructuredDocument2(serializeStructuredContent(value))}function validateMark(mark,path,issues){if(!isStructuredNodeObject(mark)){issues.push(createValidationIssue(path,"Marks must be objects."));return}if(typeof mark.type!=="string"||!mark.type){issues.push(createValidationIssue(path+".type","Marks require a type."));return}if(!MARK_TYPES[mark.type]){issues.push(createValidationIssue(path+".type",'Unsupported mark type "'+mark.type+'".'))}if(mark.type==="link"){if(!mark.attrs||typeof mark.attrs.href!=="string"||!mark.attrs.href){issues.push(createValidationIssue(path+".attrs.href","Link marks require a non-empty href."))}}}function validateNodeChildren(node,path,mode,issues){if(!isArray(node.content)){issues.push(createValidationIssue(path+".content","Node content must be an array."));return}for(var index=0;index<node.content.length;index++){validateNode(node.content[index],path+".content["+index+"]",mode,issues)}}function validateNode(node,path,mode,issues){if(!isStructuredNodeObject(node)){issues.push(createValidationIssue(path,"Nodes must be objects."));return}if(typeof node.type!=="string"||!node.type){issues.push(createValidationIssue(path+".type","Nodes require a type."));return}if(node.marks){if(!isArray(node.marks)){issues.push(createValidationIssue(path+".marks","Marks must be an array."))}else{for(var markIndex=0;markIndex<node.marks.length;markIndex++){validateMark(node.marks[markIndex],path+".marks["+markIndex+"]",issues)}}}if(mode==="inline"&&!INLINE_NODE_TYPES[node.type]){issues.push(createValidationIssue(path+".type",'Inline content cannot contain "'+node.type+'" nodes.'))}if(mode==="block"&&!(BLOCK_NODE_TYPES[node.type]||node.type==="footnoteItem"||node.type==="tableRow"||node.type==="tableCell"||node.type==="listItem"||node.type==="taskItem")){issues.push(createValidationIssue(path+".type",'Block content cannot contain "'+node.type+'" nodes.'))}if(node.type==="text"){if(typeof node.text!=="string"){issues.push(createValidationIssue(path+".text","Text nodes require a string text value."))}if(node.content){issues.push(createValidationIssue(path+".content","Text nodes cannot contain child content."))}return}if(node.type==="hardBreak"){if(node.content){issues.push(createValidationIssue(path+".content","Hard break nodes cannot contain child content."))}return}if(node.type==="mergeField"){if(!node.attrs||typeof node.attrs.name!=="string"||!node.attrs.name){issues.push(createValidationIssue(path+".attrs.name","Merge field nodes require a non-empty name."))}return}if(node.type==="footnoteReference"){if(!node.attrs||typeof node.attrs.number!=="number"||node.attrs.number<1){issues.push(createValidationIssue(path+".attrs.number","Footnote reference nodes require a positive number."))}return}if(node.type==="image"){if(!node.attrs||typeof node.attrs.src!=="string"||!node.attrs.src){issues.push(createValidationIssue(path+".attrs.src","Image nodes require a non-empty src."))}return}if(node.type==="heading"){if(!node.attrs||typeof node.attrs.level!=="number"||node.attrs.level<1||node.attrs.level>6){issues.push(createValidationIssue(path+".attrs.level","Heading nodes require a level between 1 and 6."))}if(node.attrs&&node.attrs.align!==void 0){if(typeof node.attrs.align!=="string"||!/^(left|center|right|justify)$/.test(String(node.attrs.align).toLowerCase())){issues.push(createValidationIssue(path+".attrs.align",'Heading nodes require align to be "left", "center", "right", or "justify" when provided.'))}}validateNodeChildren(node,path,"inline",issues);return}if(node.type==="paragraph"){if(node.attrs&&node.attrs.align!==void 0){if(typeof node.attrs.align!=="string"||!/^(left|center|right|justify)$/.test(String(node.attrs.align).toLowerCase())){issues.push(createValidationIssue(path+".attrs.align",'Paragraph nodes require align to be "left", "center", "right", or "justify" when provided.'))}}validateNodeChildren(node,path,"inline",issues);return}if(node.type==="blockquote"){validateNodeChildren(node,path,"block",issues);return}if(node.type==="codeBlock"){if(typeof node.text!=="string"){issues.push(createValidationIssue(path+".text","Code block nodes require a string text value."))}return}if(node.type==="bulletList"||node.type==="orderedList"){if(node.type==="orderedList"&&node.attrs&&node.attrs.start!==void 0){if(typeof node.attrs.start!=="number"||!isFinite(node.attrs.start)||Math.floor(node.attrs.start)!==node.attrs.start||Math.abs(node.attrs.start)>9007199254740991){issues.push(createValidationIssue(path+".attrs.start","Ordered lists require a finite safe integer start value."))}}if(node.type==="orderedList"&&node.attrs&&node.attrs.orderedListType!==void 0){if(typeof node.attrs.orderedListType!=="string"||normalizeOrderedListType(node.attrs.orderedListType)!==node.attrs.orderedListType){issues.push(createValidationIssue(path+".attrs.orderedListType",'Ordered lists require orderedListType to be one of "1", "A", "a", "I", or "i" when provided.'))}}if(!isArray(node.content)){issues.push(createValidationIssue(path+".content","List nodes require a content array."));return}for(var listIndex=0;listIndex<node.content.length;listIndex++){var listItem=node.content[listIndex];if(!listItem||listItem.type!=="listItem"){issues.push(createValidationIssue(path+".content["+listIndex+"]","Lists can only contain listItem nodes."));continue}validateNode(listItem,path+".content["+listIndex+"]","block",issues)}return}if(node.type==="listItem"){validateNodeChildren(node,path,"block",issues);return}if(node.type==="taskList"){if(!isArray(node.content)){issues.push(createValidationIssue(path+".content","Task lists require a content array."));return}for(var taskItemIndex=0;taskItemIndex<node.content.length;taskItemIndex++){var taskItem=node.content[taskItemIndex];if(!taskItem||taskItem.type!=="taskItem"){issues.push(createValidationIssue(path+".content["+taskItemIndex+"]","Task lists can only contain taskItem nodes."));continue}validateNode(taskItem,path+".content["+taskItemIndex+"]","block",issues)}return}if(node.type==="taskItem"){if(node.attrs&&node.attrs.checked!==void 0&&typeof node.attrs.checked!=="boolean"){issues.push(createValidationIssue(path+".attrs.checked","Task items require a boolean checked attribute when provided."))}validateNodeChildren(node,path,"block",issues);return}if(node.type==="horizontalRule"){return}if(node.type==="pageBreak"){if(node.content){issues.push(createValidationIssue(path+".content","Page break nodes cannot contain child content."))}return}if(node.type==="tableOfContents"){var tocItems=node.attrs&&node.attrs.items;if(!isArray(tocItems)){issues.push(createValidationIssue(path+".attrs.items","Table of contents nodes require an items array."));return}for(var tocIndex=0;tocIndex<tocItems.length;tocIndex++){var tocItem=tocItems[tocIndex];if(!isStructuredNodeObject(tocItem)){issues.push(createValidationIssue(path+".attrs.items["+tocIndex+"]","Table of contents items must be objects."));continue}if(typeof tocItem.id!=="string"||!tocItem.id){issues.push(createValidationIssue(path+".attrs.items["+tocIndex+"].id","Table of contents items require a non-empty id."))}if(typeof tocItem.text!=="string"||!tocItem.text){issues.push(createValidationIssue(path+".attrs.items["+tocIndex+"].text","Table of contents items require non-empty text."))}if(typeof tocItem.level!=="number"||tocItem.level<1||tocItem.level>6){issues.push(createValidationIssue(path+".attrs.items["+tocIndex+"].level","Table of contents items require a level between 1 and 6."))}}return}if(node.type==="footnotes"){if(!isArray(node.content)){issues.push(createValidationIssue(path+".content","Footnotes nodes require a content array."));return}for(var footnoteIndex=0;footnoteIndex<node.content.length;footnoteIndex++){var footnoteItem=node.content[footnoteIndex];if(!footnoteItem||footnoteItem.type!=="footnoteItem"){issues.push(createValidationIssue(path+".content["+footnoteIndex+"]","Footnotes can only contain footnoteItem nodes."));continue}validateNode(footnoteItem,path+".content["+footnoteIndex+"]","block",issues)}return}if(node.type==="footnoteItem"){if(!node.attrs||typeof node.attrs.number!=="number"||node.attrs.number<1){issues.push(createValidationIssue(path+".attrs.number","Footnote items require a positive number."))}validateNodeChildren(node,path,"block",issues);return}if(node.type==="table"){if(!isArray(node.content)){issues.push(createValidationIssue(path+".content","Table nodes require a content array."));return}for(var rowIndex=0;rowIndex<node.content.length;rowIndex++){var row=node.content[rowIndex];if(!row||row.type!=="tableRow"){issues.push(createValidationIssue(path+".content["+rowIndex+"]","Tables can only contain tableRow nodes."));continue}validateNode(row,path+".content["+rowIndex+"]","block",issues)}return}if(node.type==="tableRow"){if(!isArray(node.content)){issues.push(createValidationIssue(path+".content","Table rows require a content array."));return}for(var cellIndex=0;cellIndex<node.content.length;cellIndex++){var cell=node.content[cellIndex];if(!cell||cell.type!=="tableCell"){issues.push(createValidationIssue(path+".content["+cellIndex+"]","Table rows can only contain tableCell nodes."));continue}validateNode(cell,path+".content["+cellIndex+"]","block",issues)}return}if(node.type==="tableCell"){if(node.attrs&&node.attrs.align!==void 0){if(typeof node.attrs.align!=="string"||!/^(left|center|right)$/.test(String(node.attrs.align).toLowerCase())){issues.push(createValidationIssue(path+".attrs.align",'Table cells require align to be "left", "center", or "right" when provided.'))}}validateNodeChildren(node,path,"block",issues);return}if(node.type==="htmlBlock"||node.type==="htmlInline"){if(typeof node.html!=="string"){issues.push(createValidationIssue(path+".html","HTML nodes require an html string."))}return}issues.push(createValidationIssue(path+".type",'Unsupported node type "'+node.type+'".'))}function validateStructuredContent2(value){var documentModel=createValidationDocument(value);var issues=[];if(documentModel.type!=="doc"){issues.push(createValidationIssue("type",'Structured content roots must use the "doc" type.'))}if(typeof documentModel.version!=="number"){issues.push(createValidationIssue("version","Structured content documents require a numeric version."))}if(typeof documentModel.format!=="string"||!documentModel.format){issues.push(createValidationIssue("format","Structured content documents require a format string."))}var pageSetup=normalizeDocumentPageSetup(documentModel.attrs&&documentModel.attrs.pageSetup);if(documentModel.attrs&&documentModel.attrs.pageSetup&&!pageSetup){issues.push(createValidationIssue("attrs.pageSetup","Document pageSetup metadata must be an object when provided."))}if(pageSetup){if(pageSetup.orientation!==void 0&&pageSetup.orientation!=="portrait"&&pageSetup.orientation!=="landscape"){issues.push(createValidationIssue("attrs.pageSetup.orientation",'Document pageSetup orientation must be "portrait" or "landscape".'))}if(pageSetup.width&&!pageSetup.height||!pageSetup.width&&pageSetup.height){issues.push(createValidationIssue("attrs.pageSetup","Document pageSetup width and height should be provided together when using custom dimensions."))}}if(!isArray(documentModel.content)){issues.push(createValidationIssue("content","Structured content documents require a content array."))}else{for(var index=0;index<documentModel.content.length;index++){validateNode(documentModel.content[index],"content["+index+"]","block",issues)}}return{document:documentModel,issues,valid:issues.length===0}}function getNodeTextContent(node){if(!node){return""}if(typeof node==="string"){return node}if(node.type==="text"){return String(node.text||"")}if(node.type==="codeBlock"){return String(node.text||"")}if(node.type==="mergeField"){return String(node.attrs&&(node.attrs.label||node.attrs.name)||"")}if(node.type==="footnoteReference"){return String(node.attrs&&node.attrs.number||"")}var text="";var content=isArray(node.content)?node.content:[];for(var index=0;index<content.length;index++){text+=getNodeTextContent(content[index])+" "}return normalizePlainText(text)}function renderTextContent(nodes){var content=isArray(nodes)?nodes:[];var text="";for(var index=0;index<content.length;index++){text+=getNodeTextContent(content[index])+" "}return normalizePlainText(text)}function tableHasHeaderCell(node){if(!node||!isArray(node.content)){return false}for(var rowIndex=0;rowIndex<node.content.length;rowIndex++){var row=node.content[rowIndex];if(!row||!isArray(row.content)){continue}for(var cellIndex=0;cellIndex<row.content.length;cellIndex++){var cell=row.content[cellIndex];if(cell&&cell.attrs&&cell.attrs.header===true){return true}}}return false}function auditAccessibilityNode(node,path,issues,state){if(!isStructuredNodeObject(node)||typeof node.type!=="string"||!node.type){return}if(node.type==="image"){var altText=normalizePlainText(node.attrs&&node.attrs.alt);if(!altText){issues.push(createAccessibilityIssue(path+".attrs.alt","image-missing-alt","Images should include meaningful alt text, or be marked decorative outside the structured-content model.","warning"))}}if(node.type==="heading"){var headingText=normalizePlainText(getNodeTextContent(node));var headingLevel=node.attrs&&node.attrs.level;if(!headingText){issues.push(createAccessibilityIssue(path+".content","heading-empty","Headings should contain readable text.","error"))}if(typeof headingLevel==="number"){if(state.lastHeadingLevel&&headingLevel>state.lastHeadingLevel+1){issues.push(createAccessibilityIssue(path+".attrs.level","heading-level-skip","Heading levels should not skip intermediate levels.","warning"))}state.lastHeadingLevel=headingLevel}}if(node.type==="table"&&!tableHasHeaderCell(node)){issues.push(createAccessibilityIssue(path,"table-missing-header","Tables should include at least one header cell.","warning"))}if(!isArray(node.content)){return}for(var index=0;index<node.content.length;index++){auditAccessibilityNode(node.content[index],path+".content["+index+"]",issues,state)}}function auditAccessibility3(value){var documentModel=createStructuredDocument2(value);var issues=[];var state={lastHeadingLevel:0};for(var index=0;index<documentModel.content.length;index++){auditAccessibilityNode(documentModel.content[index],"content["+index+"]",issues,state)}return{document:documentModel,issues,valid:!issues.some(function(issue){return issue&&issue.severity==="error"})}}function createLinkAuditIssue(path,code,message,severity,href){var issue={code,message,path,severity:severity||"warning"};if(href!==void 0){issue.href=href}return issue}function normalizeLinkAuditOptions(options){var normalized=options&&typeof options==="object"?options:{};var allowedProtocols=isArray(normalized.allowedProtocols)?normalized.allowedProtocols:["http:","https:","mailto:","tel:"];var allowedDomains=isArray(normalized.allowedDomains)?normalized.allowedDomains:[];return{allowedProtocols:allowedProtocols.map(function(protocol){var value=String(protocol||"").toLowerCase();return value&&value.charAt(value.length-1)===":"?value:value+":"}).filter(Boolean),allowedDomains:allowedDomains.map(function(domain){return String(domain||"").toLowerCase()}).filter(Boolean),requireHttps:normalized.requireHttps===true,flagNewWindowWithoutRel:normalized.flagNewWindowWithoutRel!==false}}function getLinkHostname(href){if(typeof URL==="undefined"){return""}try{return new URL(href).hostname.toLowerCase()}catch(error){return""}}function isAllowedLinkDomain(hostname,allowedDomains){if(!allowedDomains.length||!hostname){return true}for(var index=0;index<allowedDomains.length;index++){var domain=allowedDomains[index];if(hostname===domain||hostname.slice(-(domain.length+1))==="."+domain){return true}}return false}function auditLinkMark(mark,path,issues,options){var attrs=mark&&mark.attrs?mark.attrs:{};var href=String(attrs.href||"").replace(/^\s+|\s+$/g,"");var target=String(attrs.target||"").toLowerCase();var rel=String(attrs.rel||"").toLowerCase();if(!href){issues.push(createLinkAuditIssue(path+".attrs.href","link-empty-href","Links should include a destination URL.","error",href));return}if(/^[a-z][a-z0-9+.-]*:/i.test(href)){var protocol=href.replace(/^([a-z][a-z0-9+.-]*:).*$/i,"$1").toLowerCase();if(options.allowedProtocols.indexOf(protocol)<0){issues.push(createLinkAuditIssue(path+".attrs.href","link-disallowed-protocol","Links should use an approved URL protocol.","error",href));return}if(options.requireHttps&&protocol==="http:"){issues.push(createLinkAuditIssue(path+".attrs.href","link-insecure-http","Public links should use HTTPS.","warning",href))}var hostname=getLinkHostname(href);if(hostname&&!isAllowedLinkDomain(hostname,options.allowedDomains)){issues.push(createLinkAuditIssue(path+".attrs.href","link-domain-not-allowed","Links should point to an approved domain.","warning",href))}}else if(/^[a-z][a-z0-9+.-]*$/i.test(href)){issues.push(createLinkAuditIssue(path+".attrs.href","link-malformed-url","Links should use a valid absolute URL, relative URL, anchor, email, or phone destination.","error",href))}if(options.flagNewWindowWithoutRel&&target==="_blank"&&rel.indexOf("noopener")<0){issues.push(createLinkAuditIssue(path+".attrs.rel","link-missing-noopener",'Links that open in a new window should include rel="noopener".',"warning",href))}}function auditLinksNode(node,path,issues,options){if(!isStructuredNodeObject(node)){return}var marks=isArray(node.marks)?node.marks:[];for(var markIndex=0;markIndex<marks.length;markIndex++){if(marks[markIndex]&&marks[markIndex].type==="link"){auditLinkMark(marks[markIndex],path+".marks["+markIndex+"]",issues,options)}}if(!isArray(node.content)){return}for(var index=0;index<node.content.length;index++){auditLinksNode(node.content[index],path+".content["+index+"]",issues,options)}}function auditLinks2(value,options){var documentModel=createStructuredDocument2(value);var issues=[];var normalizedOptions=normalizeLinkAuditOptions(options);for(var index=0;index<documentModel.content.length;index++){auditLinksNode(documentModel.content[index],"content["+index+"]",issues,normalizedOptions)}return{document:documentModel,issues,valid:!issues.some(function(issue){return issue&&issue.severity==="error"})}}function cloneStructuredDocument(documentModel){return JSON.parse(JSON.stringify(documentModel||createStructuredContent2("")))}function resolveAccessibilityIssueNodePath(issue){if(!issue||typeof issue.path!=="string"){return""}if(issue.code==="image-missing-alt"){return issue.path.replace(/\.attrs\.alt$/,"")}if(issue.code==="heading-empty"){return issue.path.replace(/\.content$/,"")}if(issue.code==="heading-level-skip"){return issue.path.replace(/\.attrs\.level$/,"")}return issue.path}function parseStructuredPath(path){var parts=[];if(typeof path!=="string"||!path){return parts}path.replace(/([^[.\]]+)|\[(\d+)\]/g,function(_,key,index){parts.push(typeof index==="string"?parseInt(index,10):key);return _});return parts}function getValueAtStructuredPath(root,path){var parts=parseStructuredPath(path);var current=root;for(var index=0;index<parts.length;index++){if(current==null){return null}current=current[parts[index]]}return current==null?null:current}function ensureStructuredTextNode(text){return{type:"text",text:normalizePlainText(text)}}function findPreviousHeadingLevel(documentModel,targetPath){var targetNodePath=resolveAccessibilityIssueNodePath({path:targetPath});var lastHeadingLevel=0;var found=false;function visit(node,path){if(found||!isStructuredNodeObject(node)){return}if(path===targetNodePath){found=true;return}if(node.type==="heading"&&node.attrs&&typeof node.attrs.level==="number"){lastHeadingLevel=node.attrs.level}if(!isArray(node.content)){return}for(var index=0;index<node.content.length;index++){visit(node.content[index],path+".content["+index+"]");if(found){return}}}if(documentModel&&isArray(documentModel.content)){for(var rootIndex=0;rootIndex<documentModel.content.length;rootIndex++){visit(documentModel.content[rootIndex],"content["+rootIndex+"]");if(found){break}}}return lastHeadingLevel}function repairAccessibilityIssue(value,issue,options){var documentModel=createStructuredDocument2(value);var workingDocument=cloneStructuredDocument(documentModel);var normalizedIssue=issue||{};var nodePath=resolveAccessibilityIssueNodePath(normalizedIssue);var node=getValueAtStructuredPath(workingDocument,nodePath);var normalizedOptions=options||{};if(!node||typeof normalizedIssue.code!=="string"){return workingDocument}if(normalizedIssue.code==="image-missing-alt"){var altText=normalizePlainText(normalizedOptions.altText);if(!altText){return workingDocument}node.attrs=node.attrs||{};node.attrs.alt=altText;return workingDocument}if(normalizedIssue.code==="heading-empty"){var headingText=normalizePlainText(normalizedOptions.headingText);if(!headingText){return workingDocument}node.content=[ensureStructuredTextNode(headingText)];return workingDocument}if(normalizedIssue.code==="heading-level-skip"){var targetLevel=typeof normalizedOptions.targetLevel==="number"?normalizedOptions.targetLevel:Math.min(6,Math.max(1,findPreviousHeadingLevel(workingDocument,nodePath)+1||1));node.attrs=node.attrs||{};node.attrs.level=targetLevel;return workingDocument}if(normalizedIssue.code==="table-missing-header"){if(!isArray(node.content)||!node.content.length||!node.content[0]||!isArray(node.content[0].content)){return workingDocument}for(var cellIndex=0;cellIndex<node.content[0].content.length;cellIndex++){var cell=node.content[0].content[cellIndex];if(!isStructuredNodeObject(cell)){continue}cell.attrs=cell.attrs||{};cell.attrs.header=true}return workingDocument}return workingDocument}function createStructuredDocument2(value){if(value==null){return createStructuredContent2("")}if(typeof value==="string"){var trimmed=value.trim();if(trimmed&&(trimmed.charAt(0)==="{"||trimmed.charAt(0)==="[")){try{return createStructuredDocument2(JSON.parse(trimmed))}catch(error){return createStructuredContent2(value)}}return createStructuredContent2(value)}if(typeof value!=="object"){return createStructuredContent2(String(value))}if(value.type==="doc"&&isArray(value.content)){var normalizedDocument=normalizeDocumentHeadingIds({type:"doc",version:typeof value.version==="number"?value.version:2,format:value.format||"richtexteditor-json",attrs:value.attrs&&typeof value.attrs==="object"?Object.assign({},value.attrs,{pageSetup:normalizeDocumentPageSetup(value.attrs.pageSetup)||void 0}):void 0,content:value.content});var docHtml=serializeStructuredContent(normalizedDocument);return{type:normalizedDocument.type,version:normalizedDocument.version,format:normalizedDocument.format,attrs:normalizedDocument.attrs,html:docHtml,text:getPlainTextFromHtml(docHtml),content:normalizedDocument.content}}return createStructuredContent2(serializeStructuredContent(value))}function normalizeMarkdownSource(markdown){return String(markdown||"").replace(/\r\n?/g,"\n")}function stripMarkdownIndent(line,maxIndent){var index=0;var limit=Math.max(0,maxIndent||0);while(index<line.length&&index<limit&&line.charAt(index)===" "){index++}return line.substring(index)}function getMarkdownListMatch(line){var bulletMatch=/^(\s*)([-+*])\s+(.*)$/.exec(line);if(bulletMatch){var taskState=getMarkdownTaskState(bulletMatch[3]);return{indent:bulletMatch[1].length,ordered:false,start:1,text:taskState?taskState.text:bulletMatch[3],marker:bulletMatch[2],contentIndent:bulletMatch[1].length+bulletMatch[2].length+1,taskState:taskState?taskState.checked:null}}var orderedMatch=/^(\s*)(\d{1,9})\.\s+(.*)$/.exec(line);if(orderedMatch){return{indent:orderedMatch[1].length,ordered:true,start:parseInt(orderedMatch[2],10),text:orderedMatch[3],marker:orderedMatch[2]+".",contentIndent:orderedMatch[1].length+orderedMatch[2].length+2,taskState:null}}return null}function getMarkdownTaskState(text){var match=/^\[( |x|X)\]\s+(.*)$/.exec(String(text||""));if(!match){return null}return{checked:match[1].toLowerCase()==="x",text:match[2]}}function getMarkdownLineIndent(line){var match=/^(\s*)/.exec(line);return match?match[1].length:0}function isMarkdownFence(line){return/^\s*```/.test(line||"")}function isMarkdownHeading(line){return/^\s{0,3}#{1,6}\s+/.test(line||"")}function isMarkdownHorizontalRule(line){var trimmed=String(line||"").trim();return/^(\*\s*){3,}$/.test(trimmed)||/^(-\s*){3,}$/.test(trimmed)||/^(_\s*){3,}$/.test(trimmed)}function isMarkdownBlockquote(line){return/^\s{0,3}>/.test(line||"")}function splitMarkdownTableRow(line){var text=String(line||"").replace(/^\s+|\s+$/g,"");var cells=[];var current="";var escaped=false;var hasLeadingPipe=text.charAt(0)==="|";var hasTrailingPipe=text.charAt(text.length-1)==="|";if(hasLeadingPipe){text=text.substring(1)}if(hasTrailingPipe){text=text.substring(0,text.length-1)}for(var index=0;index<text.length;index++){var character=text.charAt(index);if(escaped){current+=character;escaped=false;continue}if(character==="\\"){current+=character;escaped=true;continue}if(character==="|"){cells.push(current.replace(/^\s+|\s+$/g,""));current="";continue}current+=character}cells.push(current.replace(/^\s+|\s+$/g,""));return cells}function isMarkdownTableDelimiterCell(cellText){return/^:?-{3,}:?$/.test(String(cellText||"").replace(/\s+/g,""))}function parseMarkdownTableAlignment(cellText){var normalized=String(cellText||"").replace(/\s+/g,"");if(/^:-{3,}:$/.test(normalized)){return"center"}if(/^:-{3,}$/.test(normalized)){return"left"}if(/^-{3,}:$/.test(normalized)){return"right"}return""}function getMarkdownTableMatch(lines,index){if(!lines||index+1>=lines.length){return null}var headerLine=lines[index];var dividerLine=lines[index+1];if(isMarkdownBlankLine(headerLine)||isMarkdownBlankLine(dividerLine)){return null}if(isMarkdownBlockStarter(headerLine)||isMarkdownFence(headerLine)||isMarkdownHeading(headerLine)||isMarkdownHorizontalRule(headerLine)||isMarkdownBlockquote(headerLine)){return null}if(String(headerLine).indexOf("|")===-1||String(dividerLine).indexOf("|")===-1){return null}var headerCells=splitMarkdownTableRow(headerLine);var dividerCells=splitMarkdownTableRow(dividerLine);if(!headerCells.length||headerCells.length!==dividerCells.length){return null}for(var cellIndex=0;cellIndex<dividerCells.length;cellIndex++){if(!isMarkdownTableDelimiterCell(dividerCells[cellIndex])){return null}}return{alignments:dividerCells.map(parseMarkdownTableAlignment),headerCells,columnCount:headerCells.length}}function isMarkdownBlockStarter(line){return isMarkdownFence(line)||isMarkdownHeading(line)||isMarkdownHorizontalRule(line)||isMarkdownBlockquote(line)||!!getMarkdownListMatch(line)}function isMarkdownBlankLine(line){return String(line||"").trim()===""}function parseMarkdownBlocksFromLines(lines){return parseMarkdownBlocks({lines,index:0})}function parseMarkdownBlocks(state){var nodes=[];while(state.index<state.lines.length){var line=state.lines[state.index];if(isMarkdownBlankLine(line)){state.index++;continue}if(isMarkdownFence(line)){nodes.push(parseMarkdownCodeBlock(state));continue}if(isMarkdownHeading(line)){nodes.push(parseMarkdownHeading(state));continue}if(isMarkdownHorizontalRule(line)){state.index++;nodes.push(createNode("horizontalRule"));continue}if(isMarkdownBlockquote(line)){nodes.push(parseMarkdownBlockquote(state));continue}var tableMatch=getMarkdownTableMatch(state.lines,state.index);if(tableMatch){nodes.push(parseMarkdownTable(state,tableMatch));continue}var listMatch=getMarkdownListMatch(line);if(listMatch){nodes.push(parseMarkdownList(state,listMatch));continue}nodes.push(parseMarkdownParagraph(state))}return nodes}function parseMarkdownCodeBlock(state){var infoMatch=/^\s*```(.*)$/.exec(state.lines[state.index]||"");var language=infoMatch&&infoMatch[1]?infoMatch[1].replace(/\s+$/,""):"";var buffer=[];state.index++;while(state.index<state.lines.length&&!isMarkdownFence(state.lines[state.index])){buffer.push(state.lines[state.index]);state.index++}if(state.index<state.lines.length){state.index++}return createNode("codeBlock",{attrs:language?{language}:void 0,text:buffer.join("\n")})}function parseMarkdownHeading(state){var match=/^\s{0,3}(#{1,6})\s+(.*)$/.exec(state.lines[state.index]||"");var level=match?match[1].length:1;var text=match?match[2].replace(/\s+#+\s*$/,""):"";state.index++;return createNode("heading",{attrs:{level},content:parseMarkdownInline(text,[])})}function parseMarkdownBlockquote(state){var lines=[];while(state.index<state.lines.length){var line=state.lines[state.index];if(isMarkdownBlankLine(line)){lines.push("");state.index++;continue}if(!isMarkdownBlockquote(line)){break}lines.push(String(line).replace(/^\s{0,3}>\s?/,""));state.index++}return createNode("blockquote",{content:parseMarkdownBlocksFromLines(lines)})}function parseMarkdownList(state,firstMatch){var items=[];var ordered=firstMatch.ordered;var listIndent=firstMatch.indent;var start=firstMatch.start;var isTaskList=!ordered&&firstMatch.taskState!==null;while(state.index<state.lines.length){var match=getMarkdownListMatch(state.lines[state.index]);if(!match||match.indent!==listIndent||match.ordered!==ordered||!!isTaskList!==(match.taskState!==null)){break}items.push(parseMarkdownListItem(state,match,isTaskList))}return createNode(isTaskList?"taskList":ordered?"orderedList":"bulletList",{attrs:ordered&&start!==1?{start}:void 0,content:items})}function parseMarkdownListItem(state,match,isTaskList){var itemLines=[match.text];state.index++;while(state.index<state.lines.length){var line=state.lines[state.index];if(isMarkdownBlankLine(line)){itemLines.push("");state.index++;continue}var nextMatch=getMarkdownListMatch(line);if(nextMatch&&nextMatch.indent===match.indent&&nextMatch.ordered===match.ordered){break}var currentIndent=getMarkdownLineIndent(line);if(currentIndent>match.indent){itemLines.push(stripMarkdownIndent(line,match.contentIndent));state.index++;continue}if(match.indent===0&&!nextMatch&&!isMarkdownBlockStarter(line)){itemLines.push(line);state.index++;continue}break}var itemContent=parseMarkdownBlocksFromLines(itemLines);if(!itemContent.length){itemContent=[createNode("paragraph",{content:parseMarkdownInline(match.text,[])})]}return createNode(isTaskList?"taskItem":"listItem",{attrs:isTaskList?{checked:!!match.taskState}:void 0,content:itemContent})}function parseMarkdownParagraph(state){var lines=[];while(state.index<state.lines.length){var line=state.lines[state.index];if(isMarkdownBlankLine(line)){break}if(lines.length&&isMarkdownBlockStarter(line)){break}lines.push(line);state.index++}return createNode("paragraph",{content:parseMarkdownParagraphLines(lines)})}function parseMarkdownTable(state,match){var rows=[];rows.push(createNode("tableRow",{content:parseMarkdownTableCells(match.headerCells,true,match.alignments)}));state.index+=2;while(state.index<state.lines.length){var line=state.lines[state.index];if(isMarkdownBlankLine(line)||String(line).indexOf("|")===-1){break}var rowCells=splitMarkdownTableRow(line);if(rowCells.length!==match.columnCount){break}rows.push(createNode("tableRow",{content:parseMarkdownTableCells(rowCells,false,match.alignments)}));state.index++}return createNode("table",{content:rows})}function parseMarkdownTableCells(cellTexts,isHeaderRow,alignments){var cells=[];for(var index=0;index<cellTexts.length;index++){var attrs=isHeaderRow?{header:true}:void 0;var align=alignments&&alignments[index];if(align){attrs=attrs||{};attrs.align=align}cells.push(createNode("tableCell",{attrs,content:[createNode("paragraph",{content:parseMarkdownInline(cellTexts[index],[])})]}))}return cells}function parseMarkdownParagraphLines(lines){var nodes=[];var insertHardBreak=false;for(var index=0;index<lines.length;index++){var line=String(lines[index]||"");var hasHardBreak=false;if(/\\$/.test(line)){line=line.replace(/\\$/,"");hasHardBreak=true}else if(/\s{2,}$/.test(line)){line=line.replace(/\s+$/,"");hasHardBreak=true}if(nodes.length){nodes.push(insertHardBreak?createNode("hardBreak"):createNode("text",{text:" "}))}nodes=nodes.concat(parseMarkdownInline(line,[]));insertHardBreak=hasHardBreak}return mergeAdjacentTextNodes(nodes)}function isMarkdownEscaped(value,index){var slashCount=0;for(var cursor=index-1;cursor>=0&&value.charAt(cursor)==="\\";cursor--){slashCount++}return slashCount%2===1}function findMarkdownClosingDelimiter(value,delimiter,startIndex){var cursor=startIndex;while(cursor<value.length){var matchIndex=value.indexOf(delimiter,cursor);if(matchIndex<0){return-1}if(!isMarkdownEscaped(value,matchIndex)){return matchIndex}cursor=matchIndex+delimiter.length}return-1}function createMarkdownTextNode(text,marks){if(!text){return null}return createNode("text",{text,marks:cloneMarks(marks||[])})}function parseMarkdownInline(value,activeMarks){var text=String(value||"");var nodes=[];var index=0;while(index<text.length){if(text.charAt(index)==="\\"&&index+1<text.length){var escapedNode=createMarkdownTextNode(text.charAt(index+1),activeMarks);if(escapedNode){nodes.push(escapedNode)}index+=2;continue}if(text.substr(index,2)==="!["){var imageToken=parseMarkdownImage(text,index);if(imageToken){nodes.push(createNode("image",{attrs:{src:imageToken.src,alt:imageToken.alt}}));index=imageToken.nextIndex;continue}}if(text.charAt(index)==="["){var linkToken=parseMarkdownLink(text,index);if(linkToken){var linkMarks=appendMark(activeMarks||[],{type:"link",attrs:{href:linkToken.href}});nodes=nodes.concat(parseMarkdownInline(linkToken.label,linkMarks));index=linkToken.nextIndex;continue}}if(text.charAt(index)==="`"){var codeEnd=findMarkdownClosingDelimiter(text,"`",index+1);if(codeEnd>index+1){nodes.push(createNode("text",{text:text.substring(index+1,codeEnd),marks:appendMark(activeMarks||[],{type:"code"})}));index=codeEnd+1;continue}}var strongDelimiter=text.substr(index,2);if(strongDelimiter==="**"||strongDelimiter==="__"){var strongEnd=findMarkdownClosingDelimiter(text,strongDelimiter,index+2);if(strongEnd>index+2){nodes=nodes.concat(parseMarkdownInline(text.substring(index+2,strongEnd),appendMark(activeMarks||[],{type:"bold"})));index=strongEnd+2;continue}}var emphasisDelimiter=text.charAt(index);if(emphasisDelimiter==="*"||emphasisDelimiter==="_"){var emphasisEnd=findMarkdownClosingDelimiter(text,emphasisDelimiter,index+1);if(emphasisEnd>index+1){nodes=nodes.concat(parseMarkdownInline(text.substring(index+1,emphasisEnd),appendMark(activeMarks||[],{type:"italic"})));index=emphasisEnd+1;continue}}var nextSpecialIndex=findNextMarkdownSpecial(text,index+1);var plainText=text.substring(index,nextSpecialIndex<0?text.length:nextSpecialIndex);var textNode=createMarkdownTextNode(plainText,activeMarks);if(textNode){nodes.push(textNode)}index=nextSpecialIndex<0?text.length:nextSpecialIndex}return mergeAdjacentTextNodes(nodes)}function parseMarkdownImage(value,startIndex){var closeBracket=value.indexOf("]",startIndex+2);if(closeBracket<0||value.charAt(closeBracket+1)!=="("){return null}var closeParen=findMarkdownClosingDelimiter(value,")",closeBracket+2);if(closeParen<0){return null}var src=normalizeInlineMarkdownLinkHref(value.substring(closeBracket+2,closeParen));if(src===null){return null}return{alt:value.substring(startIndex+2,closeBracket),src,nextIndex:closeParen+1}}function parseMarkdownLink(value,startIndex){var closeBracket=value.indexOf("]",startIndex+1);if(closeBracket<0||value.charAt(closeBracket+1)!=="("){return null}var closeParen=findMarkdownClosingDelimiter(value,")",closeBracket+2);if(closeParen<0){return null}var href=normalizeInlineMarkdownLinkHref(value.substring(closeBracket+2,closeParen));if(href===null){return null}return{label:value.substring(startIndex+1,closeBracket),href,nextIndex:closeParen+1}}function findNextMarkdownSpecial(value,startIndex){for(var index=startIndex;index<value.length;index++){var char=value.charAt(index);if(char==="\\"||char==="["||char==="*"||char==="_"||char==="`"){return index}if(char==="!"&&value.charAt(index+1)==="["){return index}}return-1}function fromMarkdown2(markdown){var source=normalizeMarkdownSource(markdown);var content=parseMarkdownBlocksFromLines(source.split("\n"));var html=serializeBlockNodes(content);return{type:"doc",version:2,format:"richtexteditor-json",html,text:getPlainTextFromHtml(html),content}}function escapeMarkdownText(value){return String(value||"").replace(/([\\`*_\\[\\]])/g,"\\$1")}function escapeMarkdownCodeText(value){return String(value||"").replace(/\\/g,"\\\\").replace(/`/g,"\\`")}function wrapMarkdownMark(content,mark){if(!mark||!mark.type){return content}if(mark.type==="bold"){return"**"+content+"**"}if(mark.type==="italic"){return"*"+content+"*"}if(mark.type==="strike"){return"~~"+content+"~~"}if(mark.type==="code"){return"`"+escapeMarkdownCodeText(content)+"`"}if(mark.type==="link"&&mark.attrs&&mark.attrs.href){return"["+content+"]("+String(mark.attrs.href)+")"}if(mark.type==="underline"){return"<u>"+content+"</u>"}if(mark.type==="subscript"){return"<sub>"+content+"</sub>"}if(mark.type==="superscript"){return"<sup>"+content+"</sup>"}if(mark.type==="textStyle"){var style=buildStyleString(mark.attrs||{});return style?'<span style="'+escapeAttribute(style)+'">'+content+"</span>":content}return content}function serializeMarkdownInlineNodes(nodes){var markdown="";for(var index=0;index<nodes.length;index++){var node=nodes[index];if(!node){continue}if(node.type==="text"){var hasCodeMark=false;var marks=node.marks||[];for(var markIndex=0;markIndex<marks.length;markIndex++){if(marks[markIndex].type==="code"){hasCodeMark=true;break}}var content=hasCodeMark?String(node.text||""):escapeMarkdownText(node.text||"");for(var activeIndex=0;activeIndex<marks.length;activeIndex++){content=wrapMarkdownMark(content,marks[activeIndex])}markdown+=content;continue}if(node.type==="hardBreak"){markdown+=" \n";continue}if(node.type==="mergeField"){var mergeFieldAttrs=node.attrs||{};markdown+="{{"+String(mergeFieldAttrs.name||mergeFieldAttrs.label||"")+"}}";continue}if(node.type==="footnoteReference"){var footnoteReferenceAttrs=node.attrs||{};markdown+="[^"+String(footnoteReferenceAttrs.number||1)+"]";continue}if(node.type==="image"){var imageAttrs=node.attrs||{};markdown+="+")";continue}if(node.type==="htmlInline"){markdown+=node.html||"";continue}if(isArray(node.content)){markdown+=serializeMarkdownInlineNodes(node.content);continue}markdown+=serializeNode(node,true)}return markdown}function normalizeMarkdownListItemText(value){return String(value||"").replace(/\s+/g," ").replace(/^\s+|\s+$/g,"")}function escapeMarkdownTableCellText(value){return String(value||"").replace(/\\/g,"\\\\").replace(/\|/g,"\\|").replace(/\r?\n/g,"<br>")}function isSimpleMarkdownTableCell(node){if(!node||node.type!=="tableCell"||node.attrs&&(node.attrs.colspan||node.attrs.rowspan)){return false}var content=node.content||[];if(content.length!==1||content[0].type!=="paragraph"){return false}var inlineNodes=content[0].content||[];for(var index=0;index<inlineNodes.length;index++){var inlineNode=inlineNodes[index];if(!inlineNode){continue}if(inlineNode.type==="hardBreak"){continue}if(inlineNode.type!=="text"&&inlineNode.type!=="image"&&inlineNode.type!=="htmlInline"){return false}}return true}function serializeMarkdownTable(node){var rows=node&&node.content?node.content:[];if(!rows.length){return""}var headerRow=rows[0];if(!headerRow||headerRow.type!=="tableRow"||!headerRow.content||!headerRow.content.length){return""}var columnCount=headerRow.content.length;var normalizedRows=[];for(var rowIndex=0;rowIndex<rows.length;rowIndex++){var row=rows[rowIndex];if(!row||row.type!=="tableRow"||!row.content||row.content.length!==columnCount){return""}var cells=[];for(var cellIndex=0;cellIndex<row.content.length;cellIndex++){var cell=row.content[cellIndex];if(!isSimpleMarkdownTableCell(cell)){return""}cells.push(escapeMarkdownTableCellText(serializeMarkdownInlineNodes(cell.content[0].content||[])))}normalizedRows.push(cells)}var headerCells=normalizedRows[0];var dividerCells=[];for(var dividerIndex=0;dividerIndex<columnCount;dividerIndex++){var headerCellNode=headerRow.content[dividerIndex];var align=headerCellNode&&headerCellNode.attrs&&headerCellNode.attrs.align?String(headerCellNode.attrs.align).toLowerCase():"";if(!align&&rows.length>1){var firstBodyCell=rows[1]&&rows[1].content?rows[1].content[dividerIndex]:null;align=firstBodyCell&&firstBodyCell.attrs&&firstBodyCell.attrs.align?String(firstBodyCell.attrs.align).toLowerCase():""}if(align==="left"){dividerCells.push(":---");continue}if(align==="center"){dividerCells.push(":---:");continue}if(align==="right"){dividerCells.push("---:");continue}dividerCells.push("---")}var parts=["| "+headerCells.join(" | ")+" |","| "+dividerCells.join(" | ")+" |"];for(var bodyIndex=1;bodyIndex<normalizedRows.length;bodyIndex++){parts.push("| "+normalizedRows[bodyIndex].join(" | ")+" |")}return parts.join("\n")}function indentMarkdown(value,indent){var text=String(value||"");if(!text){return""}return indent+text.replace(/\n/g,"\n"+indent)}function serializeMarkdownListItem(blocks,prefix){if(!blocks.length){return prefix.trim()}var firstBlock=blocks[0];var firstLine="";var trailingBlocks=[];if(firstBlock.type==="paragraph"){firstLine=prefix+normalizeMarkdownListItemText(serializeMarkdownInlineNodes(firstBlock.content||[]));trailingBlocks=blocks.slice(1)}else{firstLine=prefix.trim();trailingBlocks=blocks.slice()}if(!trailingBlocks.length){return firstLine}var nested=serializeMarkdownBlocks(trailingBlocks);if(!nested){return firstLine}return firstLine+"\n"+indentMarkdown(nested,new Array(prefix.length+1).join(" "))}function serializeMarkdownFootnoteItem(node){var attrs=node&&node.attrs?node.attrs:{};var number=String(attrs.number||1);var blocks=node&&node.content?node.content:[];if(!blocks.length){return"[^"+number+"]:"}var firstBlock=blocks[0];var rest=blocks.slice(1);var firstLine="[^"+number+"]:";if(firstBlock.type==="paragraph"){firstLine+=" "+normalizeMarkdownListItemText(serializeMarkdownInlineNodes(firstBlock.content||[]))}else{rest=blocks.slice()}if(!rest.length){return firstLine}var nested=serializeMarkdownBlocks(rest);if(!nested){return firstLine}return firstLine+"\n"+indentMarkdown(nested," ")}function serializeMarkdownBlocks(nodes){var parts=[];for(var index=0;index<nodes.length;index++){var node=nodes[index];if(!node){continue}if(node.type==="paragraph"){if(node.attrs&&normalizeTextAlignment(node.attrs.align,true)){parts.push(serializeNode(node,false));continue}parts.push(serializeMarkdownInlineNodes(node.content||[]));continue}if(node.type==="heading"){var level=node.attrs&&node.attrs.level?parseInt(node.attrs.level,10):1;if(!level||level<1){level=1}if(level>6){level=6}if(node.attrs&&normalizeTextAlignment(node.attrs.align,true)){parts.push(serializeNode(node,false));continue}parts.push(new Array(level+1).join("#")+" "+serializeMarkdownInlineNodes(node.content||[]));continue}if(node.type==="blockquote"){var quoted=serializeMarkdownBlocks(node.content||[]);parts.push(quoted?indentMarkdown(quoted,"> "):">");continue}if(node.type==="codeBlock"){var language=node.attrs&&(node.attrs.language||node.attrs.lang)?String(node.attrs.language||node.attrs.lang):"";parts.push("```"+language+"\n"+String(node.text||"")+"\n```");continue}if(node.type==="bulletList"||node.type==="orderedList"){var listParts=[];var start=node.type==="orderedList"&&node.attrs&&node.attrs.start!==void 0?parseInt(node.attrs.start,10):1;if(!isFinite(start))start=1;var listItems=node.content||[];if(node.type==="orderedList"&&(start<0||start+Math.max(0,listItems.length-1)>999999999)){parts.push(serializeNode(node,false));continue}for(var itemIndex=0;itemIndex<listItems.length;itemIndex++){var prefix=node.type==="orderedList"?start+itemIndex+". ":"- ";listParts.push(serializeMarkdownListItem(listItems[itemIndex].content||[],prefix))}parts.push(listParts.join("\n"));continue}if(node.type==="taskList"){var taskListParts=[];var taskItems=node.content||[];for(var taskIndex=0;taskIndex<taskItems.length;taskIndex++){var taskPrefix="- ["+(taskItems[taskIndex]&&taskItems[taskIndex].attrs&&taskItems[taskIndex].attrs.checked?"x":" ")+"] ";taskListParts.push(serializeMarkdownListItem(taskItems[taskIndex].content||[],taskPrefix))}parts.push(taskListParts.join("\n"));continue}if(node.type==="horizontalRule"){parts.push("---");continue}if(node.type==="pageBreak"){parts.push(serializeNode(node,false));continue}if(node.type==="tableOfContents"){var tableOfContentsAttrs=node.attrs||{};var tocItems=isArray(tableOfContentsAttrs.items)?tableOfContentsAttrs.items:[];var tocParts=[];var tocOrdered=tableOfContentsAttrs.ordered===true;if(tableOfContentsAttrs.includeTitle!==false&&tableOfContentsAttrs.title){tocParts.push("**"+escapeMarkdownText(String(tableOfContentsAttrs.title))+"**")}for(var tocIndex=0;tocIndex<tocItems.length;tocIndex++){var tocItem=tocItems[tocIndex]||{};var tocIndent=new Array(Math.max(0,(parseInt(tocItem.level,10)||1)-1)*3+1).join(" ");var marker=tocOrdered?"1.":"-";tocParts.push(tocIndent+marker+" ["+escapeMarkdownText(String(tocItem.text||""))+"](#"+String(tocItem.id||"")+")")}parts.push(tocParts.join("\n"));continue}if(node.type==="footnotes"){var footnoteParts=[];var footnoteItems=node.content||[];for(var footnoteIndex=0;footnoteIndex<footnoteItems.length;footnoteIndex++){footnoteParts.push(serializeMarkdownFootnoteItem(footnoteItems[footnoteIndex]))}parts.push(footnoteParts.join("\n"));continue}if(node.type==="image"){var attrs=node.attrs||{};parts.push("+")");continue}if(node.type==="table"){var markdownTable=serializeMarkdownTable(node);parts.push(markdownTable||serializeNode(node,false));continue}if(node.type==="htmlBlock"){parts.push(node.html||"");continue}parts.push(serializeNode(node,false))}return parts.join("\n\n").replace(/\n{3,}/g,"\n\n")}function toMarkdown2(value){var documentModel=createStructuredDocument2(value);return serializeMarkdownBlocks(documentModel.content||[]).replace(/^\s+|\s+$/g,"")}function renderHTML2(value){return serializeStructuredContent(value)}function installStructuredContentBridge2(){var RichTextEditor=ensureRichTextEditorConstructor();RichTextEditor.prototype.getJSON=function(){return createStructuredContent2(this)};RichTextEditor.prototype.setJSON=function(value){this.setHTMLCode(serializeStructuredContent(value));return this};RichTextEditor.fromMarkdown=fromMarkdown2;RichTextEditor.getDocumentPageSetup=getDocumentPageSetup2;RichTextEditor.getDocumentMetrics=getDocumentMetrics2;RichTextEditor.getDocumentOutline=getDocumentOutline3;RichTextEditor.getFootnotes=getFootnotes3;RichTextEditor.getTableOfContents=getTableOfContents3;RichTextEditor.repairAccessibilityIssue=repairAccessibilityIssue;RichTextEditor.renderHTML=renderHTML2;RichTextEditor.setDocumentPageSetup=setDocumentPageSetup2;RichTextEditor.syncTableOfContents=syncTableOfContents3;RichTextEditor.toMarkdown=toMarkdown2;RichTextEditor.auditAccessibility=auditAccessibility3;RichTextEditor.validateStructuredContent=validateStructuredContent2;RichTextEditor.prototype.getDocumentPageSetup=function(){return getDocumentPageSetup2(this.getJSON())};RichTextEditor.prototype.setDocumentPageSetup=function(pageSetup){this.setJSON(setDocumentPageSetup2(this.getJSON(),pageSetup));return this};RichTextEditor.prototype.getDocumentMetrics=function(){return getDocumentMetrics2(this.getJSON())};RichTextEditor.prototype.getFootnotes=function(){return getFootnotes3(this.getJSON())};RichTextEditor.prototype.getTextStatistics=function(){var selectionText="";try{selectionText=this.getSelectedText?this.getSelectedText()||"":""}catch(e){}return getTextStatistics2(this.getJSON(),{selectionText})};RichTextEditor.prototype.getSelectionStatistics=function(){var selectionText="";try{selectionText=this.getSelectedText?this.getSelectedText()||"":""}catch(e){}return getTextStatistics2(selectionText,{selectionText})};return RichTextEditor}function ensureStylesheet(href){return new Promise(function(resolve,reject){var existing=document.querySelector('link[data-rte-style="'+href+'"]');if(existing&&(existing.getAttribute("data-rte-loaded")==="true"||existing.sheet)){resolve();return}var link=existing||document.createElement("link");link.addEventListener("load",function(){link.setAttribute("data-rte-loaded","true");resolve()},{once:true});link.addEventListener("error",function(){if(link.parentNode)link.parentNode.removeChild(link);reject(new Error("Failed to load "+href))},{once:true});if(!existing){link.rel="stylesheet";link.href=href;link.setAttribute("data-rte-style",href);document.head.appendChild(link)}})}function loadScript(src){return new Promise(function(resolve,reject){var existing=document.querySelector('script[data-rte-script="'+src+'"]');if(existing){if(existing.getAttribute("data-rte-loaded")==="true"){resolve(existing);return}existing.addEventListener("load",function(){resolve(existing)},{once:true});existing.addEventListener("error",function(){reject(new Error("Failed to load "+src))},{once:true});return}var script=document.createElement("script");script.src=src;script.async=false;script.setAttribute("data-rte-script",src);script.onload=function(){script.setAttribute("data-rte-loaded","true");resolve(script)};script.onerror=function(){if(script.parentNode)script.parentNode.removeChild(script);reject(new Error("Failed to load "+src))};document.head.appendChild(script)})}function trimTrailingSlash(value){return value?value.replace(/\/+$/,""):""}function loadRichTextEditorAssets3(options){ensureBrowserEnvironment();var basePath=trimTrailingSlash(options&&options.basePath?options.basePath:"/richtexteditor");if(pendingLoadsByBasePath[basePath]){return pendingLoadsByBasePath[basePath]}if(window.RichTextEditor&&!failedLoadsByBasePath[basePath]){return Promise.resolve(installStructuredContentBridge2())}if(!pendingLoadsByBasePath[basePath]){var themeReady=ensureStylesheet(basePath+"/rte_theme_default.css");var scriptsReady=loadScript(basePath+"/rte.js").then(function(){if(window.RTE_DefaultConfig)window.RTE_DefaultConfig.url_base=basePath;return loadScript(basePath+"/plugins/all_plugins.js")});pendingLoadsByBasePath[basePath]=Promise.all([themeReady,scriptsReady]).then(function(){delete failedLoadsByBasePath[basePath];return installStructuredContentBridge2()}).catch(function(error){delete pendingLoadsByBasePath[basePath];failedLoadsByBasePath[basePath]=true;throw error})}return pendingLoadsByBasePath[basePath]}function createEditor2(element,config){installStructuredContentBridge2();return new window.RichTextEditor(element,config||{})}function getEditorValue2(editor,format){return format==="json"?editor.getJSON():editor.getHTMLCode()}function createChangeCoalescer2(emit,delay){var timer=null;var wrapped=function(){if(timer){clearTimeout(timer)}timer=setTimeout(function(){timer=null;emit()},delay)};wrapped.flush=function(){if(timer){clearTimeout(timer);timer=null;emit()}};wrapped.cancel=function(){if(timer){clearTimeout(timer);timer=null}};return wrapped}function setEditorValue2(editor,value,format){if(format==="json"){editor.setJSON(value);return}editor.setHTMLCode(serializeStructuredContent(value))}module.exports={createEditor:createEditor2,auditAccessibility:auditAccessibility3,auditLinks:auditLinks2,createStructuredDocument:createStructuredDocument2,createStructuredContent:createStructuredContent2,ensureRichTextEditorConstructor,fromMarkdown:fromMarkdown2,getDocumentPageSetup:getDocumentPageSetup2,getDocumentMetrics:getDocumentMetrics2,getDocumentOutline:getDocumentOutline3,getFootnotes:getFootnotes3,getInlineMarkdownShortcutAction,getMarkdownShortcutAction,getTableOfContents:getTableOfContents3,getEditorValue:getEditorValue2,getTextStatistics:getTextStatistics2,installStructuredContentBridge:installStructuredContentBridge2,loadRichTextEditorAssets:loadRichTextEditorAssets3,normalizeStructuredContent:normalizeStructuredContent2,parseStructuredContentHtml,repairAccessibilityIssue,renderHTML:renderHTML2,serializeStructuredContent,setDocumentPageSetup:setDocumentPageSetup2,setEditorValue:setEditorValue2,createChangeCoalescer:createChangeCoalescer2,syncTableOfContents:syncTableOfContents3,toMarkdown:toMarkdown2,validateStructuredContent:validateStructuredContent2}}});var shared=__toESM(require_shared());import{Component,EventEmitter,forwardRef,Input,Output,ViewChild}from"@angular/core";import{NG_VALUE_ACCESSOR}from"@angular/forms";import*as i0 from"@angular/core";var RichTextEditorAngularComponent=class _RichTextEditorAngularComponent{assetBasePath="/richtexteditor";autoload=true;config={};value;valueFormat="html";changeDelay=120;disabled=false;change=new EventEmitter;error=new EventEmitter;ready=new EventEmitter;hostRef;changeHandler=null;emitChange=null;lastEmitted;editor=null;destroyed=false;initializing=false;writingValue=false;lastKnownHtml=null;blurHandler=null;onModelChange=()=>{};onModelTouched=()=>{};async ngAfterViewInit(){if(this.destroyed||this.initializing||this.editor)return;this.initializing=true;try{if(this.autoload===false){shared.installStructuredContentBridge()}else{await shared.loadRichTextEditorAssets({basePath:this.assetBasePath})}if(this.destroyed)return;const editor=shared.createEditor(this.hostRef.nativeElement,this.config||{});if(this.destroyed){try{editor.destroy?.()}catch{}return}this.editor=editor;if(this.value!==void 0){this.syncEditor(this.value)}if(this.destroyed)return;this.applyDisabledState();this.lastKnownHtml=this.editor.getHTMLCode();this.emitChange=shared.createChangeCoalescer(()=>this.emitCurrentValue(),this.changeDelay==null?120:this.changeDelay);this.changeHandler=()=>{if(!this.writingValue&&!this.disabled)this.emitChange?.()};this.blurHandler=()=>{this.emitChange?.flush();this.emitCurrentValue();if(!this.destroyed)this.onModelTouched()};this.editor.attachEvent("change",this.changeHandler);this.editor.attachEvent("blur",this.blurHandler);this.ready.emit(this.editor)}catch(loadError){this.releaseEditor();if(!this.destroyed)this.error.emit(loadError)}finally{this.initializing=false}}retry(){return this.ngAfterViewInit()}ngOnChanges(changes){if(!this.editor){return}if(changes["value"]||changes["valueFormat"]){this.syncEditor(this.value)}if(changes["disabled"]||changes["config"])this.applyDisabledState()}writeValue(value){this.emitChange?.cancel();this.value=value==null?"":value;this.syncEditor(this.value)}registerOnChange(fn){this.onModelChange=fn}registerOnTouched(fn){this.onModelTouched=fn}setDisabledState(disabled){this.emitChange?.flush();this.disabled=disabled;this.applyDisabledState()}applyDisabledState(){this.editor?.setReadOnly?.(this.disabled||this.config?.["readOnly"]===true)}emitCurrentValue(){const editor=this.editor;if(!editor||this.writingValue)return;const nextValue=shared.getEditorValue(editor,this.valueFormat);const html=typeof nextValue==="string"?nextValue:nextValue.html??editor.getHTMLCode();if(html===this.lastKnownHtml)return;this.lastKnownHtml=html;this.lastEmitted=nextValue;this.onModelChange(nextValue);if(this.editor===editor)this.change.emit({editor,value:nextValue})}ngOnDestroy(){if(this.destroyed)return;this.destroyed=true;try{this.emitChange?.flush();if(this.changeHandler)this.emitCurrentValue()}finally{this.releaseEditor()}}releaseEditor(){this.emitChange?.cancel();this.emitChange=null;const editor=this.editor;const handler=this.changeHandler;const blurHandler=this.blurHandler;this.editor=null;this.changeHandler=null;this.blurHandler=null;if(editor&&handler){try{editor.detachEvent("change",handler)}catch{}}if(editor&&blurHandler){try{editor.detachEvent("blur",blurHandler)}catch{}}if(typeof editor?.destroy==="function"){try{editor.destroy()}catch{}}if(this.hostRef?.nativeElement)this.hostRef.nativeElement.innerHTML=""}focus(){if(this.editor){this.editor.focus()}}getEditor(){return this.editor}getHTMLCode(){return this.editor?this.editor.getHTMLCode():""}setHTMLCode(value){if(this.editor){this.editor.setHTMLCode(value||"")}}getJSON(){return this.editor?this.editor.getJSON():null}setJSON(value){if(this.editor){this.editor.setJSON(value)}}getTextStatistics(){if(!this.editor||typeof this.editor.getTextStatistics!=="function"){return null}return this.editor.getTextStatistics()}getSelectionStatistics(){if(!this.editor||typeof this.editor.getSelectionStatistics!=="function"){return null}return this.editor.getSelectionStatistics()}getDocumentMetrics(){if(!this.editor||typeof this.editor.getDocumentMetrics!=="function"){return null}return this.editor.getDocumentMetrics()}getDocumentPageSetup(){if(!this.editor||typeof this.editor.getDocumentPageSetup!=="function"){return null}return this.editor.getDocumentPageSetup()}setDocumentPageSetup(pageSetup){if(!this.editor||typeof this.editor.setDocumentPageSetup!=="function"){return null}this.editor.setDocumentPageSetup(pageSetup);return this}getDocumentOutline(){if(!this.editor){return[]}return shared.getDocumentOutline(this.editor.getJSON())}getFootnotes(){if(!this.editor){return[]}return shared.getFootnotes(this.editor.getJSON())}getTableOfContents(options){if(!this.editor){return[]}return shared.getTableOfContents(this.editor.getJSON(),options)}syncTableOfContents(options){if(!this.editor){return null}var documentModel=shared.syncTableOfContents(this.editor.getJSON(),options);this.editor.setJSON(documentModel);return documentModel}auditAccessibility(){if(!this.editor){return null}return shared.auditAccessibility(this.editor.getJSON())}getAiToolkit(){return this.getPluginNamespace("aiToolkit")}getDictation(){return this.getPluginNamespace("dictation")}getRevisionHistory(){return this.getPluginNamespace("revisionHistory")}getCollab(){return this.getPluginNamespace("collab")}getSlashCommands(){return this.getPluginNamespace("slashCommands")}getMentions(){return this.getPluginNamespace("mentions")}getComments(){return this.getPluginNamespace("comments")}getReviewLedger(){return this.getPluginNamespace("reviewLedger")}getPluginNamespace(name){if(!this.editor){return null}return this.editor[name]}syncEditor(nextValue){if(!this.editor||nextValue===void 0){return}var nextHtml=shared.normalizeStructuredContent(nextValue);if(this.editor.getHTMLCode()!==nextHtml){this.writingValue=true;try{shared.setEditorValue(this.editor,nextValue,this.valueFormat)}finally{this.writingValue=false}}if(this.editor)this.lastKnownHtml=this.editor.getHTMLCode()}static ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.31",ngImport:i0,type:_RichTextEditorAngularComponent,deps:[],target:i0.ɵɵFactoryTarget.Component});static ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.31",type:_RichTextEditorAngularComponent,isStandalone:true,selector:"rich-text-editor",inputs:{assetBasePath:"assetBasePath",autoload:"autoload",config:"config",value:"value",valueFormat:"valueFormat",changeDelay:"changeDelay",disabled:"disabled"},outputs:{change:"change",error:"error",ready:"ready"},providers:[{provide:NG_VALUE_ACCESSOR,useExisting:forwardRef(()=>_RichTextEditorAngularComponent),multi:true}],viewQueries:[{propertyName:"hostRef",first:true,predicate:["host"],descendants:true,static:true}],usesOnChanges:true,ngImport:i0,template:'<div #host class="rte-angular-host"></div>',isInline:true,styles:["\n :host {\n display: block;\n min-height: 360px;\n }\n\n .rte-angular-host {\n min-height: 360px;\n }\n "]})};i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.31",ngImport:i0,type:RichTextEditorAngularComponent,decorators:[{type:Component,args:[{selector:"rich-text-editor",standalone:true,providers:[{provide:NG_VALUE_ACCESSOR,useExisting:forwardRef(()=>RichTextEditorAngularComponent),multi:true}],template:'<div #host class="rte-angular-host"></div>',styles:["\n :host {\n display: block;\n min-height: 360px;\n }\n\n .rte-angular-host {\n min-height: 360px;\n }\n "]}]}],propDecorators:{assetBasePath:[{type:Input}],autoload:[{type:Input}],config:[{type:Input}],value:[{type:Input}],valueFormat:[{type:Input}],changeDelay:[{type:Input}],disabled:[{type:Input}],change:[{type:Output}],error:[{type:Output}],ready:[{type:Output}],hostRef:[{type:ViewChild,args:["host",{static:true}]}]}});var import_shared=__toESM(require_shared());var export_auditAccessibility=import_shared.auditAccessibility;var export_auditLinks=import_shared.auditLinks;var export_createStructuredContent=import_shared.createStructuredContent;var export_createStructuredDocument=import_shared.createStructuredDocument;var export_fromMarkdown=import_shared.fromMarkdown;var export_getDocumentMetrics=import_shared.getDocumentMetrics;var export_getDocumentOutline=import_shared.getDocumentOutline;var export_getDocumentPageSetup=import_shared.getDocumentPageSetup;var export_getFootnotes=import_shared.getFootnotes;var export_getTableOfContents=import_shared.getTableOfContents;var export_getTextStatistics=import_shared.getTextStatistics;var export_loadRichTextEditorAssets=import_shared.loadRichTextEditorAssets;var export_renderHTML=import_shared.renderHTML;var export_setDocumentPageSetup=import_shared.setDocumentPageSetup;var export_syncTableOfContents=import_shared.syncTableOfContents;var export_toMarkdown=import_shared.toMarkdown;var export_validateStructuredContent=import_shared.validateStructuredContent;export{RichTextEditorAngularComponent,export_auditAccessibility as auditAccessibility,export_auditLinks as auditLinks,export_createStructuredContent as createStructuredContent,export_createStructuredDocument as createStructuredDocument,export_fromMarkdown as fromMarkdown,export_getDocumentMetrics as getDocumentMetrics,export_getDocumentOutline as getDocumentOutline,export_getDocumentPageSetup as getDocumentPageSetup,export_getFootnotes as getFootnotes,export_getTableOfContents as getTableOfContents,export_getTextStatistics as getTextStatistics,export_loadRichTextEditorAssets as loadRichTextEditorAssets,export_renderHTML as renderHTML,export_setDocumentPageSetup as setDocumentPageSetup,export_syncTableOfContents as syncTableOfContents,export_toMarkdown as toMarkdown,export_validateStructuredContent as validateStructuredContent};
|
package/headless/index.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export interface HeadlessEditorOptions {
|
|
|
11
11
|
assetBasePath?: string;
|
|
12
12
|
/** Skip asset auto-loading (assets already present on the page). */
|
|
13
13
|
autoload?: boolean;
|
|
14
|
+
/** Cancel pending initialization without cancelling shared asset loads. Does not destroy a mounted controller. */
|
|
15
|
+
signal?: AbortSignal;
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
export type HeadlessFormat =
|
|
@@ -55,7 +57,7 @@ export interface HeadlessController {
|
|
|
55
57
|
destroy(): this;
|
|
56
58
|
}
|
|
57
59
|
|
|
58
|
-
/** Load assets
|
|
60
|
+
/** Load assets and mount a controller. Rejects with signal.reason (AbortError by default) if initialization is cancelled. */
|
|
59
61
|
export function createHeadlessEditor(
|
|
60
62
|
element: string | HTMLElement,
|
|
61
63
|
options?: HeadlessEditorOptions
|
package/headless/index.js
CHANGED
|
@@ -101,15 +101,18 @@ HeadlessController.prototype._wire = function () {
|
|
|
101
101
|
}, 16);
|
|
102
102
|
}
|
|
103
103
|
this._emitUpdate = emitUpdate;
|
|
104
|
+
this._editorListeners = [];
|
|
104
105
|
|
|
105
106
|
["selectionchange", "change", "focus", "blur"].forEach(function (evt) {
|
|
106
107
|
try {
|
|
107
|
-
|
|
108
|
+
var listener = function (a, b) {
|
|
108
109
|
self._emit(evt, a, b);
|
|
109
110
|
if (evt === "selectionchange" || evt === "change") {
|
|
110
111
|
emitUpdate();
|
|
111
112
|
}
|
|
112
|
-
}
|
|
113
|
+
};
|
|
114
|
+
self.editor.attachEvent(evt, listener);
|
|
115
|
+
self._editorListeners.push([evt, listener]);
|
|
113
116
|
} catch (e) { /* event surface differs by build */ }
|
|
114
117
|
});
|
|
115
118
|
|
|
@@ -129,6 +132,7 @@ HeadlessController.prototype._wire = function () {
|
|
|
129
132
|
};
|
|
130
133
|
|
|
131
134
|
HeadlessController.prototype.on = function (name, cb) {
|
|
135
|
+
if (this._destroyed) return this;
|
|
132
136
|
if (typeof cb === "function") {
|
|
133
137
|
(this._handlers[name] = this._handlers[name] || []).push(cb);
|
|
134
138
|
}
|
|
@@ -142,12 +146,13 @@ HeadlessController.prototype.off = function (name, cb) {
|
|
|
142
146
|
return this;
|
|
143
147
|
};
|
|
144
148
|
HeadlessController.prototype._emit = function (name) {
|
|
149
|
+
if (this._destroyed) return;
|
|
145
150
|
var list = this._handlers[name];
|
|
146
151
|
if (!list || !list.length) {
|
|
147
152
|
return;
|
|
148
153
|
}
|
|
149
154
|
var args = Array.prototype.slice.call(arguments, 1);
|
|
150
|
-
for (var i = 0; i < list.length; i++) {
|
|
155
|
+
for (var i = 0; i < list.length && !this._destroyed; i++) {
|
|
151
156
|
try { list[i].apply(this, args); } catch (e) { if (typeof console !== "undefined") { console.error(e); } }
|
|
152
157
|
}
|
|
153
158
|
};
|
|
@@ -208,8 +213,15 @@ HeadlessController.prototype.isEmpty = function () { return String(this.getText(
|
|
|
208
213
|
HeadlessController.prototype.focus = function () { try { this.editor.focus(); } catch (e) {} return this; };
|
|
209
214
|
|
|
210
215
|
HeadlessController.prototype.destroy = function () {
|
|
216
|
+
if (this._destroyed) return this;
|
|
211
217
|
this._destroyed = true;
|
|
212
218
|
this._handlers = {};
|
|
219
|
+
if (this._editorListeners) {
|
|
220
|
+
for (var ei = 0; ei < this._editorListeners.length; ei++) {
|
|
221
|
+
try { this.editor.detachEvent(this._editorListeners[ei][0], this._editorListeners[ei][1]); } catch (e) {}
|
|
222
|
+
}
|
|
223
|
+
this._editorListeners = null;
|
|
224
|
+
}
|
|
213
225
|
if (this._boundDoc && this._docListeners) {
|
|
214
226
|
for (var i = 0; i < this._docListeners.length; i++) {
|
|
215
227
|
try { this._boundDoc.removeEventListener(this._docListeners[i][0], this._docListeners[i][1], true); } catch (e) {}
|
|
@@ -217,18 +229,52 @@ HeadlessController.prototype.destroy = function () {
|
|
|
217
229
|
}
|
|
218
230
|
this._docListeners = null;
|
|
219
231
|
this._boundDoc = null;
|
|
220
|
-
try {
|
|
232
|
+
try {
|
|
233
|
+
if (typeof this.editor.destroy === "function") this.editor.destroy();
|
|
234
|
+
else if (typeof this.editor.prepareDestroy === "function") this.editor.prepareDestroy();
|
|
235
|
+
} catch (e) {}
|
|
221
236
|
return this;
|
|
222
237
|
};
|
|
223
238
|
|
|
224
|
-
|
|
239
|
+
function initializationAbortError(signal) {
|
|
240
|
+
if (signal && signal.reason !== undefined) return signal.reason;
|
|
241
|
+
if (typeof DOMException === "function") return new DOMException("Editor initialization was cancelled.", "AbortError");
|
|
242
|
+
var error = new Error("Editor initialization was cancelled.");
|
|
243
|
+
error.name = "AbortError";
|
|
244
|
+
return error;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function assertInitializationActive(signal) {
|
|
248
|
+
if (signal && signal.aborted) throw initializationAbortError(signal);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function waitForAssets(promise, signal) {
|
|
252
|
+
if (!signal) return Promise.resolve(promise);
|
|
253
|
+
return new Promise(function (resolve, reject) {
|
|
254
|
+
function cleanup() { signal.removeEventListener("abort", onAbort); }
|
|
255
|
+
function onAbort() { cleanup(); reject(initializationAbortError(signal)); }
|
|
256
|
+
if (signal.aborted) { onAbort(); return; }
|
|
257
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
258
|
+
Promise.resolve(promise).then(function (value) {
|
|
259
|
+
cleanup();
|
|
260
|
+
if (signal.aborted) reject(initializationAbortError(signal));
|
|
261
|
+
else resolve(value);
|
|
262
|
+
}, function (error) { cleanup(); reject(error); });
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Build a chrome-less editor and resolve to a controller. Cancellation applies
|
|
267
|
+
// to this initialization, never to the shared asset request or other editors.
|
|
225
268
|
function createHeadlessEditor(element, options) {
|
|
226
269
|
options = options || {};
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
270
|
+
return Promise.resolve().then(function () {
|
|
271
|
+
assertInitializationActive(options.signal);
|
|
272
|
+
var loadPromise = options.autoload === false
|
|
273
|
+
? Promise.resolve().then(function () { return shared.installStructuredContentBridge(); })
|
|
274
|
+
: shared.loadRichTextEditorAssets({ basePath: options.assetBasePath });
|
|
275
|
+
return waitForAssets(loadPromise, options.signal);
|
|
276
|
+
}).then(function () {
|
|
277
|
+
assertInitializationActive(options.signal);
|
|
232
278
|
if (typeof window === "undefined" || typeof window.RichTextEditor !== "function") {
|
|
233
279
|
throw new Error("rte-headless: RichTextEditor failed to load.");
|
|
234
280
|
}
|
|
@@ -254,13 +300,23 @@ function createHeadlessEditor(element, options) {
|
|
|
254
300
|
|
|
255
301
|
injectHeadlessCss();
|
|
256
302
|
var editor = shared.createEditor(el, cfg);
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
303
|
+
try {
|
|
304
|
+
assertInitializationActive(options.signal);
|
|
305
|
+
if (editor.container && editor.container.classList) {
|
|
306
|
+
editor.container.classList.add("rte-headless");
|
|
307
|
+
}
|
|
308
|
+
if (options.value != null && editor.setHTMLCode) {
|
|
309
|
+
editor.setHTMLCode(options.value);
|
|
310
|
+
}
|
|
311
|
+
assertInitializationActive(options.signal);
|
|
312
|
+
return new HeadlessController(editor, options);
|
|
313
|
+
} catch (error) {
|
|
314
|
+
try {
|
|
315
|
+
if (typeof editor.destroy === "function") editor.destroy();
|
|
316
|
+
else if (typeof editor.prepareDestroy === "function") editor.prepareDestroy();
|
|
317
|
+
} catch (cleanupError) { /* Preserve the original initialization error. */ }
|
|
318
|
+
throw error;
|
|
262
319
|
}
|
|
263
|
-
return new HeadlessController(editor, options);
|
|
264
320
|
});
|
|
265
321
|
}
|
|
266
322
|
|
package/index.d.ts
CHANGED
|
@@ -1056,7 +1056,20 @@ export interface RichTextEditorInstance {
|
|
|
1056
1056
|
* supported (`bold`, `italic`, `insertimage`, …) along with a number of
|
|
1057
1057
|
* editor-specific commands (`source`, `fullscreen`, `ai-ask`, …).
|
|
1058
1058
|
*/
|
|
1059
|
-
execCommand(command: RichTextEditorCommand, value?: unknown): unknown;
|
|
1059
|
+
execCommand(command: RichTextEditorCommand, value?: unknown): unknown;
|
|
1060
|
+
/** Record an undo checkpoint around a custom DOM edit. */
|
|
1061
|
+
recordUndo(): void;
|
|
1062
|
+
/** Set the selected ordered list's start (including zero). False outside a list. */
|
|
1063
|
+
setListStart(start: number): boolean;
|
|
1064
|
+
/** Continue from the nearest preceding sibling ordered list. False if unavailable. */
|
|
1065
|
+
continueListNumbering(): boolean;
|
|
1066
|
+
/** Toggle the selected table's caption. False outside a table. */
|
|
1067
|
+
toggleTableCaption(): boolean;
|
|
1068
|
+
/** Cancel pending uploads; late callbacks cannot change the document. */
|
|
1069
|
+
cancelUploads(reason?: string): number;
|
|
1070
|
+
getPendingUploadCount(): number;
|
|
1071
|
+
/** Upload embedded data-image URLs through the configured handler. */
|
|
1072
|
+
uploadEmbeddedImages(done?: (summary: { uploaded: number; failed: number; skipped: number; errors: string[] }) => void): void;
|
|
1060
1073
|
/** Returns true when the command is enabled in the current selection context. */
|
|
1061
1074
|
isCommandEnabled(command: RichTextEditorCommand): boolean;
|
|
1062
1075
|
/** Returns true when the command's effect is currently active (e.g. selection is bold). */
|
|
@@ -1330,9 +1343,6 @@ export interface RichTextEditorInstance {
|
|
|
1330
1343
|
|
|
1331
1344
|
toMarkdown?(): string;
|
|
1332
1345
|
fromMarkdown?(markdown: string): unknown;
|
|
1333
|
-
getMarkdown?(): string;
|
|
1334
|
-
copyAsMarkdown?(): unknown;
|
|
1335
|
-
downloadMarkdown?(filename?: string): unknown;
|
|
1336
1346
|
|
|
1337
1347
|
// ---- Export ----
|
|
1338
1348
|
|
|
@@ -1342,10 +1352,6 @@ export interface RichTextEditorInstance {
|
|
|
1342
1352
|
exportPdf?(options?: Record<string, unknown>): unknown;
|
|
1343
1353
|
getDocxBlob?(options?: Record<string, unknown>): Blob | Promise<Blob>;
|
|
1344
1354
|
exportToDocx?(filename?: string, options?: Record<string, unknown>): unknown;
|
|
1345
|
-
exportToWord?(options?: RichTextEditorWordExportOptions): unknown;
|
|
1346
|
-
downloadWord?(filename?: string, options?: RichTextEditorWordExportOptions): unknown;
|
|
1347
|
-
getWordDocument?(options?: RichTextEditorWordExportOptions): string;
|
|
1348
|
-
getEmailHTML?(options?: Record<string, unknown>): string;
|
|
1349
1355
|
|
|
1350
1356
|
// ---- Formatting marks and inline code ----
|
|
1351
1357
|
|
|
@@ -1384,8 +1390,6 @@ export interface RichTextEditorInstance {
|
|
|
1384
1390
|
announce?(text: string, options?: { assertive?: boolean }): unknown;
|
|
1385
1391
|
/** Moves focus to the first toolbar button (the documented Escape hatch target). */
|
|
1386
1392
|
focusToolbar?(): unknown;
|
|
1387
|
-
applyAccessibilityMetadata?(): unknown;
|
|
1388
|
-
applyDialogAccessibility?(dialog?: HTMLElement): unknown;
|
|
1389
1393
|
ensureStyleSheetLive?(doc: Document, style: HTMLStyleElement, id: string, cssText: string): unknown;
|
|
1390
1394
|
|
|
1391
1395
|
// ---- Toolbar / dialog building blocks ----
|
|
@@ -1402,49 +1406,6 @@ export interface RichTextEditorInstance {
|
|
|
1402
1406
|
|
|
1403
1407
|
insertTableOfContents?(): unknown;
|
|
1404
1408
|
toggleWatermark?(): unknown;
|
|
1405
|
-
readAloud?(): unknown;
|
|
1406
|
-
stopReadAloud?(): unknown;
|
|
1407
|
-
showShortcuts?(): unknown;
|
|
1408
|
-
openFindDialog?(): unknown;
|
|
1409
|
-
openImportDialog?(): unknown;
|
|
1410
|
-
importFile?(file: File, options?: RichTextEditorImportOptions): unknown;
|
|
1411
|
-
htmlFromImportText?(text: string, filename?: string): string;
|
|
1412
|
-
embedUrl?(url: string): unknown;
|
|
1413
|
-
renderMath?(): unknown;
|
|
1414
|
-
applyMathMarkup?(): unknown;
|
|
1415
|
-
renderDiagrams?(): unknown;
|
|
1416
|
-
getReadabilityStats?(): Record<string, unknown>;
|
|
1417
|
-
countSyllables?(word: string): number;
|
|
1418
|
-
getFootnotes?(): unknown[];
|
|
1419
|
-
getCharCount?(): number;
|
|
1420
|
-
getWordCount?(): number;
|
|
1421
|
-
getRemainingChars?(): number;
|
|
1422
|
-
isOverLimit?(): boolean;
|
|
1423
|
-
getCommentsOnly?(): boolean;
|
|
1424
|
-
setCommentsOnly?(on: boolean): unknown;
|
|
1425
|
-
setFocusMode?(on: boolean): unknown;
|
|
1426
|
-
toggleFocusMode?(): unknown;
|
|
1427
|
-
isFocusMode?(): boolean;
|
|
1428
|
-
setTypewriterMode?(on: boolean): unknown;
|
|
1429
|
-
toggleTypewriterMode?(): unknown;
|
|
1430
|
-
isTypewriterMode?(): boolean;
|
|
1431
|
-
saveLocalDraft?(): unknown;
|
|
1432
|
-
restoreLocalDraft?(): unknown;
|
|
1433
|
-
hasLocalDraft?(): boolean;
|
|
1434
|
-
getLocalDraft?(): unknown;
|
|
1435
|
-
clearLocalDraft?(): unknown;
|
|
1436
|
-
requestGhostText?(): unknown;
|
|
1437
|
-
acceptGhostText?(): unknown;
|
|
1438
|
-
dismissGhostText?(): unknown;
|
|
1439
|
-
hasGhostText?(): boolean;
|
|
1440
|
-
setGhostTextResolver?(resolver: (context: unknown) => unknown): unknown;
|
|
1441
|
-
foldAtCaret?(): unknown;
|
|
1442
|
-
toggleHeadingFold?(el?: HTMLElement): unknown;
|
|
1443
|
-
unfoldAll?(): unknown;
|
|
1444
|
-
findHighlight?(text: string): unknown;
|
|
1445
|
-
getSelectedControl?(): HTMLElement | null;
|
|
1446
|
-
getSelectedText?(): string;
|
|
1447
|
-
getDocument?(): Document;
|
|
1448
1409
|
|
|
1449
1410
|
// ---- Tables ----
|
|
1450
1411
|
|
|
@@ -1688,7 +1649,25 @@ export interface RichTextEditorInstance {
|
|
|
1688
1649
|
// Constructor
|
|
1689
1650
|
// =====================
|
|
1690
1651
|
|
|
1691
|
-
export
|
|
1652
|
+
export type RichTextEditorUploadCallback = (url: string | null, error?: string) => void;
|
|
1653
|
+
export type RichTextEditorUploadHandle = void | (() => void) | { abort(): void };
|
|
1654
|
+
export type RichTextEditorUploadHandler = (
|
|
1655
|
+
file: File,
|
|
1656
|
+
callback: RichTextEditorUploadCallback,
|
|
1657
|
+
index?: number,
|
|
1658
|
+
files?: File[]
|
|
1659
|
+
) => RichTextEditorUploadHandle;
|
|
1660
|
+
|
|
1661
|
+
export interface RichTextEditorConfig {
|
|
1662
|
+
/** Custom uploader; return an abort handle if requests can be cancelled. */
|
|
1663
|
+
file_upload_handler?: RichTextEditorUploadHandler;
|
|
1664
|
+
/** Scan embedded images and upload through the handler; default false. */
|
|
1665
|
+
automaticUploads?: boolean;
|
|
1666
|
+
automaticUploadsDelay?: number;
|
|
1667
|
+
/** Extra upload attempts after the first; default zero. */
|
|
1668
|
+
uploadRetryCount?: number;
|
|
1669
|
+
/** Initial retry delay in milliseconds; doubles on subsequent retries. */
|
|
1670
|
+
uploadRetryDelay?: number;
|
|
1692
1671
|
toolbar?: string | string[];
|
|
1693
1672
|
height?: string | number;
|
|
1694
1673
|
width?: string | number;
|