@docx-editor.dev/pro 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/dist/chunk-FVI3MGO7.js +1 -0
- package/dist/chunk-MNK6DXJQ.cjs +1 -0
- package/dist/define-custom-node-BTTX66B3.d.cts +500 -0
- package/dist/define-custom-node-BTTX66B3.d.ts +500 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +323 -36
- package/dist/index.d.ts +323 -36
- package/dist/index.js +1 -1
- package/dist/react/index.cjs +2 -2
- package/dist/react/index.d.cts +31 -16
- package/dist/react/index.d.ts +31 -16
- package/dist/react/index.js +2 -2
- package/package.json +5 -4
- package/dist/chunk-NZOS3H23.js +0 -1
- package/dist/chunk-TNSHSAA4.cjs +0 -1
- package/dist/define-custom-node-CkkDPdB0.d.cts +0 -191
- package/dist/define-custom-node-CkkDPdB0.d.ts +0 -191
package/dist/react/index.cjs
CHANGED
|
@@ -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
|
|
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;
|
package/dist/react/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { P as ProLicenseOptions,
|
|
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
|
-
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
/**
|
|
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
|
|
471
|
-
* state
|
|
472
|
-
*
|
|
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
|
|
487
|
-
*
|
|
488
|
-
*
|
|
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
|
|
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:
|
|
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
|
|
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 };
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { P as ProLicenseOptions,
|
|
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
|
-
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
/**
|
|
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
|
|
471
|
-
* state
|
|
472
|
-
*
|
|
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
|
|
487
|
-
*
|
|
488
|
-
*
|
|
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
|
|
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:
|
|
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
|
|
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 };
|
package/dist/react/index.js
CHANGED
|
@@ -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
|
|
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.
|
|
3
|
+
"version": "2.1.0",
|
|
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",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"license:add": "license-check-and-add add -f license-check.json"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"@docx-editor.dev/core": "^2.0.
|
|
34
|
-
"@docx-editor.dev/react": "^2.0.
|
|
33
|
+
"@docx-editor.dev/core": "^2.0.1",
|
|
34
|
+
"@docx-editor.dev/react": "^2.0.1",
|
|
35
35
|
"react": "^18.0.0 || ^19.0.0",
|
|
36
36
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
37
37
|
},
|
|
@@ -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",
|
package/dist/chunk-NZOS3H23.js
DELETED
|
@@ -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};
|