@vector-im/matrix-wysiwyg 2.38.4 → 2.39.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.
@@ -1,11 +1,11 @@
1
- (function(p,_){typeof exports=="object"&&typeof module<"u"?_(exports,require("react"),require("@vector-im/matrix-wysiwyg-wasm")):typeof define=="function"&&define.amd?define(["exports","react","@vector-im/matrix-wysiwyg-wasm"],_):(p=typeof globalThis<"u"?globalThis:p||self,_(p["Matrix wysiwyg"]={},p.React,p.matrixWysiwygWasm))})(this,function(p,_,k){"use strict";function C(e){return"inputType"in e}function O(e){return"clipboardData"in e}function M(e){return C(e)&&e.inputType==="insertSuggestion"}function ee(e){return C(e)&&e.inputType==="insertAtRoomSuggestion"}function te(e){return C(e)&&e.inputType=="insertLink"}function y(e,t,n,s){return s?s(e,t,n):e}function ne(e,t,n,s,r,i,l,m){var c;const o=y(e,{actions:s,content:()=>t.get_content_as_html(),messageContent:()=>t.get_content_as_message_html()},r,l);if(!o)return;if(O(o)){const a=((c=o.clipboardData)==null?void 0:c.getData("text/plain"))??"";return n(t.replace_text(a),"paste")}switch(o.inputType){case"insertAtRoomSuggestion":{if(i&&ee(o)){const{attributes:a}=o.data;return a.has("data-mention-type")&&a.delete("data-mention-type"),n(t.insert_at_room_mention_at_suggestion(i,a),"insert_at_room_mention_at_suggestion")}break}case"insertSuggestion":{if(i&&M(o)){const{text:a,url:d,attributes:f}=o.data;return f.has("data-mention-type")&&f.delete("data-mention-type"),n(t.insert_mention_at_suggestion(d,a,i,f),"insert_mention_at_suggestion")}break}case"insertCommand":{if(i&&o.data)return n(t.replace_text_suggestion(o.data,i,!0),"replace_text_suggestion");break}case"clear":return n(t.clear(),"clear");case"deleteContentBackward":return n(t.backspace(),"backspace");case"deleteWordBackward":return n(t.backspace_word(),"backspace_word");case"deleteSoftLineBackward":{const a=document.getSelection();return a&&(a.modify("extend","backward","lineboundary"),document.dispatchEvent(new CustomEvent("selectionchange"))),n(t.delete(),"backspace_line")}case"deleteContentForward":return n(t.delete(),"delete");case"deleteWordForward":return n(t.delete_word(),"delete_word");case"deleteByCut":return n(t.delete(),"delete");case"formatBold":return n(t.bold(),"bold");case"formatItalic":return n(t.italic(),"italic");case"formatStrikeThrough":return n(t.strike_through(),"strike_through");case"formatUnderline":return n(t.underline(),"underline");case"formatInlineCode":return n(t.inline_code(),"inline_code");case"historyRedo":return n(t.redo(),"redo");case"historyUndo":return n(t.undo(),"undo");case"insertCodeBlock":return n(t.code_block(),"code_block");case"insertQuote":return n(t.quote(),"quote");case"insertFromPaste":return;case"insertOrderedList":return n(t.ordered_list(),"ordered_list");case"insertLineBreak":case"insertParagraph":return u(t,i,m),n(t.enter(),"enter");case"insertReplacementText":{const a=r.innerHTML.slice(0,r.innerHTML.length-4);return n(t.set_content_from_html(a),"set_content_from_html",a)}case"insertCompositionText":case"insertFromComposition":case"insertText":if(o.data)return o.data==" "&&u(t,i,m),n(t.replace_text(o.data),"replace_text",o.data);break;case"insertUnorderedList":return n(t.unordered_list(),"unordered_list");case"insertLink":if(te(o)){const{text:a,url:d}=o.data;return n(a?t.set_link_with_text(d,a,new Map):t.set_link(d,new Map),"insertLink")}break;case"removeLinks":return n(t.remove_links(),"remove_links");case"formatIndent":return n(t.indent(),"indent");case"formatOutdent":return n(t.unindent(),"unindent");case"sendMessage":return null;default:return console.error(`Unknown input type: ${o.inputType}`),console.error(e),null}function u(a,d,f){if(f&&d&&d.key.key_type==3&&d.key.custom_key_value){const g=f.get(d.key.custom_key_value);g&&a.replace_text_suggestion(g,d,!1)}}}function se(e,t){e.innerHTML="";const n=t.document();let s=0;function r(l,m,o,u){const c=document.createElement(m);if(o&&(c.innerText=o.replace("​","~")),u)for(const[a,d]of u.entries()){const f=document.createAttribute(a);d!==null&&(f.value=d),c.setAttributeNode(f)}return l.appendChild(c),c}function i(l,m){const o=r(m,"ul");o.className=`group_${s%10}`;const u=l.children(t);let c;for(;c=u.next_child();){const a=c.node_type(t);if(a==="container"){const f=`dom_${s}`;s++;const g=r(o,"li");r(g,"input",null,new Map([["type","checkbox"],["id",f],["checked",null]])),r(g,"label",c.tag(t),new Map([["for",f]])),i(c,g)}else if(a==="line_break")r(o,"li","br");else if(a==="text"){const d=r(o,"li");r(d,"span",'"',new Map([["class","quote"]])),r(d,"span",`${c.text(t)}`),r(d,"span",'"',new Map([["class","quote"]]))}else if(a==="mention"){const d=r(o,"li");r(d,"span",'"Mention - ',new Map([["class","quote"]])),r(d,"span",`${c.text(t)}`),r(d,"span",'"',new Map([["class","quote"]]))}else console.error(`Unknown node type: ${a}`)}}i(n,e)}function re(e,t,n){const s=document.createRange();let r=A(e,t),i=A(e,n);if(r.node&&i.node){const m=r.node.compareDocumentPosition(i.node)&Node.DOCUMENT_POSITION_PRECEDING,o=r.node===i.node&&i.offset<r.offset;if((m||o)&&([r,i]=[i,r],!r.node||!i.node))throw new Error;s.setStart(r.node,r.offset),s.setEnd(i.node,i.offset)}else s.selectNodeContents(e),s.collapse();const l=document.getSelection();l&&(l.removeAllRanges(),l.addRange(s))}function R(e,t,n,s){e.innerHTML=t+"<br />",re(e,n,s)}function A(e,t,n){var l,m,o,u,c,a;const s=e.nodeName==="LI"&&!e.hasChildNodes(),r=e.nodeType===Node.TEXT_NODE;if(r&&((l=e.parentElement)==null?void 0:l.hasAttribute("data-mention-type"))){const f=b(e)?1:0,g=t-f;return g<=1?g===0?e.previousSibling?{node:e.previousSibling,offset:T(e.previousSibling,1/0)}:{node:((m=e.parentNode)==null?void 0:m.parentNode)??null,offset:0}:{node:null,offset:0}:{node:null,offset:t-f-1}}else if(r){const f=b(e)?1:0;return F(e)?t===0?{node:e,offset:t}:{node:null,offset:t-f}:t<=(((o=e.textContent)==null?void 0:o.length)||0)?{node:e,offset:t}:{node:null,offset:t-(((u=e.textContent)==null?void 0:u.length)||0)-f}}else{if(s)return t<=(((c=e.textContent)==null?void 0:c.length)||0)?{node:e,offset:t}:{node:null,offset:t-(((a=e.textContent)==null?void 0:a.length)||0)};if(e.nodeName==="BR")return t===0?{node:e,offset:0}:{node:null,offset:t-1};if(oe(e)&&t===0)return{node:e,offset:t};for(const d of e.childNodes){const f=A(d,t);if(f.node)return{node:f.node,offset:f.offset};t=f.offset}return{node:null,offset:t}}}function B(e,t){var i;const n=e.childNodes.length===1&&((i=e.firstChild)==null?void 0:i.nodeName)==="BR";if(!t||n)return[0,0];const s=t.anchorNode&&$(e,t.anchorNode,t.anchorOffset)||0,r=t.focusNode&&$(e,t.focusNode,t.focusOffset)||0;return[s,r]}function T(e,t){var n;if(e.nodeType===Node.TEXT_NODE){const r=b(e)?1:0;return(((n=e.textContent)==null?void 0:n.length)??0)+r}else{if(e.nodeName==="BR")return t===0?0:1;{let s=0,r=0;for(const i of e.childNodes){if(r===t)break;s+=T(i,-1),r++}return s}}}function D(e,t,n){var i,l,m;const s=e.nodeType===Node.TEXT_NODE,r=(i=e.parentElement)==null?void 0:i.hasAttribute("data-mention-type");if(e===t)return s?n>(((l=e.textContent)==null?void 0:l.length)??0)?{found:!1,offset:0}:r?{found:!0,offset:n===0?0:1}:{found:!0,offset:n}:{found:!0,offset:T(e,n)};if(s){const u=b(e)?1:0;return F(e)?{found:!1,offset:u}:r?{found:!1,offset:1+u}:{found:!1,offset:(((m=e.textContent)==null?void 0:m.length)??0)+u}}else{if(e.nodeName==="BR")return{found:!1,offset:1};{let o=0;for(const u of e.childNodes){const c=D(u,t,n);if(c.found)return{found:!0,offset:o+c.offset};o+=c.offset}return{found:!1,offset:o}}}}function $(e,t,n){if(t===e&&n===e.childNodes.length-1)return T(e,-1)-1;const s=new Range;s.setStart(e,0),s.setEnd(e,e.childNodes.length);const r=s.comparePoint(t,0);if(r===-1)return 0;if(r===1)return T(e,-1)-1;const i=D(e,t,n);return i.found?i.offset:-1}function b(e){if(e===null)return!1;let t=e;const n=U(t.parentNode);for(;t;){const s=t.nextSibling;if(s&&U(s)||n&&s&&!H(s)||s&&s.nodeName==="BR")break;if(H(t))return!0;t=t.parentNode}return!1}const w=["EM","U","STRONG","DEL","CODE","A"],ie=["OL","UL","LI","PRE","BLOCKQUOTE","P"];function U(e){return e===null?!1:w.includes(e.nodeName||"")}function H(e){return ie.includes(e.nodeName||"")}function oe(e){var t;return w.includes(e.nodeName)&&((t=e.textContent)==null?void 0:t.length)===0}function F(e){var r,i;const t=((r=e.parentNode)==null?void 0:r.childNodes.length)===1,n=((i=e.parentNode)==null?void 0:i.nodeName)==="P",s=e.textContent===" ";return n&&t&&s}const ae=["bold","italic","strikeThrough","underline","undo","redo","orderedList","unorderedList","inlineCode","clear","link","codeBlock","quote","indent","unindent"],ue=["@","#","/",""];function ce(){return ae.reduce((e,t)=>(e[t]="enabled",e),{})}function q(e){const t={};for(const[n,s]of e)t[n.substring(0,1).toLowerCase()+n.substring(1)]=s.toLowerCase();return t}function le(){const e=navigator.userAgent.toLowerCase();return e.includes("iphone")||e.includes("ipad")?"iOS":e.includes("android")?"Android":e.includes("win")?"Windows":e.includes("mac")?"macOS":e.includes("linux")?"Linux":null}function K(e,t,n,s){n==null||n.preventDefault(),n==null||n.stopPropagation(),e.dispatchEvent(new CustomEvent("wysiwygInput",{detail:{blockType:t,data:s}}))}function fe(e,t,n,s,r){if(e.shiftKey&&e.altKey)switch(e.key){case"5":return"formatStrikeThrough"}const i=le();if((i==="Windows"||i==="Linux")&&e.ctrlKey)switch(e.key){case"Backspace":return"deleteWordBackward"}if(e.ctrlKey||e.metaKey)switch(e.key){case"b":return"formatBold";case"i":return"formatItalic";case"u":return"formatUnderline";case"e":return"formatInlineCode";case"y":return"historyRedo";case"z":return"historyUndo";case"Z":return"historyRedo";case"Enter":return"sendMessage";case"Backspace":return"deleteSoftLineBackward"}return y(e,{actions:n,content:()=>t.get_content_as_html(),messageContent:()=>t.get_content_as_message_html()},s,r),null}function de(e,t,n,s,r){const i=fe(e,n,s,t,r);i&&K(t,i,e)}function G(e){return q(e.action_states)}function me(e,t,n,s,r,i,l,m,o){var c;const u=ne(e,n,r.traceAction,i,t,l,m,o);if(u){const a=u.text_update().replace_all;a&&(R(t,a.replacement_html,a.start_utf16_codeunit,a.end_utf16_codeunit),r.setEditorHtml(a.replacement_html)),t.focus(),s&&se(s,n);const d=u.menu_state().update(),f=(c=u.menu_action().suggestion())==null?void 0:c.suggestion_pattern,g=d?G(d):null,S=f||null;return{content:a==null?void 0:a.replacement_html,actionStates:g,suggestion:S}}}function _e(e,t,{traceAction:n,getSelectionAccordingToActions:s}){const[r,i]=B(e,document.getSelection()),l=t.selection_start(),m=t.selection_end(),[o,u]=s();if(r===l&&r===o&&i===m&&i===u||r===m&&r===u&&i===l&&i===o)return;const c=t.select(r,i);n(null,"select",r,i);const a=c.menu_state().update();if(a)return G(a)}function he(e,t,n,s,r,i,l,m){const[o,u]=_.useState({content:null,actionStates:ce(),suggestion:null}),c=_.useRef(void 0),[a,d]=_.useState(!1);return _.useEffect(()=>{n&&(u({content:n.get_content_as_html(),actionStates:q(n.action_states()),suggestion:null}),c.current=n.get_content_as_plain_text())},[n]),_.useEffect(()=>{const f=e.current;if(!n||!f)return;const g=h=>{try{const E=me(h,f,n,t.current,s,r,o.suggestion,l,m);E&&(u(L=>{const Ue=E.content!==void 0?E.content:L.content,He=E.actionStates||L.actionStates,Fe=E.suggestion;return{content:Ue,actionStates:He,suggestion:Fe}}),c.current=n.get_content_as_plain_text())}catch{i(c.current)}},S=h=>{C(h)&&!h.isComposing&&g(h)};f.addEventListener("input",S);const N=h=>{const E=C(h)&&h.inputType==="insertFromPaste"&&h.dataTransfer!==null;(O(h)||E)&&(h.preventDefault(),h.stopPropagation(),g(h))};f.addEventListener("paste",N);const W=h=>{g({inputType:h.detail.blockType,data:h.detail.data})};f.addEventListener("wysiwygInput",W);const Y=h=>{de(h,f,n,r,l)};f.addEventListener("keydown",Y);const J=()=>{try{const h=_e(f,n,s);h&&u(({content:E,suggestion:L})=>({content:E,actionStates:h,suggestion:L})),c.current=n.get_content_as_plain_text()}catch{i(c.current)}};document.addEventListener("selectionchange",J);const Z=h=>{if(!(C(h)&&h.isComposing))return N(h)};f.addEventListener("beforeinput",Z);const P=h=>{const E=new InputEvent("input",{data:h.data,inputType:"insertCompositionText"});S(E)};return f.addEventListener("compositionend",P),d(!0),()=>{d(!1),f.removeEventListener("input",S),f.removeEventListener("paste",N),f.removeEventListener("wysiwygInput",W),f.removeEventListener("keydown",Y),f.removeEventListener("beforeinput",Z),f.removeEventListener("compositionend",P),document.removeEventListener("selectionchange",J)}},[e,m,n,r,t,s,l,i,c,o.suggestion]),{areListenersReady:a,...o}}function ge(e,t){return _.useMemo(()=>{const s=(r,i)=>{e.current&&K(e.current,r,void 0,i)};return{bold:()=>s("formatBold"),italic:()=>s("formatItalic"),strikeThrough:()=>s("formatStrikeThrough"),underline:()=>s("formatUnderline"),undo:()=>s("historyUndo"),redo:()=>s("historyRedo"),orderedList:()=>s("insertOrderedList"),unorderedList:()=>s("insertUnorderedList"),inlineCode:()=>s("formatInlineCode"),clear:()=>s("clear"),insertText:r=>s("insertText",r),link:(r,i)=>s("insertLink",{url:r,text:i}),removeLinks:()=>s("removeLinks"),getLink:()=>{var r,i;return((i=(r=t==null?void 0:t.get_link_action())==null?void 0:r.edit_link)==null?void 0:i.url)||""},codeBlock:()=>s("insertCodeBlock"),quote:()=>s("insertQuote"),indent:()=>s("formatIndent"),unindent:()=>s("formatOutdent"),mention:(r,i,l)=>s("insertSuggestion",{url:r,text:i,attributes:l}),command:r=>s("insertCommand",r),mentionAtRoom:r=>s("insertAtRoomSuggestion",{attributes:r})}},[e,t])}let j=!1,I=!1;async function v(){if(I)return Promise.resolve();if(j)return new Promise(e=>{function t(){I&&e(),setTimeout(t,200)}t()});j=!0,await k.initAsync(),I=!0}function pe(e,t,n){const[s,r]=_.useState(null),i=_.useCallback(async l=>{await v();let m;if(l)try{const o=k.new_composer_model_from_html(l,0,l.length);if(m=o,e.current){const u=o.get_content_as_html();R(e.current,u,0,u.length)}}catch{m=k.new_composer_model()}else m=k.new_composer_model();r(m)},[r,e]);return _.useEffect(()=>{s&&n&&s.set_custom_suggestion_patterns(n)},[s,n]),_.useEffect(()=>{e.current&&i(t)},[e,i,t]),{composerModel:s,onError:i}}function V(e){return e[0]==="select"}function Ee(e,t,n){return(s,r,i,l)=>(!e||!n||(console.debug(l!==void 0?`composer_model.${r}(${i}, ${l})`:i!==void 0?`composer_model.${r}(${i})`:`composer_model.${r}()`),t.push([r,i,l]),X(e,n,s,t)),s)}function ke(e){return()=>{for(let t=e.length-1;t>=0;t--){const n=e[t];if(V(n))return[n[1],n[2]]}return[-1,-1]}}function X(e,t,n,s){n&&n.text_update(),e.innerText=Ce(s,t.to_example_format()),e.scrollTo(0,e.scrollHeight-e.clientHeight)}function Ce(e,t){let n="";function s(u,c,a){u==="select"?n+=`model.select(Location::from(${c}), Location::from(${a}));
2
- `:a!==void 0?n+=`model.${u}(${c??""}, ${a});
3
- `:u==="replace_text"?n+=`model.${u}("${c??""}");
4
- `:u==="send"?n+=`// Send: ${c??""}
5
- `:n+=`model.${u}(${c??""});
6
- `}function r(){const u=Te(m,o[0],o[1]);n+=`let mut model = cm("${u}");
7
- `}let i=null,l=!0,m="",o=[0,0];for(const u of e){const[c,a,d]=u;if(l)c==="replace_text"?m+=Se(a):V(u)?o=[u[1],u[2]]:(l=!1,r(),s(c,a,d));else if(i==="select"&&c==="select"){const f=n.lastIndexOf(`
8
- `,n.length-2);f>-1&&(n=n.substring(0,f)+`
9
- `,s(c,a,d))}else s(c,a,d);i=c}return l&&r(),n+=`assert_eq!(tx(&model), "${t}");
10
- `,n}function Te(e,t,n){const s=k.new_composer_model_from_html(e,-1,-1);return s.select(t,n),s.to_example_format()}function xe(e,t,n,s){const[r,i]=B(e,document.getSelection()),l=[["replace_text",s],["select",r,i]];return X(t,n,null,l),l}function Se(e){if(!e)return"";const t=document.createElement("p");return t.appendChild(document.createTextNode(e.toString())),t.innerHTML}function Le(e,t){const n=_.useRef(null),[s,r]=_.useState([]),[i,l]=_.useState(""),m=_.useCallback(d=>{n.current&&l(d)},[n]),o=_.useMemo(()=>Ee(n.current,s,t),[n,s,t]),u=_.useMemo(()=>ke(s),[s]),c=_.useCallback(()=>e.current&&n.current&&t&&r(xe(e.current,n.current,t,i)),[e,n,t,i]),a=_.useMemo(()=>({traceAction:o,getSelectionAccordingToActions:u,onResetTestCase:c,setEditorHtml:m}),[o,u,c,m]);return{testRef:n,utilities:a}}function be(e){return ue[e.key.key_type]||""}function ve(e){switch(e.key.key_type){case 0:case 1:return"mention";case 2:return"command";case 3:return"custom";default:return"unknown"}}function Ne(e){return e===null?e:{text:e.text,keyChar:be(e),type:ve(e)}}const x=`
11
- `,Ae=e=>{let t=e;return t.endsWith(x)&&(t=t.slice(0,-1)),t.replaceAll(/\\/g,"")};async function Ie(e,t){if(e.length===0)return"";await v();const n=k.new_composer_model();n.set_content_from_html(e);const s=t?n.get_content_as_message_markdown():n.get_content_as_markdown();return Ae(s)}async function Oe(e,t){if(e.length===0)return"";await v();const n=ye(e),s=k.new_composer_model();return s.set_content_from_markdown(n),t?s.get_content_as_message_html():s.get_content_as_html()}function ye(e){var i,l,m;const{body:t}=new DOMParser().parseFromString(e,"text/html"),n=document.createNodeIterator(t,void 0,Be);let s=n.nextNode(),r="";for(;s!==null;){const o=s.nodeName==="#text",u=s.nodeName==="A",c=s.nodeName==="DIV"&&s.childNodes.length===1&&((i=s.firstChild)==null?void 0:i.nodeName)==="BR",a=!Re.includes(s.nodeName);if(c)r+=x;else if(o){let d=s.textContent;z(s)&&(d+=x),r+=d}else if(u){let d=((m=(l=s.firstChild)==null?void 0:l.parentElement)==null?void 0:m.outerHTML)??"";z(s)&&(d+=x),r+=d}else a&&console.debug(`Converting unexpected node type ${s.nodeName}`);s=n.nextNode()}return r.endsWith(x.repeat(2))&&(r=r.slice(0,-1)),r}const Re=["#text","BR","A","DIV","BODY"];function z(e){var n;const t=e.nextSibling||((n=e.parentElement)==null?void 0:n.nextSibling);return(t==null?void 0:t.nodeName)==="DIV"}function Be(e){var t;return e.nodeName==="#text"&&((t=e.parentElement)!=null&&t.hasAttribute("data-mention-type"))?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}function De(e,t=!1){_.useEffect(()=>{if(t){const n=setTimeout(()=>{var s;return(s=e.current)==null?void 0:s.focus()},200);return()=>clearTimeout(n)}},[e,t])}function $e(){const e=_.useRef(null);return _.useEffect(()=>{var t,n;(t=e.current)!=null&&t.childElementCount||(n=e.current)==null||n.appendChild(document.createElement("br"))},[e]),e}function Q(e){const t=e==null?void 0:e.keys();return t?Array.from(t):[]}function we(e){const t=$e(),n=_.useRef(null),[s,r]=_.useState(Q(e==null?void 0:e.emojiSuggestions));_.useEffect(()=>{r(Q(e==null?void 0:e.emojiSuggestions))},[e==null?void 0:e.emojiSuggestions]);const{composerModel:i,onError:l}=pe(t,e==null?void 0:e.initialContent,s),{testRef:m,utilities:o}=Le(t,i),u=ge(t,i),{content:c,actionStates:a,areListenersReady:d,suggestion:f}=he(t,n,i,o,u,l,e==null?void 0:e.inputEventProcessor,e==null?void 0:e.emojiSuggestions);De(t,e==null?void 0:e.isAutoFocusEnabled);const g=_.useMemo(()=>Ne(f),[f]);return{ref:t,isWysiwygReady:d,wysiwyg:u,content:c,actionStates:a,debug:{modelRef:n,testRef:m,resetTestCase:o.onResetTestCase,traceAction:o.traceAction},suggestion:g,messageContent:(i==null?void 0:i.get_content_as_message_html())??null}}p.initOnce=v,p.plainToRich=Oe,p.richToPlain=Ie,p.useWysiwyg=we,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})});
1
+ (function(p,_){typeof exports=="object"&&typeof module<"u"?_(exports,require("react"),require("@vector-im/matrix-wysiwyg-wasm")):typeof define=="function"&&define.amd?define(["exports","react","@vector-im/matrix-wysiwyg-wasm"],_):(p=typeof globalThis<"u"?globalThis:p||self,_(p["Matrix wysiwyg"]={},p.React,p.matrixWysiwygWasm))})(this,function(p,_,y){"use strict";function k(e){return"inputType"in e}function A(e){return"clipboardData"in e}function M(e){return k(e)&&e.inputType==="insertSuggestion"}function ee(e){return k(e)&&e.inputType==="insertAtRoomSuggestion"}function te(e){return k(e)&&e.inputType=="insertLink"}function I(e,t,n,s){return s?s(e,t,n):e}function ne(e,t,n,s,r,o,u,l){const a=I(e,{actions:s,content:()=>t.get_content_as_html(),messageContent:()=>t.get_content_as_message_html()},r,u);if(!a)return;if(A(a)){const i=a.clipboardData,f=i?.getData("text/html"),m=i?.getData("text/plain")??"";if(f&&f!==m){const d=i?.types.includes("application/x-vnd.google-docs-document-slice-clip+wrapped")?y.HtmlSource.GoogleDoc:y.HtmlSource.UnknownExternal;return n(t.replace_html(f,d),"replace_html_paste")}return n(t.replace_text(m),"replace_text_paste")}switch(a.inputType){case"insertAtRoomSuggestion":{if(o&&ee(a)){const{attributes:i}=a.data;return i.has("data-mention-type")&&i.delete("data-mention-type"),n(t.insert_at_room_mention_at_suggestion(o,i),"insert_at_room_mention_at_suggestion")}break}case"insertSuggestion":{if(o&&M(a)){const{text:i,url:f,attributes:m}=a.data;return m.has("data-mention-type")&&m.delete("data-mention-type"),n(t.insert_mention_at_suggestion(f,i,o,m),"insert_mention_at_suggestion")}break}case"insertCommand":{if(o&&a.data)return n(t.replace_text_suggestion(a.data,o,!0),"replace_text_suggestion");break}case"clear":return n(t.clear(),"clear");case"deleteContentBackward":return n(t.backspace(),"backspace");case"deleteWordBackward":return n(t.backspace_word(),"backspace_word");case"deleteSoftLineBackward":{const i=document.getSelection();return i&&(i.modify("extend","backward","lineboundary"),document.dispatchEvent(new CustomEvent("selectionchange"))),n(t.delete(),"backspace_line")}case"deleteContentForward":return n(t.delete(),"delete");case"deleteWordForward":return n(t.delete_word(),"delete_word");case"deleteByCut":return n(t.delete(),"delete");case"formatBold":return n(t.bold(),"bold");case"formatItalic":return n(t.italic(),"italic");case"formatStrikeThrough":return n(t.strike_through(),"strike_through");case"formatUnderline":return n(t.underline(),"underline");case"formatInlineCode":return n(t.inline_code(),"inline_code");case"historyRedo":return n(t.redo(),"redo");case"historyUndo":return n(t.undo(),"undo");case"insertCodeBlock":return n(t.code_block(),"code_block");case"insertQuote":return n(t.quote(),"quote");case"insertFromPaste":return;case"insertOrderedList":return n(t.ordered_list(),"ordered_list");case"insertLineBreak":case"insertParagraph":return c(t,o,l),n(t.enter(),"enter");case"insertReplacementText":{const i=r.innerHTML.slice(0,r.innerHTML.length-4);return n(t.set_content_from_html(i),"set_content_from_html",i)}case"insertCompositionText":case"insertFromComposition":case"insertText":if(a.data)return a.data==" "&&c(t,o,l),n(t.replace_text(a.data),"replace_text",a.data);break;case"insertUnorderedList":return n(t.unordered_list(),"unordered_list");case"insertLink":if(te(a)){const{text:i,url:f}=a.data;return n(i?t.set_link_with_text(f,i,new Map):t.set_link(f,new Map),"insertLink")}break;case"removeLinks":return n(t.remove_links(),"remove_links");case"formatIndent":return n(t.indent(),"indent");case"formatOutdent":return n(t.unindent(),"unindent");case"sendMessage":return null;default:return console.error(`Unknown input type: ${a.inputType}`),console.error(e),null}function c(i,f,m){if(m&&f&&f.key.key_type==3&&f.key.custom_key_value){const d=m.get(f.key.custom_key_value);d&&i.replace_text_suggestion(d,f,!1)}}}function se(e,t){e.innerHTML="";const n=t.document();let s=0;function r(u,l,a,c){const i=document.createElement(l);if(a&&(i.innerText=a.replace("​","~")),c)for(const[f,m]of c.entries()){const d=document.createAttribute(f);m!==null&&(d.value=m),i.setAttributeNode(d)}return u.appendChild(i),i}function o(u,l){const a=r(l,"ul");a.className=`group_${s%10}`;const c=u.children(t);let i;for(;i=c.next_child();){const f=i.node_type(t);if(f==="container"){const d=`dom_${s}`;s++;const h=r(a,"li");r(h,"input",null,new Map([["type","checkbox"],["id",d],["checked",null]])),r(h,"label",i.tag(t),new Map([["for",d]])),o(i,h)}else if(f==="line_break")r(a,"li","br");else if(f==="text"){const m=r(a,"li");r(m,"span",'"',new Map([["class","quote"]])),r(m,"span",`${i.text(t)}`),r(m,"span",'"',new Map([["class","quote"]]))}else if(f==="mention"){const m=r(a,"li");r(m,"span",'"Mention - ',new Map([["class","quote"]])),r(m,"span",`${i.text(t)}`),r(m,"span",'"',new Map([["class","quote"]]))}else console.error(`Unknown node type: ${f}`)}}o(n,e)}function re(e,t,n){const s=document.createRange();let r=L(e,t),o=L(e,n);if(r.node&&o.node){const l=r.node.compareDocumentPosition(o.node)&Node.DOCUMENT_POSITION_PRECEDING,a=r.node===o.node&&o.offset<r.offset;if((l||a)&&([r,o]=[o,r],!r.node||!o.node))throw new Error;s.setStart(r.node,r.offset),s.setEnd(o.node,o.offset)}else s.selectNodeContents(e),s.collapse();const u=document.getSelection();u&&(u.removeAllRanges(),u.addRange(s))}function O(e,t,n,s){e.innerHTML=t+"<br />",re(e,n,s)}function L(e,t,n){const s=e.nodeName==="LI"&&!e.hasChildNodes(),r=e.nodeType===Node.TEXT_NODE;if(r&&e.parentElement?.hasAttribute("data-mention-type")){const l=x(e)?1:0,a=t-l;return a<=1?a===0?e.previousSibling?{node:e.previousSibling,offset:S(e.previousSibling,1/0)}:{node:e.parentNode?.parentNode??null,offset:0}:{node:null,offset:0}:{node:null,offset:t-l-1}}else if(r){const l=x(e)?1:0;return P(e)?t===0?{node:e,offset:t}:{node:null,offset:t-l}:t<=(e.textContent?.length||0)?{node:e,offset:t}:{node:null,offset:t-(e.textContent?.length||0)-l}}else{if(s)return t<=(e.textContent?.length||0)?{node:e,offset:t}:{node:null,offset:t-(e.textContent?.length||0)};if(e.nodeName==="BR")return t===0?{node:e,offset:0}:{node:null,offset:t-1};if(ie(e)&&t===0)return{node:e,offset:t};for(const u of e.childNodes){const l=L(u,t);if(l.node)return{node:l.node,offset:l.offset};t=l.offset}return{node:null,offset:t}}}function R(e,t){const n=e.childNodes.length===1&&e.firstChild?.nodeName==="BR";if(!t||n)return[0,0];const s=t.anchorNode&&D(e,t.anchorNode,t.anchorOffset)||0,r=t.focusNode&&D(e,t.focusNode,t.focusOffset)||0;return[s,r]}function S(e,t){if(e.nodeType===Node.TEXT_NODE){const s=x(e)?1:0;return(e.textContent?.length??0)+s}else{if(e.nodeName==="BR")return t===0?0:1;{let n=0,s=0;for(const r of e.childNodes){if(s===t)break;n+=S(r,-1),s++}return n}}}function B(e,t,n){const s=e.nodeType===Node.TEXT_NODE,r=e.parentElement?.hasAttribute("data-mention-type");if(e===t)return s?n>(e.textContent?.length??0)?{found:!1,offset:0}:r?{found:!0,offset:n===0?0:1}:{found:!0,offset:n}:{found:!0,offset:S(e,n)};if(s){const u=x(e)?1:0;return P(e)?{found:!1,offset:u}:r?{found:!1,offset:1+u}:{found:!1,offset:(e.textContent?.length??0)+u}}else{if(e.nodeName==="BR")return{found:!1,offset:1};{let o=0;for(const u of e.childNodes){const l=B(u,t,n);if(l.found)return{found:!0,offset:o+l.offset};o+=l.offset}return{found:!1,offset:o}}}}function D(e,t,n){if(t===e&&n===e.childNodes.length-1)return S(e,-1)-1;const s=new Range;s.setStart(e,0),s.setEnd(e,e.childNodes.length);const r=s.comparePoint(t,0);if(r===-1)return 0;if(r===1)return S(e,-1)-1;const o=B(e,t,n);return o.found?o.offset:-1}function x(e){if(e===null)return!1;let t=e;const n=H(t.parentNode);for(;t;){const s=t.nextSibling;if(s&&H(s)||n&&s&&!U(s)||s&&s.nodeName==="BR")break;if(U(t))return!0;t=t.parentNode}return!1}const $=["EM","U","STRONG","DEL","CODE","A"],oe=["OL","UL","LI","PRE","BLOCKQUOTE","P"];function H(e){return e===null?!1:$.includes(e.nodeName||"")}function U(e){return oe.includes(e.nodeName||"")}function ie(e){return $.includes(e.nodeName)&&e.textContent?.length===0}function P(e){const t=e.parentNode?.childNodes.length===1,n=e.parentNode?.nodeName==="P",s=e.textContent===" ";return n&&t&&s}const ae=["bold","italic","strikeThrough","underline","undo","redo","orderedList","unorderedList","inlineCode","clear","link","codeBlock","quote","indent","unindent"],ue=["@","#","/",""];function ce(){return ae.reduce((e,t)=>(e[t]="enabled",e),{})}function F(e){const t={};for(const[n,s]of e)t[n.substring(0,1).toLowerCase()+n.substring(1)]=s.toLowerCase();return t}function le(){const e=navigator.userAgent.toLowerCase();return e.includes("iphone")||e.includes("ipad")?"iOS":e.includes("android")?"Android":e.includes("win")?"Windows":e.includes("mac")?"macOS":e.includes("linux")?"Linux":null}function q(e,t,n,s){n?.preventDefault(),n?.stopPropagation(),e.dispatchEvent(new CustomEvent("wysiwygInput",{detail:{blockType:t,data:s}}))}function fe(e,t,n,s,r){if(e.shiftKey&&e.altKey)switch(e.key){case"5":return"formatStrikeThrough"}const o=le();if((o==="Windows"||o==="Linux")&&e.ctrlKey)switch(e.key){case"Backspace":return"deleteWordBackward"}if(e.ctrlKey||e.metaKey)switch(e.key){case"b":return"formatBold";case"i":return"formatItalic";case"u":return"formatUnderline";case"e":return"formatInlineCode";case"y":return"historyRedo";case"z":return"historyUndo";case"Z":return"historyRedo";case"Enter":return"sendMessage";case"Backspace":return"deleteSoftLineBackward"}return I(e,{actions:n,content:()=>t.get_content_as_html(),messageContent:()=>t.get_content_as_message_html()},s,r),null}function de(e,t,n,s,r){const o=fe(e,n,s,t,r);o&&q(t,o,e)}function K(e){return F(e.action_states)}function me(e,t,n,s,r,o,u,l,a){const c=ne(e,n,r.traceAction,o,t,u,l,a);if(c){const i=c.text_update().replace_all;i&&(O(t,i.replacement_html,i.start_utf16_codeunit,i.end_utf16_codeunit),r.setEditorHtml(i.replacement_html)),t.focus(),s&&se(s,n);const f=c.menu_state().update(),m=c.menu_action().suggestion()?.suggestion_pattern,d=f?K(f):null,h=m||null;return{content:i?.replacement_html,actionStates:d,suggestion:h}}}function _e(e,t,{traceAction:n,getSelectionAccordingToActions:s}){const[r,o]=R(e,document.getSelection()),u=t.selection_start(),l=t.selection_end(),[a,c]=s();if(r===u&&r===a&&o===l&&o===c||r===l&&r===c&&o===u&&o===a)return;const i=t.select(r,o);n(null,"select",r,o);const f=i.menu_state().update();if(f)return K(f)}function ge(e,t,n,s,r,o,u,l){const[a,c]=_.useState({content:null,actionStates:ce(),suggestion:null}),i=_.useRef(void 0),[f,m]=_.useState(!1);return _.useEffect(()=>{n&&(c({content:n.get_content_as_html(),actionStates:F(n.action_states()),suggestion:null}),i.current=n.get_content_as_plain_text())},[n]),_.useEffect(()=>{const d=e.current;if(!n||!d)return;const h=g=>{try{const E=me(g,d,n,t.current,s,r,a.suggestion,u,l);E&&(c(T=>{const He=E.content!==void 0?E.content:T.content,Ue=E.actionStates||T.actionStates,Pe=E.suggestion;return{content:He,actionStates:Ue,suggestion:Pe}}),i.current=n.get_content_as_plain_text())}catch{o(i.current)}},b=g=>{k(g)&&!g.isComposing&&h(g)};d.addEventListener("input",b);const N=g=>{const E=k(g)&&g.inputType==="insertFromPaste"&&g.dataTransfer!==null;(A(g)||E)&&(g.preventDefault(),g.stopPropagation(),h(g))};d.addEventListener("paste",N);const Q=g=>{h({inputType:g.detail.blockType,data:g.detail.data})};d.addEventListener("wysiwygInput",Q);const Y=g=>{de(g,d,n,r,u)};d.addEventListener("keydown",Y);const J=()=>{try{const g=_e(d,n,s);g&&c(({content:E,suggestion:T})=>({content:E,actionStates:g,suggestion:T})),i.current=n.get_content_as_plain_text()}catch{o(i.current)}};document.addEventListener("selectionchange",J);const Z=g=>{if(!(k(g)&&g.isComposing))return N(g)};d.addEventListener("beforeinput",Z);const W=g=>{const E=new InputEvent("input",{data:g.data,inputType:"insertCompositionText"});b(E)};return d.addEventListener("compositionend",W),m(!0),()=>{m(!1),d.removeEventListener("input",b),d.removeEventListener("paste",N),d.removeEventListener("wysiwygInput",Q),d.removeEventListener("keydown",Y),d.removeEventListener("beforeinput",Z),d.removeEventListener("compositionend",W),document.removeEventListener("selectionchange",J)}},[e,l,n,r,t,s,u,o,i,a.suggestion]),{areListenersReady:f,...a}}function pe(e,t){return _.useMemo(()=>{const s=(r,o)=>{e.current&&q(e.current,r,void 0,o)};return{bold:()=>s("formatBold"),italic:()=>s("formatItalic"),strikeThrough:()=>s("formatStrikeThrough"),underline:()=>s("formatUnderline"),undo:()=>s("historyUndo"),redo:()=>s("historyRedo"),orderedList:()=>s("insertOrderedList"),unorderedList:()=>s("insertUnorderedList"),inlineCode:()=>s("formatInlineCode"),clear:()=>s("clear"),insertText:r=>s("insertText",r),link:(r,o)=>s("insertLink",{url:r,text:o}),removeLinks:()=>s("removeLinks"),getLink:()=>t?.get_link_action()?.edit_link?.url||"",codeBlock:()=>s("insertCodeBlock"),quote:()=>s("insertQuote"),indent:()=>s("formatIndent"),unindent:()=>s("formatOutdent"),mention:(r,o,u)=>s("insertSuggestion",{url:r,text:o,attributes:u}),command:r=>s("insertCommand",r),mentionAtRoom:r=>s("insertAtRoomSuggestion",{attributes:r})}},[e,t])}let j=!1,v=!1;async function w(){if(v)return Promise.resolve();if(j)return new Promise(e=>{function t(){v&&e(),setTimeout(t,200)}t()});j=!0,await y.initAsync(),v=!0}function he(e,t,n){const[s,r]=_.useState(null),o=_.useCallback(async u=>{await w();let l;if(u)try{const a=y.new_composer_model_from_html(u,0,u.length);if(l=a,e.current){const c=a.get_content_as_html();O(e.current,c,0,c.length)}}catch{l=y.new_composer_model()}else l=y.new_composer_model();r(l)},[r,e]);return _.useEffect(()=>{s&&n&&s.set_custom_suggestion_patterns(n)},[s,n]),_.useEffect(()=>{e.current&&o(t)},[e,o,t]),{composerModel:s,onError:o}}function G(e){return e[0]==="select"}function Ee(e,t,n){return(s,r,o,u)=>(!e||!n||(console.debug(u!==void 0?`composer_model.${r}(${o}, ${u})`:o!==void 0?`composer_model.${r}(${o})`:`composer_model.${r}()`),t.push([r,o,u]),V(e,n,s,t)),s)}function ye(e){return()=>{for(let t=e.length-1;t>=0;t--){const n=e[t];if(G(n))return[n[1],n[2]]}return[-1,-1]}}function V(e,t,n,s){n&&n.text_update(),e.innerText=ke(s,t.to_example_format()),e.scrollTo(0,e.scrollHeight-e.clientHeight)}function ke(e,t){let n="";function s(c,i,f){c==="select"?n+=`model.select(Location::from(${i}), Location::from(${f}));
2
+ `:f!==void 0?n+=`model.${c}(${i??""}, ${f});
3
+ `:c==="replace_text"?n+=`model.${c}("${i??""}");
4
+ `:c==="send"?n+=`// Send: ${i??""}
5
+ `:n+=`model.${c}(${i??""});
6
+ `}function r(){const c=Se(l,a[0],a[1]);n+=`let mut model = cm("${c}");
7
+ `}let o=null,u=!0,l="",a=[0,0];for(const c of e){const[i,f,m]=c;if(u)i==="replace_text"?l+=Te(f):G(c)?a=[c[1],c[2]]:(u=!1,r(),s(i,f,m));else if(o==="select"&&i==="select"){const d=n.lastIndexOf(`
8
+ `,n.length-2);d>-1&&(n=n.substring(0,d)+`
9
+ `,s(i,f,m))}else s(i,f,m);o=i}return u&&r(),n+=`assert_eq!(tx(&model), "${t}");
10
+ `,n}function Se(e,t,n){const s=y.new_composer_model_from_html(e,-1,-1);return s.select(t,n),s.to_example_format()}function Ce(e,t,n,s){const[r,o]=R(e,document.getSelection()),u=[["replace_text",s],["select",r,o]];return V(t,n,null,u),u}function Te(e){if(!e)return"";const t=document.createElement("p");return t.appendChild(document.createTextNode(e.toString())),t.innerHTML}function xe(e,t){const n=_.useRef(null),[s,r]=_.useState([]),[o,u]=_.useState(""),l=_.useCallback(m=>{n.current&&u(m)},[n]),a=_.useMemo(()=>Ee(n.current,s,t),[n,s,t]),c=_.useMemo(()=>ye(s),[s]),i=_.useCallback(()=>e.current&&n.current&&t&&r(Ce(e.current,n.current,t,o)),[e,n,t,o]),f=_.useMemo(()=>({traceAction:a,getSelectionAccordingToActions:c,onResetTestCase:i,setEditorHtml:l}),[a,c,i,l]);return{testRef:n,utilities:f}}function we(e){return ue[e.key.key_type]||""}function be(e){switch(e.key.key_type){case 0:case 1:return"mention";case 2:return"command";case 3:return"custom";default:return"unknown"}}function Le(e){return e===null?e:{text:e.text,keyChar:we(e),type:be(e)}}const C=`
11
+ `,ve=e=>{let t=e;return t.endsWith(C)&&(t=t.slice(0,-1)),t.replaceAll(/\\/g,"")};async function Ne(e,t){if(e.length===0)return"";await w();const n=y.new_composer_model();n.set_content_from_html(e);const s=t?n.get_content_as_message_markdown():n.get_content_as_markdown();return ve(s)}async function Ae(e,t){if(e.length===0)return"";await w();const n=Ie(e),s=y.new_composer_model();return s.set_content_from_markdown(n),t?s.get_content_as_message_html():s.get_content_as_html()}function Ie(e){const{body:t}=new DOMParser().parseFromString(e,"text/html"),n=document.createNodeIterator(t,void 0,Re);let s=n.nextNode(),r="";for(;s!==null;){const o=s.nodeName==="#text",u=s.nodeName==="A",l=s.nodeName==="DIV"&&s.childNodes.length===1&&s.firstChild?.nodeName==="BR",a=!Oe.includes(s.nodeName);if(l)r+=C;else if(o){let c=s.textContent;X(s)&&(c+=C),r+=c}else if(u){let c=s.firstChild?.parentElement?.outerHTML??"";X(s)&&(c+=C),r+=c}else a&&console.debug(`Converting unexpected node type ${s.nodeName}`);s=n.nextNode()}return r.endsWith(C.repeat(2))&&(r=r.slice(0,-1)),r}const Oe=["#text","BR","A","DIV","BODY"];function X(e){return(e.nextSibling||e.parentElement?.nextSibling)?.nodeName==="DIV"}function Re(e){return e.nodeName==="#text"&&e.parentElement?.hasAttribute("data-mention-type")?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}function Be(e,t=!1){_.useEffect(()=>{if(t){const n=setTimeout(()=>e.current?.focus(),200);return()=>clearTimeout(n)}},[e,t])}function De(){const e=_.useRef(null);return _.useEffect(()=>{e.current?.childElementCount||e.current?.appendChild(document.createElement("br"))},[e]),e}function z(e){const t=e?.keys();return t?Array.from(t):[]}function $e(e){const t=De(),n=_.useRef(null),[s,r]=_.useState(z(e?.emojiSuggestions));_.useEffect(()=>{r(z(e?.emojiSuggestions))},[e?.emojiSuggestions]);const{composerModel:o,onError:u}=he(t,e?.initialContent,s),{testRef:l,utilities:a}=xe(t,o),c=pe(t,o),{content:i,actionStates:f,areListenersReady:m,suggestion:d}=ge(t,n,o,a,c,u,e?.inputEventProcessor,e?.emojiSuggestions);Be(t,e?.isAutoFocusEnabled);const h=_.useMemo(()=>Le(d),[d]);return{ref:t,isWysiwygReady:m,wysiwyg:c,content:i,actionStates:f,debug:{modelRef:n,testRef:l,resetTestCase:a.onResetTestCase,traceAction:a.traceAction},suggestion:h,messageContent:o?.get_content_as_message_html()??null}}p.initOnce=w,p.plainToRich=Ae,p.richToPlain=Ne,p.useWysiwyg=$e,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})});
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vector-im/matrix-wysiwyg-wasm",
3
- "version": "2.38.4",
3
+ "version": "2.39.0",
4
4
  "homepage": "https://gitlab.com/andybalaam/wysiwyg-rust",
5
5
  "description": "WASM bindings for wysiwyg-rust",
6
6
  "license": "SEE LICENSE IN README.md",
@@ -54,7 +54,7 @@
54
54
  "@babel/plugin-transform-modules-commonjs": "^7.25.9",
55
55
  "@types/node": "^22.10.2",
56
56
  "jest": "^29.0.0",
57
- "typedoc": "^0.27.0",
57
+ "typedoc": "^0.28.0",
58
58
  "typescript": "^5.7.2",
59
59
  "wasm-pack": "^0.13.1"
60
60
  },
@@ -39,6 +39,11 @@ export enum DomCreationError {
39
39
  HtmlParseError = 0,
40
40
  MarkdownParseError = 1,
41
41
  }
42
+ export enum HtmlSource {
43
+ Matrix = 0,
44
+ GoogleDoc = 1,
45
+ UnknownExternal = 2,
46
+ }
42
47
  export enum PatternKeyType {
43
48
  At = 0,
44
49
  Hash = 1,
@@ -62,6 +67,7 @@ export class ComposerModel {
62
67
  selection_start(): number;
63
68
  selection_end(): number;
64
69
  replace_text(new_text: string): ComposerUpdate;
70
+ replace_html(new_html: string, external_source: HtmlSource): ComposerUpdate;
65
71
  replace_text_suggestion(new_text: string, suggestion: SuggestionPattern, append_space: boolean): ComposerUpdate;
66
72
  set_content_from_html(text: string): ComposerUpdate;
67
73
  set_content_from_markdown(text: string): ComposerUpdate;
@@ -3,13 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TextUpdate = exports.SuggestionPattern = exports.Selection = exports.ReplaceAll = exports.PatternKeyType = exports.PatternKey = exports.MenuStateUpdate = exports.MenuState = exports.MenuActionSuggestion = exports.MenuAction = exports.LinkAction = exports.Keep = exports.Edit = exports.DomHandle = exports.DomCreationError = exports.DomChildren = exports.Disabled = exports.CreateWithText = exports.Create = exports.ComposerUpdate = exports.ComposerModel = exports.ComposerAction = exports.ActionState = void 0;
6
+ exports.TextUpdate = exports.SuggestionPattern = exports.Selection = exports.ReplaceAll = exports.PatternKeyType = exports.PatternKey = exports.MenuStateUpdate = exports.MenuState = exports.MenuActionSuggestion = exports.MenuAction = exports.LinkAction = exports.Keep = exports.HtmlSource = exports.Edit = exports.DomHandle = exports.DomCreationError = exports.DomChildren = exports.Disabled = exports.CreateWithText = exports.Create = exports.ComposerUpdate = exports.ComposerModel = exports.ComposerAction = exports.ActionState = void 0;
7
7
  exports.__wbg_body_942ea927546a04ba = __wbg_body_942ea927546a04ba;
8
8
  exports.__wbg_childNodes_c4423003f3a9441f = __wbg_childNodes_c4423003f3a9441f;
9
9
  exports.__wbg_error_7534b8e9a36f1ab4 = __wbg_error_7534b8e9a36f1ab4;
10
10
  exports.__wbg_forEach_d6a05ca96422eff9 = __wbg_forEach_d6a05ca96422eff9;
11
11
  exports.__wbg_forEach_e1cf6f7c8ecb7dae = __wbg_forEach_e1cf6f7c8ecb7dae;
12
12
  exports.__wbg_getAttribute_ea5166be2deba45e = __wbg_getAttribute_ea5166be2deba45e;
13
+ exports.__wbg_getPropertyValue_e623c23a05dfb30c = __wbg_getPropertyValue_e623c23a05dfb30c;
13
14
  exports.__wbg_get_e27dfaeb6f46bd45 = __wbg_get_e27dfaeb6f46bd45;
14
15
  exports.__wbg_hasAttribute_db31090c2e646f57 = __wbg_hasAttribute_db31090c2e646f57;
15
16
  exports.__wbg_length_49b2ba67f0897e97 = __wbg_length_49b2ba67f0897e97;
@@ -23,6 +24,7 @@ exports.__wbg_parseFromString_91cbec9ba27a222a = __wbg_parseFromString_91cbec9ba
23
24
  exports.__wbg_set_8fc6bf8a5b1071d1 = __wbg_set_8fc6bf8a5b1071d1;
24
25
  exports.__wbg_set_wasm = __wbg_set_wasm;
25
26
  exports.__wbg_stack_0ed75d68575b0f3c = __wbg_stack_0ed75d68575b0f3c;
27
+ exports.__wbg_style_fb30c14e5815805c = __wbg_style_fb30c14e5815805c;
26
28
  exports.__wbindgen_init_externref_table = __wbindgen_init_externref_table;
27
29
  exports.__wbindgen_number_new = __wbindgen_number_new;
28
30
  exports.__wbindgen_string_get = __wbindgen_string_get;
@@ -152,11 +154,11 @@ function takeFromExternrefTable0(idx) {
152
154
  wasm.__externref_table_dealloc(idx);
153
155
  return value;
154
156
  }
155
- function __wbg_adapter_123(arg0, arg1, arg2, arg3, arg4) {
156
- wasm.closure98_externref_shim(arg0, arg1, arg2, arg3, arg4);
157
+ function __wbg_adapter_124(arg0, arg1, arg2, arg3, arg4) {
158
+ wasm.closure102_externref_shim(arg0, arg1, arg2, arg3, arg4);
157
159
  }
158
- function __wbg_adapter_126(arg0, arg1, arg2, arg3) {
159
- wasm.closure101_externref_shim(arg0, arg1, arg2, arg3);
160
+ function __wbg_adapter_127(arg0, arg1, arg2, arg3) {
161
+ wasm.closure105_externref_shim(arg0, arg1, arg2, arg3);
160
162
  }
161
163
 
162
164
  /**
@@ -223,6 +225,17 @@ const DomCreationError = exports.DomCreationError = Object.freeze({
223
225
  MarkdownParseError: 1,
224
226
  "1": "MarkdownParseError"
225
227
  });
228
+ /**
229
+ * @enum {0 | 1 | 2}
230
+ */
231
+ const HtmlSource = exports.HtmlSource = Object.freeze({
232
+ Matrix: 0,
233
+ "0": "Matrix",
234
+ GoogleDoc: 1,
235
+ "1": "GoogleDoc",
236
+ UnknownExternal: 2,
237
+ "2": "UnknownExternal"
238
+ });
226
239
  /**
227
240
  * @enum {0 | 1 | 2 | 3}
228
241
  */
@@ -413,6 +426,17 @@ class ComposerModel {
413
426
  const ret = wasm.composermodel_replace_text(this.__wbg_ptr, ptr0, len0);
414
427
  return ComposerUpdate.__wrap(ret);
415
428
  }
429
+ /**
430
+ * @param {string} new_html
431
+ * @param {HtmlSource} external_source
432
+ * @returns {ComposerUpdate}
433
+ */
434
+ replace_html(new_html, external_source) {
435
+ const ptr0 = passStringToWasm0(new_html, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
436
+ const len0 = WASM_VECTOR_LEN;
437
+ const ret = wasm.composermodel_replace_html(this.__wbg_ptr, ptr0, len0, external_source);
438
+ return ComposerUpdate.__wrap(ret);
439
+ }
416
440
  /**
417
441
  * @param {string} new_text
418
442
  * @param {SuggestionPattern} suggestion
@@ -1648,7 +1672,7 @@ function __wbg_forEach_d6a05ca96422eff9(arg0, arg1, arg2) {
1648
1672
  const a = state0.a;
1649
1673
  state0.a = 0;
1650
1674
  try {
1651
- return __wbg_adapter_123(a, state0.b, arg0, arg1, arg2);
1675
+ return __wbg_adapter_124(a, state0.b, arg0, arg1, arg2);
1652
1676
  } finally {
1653
1677
  state0.a = a;
1654
1678
  }
@@ -1669,7 +1693,7 @@ function __wbg_forEach_e1cf6f7c8ecb7dae(arg0, arg1, arg2) {
1669
1693
  const a = state0.a;
1670
1694
  state0.a = 0;
1671
1695
  try {
1672
- return __wbg_adapter_126(a, state0.b, arg0, arg1);
1696
+ return __wbg_adapter_127(a, state0.b, arg0, arg1);
1673
1697
  } finally {
1674
1698
  state0.a = a;
1675
1699
  }
@@ -1688,6 +1712,16 @@ function __wbg_getAttribute_ea5166be2deba45e(arg0, arg1, arg2, arg3) {
1688
1712
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1689
1713
  }
1690
1714
  ;
1715
+ function __wbg_getPropertyValue_e623c23a05dfb30c() {
1716
+ return handleError(function (arg0, arg1, arg2, arg3) {
1717
+ const ret = arg1.getPropertyValue(getStringFromWasm0(arg2, arg3));
1718
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1719
+ const len1 = WASM_VECTOR_LEN;
1720
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
1721
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1722
+ }, arguments);
1723
+ }
1724
+ ;
1691
1725
  function __wbg_get_e27dfaeb6f46bd45(arg0, arg1) {
1692
1726
  const ret = arg0[arg1 >>> 0];
1693
1727
  return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
@@ -1761,6 +1795,11 @@ function __wbg_stack_0ed75d68575b0f3c(arg0, arg1) {
1761
1795
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1762
1796
  }
1763
1797
  ;
1798
+ function __wbg_style_fb30c14e5815805c(arg0) {
1799
+ const ret = arg0.style;
1800
+ return ret;
1801
+ }
1802
+ ;
1764
1803
  function __wbindgen_init_externref_table() {
1765
1804
  const table = wasm.__wbindgen_export_1;
1766
1805
  const offset = table.grow(4);
@@ -146,12 +146,12 @@ function takeFromExternrefTable0(idx) {
146
146
  wasm.__externref_table_dealloc(idx);
147
147
  return value;
148
148
  }
149
- function __wbg_adapter_123(arg0, arg1, arg2, arg3, arg4) {
150
- wasm.closure98_externref_shim(arg0, arg1, arg2, arg3, arg4);
149
+ function __wbg_adapter_124(arg0, arg1, arg2, arg3, arg4) {
150
+ wasm.closure102_externref_shim(arg0, arg1, arg2, arg3, arg4);
151
151
  }
152
152
 
153
- function __wbg_adapter_126(arg0, arg1, arg2, arg3) {
154
- wasm.closure101_externref_shim(arg0, arg1, arg2, arg3);
153
+ function __wbg_adapter_127(arg0, arg1, arg2, arg3) {
154
+ wasm.closure105_externref_shim(arg0, arg1, arg2, arg3);
155
155
  }
156
156
 
157
157
  /**
@@ -199,6 +199,14 @@ export const DomCreationError = Object.freeze({
199
199
  HtmlParseError: 0, "0": "HtmlParseError",
200
200
  MarkdownParseError: 1, "1": "MarkdownParseError",
201
201
  });
202
+ /**
203
+ * @enum {0 | 1 | 2}
204
+ */
205
+ export const HtmlSource = Object.freeze({
206
+ Matrix: 0, "0": "Matrix",
207
+ GoogleDoc: 1, "1": "GoogleDoc",
208
+ UnknownExternal: 2, "2": "UnknownExternal",
209
+ });
202
210
  /**
203
211
  * @enum {0 | 1 | 2 | 3}
204
212
  */
@@ -390,6 +398,17 @@ export class ComposerModel {
390
398
  const ret = wasm.composermodel_replace_text(this.__wbg_ptr, ptr0, len0);
391
399
  return ComposerUpdate.__wrap(ret);
392
400
  }
401
+ /**
402
+ * @param {string} new_html
403
+ * @param {HtmlSource} external_source
404
+ * @returns {ComposerUpdate}
405
+ */
406
+ replace_html(new_html, external_source) {
407
+ const ptr0 = passStringToWasm0(new_html, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
408
+ const len0 = WASM_VECTOR_LEN;
409
+ const ret = wasm.composermodel_replace_html(this.__wbg_ptr, ptr0, len0, external_source);
410
+ return ComposerUpdate.__wrap(ret);
411
+ }
393
412
  /**
394
413
  * @param {string} new_text
395
414
  * @param {SuggestionPattern} suggestion
@@ -1674,7 +1693,7 @@ export function __wbg_forEach_d6a05ca96422eff9(arg0, arg1, arg2) {
1674
1693
  const a = state0.a;
1675
1694
  state0.a = 0;
1676
1695
  try {
1677
- return __wbg_adapter_123(a, state0.b, arg0, arg1, arg2);
1696
+ return __wbg_adapter_124(a, state0.b, arg0, arg1, arg2);
1678
1697
  } finally {
1679
1698
  state0.a = a;
1680
1699
  }
@@ -1692,7 +1711,7 @@ export function __wbg_forEach_e1cf6f7c8ecb7dae(arg0, arg1, arg2) {
1692
1711
  const a = state0.a;
1693
1712
  state0.a = 0;
1694
1713
  try {
1695
- return __wbg_adapter_126(a, state0.b, arg0, arg1);
1714
+ return __wbg_adapter_127(a, state0.b, arg0, arg1);
1696
1715
  } finally {
1697
1716
  state0.a = a;
1698
1717
  }
@@ -1711,6 +1730,14 @@ export function __wbg_getAttribute_ea5166be2deba45e(arg0, arg1, arg2, arg3) {
1711
1730
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1712
1731
  };
1713
1732
 
1733
+ export function __wbg_getPropertyValue_e623c23a05dfb30c() { return handleError(function (arg0, arg1, arg2, arg3) {
1734
+ const ret = arg1.getPropertyValue(getStringFromWasm0(arg2, arg3));
1735
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1736
+ const len1 = WASM_VECTOR_LEN;
1737
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
1738
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1739
+ }, arguments) };
1740
+
1714
1741
  export function __wbg_get_e27dfaeb6f46bd45(arg0, arg1) {
1715
1742
  const ret = arg0[arg1 >>> 0];
1716
1743
  return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
@@ -1780,6 +1807,11 @@ export function __wbg_stack_0ed75d68575b0f3c(arg0, arg1) {
1780
1807
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1781
1808
  };
1782
1809
 
1810
+ export function __wbg_style_fb30c14e5815805c(arg0) {
1811
+ const ret = arg0.style;
1812
+ return ret;
1813
+ };
1814
+
1783
1815
  export function __wbindgen_init_externref_table() {
1784
1816
  const table = wasm.__wbindgen_export_1;
1785
1817
  const offset = table.grow(4);
@@ -18,6 +18,7 @@ export const composermodel_select: (a: number, b: number, c: number) => number;
18
18
  export const composermodel_selection_start: (a: number) => number;
19
19
  export const composermodel_selection_end: (a: number) => number;
20
20
  export const composermodel_replace_text: (a: number, b: number, c: number) => number;
21
+ export const composermodel_replace_html: (a: number, b: number, c: number, d: number) => number;
21
22
  export const composermodel_replace_text_suggestion: (a: number, b: number, c: number, d: number, e: number) => number;
22
23
  export const composermodel_set_content_from_html: (a: number, b: number, c: number) => [number, number, number];
23
24
  export const composermodel_set_content_from_markdown: (a: number, b: number, c: number) => [number, number, number];
@@ -130,6 +131,6 @@ export const __wbindgen_malloc: (a: number, b: number) => number;
130
131
  export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
131
132
  export const __wbindgen_exn_store: (a: number) => void;
132
133
  export const __externref_table_dealloc: (a: number) => void;
133
- export const closure98_externref_shim: (a: number, b: number, c: any, d: number, e: any) => void;
134
- export const closure101_externref_shim: (a: number, b: number, c: any, d: any) => void;
134
+ export const closure102_externref_shim: (a: number, b: number, c: any, d: number, e: any) => void;
135
+ export const closure105_externref_shim: (a: number, b: number, c: any, d: any) => void;
135
136
  export const __wbindgen_start: () => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vector-im/matrix-wysiwyg",
3
- "version": "2.38.4",
3
+ "version": "2.39.0",
4
4
  "type": "module",
5
5
  "description": "Wysiwyg composer for Element Web using React",
6
6
  "author": "New Vector Ltd.",
@@ -41,23 +41,23 @@
41
41
  "react": "^18.2.0 || ^19.0.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@stylistic/eslint-plugin": "^2.12.1",
44
+ "@stylistic/eslint-plugin": "^5.0.0",
45
45
  "@testing-library/dom": "^10.0.0",
46
46
  "@testing-library/jest-dom": "^6.0.0",
47
47
  "@testing-library/react": "^16.0.0",
48
48
  "@testing-library/user-event": "^14.4.3",
49
- "@types/jest": "^29.1.1",
49
+ "@types/jest": "^29.0.0",
50
50
  "@types/react": "^19.0.0",
51
51
  "@types/react-dom": "^19.0.0",
52
52
  "@typescript-eslint/eslint-plugin": "^8.0.0",
53
53
  "@typescript-eslint/parser": "^8.0.0",
54
54
  "@vitejs/plugin-react": "^4.2.1",
55
- "@vitest/coverage-v8": "^2.1.8",
56
- "@vitest/ui": "^2.0.0",
57
- "cypress": "^13.0.0",
58
- "eslint": "^8.23.1",
55
+ "@vitest/coverage-v8": "^3.0.0",
56
+ "@vitest/ui": "^3.0.0",
57
+ "cypress": "^14.0.0",
58
+ "eslint": "^9.20.0",
59
59
  "eslint-config-google": "^0.14.0",
60
- "eslint-config-prettier": "^9.0.0",
60
+ "eslint-config-prettier": "^10.0.0",
61
61
  "eslint-plugin-deprecate": "^0.8.0",
62
62
  "eslint-plugin-import": "^2.26.0",
63
63
  "eslint-plugin-jsx-a11y": "^6.6.1",
@@ -65,15 +65,15 @@
65
65
  "eslint-plugin-prettier": "^5.0.0",
66
66
  "eslint-plugin-react": "^7.31.8",
67
67
  "eslint-plugin-react-hooks": "^5.0.0",
68
- "eslint-plugin-unicorn": "^56.0.0",
69
- "jest-environment-jsdom": "^29.0.3",
70
- "prettier": "3.4.2",
68
+ "eslint-plugin-unicorn": "^60.0.0",
69
+ "jest-environment-jsdom": "^29.0.0",
70
+ "prettier": "3.6.2",
71
71
  "react": "^19.0.0",
72
72
  "react-dom": "^19.0.0",
73
73
  "typescript": "^5.0.0",
74
- "vite": "6.0.9",
74
+ "vite": "7.0.6",
75
75
  "vite-plugin-dts": "^4.3.0",
76
- "vitest": "^2.1.8",
76
+ "vitest": "^3.0.0",
77
77
  "vitest-sonar-reporter": "^2.0.0"
78
78
  },
79
79
  "dependencies": {