@docx-editor.dev/pro 2.0.1 → 2.1.1

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,2 +1,2 @@
1
- 'use strict';var chunkTNSHSAA4_cjs=require('../chunk-TNSHSAA4.cjs'),react=require('react'),react$1=require('@docx-editor.dev/react'),jsxRuntime=require('react/jsx-runtime');function me(e){let r=react$1.useDocxEditor();return nt(r,e)}function nt(e,r){let l=react.useCallback(p=>{if(!e)return ()=>{};let y=e.on("change",p),P=e.on("selectionChange",p);return ()=>{y(),P();}},[e]),s=react.useSyncExternalStore(l,()=>e?`${e.getReviewRevision()}`:"none",()=>"none"),t=react.useMemo(()=>e?e.getReviewItems(r):[],[e,s,r]),o=react.useMemo(()=>t.find(p=>p.isActive)?.key??null,[t]),i=react.useCallback(p=>{e?.setActiveReviewItem(p);},[e]),n=react.useCallback(p=>{p.kind!=="revision"||p.readOnly||e?.acceptReviewItem(p.key);},[e]),d=react.useCallback(p=>{p.kind!=="revision"||p.readOnly||e?.rejectReviewItem(p.key);},[e]),c=react.useCallback(p=>!e||p.kind==="custom"||p.kind==="revision"&&p.readOnly?false:e.deleteReviewItem(p.key).ok,[e]),v=react.useCallback((p,y,P)=>y.trim().length===0||!e?false:e.replyToReviewItem(p.key,y,P).ok,[e]),b=react.useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,s]),R=react.useCallback((p,y)=>p.trim().length===0||!e?false:e.addComment(p,y).ok,[e]),w=react.useMemo(()=>e?e.isReviewPaneOpen():true,[e,s]),f=react.useCallback(p=>{!e||e.isReviewPaneOpen()===p||e.exec({type:"toggleReviewPane"});},[e]);return react.useMemo(()=>({items:t,activeKey:o,setActive:i,accept:n,reject:d,remove:c,reply:v,selectionAnchorY:b,comment:R,paneOpen:w,setPaneOpen:f,ready:e!==null}),[t,o,i,n,d,c,v,b,R,w,f,e])}function ht(e,r,l={}){let s=l.gap??8,t=l.scale??1,o=l.defaultHeight??0;return react.useMemo(()=>{let i=new Map,n=Number.NEGATIVE_INFINITY;for(let d of e){if(d.anchorY===null)continue;let c=Math.max(d.anchorY,n);i.set(d.key,c),n=c+((r.get(d.key)??o)+s)/t;}return i},[e,r,s,t,o])}var Pe=react.createContext(null),k=react.createContext(null);function Pt(){return react.useContext(k)}var It={scale:96/72,top:0,left:null},kt=16,ve="\0compose",ot=600,it=8,At=72,Mt=64,Tt=480,Dt=Object.freeze({placement:false});function Ie(e,r){return e.kind!=="comment"?false:e.parentId!==void 0?r.has(e.parentId):e.parentRevisionId!==void 0?r.has(e.parentRevisionId):false}function ke(e){return new Set(e.map(r=>r.id))}function F(e){let r=e.target?.tagName;r==="INPUT"||r==="SELECT"||r==="TEXTAREA"||e.preventDefault();}function O(){let e=react.useContext(Pe);return e||St}function Y(){let{t:e}=react.useContext(Pe)??{},{t:r}=react$1.useTranslation();return react.useCallback(l=>e?.(l)??r(l),[e,r])}var St={t:void 0,cardClassName:void 0,review:{items:[],activeKey:null,setActive:()=>{},accept:()=>{},reject:()=>{},remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}},re=e=>jsxRuntime.jsx("svg",{viewBox:"0 -960 960 960",width:16,height:16,"aria-hidden":"true",focusable:"false",children:jsxRuntime.jsx("path",{d:e,fill:"currentColor"})}),Lt="M440-400h80v-120h120v-80H520v-120h-80v120H320v80h120v120ZM80-80v-720q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H240L80-80Zm126-240h594v-480H160v525l46-45Zm-46 0v-480 480Z",Ot="M240-400h480v-80H240v80Zm0-120h480v-80H240v80Zm0-120h480v-80H240v80ZM880-80 720-240H160q-33 0-56.5-23.5T80-320v-480q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v720ZM160-320h594l46 45v-525H160v480Zm0 0v-480 480Z",$t="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",Ht="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z",Vt="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z";function Kt({className:e,furniture:r,asChild:l,hidden:s,children:t,t:o,card:i,preset:n=true,stack:d=true,gap:c=8,filter:v,structural:b=false,formatting:R=false}){let w=react$1.useDocxEditor(),f=react.useMemo(()=>{let m=[];return b||m.push("structural"),R||m.push("format"),m.length>0?m:void 0},[b,R]),p=react.useMemo(()=>f?{excludeRevisionKinds:f}:void 0,[f]),y=me(Dt),P=me(p),I=P.setPaneOpen,{t:E}=react$1.useTranslation(),C=react.useCallback(m=>o?.(m)??E(m),[o,E]),_=react.useRef(null),$=react.useContext(react$1.ReviewRailContext);react.useEffect(()=>$?.register(),[$]);let q=P.paneOpen,M=react.useMemo(()=>v?P.items.filter(m=>v(m)):P.items,[P.items,v]),ee=react.useMemo(()=>{let m=new Map;for(let u of M)u.author&&!m.has(u.author)&&m.set(u.author,m.size);return m},[M]),Ke=react.useMemo(()=>{let m=new Map;for(let u of M)m.set(u.id,u);return m},[M]),[Ye,vt]=react.useState(()=>new Map),ye=react.useCallback((m,u)=>{u<=0||vt(x=>{if(x.get(m)===u)return x;let N=new Map(x);return N.set(m,u),N});},[]),be=react.useRef(new WeakMap),te=react.useRef(null),Be=react.useCallback((m,u)=>{!m||typeof ResizeObserver>"u"||(ye(u,m.offsetHeight),te.current??(te.current=new ResizeObserver(x=>{for(let N of x){let g=be.current.get(N.target);g&&ye(g,N.target.offsetHeight);}})),be.current.get(m)!==u&&(be.current.set(m,u),te.current.observe(m)));},[ye]);react.useEffect(()=>()=>te.current?.disconnect(),[]);let[D,ft]=react.useState(It);react.useEffect(()=>{let m=_.current;if(!w||!m)return;let u=m.offsetParent,x=u?.querySelector(".docx-paginated-surface")??null,N=()=>{ft(T=>{let H=x&&u?x.getBoundingClientRect():null,L=H&&u?u.getBoundingClientRect():null,V={scale:w.getRenderScale(),top:H&&L&&u?H.top-L.top-u.clientTop+u.scrollTop:0,left:H&&L&&u?H.right-L.left-u.clientLeft+u.scrollLeft+kt:null};return T.scale===V.scale&&T.top===V.top&&T.left===V.left?T:V});};N();let g=new ResizeObserver(N);return u&&g.observe(u),x&&g.observe(x),()=>g.disconnect()},[w,M]),react.useEffect(()=>{let m=_.current;if(!w||!m)return;let u=x=>{let N=x.target;if(!(N instanceof Node)||m.contains(N))return;let g=m.offsetParent;!g||!g.contains(N)||g.querySelector(".docx-paginated-surface")?.contains(N)||w.setActiveReviewItem(null);};return document.addEventListener("mousedown",u,true),()=>document.removeEventListener("mousedown",u,true)},[w]);let[xe,pt]=react.useState(null);react.useEffect(()=>{let m=_.current,u=m?.offsetParent;if(!u)return;let x=0,N=()=>{x=0,pt(L=>{let V=u.scrollTop-ot,ue=u.scrollTop+u.clientHeight+ot;return L&&L.top===V&&L.bottom===ue?L:{top:V,bottom:ue}});},g=0,T=()=>{x===0&&(x=requestAnimationFrame(N)),m?.setAttribute("data-scrolling",""),window.clearTimeout(g),g=window.setTimeout(()=>m?.removeAttribute("data-scrolling"),150);};N(),u.addEventListener("scroll",T,{passive:true});let H=new ResizeObserver(T);return H.observe(u),()=>{x!==0&&cancelAnimationFrame(x),window.clearTimeout(g),u.removeEventListener("scroll",T),H.disconnect();}},[w]);let[B,he]=react.useState(null),je=react.useCallback(()=>{w&&(w.surface?.retainSelection(),I(true),he(w.getSelectionPlacement()?.anchorY??null));},[w,I]),Ze=react.useCallback(()=>{w?.surface?.releaseSelection(),he(null),w?.focus();},[w]);react.useEffect(()=>{q||B===null||(w?.surface?.releaseSelection(),he(null));},[q,B,w]);let Fe=B??P.selectionAnchorY,U=react.useMemo(()=>{let m=ke(M);return M.filter(u=>!Ie(u,m))},[M]),qe=react.useMemo(()=>{if(B===null)return U;let m=U.findIndex(x=>x.anchorY!==null&&x.anchorY>B),u={key:ve,anchorY:B};return m===-1?[...U,u]:[...U.slice(0,m),u,...U.slice(m)]},[U,B]),Ue=react.useMemo(()=>{let m=new Map(Ye);for(let u of U){if(m.has(u.key))continue;let x=u.text.length+(u.kind==="revision"?u.replacedText?.length??0:0),N=Math.min(6,Math.max(1,Math.ceil(x/36)));m.set(u.key,64+N*20);}return m},[Ye,U]),{stacked:ge,collapsedKeys:ze}=react.useMemo(()=>{let m=D.scale,u=new Map,x=new Set,N=Number.NEGATIVE_INFINITY;for(let g of qe){let T=g.anchorY===null?Number.isFinite(N)?N:0:Math.max(g.anchorY,N);u.set(g.key,T);let H=g.anchorY===null?0:(T-g.anchorY)*m,L="isActive"in g&&g.isActive,V=H>Tt&&!L&&g.key!==ve;V&&x.add(g.key);let ue=V?Mt:Ue.get(g.key)??At;N=T+(ue+c)/m;}return {stacked:u,collapsedKeys:x}},[qe,Ue,c,D.scale]),Ne=Fe===null?null:D.top+(ge.get(ve)??Fe)*D.scale,Qe=i?.className,wt=react.useMemo(()=>({t:o,cardClassName:Qe,review:{...P,items:M},allItems:y.items,authorSlots:ee,byId:Ke,measure:Be,beginDraft:je,endDraft:Ze}),[o,Qe,P,y.items,M,ee,Ke,Be,je,Ze]);if(s)return null;let Ge={ref:_,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":M.length,"data-open":q?"":void 0,role:"complementary","aria-label":C("review.ariaLabel"),onMouseDown:F,style:D.left===null?void 0:{left:D.left,right:"auto"}},We=typeof t=="function"?{}:at(t),ne=(m,u)=>m in We?We[m]:u,Xe=n?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[ne("AddComment",jsxRuntime.jsx(Me,{top:Ne,drafting:B!==null})),!q||B===null||Ne===null?null:ne("Draft",jsxRuntime.jsx(Te,{top:Ne})),ne("Balloon",jsxRuntime.jsx(De,{}))]}):null,Rt=n?q?ne("List",jsxRuntime.jsx(fe,{stack:d,positions:ge,collapsed:ze,scale:D.scale,offset:D.top,window:xe,children:t})):ne("Markers",jsxRuntime.jsx(Ae,{scale:D.scale,offset:D.top,window:xe})):typeof t=="function"?null:t;return jsxRuntime.jsx(Pe.Provider,{value:wt,children:l&&react.isValidElement(t)?jsxRuntime.jsx(react$1.Slot,{...Ge,children:react.cloneElement(t,void 0,t.props.children,n?jsxRuntime.jsx(fe,{stack:d,positions:ge,collapsed:ze,scale:D.scale,offset:D.top,window:xe}):null,Xe)}):jsxRuntime.jsxs("aside",{...Ge,children:[q&&r!==void 0?jsxRuntime.jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:r}):null,Rt,Xe]})})}function fe({stack:e=true,positions:r,collapsed:l,scale:s=1,offset:t=0,window:o=null,children:i,className:n,hidden:d}){let{review:c,measure:v,cardClassName:b}=O();if(d)return null;let R=ke(c.items),w=c.items.filter(f=>!Ie(f,R));return w.length===0?typeof i=="function"?null:jsxRuntime.jsx(Se,{}):jsxRuntime.jsx("div",{className:`docx-review__list${n?` ${n}`:""}`,children:w.map(f=>{let p=e?r?.get(f.key)??f.anchorY:f.anchorY,y=p==null?null:t+p*s;if(y!==null&&o&&(y<o.top||y>o.bottom))return null;let P=y===null?{}:{position:"absolute",top:y};return jsxRuntime.jsx(k.Provider,{value:f,children:jsxRuntime.jsx("div",{className:"docx-review__slot",style:P,...l?.has(f.key)?{"data-collapsed":""}:{},ref:I=>{v(I,f.key);},children:typeof i=="function"?i(f):jsxRuntime.jsx(Le,{...b?{className:b}:{},children:i})})},f.key)})})}fe.docxReviewPart="List";function Ae({scale:e=1,offset:r=0,window:l=null,className:s,hidden:t}){let{review:o}=O(),i=Y();if(t)return null;let n=ke(o.items),d=o.items.filter(c=>!Ie(c,n));return jsxRuntime.jsx("div",{className:`docx-review__markers${s?` ${s}`:""}`,children:d.map(c=>{if(c.anchorY===null)return null;let v=r+c.anchorY*e;return l&&(v<l.top||v>l.bottom)?null:jsxRuntime.jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":c.kind==="revision"?c.revisionKind:c.kind,style:{position:"absolute",top:v},title:c.author?`${c.author}: ${c.text}`:c.text,"aria-label":`${i("review.showPane")}: ${c.author?`${c.author}. `:""}${c.text}`,onMouseDown:F,onClick:()=>{o.setPaneOpen(true),o.setActive(c.key);},children:re(Ot)},c.key)})})}Ae.docxReviewPart="Markers";function Me({top:e,drafting:r=false,className:l,hidden:s,children:t}){let{beginDraft:o}=O(),i=Y();if(s||r||e===null)return null;let n={type:"button",className:`docx-review__add${l?` ${l}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":i("common.comment"),title:i("common.comment"),onMouseDown:F,onClick:o};return t?jsxRuntime.jsx(react$1.Slot,{...n,children:t}):jsxRuntime.jsx("button",{...n,children:re(Lt)})}Me.docxReviewPart="AddComment";function Te({top:e,className:r,hidden:l}){let{review:s,endDraft:t,measure:o}=O(),i=Y(),[n,d]=react.useState(""),[c,v]=react.useState(false),b=react.useRef(null),R=react.useId();react.useEffect(()=>{b.current?.focus({preventScroll:true});},[]);let w=react.useCallback(()=>{if(n.trim().length===0)return;let f=s.comment(n.trim());v(!f),f&&(d(""),t());},[n,s,t]);return l?null:jsxRuntime.jsx("div",{className:`docx-review__slot${r?` ${r}`:""}`,style:{position:"absolute",top:e},ref:f=>{o(f,ve);},children:jsxRuntime.jsx("div",{className:"docx-review__card","data-testid":"review-draft","data-draft":"",children:jsxRuntime.jsxs("form",{className:"docx-review__reply-box",onSubmit:f=>{f.preventDefault(),w();},children:[jsxRuntime.jsx("label",{className:"ep-sr-only",htmlFor:R,children:i("comments.addComment")}),jsxRuntime.jsx("input",{id:R,ref:b,"data-testid":"review-draft-input",className:"docx-review__input",value:n,placeholder:i("comments.addComment"),...c?{"aria-invalid":true}:{},onChange:f=>{v(false),d(f.target.value);},onKeyDown:f=>{if(f.key==="Escape"){f.preventDefault(),t();return}f.key==="Enter"&&(f.preventDefault(),w());}}),jsxRuntime.jsxs("div",{className:"docx-review__reply-actions",children:[jsxRuntime.jsx("button",{type:"button","data-testid":"review-draft-cancel",className:"docx-review__text-button",onMouseDown:F,onClick:t,children:i("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:n.trim().length===0,children:i("common.comment")})]}),c?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert",children:i("review.commentRefused")}):null]})})})}Te.docxReviewPart="Draft";function De({className:e,hidden:r}){let{review:l,allItems:s,authorSlots:t}=O(),o=Y(),i=react.useRef(null),[n,d]=react.useState(null),c=react.useRef(false);c.current=n!==null,react.useEffect(()=>{let f=i.current,p=f?.closest(".docx-review"),y=p?.closest(".docx-editor__scroll-container")??p?.offsetParent;if(!f||!p||!y)return;let P=(E,C)=>{let _=p.getBoundingClientRect(),$=E.getBoundingClientRect(),q=E.ownerDocument.defaultView?.innerHeight??1/0,M=Number(E.dataset.start),ee=Number(E.dataset.end);d({revisionId:E.dataset.revisionId,author:E.dataset.revisionAuthor??"",...E.dataset.revisionDate!==void 0?{date:E.dataset.revisionDate}:{},...E.dataset.revisionKind!==void 0?{kind:E.dataset.revisionKind}:{},structuralSite:C,...E.dataset.paragraphId!==void 0?{paragraphId:E.dataset.paragraphId}:{},...Number.isFinite(M)?{start:M}:{},...Number.isFinite(ee)?{end:ee}:{},left:$.left-_.left,top:$.top-_.top,bottom:$.bottom-_.top,above:$.bottom+220>q});},I=E=>{let C=E.target;if(!(C instanceof Element)||f.contains(C))return;let _=C.closest("[data-revision-id]");if(_ instanceof HTMLElement&&y.contains(_)){let $=_.classList.contains("docx-table-row--revision");if(_.dataset.revisionKind==="format"||$){P(_,$);return}}c.current&&d(null);};return y.addEventListener("pointerdown",I,true),y.addEventListener("mousedown",I,true),()=>{y.removeEventListener("pointerdown",I,true),y.removeEventListener("mousedown",I,true);}},[]);let v=react.useMemo(()=>{if(!n)return null;let f=null,p=false,y=null,P=false,I=null,E=false;for(let C of s)if(!(C.kind!=="revision"||C.item.kind!=="revision")){for(let _ of C.item.addresses)if(_.id===n.revisionId){if(_.author===n.author){if(_.date===n.date)return C;f===null?f=C:f!==C&&(p=true);}y===null?y=C:y!==C&&(P=true);}if(n.paragraphId!==void 0&&n.start!==void 0&&n.end!==void 0&&(C.revisionKind==="format"||C.revisionKind==="structural")){for(let _ of C.item.ranges)if(_.start.paragraphId===n.paragraphId&&_.start.offset<n.end&&_.end.offset>n.start){I===null?I=C:I!==C&&(E=true);break}}}return f!==null&&!p?f:y!==null&&!P?y:I!==null&&!E?I:null},[s,n]),b=v&&(v.revisionKind==="format"||v.revisionKind==="structural")?v:null,R=react.useRef(false);if(react.useEffect(()=>{if(b){R.current=true;return}R.current&&(R.current=false,d(null));},[b]),r)return null;let w=n?.kind==="format"?"format":"structural";return jsxRuntime.jsx("div",{ref:i,className:`docx-review__balloon-root${e?` ${e}`:""}`,children:n===null?null:jsxRuntime.jsx("div",{className:"docx-review__balloon","data-testid":"review-balloon",style:{left:n.left,top:n.above?n.top-6:n.bottom+6,transform:n.above?"translateY(-100%)":void 0},onMouseDown:F,children:b?jsxRuntime.jsx(k.Provider,{value:b,children:jsxRuntime.jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":b.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(t.get(b.author)??0)%it})`},onClick:()=>l.setActive(b.key),children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(ie,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(ae,{}),jsxRuntime.jsx(se,{})]}),b.kind==="revision"&&!b.readOnly?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[jsxRuntime.jsx(pe,{}),jsxRuntime.jsx(we,{})]}):null]}),jsxRuntime.jsx(le,{})]})}):jsxRuntime.jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":w,children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx("span",{className:"docx-review__avatar","aria-hidden":"true",children:Yt(n.author)}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx("span",{className:"docx-review__author",children:n.author||o("comments.unknown")}),n.date?jsxRuntime.jsx(Bt,{raw:n.date}):null]})]}),jsxRuntime.jsx("div",{className:"docx-review__summary",children:jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":w,children:o(lt(w))})})]})})})}De.docxReviewPart="Balloon";function Yt(e){let r=e.trim().split(/\s+/).filter(Boolean);return r.length===0?"?":r.slice(0,2).map(l=>l[0].toUpperCase()).join("")}function Bt({raw:e}){let r=new Date(e);return Number.isNaN(r.getTime())?null:jsxRuntime.jsx("time",{className:"docx-review__time",dateTime:e,children:st.format(r)})}function Se({className:e,hidden:r,children:l}){let s=Y();return r?null:jsxRuntime.jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:l??s("review.empty")})}Se.docxReviewPart="Empty";function Le({className:e,asChild:r,hidden:l,children:s}){let{review:t,authorSlots:o}=O(),i=react.useContext(k),n=react.useId();if(l||!i)return null;let d=o.get(i.author)??0,c={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${n}-author ${n}-summary`,"data-kind":i.kind==="revision"?i.revisionKind??"revision":i.kind,...i.kind==="custom"&&i.item.kind==="custom"?{"data-node-name":i.item.name}:{},...i.isActive?{"data-active":""}:{},...i.kind==="comment"&&i.resolved?{"data-resolved":""}:{},style:{"--doc-review-author":`var(--doc-review-author-${d%it})`},tabIndex:0,role:"button",id:n,onMouseDown:v=>{v.target?.closest("[data-review-selectable]")||v.currentTarget.focus({preventScroll:true});},onClick:()=>t.setActive(i.key),onKeyDown:v=>{v.target===v.currentTarget&&(v.key!=="Enter"&&v.key!==" "||(v.preventDefault(),t.setActive(i.key)));}};return r?jsxRuntime.jsx(react$1.Slot,{...c,children:s}):jsxRuntime.jsx("div",{...c,children:jsxRuntime.jsx(jt,{children:s})})}Le.docxReviewPart="Card";function jt({children:e}){let r=react.useContext(k),l=react.useMemo(()=>at(e),[e]),s=(o,i)=>o in l?l[o]:i;if(!r)return null;if(r.kind==="custom"&&r.item.kind==="custom"){let o=r.item;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[s("Avatar",null),jsxRuntime.jsx("div",{className:"docx-review__meta",children:s("Author",jsxRuntime.jsx("span",{className:"docx-review__author","data-testid":"review-custom-title",children:o.title}))})]}),s("Summary",o.detail?jsxRuntime.jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsxRuntime.jsx("span",{className:"docx-review__text",children:o.detail})}):null),l.__extra]})}let t=r.kind==="revision"&&!r.readOnly;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[s("Avatar",jsxRuntime.jsx(ie,{})),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[s("Author",jsxRuntime.jsx(ae,{})),s("Time",jsxRuntime.jsx(se,{}))]}),t||r.kind==="comment"?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[s("Accept",jsxRuntime.jsx(pe,{})),s("Reject",jsxRuntime.jsx(we,{})),s("Delete",jsxRuntime.jsx(Re,{}))]}):null]}),s("Summary",jsxRuntime.jsx(le,{})),s("Replies",jsxRuntime.jsx(Oe,{})),s("Reply",jsxRuntime.jsx($e,{})),l.__extra]})}function at(e){let r={},l=[],s=t=>{if(Array.isArray(t)){t.forEach(s);return}if(!t||typeof t!="object"||!("type"in t)){t&&l.push(t);return}if(t.type===react.Fragment){s(t.props.children);return}let o=t.type.docxReviewPart;o?r[o]=t:l.push(t);};return s(e),l.length>0&&(r.__extra=l),r}function ie({className:e,asChild:r,hidden:l,children:s}){let t=react.useContext(k);if(l||!t||s===void 0&&!t.initials)return null;let o={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return r?jsxRuntime.jsx(react$1.Slot,{...o,children:s}):jsxRuntime.jsx("span",{...o,children:s??t.initials})}ie.docxReviewPart="Avatar";function ae({className:e,asChild:r,hidden:l,children:s}){let t=react.useContext(k),o=Y();if(l||!t)return null;let i=t.author||o("comments.unknown"),n={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return r?jsxRuntime.jsx(react$1.Slot,{...n,children:s}):jsxRuntime.jsx("span",{...n,children:s??i})}ae.docxReviewPart="Author";function se({className:e,asChild:r,hidden:l,children:s}){let t=react.useContext(k);if(l||!t)return null;let o=t.date;if(!o)return null;let i=new Date(o);if(Number.isNaN(i.getTime()))return null;let n={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:o};return r?jsxRuntime.jsx(react$1.Slot,{...n,children:s}):jsxRuntime.jsx("time",{...n,children:s??st.format(i)})}se.docxReviewPart="Time";var st=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function le({className:e,asChild:r,hidden:l,children:s}){let t=react.useContext(k),o=Y();if(l||!t)return null;let i=t.text,n=t.kind!=="revision"?null:o(lt(t.revisionKind)),d=t.kind==="revision"&&t.revisionKind==="replace",c={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return r?jsxRuntime.jsx(react$1.Slot,{...c,children:s}):jsxRuntime.jsx("div",{...c,children:s??(d?jsxRuntime.jsxs("span",{className:"docx-review__text",children:[o("review.replaced")," ",jsxRuntime.jsxs("span",{className:"docx-review__removed",children:['"',t.replacedText,'"']})," ",o("review.replacedWith")," ",jsxRuntime.jsxs("span",{className:"docx-review__added",children:['"',i,'"']})]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[n?jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":t.kind==="revision"?t.revisionKind:"revision",children:n}):null,i?jsxRuntime.jsx("span",{className:"docx-review__text",children:i}):null]}))})}le.docxReviewPart="Summary";function lt(e){switch(e){case "insert":return "review.inserted";case "delete":return "review.deleted";case "replace":return "review.replaced";case "moveFrom":return "review.movedFrom";case "moveTo":return "review.movedTo";case "format":return "revisions.runPropertiesChanged";case "paragraphMark":return "revisions.paragraphMarkInserted";default:return "review.structural"}}function pe({className:e,asChild:r,hidden:l,children:s,icon:t}){let{review:o}=O(),i=react.useContext(k),n=Y();if(l||!i||i.kind!=="revision"||i.readOnly)return null;let d=n("review.accept"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:d,onMouseDown:F,onClick:v=>{v.stopPropagation(),o.accept(i);}};return r?jsxRuntime.jsx(react$1.Slot,{...c,children:s}):jsxRuntime.jsx("button",{...c,children:t??s??re($t)})}pe.docxReviewPart="Accept";function we({className:e,asChild:r,hidden:l,children:s,icon:t}){let{review:o}=O(),i=react.useContext(k),n=Y();if(l||!i||i.kind!=="revision"||i.readOnly)return null;let d=n("review.reject"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:d,onMouseDown:F,onClick:v=>{v.stopPropagation(),o.reject(i);}};return r?jsxRuntime.jsx(react$1.Slot,{...c,children:s}):jsxRuntime.jsx("button",{...c,children:t??s??re(Ht)})}we.docxReviewPart="Reject";function Re({className:e,asChild:r,hidden:l,children:s,icon:t}){let{review:o}=O(),i=react.useContext(k),{t:n}=react$1.useTranslation();if(l||!i||i.kind==="custom"||i.kind==="revision"&&i.readOnly)return null;let d=i.kind==="comment"?n("review.deleteComment"):n("review.discardChange"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:d,onMouseDown:F,onClick:v=>{v.stopPropagation(),o.remove(i);}};return r?jsxRuntime.jsx(react$1.Slot,{...c,children:s}):jsxRuntime.jsx("button",{...c,children:t??s??re(Vt)})}Re.docxReviewPart="Delete";function Oe({className:e,hidden:r}){let{byId:l}=O(),s=react.useContext(k);if(r||!s||s.kind==="custom")return null;let t=s.replyIds.map(o=>l.get(o)).filter(o=>o!==void 0);return t.length===0?null:jsxRuntime.jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:t.map(o=>jsxRuntime.jsx(k.Provider,{value:o,children:jsxRuntime.jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(ie,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(ae,{}),jsxRuntime.jsx(se,{})]}),jsxRuntime.jsx("div",{className:"docx-review__actions",children:jsxRuntime.jsx(Re,{})})]}),jsxRuntime.jsx(le,{})]})},o.key))})}Oe.docxReviewPart="Replies";function $e({className:e,hidden:r,children:l}){let{review:s}=O(),t=react.useContext(k),o=Y(),[i,n]=react.useState(""),[d,c]=react.useState(false),v=react.useId(),b=react.useCallback(()=>{if(!t||i.trim().length===0)return;let R=s.reply(t,i.trim());c(!R),R&&n("");},[t,i,s]);return r||!t||!t.isActive?null:l?jsxRuntime.jsx(jsxRuntime.Fragment,{children:l}):jsxRuntime.jsxs("form",{className:`docx-review__reply-box${e?` ${e}`:""}`,onSubmit:R=>{R.preventDefault(),b();},children:[jsxRuntime.jsx("label",{className:"ep-sr-only",htmlFor:v,children:o("comments.replyPlaceholder")}),jsxRuntime.jsx("input",{id:v,"data-testid":"review-reply-input",className:"docx-review__input",value:i,placeholder:o("comments.replyPlaceholder"),...d?{"aria-invalid":true,"data-refused":""}:{},onChange:R=>{c(false),n(R.target.value);},onClick:R=>R.stopPropagation(),onKeyDown:R=>{R.key==="Enter"&&(R.preventDefault(),b());}}),jsxRuntime.jsxs("div",{className:"docx-review__reply-actions",children:[jsxRuntime.jsx("button",{type:"button","data-testid":"review-reply-cancel",className:"docx-review__text-button",onMouseDown:F,onClick:R=>{R.stopPropagation(),n(""),c(false),s.setActive(null);},children:o("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:i.trim().length===0,children:o("review.reply")})]}),d?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:o("review.replyRefused")}):null]})}$e.docxReviewPart="Reply";var Zt=Object.assign(Kt,{List:fe,Empty:Se,Card:Le,Avatar:ie,Author:ae,Time:se,Summary:le,Accept:pe,Reject:we,Delete:Re,Replies:Oe,Reply:$e,Markers:Ae,AddComment:Me,Draft:Te,Balloon:De});function ce(e){let r=react$1.useDocxEditor();return react.useMemo(()=>e||(r?.getCustomNodeDefinitions()??[]).filter(chunkTNSHSAA4_cjs.d),[e,r])}var Ut=".docx-content-control-boundary";function X(e,r){let{node:l,definition:s,controlId:t}=e,o=t?r?.getReviewItems().find(n=>n.kind==="custom"&&n.item.id===t):void 0;if(o&&o.kind==="custom"){let n=o.item;return {...l,attrs:n.attrs,text:n.text,...t?{nodeId:t}:{}}}let i=s.fromDocx?s.fromDocx({attrs:l.attrs,text:""}):l.attrs;return i===null?null:{...l,attrs:i,...t?{nodeId:t}:{}}}function J(e,r){let l=e?.closest?.(Ut),s=l?.closest(".docx-content-control-chrome"),t=s?.getAttribute("data-tag"),o=t?chunkTNSHSAA4_cjs.c(t):null;if(!l||!o||!t)return null;let i=r.find(n=>n.tagPrefix===o.prefix&&n.name===o.name);return i?{node:{name:o.name,attrs:o.attrs,tag:t,rect:l.getBoundingClientRect()},definition:i,controlId:s?.getAttribute("data-docx-content-control")??null}:null}var He=".docx-content-control-boundary",Qt=e=>{if(!chunkTNSHSAA4_cjs.e.test(e.tagPrefix)||!chunkTNSHSAA4_cjs.e.test(e.name))return [];let r=`${e.tagPrefix}:${e.name}`;return [`.docx-content-control-chrome[data-tag="${r}"]`,`.docx-content-control-chrome[data-tag^="${r}?"]`]};function Gt(e){let{onNodeClick:r,onNodeHover:l}=e,s=react$1.useDocxEditor(),t=ce(e.nodes);return react.useEffect(()=>{let o=document.createElement("style"),i=[];for(let n of t){let d=Qt(n);if(d.length===0)continue;let c=n.chrome?.color!==void 0&&CSS.supports("color",n.chrome.color)?n.chrome.color:"#2563eb";i.push(`${d.map(v=>`${v} ${He}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${c} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return o.textContent=i.join(`
2
- `),document.head.append(o),()=>o.remove()},[t]),react.useEffect(()=>{let o=n=>{let d=J(n.target,t);if(!d)return;let c=X(d,s);c&&(d.definition.onClick?.(c),r?.(c));},i=n=>{let d=J(n.target,t);if(!d||n.relatedTarget?.closest?.(He)===n.target.closest(He))return;let v=X(d,s);v&&(d.definition.onHover?.(v),l?.(v));};return document.addEventListener("click",o),document.addEventListener("mouseover",i),()=>{document.removeEventListener("click",o),document.removeEventListener("mouseover",i);}},[t,s,r,l]),null}function mt(e){let{onEditNode:r,remove:l=true}=e,s=ce(e.nodes),t=react$1.useContextMenuTarget(),o=react$1.useDocxEditor(),{t:i}=react$1.useTranslation(),n=react.useMemo(()=>t?J(t,s):null,[t,s]),d=react.useMemo(()=>n?X(n,o):null,[n,o]),c=react.useMemo(()=>!n?.definition.reviewCard||!d?null:n.definition.reviewCard({attrs:d.attrs,text:d.text??""}),[n,d]);if(!n||!d)return null;let{definition:v}=n,b=v.label??v.name,R=v.onEdit!==void 0||r!==void 0,w=l&&d.nodeId!==void 0&&o!==null;return !c&&!R&&!w?null:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[c?jsxRuntime.jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-title",children:c.title}),c.detail?jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-detail",children:c.detail}):null]}):null,R?jsxRuntime.jsx(react$1.ContextMenuItem,{label:i("contextMenu.editCustomNode",{label:b}),className:"docx-contextmenu__custom-edit",onSelect:()=>{v.onEdit?.(d),r?.(d,v);}}):null,w?jsxRuntime.jsx(react$1.ContextMenuItem,{label:i("contextMenu.removeCustomNode",{label:b}),className:"docx-contextmenu__custom-remove",onSelect:()=>{chunkTNSHSAA4_cjs.j(o,d.nodeId);}}):null,jsxRuntime.jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}mt.docxRowPlacement="start";Object.defineProperty(exports,"reviewModule",{enumerable:true,get:function(){return chunkTNSHSAA4_cjs.i}});exports.CustomNodeChrome=Gt;exports.CustomNodeContextMenu=mt;exports.DocxEditorReview=Zt;exports.activatedCustomNodeOf=X;exports.resolveCustomNodeActivation=J;exports.useCustomNodeDefinitions=ce;exports.useReview=me;exports.useReviewItem=Pt;exports.useReviewOf=nt;exports.useStackedReviewPositions=ht;
1
+ 'use strict';var chunkMNK6DXJQ_cjs=require('../chunk-MNK6DXJQ.cjs'),react=require('react'),react$1=require('@docx-editor.dev/react'),jsxRuntime=require('react/jsx-runtime'),store=require('@docx-editor.dev/core/store');function me(e){let i=react$1.useDocxEditor();return rt(i,e)}function rt(e,i){let l=react.useCallback(m=>{if(!e)return ()=>{};let b=e.on("change",m),T=e.on("selectionChange",m),N=e.on("error",m);return ()=>{b(),T(),N();}},[e]),r=react.useSyncExternalStore(l,()=>e?`${e.getReviewRevision()}`:"none",()=>"none"),t=react.useMemo(()=>e?e.getReviewItems(i).filter(m=>m.item.kind!=="custom"||m.item.carded):[],[e,r,i]),o=react.useMemo(()=>t.find(m=>m.isActive)?.key??null,[t]),n=react.useCallback(m=>{e?.setActiveReviewItem(m);},[e]),a=react.useCallback(m=>!e||m.kind!=="revision"||m.readOnly?false:e.acceptReviewItem(m.key).ok,[e]),d=react.useCallback(m=>!e||m.kind!=="revision"||m.readOnly?false:e.rejectReviewItem(m.key).ok,[e]),c=react.useCallback(m=>!e||m.kind==="custom"||m.kind==="revision"&&m.readOnly?false:e.deleteReviewItem(m.key).ok,[e]),p=react.useCallback((m,b,T)=>b.trim().length===0||!e?false:e.replyToReviewItem(m.key,b,T).ok,[e]),w=react.useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,r]),R=react.useCallback((m,b)=>m.trim().length===0||!e?false:e.addComment(m,b).ok,[e]),y=react.useMemo(()=>e?e.isReviewPaneOpen():true,[e,r]),u=react.useCallback(m=>{!e||e.isReviewPaneOpen()===m||e.exec({type:"toggleReviewPane"});},[e]);return react.useMemo(()=>({items:t,activeKey:o,setActive:n,accept:a,reject:d,remove:c,reply:p,selectionAnchorY:w,comment:R,paneOpen:y,setPaneOpen:u,ready:e!==null&&!e.snapshot().isLoading&&e.snapshot().parseError===null}),[t,o,n,a,d,c,p,w,R,y,u,e])}function Nt(e,i,l={}){let r=l.gap??8,t=l.scale??1,o=l.defaultHeight??0;return react.useMemo(()=>{let n=new Map,a=Number.NEGATIVE_INFINITY;for(let d of e){let c=d.anchorY===null?Number.isFinite(a)?a:0:Math.max(d.anchorY,a);n.set(d.key,c),a=c+((i.get(d.key)??o)+r)/t;}return n},[e,i,r,t,o])}var It=e=>e.isLoading||e.parseError!==null||e.pageSetup==null,Pe=react.createContext(null),k=react.createContext(null);function Tt(){return react.useContext(k)}var Mt={scale:96/72,top:0,left:null},Dt=16,ve="\0compose",it=600,st=8,St=72,Lt=64,Ot=480,$t=Object.freeze({placement:false});function ke(e,i){return e.kind!=="comment"?false:e.parentId!==void 0?i.has(e.parentId):e.parentRevisionId!==void 0?i.has(e.parentRevisionId):false}function Ae(e){return new Set(e.map(i=>i.id))}function U(e){let i=e.target?.tagName;i==="INPUT"||i==="SELECT"||i==="TEXTAREA"||e.preventDefault();}function $(){let e=react.useContext(Pe);return e||Ht}function B(){let{t:e}=react.useContext(Pe)??{},{t:i}=react$1.useTranslation();return react.useCallback(l=>e?.(l)??i(l),[e,i])}var Ht={t:void 0,cardClassName:void 0,review:{items:[],activeKey:null,setActive:()=>{},accept:()=>false,reject:()=>false,remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}},oe=e=>jsxRuntime.jsx("svg",{viewBox:"0 -960 960 960",width:16,height:16,"aria-hidden":"true",focusable:"false",children:jsxRuntime.jsx("path",{d:e,fill:"currentColor"})}),Vt="M440-400h80v-120h120v-80H520v-120h-80v120H320v80h120v120ZM80-80v-720q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H240L80-80Zm126-240h594v-480H160v525l46-45Zm-46 0v-480 480Z",Kt="M240-400h480v-80H240v80Zm0-120h480v-80H240v80Zm0-120h480v-80H240v80ZM880-80 720-240H160q-33 0-56.5-23.5T80-320v-480q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v720ZM160-320h594l46 45v-525H160v480Zm0 0v-480 480Z",Yt="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",Bt="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z",jt="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z";function Ft({className:e,furniture:i,asChild:l,hidden:r,children:t,t:o,card:n,preset:a=true,stack:d=true,gap:c=8,filter:p,structural:w=false,formatting:R=false}){let y=react$1.useDocxEditor(),u=react$1.useEditorState(It),m=react.useMemo(()=>{let f=[];return w||f.push("structural"),R||f.push("format"),f.length>0?f:void 0},[w,R]),b=react.useMemo(()=>m?{excludeRevisionKinds:m}:void 0,[m]);react.useEffect(()=>(y?.setReviewActivationExclusions(m??null),()=>y?.setReviewActivationExclusions(null)),[y,m]);let T=me($t),N=me(b),E=N.setPaneOpen,{t:C}=react$1.useTranslation(),P=react.useCallback(f=>o?.(f)??C(f),[o,C]),D=react.useRef(null),de=react.useContext(react$1.ReviewRailContext);react.useEffect(()=>de?.register(),[de]);let j=N.paneOpen,I=react.useMemo(()=>p?N.items.filter(f=>p(f)):N.items,[N.items,p]),Ke=react.useMemo(()=>{let f=new Map;for(let v of I)v.author&&!f.has(v.author)&&f.set(v.author,f.size);return f},[I]),Ye=react.useMemo(()=>{let f=new Map;for(let v of I)f.set(v.id,v);return f},[I]),[Be,pt]=react.useState(()=>new Map),ye=react.useCallback((f,v)=>{v<=0||pt(x=>{if(x.get(f)===v)return x;let _=new Map(x);return _.set(f,v),_});},[]),be=react.useRef(new WeakMap),ee=react.useRef(null),je=react.useCallback((f,v)=>{!f||typeof ResizeObserver>"u"||(ye(v,f.offsetHeight),ee.current??(ee.current=new ResizeObserver(x=>{for(let _ of x){let h=be.current.get(_.target);h&&ye(h,_.target.offsetHeight);}})),be.current.get(f)!==v&&(be.current.set(f,v),ee.current.observe(f)));},[ye]);react.useEffect(()=>()=>ee.current?.disconnect(),[]);let[S,wt]=react.useState(Mt);react.useEffect(()=>{let f=D.current;if(!y||!f)return;let v=f.offsetParent,x=v?.querySelector(".docx-paginated-surface")??null,_=()=>{wt(M=>{let H=x&&v?x.getBoundingClientRect():null,O=H&&v?v.getBoundingClientRect():null,V={scale:y.getRenderScale(),top:H&&O&&v?H.top-O.top-v.clientTop+v.scrollTop:0,left:H&&O&&v?H.right-O.left-v.clientLeft+v.scrollLeft+Dt:null};return M.scale===V.scale&&M.top===V.top&&M.left===V.left?M:V});};_();let h=new ResizeObserver(_);return v&&h.observe(v),x&&h.observe(x),()=>h.disconnect()},[y,I,u,r]),react.useEffect(()=>{let f=D.current;if(!y||!f)return;let v=x=>{let _=x.target;if(!(_ instanceof Node)||f.contains(_))return;let h=f.offsetParent;!h||!h.contains(_)||h.querySelector(".docx-paginated-surface")?.contains(_)||y.setActiveReviewItem(null);};return document.addEventListener("mousedown",v,true),()=>document.removeEventListener("mousedown",v,true)},[y,u,r]);let[xe,Rt]=react.useState(null);react.useEffect(()=>{let f=D.current,v=f?.offsetParent;if(!v)return;let x=0,_=()=>{x=0,Rt(O=>{let V=v.scrollTop-it,ue=v.scrollTop+v.clientHeight+it;return O&&O.top===V&&O.bottom===ue?O:{top:V,bottom:ue}});},h=0,M=()=>{x===0&&(x=requestAnimationFrame(_)),f?.setAttribute("data-scrolling",""),window.clearTimeout(h),h=window.setTimeout(()=>f?.removeAttribute("data-scrolling"),150);};_(),v.addEventListener("scroll",M,{passive:true});let H=new ResizeObserver(M);return H.observe(v),()=>{x!==0&&cancelAnimationFrame(x),window.clearTimeout(h),v.removeEventListener("scroll",M),H.disconnect();}},[y,u,r]);let[F,ge]=react.useState(null),Fe=react.useCallback(()=>{y&&(y.surface?.retainSelection(),E(true),ge(y.getSelectionPlacement()?.anchorY??null));},[y,E]),Ze=react.useCallback(()=>{y?.surface?.releaseSelection(),ge(null),y?.focus();},[y]);react.useEffect(()=>{j||F===null||(y?.surface?.releaseSelection(),ge(null));},[j,F,y]);let Ue=F??N.selectionAnchorY,q=react.useMemo(()=>{let f=Ae(I);return I.filter(v=>!ke(v,f))},[I]),qe=react.useMemo(()=>{if(F===null)return q;let f=q.findIndex(x=>x.anchorY!==null&&x.anchorY>F),v={key:ve,anchorY:F};return f===-1?[...q,v]:[...q.slice(0,f),v,...q.slice(f)]},[q,F]),ze=react.useMemo(()=>{let f=new Map(Be);for(let v of q){if(f.has(v.key))continue;let x=v.text.length+(v.kind==="revision"?v.replacedText?.length??0:0),_=Math.min(6,Math.max(1,Math.ceil(x/36)));f.set(v.key,64+_*20);}return f},[Be,q]),{stacked:he,collapsedKeys:Qe}=react.useMemo(()=>{let f=S.scale,v=new Map,x=new Set,_=Number.NEGATIVE_INFINITY;for(let h of qe){let M=h.anchorY===null?Number.isFinite(_)?_:0:Math.max(h.anchorY,_);v.set(h.key,M);let H=h.anchorY===null?0:(M-h.anchorY)*f,O="isActive"in h&&h.isActive,V=H>Ot&&!O&&h.key!==ve;V&&x.add(h.key);let ue=V?Lt:ze.get(h.key)??St;_=M+(ue+c)/f;}return {stacked:v,collapsedKeys:x}},[qe,ze,c,S.scale]),Ne=Ue===null?null:S.top+(he.get(ve)??Ue)*S.scale,Ge=n?.className,yt=react.useMemo(()=>({t:o,cardClassName:Ge,review:{...N,items:I},allItems:T.items,authorSlots:Ke,byId:Ye,measure:je,beginDraft:Fe,endDraft:Ze}),[o,Ge,N,T.items,I,Ke,Ye,je,Fe,Ze]);if(r||u)return null;let We={ref:D,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":I.length,"data-open":j?"":void 0,role:"complementary","aria-label":P("review.ariaLabel"),onMouseDown:U,style:S.left===null?void 0:{left:S.left,right:"auto"}},Xe=typeof t=="function"?{}:lt(t),te=(f,v)=>f in Xe?Xe[f]:v,Je=a?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[te("AddComment",jsxRuntime.jsx(Te,{top:Ne,drafting:F!==null})),!j||F===null||Ne===null?null:te("Draft",jsxRuntime.jsx(Me,{top:Ne})),te("Balloon",jsxRuntime.jsx(De,{}))]}):null,bt=a?j?te("List",jsxRuntime.jsx(fe,{stack:d,positions:he,collapsed:Qe,scale:S.scale,offset:S.top,window:xe,children:t})):te("Markers",jsxRuntime.jsx(Ie,{scale:S.scale,offset:S.top,window:xe})):typeof t=="function"?null:t;return jsxRuntime.jsx(Pe.Provider,{value:yt,children:l&&react.isValidElement(t)?jsxRuntime.jsx(react$1.Slot,{...We,children:react.cloneElement(t,void 0,t.props.children,a?jsxRuntime.jsx(fe,{stack:d,positions:he,collapsed:Qe,scale:S.scale,offset:S.top,window:xe}):null,Je)}):jsxRuntime.jsxs("aside",{...We,children:[j&&i!==void 0?jsxRuntime.jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:i}):null,bt,Je]})})}function fe({stack:e=true,positions:i,collapsed:l,scale:r=1,offset:t=0,window:o=null,children:n,className:a,hidden:d}){let{review:c,measure:p,cardClassName:w}=$();if(d)return null;let R=Ae(c.items),y=c.items.filter(u=>!ke(u,R));return y.length===0?typeof n=="function"?null:jsxRuntime.jsx(Se,{}):jsxRuntime.jsx("div",{className:`docx-review__list${a?` ${a}`:""}`,children:y.map(u=>{let m=e?i?.get(u.key)??u.anchorY:u.anchorY,b=m==null?null:t+m*r;if(b!==null&&o&&(b<o.top||b>o.bottom))return null;let T=b===null?{}:{position:"absolute",top:b};return jsxRuntime.jsx(k.Provider,{value:u,children:jsxRuntime.jsx("div",{className:"docx-review__slot",style:T,...l?.has(u.key)?{"data-collapsed":""}:{},ref:N=>{p(N,u.key);},children:typeof n=="function"?n(u):jsxRuntime.jsx(Le,{...w?{className:w}:{},children:n})})},u.key)})})}fe.docxReviewPart="List";function Ie({scale:e=1,offset:i=0,window:l=null,className:r,hidden:t}){let{review:o}=$(),n=B();if(t)return null;let a=Ae(o.items),d=o.items.filter(c=>!ke(c,a));return jsxRuntime.jsx("div",{className:`docx-review__markers${r?` ${r}`:""}`,children:d.map(c=>{if(c.anchorY===null)return null;let p=i+c.anchorY*e;return l&&(p<l.top||p>l.bottom)?null:jsxRuntime.jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":c.kind==="revision"?c.revisionKind:c.kind,style:{position:"absolute",top:p},title:c.author?`${c.author}: ${c.text}`:c.text,"aria-label":`${n("review.showPane")}: ${c.author?`${c.author}. `:""}${c.text}`,onMouseDown:U,onClick:()=>{o.setPaneOpen(true),o.setActive(c.key);},children:oe(Kt)},c.key)})})}Ie.docxReviewPart="Markers";function Te({top:e,drafting:i=false,className:l,hidden:r,children:t}){let{beginDraft:o}=$(),n=B();if(r||i||e===null)return null;let a={type:"button",className:`docx-review__add${l?` ${l}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":n("common.comment"),title:n("common.comment"),onMouseDown:U,onClick:o};return t?jsxRuntime.jsx(react$1.Slot,{...a,children:t}):jsxRuntime.jsx("button",{...a,children:oe(Vt)})}Te.docxReviewPart="AddComment";function Me({top:e,className:i,hidden:l}){let{review:r,endDraft:t,measure:o}=$(),n=B(),[a,d]=react.useState(""),[c,p]=react.useState(false),w=react.useRef(null),R=react.useId();react.useEffect(()=>{w.current?.focus({preventScroll:true});},[]);let y=react.useCallback(()=>{if(a.trim().length===0)return;let u=r.comment(a.trim());p(!u),u&&(d(""),t());},[a,r,t]);return l?null:jsxRuntime.jsx("div",{className:`docx-review__slot${i?` ${i}`:""}`,style:{position:"absolute",top:e},ref:u=>{o(u,ve);},children:jsxRuntime.jsx("div",{className:"docx-review__card","data-testid":"review-draft","data-draft":"",children:jsxRuntime.jsxs("form",{className:"docx-review__reply-box",onSubmit:u=>{u.preventDefault(),y();},children:[jsxRuntime.jsx("label",{className:"docx-editor-sr-only",htmlFor:R,children:n("comments.addComment")}),jsxRuntime.jsx("input",{id:R,ref:w,"data-testid":"review-draft-input",className:"docx-review__input",value:a,placeholder:n("comments.addComment"),...c?{"aria-invalid":true}:{},onChange:u=>{p(false),d(u.target.value);},onKeyDown:u=>{if(u.key==="Escape"){u.preventDefault(),t();return}u.key==="Enter"&&(u.preventDefault(),y());}}),jsxRuntime.jsxs("div",{className:"docx-review__reply-actions",children:[jsxRuntime.jsx("button",{type:"button","data-testid":"review-draft-cancel",className:"docx-review__text-button",onMouseDown:U,onClick:t,children:n("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:a.trim().length===0,children:n("common.comment")})]}),c?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert",children:n("review.commentRefused")}):null]})})})}Me.docxReviewPart="Draft";function De({className:e,hidden:i}){let{review:l,allItems:r,authorSlots:t}=$(),o=B(),n=react.useRef(null),[a,d]=react.useState(null),c=react.useRef(false);c.current=a!==null,react.useEffect(()=>{let u=n.current,m=u?.closest(".docx-review"),b=m?.closest(".docx-editor__scroll-container")??m?.offsetParent;if(!u||!m||!b)return;let T=(E,C)=>{let P=m.getBoundingClientRect(),D=E.getBoundingClientRect(),de=E.ownerDocument.defaultView?.innerHeight??1/0,j=Number(E.dataset.start),I=Number(E.dataset.end);d({revisionId:E.dataset.revisionId,author:E.dataset.revisionAuthor??"",...E.dataset.revisionDate!==void 0?{date:E.dataset.revisionDate}:{},...E.dataset.revisionKind!==void 0?{kind:E.dataset.revisionKind}:{},structuralSite:C,...E.dataset.paragraphId!==void 0?{paragraphId:E.dataset.paragraphId}:{},...Number.isFinite(j)?{start:j}:{},...Number.isFinite(I)?{end:I}:{},left:D.left-P.left,top:D.top-P.top,bottom:D.bottom-P.top,above:D.bottom+220>de});},N=E=>{let C=E.target;if(!(C instanceof Element)||u.contains(C))return;let P=C.closest("[data-revision-id]");if(P instanceof HTMLElement&&b.contains(P)){let D=P.classList.contains("docx-table-row--revision");if(P.dataset.revisionKind==="format"||D){T(P,D);return}}c.current&&d(null);};return b.addEventListener("pointerdown",N,true),b.addEventListener("mousedown",N,true),()=>{b.removeEventListener("pointerdown",N,true),b.removeEventListener("mousedown",N,true);}},[]);let p=react.useMemo(()=>{if(!a)return null;let u=null,m=false,b=null,T=false,N=null,E=false;for(let C of r)if(!(C.kind!=="revision"||C.item.kind!=="revision")){for(let P of C.item.addresses)if(P.id===a.revisionId){if(P.author===a.author){if(P.date===a.date)return C;u===null?u=C:u!==C&&(m=true);}b===null?b=C:b!==C&&(T=true);}if(a.paragraphId!==void 0&&a.start!==void 0&&a.end!==void 0&&(C.revisionKind==="format"||C.revisionKind==="structural")){for(let P of C.item.ranges)if(P.start.paragraphId===a.paragraphId&&P.start.offset<a.end&&P.end.offset>a.start){N===null?N=C:N!==C&&(E=true);break}}}return u!==null&&!m?u:b!==null&&!T?b:N!==null&&!E?N:null},[r,a]),w=p&&(p.revisionKind==="format"||p.revisionKind==="structural")?p:null,R=react.useRef(false);if(react.useEffect(()=>{if(w){R.current=true;return}R.current&&(R.current=false,d(null));},[w]),i)return null;let y=a?.kind==="format"?"format":"structural";return jsxRuntime.jsx("div",{ref:n,className:`docx-review__balloon-root${e?` ${e}`:""}`,children:a===null?null:jsxRuntime.jsx("div",{className:"docx-review__balloon","data-testid":"review-balloon",style:{left:a.left,top:a.above?a.top-6:a.bottom+6,transform:a.above?"translateY(-100%)":void 0},onMouseDown:U,children:w?jsxRuntime.jsx(k.Provider,{value:w,children:jsxRuntime.jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":w.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(t.get(w.author)??0)%st})`},onClick:()=>l.setActive(w.key),children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(re,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(ie,{}),jsxRuntime.jsx(ae,{})]}),w.kind==="revision"&&!w.readOnly?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[jsxRuntime.jsx(pe,{}),jsxRuntime.jsx(we,{})]}):null]}),jsxRuntime.jsx(se,{})]})}):jsxRuntime.jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":y,children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx("span",{className:"docx-review__avatar","aria-hidden":"true",children:Zt(a.author)}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx("span",{className:"docx-review__author",children:a.author||o("comments.unknown")}),a.date?jsxRuntime.jsx(Ut,{raw:a.date}):null]})]}),jsxRuntime.jsx("div",{className:"docx-review__summary",children:jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":y,children:o(dt(y))})})]})})})}De.docxReviewPart="Balloon";function Zt(e){let i=e.trim().split(/\s+/).filter(Boolean);return i.length===0?"?":i.slice(0,2).map(l=>l[0].toUpperCase()).join("")}function Ut({raw:e}){let i=new Date(e);return Number.isNaN(i.getTime())?null:jsxRuntime.jsx("time",{className:"docx-review__time",dateTime:e,children:ct.format(i)})}function Se({className:e,hidden:i,children:l}){let r=B();return i?null:jsxRuntime.jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:l??r("review.empty")})}Se.docxReviewPart="Empty";function Le({className:e,asChild:i,hidden:l,children:r}){let{review:t,authorSlots:o}=$(),n=react.useContext(k),a=react.useId();if(l||!n)return null;let d=o.get(n.author)??0,c={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${a}-author ${a}-summary`,"data-kind":n.kind==="revision"?n.revisionKind??"revision":n.kind,...n.kind==="custom"&&n.item.kind==="custom"?{"data-node-name":n.item.name}:{},...n.isActive?{"data-active":""}:{},...n.kind==="comment"&&n.resolved?{"data-resolved":""}:{},style:{"--doc-review-author":`var(--doc-review-author-${d%st})`},tabIndex:0,role:"button",id:a,onMouseDown:p=>{p.target?.closest("[data-review-selectable]")||p.currentTarget.focus({preventScroll:true});},onClick:()=>t.setActive(n.key),onKeyDown:p=>{p.target===p.currentTarget&&(p.key!=="Enter"&&p.key!==" "||(p.preventDefault(),t.setActive(n.key)));}};return i?jsxRuntime.jsx(react$1.Slot,{...c,children:r}):jsxRuntime.jsx("div",{...c,children:jsxRuntime.jsx(qt,{children:r})})}Le.docxReviewPart="Card";function qt({children:e}){let i=react.useContext(k),l=react.useMemo(()=>lt(e),[e]),r=(o,n)=>o in l?l[o]:n;if(!i)return null;if(i.kind==="custom"&&i.item.kind==="custom"){let o=i.item;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[r("Avatar",null),jsxRuntime.jsx("div",{className:"docx-review__meta",children:r("Author",jsxRuntime.jsx("span",{className:"docx-review__author","data-testid":"review-custom-title",children:o.title}))})]}),r("Summary",o.detail?jsxRuntime.jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsxRuntime.jsx("span",{className:"docx-review__text",children:o.detail})}):null),l.__extra]})}let t=i.kind==="revision"&&!i.readOnly;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[r("Avatar",jsxRuntime.jsx(re,{})),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[r("Author",jsxRuntime.jsx(ie,{})),r("Time",jsxRuntime.jsx(ae,{}))]}),t||i.kind==="comment"?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[r("Accept",jsxRuntime.jsx(pe,{})),r("Reject",jsxRuntime.jsx(we,{})),r("Delete",jsxRuntime.jsx(Re,{}))]}):null]}),r("Summary",jsxRuntime.jsx(se,{})),r("Replies",jsxRuntime.jsx(Oe,{})),r("Reply",jsxRuntime.jsx($e,{})),l.__extra]})}function lt(e){let i={},l=[],r=t=>{if(Array.isArray(t)){t.forEach(r);return}if(!t||typeof t!="object"||!("type"in t)){t&&l.push(t);return}if(t.type===react.Fragment){r(t.props.children);return}let o=t.type.docxReviewPart;o?i[o]=t:l.push(t);};return r(e),l.length>0&&(i.__extra=l),i}function re({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(k);if(l||!t||r===void 0&&!t.initials)return null;let o={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return i?jsxRuntime.jsx(react$1.Slot,{...o,children:r}):jsxRuntime.jsx("span",{...o,children:r??t.initials})}re.docxReviewPart="Avatar";function ie({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(k),o=B();if(l||!t)return null;let n=t.author||o("comments.unknown"),a={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return i?jsxRuntime.jsx(react$1.Slot,{...a,children:r}):jsxRuntime.jsx("span",{...a,children:r??n})}ie.docxReviewPart="Author";function ae({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(k);if(l||!t)return null;let o=t.date;if(!o)return null;let n=new Date(o);if(Number.isNaN(n.getTime()))return null;let a={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:o};return i?jsxRuntime.jsx(react$1.Slot,{...a,children:r}):jsxRuntime.jsx("time",{...a,children:r??ct.format(n)})}ae.docxReviewPart="Time";var ct=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function se({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(k),o=B();if(l||!t)return null;let n=t.text,a=t.kind!=="revision"?null:o(dt(t.revisionKind)),d=t.kind==="revision"&&t.revisionKind==="replace",c={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return i?jsxRuntime.jsx(react$1.Slot,{...c,children:r}):jsxRuntime.jsx("div",{...c,children:r??(d?jsxRuntime.jsxs("span",{className:"docx-review__text",children:[o("review.replaced")," ",jsxRuntime.jsxs("span",{className:"docx-review__removed",children:['"',t.replacedText,'"']})," ",o("review.replacedWith")," ",jsxRuntime.jsxs("span",{className:"docx-review__added",children:['"',n,'"']})]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[a?jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":t.kind==="revision"?t.revisionKind:"revision",children:a}):null,n?jsxRuntime.jsx("span",{className:"docx-review__text",children:n}):null]}))})}se.docxReviewPart="Summary";function dt(e){switch(e){case "insert":return "review.inserted";case "delete":return "review.deleted";case "replace":return "review.replaced";case "moveFrom":return "review.movedFrom";case "moveTo":return "review.movedTo";case "format":return "revisions.runPropertiesChanged";case "paragraphMark":return "revisions.paragraphMarkInserted";default:return "review.structural"}}function pe({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=react.useContext(k),a=B();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.accept"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.accept(n);}};return i?jsxRuntime.jsx(react$1.Slot,{...c,children:r}):jsxRuntime.jsx("button",{...c,children:t??r??oe(Yt)})}pe.docxReviewPart="Accept";function we({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=react.useContext(k),a=B();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.reject"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.reject(n);}};return i?jsxRuntime.jsx(react$1.Slot,{...c,children:r}):jsxRuntime.jsx("button",{...c,children:t??r??oe(Bt)})}we.docxReviewPart="Reject";function Re({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=react.useContext(k),{t:a}=react$1.useTranslation();if(l||!n||n.kind==="custom"||n.kind==="revision"&&n.readOnly)return null;let d=n.kind==="comment"?a("review.deleteComment"):a("review.discardChange"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.remove(n);}};return i?jsxRuntime.jsx(react$1.Slot,{...c,children:r}):jsxRuntime.jsx("button",{...c,children:t??r??oe(jt)})}Re.docxReviewPart="Delete";function Oe({className:e,hidden:i}){let{byId:l}=$(),r=react.useContext(k);if(i||!r||r.kind==="custom")return null;let t=r.replyIds.map(o=>l.get(o)).filter(o=>o!==void 0);return t.length===0?null:jsxRuntime.jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:t.map(o=>jsxRuntime.jsx(k.Provider,{value:o,children:jsxRuntime.jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(re,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(ie,{}),jsxRuntime.jsx(ae,{})]}),jsxRuntime.jsx("div",{className:"docx-review__actions",children:jsxRuntime.jsx(Re,{})})]}),jsxRuntime.jsx(se,{})]})},o.key))})}Oe.docxReviewPart="Replies";function $e({className:e,hidden:i,children:l}){let{review:r}=$(),t=react.useContext(k),o=B(),[n,a]=react.useState(""),[d,c]=react.useState(false),p=react.useId(),w=react.useCallback(()=>{if(!t||n.trim().length===0)return;let R=r.reply(t,n.trim());c(!R),R&&a("");},[t,n,r]);return i||!t||!t.isActive?null:l?jsxRuntime.jsx(jsxRuntime.Fragment,{children:l}):jsxRuntime.jsxs("form",{className:`docx-review__reply-box${e?` ${e}`:""}`,onSubmit:R=>{R.preventDefault(),w();},children:[jsxRuntime.jsx("label",{className:"docx-editor-sr-only",htmlFor:p,children:o("comments.replyPlaceholder")}),jsxRuntime.jsx("input",{id:p,"data-testid":"review-reply-input",className:"docx-review__input",value:n,placeholder:o("comments.replyPlaceholder"),...d?{"aria-invalid":true,"data-refused":""}:{},onChange:R=>{c(false),a(R.target.value);},onClick:R=>R.stopPropagation(),onKeyDown:R=>{R.key==="Enter"&&(R.preventDefault(),w());}}),jsxRuntime.jsxs("div",{className:"docx-review__reply-actions",children:[jsxRuntime.jsx("button",{type:"button","data-testid":"review-reply-cancel",className:"docx-review__text-button",onMouseDown:U,onClick:R=>{R.stopPropagation(),a(""),c(false),r.setActive(null);},children:o("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:n.trim().length===0,children:o("review.reply")})]}),d?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:o("review.replyRefused")}):null]})}$e.docxReviewPart="Reply";var zt=Object.assign(Ft,{List:fe,Empty:Se,Card:Le,Avatar:re,Author:ie,Time:ae,Summary:se,Accept:pe,Reject:we,Delete:Re,Replies:Oe,Reply:$e,Markers:Ie,AddComment:Te,Draft:Me,Balloon:De});function le(e){let i=react$1.useDocxEditor();return react.useMemo(()=>e||(i?.getCustomNodeDefinitions()??[]).filter(chunkMNK6DXJQ_cjs.j),[e,i])}var Xt=".docx-content-control-boundary";function X(e,i){let{node:l,definition:r,controlId:t}=e,o=t?i?.getReviewItems().find(d=>d.kind==="custom"&&d.item.id===t):void 0;if(o&&o.kind==="custom"){let d=o.item;return {...l,attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data},...t?{nodeId:t}:{}}}let n=t?Jt(i,t,r):void 0,a=r.fromDocx?r.fromDocx({attrs:l.attrs,text:"",...n===void 0?{}:{data:n}}):l.attrs;return a===null?null:{...l,attrs:a,...n===void 0?{}:{data:n},...t?{nodeId:t}:{}}}function Jt(e,i,l){let r=e?.surface;if(!r)return;let t=r.session.part(),o=store.customNodePayloadsByControl(r.session.currentPackage(),t.name).get(i);if(!o)return;let n=chunkMNK6DXJQ_cjs.e(l.schema,o.data);return n.ok?n.value:void 0}function J(e,i){let l=e?.closest?.(Xt),r=l?.closest(".docx-content-control-chrome"),t=r?.getAttribute("data-tag"),o=t?chunkMNK6DXJQ_cjs.c(t):null;if(!l||!o||!t)return null;let n=i.find(a=>a.tagPrefix===o.prefix&&a.name===o.name);return n?{node:{name:o.name,attrs:o.attrs,tag:t,rect:l.getBoundingClientRect()},definition:n,controlId:r?.getAttribute("data-docx-content-control")??null}:null}var He=".docx-content-control-boundary",tn=e=>{if(!chunkMNK6DXJQ_cjs.k.test(e.tagPrefix)||!chunkMNK6DXJQ_cjs.k.test(e.name))return [];let i=`${e.tagPrefix}:${e.name}`;return [`.docx-content-control-chrome[data-tag="${i}"]`,`.docx-content-control-chrome[data-tag^="${i}?"]`]};function nn(e){let{onNodeClick:i,onNodeHover:l}=e,r=react$1.useDocxEditor(),t=le(e.nodes);return react.useEffect(()=>{let o=document.createElement("style"),n=[];for(let a of t){let d=tn(a);if(d.length===0)continue;let c=a.chrome?.color!==void 0&&CSS.supports("color",a.chrome.color)?a.chrome.color:"#2563eb";n.push(`${d.map(p=>`${p} ${He}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${c} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return o.textContent=n.join(`
2
+ `),document.head.append(o),()=>o.remove()},[t]),react.useEffect(()=>{let o=null,n=null,a=w=>J(document.elementFromPoint(w.clientX,w.clientY),t),d=w=>{let R=w.button===0?a(w):null;o=R?.controlId??null,n=R?.node.tag??null;},c=w=>{let R=o,y=n;if(o=null,n=null,y===null)return;let u=a(w);if(!u||u.node.tag!==y||R!==null&&u.controlId!==R)return;let m=X(u,r);m&&(u.definition.onClick?.(m),i?.(m));},p=w=>{let R=J(w.target,t);if(!R||w.relatedTarget?.closest?.(He)===w.target.closest(He))return;let u=X(R,r);u&&(R.definition.onHover?.(u),l?.(u));};return document.addEventListener("pointerdown",d,true),document.addEventListener("pointerup",c,true),document.addEventListener("mouseover",p),()=>{document.removeEventListener("pointerdown",d,true),document.removeEventListener("pointerup",c,true),document.removeEventListener("mouseover",p);}},[t,r,i,l]),null}function ft(e){let{onEditNode:i,onRemoveRefused:l,remove:r=true}=e,t=le(e.nodes),o=react$1.useContextMenuTarget(),n=react$1.useDocxEditor(),{t:a}=react$1.useTranslation(),d=react.useMemo(()=>o?J(o,t):null,[o,t]),c=react.useMemo(()=>d?X(d,n):null,[d,n]),p=react.useMemo(()=>!d?.definition.reviewCard||!c?null:d.definition.reviewCard({attrs:c.attrs,text:c.text??"",...c.data===void 0?{}:{data:c.data}}),[d,c]);if(!d||!c)return null;let{definition:w}=d,R=w.label??w.name,y=w.onEdit!==void 0||i!==void 0,u=r&&c.nodeId!==void 0&&n!==null;return !p&&!y&&!u?null:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[p?jsxRuntime.jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-title",children:p.title}),p.detail?jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-detail",children:p.detail}):null]}):null,y?jsxRuntime.jsx(react$1.ContextMenuItem,{label:a("contextMenu.editCustomNode",{label:R}),className:"docx-contextmenu__custom-edit",onSelect:()=>{w.onEdit?.(c),i?.(c,w);}}):null,u?jsxRuntime.jsx(react$1.ContextMenuItem,{label:a("contextMenu.removeCustomNode",{label:R}),className:"docx-contextmenu__custom-remove",onSelect:()=>{let m=chunkMNK6DXJQ_cjs.q(n,c.nodeId);m.ok||l?.(c,m.reason);}}):null,jsxRuntime.jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}ft.docxRowPlacement="start";Object.defineProperty(exports,"reviewModule",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.o}});exports.CustomNodeChrome=nn;exports.CustomNodeContextMenu=ft;exports.DocxEditorReview=zt;exports.activatedCustomNodeOf=X;exports.resolveCustomNodeActivation=J;exports.useCustomNodeDefinitions=le;exports.useReview=me;exports.useReviewItem=Tt;exports.useReviewOf=rt;exports.useStackedReviewPositions=Nt;
@@ -1,5 +1,5 @@
1
- import { C as CustomNodeDefinition, A as ActivatedCustomNode } from '../define-custom-node-CkkDPdB0.cjs';
2
- export { P as ProLicenseOptions, b as ReviewModuleOptions, e as reviewModule } from '../define-custom-node-CkkDPdB0.cjs';
1
+ import { a as CustomNodeDefinition, b as ActivatedCustomNode, A as AnyCustomNodeDefinition } from '../define-custom-node-BTTX66B3.cjs';
2
+ export { P as ProLicenseOptions, j as ReviewModuleOptions, q as reviewModule } from '../define-custom-node-BTTX66B3.cjs';
3
3
  import * as react from 'react';
4
4
  import { ReactNode } from 'react';
5
5
  import { ToolbarTranslate } from '@docx-editor.dev/react';
@@ -28,10 +28,16 @@ interface UseReviewReturn {
28
28
  readonly activeKey: string | null;
29
29
  /** Card to document: selects the item's range and scrolls to it. */
30
30
  readonly setActive: (key: string | null) => void;
31
- /** Accept a revision. A no-op on an item whose `readOnly` is true. */
32
- readonly accept: (item: ReviewItemView) => void;
33
- /** Reject a revision. A no-op on an item whose `readOnly` is true. */
34
- readonly reject: (item: ReviewItemView) => void;
31
+ /**
32
+ * Accept a revision. Reports whether it landed.
33
+ *
34
+ * False for an item whose `readOnly` is true, and equally for a resolution the engine
35
+ * refuses on other grounds — a document open for viewing refuses every one. A caller
36
+ * that assumed success drew a live button that did nothing.
37
+ */
38
+ readonly accept: (item: ReviewItemView) => boolean;
39
+ /** Reject a revision. Reports whether it landed, on the same terms as {@link accept}. */
40
+ readonly reject: (item: ReviewItemView) => boolean;
35
41
  /**
36
42
  * Discard the item: delete a comment thread, or reject a tracked change.
37
43
  *
@@ -62,7 +68,7 @@ interface UseReviewReturn {
62
68
  readonly paneOpen: boolean;
63
69
  /** Open or close the pane — the same toggle the toolbar button runs. */
64
70
  readonly setPaneOpen: (open: boolean) => void;
65
- /** True while the engine has no document, so a surface can render nothing rather than empty. */
71
+ /** False until the engine has a document, so a surface can render nothing rather than empty. */
66
72
  readonly ready: boolean;
67
73
  }
68
74
  /**
@@ -467,9 +473,9 @@ declare const DocxEditorReview: DocxEditorReviewNamespace;
467
473
  /**
468
474
  * Props for {@link CustomNodeChrome}: which definitions to paint, and where activation goes.
469
475
  *
470
- * The two hooks are the COMPONENT-level twins of a definition's own `onClick`/`onHover`. Host UI
471
- * state — a popover, a dialog — belongs here rather than on the definition, which is shared by
472
- * every surface and has no React context to close over.
476
+ * The two hooks are the component-level twins of a definition's own `onClick`/`onHover`. Host UI
477
+ * state belongs here rather than on the definition, which every surface shares and which has no
478
+ * React context to close over.
473
479
  *
474
480
  * @public
475
481
  */
@@ -483,9 +489,9 @@ interface CustomNodeChromeProps {
483
489
  /**
484
490
  * Paints custom-node chips and dispatches pointer activation on them.
485
491
  *
486
- * Renders nothing itself — it installs the per-definition chip styles and the click/hover
487
- * listeners, so mount it once anywhere inside the editor provider. Chip colours come from each
488
- * definition's `chrome`, which is HOST-authored and never file data.
492
+ * Renders nothing itself — it installs the chip styles and the activation listeners, so mount it
493
+ * once anywhere inside the editor provider. Chip colours come from each definition's `chrome`,
494
+ * which is host-authored and never file data.
489
495
  *
490
496
  * @example
491
497
  * ```tsx
@@ -524,6 +530,15 @@ interface CustomNodeContextMenuProps {
524
530
  * (a registered review module resolves it). `false` removes the row.
525
531
  */
526
532
  readonly remove?: boolean;
533
+ /**
534
+ * Called when Remove was refused, with the engine's own reason.
535
+ *
536
+ * A locked wrapper and a document open for viewing both refuse, and without somewhere to
537
+ * report that the menu simply closed and left the chip where it was. Optional: a host
538
+ * that does not pass one keeps the silent behaviour, which is right for a surface with
539
+ * no place to show a message.
540
+ */
541
+ readonly onRemoveRefused?: (node: ActivatedCustomNode, reason: string) => void;
527
542
  }
528
543
  /**
529
544
  * Renders the pointed-at node's card data plus its "Edit {label}" row, or nothing when the
@@ -543,7 +558,7 @@ declare namespace CustomNodeContextMenu {
543
558
  * every surface default to it is the intended shape; the prop exists for a host that wants
544
559
  * one surface scoped narrower.
545
560
  */
546
- declare function useCustomNodeDefinitions(nodes: readonly CustomNodeDefinition[] | undefined): readonly CustomNodeDefinition[];
561
+ declare function useCustomNodeDefinitions(nodes: readonly AnyCustomNodeDefinition[] | undefined): readonly AnyCustomNodeDefinition[];
547
562
  /**
548
563
  * What {@link resolveCustomNodeActivation} found under a pointer target.
549
564
  *
@@ -555,7 +570,7 @@ declare function useCustomNodeDefinitions(nodes: readonly CustomNodeDefinition[]
555
570
  interface ResolvedCustomNodeActivation {
556
571
  /** RAW decode: attrs straight from the tag, `fromDocx` not yet applied. */
557
572
  readonly node: ActivatedCustomNode;
558
- readonly definition: CustomNodeDefinition;
573
+ readonly definition: AnyCustomNodeDefinition;
559
574
  /** The control's canonical node id, from the chrome layer — for review-item lookups. */
560
575
  readonly controlId: string | null;
561
576
  }
@@ -587,6 +602,6 @@ declare function activatedCustomNodeOf(resolved: ResolvedCustomNodeActivation, e
587
602
  *
588
603
  * @public
589
604
  */
590
- declare function resolveCustomNodeActivation(target: EventTarget | null, nodes: readonly CustomNodeDefinition[]): ResolvedCustomNodeActivation | null;
605
+ declare function resolveCustomNodeActivation(target: EventTarget | null, nodes: readonly AnyCustomNodeDefinition[]): ResolvedCustomNodeActivation | null;
591
606
 
592
607
  export { CustomNodeChrome, type CustomNodeChromeProps, CustomNodeContextMenu, type CustomNodeContextMenuProps, DocxEditorReview, type DocxEditorReviewNamespace, type ResolvedCustomNodeActivation, type ReviewActionProps, type ReviewItemView, type ReviewPartProps, type ReviewProps, type UseReviewReturn, activatedCustomNodeOf, resolveCustomNodeActivation, useCustomNodeDefinitions, useReview, useReviewItem, useReviewOf, useStackedReviewPositions };
@@ -1,5 +1,5 @@
1
- import { C as CustomNodeDefinition, A as ActivatedCustomNode } from '../define-custom-node-CkkDPdB0.js';
2
- export { P as ProLicenseOptions, b as ReviewModuleOptions, e as reviewModule } from '../define-custom-node-CkkDPdB0.js';
1
+ import { a as CustomNodeDefinition, b as ActivatedCustomNode, A as AnyCustomNodeDefinition } from '../define-custom-node-BTTX66B3.js';
2
+ export { P as ProLicenseOptions, j as ReviewModuleOptions, q as reviewModule } from '../define-custom-node-BTTX66B3.js';
3
3
  import * as react from 'react';
4
4
  import { ReactNode } from 'react';
5
5
  import { ToolbarTranslate } from '@docx-editor.dev/react';
@@ -28,10 +28,16 @@ interface UseReviewReturn {
28
28
  readonly activeKey: string | null;
29
29
  /** Card to document: selects the item's range and scrolls to it. */
30
30
  readonly setActive: (key: string | null) => void;
31
- /** Accept a revision. A no-op on an item whose `readOnly` is true. */
32
- readonly accept: (item: ReviewItemView) => void;
33
- /** Reject a revision. A no-op on an item whose `readOnly` is true. */
34
- readonly reject: (item: ReviewItemView) => void;
31
+ /**
32
+ * Accept a revision. Reports whether it landed.
33
+ *
34
+ * False for an item whose `readOnly` is true, and equally for a resolution the engine
35
+ * refuses on other grounds — a document open for viewing refuses every one. A caller
36
+ * that assumed success drew a live button that did nothing.
37
+ */
38
+ readonly accept: (item: ReviewItemView) => boolean;
39
+ /** Reject a revision. Reports whether it landed, on the same terms as {@link accept}. */
40
+ readonly reject: (item: ReviewItemView) => boolean;
35
41
  /**
36
42
  * Discard the item: delete a comment thread, or reject a tracked change.
37
43
  *
@@ -62,7 +68,7 @@ interface UseReviewReturn {
62
68
  readonly paneOpen: boolean;
63
69
  /** Open or close the pane — the same toggle the toolbar button runs. */
64
70
  readonly setPaneOpen: (open: boolean) => void;
65
- /** True while the engine has no document, so a surface can render nothing rather than empty. */
71
+ /** False until the engine has a document, so a surface can render nothing rather than empty. */
66
72
  readonly ready: boolean;
67
73
  }
68
74
  /**
@@ -467,9 +473,9 @@ declare const DocxEditorReview: DocxEditorReviewNamespace;
467
473
  /**
468
474
  * Props for {@link CustomNodeChrome}: which definitions to paint, and where activation goes.
469
475
  *
470
- * The two hooks are the COMPONENT-level twins of a definition's own `onClick`/`onHover`. Host UI
471
- * state — a popover, a dialog — belongs here rather than on the definition, which is shared by
472
- * every surface and has no React context to close over.
476
+ * The two hooks are the component-level twins of a definition's own `onClick`/`onHover`. Host UI
477
+ * state belongs here rather than on the definition, which every surface shares and which has no
478
+ * React context to close over.
473
479
  *
474
480
  * @public
475
481
  */
@@ -483,9 +489,9 @@ interface CustomNodeChromeProps {
483
489
  /**
484
490
  * Paints custom-node chips and dispatches pointer activation on them.
485
491
  *
486
- * Renders nothing itself — it installs the per-definition chip styles and the click/hover
487
- * listeners, so mount it once anywhere inside the editor provider. Chip colours come from each
488
- * definition's `chrome`, which is HOST-authored and never file data.
492
+ * Renders nothing itself — it installs the chip styles and the activation listeners, so mount it
493
+ * once anywhere inside the editor provider. Chip colours come from each definition's `chrome`,
494
+ * which is host-authored and never file data.
489
495
  *
490
496
  * @example
491
497
  * ```tsx
@@ -524,6 +530,15 @@ interface CustomNodeContextMenuProps {
524
530
  * (a registered review module resolves it). `false` removes the row.
525
531
  */
526
532
  readonly remove?: boolean;
533
+ /**
534
+ * Called when Remove was refused, with the engine's own reason.
535
+ *
536
+ * A locked wrapper and a document open for viewing both refuse, and without somewhere to
537
+ * report that the menu simply closed and left the chip where it was. Optional: a host
538
+ * that does not pass one keeps the silent behaviour, which is right for a surface with
539
+ * no place to show a message.
540
+ */
541
+ readonly onRemoveRefused?: (node: ActivatedCustomNode, reason: string) => void;
527
542
  }
528
543
  /**
529
544
  * Renders the pointed-at node's card data plus its "Edit {label}" row, or nothing when the
@@ -543,7 +558,7 @@ declare namespace CustomNodeContextMenu {
543
558
  * every surface default to it is the intended shape; the prop exists for a host that wants
544
559
  * one surface scoped narrower.
545
560
  */
546
- declare function useCustomNodeDefinitions(nodes: readonly CustomNodeDefinition[] | undefined): readonly CustomNodeDefinition[];
561
+ declare function useCustomNodeDefinitions(nodes: readonly AnyCustomNodeDefinition[] | undefined): readonly AnyCustomNodeDefinition[];
547
562
  /**
548
563
  * What {@link resolveCustomNodeActivation} found under a pointer target.
549
564
  *
@@ -555,7 +570,7 @@ declare function useCustomNodeDefinitions(nodes: readonly CustomNodeDefinition[]
555
570
  interface ResolvedCustomNodeActivation {
556
571
  /** RAW decode: attrs straight from the tag, `fromDocx` not yet applied. */
557
572
  readonly node: ActivatedCustomNode;
558
- readonly definition: CustomNodeDefinition;
573
+ readonly definition: AnyCustomNodeDefinition;
559
574
  /** The control's canonical node id, from the chrome layer — for review-item lookups. */
560
575
  readonly controlId: string | null;
561
576
  }
@@ -587,6 +602,6 @@ declare function activatedCustomNodeOf(resolved: ResolvedCustomNodeActivation, e
587
602
  *
588
603
  * @public
589
604
  */
590
- declare function resolveCustomNodeActivation(target: EventTarget | null, nodes: readonly CustomNodeDefinition[]): ResolvedCustomNodeActivation | null;
605
+ declare function resolveCustomNodeActivation(target: EventTarget | null, nodes: readonly AnyCustomNodeDefinition[]): ResolvedCustomNodeActivation | null;
591
606
 
592
607
  export { CustomNodeChrome, type CustomNodeChromeProps, CustomNodeContextMenu, type CustomNodeContextMenuProps, DocxEditorReview, type DocxEditorReviewNamespace, type ResolvedCustomNodeActivation, type ReviewActionProps, type ReviewItemView, type ReviewPartProps, type ReviewProps, type UseReviewReturn, activatedCustomNodeOf, resolveCustomNodeActivation, useCustomNodeDefinitions, useReview, useReviewItem, useReviewOf, useStackedReviewPositions };
@@ -1,2 +1,2 @@
1
- import {d,c,j,e}from'../chunk-NZOS3H23.js';export{i as reviewModule}from'../chunk-NZOS3H23.js';import {createContext,useMemo,useCallback,useRef,useContext,useEffect,useState,isValidElement,cloneElement,useId,useSyncExternalStore,Fragment as Fragment$1}from'react';import {useDocxEditor,useTranslation,ReviewRailContext,Slot,useContextMenuTarget,ContextMenuItem}from'@docx-editor.dev/react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';function me(e){let r=useDocxEditor();return nt(r,e)}function nt(e,r){let l=useCallback(p=>{if(!e)return ()=>{};let y=e.on("change",p),P=e.on("selectionChange",p);return ()=>{y(),P();}},[e]),s=useSyncExternalStore(l,()=>e?`${e.getReviewRevision()}`:"none",()=>"none"),t=useMemo(()=>e?e.getReviewItems(r):[],[e,s,r]),o=useMemo(()=>t.find(p=>p.isActive)?.key??null,[t]),i=useCallback(p=>{e?.setActiveReviewItem(p);},[e]),n=useCallback(p=>{p.kind!=="revision"||p.readOnly||e?.acceptReviewItem(p.key);},[e]),d=useCallback(p=>{p.kind!=="revision"||p.readOnly||e?.rejectReviewItem(p.key);},[e]),c=useCallback(p=>!e||p.kind==="custom"||p.kind==="revision"&&p.readOnly?false:e.deleteReviewItem(p.key).ok,[e]),v=useCallback((p,y,P)=>y.trim().length===0||!e?false:e.replyToReviewItem(p.key,y,P).ok,[e]),b=useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,s]),R=useCallback((p,y)=>p.trim().length===0||!e?false:e.addComment(p,y).ok,[e]),w=useMemo(()=>e?e.isReviewPaneOpen():true,[e,s]),f=useCallback(p=>{!e||e.isReviewPaneOpen()===p||e.exec({type:"toggleReviewPane"});},[e]);return useMemo(()=>({items:t,activeKey:o,setActive:i,accept:n,reject:d,remove:c,reply:v,selectionAnchorY:b,comment:R,paneOpen:w,setPaneOpen:f,ready:e!==null}),[t,o,i,n,d,c,v,b,R,w,f,e])}function ht(e,r,l={}){let s=l.gap??8,t=l.scale??1,o=l.defaultHeight??0;return useMemo(()=>{let i=new Map,n=Number.NEGATIVE_INFINITY;for(let d of e){if(d.anchorY===null)continue;let c=Math.max(d.anchorY,n);i.set(d.key,c),n=c+((r.get(d.key)??o)+s)/t;}return i},[e,r,s,t,o])}var Pe=createContext(null),k=createContext(null);function Pt(){return useContext(k)}var It={scale:96/72,top:0,left:null},kt=16,ve="\0compose",ot=600,it=8,At=72,Mt=64,Tt=480,Dt=Object.freeze({placement:false});function Ie(e,r){return e.kind!=="comment"?false:e.parentId!==void 0?r.has(e.parentId):e.parentRevisionId!==void 0?r.has(e.parentRevisionId):false}function ke(e){return new Set(e.map(r=>r.id))}function F(e){let r=e.target?.tagName;r==="INPUT"||r==="SELECT"||r==="TEXTAREA"||e.preventDefault();}function O(){let e=useContext(Pe);return e||St}function Y(){let{t:e}=useContext(Pe)??{},{t:r}=useTranslation();return useCallback(l=>e?.(l)??r(l),[e,r])}var St={t:void 0,cardClassName:void 0,review:{items:[],activeKey:null,setActive:()=>{},accept:()=>{},reject:()=>{},remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}},re=e=>jsx("svg",{viewBox:"0 -960 960 960",width:16,height:16,"aria-hidden":"true",focusable:"false",children:jsx("path",{d:e,fill:"currentColor"})}),Lt="M440-400h80v-120h120v-80H520v-120h-80v120H320v80h120v120ZM80-80v-720q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H240L80-80Zm126-240h594v-480H160v525l46-45Zm-46 0v-480 480Z",Ot="M240-400h480v-80H240v80Zm0-120h480v-80H240v80Zm0-120h480v-80H240v80ZM880-80 720-240H160q-33 0-56.5-23.5T80-320v-480q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v720ZM160-320h594l46 45v-525H160v480Zm0 0v-480 480Z",$t="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",Ht="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z",Vt="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z";function Kt({className:e,furniture:r,asChild:l,hidden:s,children:t,t:o,card:i,preset:n=true,stack:d=true,gap:c=8,filter:v,structural:b=false,formatting:R=false}){let w=useDocxEditor(),f=useMemo(()=>{let m=[];return b||m.push("structural"),R||m.push("format"),m.length>0?m:void 0},[b,R]),p=useMemo(()=>f?{excludeRevisionKinds:f}:void 0,[f]),y=me(Dt),P=me(p),I=P.setPaneOpen,{t:E}=useTranslation(),C=useCallback(m=>o?.(m)??E(m),[o,E]),_=useRef(null),$=useContext(ReviewRailContext);useEffect(()=>$?.register(),[$]);let q=P.paneOpen,M=useMemo(()=>v?P.items.filter(m=>v(m)):P.items,[P.items,v]),ee=useMemo(()=>{let m=new Map;for(let u of M)u.author&&!m.has(u.author)&&m.set(u.author,m.size);return m},[M]),Ke=useMemo(()=>{let m=new Map;for(let u of M)m.set(u.id,u);return m},[M]),[Ye,vt]=useState(()=>new Map),ye=useCallback((m,u)=>{u<=0||vt(x=>{if(x.get(m)===u)return x;let N=new Map(x);return N.set(m,u),N});},[]),be=useRef(new WeakMap),te=useRef(null),Be=useCallback((m,u)=>{!m||typeof ResizeObserver>"u"||(ye(u,m.offsetHeight),te.current??(te.current=new ResizeObserver(x=>{for(let N of x){let g=be.current.get(N.target);g&&ye(g,N.target.offsetHeight);}})),be.current.get(m)!==u&&(be.current.set(m,u),te.current.observe(m)));},[ye]);useEffect(()=>()=>te.current?.disconnect(),[]);let[D,ft]=useState(It);useEffect(()=>{let m=_.current;if(!w||!m)return;let u=m.offsetParent,x=u?.querySelector(".docx-paginated-surface")??null,N=()=>{ft(T=>{let H=x&&u?x.getBoundingClientRect():null,L=H&&u?u.getBoundingClientRect():null,V={scale:w.getRenderScale(),top:H&&L&&u?H.top-L.top-u.clientTop+u.scrollTop:0,left:H&&L&&u?H.right-L.left-u.clientLeft+u.scrollLeft+kt:null};return T.scale===V.scale&&T.top===V.top&&T.left===V.left?T:V});};N();let g=new ResizeObserver(N);return u&&g.observe(u),x&&g.observe(x),()=>g.disconnect()},[w,M]),useEffect(()=>{let m=_.current;if(!w||!m)return;let u=x=>{let N=x.target;if(!(N instanceof Node)||m.contains(N))return;let g=m.offsetParent;!g||!g.contains(N)||g.querySelector(".docx-paginated-surface")?.contains(N)||w.setActiveReviewItem(null);};return document.addEventListener("mousedown",u,true),()=>document.removeEventListener("mousedown",u,true)},[w]);let[xe,pt]=useState(null);useEffect(()=>{let m=_.current,u=m?.offsetParent;if(!u)return;let x=0,N=()=>{x=0,pt(L=>{let V=u.scrollTop-ot,ue=u.scrollTop+u.clientHeight+ot;return L&&L.top===V&&L.bottom===ue?L:{top:V,bottom:ue}});},g=0,T=()=>{x===0&&(x=requestAnimationFrame(N)),m?.setAttribute("data-scrolling",""),window.clearTimeout(g),g=window.setTimeout(()=>m?.removeAttribute("data-scrolling"),150);};N(),u.addEventListener("scroll",T,{passive:true});let H=new ResizeObserver(T);return H.observe(u),()=>{x!==0&&cancelAnimationFrame(x),window.clearTimeout(g),u.removeEventListener("scroll",T),H.disconnect();}},[w]);let[B,he]=useState(null),je=useCallback(()=>{w&&(w.surface?.retainSelection(),I(true),he(w.getSelectionPlacement()?.anchorY??null));},[w,I]),Ze=useCallback(()=>{w?.surface?.releaseSelection(),he(null),w?.focus();},[w]);useEffect(()=>{q||B===null||(w?.surface?.releaseSelection(),he(null));},[q,B,w]);let Fe=B??P.selectionAnchorY,U=useMemo(()=>{let m=ke(M);return M.filter(u=>!Ie(u,m))},[M]),qe=useMemo(()=>{if(B===null)return U;let m=U.findIndex(x=>x.anchorY!==null&&x.anchorY>B),u={key:ve,anchorY:B};return m===-1?[...U,u]:[...U.slice(0,m),u,...U.slice(m)]},[U,B]),Ue=useMemo(()=>{let m=new Map(Ye);for(let u of U){if(m.has(u.key))continue;let x=u.text.length+(u.kind==="revision"?u.replacedText?.length??0:0),N=Math.min(6,Math.max(1,Math.ceil(x/36)));m.set(u.key,64+N*20);}return m},[Ye,U]),{stacked:ge,collapsedKeys:ze}=useMemo(()=>{let m=D.scale,u=new Map,x=new Set,N=Number.NEGATIVE_INFINITY;for(let g of qe){let T=g.anchorY===null?Number.isFinite(N)?N:0:Math.max(g.anchorY,N);u.set(g.key,T);let H=g.anchorY===null?0:(T-g.anchorY)*m,L="isActive"in g&&g.isActive,V=H>Tt&&!L&&g.key!==ve;V&&x.add(g.key);let ue=V?Mt:Ue.get(g.key)??At;N=T+(ue+c)/m;}return {stacked:u,collapsedKeys:x}},[qe,Ue,c,D.scale]),Ne=Fe===null?null:D.top+(ge.get(ve)??Fe)*D.scale,Qe=i?.className,wt=useMemo(()=>({t:o,cardClassName:Qe,review:{...P,items:M},allItems:y.items,authorSlots:ee,byId:Ke,measure:Be,beginDraft:je,endDraft:Ze}),[o,Qe,P,y.items,M,ee,Ke,Be,je,Ze]);if(s)return null;let Ge={ref:_,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":M.length,"data-open":q?"":void 0,role:"complementary","aria-label":C("review.ariaLabel"),onMouseDown:F,style:D.left===null?void 0:{left:D.left,right:"auto"}},We=typeof t=="function"?{}:at(t),ne=(m,u)=>m in We?We[m]:u,Xe=n?jsxs(Fragment,{children:[ne("AddComment",jsx(Me,{top:Ne,drafting:B!==null})),!q||B===null||Ne===null?null:ne("Draft",jsx(Te,{top:Ne})),ne("Balloon",jsx(De,{}))]}):null,Rt=n?q?ne("List",jsx(fe,{stack:d,positions:ge,collapsed:ze,scale:D.scale,offset:D.top,window:xe,children:t})):ne("Markers",jsx(Ae,{scale:D.scale,offset:D.top,window:xe})):typeof t=="function"?null:t;return jsx(Pe.Provider,{value:wt,children:l&&isValidElement(t)?jsx(Slot,{...Ge,children:cloneElement(t,void 0,t.props.children,n?jsx(fe,{stack:d,positions:ge,collapsed:ze,scale:D.scale,offset:D.top,window:xe}):null,Xe)}):jsxs("aside",{...Ge,children:[q&&r!==void 0?jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:r}):null,Rt,Xe]})})}function fe({stack:e=true,positions:r,collapsed:l,scale:s=1,offset:t=0,window:o=null,children:i,className:n,hidden:d}){let{review:c,measure:v,cardClassName:b}=O();if(d)return null;let R=ke(c.items),w=c.items.filter(f=>!Ie(f,R));return w.length===0?typeof i=="function"?null:jsx(Se,{}):jsx("div",{className:`docx-review__list${n?` ${n}`:""}`,children:w.map(f=>{let p=e?r?.get(f.key)??f.anchorY:f.anchorY,y=p==null?null:t+p*s;if(y!==null&&o&&(y<o.top||y>o.bottom))return null;let P=y===null?{}:{position:"absolute",top:y};return jsx(k.Provider,{value:f,children:jsx("div",{className:"docx-review__slot",style:P,...l?.has(f.key)?{"data-collapsed":""}:{},ref:I=>{v(I,f.key);},children:typeof i=="function"?i(f):jsx(Le,{...b?{className:b}:{},children:i})})},f.key)})})}fe.docxReviewPart="List";function Ae({scale:e=1,offset:r=0,window:l=null,className:s,hidden:t}){let{review:o}=O(),i=Y();if(t)return null;let n=ke(o.items),d=o.items.filter(c=>!Ie(c,n));return jsx("div",{className:`docx-review__markers${s?` ${s}`:""}`,children:d.map(c=>{if(c.anchorY===null)return null;let v=r+c.anchorY*e;return l&&(v<l.top||v>l.bottom)?null:jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":c.kind==="revision"?c.revisionKind:c.kind,style:{position:"absolute",top:v},title:c.author?`${c.author}: ${c.text}`:c.text,"aria-label":`${i("review.showPane")}: ${c.author?`${c.author}. `:""}${c.text}`,onMouseDown:F,onClick:()=>{o.setPaneOpen(true),o.setActive(c.key);},children:re(Ot)},c.key)})})}Ae.docxReviewPart="Markers";function Me({top:e,drafting:r=false,className:l,hidden:s,children:t}){let{beginDraft:o}=O(),i=Y();if(s||r||e===null)return null;let n={type:"button",className:`docx-review__add${l?` ${l}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":i("common.comment"),title:i("common.comment"),onMouseDown:F,onClick:o};return t?jsx(Slot,{...n,children:t}):jsx("button",{...n,children:re(Lt)})}Me.docxReviewPart="AddComment";function Te({top:e,className:r,hidden:l}){let{review:s,endDraft:t,measure:o}=O(),i=Y(),[n,d]=useState(""),[c,v]=useState(false),b=useRef(null),R=useId();useEffect(()=>{b.current?.focus({preventScroll:true});},[]);let w=useCallback(()=>{if(n.trim().length===0)return;let f=s.comment(n.trim());v(!f),f&&(d(""),t());},[n,s,t]);return l?null:jsx("div",{className:`docx-review__slot${r?` ${r}`:""}`,style:{position:"absolute",top:e},ref:f=>{o(f,ve);},children:jsx("div",{className:"docx-review__card","data-testid":"review-draft","data-draft":"",children:jsxs("form",{className:"docx-review__reply-box",onSubmit:f=>{f.preventDefault(),w();},children:[jsx("label",{className:"ep-sr-only",htmlFor:R,children:i("comments.addComment")}),jsx("input",{id:R,ref:b,"data-testid":"review-draft-input",className:"docx-review__input",value:n,placeholder:i("comments.addComment"),...c?{"aria-invalid":true}:{},onChange:f=>{v(false),d(f.target.value);},onKeyDown:f=>{if(f.key==="Escape"){f.preventDefault(),t();return}f.key==="Enter"&&(f.preventDefault(),w());}}),jsxs("div",{className:"docx-review__reply-actions",children:[jsx("button",{type:"button","data-testid":"review-draft-cancel",className:"docx-review__text-button",onMouseDown:F,onClick:t,children:i("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:n.trim().length===0,children:i("common.comment")})]}),c?jsx("span",{className:"docx-review__refused",role:"alert",children:i("review.commentRefused")}):null]})})})}Te.docxReviewPart="Draft";function De({className:e,hidden:r}){let{review:l,allItems:s,authorSlots:t}=O(),o=Y(),i=useRef(null),[n,d]=useState(null),c=useRef(false);c.current=n!==null,useEffect(()=>{let f=i.current,p=f?.closest(".docx-review"),y=p?.closest(".docx-editor__scroll-container")??p?.offsetParent;if(!f||!p||!y)return;let P=(E,C)=>{let _=p.getBoundingClientRect(),$=E.getBoundingClientRect(),q=E.ownerDocument.defaultView?.innerHeight??1/0,M=Number(E.dataset.start),ee=Number(E.dataset.end);d({revisionId:E.dataset.revisionId,author:E.dataset.revisionAuthor??"",...E.dataset.revisionDate!==void 0?{date:E.dataset.revisionDate}:{},...E.dataset.revisionKind!==void 0?{kind:E.dataset.revisionKind}:{},structuralSite:C,...E.dataset.paragraphId!==void 0?{paragraphId:E.dataset.paragraphId}:{},...Number.isFinite(M)?{start:M}:{},...Number.isFinite(ee)?{end:ee}:{},left:$.left-_.left,top:$.top-_.top,bottom:$.bottom-_.top,above:$.bottom+220>q});},I=E=>{let C=E.target;if(!(C instanceof Element)||f.contains(C))return;let _=C.closest("[data-revision-id]");if(_ instanceof HTMLElement&&y.contains(_)){let $=_.classList.contains("docx-table-row--revision");if(_.dataset.revisionKind==="format"||$){P(_,$);return}}c.current&&d(null);};return y.addEventListener("pointerdown",I,true),y.addEventListener("mousedown",I,true),()=>{y.removeEventListener("pointerdown",I,true),y.removeEventListener("mousedown",I,true);}},[]);let v=useMemo(()=>{if(!n)return null;let f=null,p=false,y=null,P=false,I=null,E=false;for(let C of s)if(!(C.kind!=="revision"||C.item.kind!=="revision")){for(let _ of C.item.addresses)if(_.id===n.revisionId){if(_.author===n.author){if(_.date===n.date)return C;f===null?f=C:f!==C&&(p=true);}y===null?y=C:y!==C&&(P=true);}if(n.paragraphId!==void 0&&n.start!==void 0&&n.end!==void 0&&(C.revisionKind==="format"||C.revisionKind==="structural")){for(let _ of C.item.ranges)if(_.start.paragraphId===n.paragraphId&&_.start.offset<n.end&&_.end.offset>n.start){I===null?I=C:I!==C&&(E=true);break}}}return f!==null&&!p?f:y!==null&&!P?y:I!==null&&!E?I:null},[s,n]),b=v&&(v.revisionKind==="format"||v.revisionKind==="structural")?v:null,R=useRef(false);if(useEffect(()=>{if(b){R.current=true;return}R.current&&(R.current=false,d(null));},[b]),r)return null;let w=n?.kind==="format"?"format":"structural";return jsx("div",{ref:i,className:`docx-review__balloon-root${e?` ${e}`:""}`,children:n===null?null:jsx("div",{className:"docx-review__balloon","data-testid":"review-balloon",style:{left:n.left,top:n.above?n.top-6:n.bottom+6,transform:n.above?"translateY(-100%)":void 0},onMouseDown:F,children:b?jsx(k.Provider,{value:b,children:jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":b.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(t.get(b.author)??0)%it})`},onClick:()=>l.setActive(b.key),children:[jsxs("div",{className:"docx-review__head",children:[jsx(ie,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(ae,{}),jsx(se,{})]}),b.kind==="revision"&&!b.readOnly?jsxs("div",{className:"docx-review__actions",children:[jsx(pe,{}),jsx(we,{})]}):null]}),jsx(le,{})]})}):jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":w,children:[jsxs("div",{className:"docx-review__head",children:[jsx("span",{className:"docx-review__avatar","aria-hidden":"true",children:Yt(n.author)}),jsxs("div",{className:"docx-review__meta",children:[jsx("span",{className:"docx-review__author",children:n.author||o("comments.unknown")}),n.date?jsx(Bt,{raw:n.date}):null]})]}),jsx("div",{className:"docx-review__summary",children:jsx("span",{className:"docx-review__label","data-kind":w,children:o(lt(w))})})]})})})}De.docxReviewPart="Balloon";function Yt(e){let r=e.trim().split(/\s+/).filter(Boolean);return r.length===0?"?":r.slice(0,2).map(l=>l[0].toUpperCase()).join("")}function Bt({raw:e}){let r=new Date(e);return Number.isNaN(r.getTime())?null:jsx("time",{className:"docx-review__time",dateTime:e,children:st.format(r)})}function Se({className:e,hidden:r,children:l}){let s=Y();return r?null:jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:l??s("review.empty")})}Se.docxReviewPart="Empty";function Le({className:e,asChild:r,hidden:l,children:s}){let{review:t,authorSlots:o}=O(),i=useContext(k),n=useId();if(l||!i)return null;let d=o.get(i.author)??0,c={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${n}-author ${n}-summary`,"data-kind":i.kind==="revision"?i.revisionKind??"revision":i.kind,...i.kind==="custom"&&i.item.kind==="custom"?{"data-node-name":i.item.name}:{},...i.isActive?{"data-active":""}:{},...i.kind==="comment"&&i.resolved?{"data-resolved":""}:{},style:{"--doc-review-author":`var(--doc-review-author-${d%it})`},tabIndex:0,role:"button",id:n,onMouseDown:v=>{v.target?.closest("[data-review-selectable]")||v.currentTarget.focus({preventScroll:true});},onClick:()=>t.setActive(i.key),onKeyDown:v=>{v.target===v.currentTarget&&(v.key!=="Enter"&&v.key!==" "||(v.preventDefault(),t.setActive(i.key)));}};return r?jsx(Slot,{...c,children:s}):jsx("div",{...c,children:jsx(jt,{children:s})})}Le.docxReviewPart="Card";function jt({children:e}){let r=useContext(k),l=useMemo(()=>at(e),[e]),s=(o,i)=>o in l?l[o]:i;if(!r)return null;if(r.kind==="custom"&&r.item.kind==="custom"){let o=r.item;return jsxs(Fragment,{children:[jsxs("div",{className:"docx-review__head",children:[s("Avatar",null),jsx("div",{className:"docx-review__meta",children:s("Author",jsx("span",{className:"docx-review__author","data-testid":"review-custom-title",children:o.title}))})]}),s("Summary",o.detail?jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsx("span",{className:"docx-review__text",children:o.detail})}):null),l.__extra]})}let t=r.kind==="revision"&&!r.readOnly;return jsxs(Fragment,{children:[jsxs("div",{className:"docx-review__head",children:[s("Avatar",jsx(ie,{})),jsxs("div",{className:"docx-review__meta",children:[s("Author",jsx(ae,{})),s("Time",jsx(se,{}))]}),t||r.kind==="comment"?jsxs("div",{className:"docx-review__actions",children:[s("Accept",jsx(pe,{})),s("Reject",jsx(we,{})),s("Delete",jsx(Re,{}))]}):null]}),s("Summary",jsx(le,{})),s("Replies",jsx(Oe,{})),s("Reply",jsx($e,{})),l.__extra]})}function at(e){let r={},l=[],s=t=>{if(Array.isArray(t)){t.forEach(s);return}if(!t||typeof t!="object"||!("type"in t)){t&&l.push(t);return}if(t.type===Fragment$1){s(t.props.children);return}let o=t.type.docxReviewPart;o?r[o]=t:l.push(t);};return s(e),l.length>0&&(r.__extra=l),r}function ie({className:e,asChild:r,hidden:l,children:s}){let t=useContext(k);if(l||!t||s===void 0&&!t.initials)return null;let o={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return r?jsx(Slot,{...o,children:s}):jsx("span",{...o,children:s??t.initials})}ie.docxReviewPart="Avatar";function ae({className:e,asChild:r,hidden:l,children:s}){let t=useContext(k),o=Y();if(l||!t)return null;let i=t.author||o("comments.unknown"),n={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return r?jsx(Slot,{...n,children:s}):jsx("span",{...n,children:s??i})}ae.docxReviewPart="Author";function se({className:e,asChild:r,hidden:l,children:s}){let t=useContext(k);if(l||!t)return null;let o=t.date;if(!o)return null;let i=new Date(o);if(Number.isNaN(i.getTime()))return null;let n={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:o};return r?jsx(Slot,{...n,children:s}):jsx("time",{...n,children:s??st.format(i)})}se.docxReviewPart="Time";var st=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function le({className:e,asChild:r,hidden:l,children:s}){let t=useContext(k),o=Y();if(l||!t)return null;let i=t.text,n=t.kind!=="revision"?null:o(lt(t.revisionKind)),d=t.kind==="revision"&&t.revisionKind==="replace",c={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return r?jsx(Slot,{...c,children:s}):jsx("div",{...c,children:s??(d?jsxs("span",{className:"docx-review__text",children:[o("review.replaced")," ",jsxs("span",{className:"docx-review__removed",children:['"',t.replacedText,'"']})," ",o("review.replacedWith")," ",jsxs("span",{className:"docx-review__added",children:['"',i,'"']})]}):jsxs(Fragment,{children:[n?jsx("span",{className:"docx-review__label","data-kind":t.kind==="revision"?t.revisionKind:"revision",children:n}):null,i?jsx("span",{className:"docx-review__text",children:i}):null]}))})}le.docxReviewPart="Summary";function lt(e){switch(e){case "insert":return "review.inserted";case "delete":return "review.deleted";case "replace":return "review.replaced";case "moveFrom":return "review.movedFrom";case "moveTo":return "review.movedTo";case "format":return "revisions.runPropertiesChanged";case "paragraphMark":return "revisions.paragraphMarkInserted";default:return "review.structural"}}function pe({className:e,asChild:r,hidden:l,children:s,icon:t}){let{review:o}=O(),i=useContext(k),n=Y();if(l||!i||i.kind!=="revision"||i.readOnly)return null;let d=n("review.accept"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:d,onMouseDown:F,onClick:v=>{v.stopPropagation(),o.accept(i);}};return r?jsx(Slot,{...c,children:s}):jsx("button",{...c,children:t??s??re($t)})}pe.docxReviewPart="Accept";function we({className:e,asChild:r,hidden:l,children:s,icon:t}){let{review:o}=O(),i=useContext(k),n=Y();if(l||!i||i.kind!=="revision"||i.readOnly)return null;let d=n("review.reject"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:d,onMouseDown:F,onClick:v=>{v.stopPropagation(),o.reject(i);}};return r?jsx(Slot,{...c,children:s}):jsx("button",{...c,children:t??s??re(Ht)})}we.docxReviewPart="Reject";function Re({className:e,asChild:r,hidden:l,children:s,icon:t}){let{review:o}=O(),i=useContext(k),{t:n}=useTranslation();if(l||!i||i.kind==="custom"||i.kind==="revision"&&i.readOnly)return null;let d=i.kind==="comment"?n("review.deleteComment"):n("review.discardChange"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:d,onMouseDown:F,onClick:v=>{v.stopPropagation(),o.remove(i);}};return r?jsx(Slot,{...c,children:s}):jsx("button",{...c,children:t??s??re(Vt)})}Re.docxReviewPart="Delete";function Oe({className:e,hidden:r}){let{byId:l}=O(),s=useContext(k);if(r||!s||s.kind==="custom")return null;let t=s.replyIds.map(o=>l.get(o)).filter(o=>o!==void 0);return t.length===0?null:jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:t.map(o=>jsx(k.Provider,{value:o,children:jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxs("div",{className:"docx-review__head",children:[jsx(ie,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(ae,{}),jsx(se,{})]}),jsx("div",{className:"docx-review__actions",children:jsx(Re,{})})]}),jsx(le,{})]})},o.key))})}Oe.docxReviewPart="Replies";function $e({className:e,hidden:r,children:l}){let{review:s}=O(),t=useContext(k),o=Y(),[i,n]=useState(""),[d,c]=useState(false),v=useId(),b=useCallback(()=>{if(!t||i.trim().length===0)return;let R=s.reply(t,i.trim());c(!R),R&&n("");},[t,i,s]);return r||!t||!t.isActive?null:l?jsx(Fragment,{children:l}):jsxs("form",{className:`docx-review__reply-box${e?` ${e}`:""}`,onSubmit:R=>{R.preventDefault(),b();},children:[jsx("label",{className:"ep-sr-only",htmlFor:v,children:o("comments.replyPlaceholder")}),jsx("input",{id:v,"data-testid":"review-reply-input",className:"docx-review__input",value:i,placeholder:o("comments.replyPlaceholder"),...d?{"aria-invalid":true,"data-refused":""}:{},onChange:R=>{c(false),n(R.target.value);},onClick:R=>R.stopPropagation(),onKeyDown:R=>{R.key==="Enter"&&(R.preventDefault(),b());}}),jsxs("div",{className:"docx-review__reply-actions",children:[jsx("button",{type:"button","data-testid":"review-reply-cancel",className:"docx-review__text-button",onMouseDown:F,onClick:R=>{R.stopPropagation(),n(""),c(false),s.setActive(null);},children:o("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:i.trim().length===0,children:o("review.reply")})]}),d?jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:o("review.replyRefused")}):null]})}$e.docxReviewPart="Reply";var Zt=Object.assign(Kt,{List:fe,Empty:Se,Card:Le,Avatar:ie,Author:ae,Time:se,Summary:le,Accept:pe,Reject:we,Delete:Re,Replies:Oe,Reply:$e,Markers:Ae,AddComment:Me,Draft:Te,Balloon:De});function ce(e){let r=useDocxEditor();return useMemo(()=>e||(r?.getCustomNodeDefinitions()??[]).filter(d),[e,r])}var Ut=".docx-content-control-boundary";function X(e,r){let{node:l,definition:s,controlId:t}=e,o=t?r?.getReviewItems().find(n=>n.kind==="custom"&&n.item.id===t):void 0;if(o&&o.kind==="custom"){let n=o.item;return {...l,attrs:n.attrs,text:n.text,...t?{nodeId:t}:{}}}let i=s.fromDocx?s.fromDocx({attrs:l.attrs,text:""}):l.attrs;return i===null?null:{...l,attrs:i,...t?{nodeId:t}:{}}}function J(e,r){let l=e?.closest?.(Ut),s=l?.closest(".docx-content-control-chrome"),t=s?.getAttribute("data-tag"),o=t?c(t):null;if(!l||!o||!t)return null;let i=r.find(n=>n.tagPrefix===o.prefix&&n.name===o.name);return i?{node:{name:o.name,attrs:o.attrs,tag:t,rect:l.getBoundingClientRect()},definition:i,controlId:s?.getAttribute("data-docx-content-control")??null}:null}var He=".docx-content-control-boundary",Qt=e$1=>{if(!e.test(e$1.tagPrefix)||!e.test(e$1.name))return [];let r=`${e$1.tagPrefix}:${e$1.name}`;return [`.docx-content-control-chrome[data-tag="${r}"]`,`.docx-content-control-chrome[data-tag^="${r}?"]`]};function Gt(e){let{onNodeClick:r,onNodeHover:l}=e,s=useDocxEditor(),t=ce(e.nodes);return useEffect(()=>{let o=document.createElement("style"),i=[];for(let n of t){let d=Qt(n);if(d.length===0)continue;let c=n.chrome?.color!==void 0&&CSS.supports("color",n.chrome.color)?n.chrome.color:"#2563eb";i.push(`${d.map(v=>`${v} ${He}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${c} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return o.textContent=i.join(`
2
- `),document.head.append(o),()=>o.remove()},[t]),useEffect(()=>{let o=n=>{let d=J(n.target,t);if(!d)return;let c=X(d,s);c&&(d.definition.onClick?.(c),r?.(c));},i=n=>{let d=J(n.target,t);if(!d||n.relatedTarget?.closest?.(He)===n.target.closest(He))return;let v=X(d,s);v&&(d.definition.onHover?.(v),l?.(v));};return document.addEventListener("click",o),document.addEventListener("mouseover",i),()=>{document.removeEventListener("click",o),document.removeEventListener("mouseover",i);}},[t,s,r,l]),null}function mt(e){let{onEditNode:r,remove:l=true}=e,s=ce(e.nodes),t=useContextMenuTarget(),o=useDocxEditor(),{t:i}=useTranslation(),n=useMemo(()=>t?J(t,s):null,[t,s]),d=useMemo(()=>n?X(n,o):null,[n,o]),c=useMemo(()=>!n?.definition.reviewCard||!d?null:n.definition.reviewCard({attrs:d.attrs,text:d.text??""}),[n,d]);if(!n||!d)return null;let{definition:v}=n,b=v.label??v.name,R=v.onEdit!==void 0||r!==void 0,w=l&&d.nodeId!==void 0&&o!==null;return !c&&!R&&!w?null:jsxs(Fragment,{children:[c?jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsx("span",{className:"docx-contextmenu__custom-title",children:c.title}),c.detail?jsx("span",{className:"docx-contextmenu__custom-detail",children:c.detail}):null]}):null,R?jsx(ContextMenuItem,{label:i("contextMenu.editCustomNode",{label:b}),className:"docx-contextmenu__custom-edit",onSelect:()=>{v.onEdit?.(d),r?.(d,v);}}):null,w?jsx(ContextMenuItem,{label:i("contextMenu.removeCustomNode",{label:b}),className:"docx-contextmenu__custom-remove",onSelect:()=>{j(o,d.nodeId);}}):null,jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}mt.docxRowPlacement="start";export{Gt as CustomNodeChrome,mt as CustomNodeContextMenu,Zt as DocxEditorReview,X as activatedCustomNodeOf,J as resolveCustomNodeActivation,ce as useCustomNodeDefinitions,me as useReview,Pt as useReviewItem,nt as useReviewOf,ht as useStackedReviewPositions};
1
+ import {j,e,c,q,k as k$1}from'../chunk-FVI3MGO7.js';export{o as reviewModule}from'../chunk-FVI3MGO7.js';import {createContext,useMemo,useEffect,useCallback,useRef,useContext,useState,isValidElement,cloneElement,useId,useSyncExternalStore,Fragment as Fragment$1}from'react';import {useDocxEditor,useEditorState,useTranslation,ReviewRailContext,Slot,useContextMenuTarget,ContextMenuItem}from'@docx-editor.dev/react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';import {customNodePayloadsByControl}from'@docx-editor.dev/core/store';function me(e){let i=useDocxEditor();return rt(i,e)}function rt(e,i){let l=useCallback(m=>{if(!e)return ()=>{};let b=e.on("change",m),T=e.on("selectionChange",m),N=e.on("error",m);return ()=>{b(),T(),N();}},[e]),r=useSyncExternalStore(l,()=>e?`${e.getReviewRevision()}`:"none",()=>"none"),t=useMemo(()=>e?e.getReviewItems(i).filter(m=>m.item.kind!=="custom"||m.item.carded):[],[e,r,i]),o=useMemo(()=>t.find(m=>m.isActive)?.key??null,[t]),n=useCallback(m=>{e?.setActiveReviewItem(m);},[e]),a=useCallback(m=>!e||m.kind!=="revision"||m.readOnly?false:e.acceptReviewItem(m.key).ok,[e]),d=useCallback(m=>!e||m.kind!=="revision"||m.readOnly?false:e.rejectReviewItem(m.key).ok,[e]),c=useCallback(m=>!e||m.kind==="custom"||m.kind==="revision"&&m.readOnly?false:e.deleteReviewItem(m.key).ok,[e]),p=useCallback((m,b,T)=>b.trim().length===0||!e?false:e.replyToReviewItem(m.key,b,T).ok,[e]),w=useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,r]),R=useCallback((m,b)=>m.trim().length===0||!e?false:e.addComment(m,b).ok,[e]),y=useMemo(()=>e?e.isReviewPaneOpen():true,[e,r]),u=useCallback(m=>{!e||e.isReviewPaneOpen()===m||e.exec({type:"toggleReviewPane"});},[e]);return useMemo(()=>({items:t,activeKey:o,setActive:n,accept:a,reject:d,remove:c,reply:p,selectionAnchorY:w,comment:R,paneOpen:y,setPaneOpen:u,ready:e!==null&&!e.snapshot().isLoading&&e.snapshot().parseError===null}),[t,o,n,a,d,c,p,w,R,y,u,e])}function Nt(e,i,l={}){let r=l.gap??8,t=l.scale??1,o=l.defaultHeight??0;return useMemo(()=>{let n=new Map,a=Number.NEGATIVE_INFINITY;for(let d of e){let c=d.anchorY===null?Number.isFinite(a)?a:0:Math.max(d.anchorY,a);n.set(d.key,c),a=c+((i.get(d.key)??o)+r)/t;}return n},[e,i,r,t,o])}var It=e=>e.isLoading||e.parseError!==null||e.pageSetup==null,Pe=createContext(null),k=createContext(null);function Tt(){return useContext(k)}var Mt={scale:96/72,top:0,left:null},Dt=16,ve="\0compose",it=600,st=8,St=72,Lt=64,Ot=480,$t=Object.freeze({placement:false});function ke(e,i){return e.kind!=="comment"?false:e.parentId!==void 0?i.has(e.parentId):e.parentRevisionId!==void 0?i.has(e.parentRevisionId):false}function Ae(e){return new Set(e.map(i=>i.id))}function U(e){let i=e.target?.tagName;i==="INPUT"||i==="SELECT"||i==="TEXTAREA"||e.preventDefault();}function $(){let e=useContext(Pe);return e||Ht}function B(){let{t:e}=useContext(Pe)??{},{t:i}=useTranslation();return useCallback(l=>e?.(l)??i(l),[e,i])}var Ht={t:void 0,cardClassName:void 0,review:{items:[],activeKey:null,setActive:()=>{},accept:()=>false,reject:()=>false,remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}},oe=e=>jsx("svg",{viewBox:"0 -960 960 960",width:16,height:16,"aria-hidden":"true",focusable:"false",children:jsx("path",{d:e,fill:"currentColor"})}),Vt="M440-400h80v-120h120v-80H520v-120h-80v120H320v80h120v120ZM80-80v-720q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H240L80-80Zm126-240h594v-480H160v525l46-45Zm-46 0v-480 480Z",Kt="M240-400h480v-80H240v80Zm0-120h480v-80H240v80Zm0-120h480v-80H240v80ZM880-80 720-240H160q-33 0-56.5-23.5T80-320v-480q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v720ZM160-320h594l46 45v-525H160v480Zm0 0v-480 480Z",Yt="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",Bt="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z",jt="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z";function Ft({className:e,furniture:i,asChild:l,hidden:r,children:t,t:o,card:n,preset:a=true,stack:d=true,gap:c=8,filter:p,structural:w=false,formatting:R=false}){let y=useDocxEditor(),u=useEditorState(It),m=useMemo(()=>{let f=[];return w||f.push("structural"),R||f.push("format"),f.length>0?f:void 0},[w,R]),b=useMemo(()=>m?{excludeRevisionKinds:m}:void 0,[m]);useEffect(()=>(y?.setReviewActivationExclusions(m??null),()=>y?.setReviewActivationExclusions(null)),[y,m]);let T=me($t),N=me(b),E=N.setPaneOpen,{t:C}=useTranslation(),P=useCallback(f=>o?.(f)??C(f),[o,C]),D=useRef(null),de=useContext(ReviewRailContext);useEffect(()=>de?.register(),[de]);let j=N.paneOpen,I=useMemo(()=>p?N.items.filter(f=>p(f)):N.items,[N.items,p]),Ke=useMemo(()=>{let f=new Map;for(let v of I)v.author&&!f.has(v.author)&&f.set(v.author,f.size);return f},[I]),Ye=useMemo(()=>{let f=new Map;for(let v of I)f.set(v.id,v);return f},[I]),[Be,pt]=useState(()=>new Map),ye=useCallback((f,v)=>{v<=0||pt(x=>{if(x.get(f)===v)return x;let _=new Map(x);return _.set(f,v),_});},[]),be=useRef(new WeakMap),ee=useRef(null),je=useCallback((f,v)=>{!f||typeof ResizeObserver>"u"||(ye(v,f.offsetHeight),ee.current??(ee.current=new ResizeObserver(x=>{for(let _ of x){let h=be.current.get(_.target);h&&ye(h,_.target.offsetHeight);}})),be.current.get(f)!==v&&(be.current.set(f,v),ee.current.observe(f)));},[ye]);useEffect(()=>()=>ee.current?.disconnect(),[]);let[S,wt]=useState(Mt);useEffect(()=>{let f=D.current;if(!y||!f)return;let v=f.offsetParent,x=v?.querySelector(".docx-paginated-surface")??null,_=()=>{wt(M=>{let H=x&&v?x.getBoundingClientRect():null,O=H&&v?v.getBoundingClientRect():null,V={scale:y.getRenderScale(),top:H&&O&&v?H.top-O.top-v.clientTop+v.scrollTop:0,left:H&&O&&v?H.right-O.left-v.clientLeft+v.scrollLeft+Dt:null};return M.scale===V.scale&&M.top===V.top&&M.left===V.left?M:V});};_();let h=new ResizeObserver(_);return v&&h.observe(v),x&&h.observe(x),()=>h.disconnect()},[y,I,u,r]),useEffect(()=>{let f=D.current;if(!y||!f)return;let v=x=>{let _=x.target;if(!(_ instanceof Node)||f.contains(_))return;let h=f.offsetParent;!h||!h.contains(_)||h.querySelector(".docx-paginated-surface")?.contains(_)||y.setActiveReviewItem(null);};return document.addEventListener("mousedown",v,true),()=>document.removeEventListener("mousedown",v,true)},[y,u,r]);let[xe,Rt]=useState(null);useEffect(()=>{let f=D.current,v=f?.offsetParent;if(!v)return;let x=0,_=()=>{x=0,Rt(O=>{let V=v.scrollTop-it,ue=v.scrollTop+v.clientHeight+it;return O&&O.top===V&&O.bottom===ue?O:{top:V,bottom:ue}});},h=0,M=()=>{x===0&&(x=requestAnimationFrame(_)),f?.setAttribute("data-scrolling",""),window.clearTimeout(h),h=window.setTimeout(()=>f?.removeAttribute("data-scrolling"),150);};_(),v.addEventListener("scroll",M,{passive:true});let H=new ResizeObserver(M);return H.observe(v),()=>{x!==0&&cancelAnimationFrame(x),window.clearTimeout(h),v.removeEventListener("scroll",M),H.disconnect();}},[y,u,r]);let[F,ge]=useState(null),Fe=useCallback(()=>{y&&(y.surface?.retainSelection(),E(true),ge(y.getSelectionPlacement()?.anchorY??null));},[y,E]),Ze=useCallback(()=>{y?.surface?.releaseSelection(),ge(null),y?.focus();},[y]);useEffect(()=>{j||F===null||(y?.surface?.releaseSelection(),ge(null));},[j,F,y]);let Ue=F??N.selectionAnchorY,q=useMemo(()=>{let f=Ae(I);return I.filter(v=>!ke(v,f))},[I]),qe=useMemo(()=>{if(F===null)return q;let f=q.findIndex(x=>x.anchorY!==null&&x.anchorY>F),v={key:ve,anchorY:F};return f===-1?[...q,v]:[...q.slice(0,f),v,...q.slice(f)]},[q,F]),ze=useMemo(()=>{let f=new Map(Be);for(let v of q){if(f.has(v.key))continue;let x=v.text.length+(v.kind==="revision"?v.replacedText?.length??0:0),_=Math.min(6,Math.max(1,Math.ceil(x/36)));f.set(v.key,64+_*20);}return f},[Be,q]),{stacked:he,collapsedKeys:Qe}=useMemo(()=>{let f=S.scale,v=new Map,x=new Set,_=Number.NEGATIVE_INFINITY;for(let h of qe){let M=h.anchorY===null?Number.isFinite(_)?_:0:Math.max(h.anchorY,_);v.set(h.key,M);let H=h.anchorY===null?0:(M-h.anchorY)*f,O="isActive"in h&&h.isActive,V=H>Ot&&!O&&h.key!==ve;V&&x.add(h.key);let ue=V?Lt:ze.get(h.key)??St;_=M+(ue+c)/f;}return {stacked:v,collapsedKeys:x}},[qe,ze,c,S.scale]),Ne=Ue===null?null:S.top+(he.get(ve)??Ue)*S.scale,Ge=n?.className,yt=useMemo(()=>({t:o,cardClassName:Ge,review:{...N,items:I},allItems:T.items,authorSlots:Ke,byId:Ye,measure:je,beginDraft:Fe,endDraft:Ze}),[o,Ge,N,T.items,I,Ke,Ye,je,Fe,Ze]);if(r||u)return null;let We={ref:D,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":I.length,"data-open":j?"":void 0,role:"complementary","aria-label":P("review.ariaLabel"),onMouseDown:U,style:S.left===null?void 0:{left:S.left,right:"auto"}},Xe=typeof t=="function"?{}:lt(t),te=(f,v)=>f in Xe?Xe[f]:v,Je=a?jsxs(Fragment,{children:[te("AddComment",jsx(Te,{top:Ne,drafting:F!==null})),!j||F===null||Ne===null?null:te("Draft",jsx(Me,{top:Ne})),te("Balloon",jsx(De,{}))]}):null,bt=a?j?te("List",jsx(fe,{stack:d,positions:he,collapsed:Qe,scale:S.scale,offset:S.top,window:xe,children:t})):te("Markers",jsx(Ie,{scale:S.scale,offset:S.top,window:xe})):typeof t=="function"?null:t;return jsx(Pe.Provider,{value:yt,children:l&&isValidElement(t)?jsx(Slot,{...We,children:cloneElement(t,void 0,t.props.children,a?jsx(fe,{stack:d,positions:he,collapsed:Qe,scale:S.scale,offset:S.top,window:xe}):null,Je)}):jsxs("aside",{...We,children:[j&&i!==void 0?jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:i}):null,bt,Je]})})}function fe({stack:e=true,positions:i,collapsed:l,scale:r=1,offset:t=0,window:o=null,children:n,className:a,hidden:d}){let{review:c,measure:p,cardClassName:w}=$();if(d)return null;let R=Ae(c.items),y=c.items.filter(u=>!ke(u,R));return y.length===0?typeof n=="function"?null:jsx(Se,{}):jsx("div",{className:`docx-review__list${a?` ${a}`:""}`,children:y.map(u=>{let m=e?i?.get(u.key)??u.anchorY:u.anchorY,b=m==null?null:t+m*r;if(b!==null&&o&&(b<o.top||b>o.bottom))return null;let T=b===null?{}:{position:"absolute",top:b};return jsx(k.Provider,{value:u,children:jsx("div",{className:"docx-review__slot",style:T,...l?.has(u.key)?{"data-collapsed":""}:{},ref:N=>{p(N,u.key);},children:typeof n=="function"?n(u):jsx(Le,{...w?{className:w}:{},children:n})})},u.key)})})}fe.docxReviewPart="List";function Ie({scale:e=1,offset:i=0,window:l=null,className:r,hidden:t}){let{review:o}=$(),n=B();if(t)return null;let a=Ae(o.items),d=o.items.filter(c=>!ke(c,a));return jsx("div",{className:`docx-review__markers${r?` ${r}`:""}`,children:d.map(c=>{if(c.anchorY===null)return null;let p=i+c.anchorY*e;return l&&(p<l.top||p>l.bottom)?null:jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":c.kind==="revision"?c.revisionKind:c.kind,style:{position:"absolute",top:p},title:c.author?`${c.author}: ${c.text}`:c.text,"aria-label":`${n("review.showPane")}: ${c.author?`${c.author}. `:""}${c.text}`,onMouseDown:U,onClick:()=>{o.setPaneOpen(true),o.setActive(c.key);},children:oe(Kt)},c.key)})})}Ie.docxReviewPart="Markers";function Te({top:e,drafting:i=false,className:l,hidden:r,children:t}){let{beginDraft:o}=$(),n=B();if(r||i||e===null)return null;let a={type:"button",className:`docx-review__add${l?` ${l}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":n("common.comment"),title:n("common.comment"),onMouseDown:U,onClick:o};return t?jsx(Slot,{...a,children:t}):jsx("button",{...a,children:oe(Vt)})}Te.docxReviewPart="AddComment";function Me({top:e,className:i,hidden:l}){let{review:r,endDraft:t,measure:o}=$(),n=B(),[a,d]=useState(""),[c,p]=useState(false),w=useRef(null),R=useId();useEffect(()=>{w.current?.focus({preventScroll:true});},[]);let y=useCallback(()=>{if(a.trim().length===0)return;let u=r.comment(a.trim());p(!u),u&&(d(""),t());},[a,r,t]);return l?null:jsx("div",{className:`docx-review__slot${i?` ${i}`:""}`,style:{position:"absolute",top:e},ref:u=>{o(u,ve);},children:jsx("div",{className:"docx-review__card","data-testid":"review-draft","data-draft":"",children:jsxs("form",{className:"docx-review__reply-box",onSubmit:u=>{u.preventDefault(),y();},children:[jsx("label",{className:"docx-editor-sr-only",htmlFor:R,children:n("comments.addComment")}),jsx("input",{id:R,ref:w,"data-testid":"review-draft-input",className:"docx-review__input",value:a,placeholder:n("comments.addComment"),...c?{"aria-invalid":true}:{},onChange:u=>{p(false),d(u.target.value);},onKeyDown:u=>{if(u.key==="Escape"){u.preventDefault(),t();return}u.key==="Enter"&&(u.preventDefault(),y());}}),jsxs("div",{className:"docx-review__reply-actions",children:[jsx("button",{type:"button","data-testid":"review-draft-cancel",className:"docx-review__text-button",onMouseDown:U,onClick:t,children:n("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:a.trim().length===0,children:n("common.comment")})]}),c?jsx("span",{className:"docx-review__refused",role:"alert",children:n("review.commentRefused")}):null]})})})}Me.docxReviewPart="Draft";function De({className:e,hidden:i}){let{review:l,allItems:r,authorSlots:t}=$(),o=B(),n=useRef(null),[a,d]=useState(null),c=useRef(false);c.current=a!==null,useEffect(()=>{let u=n.current,m=u?.closest(".docx-review"),b=m?.closest(".docx-editor__scroll-container")??m?.offsetParent;if(!u||!m||!b)return;let T=(E,C)=>{let P=m.getBoundingClientRect(),D=E.getBoundingClientRect(),de=E.ownerDocument.defaultView?.innerHeight??1/0,j=Number(E.dataset.start),I=Number(E.dataset.end);d({revisionId:E.dataset.revisionId,author:E.dataset.revisionAuthor??"",...E.dataset.revisionDate!==void 0?{date:E.dataset.revisionDate}:{},...E.dataset.revisionKind!==void 0?{kind:E.dataset.revisionKind}:{},structuralSite:C,...E.dataset.paragraphId!==void 0?{paragraphId:E.dataset.paragraphId}:{},...Number.isFinite(j)?{start:j}:{},...Number.isFinite(I)?{end:I}:{},left:D.left-P.left,top:D.top-P.top,bottom:D.bottom-P.top,above:D.bottom+220>de});},N=E=>{let C=E.target;if(!(C instanceof Element)||u.contains(C))return;let P=C.closest("[data-revision-id]");if(P instanceof HTMLElement&&b.contains(P)){let D=P.classList.contains("docx-table-row--revision");if(P.dataset.revisionKind==="format"||D){T(P,D);return}}c.current&&d(null);};return b.addEventListener("pointerdown",N,true),b.addEventListener("mousedown",N,true),()=>{b.removeEventListener("pointerdown",N,true),b.removeEventListener("mousedown",N,true);}},[]);let p=useMemo(()=>{if(!a)return null;let u=null,m=false,b=null,T=false,N=null,E=false;for(let C of r)if(!(C.kind!=="revision"||C.item.kind!=="revision")){for(let P of C.item.addresses)if(P.id===a.revisionId){if(P.author===a.author){if(P.date===a.date)return C;u===null?u=C:u!==C&&(m=true);}b===null?b=C:b!==C&&(T=true);}if(a.paragraphId!==void 0&&a.start!==void 0&&a.end!==void 0&&(C.revisionKind==="format"||C.revisionKind==="structural")){for(let P of C.item.ranges)if(P.start.paragraphId===a.paragraphId&&P.start.offset<a.end&&P.end.offset>a.start){N===null?N=C:N!==C&&(E=true);break}}}return u!==null&&!m?u:b!==null&&!T?b:N!==null&&!E?N:null},[r,a]),w=p&&(p.revisionKind==="format"||p.revisionKind==="structural")?p:null,R=useRef(false);if(useEffect(()=>{if(w){R.current=true;return}R.current&&(R.current=false,d(null));},[w]),i)return null;let y=a?.kind==="format"?"format":"structural";return jsx("div",{ref:n,className:`docx-review__balloon-root${e?` ${e}`:""}`,children:a===null?null:jsx("div",{className:"docx-review__balloon","data-testid":"review-balloon",style:{left:a.left,top:a.above?a.top-6:a.bottom+6,transform:a.above?"translateY(-100%)":void 0},onMouseDown:U,children:w?jsx(k.Provider,{value:w,children:jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":w.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(t.get(w.author)??0)%st})`},onClick:()=>l.setActive(w.key),children:[jsxs("div",{className:"docx-review__head",children:[jsx(re,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(ie,{}),jsx(ae,{})]}),w.kind==="revision"&&!w.readOnly?jsxs("div",{className:"docx-review__actions",children:[jsx(pe,{}),jsx(we,{})]}):null]}),jsx(se,{})]})}):jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":y,children:[jsxs("div",{className:"docx-review__head",children:[jsx("span",{className:"docx-review__avatar","aria-hidden":"true",children:Zt(a.author)}),jsxs("div",{className:"docx-review__meta",children:[jsx("span",{className:"docx-review__author",children:a.author||o("comments.unknown")}),a.date?jsx(Ut,{raw:a.date}):null]})]}),jsx("div",{className:"docx-review__summary",children:jsx("span",{className:"docx-review__label","data-kind":y,children:o(dt(y))})})]})})})}De.docxReviewPart="Balloon";function Zt(e){let i=e.trim().split(/\s+/).filter(Boolean);return i.length===0?"?":i.slice(0,2).map(l=>l[0].toUpperCase()).join("")}function Ut({raw:e}){let i=new Date(e);return Number.isNaN(i.getTime())?null:jsx("time",{className:"docx-review__time",dateTime:e,children:ct.format(i)})}function Se({className:e,hidden:i,children:l}){let r=B();return i?null:jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:l??r("review.empty")})}Se.docxReviewPart="Empty";function Le({className:e,asChild:i,hidden:l,children:r}){let{review:t,authorSlots:o}=$(),n=useContext(k),a=useId();if(l||!n)return null;let d=o.get(n.author)??0,c={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${a}-author ${a}-summary`,"data-kind":n.kind==="revision"?n.revisionKind??"revision":n.kind,...n.kind==="custom"&&n.item.kind==="custom"?{"data-node-name":n.item.name}:{},...n.isActive?{"data-active":""}:{},...n.kind==="comment"&&n.resolved?{"data-resolved":""}:{},style:{"--doc-review-author":`var(--doc-review-author-${d%st})`},tabIndex:0,role:"button",id:a,onMouseDown:p=>{p.target?.closest("[data-review-selectable]")||p.currentTarget.focus({preventScroll:true});},onClick:()=>t.setActive(n.key),onKeyDown:p=>{p.target===p.currentTarget&&(p.key!=="Enter"&&p.key!==" "||(p.preventDefault(),t.setActive(n.key)));}};return i?jsx(Slot,{...c,children:r}):jsx("div",{...c,children:jsx(qt,{children:r})})}Le.docxReviewPart="Card";function qt({children:e}){let i=useContext(k),l=useMemo(()=>lt(e),[e]),r=(o,n)=>o in l?l[o]:n;if(!i)return null;if(i.kind==="custom"&&i.item.kind==="custom"){let o=i.item;return jsxs(Fragment,{children:[jsxs("div",{className:"docx-review__head",children:[r("Avatar",null),jsx("div",{className:"docx-review__meta",children:r("Author",jsx("span",{className:"docx-review__author","data-testid":"review-custom-title",children:o.title}))})]}),r("Summary",o.detail?jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsx("span",{className:"docx-review__text",children:o.detail})}):null),l.__extra]})}let t=i.kind==="revision"&&!i.readOnly;return jsxs(Fragment,{children:[jsxs("div",{className:"docx-review__head",children:[r("Avatar",jsx(re,{})),jsxs("div",{className:"docx-review__meta",children:[r("Author",jsx(ie,{})),r("Time",jsx(ae,{}))]}),t||i.kind==="comment"?jsxs("div",{className:"docx-review__actions",children:[r("Accept",jsx(pe,{})),r("Reject",jsx(we,{})),r("Delete",jsx(Re,{}))]}):null]}),r("Summary",jsx(se,{})),r("Replies",jsx(Oe,{})),r("Reply",jsx($e,{})),l.__extra]})}function lt(e){let i={},l=[],r=t=>{if(Array.isArray(t)){t.forEach(r);return}if(!t||typeof t!="object"||!("type"in t)){t&&l.push(t);return}if(t.type===Fragment$1){r(t.props.children);return}let o=t.type.docxReviewPart;o?i[o]=t:l.push(t);};return r(e),l.length>0&&(i.__extra=l),i}function re({className:e,asChild:i,hidden:l,children:r}){let t=useContext(k);if(l||!t||r===void 0&&!t.initials)return null;let o={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return i?jsx(Slot,{...o,children:r}):jsx("span",{...o,children:r??t.initials})}re.docxReviewPart="Avatar";function ie({className:e,asChild:i,hidden:l,children:r}){let t=useContext(k),o=B();if(l||!t)return null;let n=t.author||o("comments.unknown"),a={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return i?jsx(Slot,{...a,children:r}):jsx("span",{...a,children:r??n})}ie.docxReviewPart="Author";function ae({className:e,asChild:i,hidden:l,children:r}){let t=useContext(k);if(l||!t)return null;let o=t.date;if(!o)return null;let n=new Date(o);if(Number.isNaN(n.getTime()))return null;let a={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:o};return i?jsx(Slot,{...a,children:r}):jsx("time",{...a,children:r??ct.format(n)})}ae.docxReviewPart="Time";var ct=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function se({className:e,asChild:i,hidden:l,children:r}){let t=useContext(k),o=B();if(l||!t)return null;let n=t.text,a=t.kind!=="revision"?null:o(dt(t.revisionKind)),d=t.kind==="revision"&&t.revisionKind==="replace",c={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return i?jsx(Slot,{...c,children:r}):jsx("div",{...c,children:r??(d?jsxs("span",{className:"docx-review__text",children:[o("review.replaced")," ",jsxs("span",{className:"docx-review__removed",children:['"',t.replacedText,'"']})," ",o("review.replacedWith")," ",jsxs("span",{className:"docx-review__added",children:['"',n,'"']})]}):jsxs(Fragment,{children:[a?jsx("span",{className:"docx-review__label","data-kind":t.kind==="revision"?t.revisionKind:"revision",children:a}):null,n?jsx("span",{className:"docx-review__text",children:n}):null]}))})}se.docxReviewPart="Summary";function dt(e){switch(e){case "insert":return "review.inserted";case "delete":return "review.deleted";case "replace":return "review.replaced";case "moveFrom":return "review.movedFrom";case "moveTo":return "review.movedTo";case "format":return "revisions.runPropertiesChanged";case "paragraphMark":return "revisions.paragraphMarkInserted";default:return "review.structural"}}function pe({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=useContext(k),a=B();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.accept"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.accept(n);}};return i?jsx(Slot,{...c,children:r}):jsx("button",{...c,children:t??r??oe(Yt)})}pe.docxReviewPart="Accept";function we({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=useContext(k),a=B();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.reject"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.reject(n);}};return i?jsx(Slot,{...c,children:r}):jsx("button",{...c,children:t??r??oe(Bt)})}we.docxReviewPart="Reject";function Re({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=useContext(k),{t:a}=useTranslation();if(l||!n||n.kind==="custom"||n.kind==="revision"&&n.readOnly)return null;let d=n.kind==="comment"?a("review.deleteComment"):a("review.discardChange"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.remove(n);}};return i?jsx(Slot,{...c,children:r}):jsx("button",{...c,children:t??r??oe(jt)})}Re.docxReviewPart="Delete";function Oe({className:e,hidden:i}){let{byId:l}=$(),r=useContext(k);if(i||!r||r.kind==="custom")return null;let t=r.replyIds.map(o=>l.get(o)).filter(o=>o!==void 0);return t.length===0?null:jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:t.map(o=>jsx(k.Provider,{value:o,children:jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxs("div",{className:"docx-review__head",children:[jsx(re,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(ie,{}),jsx(ae,{})]}),jsx("div",{className:"docx-review__actions",children:jsx(Re,{})})]}),jsx(se,{})]})},o.key))})}Oe.docxReviewPart="Replies";function $e({className:e,hidden:i,children:l}){let{review:r}=$(),t=useContext(k),o=B(),[n,a]=useState(""),[d,c]=useState(false),p=useId(),w=useCallback(()=>{if(!t||n.trim().length===0)return;let R=r.reply(t,n.trim());c(!R),R&&a("");},[t,n,r]);return i||!t||!t.isActive?null:l?jsx(Fragment,{children:l}):jsxs("form",{className:`docx-review__reply-box${e?` ${e}`:""}`,onSubmit:R=>{R.preventDefault(),w();},children:[jsx("label",{className:"docx-editor-sr-only",htmlFor:p,children:o("comments.replyPlaceholder")}),jsx("input",{id:p,"data-testid":"review-reply-input",className:"docx-review__input",value:n,placeholder:o("comments.replyPlaceholder"),...d?{"aria-invalid":true,"data-refused":""}:{},onChange:R=>{c(false),a(R.target.value);},onClick:R=>R.stopPropagation(),onKeyDown:R=>{R.key==="Enter"&&(R.preventDefault(),w());}}),jsxs("div",{className:"docx-review__reply-actions",children:[jsx("button",{type:"button","data-testid":"review-reply-cancel",className:"docx-review__text-button",onMouseDown:U,onClick:R=>{R.stopPropagation(),a(""),c(false),r.setActive(null);},children:o("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:n.trim().length===0,children:o("review.reply")})]}),d?jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:o("review.replyRefused")}):null]})}$e.docxReviewPart="Reply";var zt=Object.assign(Ft,{List:fe,Empty:Se,Card:Le,Avatar:re,Author:ie,Time:ae,Summary:se,Accept:pe,Reject:we,Delete:Re,Replies:Oe,Reply:$e,Markers:Ie,AddComment:Te,Draft:Me,Balloon:De});function le(e){let i=useDocxEditor();return useMemo(()=>e||(i?.getCustomNodeDefinitions()??[]).filter(j),[e,i])}var Xt=".docx-content-control-boundary";function X(e,i){let{node:l,definition:r,controlId:t}=e,o=t?i?.getReviewItems().find(d=>d.kind==="custom"&&d.item.id===t):void 0;if(o&&o.kind==="custom"){let d=o.item;return {...l,attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data},...t?{nodeId:t}:{}}}let n=t?Jt(i,t,r):void 0,a=r.fromDocx?r.fromDocx({attrs:l.attrs,text:"",...n===void 0?{}:{data:n}}):l.attrs;return a===null?null:{...l,attrs:a,...n===void 0?{}:{data:n},...t?{nodeId:t}:{}}}function Jt(e$1,i,l){let r=e$1?.surface;if(!r)return;let t=r.session.part(),o=customNodePayloadsByControl(r.session.currentPackage(),t.name).get(i);if(!o)return;let n=e(l.schema,o.data);return n.ok?n.value:void 0}function J(e,i){let l=e?.closest?.(Xt),r=l?.closest(".docx-content-control-chrome"),t=r?.getAttribute("data-tag"),o=t?c(t):null;if(!l||!o||!t)return null;let n=i.find(a=>a.tagPrefix===o.prefix&&a.name===o.name);return n?{node:{name:o.name,attrs:o.attrs,tag:t,rect:l.getBoundingClientRect()},definition:n,controlId:r?.getAttribute("data-docx-content-control")??null}:null}var He=".docx-content-control-boundary",tn=e=>{if(!k$1.test(e.tagPrefix)||!k$1.test(e.name))return [];let i=`${e.tagPrefix}:${e.name}`;return [`.docx-content-control-chrome[data-tag="${i}"]`,`.docx-content-control-chrome[data-tag^="${i}?"]`]};function nn(e){let{onNodeClick:i,onNodeHover:l}=e,r=useDocxEditor(),t=le(e.nodes);return useEffect(()=>{let o=document.createElement("style"),n=[];for(let a of t){let d=tn(a);if(d.length===0)continue;let c=a.chrome?.color!==void 0&&CSS.supports("color",a.chrome.color)?a.chrome.color:"#2563eb";n.push(`${d.map(p=>`${p} ${He}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${c} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return o.textContent=n.join(`
2
+ `),document.head.append(o),()=>o.remove()},[t]),useEffect(()=>{let o=null,n=null,a=w=>J(document.elementFromPoint(w.clientX,w.clientY),t),d=w=>{let R=w.button===0?a(w):null;o=R?.controlId??null,n=R?.node.tag??null;},c=w=>{let R=o,y=n;if(o=null,n=null,y===null)return;let u=a(w);if(!u||u.node.tag!==y||R!==null&&u.controlId!==R)return;let m=X(u,r);m&&(u.definition.onClick?.(m),i?.(m));},p=w=>{let R=J(w.target,t);if(!R||w.relatedTarget?.closest?.(He)===w.target.closest(He))return;let u=X(R,r);u&&(R.definition.onHover?.(u),l?.(u));};return document.addEventListener("pointerdown",d,true),document.addEventListener("pointerup",c,true),document.addEventListener("mouseover",p),()=>{document.removeEventListener("pointerdown",d,true),document.removeEventListener("pointerup",c,true),document.removeEventListener("mouseover",p);}},[t,r,i,l]),null}function ft(e){let{onEditNode:i,onRemoveRefused:l,remove:r=true}=e,t=le(e.nodes),o=useContextMenuTarget(),n=useDocxEditor(),{t:a}=useTranslation(),d=useMemo(()=>o?J(o,t):null,[o,t]),c=useMemo(()=>d?X(d,n):null,[d,n]),p=useMemo(()=>!d?.definition.reviewCard||!c?null:d.definition.reviewCard({attrs:c.attrs,text:c.text??"",...c.data===void 0?{}:{data:c.data}}),[d,c]);if(!d||!c)return null;let{definition:w}=d,R=w.label??w.name,y=w.onEdit!==void 0||i!==void 0,u=r&&c.nodeId!==void 0&&n!==null;return !p&&!y&&!u?null:jsxs(Fragment,{children:[p?jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsx("span",{className:"docx-contextmenu__custom-title",children:p.title}),p.detail?jsx("span",{className:"docx-contextmenu__custom-detail",children:p.detail}):null]}):null,y?jsx(ContextMenuItem,{label:a("contextMenu.editCustomNode",{label:R}),className:"docx-contextmenu__custom-edit",onSelect:()=>{w.onEdit?.(c),i?.(c,w);}}):null,u?jsx(ContextMenuItem,{label:a("contextMenu.removeCustomNode",{label:R}),className:"docx-contextmenu__custom-remove",onSelect:()=>{let m=q(n,c.nodeId);m.ok||l?.(c,m.reason);}}):null,jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}ft.docxRowPlacement="start";export{nn as CustomNodeChrome,ft as CustomNodeContextMenu,zt as DocxEditorReview,X as activatedCustomNodeOf,J as resolveCustomNodeActivation,le as useCustomNodeDefinitions,me as useReview,Tt as useReviewItem,rt as useReviewOf,Nt as useStackedReviewPositions};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docx-editor.dev/pro",
3
- "version": "2.0.1",
3
+ "version": "2.1.1",
4
4
  "description": "Commercial capabilities for @docx-editor.dev: the review module (comments, tracked changes, markup rendering) and custom inline nodes over content controls.",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -57,7 +57,8 @@
57
57
  "license-check-and-add": "^4.0.5",
58
58
  "react": "^19.0.0",
59
59
  "react-dom": "^19.0.0",
60
- "typescript": "^5.3.3"
60
+ "typescript": "^5.3.3",
61
+ "zod": "^4.4.3"
61
62
  },
62
63
  "keywords": [
63
64
  "docx",
@@ -1 +0,0 @@
1
- import {findNode,revisionItemsOf,collectReviewItems,paragraphOrderOfPart,locateSites,segmentsOf}from'@docx-editor.dev/core/store';import {reviewItemPositionRank}from'@docx-editor.dev/core/layout';function f(e){}var z=64,I=new Set(["__proto__","constructor","prototype"]);function p(e,i,r){let s=new URLSearchParams;for(let[o,d]of Object.entries(r))s.set(o,d);let a=s.toString(),t=a.length>0?`${e}:${i}?${a}`:`${e}:${i}`;return t.length>64?{ok:false,reason:"tag-overflow",length:t.length}:{ok:true,tag:t}}function g(e){if(e.length>64)return null;let i=e.indexOf(":");if(i<=0)return null;let r=e.slice(0,i),s=e.slice(i+1),a=s.indexOf("?"),t=a===-1?s:s.slice(0,a);if(t.length===0)return null;let o=Object.create(null);if(a!==-1)for(let[d,n]of new URLSearchParams(s.slice(a+1))){if(I.has(d))return null;o[d]=n;}return {prefix:r,name:t,attrs:o}}function x(e){return typeof e=="object"&&e!==null&&typeof e.name=="string"&&typeof e.tagPrefix=="string"}var y=/^[A-Za-z0-9_.-]+$/;function U(e){if(!y.test(e.name??""))throw new Error(`defineCustomNode: invalid name ${JSON.stringify(e.name)}`);if(!y.test(e.tagPrefix??""))throw new Error(`defineCustomNode: invalid tagPrefix ${JSON.stringify(e.tagPrefix)}`);return Object.freeze({...e})}function F(e){return f(e.licenseKey),{id:"custom-nodes",customNodes:e.nodes}}function k(e){for(let i of e.children)if(!(i.kind==="textValue"||i.localName!=="sdtPr")){for(let r of i.children)if(!(r.kind==="textValue"||r.localName!=="tag")){for(let s of r.attributes)if(s.localName==="val")return s.value}}}function v(e){if(e.kind==="textValue")return e.value;let i="";for(let r of e.children)i+=v(r);return i}function N(e,i){if(i.length===0)return [];let r=new Map;for(let t of i){let o=`${t.tagPrefix}:${t.name}`;if(r.has(o))throw new Error(`recognizeCustomNodes: duplicate definition for ${JSON.stringify(o)}`);r.set(o,t);}let s=[],a=(t,o)=>{if(!(t.kind==="textValue"||o>64)){if(t.kind==="contentControl"){let d=k(t),n=d!==void 0?g(d):null,l=n?r.get(`${n.prefix}:${n.name}`):void 0;if(n&&l&&d!==void 0){let c=v(t),u=l.fromDocx?l.fromDocx({attrs:n.attrs,text:c}):n.attrs;if(u!==null){s.push({name:l.name,attrs:u,text:c,nodeId:t.id,tag:d});return}}}for(let d of t.children)a(d,o+1);}};return a(e.root,0),s}function R(e,i){let r=findNode(e,i);return !r||r.kind!=="paragraph"?[]:revisionItemsOf({id:e.id,name:e.name,contentType:e.contentType,root:r})}function b(e,i){let r=i.filter(o=>o.reviewCard);if(r.length===0)return [];let s=N(e,r);if(s.length===0)return [];let a=locateSites(e),t=[];for(let o of s){let d=r.find(c=>c.name===o.name&&o.tag.startsWith(`${c.tagPrefix}:`));if(!d)continue;let n=d.reviewCard({attrs:o.attrs,text:o.text});if(n===null)continue;let l=a.get(o.nodeId);t.push({kind:"custom",id:o.nodeId,name:o.name,tag:o.tag,attrs:o.attrs,text:o.text,title:n.title,...n.detail!==void 0?{detail:n.detail}:{},range:l?{partName:e.name,start:{paragraphId:l.paragraphId,offset:l.start},end:{paragraphId:l.paragraphId,offset:l.end}}:null});}return t}function O(e){let i=collectReviewItems(e),r=(e.customNodes??[]).filter(x);if(r.length===0)return i;let s=[e.storyPart],a=new Set([e.storyPart.name]);for(let n of e.furnitureParts??[])a.has(n.name)||(a.add(n.name),s.push(n));let t=[],o=new Map;for(let n of s){t.push(...b(n,r));let l=o.size;for(let[c,u]of paragraphOrderOfPart(n))o.has(c)||o.set(c,l+u);}return t.length===0?i:[...i,...t].sort((n,l)=>reviewItemPositionRank(n,o)-reviewItemPositionRank(l,o))}function se(e={}){return f(e.licenseKey),{id:"review",review:{displayModes:["all-markup","proposed","original"],collectReviewItems:O,revisionItemsOfParagraph:R}}}function w(e){return e.surface??null}function _(e,i){let r=null,s=t=>t.id===i?true:t.kind==="textValue"?false:t.children.some(s),a=(t,o)=>{if(!(r||t.kind==="textValue"||o>64)){if(t.kind==="paragraph"){s(t)&&(r=t);return}for(let d of t.children)a(d,o+1);}};return a(e.root,0),r}function A(e,i){let r=new Set,s=n=>{if(r.add(n.id),n.kind!=="textValue")for(let l of n.children)s(l);},a=n=>{if(n.id===i)return n;if(n.kind==="textValue")return null;for(let l of n.children){let c=a(l);if(c)return c}return null},t=a(e);if(!t)return null;s(t);let o=Number.MAX_SAFE_INTEGER,d=-1;for(let n of segmentsOf(e))r.has(n.runId)&&(n.start<o&&(o=n.start),n.end>d&&(d=n.end));return d<0?null:{start:o,end:d}}function ce(e,i){let r=w(e);if(!r)return {ok:false,code:"notFound",reason:"no document is mounted"};let s=r.session.applyTreeOps([{op:"removeContentControl",controlId:i,keepContent:false}]);return s.committed?{ok:true,changed:true}:{ok:false,code:"unsupported",reason:typeof s.reason=="string"?s.reason:"the removal was refused"}}function ue(e,i,r,s,a,t={}){let o=w(e);if(!o)return {ok:false,code:"notFound",reason:"no document is mounted"};let d=p(i.tagPrefix,i.name,s);if(!d.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${d.length} characters; Word caps w:tag at 64 \u2014 shorten the attrs`};let n=o.session.part(),l=_(n,r),c=l?A(l,r):null;if(!l||!c)return {ok:false,code:"notFound",reason:"no custom node with that id"};let u=t.lock===void 0?"contentLocked":t.lock,m=o.session.applyTreeOps([{op:"removeContentControl",controlId:r,keepContent:false},{op:"insertInlineContentControl",paragraphId:l.id,offset:c.start,tag:d.tag,text:a,...t.alias===void 0?{}:{alias:t.alias},...u===false?{}:{lock:u}}]);return m.committed?{ok:true,changed:true}:{ok:false,code:"unsupported",reason:typeof m.reason=="string"?m.reason:"the update was refused"}}export{z as a,p as b,g as c,x as d,y as e,U as f,F as g,N as h,se as i,ce as j,ue as k};