@docx-editor.dev/pro 2.4.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- 'use strict';var store=require('@docx-editor.dev/core/store'),layout=require('@docx-editor.dev/core/layout');function g(e){}var Oe=64,H=new Set(["__proto__","constructor","prototype"]);function h(e,t,o){let n=new URLSearchParams;for(let[s,d]of Object.entries(o))n.set(s,d);let r=n.toString(),a=r.length>0?`${e}:${t}?${r}`:`${e}:${t}`;return a.length>64?{ok:false,reason:"tag-overflow",length:a.length}:{ok:true,tag:a}}function N(e){if(e.length>64)return null;let t=e.indexOf(":");if(t<=0)return null;let o=e.slice(0,t),n=e.slice(t+1),r=n.indexOf("?"),a=r===-1?n:n.slice(0,r);if(a.length===0)return null;let s=Object.create(null);if(r!==-1)for(let[d,i]of new URLSearchParams(n.slice(r+1))){if(H.has(d))return null;s[d]=i;}return {prefix:o,name:a,attrs:s}}var Ie=262144;function x(e,t){if(t.length===0)return {ok:false,reason:"malformed",issues:["the node carries no payload"]};if(t.length>262144)return {ok:false,reason:"malformed",issues:[`the payload is ${String(t.length)} characters; the cap is ${String(262144)}`]};let o;try{o=JSON.parse(t);}catch(a){return {ok:false,reason:"malformed",issues:[a instanceof Error?a.message:"the payload is not JSON"]}}let n=I(o);if(!e)return {ok:true,value:n};let r=e["~standard"].validate(n);return B(r)?{ok:false,reason:"async",issues:["the schema validates asynchronously, which the read path cannot await"]}:r.issues?{ok:false,reason:"invalid",issues:r.issues.map(q)}:{ok:true,value:r.value}}function R(e){let t;try{t=JSON.stringify(e)??"";}catch(o){return {ok:false,reason:"malformed",issues:[o instanceof Error?o.message:"the value cannot be serialized"]}}return t.length===0?{ok:false,reason:"malformed",issues:["the value serializes to nothing"]}:t.length>262144?{ok:false,reason:"malformed",issues:[`the payload is ${String(t.length)} characters; the cap is ${String(262144)}`]}:{ok:true,value:t}}function B(e){return typeof e.then=="function"}function q(e){let t=(e.path??[]).map(o=>String(typeof o=="object"?o.key:o)).join(".");return t.length>0?`${t}: ${e.message}`:e.message}var Y=new Set(["__proto__","constructor","prototype"]);function I(e){if(Array.isArray(e))return e.map(I);if(e===null||typeof e!="object")return e;let t=Object.create(null);for(let[o,n]of Object.entries(e))Y.has(o)||(t[o]=I(n));return t}function _(e){let t=(e.path??[]).map(o=>{let n=typeof o=="object"?o.key:o;return typeof n=="number"?n:String(n)});return {message:e.message,path:t,pointer:t.join(".")}}function S(e,t){return {ok:false,code:"invalidArgs",reason:e,issues:t}}var b="docxEditor";function v(e){return e.payloadNamespace??`urn:docx-editor.dev:custom-node:${e.tagPrefix}`}function M(e,t,o){let n=0;for(let r of store.customNodePayloadsOf(e,t,o).keys()){let a=/^cx(\d{1,9})$/.exec(r);if(!a)continue;let s=Number(a[1]);s>n&&(n=s);}return `cx${String(n+1)}`}function L(e,t){let o=R(t);if(!o.ok)return {ok:false,reason:`the payload cannot be serialized: ${o.issues.join(", ")}`,issues:[]};if(!e.schema)return {ok:true,data:o.value,value:t};let r=e.schema["~standard"].validate(JSON.parse(o.value));if(Q(r))return {ok:false,reason:`${e.name}'s schema validates asynchronously, which a write cannot await`,issues:[]};if(r.issues){let s=r.issues.map(_);return {ok:false,reason:`the payload does not match ${e.name}'s schema: `+s.map(d=>(d.pointer?`${d.pointer}: `:"")+d.message).join(", "),issues:s}}let a=R(r.value);return a.ok?{ok:true,data:a.value,value:r.value}:{ok:false,reason:`the payload cannot be serialized: ${a.issues.join(", ")}`,issues:[]}}function Q(e){return typeof e.then=="function"}function z(e){return typeof e=="object"&&e!==null&&typeof e.name=="string"&&typeof e.tagPrefix=="string"}var V=/^[A-Za-z0-9_.-]+$/,te=/['"<>&]|[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/;function oe(e){return e.length>0&&!te.test(e)}function Ve(e){if(!V.test(e.name??""))throw new Error(`defineCustomNode: invalid name ${JSON.stringify(e.name)}`);if(!V.test(e.tagPrefix??""))throw new Error(`defineCustomNode: invalid tagPrefix ${JSON.stringify(e.tagPrefix)}`);let t=e.schema;if(t!==void 0&&typeof t?.["~standard"]?.validate!="function")throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has a schema that does not implement Standard Schema`);if(e.payloadNamespace!==void 0&&!oe(e.payloadNamespace))throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has a payloadNamespace that cannot be written into an XPath \u2014 no quotes, angle brackets, ampersands or control characters: ${JSON.stringify(e.payloadNamespace)}`);if(e.preserveOnExport!==void 0&&e.preserveOnExport!==true&&e.preserveOnExport!==false&&e.preserveOnExport!=="text")throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has an unknown preserveOnExport ${JSON.stringify(e.preserveOnExport)}`);return Object.freeze({...e,dataOf:n=>{if(!n||n.data===void 0||n.name!==void 0&&n.name!==e.name)return;if(!e.schema)return n.data;let r=e.schema["~standard"].validate(n.data);if(typeof r.then=="function")return;let a=r;return a.issues?void 0:a.value}})}function ze(e){g(e.licenseKey);let t=new Set;for(let o of e.nodes){let n=`${o.tagPrefix}:${o.name}`;if(t.has(n))throw new Error(`customNodesModule: two definitions claim ${JSON.stringify(n)}`);t.add(n);}return {id:"custom-nodes",customNodes:e.nodes,...e.onDiagnostic?{onCustomNodeDiagnostic:o=>{e.onDiagnostic?.(o);}}:{},customNodePayloadNamespaces:[...new Set(e.nodes.map(v))]}}function ne(e){for(let t of e.children)if(!(t.kind==="textValue"||t.localName!=="sdtPr")){for(let o of t.children)if(!(o.kind==="textValue"||o.localName!=="tag")){for(let n of o.attributes)if(n.localName==="val")return n.value}}}function j(e){if(e.kind==="textValue")return e.value;let t="";for(let o of e.children)t+=j(o);return t}function W(e,t,o={}){if(t.length===0)return [];let n=new Map;for(let s of t){let d=`${s.tagPrefix}:${s.name}`;if(n.has(d))throw new Error(`recognizeCustomNodes: duplicate definition for ${JSON.stringify(d)}`);n.set(d,s);}let r=[],a=(s,d)=>{if(!(s.kind==="textValue"||d>64)){if(s.kind==="contentControl"){let i=ne(s),u=i!==void 0?N(i):null,c=u?n.get(`${u.prefix}:${u.name}`):void 0;if(u&&c&&i!==void 0){let l=j(s),f=re(c,s.id,o.payloads?.get(s.id),store.contentControlPropertiesOf(s).dataBinding!==void 0,o.onDiagnostic),m=c.fromDocx?c.fromDocx({attrs:u.attrs,text:l,...f.present?{data:f.value}:{}}):u.attrs;if(m!==null){r.push({name:c.name,attrs:m,text:l,nodeId:s.id,tag:i,...f.present?{data:f.value}:{}});return}}}for(let i of s.children)a(i,d+1);}};return a(e.root,0),r}function re(e,t,o,n,r){if(!o)return n&&r?.({code:"payload-missing",name:e.name,nodeId:t,issues:["the control binds a store node this document does not hold"]}),{present:false};let a=x(e.schema,o.data);return a.ok?{present:true,value:a.value}:(r?.({code:"payload-invalid",name:e.name,nodeId:t,issues:a.issues}),{present:false})}function K(e,t){let o=store.findNode(e,t);return !o||o.kind!=="paragraph"?[]:store.revisionItemsOf({id:e.id,name:e.name,contentType:e.contentType,root:o})}function ce(e,t,o,n){if(t.length===0)return [];let r=W(e,t,{...o===void 0?{}:{payloads:o},...n===void 0?{}:{onDiagnostic:n}});if(r.length===0)return [];let a=store.locateSites(e),s=[];for(let d of r){let i=t.find(l=>l.name===d.name&&d.tag.startsWith(`${l.tagPrefix}:`));if(!i)continue;let u=i.reviewCard?i.reviewCard({attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data}}):null;if(i.reviewCard&&u===null)continue;let c=a.get(d.nodeId);s.push({kind:"custom",id:d.nodeId,name:d.name,tag:d.tag,attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data},carded:i.reviewCard!==void 0&&u!==null,title:u?.title??"",...u?.detail!==void 0?{detail:u.detail}:{},...u?.icon!==void 0?{icon:u.icon}:{},range:c?{partName:e.name,start:{paragraphId:c.paragraphId,offset:c.start},end:{paragraphId:c.paragraphId,offset:c.end}}:null});}return s}function U(e){let t=store.collectReviewItems(e),o=(e.customNodes??[]).filter(z);if(o.length===0)return t;let n=[e.storyPart],r=new Set([e.storyPart.name]);for(let i of e.furnitureParts??[])r.has(i.name)||(r.add(i.name),n.push(i));let a=[],s=new Map;for(let i of n){a.push(...ce(i,o,i.name===e.storyPart.name?e.customNodePayloads:void 0,e.reportCustomNodeDiagnostic));let u=s.size;for(let[c,l]of store.paragraphOrderOfPart(i))s.has(c)||s.set(c,u+l);}return a.length===0?t:[...t,...a].sort((i,u)=>layout.reviewItemPositionRank(i,s)-layout.reviewItemPositionRank(u,s))}function ot(e={}){return g(e.licenseKey),{id:"review",review:{displayModes:["all-markup","proposed","original"],collectReviewItems:U,revisionItemsOfParagraph:K}}}function G(e){return e.surface??null}function E(e,t){if(t==null)return null;let o=L(e,t);return o.ok?{ok:true,serialized:o.data,value:o.value}:{ok:false,reason:o.reason,issues:o.issues}}function D(e,t,o,n,r){let a=v(t),s=e.session.part().name;return {namespaceUri:a,rootLocalName:b,nodeId:r??M(e.session.currentPackage(),s,a),label:n,data:o}}function k(e){let t=e.detail?`${e.reason}: ${e.detail}`:e.reason;return {ok:false,code:me.has(e.reason)?"invalidArgs":"unsupported",reason:t}}var me=new Set(["payload-too-large","unaddressable-payload","store-not-authored","offset-out-of-range","invalid-range","invalid-property-value","splits-surrogate-pair"]);function A(e,t,o){let n,r;if(o!==void 0)try{n=e.text?.(o),r=e.tagAttrs?.(o);}catch(s){return {reason:`${e.name} could not describe this payload: ${s instanceof Error?s.message:String(s)}`}}let a=t.text??n;return a===void 0?{reason:e.text?`${e.name} derives its text from \`data\`, so pass one \u2014 or pass \`text\` directly`:`${e.name} declares no \`text\`, so \`text\` is required`}:t.attrs===void 0&&e.tagAttrs&&r===void 0?{reason:`${e.name} derives its tag attrs from \`data\`, so pass one \u2014 or pass \`attrs\` directly`}:{attrs:t.attrs??r??{},text:a}}function C(e){return e.getEditingMode()==="viewing"?{ok:false,code:"locked",reason:"the document is open for viewing"}:null}function P(e){let t=e.getActiveScope();if(t.kind==="headerFooter")return {kind:"headerFooter",rId:t.rId};if(t.kind==="note"){let o=store.parseNoteScopeId(t.id);if(o)return {kind:"notesPart",noteKind:o.noteKind}}return {kind:"body"}}function T(e,t){let o=G(e),n=t===void 0?"":t.slice(0,t.indexOf("#"));if(!o||n.length===0)return P(e);if(n===o.session.part().name)return {kind:"body"};for(let r of o.session.headerFooterResolutionBySection())for(let a of [r.headers,r.footers])for(let s of a.values())if(s.partName===n)return {kind:"headerFooter",rId:s.rId};for(let r of ["footnote","endnote"])if(o.session.partFor({kind:"notesPart",noteKind:r})?.name===n)return {kind:"notesPart",noteKind:r};return P(e)}function it(e,t,o={}){let n=G(e);if(!n)return {ok:false,code:"notFound",reason:"no document is mounted"};let r=E(t,o.data);if(r&&!r.ok)return S(r.reason,r.issues);let a=A(t,o,r?.value);if("reason"in a)return {ok:false,code:"invalidArgs",reason:a.reason};let s=h(t.tagPrefix,t.name,a.attrs);if(!s.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${s.length} characters; Word caps w:tag at 64 \u2014 move what does not fit into the payload (\`data\`), or shorten the attrs`};let d=C(e);if(d)return d;let i=o.at??n.state().selection.head,u=o.lock===void 0?"contentLocked":o.lock,c=P(e),l=n.session.insertCustomNode({paragraphId:i.paragraphId,offset:i.offset,tag:s.tag,text:a.text,...o.alias===void 0?{}:{alias:o.alias},...u===false?{}:{lock:u},...r?{payload:D(n,t,r.serialized,a.text)}:{}},c);return l.ok?{ok:true,changed:true,...l.nodeId===void 0?{}:{nodeId:l.nodeId}}:k(l)}function J(e){return e.surface??null}function Ne(e,t){let o=null,n=a=>a.id===t?true:a.kind==="textValue"?false:a.children.some(n),r=(a,s)=>{if(!(o||a.kind==="textValue"||s>64)){if(a.kind==="paragraph"){n(a)&&(o=a);return}for(let d of a.children)r(d,s+1);}};return r(e.root,0),o}function xe(e,t){let o=new Set,n=i=>{if(o.add(i.id),i.kind!=="textValue")for(let u of i.children)n(u);},r=i=>{if(i.id===t)return i;if(i.kind==="textValue")return null;for(let u of i.children){let c=r(u);if(c)return c}return null},a=r(e);if(!a)return null;n(a);let s=Number.MAX_SAFE_INTEGER,d=-1;for(let i of store.segmentsOf(e))o.has(i.runId)&&(i.start<s&&(s=i.start),i.end>d&&(d=i.end));return d<0?null:{start:s,end:d}}function gt(e,t){let o=J(e);if(!o)return {ok:false,code:"notFound",reason:"no document is mounted"};let n=C(e);if(n)return n;let r=o.session.removeCustomNode(t,T(e,t));return r.ok?{ok:true,changed:true}:k(r)}function ht(e,t,o,n={}){let r=J(e);if(!r)return {ok:false,code:"notFound",reason:"no document is mounted"};let a=C(e);if(a)return a;let s=T(e,o),d=r.session.partFor(s)??r.session.part(),i=Ne(d,o),u=i?xe(i,o):null,c=Se(r,o,s);if(!i||!u||!c)return {ok:false,code:"notFound",reason:"no custom node with that id"};let l=`${t.tagPrefix}:${t.name}`;if(c.identity!==null&&c.identity!==l)return {ok:false,code:"invalidArgs",reason:`node ${o} is a ${c.identity}, not a ${l}`};let f=ke(r,o),m=n.data===null?null:n.data===void 0?ve(f):E(t,n.data);if(m&&!m.ok)return S(m.reason,m.issues);let p=A(t,{attrs:n.attrs??(n.data===void 0?c.attrs:void 0),text:n.text??(m===null&&n.data===null?c.text:void 0)},m?.value);if("reason"in p)return {ok:false,code:"invalidArgs",reason:p.reason};let O=h(t.tagPrefix,t.name,p.attrs);if(!O.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${O.length} characters; Word caps w:tag at 64 \u2014 move what does not fit into the payload (\`data\`), or shorten the attrs`};let $=n.alias??c.alias,w=n.lock??c.lock,y=r.session.insertCustomNode({replaceControlId:o,paragraphId:i.id,offset:u.start,tag:O.tag,text:p.text,...$===void 0?{}:{alias:$},...w===false||w===void 0?{}:{lock:w},...m?{payload:D(r,t,m.serialized,p.text,f?.nodeId)}:{}},s);return y.ok?{ok:true,changed:true,...y.nodeId===void 0?{}:{nodeId:y.nodeId}}:k(y)}function Se(e,t,o){let n=e.session.partFor(o)??e.session.part(),r=store.contentControlsIn(n.root).find(i=>i.node.id===t);if(!r)return null;let a=store.contentControlPropertiesOf(r.node),s=a.tag===void 0?null:N(a.tag),d=a.lock;return {identity:s?`${s.prefix}:${s.name}`:null,attrs:s?.attrs??{},text:store.contentControlTextOf(r.node),alias:a.alias,lock:d==="sdtLocked"||d==="sdtContentLocked"||d==="contentLocked"?d:d==="unlocked"?false:void 0}}function ve(e){if(!e)return null;let t=x(void 0,e.data);return t.ok?{ok:true,serialized:e.data,value:t.value}:{ok:false,reason:`the stored payload is not readable: ${t.issues.join(", ")}`,issues:[]}}function ke(e,t){let o=e.session.part();return store.customNodePayloadsByControl(e.session.currentPackage(),o.name).get(t)}exports.a=Oe;exports.b=h;exports.c=N;exports.d=Ie;exports.e=x;exports.f=R;exports.g=b;exports.h=v;exports.i=L;exports.j=z;exports.k=V;exports.l=Ve;exports.m=ze;exports.n=W;exports.o=ot;exports.p=it;exports.q=gt;exports.r=ht;
1
+ 'use strict';var store=require('@docx-editor.dev/core/store'),layout=require('@docx-editor.dev/core/layout');function g(e){}var Oe=64,H=new Set(["__proto__","constructor","prototype"]);function h(e,t,o){let n=new URLSearchParams;for(let[s,d]of Object.entries(o))n.set(s,d);let r=n.toString(),a=r.length>0?`${e}:${t}?${r}`:`${e}:${t}`;return a.length>64?{ok:false,reason:"tag-overflow",length:a.length}:{ok:true,tag:a}}function N(e){if(e.length>64)return null;let t=e.indexOf(":");if(t<=0)return null;let o=e.slice(0,t),n=e.slice(t+1),r=n.indexOf("?"),a=r===-1?n:n.slice(0,r);if(a.length===0)return null;let s=Object.create(null);if(r!==-1)for(let[d,i]of new URLSearchParams(n.slice(r+1))){if(H.has(d))return null;s[d]=i;}return {prefix:o,name:a,attrs:s}}var Ie=262144;function x(e,t){if(t.length===0)return {ok:false,reason:"malformed",issues:["the node carries no payload"]};if(t.length>262144)return {ok:false,reason:"malformed",issues:[`the payload is ${String(t.length)} characters; the cap is ${String(262144)}`]};let o;try{o=JSON.parse(t);}catch(a){return {ok:false,reason:"malformed",issues:[a instanceof Error?a.message:"the payload is not JSON"]}}let n=I(o);if(!e)return {ok:true,value:n};let r=e["~standard"].validate(n);return B(r)?{ok:false,reason:"async",issues:["the schema validates asynchronously, which the read path cannot await"]}:r.issues?{ok:false,reason:"invalid",issues:r.issues.map(q)}:{ok:true,value:r.value}}function R(e){let t;try{t=JSON.stringify(e)??"";}catch(o){return {ok:false,reason:"malformed",issues:[o instanceof Error?o.message:"the value cannot be serialized"]}}return t.length===0?{ok:false,reason:"malformed",issues:["the value serializes to nothing"]}:t.length>262144?{ok:false,reason:"malformed",issues:[`the payload is ${String(t.length)} characters; the cap is ${String(262144)}`]}:{ok:true,value:t}}function B(e){return typeof e.then=="function"}function q(e){let t=(e.path??[]).map(o=>String(typeof o=="object"?o.key:o)).join(".");return t.length>0?`${t}: ${e.message}`:e.message}var Y=new Set(["__proto__","constructor","prototype"]);function I(e){if(Array.isArray(e))return e.map(I);if(e===null||typeof e!="object")return e;let t=Object.create(null);for(let[o,n]of Object.entries(e))Y.has(o)||(t[o]=I(n));return t}function _(e){let t=(e.path??[]).map(o=>{let n=typeof o=="object"?o.key:o;return typeof n=="number"?n:String(n)});return {message:e.message,path:t,pointer:t.join(".")}}function S(e,t){return {ok:false,code:"invalidArgs",reason:e,issues:t}}var b="docxEditor";function v(e){return e.payloadNamespace??`urn:docx-editor.dev:custom-node:${e.tagPrefix}`}function M(e,t,o){let n=0;for(let r of store.customNodePayloadsOf(e,t,o).keys()){let a=/^cx(\d{1,9})$/.exec(r);if(!a)continue;let s=Number(a[1]);s>n&&(n=s);}return `cx${String(n+1)}`}function L(e,t){let o=R(t);if(!o.ok)return {ok:false,reason:`the payload cannot be serialized: ${o.issues.join(", ")}`,issues:[]};if(!e.schema)return {ok:true,data:o.value,value:t};let r=e.schema["~standard"].validate(JSON.parse(o.value));if(Q(r))return {ok:false,reason:`${e.name}'s schema validates asynchronously, which a write cannot await`,issues:[]};if(r.issues){let s=r.issues.map(_);return {ok:false,reason:`the payload does not match ${e.name}'s schema: `+s.map(d=>(d.pointer?`${d.pointer}: `:"")+d.message).join(", "),issues:s}}let a=R(r.value);return a.ok?{ok:true,data:a.value,value:r.value}:{ok:false,reason:`the payload cannot be serialized: ${a.issues.join(", ")}`,issues:[]}}function Q(e){return typeof e.then=="function"}function z(e){return typeof e=="object"&&e!==null&&typeof e.name=="string"&&typeof e.tagPrefix=="string"}var V=/^[A-Za-z0-9_.-]+$/,te=/['"<>&]|[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/;function oe(e){return e.length>0&&!te.test(e)}function Ve(e){if(!V.test(e.name??""))throw new Error(`defineCustomNode: invalid name ${JSON.stringify(e.name)}`);if(!V.test(e.tagPrefix??""))throw new Error(`defineCustomNode: invalid tagPrefix ${JSON.stringify(e.tagPrefix)}`);let t=e.schema;if(t!==void 0&&typeof t?.["~standard"]?.validate!="function")throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has a schema that does not implement Standard Schema`);if(e.payloadNamespace!==void 0&&!oe(e.payloadNamespace))throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has a payloadNamespace that cannot be written into an XPath \u2014 no quotes, angle brackets, ampersands or control characters: ${JSON.stringify(e.payloadNamespace)}`);if(e.preserveOnExport!==void 0&&e.preserveOnExport!==true&&e.preserveOnExport!==false&&e.preserveOnExport!=="text")throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has an unknown preserveOnExport ${JSON.stringify(e.preserveOnExport)}`);return Object.freeze({...e,dataOf:n=>{if(!n||n.data===void 0||n.name!==void 0&&n.name!==e.name)return;if(!e.schema)return n.data;let r=e.schema["~standard"].validate(n.data);if(typeof r.then=="function")return;let a=r;return a.issues?void 0:a.value}})}function ze(e){g(e.licenseKey);let t=new Set;for(let o of e.nodes){let n=`${o.tagPrefix}:${o.name}`;if(t.has(n))throw new Error(`customNodesModule: two definitions claim ${JSON.stringify(n)}`);t.add(n);}return {id:"custom-nodes",customNodes:e.nodes,...e.onDiagnostic?{onCustomNodeDiagnostic:o=>{e.onDiagnostic?.(o);}}:{},customNodePayloadNamespaces:[...new Set(e.nodes.map(v))]}}function ne(e){for(let t of e.children)if(!(t.kind==="textValue"||t.localName!=="sdtPr")){for(let o of t.children)if(!(o.kind==="textValue"||o.localName!=="tag")){for(let n of o.attributes)if(n.localName==="val")return n.value}}}function j(e){if(e.kind==="textValue")return e.value;let t="";for(let o of e.children)t+=j(o);return t}function W(e,t,o={}){if(t.length===0)return [];let n=new Map;for(let s of t){let d=`${s.tagPrefix}:${s.name}`;if(n.has(d))throw new Error(`recognizeCustomNodes: duplicate definition for ${JSON.stringify(d)}`);n.set(d,s);}let r=[],a=(s,d)=>{if(!(s.kind==="textValue"||d>64)){if(s.kind==="contentControl"){let i=ne(s),u=i!==void 0?N(i):null,c=u?n.get(`${u.prefix}:${u.name}`):void 0;if(u&&c&&i!==void 0){let l=j(s),f=re(c,s.id,o.payloads?.get(s.id),store.contentControlPropertiesOf(s).dataBinding!==void 0,o.onDiagnostic),m=c.fromDocx?c.fromDocx({attrs:u.attrs,text:l,...f.present?{data:f.value}:{}}):u.attrs;if(m!==null){r.push({name:c.name,attrs:m,text:l,nodeId:s.id,tag:i,...f.present?{data:f.value}:{}});return}}}for(let i of s.children)a(i,d+1);}};return a(e.root,0),r}function re(e,t,o,n,r){if(!o)return n&&r?.({code:"payload-missing",name:e.name,nodeId:t,issues:["the control binds a store node this document does not hold"]}),{present:false};let a=x(e.schema,o.data);return a.ok?{present:true,value:a.value}:(r?.({code:"payload-invalid",name:e.name,nodeId:t,issues:a.issues}),{present:false})}function K(e,t){let o=store.findNode(e,t);return !o||o.kind!=="paragraph"?[]:store.revisionItemsOf({id:e.id,name:e.name,contentType:e.contentType,root:o})}function ce(e,t,o,n){if(t.length===0)return [];let r=W(e,t,{...o===void 0?{}:{payloads:o},...n===void 0?{}:{onDiagnostic:n}});if(r.length===0)return [];let a=store.locateSites(e),s=[];for(let d of r){let i=t.find(l=>l.name===d.name&&d.tag.startsWith(`${l.tagPrefix}:`));if(!i)continue;let u=i.reviewCard?i.reviewCard({attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data}}):null;if(i.reviewCard&&u===null)continue;let c=a.get(d.nodeId);s.push({kind:"custom",id:d.nodeId,name:d.name,tag:d.tag,attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data},carded:i.reviewCard!==void 0&&u!==null,title:u?.title??"",...u?.detail!==void 0?{detail:u.detail}:{},...u?.icon!==void 0?{icon:u.icon}:{},range:c?{partName:e.name,start:{paragraphId:c.paragraphId,offset:c.start},end:{paragraphId:c.paragraphId,offset:c.end}}:null});}return s}function U(e){let t=store.collectReviewItems(e),o=(e.customNodes??[]).filter(z);if(o.length===0)return t;let n=[e.storyPart],r=new Set([e.storyPart.name]);for(let i of e.furnitureParts??[])r.has(i.name)||(r.add(i.name),n.push(i));let a=[],s=new Map;for(let i of n){a.push(...ce(i,o,i.name===e.storyPart.name?e.customNodePayloads:void 0,e.reportCustomNodeDiagnostic));let u=s.size;for(let[c,l]of store.paragraphOrderOfPart(i))s.has(c)||s.set(c,u+l);}return a.length===0?t:[...t,...a].sort((i,u)=>layout.reviewItemPositionRank(i,s)-layout.reviewItemPositionRank(u,s))}function ot(e={}){return g(e.licenseKey),{id:"review",review:{displayModes:["all-markup","proposed","original"],collectReviewItems:U,revisionItemsOfParagraph:K}}}function G(e){return e.surface??null}function E(e,t){if(t==null)return null;let o=L(e,t);return o.ok?{ok:true,serialized:o.data,value:o.value}:{ok:false,reason:o.reason,issues:o.issues}}function D(e,t,o,n,r){let a=v(t),s=e.session.part().name;return {namespaceUri:a,rootLocalName:b,nodeId:r??M(e.session.currentPackage(),s,a),label:n,data:o}}function k(e){let t=e.detail?`${e.reason}: ${e.detail}`:e.reason;return {ok:false,code:me.has(e.reason)?"invalidArgs":"unsupported",reason:t}}var me=new Set(["payload-too-large","unaddressable-payload","store-not-authored","offset-out-of-range","invalid-range","invalid-property-value","splits-surrogate-pair"]);function A(e,t,o){let n,r;if(o!==void 0)try{n=e.text?.(o),r=e.tagAttrs?.(o);}catch(s){return {reason:`${e.name} could not describe this payload: ${s instanceof Error?s.message:String(s)}`}}let a=t.text??n;return a===void 0?{reason:e.text?`${e.name} derives its text from \`data\`, so pass one \u2014 or pass \`text\` directly`:`${e.name} declares no \`text\`, so \`text\` is required`}:t.attrs===void 0&&e.tagAttrs&&r===void 0?{reason:`${e.name} derives its tag attrs from \`data\`, so pass one \u2014 or pass \`attrs\` directly`}:{attrs:t.attrs??r??{},text:a}}function C(e){return e.getEditingMode()==="viewing"?{ok:false,code:"locked",reason:"the document is open for viewing"}:null}function P(e){let t=e.getActiveScope();if(t.kind==="headerFooter")return {kind:"headerFooter",rId:t.rId};if(t.kind==="note"){let o=store.parseNoteScopeId(t.id);if(o)return {kind:"notesPart",noteKind:o.noteKind}}return {kind:"body"}}function T(e,t){let o=G(e),n=t===void 0?"":t.slice(0,t.indexOf("#"));if(!o||n.length===0)return P(e);if(n===o.session.part().name)return {kind:"body"};for(let r of o.session.headerFooterResolutionBySection())for(let a of [r.headers,r.footers])for(let s of a.values())if(s.partName===n)return {kind:"headerFooter",rId:s.rId};for(let r of ["footnote","endnote"])if(o.session.partFor({kind:"notesPart",noteKind:r})?.name===n)return {kind:"notesPart",noteKind:r};return P(e)}function it(e,t,o={}){let n=G(e);if(!n)return {ok:false,code:"notFound",reason:"no document is mounted"};let r=E(t,o.data);if(r&&!r.ok)return S(r.reason,r.issues);let a=A(t,o,r?.value);if("reason"in a)return {ok:false,code:"invalidArgs",reason:a.reason};let s=h(t.tagPrefix,t.name,a.attrs);if(!s.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${s.length} characters; Word caps w:tag at 64 \u2014 move what does not fit into the payload (\`data\`), or shorten the attrs`};let d=C(e);if(d)return d;n.flushPendingInput();let i=o.at??n.state().selection.head,u=o.lock===void 0?"contentLocked":o.lock,c=P(e),l=n.session.insertCustomNode({paragraphId:i.paragraphId,offset:i.offset,tag:s.tag,text:a.text,...o.alias===void 0?{}:{alias:o.alias},...u===false?{}:{lock:u},...r?{payload:D(n,t,r.serialized,a.text)}:{}},c);return l.ok?{ok:true,changed:true,...l.nodeId===void 0?{}:{nodeId:l.nodeId}}:k(l)}function J(e){return e.surface??null}function Ne(e,t){let o=null,n=a=>a.id===t?true:a.kind==="textValue"?false:a.children.some(n),r=(a,s)=>{if(!(o||a.kind==="textValue"||s>64)){if(a.kind==="paragraph"){n(a)&&(o=a);return}for(let d of a.children)r(d,s+1);}};return r(e.root,0),o}function xe(e,t){let o=new Set,n=i=>{if(o.add(i.id),i.kind!=="textValue")for(let u of i.children)n(u);},r=i=>{if(i.id===t)return i;if(i.kind==="textValue")return null;for(let u of i.children){let c=r(u);if(c)return c}return null},a=r(e);if(!a)return null;n(a);let s=Number.MAX_SAFE_INTEGER,d=-1;for(let i of store.segmentsOf(e))o.has(i.runId)&&(i.start<s&&(s=i.start),i.end>d&&(d=i.end));return d<0?null:{start:s,end:d}}function gt(e,t){let o=J(e);if(!o)return {ok:false,code:"notFound",reason:"no document is mounted"};let n=C(e);if(n)return n;o.flushPendingInput();let r=o.session.removeCustomNode(t,T(e,t));return r.ok?{ok:true,changed:true}:k(r)}function ht(e,t,o,n={}){let r=J(e);if(!r)return {ok:false,code:"notFound",reason:"no document is mounted"};let a=C(e);if(a)return a;r.flushPendingInput();let s=T(e,o),d=r.session.partFor(s)??r.session.part(),i=Ne(d,o),u=i?xe(i,o):null,c=Se(r,o,s);if(!i||!u||!c)return {ok:false,code:"notFound",reason:"no custom node with that id"};let l=`${t.tagPrefix}:${t.name}`;if(c.identity!==null&&c.identity!==l)return {ok:false,code:"invalidArgs",reason:`node ${o} is a ${c.identity}, not a ${l}`};let f=ke(r,o),m=n.data===null?null:n.data===void 0?ve(f):E(t,n.data);if(m&&!m.ok)return S(m.reason,m.issues);let p=A(t,{attrs:n.attrs??(n.data===void 0?c.attrs:void 0),text:n.text??(m===null&&n.data===null?c.text:void 0)},m?.value);if("reason"in p)return {ok:false,code:"invalidArgs",reason:p.reason};let O=h(t.tagPrefix,t.name,p.attrs);if(!O.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${O.length} characters; Word caps w:tag at 64 \u2014 move what does not fit into the payload (\`data\`), or shorten the attrs`};let $=n.alias??c.alias,w=n.lock??c.lock,y=r.session.insertCustomNode({replaceControlId:o,paragraphId:i.id,offset:u.start,tag:O.tag,text:p.text,...$===void 0?{}:{alias:$},...w===false||w===void 0?{}:{lock:w},...m?{payload:D(r,t,m.serialized,p.text,f?.nodeId)}:{}},s);return y.ok?{ok:true,changed:true,...y.nodeId===void 0?{}:{nodeId:y.nodeId}}:k(y)}function Se(e,t,o){let n=e.session.partFor(o)??e.session.part(),r=store.contentControlsIn(n.root).find(i=>i.node.id===t);if(!r)return null;let a=store.contentControlPropertiesOf(r.node),s=a.tag===void 0?null:N(a.tag),d=a.lock;return {identity:s?`${s.prefix}:${s.name}`:null,attrs:s?.attrs??{},text:store.contentControlTextOf(r.node),alias:a.alias,lock:d==="sdtLocked"||d==="sdtContentLocked"||d==="contentLocked"?d:d==="unlocked"?false:void 0}}function ve(e){if(!e)return null;let t=x(void 0,e.data);return t.ok?{ok:true,serialized:e.data,value:t.value}:{ok:false,reason:`the stored payload is not readable: ${t.issues.join(", ")}`,issues:[]}}function ke(e,t){let o=e.session.part();return store.customNodePayloadsByControl(e.session.currentPackage(),o.name).get(t)}exports.a=Oe;exports.b=h;exports.c=N;exports.d=Ie;exports.e=x;exports.f=R;exports.g=b;exports.h=v;exports.i=L;exports.j=z;exports.k=V;exports.l=Ve;exports.m=ze;exports.n=W;exports.o=ot;exports.p=it;exports.q=gt;exports.r=ht;
@@ -1 +1 @@
1
- import {contentControlsIn,contentControlPropertiesOf,contentControlTextOf,findNode,revisionItemsOf,collectReviewItems,paragraphOrderOfPart,parseNoteScopeId,locateSites,customNodePayloadsOf,customNodePayloadsByControl,segmentsOf}from'@docx-editor.dev/core/store';import {reviewItemPositionRank}from'@docx-editor.dev/core/layout';function g(e){}var Oe=64,H=new Set(["__proto__","constructor","prototype"]);function h(e,t,o){let n=new URLSearchParams;for(let[s,d]of Object.entries(o))n.set(s,d);let r=n.toString(),a=r.length>0?`${e}:${t}?${r}`:`${e}:${t}`;return a.length>64?{ok:false,reason:"tag-overflow",length:a.length}:{ok:true,tag:a}}function N(e){if(e.length>64)return null;let t=e.indexOf(":");if(t<=0)return null;let o=e.slice(0,t),n=e.slice(t+1),r=n.indexOf("?"),a=r===-1?n:n.slice(0,r);if(a.length===0)return null;let s=Object.create(null);if(r!==-1)for(let[d,i]of new URLSearchParams(n.slice(r+1))){if(H.has(d))return null;s[d]=i;}return {prefix:o,name:a,attrs:s}}var Ie=262144;function x(e,t){if(t.length===0)return {ok:false,reason:"malformed",issues:["the node carries no payload"]};if(t.length>262144)return {ok:false,reason:"malformed",issues:[`the payload is ${String(t.length)} characters; the cap is ${String(262144)}`]};let o;try{o=JSON.parse(t);}catch(a){return {ok:false,reason:"malformed",issues:[a instanceof Error?a.message:"the payload is not JSON"]}}let n=I(o);if(!e)return {ok:true,value:n};let r=e["~standard"].validate(n);return B(r)?{ok:false,reason:"async",issues:["the schema validates asynchronously, which the read path cannot await"]}:r.issues?{ok:false,reason:"invalid",issues:r.issues.map(q)}:{ok:true,value:r.value}}function R(e){let t;try{t=JSON.stringify(e)??"";}catch(o){return {ok:false,reason:"malformed",issues:[o instanceof Error?o.message:"the value cannot be serialized"]}}return t.length===0?{ok:false,reason:"malformed",issues:["the value serializes to nothing"]}:t.length>262144?{ok:false,reason:"malformed",issues:[`the payload is ${String(t.length)} characters; the cap is ${String(262144)}`]}:{ok:true,value:t}}function B(e){return typeof e.then=="function"}function q(e){let t=(e.path??[]).map(o=>String(typeof o=="object"?o.key:o)).join(".");return t.length>0?`${t}: ${e.message}`:e.message}var Y=new Set(["__proto__","constructor","prototype"]);function I(e){if(Array.isArray(e))return e.map(I);if(e===null||typeof e!="object")return e;let t=Object.create(null);for(let[o,n]of Object.entries(e))Y.has(o)||(t[o]=I(n));return t}function _(e){let t=(e.path??[]).map(o=>{let n=typeof o=="object"?o.key:o;return typeof n=="number"?n:String(n)});return {message:e.message,path:t,pointer:t.join(".")}}function S(e,t){return {ok:false,code:"invalidArgs",reason:e,issues:t}}var b="docxEditor";function v(e){return e.payloadNamespace??`urn:docx-editor.dev:custom-node:${e.tagPrefix}`}function M(e,t,o){let n=0;for(let r of customNodePayloadsOf(e,t,o).keys()){let a=/^cx(\d{1,9})$/.exec(r);if(!a)continue;let s=Number(a[1]);s>n&&(n=s);}return `cx${String(n+1)}`}function L(e,t){let o=R(t);if(!o.ok)return {ok:false,reason:`the payload cannot be serialized: ${o.issues.join(", ")}`,issues:[]};if(!e.schema)return {ok:true,data:o.value,value:t};let r=e.schema["~standard"].validate(JSON.parse(o.value));if(Q(r))return {ok:false,reason:`${e.name}'s schema validates asynchronously, which a write cannot await`,issues:[]};if(r.issues){let s=r.issues.map(_);return {ok:false,reason:`the payload does not match ${e.name}'s schema: `+s.map(d=>(d.pointer?`${d.pointer}: `:"")+d.message).join(", "),issues:s}}let a=R(r.value);return a.ok?{ok:true,data:a.value,value:r.value}:{ok:false,reason:`the payload cannot be serialized: ${a.issues.join(", ")}`,issues:[]}}function Q(e){return typeof e.then=="function"}function z(e){return typeof e=="object"&&e!==null&&typeof e.name=="string"&&typeof e.tagPrefix=="string"}var V=/^[A-Za-z0-9_.-]+$/,te=/['"<>&]|[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/;function oe(e){return e.length>0&&!te.test(e)}function Ve(e){if(!V.test(e.name??""))throw new Error(`defineCustomNode: invalid name ${JSON.stringify(e.name)}`);if(!V.test(e.tagPrefix??""))throw new Error(`defineCustomNode: invalid tagPrefix ${JSON.stringify(e.tagPrefix)}`);let t=e.schema;if(t!==void 0&&typeof t?.["~standard"]?.validate!="function")throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has a schema that does not implement Standard Schema`);if(e.payloadNamespace!==void 0&&!oe(e.payloadNamespace))throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has a payloadNamespace that cannot be written into an XPath \u2014 no quotes, angle brackets, ampersands or control characters: ${JSON.stringify(e.payloadNamespace)}`);if(e.preserveOnExport!==void 0&&e.preserveOnExport!==true&&e.preserveOnExport!==false&&e.preserveOnExport!=="text")throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has an unknown preserveOnExport ${JSON.stringify(e.preserveOnExport)}`);return Object.freeze({...e,dataOf:n=>{if(!n||n.data===void 0||n.name!==void 0&&n.name!==e.name)return;if(!e.schema)return n.data;let r=e.schema["~standard"].validate(n.data);if(typeof r.then=="function")return;let a=r;return a.issues?void 0:a.value}})}function ze(e){g(e.licenseKey);let t=new Set;for(let o of e.nodes){let n=`${o.tagPrefix}:${o.name}`;if(t.has(n))throw new Error(`customNodesModule: two definitions claim ${JSON.stringify(n)}`);t.add(n);}return {id:"custom-nodes",customNodes:e.nodes,...e.onDiagnostic?{onCustomNodeDiagnostic:o=>{e.onDiagnostic?.(o);}}:{},customNodePayloadNamespaces:[...new Set(e.nodes.map(v))]}}function ne(e){for(let t of e.children)if(!(t.kind==="textValue"||t.localName!=="sdtPr")){for(let o of t.children)if(!(o.kind==="textValue"||o.localName!=="tag")){for(let n of o.attributes)if(n.localName==="val")return n.value}}}function j(e){if(e.kind==="textValue")return e.value;let t="";for(let o of e.children)t+=j(o);return t}function W(e,t,o={}){if(t.length===0)return [];let n=new Map;for(let s of t){let d=`${s.tagPrefix}:${s.name}`;if(n.has(d))throw new Error(`recognizeCustomNodes: duplicate definition for ${JSON.stringify(d)}`);n.set(d,s);}let r=[],a=(s,d)=>{if(!(s.kind==="textValue"||d>64)){if(s.kind==="contentControl"){let i=ne(s),u=i!==void 0?N(i):null,c=u?n.get(`${u.prefix}:${u.name}`):void 0;if(u&&c&&i!==void 0){let l=j(s),f=re(c,s.id,o.payloads?.get(s.id),contentControlPropertiesOf(s).dataBinding!==void 0,o.onDiagnostic),m=c.fromDocx?c.fromDocx({attrs:u.attrs,text:l,...f.present?{data:f.value}:{}}):u.attrs;if(m!==null){r.push({name:c.name,attrs:m,text:l,nodeId:s.id,tag:i,...f.present?{data:f.value}:{}});return}}}for(let i of s.children)a(i,d+1);}};return a(e.root,0),r}function re(e,t,o,n,r){if(!o)return n&&r?.({code:"payload-missing",name:e.name,nodeId:t,issues:["the control binds a store node this document does not hold"]}),{present:false};let a=x(e.schema,o.data);return a.ok?{present:true,value:a.value}:(r?.({code:"payload-invalid",name:e.name,nodeId:t,issues:a.issues}),{present:false})}function K(e,t){let o=findNode(e,t);return !o||o.kind!=="paragraph"?[]:revisionItemsOf({id:e.id,name:e.name,contentType:e.contentType,root:o})}function ce(e,t,o,n){if(t.length===0)return [];let r=W(e,t,{...o===void 0?{}:{payloads:o},...n===void 0?{}:{onDiagnostic:n}});if(r.length===0)return [];let a=locateSites(e),s=[];for(let d of r){let i=t.find(l=>l.name===d.name&&d.tag.startsWith(`${l.tagPrefix}:`));if(!i)continue;let u=i.reviewCard?i.reviewCard({attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data}}):null;if(i.reviewCard&&u===null)continue;let c=a.get(d.nodeId);s.push({kind:"custom",id:d.nodeId,name:d.name,tag:d.tag,attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data},carded:i.reviewCard!==void 0&&u!==null,title:u?.title??"",...u?.detail!==void 0?{detail:u.detail}:{},...u?.icon!==void 0?{icon:u.icon}:{},range:c?{partName:e.name,start:{paragraphId:c.paragraphId,offset:c.start},end:{paragraphId:c.paragraphId,offset:c.end}}:null});}return s}function U(e){let t=collectReviewItems(e),o=(e.customNodes??[]).filter(z);if(o.length===0)return t;let n=[e.storyPart],r=new Set([e.storyPart.name]);for(let i of e.furnitureParts??[])r.has(i.name)||(r.add(i.name),n.push(i));let a=[],s=new Map;for(let i of n){a.push(...ce(i,o,i.name===e.storyPart.name?e.customNodePayloads:void 0,e.reportCustomNodeDiagnostic));let u=s.size;for(let[c,l]of paragraphOrderOfPart(i))s.has(c)||s.set(c,u+l);}return a.length===0?t:[...t,...a].sort((i,u)=>reviewItemPositionRank(i,s)-reviewItemPositionRank(u,s))}function ot(e={}){return g(e.licenseKey),{id:"review",review:{displayModes:["all-markup","proposed","original"],collectReviewItems:U,revisionItemsOfParagraph:K}}}function G(e){return e.surface??null}function E(e,t){if(t==null)return null;let o=L(e,t);return o.ok?{ok:true,serialized:o.data,value:o.value}:{ok:false,reason:o.reason,issues:o.issues}}function D(e,t,o,n,r){let a=v(t),s=e.session.part().name;return {namespaceUri:a,rootLocalName:b,nodeId:r??M(e.session.currentPackage(),s,a),label:n,data:o}}function k(e){let t=e.detail?`${e.reason}: ${e.detail}`:e.reason;return {ok:false,code:me.has(e.reason)?"invalidArgs":"unsupported",reason:t}}var me=new Set(["payload-too-large","unaddressable-payload","store-not-authored","offset-out-of-range","invalid-range","invalid-property-value","splits-surrogate-pair"]);function A(e,t,o){let n,r;if(o!==void 0)try{n=e.text?.(o),r=e.tagAttrs?.(o);}catch(s){return {reason:`${e.name} could not describe this payload: ${s instanceof Error?s.message:String(s)}`}}let a=t.text??n;return a===void 0?{reason:e.text?`${e.name} derives its text from \`data\`, so pass one \u2014 or pass \`text\` directly`:`${e.name} declares no \`text\`, so \`text\` is required`}:t.attrs===void 0&&e.tagAttrs&&r===void 0?{reason:`${e.name} derives its tag attrs from \`data\`, so pass one \u2014 or pass \`attrs\` directly`}:{attrs:t.attrs??r??{},text:a}}function C(e){return e.getEditingMode()==="viewing"?{ok:false,code:"locked",reason:"the document is open for viewing"}:null}function P(e){let t=e.getActiveScope();if(t.kind==="headerFooter")return {kind:"headerFooter",rId:t.rId};if(t.kind==="note"){let o=parseNoteScopeId(t.id);if(o)return {kind:"notesPart",noteKind:o.noteKind}}return {kind:"body"}}function T(e,t){let o=G(e),n=t===void 0?"":t.slice(0,t.indexOf("#"));if(!o||n.length===0)return P(e);if(n===o.session.part().name)return {kind:"body"};for(let r of o.session.headerFooterResolutionBySection())for(let a of [r.headers,r.footers])for(let s of a.values())if(s.partName===n)return {kind:"headerFooter",rId:s.rId};for(let r of ["footnote","endnote"])if(o.session.partFor({kind:"notesPart",noteKind:r})?.name===n)return {kind:"notesPart",noteKind:r};return P(e)}function it(e,t,o={}){let n=G(e);if(!n)return {ok:false,code:"notFound",reason:"no document is mounted"};let r=E(t,o.data);if(r&&!r.ok)return S(r.reason,r.issues);let a=A(t,o,r?.value);if("reason"in a)return {ok:false,code:"invalidArgs",reason:a.reason};let s=h(t.tagPrefix,t.name,a.attrs);if(!s.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${s.length} characters; Word caps w:tag at 64 \u2014 move what does not fit into the payload (\`data\`), or shorten the attrs`};let d=C(e);if(d)return d;let i=o.at??n.state().selection.head,u=o.lock===void 0?"contentLocked":o.lock,c=P(e),l=n.session.insertCustomNode({paragraphId:i.paragraphId,offset:i.offset,tag:s.tag,text:a.text,...o.alias===void 0?{}:{alias:o.alias},...u===false?{}:{lock:u},...r?{payload:D(n,t,r.serialized,a.text)}:{}},c);return l.ok?{ok:true,changed:true,...l.nodeId===void 0?{}:{nodeId:l.nodeId}}:k(l)}function J(e){return e.surface??null}function Ne(e,t){let o=null,n=a=>a.id===t?true:a.kind==="textValue"?false:a.children.some(n),r=(a,s)=>{if(!(o||a.kind==="textValue"||s>64)){if(a.kind==="paragraph"){n(a)&&(o=a);return}for(let d of a.children)r(d,s+1);}};return r(e.root,0),o}function xe(e,t){let o=new Set,n=i=>{if(o.add(i.id),i.kind!=="textValue")for(let u of i.children)n(u);},r=i=>{if(i.id===t)return i;if(i.kind==="textValue")return null;for(let u of i.children){let c=r(u);if(c)return c}return null},a=r(e);if(!a)return null;n(a);let s=Number.MAX_SAFE_INTEGER,d=-1;for(let i of segmentsOf(e))o.has(i.runId)&&(i.start<s&&(s=i.start),i.end>d&&(d=i.end));return d<0?null:{start:s,end:d}}function gt(e,t){let o=J(e);if(!o)return {ok:false,code:"notFound",reason:"no document is mounted"};let n=C(e);if(n)return n;let r=o.session.removeCustomNode(t,T(e,t));return r.ok?{ok:true,changed:true}:k(r)}function ht(e,t,o,n={}){let r=J(e);if(!r)return {ok:false,code:"notFound",reason:"no document is mounted"};let a=C(e);if(a)return a;let s=T(e,o),d=r.session.partFor(s)??r.session.part(),i=Ne(d,o),u=i?xe(i,o):null,c=Se(r,o,s);if(!i||!u||!c)return {ok:false,code:"notFound",reason:"no custom node with that id"};let l=`${t.tagPrefix}:${t.name}`;if(c.identity!==null&&c.identity!==l)return {ok:false,code:"invalidArgs",reason:`node ${o} is a ${c.identity}, not a ${l}`};let f=ke(r,o),m=n.data===null?null:n.data===void 0?ve(f):E(t,n.data);if(m&&!m.ok)return S(m.reason,m.issues);let p=A(t,{attrs:n.attrs??(n.data===void 0?c.attrs:void 0),text:n.text??(m===null&&n.data===null?c.text:void 0)},m?.value);if("reason"in p)return {ok:false,code:"invalidArgs",reason:p.reason};let O=h(t.tagPrefix,t.name,p.attrs);if(!O.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${O.length} characters; Word caps w:tag at 64 \u2014 move what does not fit into the payload (\`data\`), or shorten the attrs`};let $=n.alias??c.alias,w=n.lock??c.lock,y=r.session.insertCustomNode({replaceControlId:o,paragraphId:i.id,offset:u.start,tag:O.tag,text:p.text,...$===void 0?{}:{alias:$},...w===false||w===void 0?{}:{lock:w},...m?{payload:D(r,t,m.serialized,p.text,f?.nodeId)}:{}},s);return y.ok?{ok:true,changed:true,...y.nodeId===void 0?{}:{nodeId:y.nodeId}}:k(y)}function Se(e,t,o){let n=e.session.partFor(o)??e.session.part(),r=contentControlsIn(n.root).find(i=>i.node.id===t);if(!r)return null;let a=contentControlPropertiesOf(r.node),s=a.tag===void 0?null:N(a.tag),d=a.lock;return {identity:s?`${s.prefix}:${s.name}`:null,attrs:s?.attrs??{},text:contentControlTextOf(r.node),alias:a.alias,lock:d==="sdtLocked"||d==="sdtContentLocked"||d==="contentLocked"?d:d==="unlocked"?false:void 0}}function ve(e){if(!e)return null;let t=x(void 0,e.data);return t.ok?{ok:true,serialized:e.data,value:t.value}:{ok:false,reason:`the stored payload is not readable: ${t.issues.join(", ")}`,issues:[]}}function ke(e,t){let o=e.session.part();return customNodePayloadsByControl(e.session.currentPackage(),o.name).get(t)}export{Oe as a,h as b,N as c,Ie as d,x as e,R as f,b as g,v as h,L as i,z as j,V as k,Ve as l,ze as m,W as n,ot as o,it as p,gt as q,ht as r};
1
+ import {contentControlsIn,contentControlPropertiesOf,contentControlTextOf,findNode,revisionItemsOf,collectReviewItems,paragraphOrderOfPart,parseNoteScopeId,locateSites,customNodePayloadsOf,customNodePayloadsByControl,segmentsOf}from'@docx-editor.dev/core/store';import {reviewItemPositionRank}from'@docx-editor.dev/core/layout';function g(e){}var Oe=64,H=new Set(["__proto__","constructor","prototype"]);function h(e,t,o){let n=new URLSearchParams;for(let[s,d]of Object.entries(o))n.set(s,d);let r=n.toString(),a=r.length>0?`${e}:${t}?${r}`:`${e}:${t}`;return a.length>64?{ok:false,reason:"tag-overflow",length:a.length}:{ok:true,tag:a}}function N(e){if(e.length>64)return null;let t=e.indexOf(":");if(t<=0)return null;let o=e.slice(0,t),n=e.slice(t+1),r=n.indexOf("?"),a=r===-1?n:n.slice(0,r);if(a.length===0)return null;let s=Object.create(null);if(r!==-1)for(let[d,i]of new URLSearchParams(n.slice(r+1))){if(H.has(d))return null;s[d]=i;}return {prefix:o,name:a,attrs:s}}var Ie=262144;function x(e,t){if(t.length===0)return {ok:false,reason:"malformed",issues:["the node carries no payload"]};if(t.length>262144)return {ok:false,reason:"malformed",issues:[`the payload is ${String(t.length)} characters; the cap is ${String(262144)}`]};let o;try{o=JSON.parse(t);}catch(a){return {ok:false,reason:"malformed",issues:[a instanceof Error?a.message:"the payload is not JSON"]}}let n=I(o);if(!e)return {ok:true,value:n};let r=e["~standard"].validate(n);return B(r)?{ok:false,reason:"async",issues:["the schema validates asynchronously, which the read path cannot await"]}:r.issues?{ok:false,reason:"invalid",issues:r.issues.map(q)}:{ok:true,value:r.value}}function R(e){let t;try{t=JSON.stringify(e)??"";}catch(o){return {ok:false,reason:"malformed",issues:[o instanceof Error?o.message:"the value cannot be serialized"]}}return t.length===0?{ok:false,reason:"malformed",issues:["the value serializes to nothing"]}:t.length>262144?{ok:false,reason:"malformed",issues:[`the payload is ${String(t.length)} characters; the cap is ${String(262144)}`]}:{ok:true,value:t}}function B(e){return typeof e.then=="function"}function q(e){let t=(e.path??[]).map(o=>String(typeof o=="object"?o.key:o)).join(".");return t.length>0?`${t}: ${e.message}`:e.message}var Y=new Set(["__proto__","constructor","prototype"]);function I(e){if(Array.isArray(e))return e.map(I);if(e===null||typeof e!="object")return e;let t=Object.create(null);for(let[o,n]of Object.entries(e))Y.has(o)||(t[o]=I(n));return t}function _(e){let t=(e.path??[]).map(o=>{let n=typeof o=="object"?o.key:o;return typeof n=="number"?n:String(n)});return {message:e.message,path:t,pointer:t.join(".")}}function S(e,t){return {ok:false,code:"invalidArgs",reason:e,issues:t}}var b="docxEditor";function v(e){return e.payloadNamespace??`urn:docx-editor.dev:custom-node:${e.tagPrefix}`}function M(e,t,o){let n=0;for(let r of customNodePayloadsOf(e,t,o).keys()){let a=/^cx(\d{1,9})$/.exec(r);if(!a)continue;let s=Number(a[1]);s>n&&(n=s);}return `cx${String(n+1)}`}function L(e,t){let o=R(t);if(!o.ok)return {ok:false,reason:`the payload cannot be serialized: ${o.issues.join(", ")}`,issues:[]};if(!e.schema)return {ok:true,data:o.value,value:t};let r=e.schema["~standard"].validate(JSON.parse(o.value));if(Q(r))return {ok:false,reason:`${e.name}'s schema validates asynchronously, which a write cannot await`,issues:[]};if(r.issues){let s=r.issues.map(_);return {ok:false,reason:`the payload does not match ${e.name}'s schema: `+s.map(d=>(d.pointer?`${d.pointer}: `:"")+d.message).join(", "),issues:s}}let a=R(r.value);return a.ok?{ok:true,data:a.value,value:r.value}:{ok:false,reason:`the payload cannot be serialized: ${a.issues.join(", ")}`,issues:[]}}function Q(e){return typeof e.then=="function"}function z(e){return typeof e=="object"&&e!==null&&typeof e.name=="string"&&typeof e.tagPrefix=="string"}var V=/^[A-Za-z0-9_.-]+$/,te=/['"<>&]|[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/;function oe(e){return e.length>0&&!te.test(e)}function Ve(e){if(!V.test(e.name??""))throw new Error(`defineCustomNode: invalid name ${JSON.stringify(e.name)}`);if(!V.test(e.tagPrefix??""))throw new Error(`defineCustomNode: invalid tagPrefix ${JSON.stringify(e.tagPrefix)}`);let t=e.schema;if(t!==void 0&&typeof t?.["~standard"]?.validate!="function")throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has a schema that does not implement Standard Schema`);if(e.payloadNamespace!==void 0&&!oe(e.payloadNamespace))throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has a payloadNamespace that cannot be written into an XPath \u2014 no quotes, angle brackets, ampersands or control characters: ${JSON.stringify(e.payloadNamespace)}`);if(e.preserveOnExport!==void 0&&e.preserveOnExport!==true&&e.preserveOnExport!==false&&e.preserveOnExport!=="text")throw new Error(`defineCustomNode: ${JSON.stringify(e.name)} has an unknown preserveOnExport ${JSON.stringify(e.preserveOnExport)}`);return Object.freeze({...e,dataOf:n=>{if(!n||n.data===void 0||n.name!==void 0&&n.name!==e.name)return;if(!e.schema)return n.data;let r=e.schema["~standard"].validate(n.data);if(typeof r.then=="function")return;let a=r;return a.issues?void 0:a.value}})}function ze(e){g(e.licenseKey);let t=new Set;for(let o of e.nodes){let n=`${o.tagPrefix}:${o.name}`;if(t.has(n))throw new Error(`customNodesModule: two definitions claim ${JSON.stringify(n)}`);t.add(n);}return {id:"custom-nodes",customNodes:e.nodes,...e.onDiagnostic?{onCustomNodeDiagnostic:o=>{e.onDiagnostic?.(o);}}:{},customNodePayloadNamespaces:[...new Set(e.nodes.map(v))]}}function ne(e){for(let t of e.children)if(!(t.kind==="textValue"||t.localName!=="sdtPr")){for(let o of t.children)if(!(o.kind==="textValue"||o.localName!=="tag")){for(let n of o.attributes)if(n.localName==="val")return n.value}}}function j(e){if(e.kind==="textValue")return e.value;let t="";for(let o of e.children)t+=j(o);return t}function W(e,t,o={}){if(t.length===0)return [];let n=new Map;for(let s of t){let d=`${s.tagPrefix}:${s.name}`;if(n.has(d))throw new Error(`recognizeCustomNodes: duplicate definition for ${JSON.stringify(d)}`);n.set(d,s);}let r=[],a=(s,d)=>{if(!(s.kind==="textValue"||d>64)){if(s.kind==="contentControl"){let i=ne(s),u=i!==void 0?N(i):null,c=u?n.get(`${u.prefix}:${u.name}`):void 0;if(u&&c&&i!==void 0){let l=j(s),f=re(c,s.id,o.payloads?.get(s.id),contentControlPropertiesOf(s).dataBinding!==void 0,o.onDiagnostic),m=c.fromDocx?c.fromDocx({attrs:u.attrs,text:l,...f.present?{data:f.value}:{}}):u.attrs;if(m!==null){r.push({name:c.name,attrs:m,text:l,nodeId:s.id,tag:i,...f.present?{data:f.value}:{}});return}}}for(let i of s.children)a(i,d+1);}};return a(e.root,0),r}function re(e,t,o,n,r){if(!o)return n&&r?.({code:"payload-missing",name:e.name,nodeId:t,issues:["the control binds a store node this document does not hold"]}),{present:false};let a=x(e.schema,o.data);return a.ok?{present:true,value:a.value}:(r?.({code:"payload-invalid",name:e.name,nodeId:t,issues:a.issues}),{present:false})}function K(e,t){let o=findNode(e,t);return !o||o.kind!=="paragraph"?[]:revisionItemsOf({id:e.id,name:e.name,contentType:e.contentType,root:o})}function ce(e,t,o,n){if(t.length===0)return [];let r=W(e,t,{...o===void 0?{}:{payloads:o},...n===void 0?{}:{onDiagnostic:n}});if(r.length===0)return [];let a=locateSites(e),s=[];for(let d of r){let i=t.find(l=>l.name===d.name&&d.tag.startsWith(`${l.tagPrefix}:`));if(!i)continue;let u=i.reviewCard?i.reviewCard({attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data}}):null;if(i.reviewCard&&u===null)continue;let c=a.get(d.nodeId);s.push({kind:"custom",id:d.nodeId,name:d.name,tag:d.tag,attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data},carded:i.reviewCard!==void 0&&u!==null,title:u?.title??"",...u?.detail!==void 0?{detail:u.detail}:{},...u?.icon!==void 0?{icon:u.icon}:{},range:c?{partName:e.name,start:{paragraphId:c.paragraphId,offset:c.start},end:{paragraphId:c.paragraphId,offset:c.end}}:null});}return s}function U(e){let t=collectReviewItems(e),o=(e.customNodes??[]).filter(z);if(o.length===0)return t;let n=[e.storyPart],r=new Set([e.storyPart.name]);for(let i of e.furnitureParts??[])r.has(i.name)||(r.add(i.name),n.push(i));let a=[],s=new Map;for(let i of n){a.push(...ce(i,o,i.name===e.storyPart.name?e.customNodePayloads:void 0,e.reportCustomNodeDiagnostic));let u=s.size;for(let[c,l]of paragraphOrderOfPart(i))s.has(c)||s.set(c,u+l);}return a.length===0?t:[...t,...a].sort((i,u)=>reviewItemPositionRank(i,s)-reviewItemPositionRank(u,s))}function ot(e={}){return g(e.licenseKey),{id:"review",review:{displayModes:["all-markup","proposed","original"],collectReviewItems:U,revisionItemsOfParagraph:K}}}function G(e){return e.surface??null}function E(e,t){if(t==null)return null;let o=L(e,t);return o.ok?{ok:true,serialized:o.data,value:o.value}:{ok:false,reason:o.reason,issues:o.issues}}function D(e,t,o,n,r){let a=v(t),s=e.session.part().name;return {namespaceUri:a,rootLocalName:b,nodeId:r??M(e.session.currentPackage(),s,a),label:n,data:o}}function k(e){let t=e.detail?`${e.reason}: ${e.detail}`:e.reason;return {ok:false,code:me.has(e.reason)?"invalidArgs":"unsupported",reason:t}}var me=new Set(["payload-too-large","unaddressable-payload","store-not-authored","offset-out-of-range","invalid-range","invalid-property-value","splits-surrogate-pair"]);function A(e,t,o){let n,r;if(o!==void 0)try{n=e.text?.(o),r=e.tagAttrs?.(o);}catch(s){return {reason:`${e.name} could not describe this payload: ${s instanceof Error?s.message:String(s)}`}}let a=t.text??n;return a===void 0?{reason:e.text?`${e.name} derives its text from \`data\`, so pass one \u2014 or pass \`text\` directly`:`${e.name} declares no \`text\`, so \`text\` is required`}:t.attrs===void 0&&e.tagAttrs&&r===void 0?{reason:`${e.name} derives its tag attrs from \`data\`, so pass one \u2014 or pass \`attrs\` directly`}:{attrs:t.attrs??r??{},text:a}}function C(e){return e.getEditingMode()==="viewing"?{ok:false,code:"locked",reason:"the document is open for viewing"}:null}function P(e){let t=e.getActiveScope();if(t.kind==="headerFooter")return {kind:"headerFooter",rId:t.rId};if(t.kind==="note"){let o=parseNoteScopeId(t.id);if(o)return {kind:"notesPart",noteKind:o.noteKind}}return {kind:"body"}}function T(e,t){let o=G(e),n=t===void 0?"":t.slice(0,t.indexOf("#"));if(!o||n.length===0)return P(e);if(n===o.session.part().name)return {kind:"body"};for(let r of o.session.headerFooterResolutionBySection())for(let a of [r.headers,r.footers])for(let s of a.values())if(s.partName===n)return {kind:"headerFooter",rId:s.rId};for(let r of ["footnote","endnote"])if(o.session.partFor({kind:"notesPart",noteKind:r})?.name===n)return {kind:"notesPart",noteKind:r};return P(e)}function it(e,t,o={}){let n=G(e);if(!n)return {ok:false,code:"notFound",reason:"no document is mounted"};let r=E(t,o.data);if(r&&!r.ok)return S(r.reason,r.issues);let a=A(t,o,r?.value);if("reason"in a)return {ok:false,code:"invalidArgs",reason:a.reason};let s=h(t.tagPrefix,t.name,a.attrs);if(!s.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${s.length} characters; Word caps w:tag at 64 \u2014 move what does not fit into the payload (\`data\`), or shorten the attrs`};let d=C(e);if(d)return d;n.flushPendingInput();let i=o.at??n.state().selection.head,u=o.lock===void 0?"contentLocked":o.lock,c=P(e),l=n.session.insertCustomNode({paragraphId:i.paragraphId,offset:i.offset,tag:s.tag,text:a.text,...o.alias===void 0?{}:{alias:o.alias},...u===false?{}:{lock:u},...r?{payload:D(n,t,r.serialized,a.text)}:{}},c);return l.ok?{ok:true,changed:true,...l.nodeId===void 0?{}:{nodeId:l.nodeId}}:k(l)}function J(e){return e.surface??null}function Ne(e,t){let o=null,n=a=>a.id===t?true:a.kind==="textValue"?false:a.children.some(n),r=(a,s)=>{if(!(o||a.kind==="textValue"||s>64)){if(a.kind==="paragraph"){n(a)&&(o=a);return}for(let d of a.children)r(d,s+1);}};return r(e.root,0),o}function xe(e,t){let o=new Set,n=i=>{if(o.add(i.id),i.kind!=="textValue")for(let u of i.children)n(u);},r=i=>{if(i.id===t)return i;if(i.kind==="textValue")return null;for(let u of i.children){let c=r(u);if(c)return c}return null},a=r(e);if(!a)return null;n(a);let s=Number.MAX_SAFE_INTEGER,d=-1;for(let i of segmentsOf(e))o.has(i.runId)&&(i.start<s&&(s=i.start),i.end>d&&(d=i.end));return d<0?null:{start:s,end:d}}function gt(e,t){let o=J(e);if(!o)return {ok:false,code:"notFound",reason:"no document is mounted"};let n=C(e);if(n)return n;o.flushPendingInput();let r=o.session.removeCustomNode(t,T(e,t));return r.ok?{ok:true,changed:true}:k(r)}function ht(e,t,o,n={}){let r=J(e);if(!r)return {ok:false,code:"notFound",reason:"no document is mounted"};let a=C(e);if(a)return a;r.flushPendingInput();let s=T(e,o),d=r.session.partFor(s)??r.session.part(),i=Ne(d,o),u=i?xe(i,o):null,c=Se(r,o,s);if(!i||!u||!c)return {ok:false,code:"notFound",reason:"no custom node with that id"};let l=`${t.tagPrefix}:${t.name}`;if(c.identity!==null&&c.identity!==l)return {ok:false,code:"invalidArgs",reason:`node ${o} is a ${c.identity}, not a ${l}`};let f=ke(r,o),m=n.data===null?null:n.data===void 0?ve(f):E(t,n.data);if(m&&!m.ok)return S(m.reason,m.issues);let p=A(t,{attrs:n.attrs??(n.data===void 0?c.attrs:void 0),text:n.text??(m===null&&n.data===null?c.text:void 0)},m?.value);if("reason"in p)return {ok:false,code:"invalidArgs",reason:p.reason};let O=h(t.tagPrefix,t.name,p.attrs);if(!O.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${O.length} characters; Word caps w:tag at 64 \u2014 move what does not fit into the payload (\`data\`), or shorten the attrs`};let $=n.alias??c.alias,w=n.lock??c.lock,y=r.session.insertCustomNode({replaceControlId:o,paragraphId:i.id,offset:u.start,tag:O.tag,text:p.text,...$===void 0?{}:{alias:$},...w===false||w===void 0?{}:{lock:w},...m?{payload:D(r,t,m.serialized,p.text,f?.nodeId)}:{}},s);return y.ok?{ok:true,changed:true,...y.nodeId===void 0?{}:{nodeId:y.nodeId}}:k(y)}function Se(e,t,o){let n=e.session.partFor(o)??e.session.part(),r=contentControlsIn(n.root).find(i=>i.node.id===t);if(!r)return null;let a=contentControlPropertiesOf(r.node),s=a.tag===void 0?null:N(a.tag),d=a.lock;return {identity:s?`${s.prefix}:${s.name}`:null,attrs:s?.attrs??{},text:contentControlTextOf(r.node),alias:a.alias,lock:d==="sdtLocked"||d==="sdtContentLocked"||d==="contentLocked"?d:d==="unlocked"?false:void 0}}function ve(e){if(!e)return null;let t=x(void 0,e.data);return t.ok?{ok:true,serialized:e.data,value:t.value}:{ok:false,reason:`the stored payload is not readable: ${t.issues.join(", ")}`,issues:[]}}function ke(e,t){let o=e.session.part();return customNodePayloadsByControl(e.session.currentPackage(),o.name).get(t)}export{Oe as a,h as b,N as c,Ie as d,x as e,R as f,b as g,v as h,L as i,z as j,V as k,Ve as l,ze as m,W as n,ot as o,it as p,gt as q,ht as r};
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var chunkA7NTVTWG_cjs=require('./chunk-A7NTVTWG.cjs'),store=require('@docx-editor.dev/core/store');function b(e,o={}){let r=U(e);if(!r)return [];let t=o.nodes??e.getCustomNodeDefinitions().filter(chunkA7NTVTWG_cjs.j);if(t.length===0)return [];let s=r.session.part();return chunkA7NTVTWG_cjs.n(s,t,{payloads:store.customNodePayloadsByControl(r.session.currentPackage(),s.name),onDiagnostic:o.onDiagnostic??(d=>{e.reportCustomNodeDiagnostic(d);})})}function U(e){return e.surface??null}function E(e,o,r={}){if(r.destination==="internal")return {ok:true,bytes:e,unwrapped:0,removed:0};let t=store.readOoxmlPackage(e);if(!t.ok)return {ok:false,reason:`the document could not be read: ${t.reason}`};let s=new Map;for(let i of o)s.set(`${i.tagPrefix}:${i.name}`,i);let d=i=>{let m=chunkA7NTVTWG_cjs.c(i);if(!m)return "keep";let x=s.get(`${m.prefix}:${m.name}`);return x?x.preserveOnExport==="text"?"text":x.preserveOnExport===false?"remove":"keep":"keep"},p=[...new Set(o.filter(i=>i.preserveOnExport!==void 0).filter(i=>i.preserveOnExport!==true).map(chunkA7NTVTWG_cjs.h))],n=t.package,u=0,c=0,g=B(n);for(let i of g){let m=store.withExportedCustomNodes(n,{storyPartName:i,namespaces:[],decide:d});if(!m.ok)return {ok:false,reason:m.reason};n=m.pkg,u+=m.unwrapped,c+=m.removed;}let l=store.withExportedCustomNodes(n,{storyPartName:n.mainDocumentPart,namespaces:p,decide:()=>"keep"});return l.ok?(n=l.pkg,{ok:true,bytes:store.writeOoxmlPackage(n),unwrapped:u,removed:c}):{ok:false,reason:l.reason}}function B(e){let o=[];for(let[r,t]of e.parts)r!==e.mainDocumentPart&&store.storyRootsOf(t).length!==0&&o.push(r);return [e.mainDocumentPart,...o]}async function V(e,o={}){let r=o.nodes??e.getCustomNodeDefinitions().filter(chunkA7NTVTWG_cjs.j),t=await e.save();return E(new Uint8Array(t),r,{...o.destination===void 0?{}:{destination:o.destination}})}function a(e){return e.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g,"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function J(e,o,r,t={}){if(!chunkA7NTVTWG_cjs.k.test(e.tagPrefix)||!chunkA7NTVTWG_cjs.k.test(e.name))return {ok:false,code:"invalidArgs",reason:"the definition identity must match defineCustomNode\u2019s charset ([A-Za-z0-9_.-])"};let s=chunkA7NTVTWG_cjs.b(e.tagPrefix,e.name,o);if(!s.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${s.length} characters; Word caps w:tag at 64 \u2014 shorten the attrs`};let d=t.lock===void 0?"contentLocked":t.lock,p=t.id!==void 0&&Number.isInteger(t.id)&&t.id>0?t.id:store.fnv1a32(`${s.tag}\0${r}`)&2147483647||1,n=t.data===void 0?null:K(e,t,r);if(n&&"reason"in n)return {ok:false,code:"invalidArgs",reason:n.reason};let u=(t.alias!==void 0?`<w:alias w:val="${a(t.alias)}"/>`:"")+`<w:tag w:val="${a(s.tag)}"/><w:id w:val="${p}"/>`+(d===false?"":`<w:lock w:val="${d}"/>`)+(n?`<w:dataBinding w:prefixMappings="${a(n.binding.prefixMappings)}" w:xpath="${a(n.binding.xpath)}" w:storeItemID="${a(n.binding.storeItemId)}"/>`:""),c=`<w:r><w:t xml:space="preserve">${a(r)}</w:t></w:r>`;return {ok:true,xml:`<w:sdt><w:sdtPr>${u}</w:sdtPr><w:sdtContent>${c}</w:sdtContent></w:sdt>`,...n?{store:n.store}:{}}}function K(e,o,r){let t=chunkA7NTVTWG_cjs.i(e,o.data);if(!t.ok)return {reason:t.reason};let s=chunkA7NTVTWG_cjs.h(e),d=o.storeIndex!==void 0&&Number.isInteger(o.storeIndex)&&o.storeIndex>0?o.storeIndex:1,p=o.nodeId??"cx1",n=`/customXml/item${String(d)}.xml`,u=`/customXml/itemProps${String(d)}.xml`,c=store.datastoreItemIdFor(`${s} ${n} ${p}`),g=store.customNodeBinding({partName:n,propsPartName:u,itemId:c,namespaceUri:s},chunkA7NTVTWG_cjs.g,p);if(!g)return {reason:`the payload cannot be addressed by an XPath: check nodeId (${p}) and payloadNamespace`};let l=r===r.trim()?`<label>${a(r)}</label>`:`<label xml:space="preserve">${a(r)}</label>`;return {binding:g,store:{itemPartName:n,itemXml:`<${chunkA7NTVTWG_cjs.g} xmlns="${a(s)}"><node id="${a(p)}">${l}<data>${a(t.data)}</data></node></${chunkA7NTVTWG_cjs.g}>`,propsPartName:u,propsXml:`<ds:datastoreItem ds:itemID="${a(c)}" xmlns:ds="${store.DATASTORE_NAMESPACE_URI}"><ds:schemaRefs><ds:schemaRef ds:uri="${a(s)}"/></ds:schemaRefs></ds:datastoreItem>`,storeItemId:c,relationships:[{from:"/word/document.xml",type:store.CUSTOM_XML_REL,target:`../customXml/item${String(d)}.xml`},{from:n,type:store.CUSTOM_XML_PROPS_REL,target:`itemProps${String(d)}.xml`}],contentTypeOverride:{partName:u,contentType:store.CUSTOM_XML_PROPS_TYPE}}}}Object.defineProperty(exports,"CUSTOM_NODE_STORE_ROOT",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.g}});Object.defineProperty(exports,"MAX_CUSTOM_NODE_DATA_LENGTH",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.d}});Object.defineProperty(exports,"MAX_TAG_LENGTH",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.a}});Object.defineProperty(exports,"customNodeNamespace",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.h}});Object.defineProperty(exports,"customNodesModule",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.m}});Object.defineProperty(exports,"decodeCustomNodeTag",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.c}});Object.defineProperty(exports,"defineCustomNode",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.l}});Object.defineProperty(exports,"encodeCustomNodeTag",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.b}});Object.defineProperty(exports,"insertCustomNode",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.p}});Object.defineProperty(exports,"isCustomNodeDefinition",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.j}});Object.defineProperty(exports,"parseCustomNodeData",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.e}});Object.defineProperty(exports,"recognizeCustomNodes",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.n}});Object.defineProperty(exports,"removeCustomNode",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.q}});Object.defineProperty(exports,"reviewModule",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.o}});Object.defineProperty(exports,"serializeCustomNodeData",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.f}});Object.defineProperty(exports,"updateCustomNode",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.r}});exports.customNodeXml=J;exports.customNodesOf=b;exports.prepareForExport=E;exports.saveForExport=V;
1
+ 'use strict';var chunkQIMNGUJX_cjs=require('./chunk-QIMNGUJX.cjs'),store=require('@docx-editor.dev/core/store');function b(e,o={}){let r=U(e);if(!r)return [];let t=o.nodes??e.getCustomNodeDefinitions().filter(chunkQIMNGUJX_cjs.j);if(t.length===0)return [];let s=r.session.part();return chunkQIMNGUJX_cjs.n(s,t,{payloads:store.customNodePayloadsByControl(r.session.currentPackage(),s.name),onDiagnostic:o.onDiagnostic??(d=>{e.reportCustomNodeDiagnostic(d);})})}function U(e){return e.surface??null}function E(e,o,r={}){if(r.destination==="internal")return {ok:true,bytes:e,unwrapped:0,removed:0};let t=store.readOoxmlPackage(e);if(!t.ok)return {ok:false,reason:`the document could not be read: ${t.reason}`};let s=new Map;for(let i of o)s.set(`${i.tagPrefix}:${i.name}`,i);let d=i=>{let m=chunkQIMNGUJX_cjs.c(i);if(!m)return "keep";let x=s.get(`${m.prefix}:${m.name}`);return x?x.preserveOnExport==="text"?"text":x.preserveOnExport===false?"remove":"keep":"keep"},p=[...new Set(o.filter(i=>i.preserveOnExport!==void 0).filter(i=>i.preserveOnExport!==true).map(chunkQIMNGUJX_cjs.h))],n=t.package,u=0,c=0,g=B(n);for(let i of g){let m=store.withExportedCustomNodes(n,{storyPartName:i,namespaces:[],decide:d});if(!m.ok)return {ok:false,reason:m.reason};n=m.pkg,u+=m.unwrapped,c+=m.removed;}let l=store.withExportedCustomNodes(n,{storyPartName:n.mainDocumentPart,namespaces:p,decide:()=>"keep"});return l.ok?(n=l.pkg,{ok:true,bytes:store.writeOoxmlPackage(n),unwrapped:u,removed:c}):{ok:false,reason:l.reason}}function B(e){let o=[];for(let[r,t]of e.parts)r!==e.mainDocumentPart&&store.storyRootsOf(t).length!==0&&o.push(r);return [e.mainDocumentPart,...o]}async function V(e,o={}){let r=o.nodes??e.getCustomNodeDefinitions().filter(chunkQIMNGUJX_cjs.j),t=await e.save();return E(new Uint8Array(t),r,{...o.destination===void 0?{}:{destination:o.destination}})}function a(e){return e.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g,"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function J(e,o,r,t={}){if(!chunkQIMNGUJX_cjs.k.test(e.tagPrefix)||!chunkQIMNGUJX_cjs.k.test(e.name))return {ok:false,code:"invalidArgs",reason:"the definition identity must match defineCustomNode\u2019s charset ([A-Za-z0-9_.-])"};let s=chunkQIMNGUJX_cjs.b(e.tagPrefix,e.name,o);if(!s.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${s.length} characters; Word caps w:tag at 64 \u2014 shorten the attrs`};let d=t.lock===void 0?"contentLocked":t.lock,p=t.id!==void 0&&Number.isInteger(t.id)&&t.id>0?t.id:store.fnv1a32(`${s.tag}\0${r}`)&2147483647||1,n=t.data===void 0?null:K(e,t,r);if(n&&"reason"in n)return {ok:false,code:"invalidArgs",reason:n.reason};let u=(t.alias!==void 0?`<w:alias w:val="${a(t.alias)}"/>`:"")+`<w:tag w:val="${a(s.tag)}"/><w:id w:val="${p}"/>`+(d===false?"":`<w:lock w:val="${d}"/>`)+(n?`<w:dataBinding w:prefixMappings="${a(n.binding.prefixMappings)}" w:xpath="${a(n.binding.xpath)}" w:storeItemID="${a(n.binding.storeItemId)}"/>`:""),c=`<w:r><w:t xml:space="preserve">${a(r)}</w:t></w:r>`;return {ok:true,xml:`<w:sdt><w:sdtPr>${u}</w:sdtPr><w:sdtContent>${c}</w:sdtContent></w:sdt>`,...n?{store:n.store}:{}}}function K(e,o,r){let t=chunkQIMNGUJX_cjs.i(e,o.data);if(!t.ok)return {reason:t.reason};let s=chunkQIMNGUJX_cjs.h(e),d=o.storeIndex!==void 0&&Number.isInteger(o.storeIndex)&&o.storeIndex>0?o.storeIndex:1,p=o.nodeId??"cx1",n=`/customXml/item${String(d)}.xml`,u=`/customXml/itemProps${String(d)}.xml`,c=store.datastoreItemIdFor(`${s} ${n} ${p}`),g=store.customNodeBinding({partName:n,propsPartName:u,itemId:c,namespaceUri:s},chunkQIMNGUJX_cjs.g,p);if(!g)return {reason:`the payload cannot be addressed by an XPath: check nodeId (${p}) and payloadNamespace`};let l=r===r.trim()?`<label>${a(r)}</label>`:`<label xml:space="preserve">${a(r)}</label>`;return {binding:g,store:{itemPartName:n,itemXml:`<${chunkQIMNGUJX_cjs.g} xmlns="${a(s)}"><node id="${a(p)}">${l}<data>${a(t.data)}</data></node></${chunkQIMNGUJX_cjs.g}>`,propsPartName:u,propsXml:`<ds:datastoreItem ds:itemID="${a(c)}" xmlns:ds="${store.DATASTORE_NAMESPACE_URI}"><ds:schemaRefs><ds:schemaRef ds:uri="${a(s)}"/></ds:schemaRefs></ds:datastoreItem>`,storeItemId:c,relationships:[{from:"/word/document.xml",type:store.CUSTOM_XML_REL,target:`../customXml/item${String(d)}.xml`},{from:n,type:store.CUSTOM_XML_PROPS_REL,target:`itemProps${String(d)}.xml`}],contentTypeOverride:{partName:u,contentType:store.CUSTOM_XML_PROPS_TYPE}}}}Object.defineProperty(exports,"CUSTOM_NODE_STORE_ROOT",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.g}});Object.defineProperty(exports,"MAX_CUSTOM_NODE_DATA_LENGTH",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.d}});Object.defineProperty(exports,"MAX_TAG_LENGTH",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.a}});Object.defineProperty(exports,"customNodeNamespace",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.h}});Object.defineProperty(exports,"customNodesModule",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.m}});Object.defineProperty(exports,"decodeCustomNodeTag",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.c}});Object.defineProperty(exports,"defineCustomNode",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.l}});Object.defineProperty(exports,"encodeCustomNodeTag",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.b}});Object.defineProperty(exports,"insertCustomNode",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.p}});Object.defineProperty(exports,"isCustomNodeDefinition",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.j}});Object.defineProperty(exports,"parseCustomNodeData",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.e}});Object.defineProperty(exports,"recognizeCustomNodes",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.n}});Object.defineProperty(exports,"removeCustomNode",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.q}});Object.defineProperty(exports,"reviewModule",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.o}});Object.defineProperty(exports,"serializeCustomNodeData",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.f}});Object.defineProperty(exports,"updateCustomNode",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.r}});exports.customNodeXml=J;exports.customNodesOf=b;exports.prepareForExport=E;exports.saveForExport=V;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import {j,n,h,k,b as b$1,i,g,c}from'./chunk-PWNAGXXX.js';export{g as CUSTOM_NODE_STORE_ROOT,d as MAX_CUSTOM_NODE_DATA_LENGTH,a as MAX_TAG_LENGTH,h as customNodeNamespace,m as customNodesModule,c as decodeCustomNodeTag,l as defineCustomNode,b as encodeCustomNodeTag,p as insertCustomNode,j as isCustomNodeDefinition,e as parseCustomNodeData,n as recognizeCustomNodes,q as removeCustomNode,o as reviewModule,f as serializeCustomNodeData,r as updateCustomNode}from'./chunk-PWNAGXXX.js';import {customNodePayloadsByControl,readOoxmlPackage,withExportedCustomNodes,writeOoxmlPackage,storyRootsOf,fnv1a32,datastoreItemIdFor,customNodeBinding,CUSTOM_XML_PROPS_TYPE,CUSTOM_XML_REL,CUSTOM_XML_PROPS_REL,DATASTORE_NAMESPACE_URI}from'@docx-editor.dev/core/store';function b(e,o={}){let r=U(e);if(!r)return [];let t=o.nodes??e.getCustomNodeDefinitions().filter(j);if(t.length===0)return [];let s=r.session.part();return n(s,t,{payloads:customNodePayloadsByControl(r.session.currentPackage(),s.name),onDiagnostic:o.onDiagnostic??(d=>{e.reportCustomNodeDiagnostic(d);})})}function U(e){return e.surface??null}function E(e,o,r={}){if(r.destination==="internal")return {ok:true,bytes:e,unwrapped:0,removed:0};let t=readOoxmlPackage(e);if(!t.ok)return {ok:false,reason:`the document could not be read: ${t.reason}`};let s=new Map;for(let i of o)s.set(`${i.tagPrefix}:${i.name}`,i);let d=i=>{let m=c(i);if(!m)return "keep";let x=s.get(`${m.prefix}:${m.name}`);return x?x.preserveOnExport==="text"?"text":x.preserveOnExport===false?"remove":"keep":"keep"},p=[...new Set(o.filter(i=>i.preserveOnExport!==void 0).filter(i=>i.preserveOnExport!==true).map(h))],n=t.package,u=0,c$1=0,g=B(n);for(let i of g){let m=withExportedCustomNodes(n,{storyPartName:i,namespaces:[],decide:d});if(!m.ok)return {ok:false,reason:m.reason};n=m.pkg,u+=m.unwrapped,c$1+=m.removed;}let l=withExportedCustomNodes(n,{storyPartName:n.mainDocumentPart,namespaces:p,decide:()=>"keep"});return l.ok?(n=l.pkg,{ok:true,bytes:writeOoxmlPackage(n),unwrapped:u,removed:c$1}):{ok:false,reason:l.reason}}function B(e){let o=[];for(let[r,t]of e.parts)r!==e.mainDocumentPart&&storyRootsOf(t).length!==0&&o.push(r);return [e.mainDocumentPart,...o]}async function V(e,o={}){let r=o.nodes??e.getCustomNodeDefinitions().filter(j),t=await e.save();return E(new Uint8Array(t),r,{...o.destination===void 0?{}:{destination:o.destination}})}function a(e){return e.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g,"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function J(e,o,r,t={}){if(!k.test(e.tagPrefix)||!k.test(e.name))return {ok:false,code:"invalidArgs",reason:"the definition identity must match defineCustomNode\u2019s charset ([A-Za-z0-9_.-])"};let s=b$1(e.tagPrefix,e.name,o);if(!s.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${s.length} characters; Word caps w:tag at 64 \u2014 shorten the attrs`};let d=t.lock===void 0?"contentLocked":t.lock,p=t.id!==void 0&&Number.isInteger(t.id)&&t.id>0?t.id:fnv1a32(`${s.tag}\0${r}`)&2147483647||1,n=t.data===void 0?null:K(e,t,r);if(n&&"reason"in n)return {ok:false,code:"invalidArgs",reason:n.reason};let u=(t.alias!==void 0?`<w:alias w:val="${a(t.alias)}"/>`:"")+`<w:tag w:val="${a(s.tag)}"/><w:id w:val="${p}"/>`+(d===false?"":`<w:lock w:val="${d}"/>`)+(n?`<w:dataBinding w:prefixMappings="${a(n.binding.prefixMappings)}" w:xpath="${a(n.binding.xpath)}" w:storeItemID="${a(n.binding.storeItemId)}"/>`:""),c=`<w:r><w:t xml:space="preserve">${a(r)}</w:t></w:r>`;return {ok:true,xml:`<w:sdt><w:sdtPr>${u}</w:sdtPr><w:sdtContent>${c}</w:sdtContent></w:sdt>`,...n?{store:n.store}:{}}}function K(e,o,r){let t=i(e,o.data);if(!t.ok)return {reason:t.reason};let s=h(e),d=o.storeIndex!==void 0&&Number.isInteger(o.storeIndex)&&o.storeIndex>0?o.storeIndex:1,p=o.nodeId??"cx1",n=`/customXml/item${String(d)}.xml`,u=`/customXml/itemProps${String(d)}.xml`,c=datastoreItemIdFor(`${s} ${n} ${p}`),g$1=customNodeBinding({partName:n,propsPartName:u,itemId:c,namespaceUri:s},g,p);if(!g$1)return {reason:`the payload cannot be addressed by an XPath: check nodeId (${p}) and payloadNamespace`};let l=r===r.trim()?`<label>${a(r)}</label>`:`<label xml:space="preserve">${a(r)}</label>`;return {binding:g$1,store:{itemPartName:n,itemXml:`<${g} xmlns="${a(s)}"><node id="${a(p)}">${l}<data>${a(t.data)}</data></node></${g}>`,propsPartName:u,propsXml:`<ds:datastoreItem ds:itemID="${a(c)}" xmlns:ds="${DATASTORE_NAMESPACE_URI}"><ds:schemaRefs><ds:schemaRef ds:uri="${a(s)}"/></ds:schemaRefs></ds:datastoreItem>`,storeItemId:c,relationships:[{from:"/word/document.xml",type:CUSTOM_XML_REL,target:`../customXml/item${String(d)}.xml`},{from:n,type:CUSTOM_XML_PROPS_REL,target:`itemProps${String(d)}.xml`}],contentTypeOverride:{partName:u,contentType:CUSTOM_XML_PROPS_TYPE}}}}export{J as customNodeXml,b as customNodesOf,E as prepareForExport,V as saveForExport};
1
+ import {j,n,h,k,b as b$1,i,g,c}from'./chunk-TNUAAUFI.js';export{g as CUSTOM_NODE_STORE_ROOT,d as MAX_CUSTOM_NODE_DATA_LENGTH,a as MAX_TAG_LENGTH,h as customNodeNamespace,m as customNodesModule,c as decodeCustomNodeTag,l as defineCustomNode,b as encodeCustomNodeTag,p as insertCustomNode,j as isCustomNodeDefinition,e as parseCustomNodeData,n as recognizeCustomNodes,q as removeCustomNode,o as reviewModule,f as serializeCustomNodeData,r as updateCustomNode}from'./chunk-TNUAAUFI.js';import {customNodePayloadsByControl,readOoxmlPackage,withExportedCustomNodes,writeOoxmlPackage,storyRootsOf,fnv1a32,datastoreItemIdFor,customNodeBinding,CUSTOM_XML_PROPS_TYPE,CUSTOM_XML_REL,CUSTOM_XML_PROPS_REL,DATASTORE_NAMESPACE_URI}from'@docx-editor.dev/core/store';function b(e,o={}){let r=U(e);if(!r)return [];let t=o.nodes??e.getCustomNodeDefinitions().filter(j);if(t.length===0)return [];let s=r.session.part();return n(s,t,{payloads:customNodePayloadsByControl(r.session.currentPackage(),s.name),onDiagnostic:o.onDiagnostic??(d=>{e.reportCustomNodeDiagnostic(d);})})}function U(e){return e.surface??null}function E(e,o,r={}){if(r.destination==="internal")return {ok:true,bytes:e,unwrapped:0,removed:0};let t=readOoxmlPackage(e);if(!t.ok)return {ok:false,reason:`the document could not be read: ${t.reason}`};let s=new Map;for(let i of o)s.set(`${i.tagPrefix}:${i.name}`,i);let d=i=>{let m=c(i);if(!m)return "keep";let x=s.get(`${m.prefix}:${m.name}`);return x?x.preserveOnExport==="text"?"text":x.preserveOnExport===false?"remove":"keep":"keep"},p=[...new Set(o.filter(i=>i.preserveOnExport!==void 0).filter(i=>i.preserveOnExport!==true).map(h))],n=t.package,u=0,c$1=0,g=B(n);for(let i of g){let m=withExportedCustomNodes(n,{storyPartName:i,namespaces:[],decide:d});if(!m.ok)return {ok:false,reason:m.reason};n=m.pkg,u+=m.unwrapped,c$1+=m.removed;}let l=withExportedCustomNodes(n,{storyPartName:n.mainDocumentPart,namespaces:p,decide:()=>"keep"});return l.ok?(n=l.pkg,{ok:true,bytes:writeOoxmlPackage(n),unwrapped:u,removed:c$1}):{ok:false,reason:l.reason}}function B(e){let o=[];for(let[r,t]of e.parts)r!==e.mainDocumentPart&&storyRootsOf(t).length!==0&&o.push(r);return [e.mainDocumentPart,...o]}async function V(e,o={}){let r=o.nodes??e.getCustomNodeDefinitions().filter(j),t=await e.save();return E(new Uint8Array(t),r,{...o.destination===void 0?{}:{destination:o.destination}})}function a(e){return e.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g,"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function J(e,o,r,t={}){if(!k.test(e.tagPrefix)||!k.test(e.name))return {ok:false,code:"invalidArgs",reason:"the definition identity must match defineCustomNode\u2019s charset ([A-Za-z0-9_.-])"};let s=b$1(e.tagPrefix,e.name,o);if(!s.ok)return {ok:false,code:"invalidArgs",reason:`the encoded tag is ${s.length} characters; Word caps w:tag at 64 \u2014 shorten the attrs`};let d=t.lock===void 0?"contentLocked":t.lock,p=t.id!==void 0&&Number.isInteger(t.id)&&t.id>0?t.id:fnv1a32(`${s.tag}\0${r}`)&2147483647||1,n=t.data===void 0?null:K(e,t,r);if(n&&"reason"in n)return {ok:false,code:"invalidArgs",reason:n.reason};let u=(t.alias!==void 0?`<w:alias w:val="${a(t.alias)}"/>`:"")+`<w:tag w:val="${a(s.tag)}"/><w:id w:val="${p}"/>`+(d===false?"":`<w:lock w:val="${d}"/>`)+(n?`<w:dataBinding w:prefixMappings="${a(n.binding.prefixMappings)}" w:xpath="${a(n.binding.xpath)}" w:storeItemID="${a(n.binding.storeItemId)}"/>`:""),c=`<w:r><w:t xml:space="preserve">${a(r)}</w:t></w:r>`;return {ok:true,xml:`<w:sdt><w:sdtPr>${u}</w:sdtPr><w:sdtContent>${c}</w:sdtContent></w:sdt>`,...n?{store:n.store}:{}}}function K(e,o,r){let t=i(e,o.data);if(!t.ok)return {reason:t.reason};let s=h(e),d=o.storeIndex!==void 0&&Number.isInteger(o.storeIndex)&&o.storeIndex>0?o.storeIndex:1,p=o.nodeId??"cx1",n=`/customXml/item${String(d)}.xml`,u=`/customXml/itemProps${String(d)}.xml`,c=datastoreItemIdFor(`${s} ${n} ${p}`),g$1=customNodeBinding({partName:n,propsPartName:u,itemId:c,namespaceUri:s},g,p);if(!g$1)return {reason:`the payload cannot be addressed by an XPath: check nodeId (${p}) and payloadNamespace`};let l=r===r.trim()?`<label>${a(r)}</label>`:`<label xml:space="preserve">${a(r)}</label>`;return {binding:g$1,store:{itemPartName:n,itemXml:`<${g} xmlns="${a(s)}"><node id="${a(p)}">${l}<data>${a(t.data)}</data></node></${g}>`,propsPartName:u,propsXml:`<ds:datastoreItem ds:itemID="${a(c)}" xmlns:ds="${DATASTORE_NAMESPACE_URI}"><ds:schemaRefs><ds:schemaRef ds:uri="${a(s)}"/></ds:schemaRefs></ds:datastoreItem>`,storeItemId:c,relationships:[{from:"/word/document.xml",type:CUSTOM_XML_REL,target:`../customXml/item${String(d)}.xml`},{from:n,type:CUSTOM_XML_PROPS_REL,target:`itemProps${String(d)}.xml`}],contentTypeOverride:{partName:u,contentType:CUSTOM_XML_PROPS_TYPE}}}}export{J as customNodeXml,b as customNodesOf,E as prepareForExport,V as saveForExport};
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkA7NTVTWG_cjs=require('../chunk-A7NTVTWG.cjs'),react=require('react'),react$1=require('@docx-editor.dev/react'),jsxRuntime=require('react/jsx-runtime'),store=require('@docx-editor.dev/core/store');var Jt=new Set(["List","Markers","AddComment","Draft","Balloon"]),en=new Set(["Card","Empty"]);function Te(e,i){let a=i==="root"?Jt:en,r={},s=[],t=o=>{if(Array.isArray(o)){for(let c of o)t(c);return}if(!react.isValidElement(o)){o!=null&&o!==false&&s.push(o);return}if(o.type===react.Fragment){t(o.props.children);return}let n=o.type.docxReviewPart;n&&a.has(n)?r[n]=o:s.push(o);};return t(e),{parts:r,rest:s}}function dt(e,i){if(!i)return e;let a=e.props.className;return react.cloneElement(e,{className:`${i}${a?` ${a}`:""}`})}function ut(e){let i=react.useRef(new WeakMap),a=react.useRef(new Map),r=react.useRef(null),s=react.useCallback((t,o)=>{let n=a.current.get(o);if(!t){n&&(r.current?.unobserve(n),i.current.delete(n),a.current.delete(o));return}typeof ResizeObserver>"u"||(e(o,t.offsetHeight),r.current??(r.current=new ResizeObserver(c=>{for(let d of c){let l=i.current.get(d.target);l&&e(l,d.target.offsetHeight);}})),!(n===t&&i.current.get(t)===o)&&(n&&(r.current.unobserve(n),i.current.delete(n)),i.current.set(t,o),a.current.set(o,t),r.current.observe(t)));},[e]);return react.useEffect(()=>()=>{r.current?.disconnect(),a.current.clear();},[]),s}function sn(e){let i=false;return ()=>{if(i)return;if(!globalThis.navigator?.scheduling?.isInputPending?.({includeContinuous:true})){e();return}i=true,setTimeout(()=>{i=false,e();},0);}}function fe(e){let i=react$1.useDocxEditor();return mt(i,e)}function mt(e,i){let a=react.useCallback(v=>{if(!e)return ()=>{};let x=false,N=sn(()=>{x||v();}),C=e.on("change",N),O=e.on("selectionChange",N),U=e.on("error",N);return ()=>{x=true,C(),O(),U();}},[e]),r=react.useSyncExternalStore(a,()=>e?`${e.getReviewRevision()}:${e.getEditingMode()}`:"none",()=>"none"),s=react.useMemo(()=>e?e.getReviewItems(i).filter(v=>v.item.kind!=="custom"||v.item.carded):[],[e,r,i]),t=react.useMemo(()=>s.find(v=>v.isActive)?.key??null,[s]),o=react.useCallback((v,x)=>e?e.setActiveReviewItem(v,x).ok:false,[e]),n=react.useCallback(v=>!e||v.kind!=="revision"||v.readOnly?false:e.acceptReviewItem(v.key).ok,[e]),c=react.useCallback(v=>!e||v.kind!=="revision"||v.readOnly?false:e.rejectReviewItem(v.key).ok,[e]),d=react.useCallback(v=>!e||v.kind!=="comment"?false:e.setCommentResolved(v.key,true).ok,[e]),l=react.useCallback(v=>!e||v.kind!=="comment"?false:e.setCommentResolved(v.key,false).ok,[e]),m=e?.getEditingMode()==="viewing"?"the document is open for viewing":null,p=react.useCallback(v=>!e||v.kind==="custom"||v.kind==="revision"&&v.readOnly?false:e.deleteReviewItem(v.key).ok,[e]),w=react.useCallback((v,x,N)=>x.trim().length===0||!e?false:e.replyToReviewItem(v.key,x,N).ok,[e]),y=react.useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,r]),b=react.useCallback((v,x)=>v.trim().length===0||!e?false:e.addComment(v,x).ok,[e]),g=react.useMemo(()=>e?e.isReviewPaneOpen():true,[e,r]),k=react.useCallback(v=>{!e||e.isReviewPaneOpen()===v||e.exec({type:"toggleReviewPane"});},[e]);return react.useMemo(()=>({items:s,activeKey:t,setActive:o,accept:n,reject:c,resolve:d,reopen:l,commentResolutionDisabledReason:m,remove:p,reply:w,selectionAnchorY:y,comment:b,paneOpen:g,setPaneOpen:k,ready:e!==null&&!e.snapshot().isLoading&&e.snapshot().parseError===null}),[s,t,o,n,c,d,l,m,p,w,y,b,g,k,e])}function an(e,i,a={}){let r=a.gap??8,s=a.scale??1,t=a.defaultHeight??0;return react.useMemo(()=>{let o=new Map,n=Number.NEGATIVE_INFINITY;for(let c of e){let d=c.anchorY===null?Number.isFinite(n)?n:0:Math.max(c.anchorY,n);o.set(c.key,d),n=d+((i.get(c.key)??t)+r)/s;}return o},[e,i,r,s,t])}var F=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"})}),pt="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",vt="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",pe="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",wt="M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z",Rt="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",yt="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",ln="M200-200h57l391-391-57-57-391 391v57Zm-80 80v-170l528-527q12-11 26.5-17t30.5-6q16 0 31 6t26 18l55 56q12 11 17.5 26t5.5 30q0 16-5.5 30.5T817-647L290-120H120Zm640-584-56-56 56 56Zm-141 85-28-29 57 57-29-28Z",cn="M486-160q-76 0-135-45t-85-123l88-38q14 48 48.5 78t85.5 30q42 0 76-20t34-64q0-18-7-33t-19-27h112q5 14 7.5 28.5T694-341q0 86-61.5 133.5T486-160ZM80-520v-80h800v80H80Zm402-360q66 0 116 30t74 84l-88 38q-11-28-38.5-47T480-794q-42 0-72 19t-30 51q0 15 6 27t18 22H272q-6-13-9-27t-3-30q0-70 55-114t167-44Z",dn="M360-160q-83 0-141.5-58.5T160-360v-360q0-83 58.5-141.5T360-920q83 0 141.5 58.5T560-720v360q0 83-58.5 141.5T360-160Zm0-80q50 0 85-35t35-85v-360q0-50-35-85t-85-35q-50 0-85 35t-35 85v360q0 50 35 85t85 35Zm300 80q29 0 49.5-20.5T730-230q0-22-12.5-40T684-296l-64-32v-232l100 100q23 23 51.5 35.5T832-412v-80q-17 0-32-6.5T773-517L633-657q-12-12-27.5-17.5T573-680h-13v520h100ZM360-720Z",un="M580-360q-25 0-42.5-17.5T520-420v-160q0-25 17.5-42.5T580-640h160q25 0 42.5 17.5T800-580v260q0 66-47 113t-113 47v-80q33 0 56.5-23.5T720-320v-40H580Zm-360 0q-25 0-42.5-17.5T160-420v-160q0-25 17.5-42.5T220-640h160q25 0 42.5 17.5T440-580v260q0 66-47 113t-113 47v-80q33 0 56.5-23.5T360-320v-40H220Z";function bt(e){if(e.kind==="comment")return vt;if(e.kind==="custom")return e.item.icon??un;switch(e.revisionKind){case "insert":case "moveTo":return ln;case "delete":case "moveFrom":return cn;case "format":return dn;default:return vt}}function fn(e,i){return typeof i!="function"?e:typeof e!="function"?i:a=>{e(a),a.defaultPrevented||i(a);}}function pn(e,i){let a={...e,...i};for(let r of Object.keys(e))/^on[A-Z]/.test(r)?a[r]=fn(i[r],e[r]):r==="className"?a[r]=[e[r],i[r]].filter(Boolean).join(" "):r==="style"&&(a[r]={...e[r],...i[r]});return a}function ht(e){return e==="Enter"||e===" "}function wn(e){return ht(e.key)?(e.preventDefault(),e.stopPropagation(),true):false}function xt(e){return e.type==="button"}function Rn(e,i){return e.type==="a"||i.href!=null}function yn(e,i,a,r){let s=t=>{typeof a=="function"&&a(t);};return {onClick:t=>{typeof e=="function"&&e(t),t.defaultPrevented||s(t),r&&t.preventDefault();},onKeyDown:t=>{if(typeof i=="function"&&i(t),!ht(t.key))return;t.defaultPrevented||s(t),r&&t.preventDefault();}}}function W({engineDisabled:e,disabledReason:i,slotProps:a,children:r}){let s=react.Children.only(r);if(!react.isValidElement(s))return null;let t=s.props,o=pn(a,t);if(!e){if(!xt(s)){let n=yn(t.onClick,t.onKeyDown,a.onClick,Rn(s,t));o.onClick=n.onClick,o.onKeyDown=n.onKeyDown;}return react.cloneElement(s,o)}if(xt(s))o.disabled=true,delete o["aria-disabled"];else {delete o.disabled,o["aria-disabled"]=true,o["data-disabled"]="",o.tabIndex=-1,o.href=void 0,o.role===void 0&&(o.role="button");let n=o.onKeyDown;o.onKeyDown=c=>{wn(c)||typeof n=="function"&&n(c);};}return i&&(o.title=i),o.onClick=n=>{n.preventDefault(),n.stopPropagation();},react.cloneElement(s,o)}function Nt(e){function i({className:r,asChild:s,hidden:t,children:o,icon:n}){let c=e.useReview(),d=e.useItem(),l=e.useLabel();if(t||!d||d.kind!=="comment"||d.resolved)return null;let m=l("comments.resolve"),p=c.commentResolutionDisabledReason!==null,w=p?l("editingMode.viewingHint"):null,y={type:"button",className:`docx-review__action${r?` ${r}`:""}`,"data-testid":"review-resolve","aria-label":m,title:w??m,disabled:p,onMouseDown:e.guardMousedown,onClick:b=>{b.stopPropagation(),!p&&c.resolve(d);}};return s?jsxRuntime.jsx(W,{engineDisabled:p,disabledReason:w,slotProps:y,children:o}):jsxRuntime.jsx("button",{...y,children:n??o??F(pe)})}i.docxReviewPart="Resolve";function a({className:r,asChild:s,hidden:t,children:o,icon:n}){let c=e.useReview(),d=e.useItem(),l=e.useLabel();if(t||!d||d.kind!=="comment"||!d.resolved)return null;let m=l("comments.reopen"),p=c.commentResolutionDisabledReason!==null,w=p?l("editingMode.viewingHint"):null,y={type:"button",className:`docx-review__action${r?` ${r}`:""}`,"data-testid":"review-reopen","aria-label":m,title:w??m,disabled:p,onMouseDown:e.guardMousedown,onClick:b=>{b.stopPropagation(),!p&&c.reopen(d);}};return s?jsxRuntime.jsx(W,{engineDisabled:p,disabledReason:w,slotProps:y,children:o}):jsxRuntime.jsx("button",{...y,children:n??o??F(wt)})}return a.docxReviewPart="Reopen",{ReviewResolve:i,ReviewReopen:a}}function _t(e){function i({top:r=0,className:s,hidden:t}){let{review:o,endDraft:n,measure:c,readOnly:d}=e.useRail(),l=e.useLabel(),[m,p]=react.useState(""),[w,y]=react.useState(false),b=react.useRef(null),g=react.useId();react.useEffect(()=>{d||b.current?.focus({preventScroll:true});},[]);let k=react.useCallback(()=>{if(d||m.trim().length===0)return;let v=o.comment(m.trim());y(!v),v&&(p(""),n());},[d,m,o,n]);return t?null:jsxRuntime.jsx("div",{className:`docx-review__slot${s?` ${s}`:""}`,style:{position:"absolute",top:r},ref:v=>{c(v,e.composeKey);},children:jsxRuntime.jsx("div",{className:"docx-review__card","data-testid":"review-draft","data-draft":"",children:jsxRuntime.jsxs("form",{className:"docx-review__reply-box",onSubmit:v=>{v.preventDefault(),k();},children:[jsxRuntime.jsx("label",{className:"docx-editor-sr-only",htmlFor:g,children:l("comments.addComment")}),jsxRuntime.jsx("input",{id:g,ref:b,"data-testid":"review-draft-input",className:"docx-review__input",value:m,placeholder:l("comments.addComment"),readOnly:d,...w?{"aria-invalid":true}:{},onChange:v=>{d||(y(false),p(v.target.value));},onKeyDown:v=>{if(v.key==="Escape"){v.preventDefault(),n();return}d||v.key!=="Enter"||(v.preventDefault(),k());}}),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:e.guardMousedown,onClick:n,children:l("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:d||m.trim().length===0,title:d?l("editingMode.viewingHint"):void 0,children:l("common.comment")})]}),w?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert",children:l("review.commentRefused")}):null]})})})}i.docxReviewPart="Draft";function a({className:r,hidden:s,children:t}){let{review:o,readOnly:n}=e.useRail(),c=e.useItem(),d=e.useLabel(),[l,m]=react.useState(""),[p,w]=react.useState(false),y=react.useId(),b=react.useCallback(()=>{if(!c||n||l.trim().length===0)return;let g=o.reply(c,l.trim());w(!g),g&&m("");},[c,n,l,o]);return s||!c||!c.isActive?null:t?jsxRuntime.jsx(jsxRuntime.Fragment,{children:t}):jsxRuntime.jsxs("form",{className:`docx-review__reply-box${r?` ${r}`:""}`,onSubmit:g=>{g.preventDefault(),b();},children:[jsxRuntime.jsx("label",{className:"docx-editor-sr-only",htmlFor:y,children:d("comments.replyPlaceholder")}),jsxRuntime.jsx("input",{id:y,"data-testid":"review-reply-input",className:"docx-review__input",value:l,placeholder:d("comments.replyPlaceholder"),readOnly:n,...p?{"aria-invalid":true,"data-refused":""}:{},onChange:g=>{n||(w(false),m(g.target.value));},onClick:g=>g.stopPropagation(),onKeyDown:g=>{n||g.key!=="Enter"||(g.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:e.guardMousedown,onClick:g=>{g.stopPropagation(),m(""),w(false),o.setActive(null);},children:d("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:n||l.trim().length===0,title:n?d("editingMode.viewingHint"):void 0,children:d("review.reply")})]}),p?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:d("review.replyRefused")}):null]})}return a.docxReviewPart="Reply",{ReviewDraft:i,ReviewReply:a}}function Se(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"}}var _n=e=>e.isLoading||e.parseError!==null||e.pageSetup==null,Pn=e=>e.editingMode==="viewing",Le=react.createContext(null),I=react.createContext(null);function kn(){return react.useContext(I)}var In={scale:96/72,top:0,left:null},An=16,xe="\0compose",It=600,Mt=8,Mn=72,Tn=64,Dn=480,Sn=Object.freeze({placement:false});function He(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 qe(e){return new Set(e.map(i=>i.id))}function j(e){let i=e.target?.tagName;i==="INPUT"||i==="SELECT"||i==="TEXTAREA"||e.preventDefault();}function q(){let e=react.useContext(Le);return e||On}function Y(){let{t:e}=react.useContext(Le)??{},{t:i}=react$1.useTranslation();return react.useCallback(a=>e?.(a)??i(a),[e,i])}var{ReviewResolve:Tt,ReviewReopen:Dt}=Nt({useReview:()=>q().review,useItem:()=>react.useContext(I),useLabel:Y,guardMousedown:j}),{ReviewDraft:St,ReviewReply:Ot}=_t({useRail:q,useItem:()=>react.useContext(I),useLabel:Y,guardMousedown:j,composeKey:xe}),On={t:void 0,cardClassName:void 0,readOnly:false,review:{items:[],activeKey:null,setActive:()=>false,accept:()=>false,reject:()=>false,resolve:()=>false,reopen:()=>false,commentResolutionDisabledReason:null,remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}};function Ln({className:e,furniture:i,asChild:a,hidden:r,children:s,t,card:o,preset:n=true,stack:c=true,gap:d=8,filter:l,structural:m=false,formatting:p=false}){let w=react$1.useDocxEditor(),y=react$1.useEditorState(_n),b=react$1.useEditorState(Pn),g=react.useMemo(()=>{let R=[];return m||R.push("structural"),p||R.push("format"),R.length>0?R:void 0},[m,p]),k=react.useMemo(()=>g?{excludeRevisionKinds:g}:void 0,[g]);react.useEffect(()=>(w?.setReviewActivationExclusions(g??null),()=>w?.setReviewActivationExclusions(null)),[w,g]);let v=fe(Sn),x=fe(k),N=x.setPaneOpen,{t:C}=react$1.useTranslation(),O=react.useCallback(R=>t?.(R)??C(R),[t,C]),U=react.useRef(null),oe=react.useContext(react$1.ReviewRailContext);react.useEffect(()=>oe?.register(),[oe]);let Z=x.paneOpen,L=react.useMemo(()=>l?x.items.filter(R=>l(R)):x.items,[x.items,l]),Ue=react.useMemo(()=>{let R=new Map;for(let f of L)f.author&&!R.has(f.author)&&R.set(f.author,R.size);return R},[L]),ze=react.useMemo(()=>{let R=new Map;for(let f of L)R.set(f.id,f);return R},[L]),[Qe,Vt]=react.useState(()=>new Map),Yt=react.useCallback((R,f)=>{f<=0||Vt(h=>{if(h.get(R)===f)return h;let P=new Map(h);return P.set(R,f),P});},[]),Ge=ut(Yt),[D,Zt]=react.useState(In);react.useEffect(()=>{let R=U.current;if(!w||!R)return;let f=R.offsetParent,h=f?.querySelector(".docx-paginated-surface")??null,P=()=>{Zt(M=>{let K=h&&f?h.getBoundingClientRect():null,H=K&&f?f.getBoundingClientRect():null,$={scale:w.getRenderScale(),top:K&&H&&f?K.top-H.top-f.clientTop+f.scrollTop:0,left:K&&H&&f?K.right-H.left-f.clientLeft+f.scrollLeft+An:null};return M.scale===$.scale&&M.top===$.top&&M.left===$.left?M:$});};P();let E=new ResizeObserver(P);return f&&E.observe(f),h&&E.observe(h),()=>E.disconnect()},[w,L,y,r]),react.useEffect(()=>{let R=U.current;if(!w||!R)return;let f=h=>{let P=h.target;if(!(P instanceof Node)||R.contains(P))return;let E=R.offsetParent;!E||!E.contains(P)||E.querySelector(".docx-paginated-surface")?.contains(P)||w.setActiveReviewItem(null);};return document.addEventListener("mousedown",f,true),()=>document.removeEventListener("mousedown",f,true)},[w,y,r]);let[Pe,Bt]=react.useState(null);react.useEffect(()=>{let R=U.current,f=R?.offsetParent;if(!f)return;let h=0,P=()=>{h=0,Bt(H=>{let $=f.scrollTop-It,ve=f.scrollTop+f.clientHeight+It;return H&&H.top===$&&H.bottom===ve?H:{top:$,bottom:ve}});},E=0,M=()=>{h===0&&(h=requestAnimationFrame(P)),R?.setAttribute("data-scrolling",""),window.clearTimeout(E),E=window.setTimeout(()=>R?.removeAttribute("data-scrolling"),150);};P(),f.addEventListener("scroll",M,{passive:true});let K=new ResizeObserver(M);return K.observe(f),()=>{h!==0&&cancelAnimationFrame(h),window.clearTimeout(E),f.removeEventListener("scroll",M),K.disconnect();}},[w,y,r]);let[B,ke]=react.useState(null),We=react.useCallback(()=>{!w||b||(w.surface?.retainSelection(),N(true),ke(w.getSelectionPlacement()?.anchorY??null));},[w,b,N]),Xe=react.useCallback(()=>{w?.surface?.releaseSelection(),ke(null),w?.focus();},[w]);react.useEffect(()=>{Z||B===null||(w?.surface?.releaseSelection(),ke(null));},[Z,B,w]);let Je=B??x.selectionAnchorY,z=react.useMemo(()=>{let R=qe(L);return L.filter(f=>!He(f,R))},[L]),et=react.useMemo(()=>{if(B===null)return z;let R=z.findIndex(h=>h.anchorY!==null&&h.anchorY>B),f={key:xe,anchorY:B};return R===-1?[...z,f]:[...z.slice(0,R),f,...z.slice(R)]},[z,B]),tt=react.useMemo(()=>{let R=new Map(Qe);for(let f of z){if(R.has(f.key))continue;let h=f.text.length+(f.kind==="revision"?f.replacedText?.length??0:0),P=Math.min(6,Math.max(1,Math.ceil(h/36)));R.set(f.key,64+P*20);}return R},[Qe,z]),{stacked:Ie,collapsedKeys:nt}=react.useMemo(()=>{let R=D.scale,f=new Map,h=new Set,P=Number.NEGATIVE_INFINITY;for(let E of et){let M=E.anchorY===null?Number.isFinite(P)?P:0:Math.max(E.anchorY,P);f.set(E.key,M);let K=E.anchorY===null?0:(M-E.anchorY)*R,H="isActive"in E&&E.isActive,$=K>Dn&&!H&&E.key!==xe;$&&h.add(E.key);let ve=$?Tn:tt.get(E.key)??Mn;P=M+(ve+d)/R;}return {stacked:f,collapsedKeys:h}},[et,tt,d,D.scale]),Ae=Je===null?null:D.top+(Ie.get(xe)??Je)*D.scale,ot=o?.className,Ft=react.useMemo(()=>({t,cardClassName:ot,readOnly:b,review:{...x,items:L},allItems:v.items,authorSlots:Ue,byId:ze,measure:Ge,beginDraft:We,endDraft:Xe}),[t,ot,b,x,v.items,L,Ue,ze,Ge,We,Xe]);if(r||y)return null;let rt={ref:U,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":L.length,"data-open":Z?"":void 0,role:"complementary","aria-label":O("review.ariaLabel"),onMouseDown:j,style:D.left===null?void 0:{left:D.left,right:"auto"}},J=typeof s=="function"?{parts:{},rest:s}:Te(s,"root"),G=J.parts,re=(R,f)=>{if(!(R in G))return f;let h=G[R];return !react.isValidElement(h)||!react.isValidElement(f)?h:react.cloneElement(h,{...f.props,...h.props})},it=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[n||"AddComment"in G?re("AddComment",jsxRuntime.jsx($e,{top:Ae,drafting:B!==null})):null,!Z||B===null||Ae===null||!n&&!("Draft"in G)?null:re("Draft",jsxRuntime.jsx(St,{top:Ae})),n||"Balloon"in G?re("Balloon",jsxRuntime.jsx(Ve,{})):null]}),jt=jsxRuntime.jsx(he,{stack:c,positions:Ie,collapsed:nt,scale:D.scale,offset:D.top,window:Pe,children:J.rest}),Ut=jsxRuntime.jsx(Ke,{scale:D.scale,offset:D.top,window:Pe}),zt=Z?n||"List"in G?re("List",jt):typeof J.rest=="function"?null:J.rest:n||"Markers"in G?re("Markers",Ut):typeof J.rest=="function"?null:J.rest;return jsxRuntime.jsx(Le.Provider,{value:Ft,children:a&&react.isValidElement(s)?jsxRuntime.jsx(react$1.Slot,{...rt,children:react.cloneElement(s,void 0,s.props.children,n?jsxRuntime.jsx(he,{stack:c,positions:Ie,collapsed:nt,scale:D.scale,offset:D.top,window:Pe}):null,it)}):jsxRuntime.jsxs("aside",{...rt,children:[Z&&i!==void 0?jsxRuntime.jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:i}):null,zt,it]})})}function he({stack:e=true,positions:i,collapsed:a,scale:r=1,offset:s=0,window:t=null,children:o,className:n,hidden:c}){let{review:d,measure:l,cardClassName:m}=q();if(c)return null;let p=typeof o=="function"?null:Te(o,"list"),w=qe(d.items),y=d.items.filter(b=>!He(b,w));return y.length===0?typeof o=="function"?null:p?.parts.Empty??jsxRuntime.jsx(Ye,{}):jsxRuntime.jsx("div",{className:`docx-review__list${n?` ${n}`:""}`,children:y.map(b=>{let g=e?i?.get(b.key)??b.anchorY:b.anchorY,k=g==null?null:s+g*r;if(k!==null&&t&&(k<t.top||k>t.bottom))return null;let v=k===null?{}:{position:"absolute",top:k};return jsxRuntime.jsx(I.Provider,{value:b,children:jsxRuntime.jsx("div",{className:"docx-review__slot",style:v,...a?.has(b.key)?{"data-collapsed":""}:{},ref:x=>{l(x,b.key);},children:typeof o=="function"?o(b):p?.parts.Card&&react.isValidElement(p.parts.Card)?dt(p.parts.Card,m):jsxRuntime.jsx(Ze,{...m?{className:m}:{},children:p?.rest})})},b.key)})})}he.docxReviewPart="List";function Ke({scale:e=1,offset:i=0,window:a=null,className:r,hidden:s,icon:t}){let{review:o}=q(),n=Y();if(s)return null;let c=qe(o.items),d=o.items.filter(l=>!He(l,c));return jsxRuntime.jsx("div",{className:`docx-review__markers${r?` ${r}`:""}`,children:d.map(l=>{if(l.anchorY===null)return null;let m=i+l.anchorY*e;return a&&(m<a.top||m>a.bottom)?null:jsxRuntime.jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":l.kind==="revision"?l.revisionKind:l.kind,style:{position:"absolute",top:m},title:l.author?`${l.author}: ${l.text}`:l.text,"aria-label":`${n("review.showPane")}: ${l.author?`${l.author}. `:""}${l.text}`,onMouseDown:j,onClick:()=>{o.setPaneOpen(true),o.setActive(l.key);},children:(typeof t=="function"?t(l):t)??F(bt(l))},l.key)})})}Ke.docxReviewPart="Markers";function $e({top:e=null,drafting:i=false,className:a,hidden:r,children:s}){let{beginDraft:t,readOnly:o}=q(),n=Y();if(r||i||e===null||o)return null;let c={type:"button",className:`docx-review__add${a?` ${a}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":n("common.comment"),title:n("common.comment"),onMouseDown:j,onClick:t};return s?jsxRuntime.jsx(react$1.Slot,{...c,children:s}):jsxRuntime.jsx("button",{...c,children:F(pt)})}$e.docxReviewPart="AddComment";function Ve({className:e,hidden:i}){let{review:a,allItems:r,authorSlots:s}=q(),t=Y(),o=react.useRef(null),[n,c]=react.useState(null),d=react.useRef(false);d.current=n!==null,react.useEffect(()=>{let y=o.current,b=y?.closest(".docx-review"),g=b?.closest(".docx-editor__scroll-container")??b?.offsetParent;if(!y||!b||!g)return;let k=(x,N)=>{let C=b.getBoundingClientRect(),O=x.getBoundingClientRect(),U=x.ownerDocument.defaultView?.innerHeight??1/0,oe=Number(x.dataset.start),Z=Number(x.dataset.end);c({revisionId:x.dataset.revisionId,author:x.dataset.revisionAuthor??"",...x.dataset.revisionDate!==void 0?{date:x.dataset.revisionDate}:{},...x.dataset.revisionKind!==void 0?{kind:x.dataset.revisionKind}:{},structuralSite:N,...x.dataset.paragraphId!==void 0?{paragraphId:x.dataset.paragraphId}:{},...Number.isFinite(oe)?{start:oe}:{},...Number.isFinite(Z)?{end:Z}:{},left:O.left-C.left,top:O.top-C.top,bottom:O.bottom-C.top,above:O.bottom+220>U});},v=x=>{let N=x.target;if(!(N instanceof Element)||y.contains(N))return;let C=N.closest("[data-revision-id]");if(C instanceof HTMLElement&&g.contains(C)){let O=C.classList.contains("docx-table-row--revision");if(C.dataset.revisionKind==="format"||O){k(C,O);return}}d.current&&c(null);};return g.addEventListener("pointerdown",v,true),g.addEventListener("mousedown",v,true),()=>{g.removeEventListener("pointerdown",v,true),g.removeEventListener("mousedown",v,true);}},[]);let l=react.useMemo(()=>{if(!n)return null;let y=null,b=false,g=null,k=false,v=null,x=false;for(let N of r)if(!(N.kind!=="revision"||N.item.kind!=="revision")){for(let C of N.item.addresses)if(C.id===n.revisionId){if(C.author===n.author){if(C.date===n.date)return N;y===null?y=N:y!==N&&(b=true);}g===null?g=N:g!==N&&(k=true);}if(n.paragraphId!==void 0&&n.start!==void 0&&n.end!==void 0&&(N.revisionKind==="format"||N.revisionKind==="structural")){for(let C of N.item.ranges)if(C.start.paragraphId===n.paragraphId&&C.start.offset<n.end&&C.end.offset>n.start){v===null?v=N:v!==N&&(x=true);break}}}return y!==null&&!b?y:g!==null&&!k?g:v!==null&&!x?v:null},[r,n]),m=l&&(l.revisionKind==="format"||l.revisionKind==="structural")?l:null,p=react.useRef(false);if(react.useEffect(()=>{if(m){p.current=true;return}p.current&&(p.current=false,c(null));},[m]),i)return null;let w=n?.kind==="format"?"format":"structural";return jsxRuntime.jsx("div",{ref:o,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:j,children:m?jsxRuntime.jsx(I.Provider,{value:m,children:jsxRuntime.jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":m.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(s.get(m.author)??0)%Mt})`},onClick:()=>a.setActive(m.key),children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(ae,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(le,{}),jsxRuntime.jsx(ce,{})]}),m.kind==="revision"&&!m.readOnly?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[jsxRuntime.jsx(Ce,{}),jsxRuntime.jsx(Ee,{})]}):null]}),jsxRuntime.jsx(de,{})]})}):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:Hn(n.author)}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx("span",{className:"docx-review__author",children:n.author||t("comments.unknown")}),n.date?jsxRuntime.jsx(qn,{raw:n.date}):null]})]}),jsxRuntime.jsx("div",{className:"docx-review__summary",children:jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":w,children:t(Se(w))})})]})})})}Ve.docxReviewPart="Balloon";function Hn(e){let i=e.trim().split(/\s+/).filter(Boolean);return i.length===0?"?":i.slice(0,2).map(a=>a[0].toUpperCase()).join("")}function qn({raw:e}){let i=new Date(e);return Number.isNaN(i.getTime())?null:jsxRuntime.jsx("time",{className:"docx-review__time",dateTime:e,children:Lt.format(i)})}function Ye({className:e,hidden:i,children:a}){let r=Y();return i?null:jsxRuntime.jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:a??r("review.empty")})}Ye.docxReviewPart="Empty";function Ze({className:e,asChild:i,hidden:a,children:r}){let{review:s,authorSlots:t}=q(),o=react.useContext(I),n=react.useId();if(a||!o)return null;let c=t.get(o.author)??0,d={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${n}-author ${n}-summary`,"data-kind":o.kind==="revision"?o.revisionKind??"revision":o.kind,...o.kind==="custom"&&o.item.kind==="custom"?{"data-node-name":o.item.name}:{},...o.isActive?{"data-active":""}:{},...o.kind==="comment"&&o.resolved?{"data-resolved":""}:{},style:{"--doc-review-author":`var(--doc-review-author-${c%Mt})`},tabIndex:0,role:"button",id:n,onMouseDown:l=>{l.target?.closest("[data-review-selectable]")||l.currentTarget.focus({preventScroll:true});},onClick:()=>s.setActive(o.key),onKeyDown:l=>{l.target===l.currentTarget&&(l.key!=="Enter"&&l.key!==" "||(l.preventDefault(),s.setActive(o.key)));}};return i?jsxRuntime.jsx(react$1.Slot,{...d,children:r}):jsxRuntime.jsx("div",{...d,children:jsxRuntime.jsx(Kn,{children:r})})}Ze.docxReviewPart="Card";function Kn({children:e}){let i=react.useContext(I),a=react.useMemo(()=>$n(e),[e]),r=(t,o)=>t in a?a[t]:o;if(!i)return null;if(i.kind==="custom"&&i.item.kind==="custom"){let t=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:t.title}))})]}),r("Summary",t.detail?jsxRuntime.jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsxRuntime.jsx("span",{className:"docx-review__text",children:t.detail})}):null),a.__extra]})}let s=i.kind==="revision"&&!i.readOnly;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[r("Avatar",jsxRuntime.jsx(ae,{})),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[r("Author",jsxRuntime.jsx(le,{})),r("Time",jsxRuntime.jsx(ce,{}))]}),s||i.kind==="comment"?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[r("Accept",jsxRuntime.jsx(Ce,{})),r("Reject",jsxRuntime.jsx(Ee,{})),r("Resolve",jsxRuntime.jsx(Tt,{})),r("Reopen",jsxRuntime.jsx(Dt,{})),r("Delete",jsxRuntime.jsx(_e,{}))]}):null]}),r("Summary",jsxRuntime.jsx(de,{})),r("Replies",jsxRuntime.jsx(Be,{})),r("Reply",jsxRuntime.jsx(Ot,{})),a.__extra]})}function $n(e){let i={},a=[],r=s=>{if(Array.isArray(s)){s.forEach(r);return}if(!s||typeof s!="object"||!("type"in s)){s&&a.push(s);return}if(s.type===react.Fragment){r(s.props.children);return}let t=s.type.docxReviewPart;t?i[t]=s:a.push(s);};return r(e),a.length>0&&(i.__extra=a),i}function ae({className:e,asChild:i,hidden:a,children:r}){let s=react.useContext(I);if(a||!s||r===void 0&&!s.initials)return null;let t={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return i?jsxRuntime.jsx(react$1.Slot,{...t,children:r}):jsxRuntime.jsx("span",{...t,children:r??s.initials})}ae.docxReviewPart="Avatar";function le({className:e,asChild:i,hidden:a,children:r}){let s=react.useContext(I),t=Y();if(a||!s)return null;let o=s.author||t("comments.unknown"),n={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return i?jsxRuntime.jsx(react$1.Slot,{...n,children:r}):jsxRuntime.jsx("span",{...n,children:r??o})}le.docxReviewPart="Author";function ce({className:e,asChild:i,hidden:a,children:r}){let s=react.useContext(I);if(a||!s)return null;let t=s.date;if(!t)return null;let o=new Date(t);if(Number.isNaN(o.getTime()))return null;let n={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:t};return i?jsxRuntime.jsx(react$1.Slot,{...n,children:r}):jsxRuntime.jsx("time",{...n,children:r??Lt.format(o)})}ce.docxReviewPart="Time";var Lt=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function de({className:e,asChild:i,hidden:a,children:r}){let s=react.useContext(I),t=Y();if(a||!s)return null;let o=s.text,n=s.kind!=="revision"?null:t(Se(s.revisionKind)),c=s.kind==="revision"&&s.revisionKind==="replace",d={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return i?jsxRuntime.jsx(react$1.Slot,{...d,children:r}):jsxRuntime.jsx("div",{...d,children:r??(c?jsxRuntime.jsxs("span",{className:"docx-review__text",children:[t("review.replaced")," ",jsxRuntime.jsxs("span",{className:"docx-review__removed",children:['"',s.replacedText,'"']})," ",t("review.replacedWith")," ",jsxRuntime.jsxs("span",{className:"docx-review__added",children:['"',o,'"']})]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[n?jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":s.kind==="revision"?s.revisionKind:"revision",children:n}):null,o?jsxRuntime.jsx("span",{className:"docx-review__text",children:o}):null]}))})}de.docxReviewPart="Summary";function Ce({className:e,asChild:i,hidden:a,children:r,icon:s}){let{readOnly:t,review:o}=q(),n=react.useContext(I),c=Y();if(a||!n||n.kind!=="revision"||n.readOnly)return null;let d=c("review.accept"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:p=>{p.stopPropagation(),!t&&o.accept(n);}};return i?jsxRuntime.jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:r}):jsxRuntime.jsx("button",{...m,children:s??r??F(pe)})}Ce.docxReviewPart="Accept";function Ee({className:e,asChild:i,hidden:a,children:r,icon:s}){let{readOnly:t,review:o}=q(),n=react.useContext(I),c=Y();if(a||!n||n.kind!=="revision"||n.readOnly)return null;let d=c("review.reject"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:p=>{p.stopPropagation(),!t&&o.reject(n);}};return i?jsxRuntime.jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:r}):jsxRuntime.jsx("button",{...m,children:s??r??F(Rt)})}Ee.docxReviewPart="Reject";function _e({className:e,asChild:i,hidden:a,children:r,icon:s}){let{readOnly:t,review:o}=q(),n=react.useContext(I),{t:c}=react$1.useTranslation();if(a||!n||n.kind==="custom"||n.kind==="revision"&&n.readOnly)return null;let d=n.kind==="comment"?c("review.deleteComment"):c("review.discardChange"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:p=>{p.stopPropagation(),!t&&o.remove(n);}};return i?jsxRuntime.jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:r}):jsxRuntime.jsx("button",{...m,children:s??r??F(yt)})}_e.docxReviewPart="Delete";function Be({className:e,hidden:i}){let{byId:a}=q(),r=react.useContext(I);if(i||!r||r.kind==="custom")return null;let s=r.replyIds.map(t=>a.get(t)).filter(t=>t!==void 0);return s.length===0?null:jsxRuntime.jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:s.map(t=>jsxRuntime.jsx(I.Provider,{value:t,children:jsxRuntime.jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(ae,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(le,{}),jsxRuntime.jsx(ce,{})]}),jsxRuntime.jsx("div",{className:"docx-review__actions",children:jsxRuntime.jsx(_e,{})})]}),jsxRuntime.jsx(de,{})]})},t.key))})}Be.docxReviewPart="Replies";var Vn=Object.assign(Ln,{List:he,Empty:Ye,Card:Ze,Avatar:ae,Author:le,Time:ce,Summary:de,Accept:Ce,Reject:Ee,Resolve:Tt,Reopen:Dt,Delete:_e,Replies:Be,Reply:Ot,Markers:Ke,AddComment:$e,Draft:St,Balloon:Ve});function ue(e){let i=react$1.useDocxEditor();return react.useMemo(()=>e||(i?.getCustomNodeDefinitions()??[]).filter(chunkA7NTVTWG_cjs.j),[e,i])}var Fn=".docx-content-control-boundary";function te(e,i){let{node:a,definition:r,controlId:s}=e,t=s?i?.getReviewItems().find(c=>c.kind==="custom"&&c.item.id===s):void 0;if(t&&t.kind==="custom"){let c=t.item;return {...a,attrs:c.attrs,text:c.text,...c.data===void 0?{}:{data:c.data},...s?{nodeId:s}:{}}}let o=s?jn(i,s,r):void 0,n=r.fromDocx?r.fromDocx({attrs:a.attrs,text:"",...o===void 0?{}:{data:o}}):a.attrs;return n===null?null:{...a,attrs:n,...o===void 0?{}:{data:o},...s?{nodeId:s}:{}}}function jn(e,i,a){let r=e?.surface;if(!r)return;let s=r.session.part(),t=store.customNodePayloadsByControl(r.session.currentPackage(),s.name).get(i);if(!t)return;let o=chunkA7NTVTWG_cjs.e(a.schema,t.data);return o.ok?o.value:void 0}function ne(e,i){let a=e?.closest?.(Fn),r=a?.closest(".docx-content-control-chrome"),s=r?.getAttribute("data-tag"),t=s?chunkA7NTVTWG_cjs.c(s):null;if(!a||!t||!s)return null;let o=i.find(n=>n.tagPrefix===t.prefix&&n.name===t.name);return o?{node:{name:t.name,attrs:t.attrs,tag:s,rect:a.getBoundingClientRect()},definition:o,controlId:r?.getAttribute("data-docx-content-control")??null}:null}var Fe=".docx-content-control-boundary",zn=e=>{if(!chunkA7NTVTWG_cjs.k.test(e.tagPrefix)||!chunkA7NTVTWG_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 Qn(e){let{onNodeClick:i,onNodeHover:a}=e,r=react$1.useDocxEditor(),s=ue(e.nodes);return react.useEffect(()=>{let t=document.createElement("style"),o=[];for(let n of s){let c=zn(n);if(c.length===0)continue;let d=n.chrome?.color!==void 0&&CSS.supports("color",n.chrome.color)?n.chrome.color:"#2563eb";o.push(`${c.map(l=>`${l} ${Fe}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${d} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return t.textContent=o.join(`
2
- `),document.head.append(t),()=>t.remove()},[s]),react.useEffect(()=>{let t=null,o=null,n=m=>ne(document.elementFromPoint(m.clientX,m.clientY),s),c=m=>{let p=m.button===0?n(m):null;t=p?.controlId??null,o=p?.node.tag??null;},d=m=>{let p=t,w=o;if(t=null,o=null,w===null)return;let y=n(m);if(!y||y.node.tag!==w||p!==null&&y.controlId!==p)return;let b=te(y,r);b&&(y.definition.onClick?.(b),i?.(b));},l=m=>{let p=ne(m.target,s);if(!p||m.relatedTarget?.closest?.(Fe)===m.target.closest(Fe))return;let y=te(p,r);y&&(p.definition.onHover?.(y),a?.(y));};return document.addEventListener("pointerdown",c,true),document.addEventListener("pointerup",d,true),document.addEventListener("mouseover",l),()=>{document.removeEventListener("pointerdown",c,true),document.removeEventListener("pointerup",d,true),document.removeEventListener("mouseover",l);}},[s,r,i,a]),null}function $t(e){let{onEditNode:i,onRemoveRefused:a,remove:r=true}=e,s=ue(e.nodes),t=react$1.useContextMenuTarget(),o=react$1.useDocxEditor(),{t:n}=react$1.useTranslation(),c=react.useMemo(()=>t?ne(t,s):null,[t,s]),d=react.useMemo(()=>c?te(c,o):null,[c,o]),l=react.useMemo(()=>!c?.definition.reviewCard||!d?null:c.definition.reviewCard({attrs:d.attrs,text:d.text??"",...d.data===void 0?{}:{data:d.data}}),[c,d]);if(!c||!d)return null;let{definition:m}=c,p=m.label??m.name,w=m.onEdit!==void 0||i!==void 0,y=r&&d.nodeId!==void 0&&o!==null;return !l&&!w&&!y?null:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[l?jsxRuntime.jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-title",children:l.title}),l.detail?jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-detail",children:l.detail}):null]}):null,w?jsxRuntime.jsx(react$1.ContextMenuItem,{label:n("contextMenu.editCustomNode",{label:p}),className:"docx-contextmenu__custom-edit",onSelect:()=>{m.onEdit?.(d),i?.(d,m);}}):null,y?jsxRuntime.jsx(react$1.ContextMenuItem,{label:n("contextMenu.removeCustomNode",{label:p}),className:"docx-contextmenu__custom-remove",onSelect:()=>{let b=chunkA7NTVTWG_cjs.q(o,d.nodeId);b.ok||a?.(d,b.reason);}}):null,jsxRuntime.jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}$t.docxRowPlacement="start";Object.defineProperty(exports,"reviewModule",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.o}});exports.CustomNodeChrome=Qn;exports.CustomNodeContextMenu=$t;exports.DocxEditorReview=Vn;exports.activatedCustomNodeOf=te;exports.resolveCustomNodeActivation=ne;exports.useCustomNodeDefinitions=ue;exports.useReview=fe;exports.useReviewItem=kn;exports.useReviewOf=mt;exports.useStackedReviewPositions=an;
1
+ 'use strict';var chunkQIMNGUJX_cjs=require('../chunk-QIMNGUJX.cjs'),react=require('react'),react$1=require('@docx-editor.dev/react'),jsxRuntime=require('react/jsx-runtime'),store=require('@docx-editor.dev/core/store');var Jt=new Set(["List","Markers","AddComment","Draft","Balloon"]),en=new Set(["Card","Empty"]);function Te(e,r){let a=r==="root"?Jt:en,i={},s=[],t=n=>{if(Array.isArray(n)){for(let c of n)t(c);return}if(!react.isValidElement(n)){n!=null&&n!==false&&s.push(n);return}if(n.type===react.Fragment){t(n.props.children);return}let o=n.type.docxReviewPart;o&&a.has(o)?i[o]=n:s.push(n);};return t(e),{parts:i,rest:s}}function dt(e,r){if(!r)return e;let a=e.props.className;return react.cloneElement(e,{className:`${r}${a?` ${a}`:""}`})}function ut(e){let r=react.useRef(new WeakMap),a=react.useRef(new Map),i=react.useRef(null),s=react.useCallback((t,n)=>{let o=a.current.get(n);if(!t){o&&(i.current?.unobserve(o),r.current.delete(o),a.current.delete(n));return}typeof ResizeObserver>"u"||(e(n,t.offsetHeight),i.current??(i.current=new ResizeObserver(c=>{for(let d of c){let l=r.current.get(d.target);l&&e(l,d.target.offsetHeight);}})),!(o===t&&r.current.get(t)===n)&&(o&&(i.current.unobserve(o),r.current.delete(o)),r.current.set(t,n),a.current.set(n,t),i.current.observe(t)));},[e]);return react.useEffect(()=>()=>{i.current?.disconnect(),a.current.clear();},[]),s}function sn(e){let r=false;return ()=>{if(r)return;if(!globalThis.navigator?.scheduling?.isInputPending?.({includeContinuous:true})){e();return}r=true,setTimeout(()=>{r=false,e();},0);}}function fe(e){let r=react$1.useDocxEditor();return mt(r,e)}function mt(e,r){let a=react.useCallback(v=>{if(!e)return ()=>{};let x=false,N=sn(()=>{x||v();}),C=e.on("change",N),O=e.on("selectionChange",N),U=e.on("error",N);return ()=>{x=true,C(),O(),U();}},[e]),i=react.useSyncExternalStore(a,()=>e?`${e.getReviewRevision()}:${e.getEditingMode()}`:"none",()=>"none"),s=react.useMemo(()=>e?e.getReviewItems(r).filter(v=>v.item.kind!=="custom"||v.item.carded):[],[e,i,r]),t=react.useMemo(()=>s.find(v=>v.isActive)?.key??null,[s]),n=react.useCallback((v,x)=>e?e.setActiveReviewItem(v,x).ok:false,[e]),o=react.useCallback(v=>!e||v.kind!=="revision"||v.readOnly?false:e.acceptReviewItem(v.key).ok,[e]),c=react.useCallback(v=>!e||v.kind!=="revision"||v.readOnly?false:e.rejectReviewItem(v.key).ok,[e]),d=react.useCallback(v=>!e||v.kind!=="comment"?false:e.setCommentResolved(v.key,true).ok,[e]),l=react.useCallback(v=>!e||v.kind!=="comment"?false:e.setCommentResolved(v.key,false).ok,[e]),m=e?.getEditingMode()==="viewing"?"the document is open for viewing":null,f=react.useCallback(v=>!e||v.kind==="custom"||v.kind==="revision"&&v.readOnly?false:e.deleteReviewItem(v.key).ok,[e]),w=react.useCallback((v,x,N)=>x.trim().length===0||!e?false:e.replyToReviewItem(v.key,x,N).ok,[e]),R=react.useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,i]),b=react.useCallback((v,x)=>v.trim().length===0||!e?false:e.addComment(v,x).ok,[e]),g=react.useMemo(()=>e?e.isReviewPaneOpen():true,[e,i]),k=react.useCallback(v=>{!e||e.isReviewPaneOpen()===v||e.exec({type:"toggleReviewPane"});},[e]);return react.useMemo(()=>({items:s,activeKey:t,setActive:n,accept:o,reject:c,resolve:d,reopen:l,commentResolutionDisabledReason:m,remove:f,reply:w,selectionAnchorY:R,comment:b,paneOpen:g,setPaneOpen:k,ready:e!==null&&!e.snapshot().isLoading&&e.snapshot().parseError===null}),[s,t,n,o,c,d,l,m,f,w,R,b,g,k,e])}function an(e,r,a={}){let i=a.gap??8,s=a.scale??1,t=a.defaultHeight??0;return react.useMemo(()=>{let n=new Map,o=Number.NEGATIVE_INFINITY;for(let c of e){let d=c.anchorY===null?Number.isFinite(o)?o:0:Math.max(c.anchorY,o);n.set(c.key,d),o=d+((r.get(c.key)??t)+i)/s;}return n},[e,r,i,s,t])}var F=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"})}),pt="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",vt="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",pe="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",wt="M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z",Rt="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",yt="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",ln="M200-200h57l391-391-57-57-391 391v57Zm-80 80v-170l528-527q12-11 26.5-17t30.5-6q16 0 31 6t26 18l55 56q12 11 17.5 26t5.5 30q0 16-5.5 30.5T817-647L290-120H120Zm640-584-56-56 56 56Zm-141 85-28-29 57 57-29-28Z",cn="M486-160q-76 0-135-45t-85-123l88-38q14 48 48.5 78t85.5 30q42 0 76-20t34-64q0-18-7-33t-19-27h112q5 14 7.5 28.5T694-341q0 86-61.5 133.5T486-160ZM80-520v-80h800v80H80Zm402-360q66 0 116 30t74 84l-88 38q-11-28-38.5-47T480-794q-42 0-72 19t-30 51q0 15 6 27t18 22H272q-6-13-9-27t-3-30q0-70 55-114t167-44Z",dn="M360-160q-83 0-141.5-58.5T160-360v-360q0-83 58.5-141.5T360-920q83 0 141.5 58.5T560-720v360q0 83-58.5 141.5T360-160Zm0-80q50 0 85-35t35-85v-360q0-50-35-85t-85-35q-50 0-85 35t-35 85v360q0 50 35 85t85 35Zm300 80q29 0 49.5-20.5T730-230q0-22-12.5-40T684-296l-64-32v-232l100 100q23 23 51.5 35.5T832-412v-80q-17 0-32-6.5T773-517L633-657q-12-12-27.5-17.5T573-680h-13v520h100ZM360-720Z",un="M580-360q-25 0-42.5-17.5T520-420v-160q0-25 17.5-42.5T580-640h160q25 0 42.5 17.5T800-580v260q0 66-47 113t-113 47v-80q33 0 56.5-23.5T720-320v-40H580Zm-360 0q-25 0-42.5-17.5T160-420v-160q0-25 17.5-42.5T220-640h160q25 0 42.5 17.5T440-580v260q0 66-47 113t-113 47v-80q33 0 56.5-23.5T360-320v-40H220Z";function bt(e){if(e.kind==="comment")return vt;if(e.kind==="custom")return e.item.icon??un;switch(e.revisionKind){case "insert":case "moveTo":return ln;case "delete":case "moveFrom":return cn;case "format":return dn;default:return vt}}function fn(e,r){return typeof r!="function"?e:typeof e!="function"?r:a=>{e(a),a.defaultPrevented||r(a);}}function pn(e,r){let a={...e,...r};for(let i of Object.keys(e))/^on[A-Z]/.test(i)?a[i]=fn(r[i],e[i]):i==="className"?a[i]=[e[i],r[i]].filter(Boolean).join(" "):i==="style"&&(a[i]={...e[i],...r[i]});return a}function ht(e){return e==="Enter"||e===" "}function wn(e){return ht(e.key)?(e.preventDefault(),e.stopPropagation(),true):false}function xt(e){return e.type==="button"}function Rn(e,r){return e.type==="a"||r.href!=null}function yn(e,r,a,i){let s=t=>{typeof a=="function"&&a(t);};return {onClick:t=>{typeof e=="function"&&e(t),t.defaultPrevented||s(t),i&&t.preventDefault();},onKeyDown:t=>{if(typeof r=="function"&&r(t),!ht(t.key))return;t.defaultPrevented||s(t),i&&t.preventDefault();}}}function W({engineDisabled:e,disabledReason:r,slotProps:a,children:i}){let s=react.Children.only(i);if(!react.isValidElement(s))return null;let t=s.props,n=pn(a,t);if(!e){if(!xt(s)){let o=yn(t.onClick,t.onKeyDown,a.onClick,Rn(s,t));n.onClick=o.onClick,n.onKeyDown=o.onKeyDown;}return react.cloneElement(s,n)}if(xt(s))n.disabled=true,delete n["aria-disabled"];else {delete n.disabled,n["aria-disabled"]=true,n["data-disabled"]="",n.tabIndex=-1,n.href=void 0,n.role===void 0&&(n.role="button");let o=n.onKeyDown;n.onKeyDown=c=>{wn(c)||typeof o=="function"&&o(c);};}return r&&(n.title=r),n.onClick=o=>{o.preventDefault(),o.stopPropagation();},react.cloneElement(s,n)}function Nt(e){function r({className:i,asChild:s,hidden:t,children:n,icon:o}){let c=e.useReview(),d=e.useItem(),l=e.useLabel();if(t||!d||d.kind!=="comment"||d.resolved)return null;let m=l("comments.resolve"),f=c.commentResolutionDisabledReason!==null,w=f?l("editingMode.viewingHint"):null,R={type:"button",className:`docx-review__action${i?` ${i}`:""}`,"data-testid":"review-resolve","aria-label":m,title:w??m,disabled:f,onMouseDown:e.guardMousedown,onClick:b=>{b.stopPropagation(),!f&&c.resolve(d);}};return s?jsxRuntime.jsx(W,{engineDisabled:f,disabledReason:w,slotProps:R,children:n}):jsxRuntime.jsx("button",{...R,children:o??n??F(pe)})}r.docxReviewPart="Resolve";function a({className:i,asChild:s,hidden:t,children:n,icon:o}){let c=e.useReview(),d=e.useItem(),l=e.useLabel();if(t||!d||d.kind!=="comment"||!d.resolved)return null;let m=l("comments.reopen"),f=c.commentResolutionDisabledReason!==null,w=f?l("editingMode.viewingHint"):null,R={type:"button",className:`docx-review__action${i?` ${i}`:""}`,"data-testid":"review-reopen","aria-label":m,title:w??m,disabled:f,onMouseDown:e.guardMousedown,onClick:b=>{b.stopPropagation(),!f&&c.reopen(d);}};return s?jsxRuntime.jsx(W,{engineDisabled:f,disabledReason:w,slotProps:R,children:n}):jsxRuntime.jsx("button",{...R,children:o??n??F(wt)})}return a.docxReviewPart="Reopen",{ReviewResolve:r,ReviewReopen:a}}function _t(e){function r({top:i=0,className:s,hidden:t}){let{review:n,endDraft:o,measure:c,readOnly:d}=e.useRail(),l=e.useLabel(),[m,f]=react.useState(""),[w,R]=react.useState(false),b=react.useRef(null),g=react.useId();react.useEffect(()=>{d||b.current?.focus({preventScroll:true});},[]);let k=react.useCallback(()=>{if(d||m.trim().length===0)return;let v=n.comment(m.trim());R(!v),v&&(f(""),o());},[d,m,n,o]);return t?null:jsxRuntime.jsx("div",{className:`docx-review__slot${s?` ${s}`:""}`,style:{position:"absolute",top:i},ref:v=>{c(v,e.composeKey);},children:jsxRuntime.jsx("div",{className:"docx-review__card","data-testid":"review-draft","data-draft":"",children:jsxRuntime.jsxs("form",{className:"docx-review__reply-box",onSubmit:v=>{v.preventDefault(),k();},children:[jsxRuntime.jsx("label",{className:"docx-editor-sr-only",htmlFor:g,children:l("comments.addComment")}),jsxRuntime.jsx("input",{id:g,ref:b,"data-testid":"review-draft-input",className:"docx-review__input",value:m,placeholder:l("comments.addComment"),readOnly:d,...w?{"aria-invalid":true}:{},onChange:v=>{d||(R(false),f(v.target.value));},onKeyDown:v=>{if(v.key==="Escape"){v.preventDefault(),o();return}d||v.key!=="Enter"||(v.preventDefault(),k());}}),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:e.guardMousedown,onClick:o,children:l("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:d||m.trim().length===0,title:d?l("editingMode.viewingHint"):void 0,children:l("common.comment")})]}),w?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert",children:l("review.commentRefused")}):null]})})})}r.docxReviewPart="Draft";function a({className:i,hidden:s,children:t}){let{review:n,readOnly:o}=e.useRail(),c=e.useItem(),d=e.useLabel(),[l,m]=react.useState(""),[f,w]=react.useState(false),R=react.useId(),b=react.useCallback(()=>{if(!c||o||l.trim().length===0)return;let g=n.reply(c,l.trim());w(!g),g&&m("");},[c,o,l,n]);return s||!c||!c.isActive?null:t?jsxRuntime.jsx(jsxRuntime.Fragment,{children:t}):jsxRuntime.jsxs("form",{className:`docx-review__reply-box${i?` ${i}`:""}`,onSubmit:g=>{g.preventDefault(),b();},children:[jsxRuntime.jsx("label",{className:"docx-editor-sr-only",htmlFor:R,children:d("comments.replyPlaceholder")}),jsxRuntime.jsx("input",{id:R,"data-testid":"review-reply-input",className:"docx-review__input",value:l,placeholder:d("comments.replyPlaceholder"),readOnly:o,...f?{"aria-invalid":true,"data-refused":""}:{},onChange:g=>{o||(w(false),m(g.target.value));},onClick:g=>g.stopPropagation(),onKeyDown:g=>{o||g.key!=="Enter"||(g.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:e.guardMousedown,onClick:g=>{g.stopPropagation(),m(""),w(false),n.setActive(null);},children:d("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:o||l.trim().length===0,title:o?d("editingMode.viewingHint"):void 0,children:d("review.reply")})]}),f?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:d("review.replyRefused")}):null]})}return a.docxReviewPart="Reply",{ReviewDraft:r,ReviewReply:a}}function Se(e,r){if(e==="paragraphMark")return r==="delete"?"revisions.paragraphMarkDeleted":r==="moveFrom"?"revisions.paragraphMarkMovedFrom":r==="moveTo"?"revisions.paragraphMarkMovedTo":"revisions.paragraphMarkInserted";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";default:return "review.structural"}}var _n=e=>e.isLoading||e.parseError!==null||e.pageSetup==null,Pn=e=>e.editingMode==="viewing",Le=react.createContext(null),I=react.createContext(null);function kn(){return react.useContext(I)}var In={scale:96/72,top:0,left:null},Mn=16,xe="\0compose",It=600,At=8,An=72,Tn=64,Dn=480,Sn=30,On=Object.freeze({placement:false});function He(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 j(e){let r=e.target?.tagName;r==="INPUT"||r==="SELECT"||r==="TEXTAREA"||e.preventDefault();}function K(){let e=react.useContext(Le);return e||Ln}function Y(){let{t:e}=react.useContext(Le)??{},{t:r}=react$1.useTranslation();return react.useCallback(a=>e?.(a)??r(a),[e,r])}var{ReviewResolve:Tt,ReviewReopen:Dt}=Nt({useReview:()=>K().review,useItem:()=>react.useContext(I),useLabel:Y,guardMousedown:j}),{ReviewDraft:St,ReviewReply:Ot}=_t({useRail:K,useItem:()=>react.useContext(I),useLabel:Y,guardMousedown:j,composeKey:xe}),Ln={t:void 0,cardClassName:void 0,readOnly:false,review:{items:[],activeKey:null,setActive:()=>false,accept:()=>false,reject:()=>false,resolve:()=>false,reopen:()=>false,commentResolutionDisabledReason:null,remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}};function Hn({className:e,furniture:r,asChild:a,hidden:i,children:s,t,card:n,preset:o=true,stack:c=true,gap:d=8,filter:l,structural:m=false,formatting:f=false}){let w=react$1.useDocxEditor(),R=react$1.useEditorState(_n),b=react$1.useEditorState(Pn),g=react.useMemo(()=>{let y=[];return m||y.push("structural"),f||y.push("format"),y.length>0?y:void 0},[m,f]),k=react.useMemo(()=>g?{excludeRevisionKinds:g}:void 0,[g]);react.useEffect(()=>(w?.setReviewActivationExclusions(g??null),()=>w?.setReviewActivationExclusions(null)),[w,g]);let v=fe(On),x=fe(k),N=x.setPaneOpen,{t:C}=react$1.useTranslation(),O=react.useCallback(y=>t?.(y)??C(y),[t,C]),U=react.useRef(null),oe=react.useContext(react$1.ReviewRailContext);react.useEffect(()=>oe?.register(),[oe]);let Z=x.paneOpen,L=react.useMemo(()=>l?x.items.filter(y=>l(y)):x.items,[x.items,l]),Ue=react.useMemo(()=>{let y=new Map;for(let p of L)p.author&&!y.has(p.author)&&y.set(p.author,y.size);return y},[L]),ze=react.useMemo(()=>{let y=new Map;for(let p of L)y.set(p.id,p);return y},[L]),[Qe,Vt]=react.useState(()=>new Map),Yt=react.useCallback((y,p)=>{p<=0||Vt(h=>{if(h.get(y)===p)return h;let P=new Map(h);return P.set(y,p),P});},[]),Ge=ut(Yt),[S,Zt]=react.useState(In);react.useEffect(()=>{let y=U.current;if(!w||!y)return;let p=y.offsetParent,h=p?.querySelector(".docx-paginated-surface")??null,P=()=>{Zt(A=>{let q=h&&p?h.getBoundingClientRect():null,H=q&&p?p.getBoundingClientRect():null,$={scale:w.getRenderScale(),top:q&&H&&p?q.top-H.top-p.clientTop+p.scrollTop:0,left:q&&H&&p?q.right-H.left-p.clientLeft+p.scrollLeft+Mn:null};return A.scale===$.scale&&A.top===$.top&&A.left===$.left?A:$});};P();let E=new ResizeObserver(P);return p&&E.observe(p),h&&E.observe(h),()=>E.disconnect()},[w,L,R,i]),react.useEffect(()=>{let y=U.current;if(!w||!y)return;let p=h=>{let P=h.target;if(!(P instanceof Node)||y.contains(P))return;let E=y.offsetParent;!E||!E.contains(P)||E.querySelector(".docx-paginated-surface")?.contains(P)||w.setActiveReviewItem(null);};return document.addEventListener("mousedown",p,true),()=>document.removeEventListener("mousedown",p,true)},[w,R,i]);let[Pe,Bt]=react.useState(null);react.useEffect(()=>{let y=U.current,p=y?.offsetParent;if(!p)return;let h=0,P=()=>{h=0,Bt(H=>{let $=p.scrollTop-It,ve=p.scrollTop+p.clientHeight+It;return H&&H.top===$&&H.bottom===ve?H:{top:$,bottom:ve}});},E=0,A=()=>{h===0&&(h=requestAnimationFrame(P)),y?.setAttribute("data-scrolling",""),window.clearTimeout(E),E=window.setTimeout(()=>y?.removeAttribute("data-scrolling"),150);};P(),p.addEventListener("scroll",A,{passive:true});let q=new ResizeObserver(A);return q.observe(p),()=>{h!==0&&cancelAnimationFrame(h),window.clearTimeout(E),p.removeEventListener("scroll",A),q.disconnect();}},[w,R,i]);let[B,ke]=react.useState(null),We=react.useCallback(()=>{!w||b||(w.surface?.retainSelection(),N(true),ke(w.getSelectionPlacement()?.anchorY??null));},[w,b,N]),Xe=react.useCallback(()=>{w?.surface?.releaseSelection(),ke(null),w?.focus();},[w]);react.useEffect(()=>{Z||B===null||(w?.surface?.releaseSelection(),ke(null));},[Z,B,w]);let Je=B??x.selectionAnchorY,z=react.useMemo(()=>{let y=Ke(L);return L.filter(p=>!He(p,y))},[L]),et=react.useMemo(()=>{if(B===null)return z;let y=z.findIndex(h=>h.anchorY!==null&&h.anchorY>B),p={key:xe,anchorY:B};return y===-1?[...z,p]:[...z.slice(0,y),p,...z.slice(y)]},[z,B]),tt=react.useMemo(()=>{let y=new Map(Qe);for(let p of z){if(y.has(p.key))continue;let h=p.text.length+(p.kind==="revision"?p.replacedText?.length??0:0),P=Math.min(6,Math.max(1,Math.ceil(h/36)));y.set(p.key,64+P*20);}return y},[Qe,z]),{stacked:Ie,collapsedKeys:nt}=react.useMemo(()=>{let y=S.scale,p=new Map,h=new Set,P=Number.NEGATIVE_INFINITY;for(let E of et){let A=E.anchorY===null?Number.isFinite(P)?P:0:Math.max(E.anchorY,P);p.set(E.key,A);let q=E.anchorY===null?0:(A-E.anchorY)*y,H="isActive"in E&&E.isActive,$=q>Dn&&!H&&E.key!==xe;$&&h.add(E.key);let ve=$?Tn:tt.get(E.key)??An;P=A+(ve+d)/y;}return {stacked:p,collapsedKeys:h}},[et,tt,d,S.scale]),Me=Je===null?null:S.top+(Ie.get(xe)??Je)*S.scale,ot=n?.className,Ft=react.useMemo(()=>({t,cardClassName:ot,readOnly:b,review:{...x,items:L},allItems:v.items,authorSlots:Ue,byId:ze,measure:Ge,beginDraft:We,endDraft:Xe}),[t,ot,b,x,v.items,L,Ue,ze,Ge,We,Xe]);if(i||R)return null;let rt={ref:U,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":L.length,"data-open":Z?"":void 0,role:"complementary","aria-label":O("review.ariaLabel"),onMouseDown:j,style:S.left===null?void 0:{left:S.left,right:"auto"}},J=typeof s=="function"?{parts:{},rest:s}:Te(s,"root"),G=J.parts,re=(y,p)=>{if(!(y in G))return p;let h=G[y];return !react.isValidElement(h)||!react.isValidElement(p)?h:react.cloneElement(h,{...p.props,...h.props})},it=jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[o||"AddComment"in G?re("AddComment",jsxRuntime.jsx($e,{top:Me,drafting:B!==null})):null,!Z||B===null||Me===null||!o&&!("Draft"in G)?null:re("Draft",jsxRuntime.jsx(St,{top:Me})),o||"Balloon"in G?re("Balloon",jsxRuntime.jsx(Ve,{})):null]}),jt=jsxRuntime.jsx(he,{stack:c,positions:Ie,collapsed:nt,scale:S.scale,offset:S.top,window:Pe,children:J.rest}),Ut=jsxRuntime.jsx(qe,{scale:S.scale,offset:S.top,window:Pe}),zt=Z?o||"List"in G?re("List",jt):typeof J.rest=="function"?null:J.rest:o||"Markers"in G?re("Markers",Ut):typeof J.rest=="function"?null:J.rest;return jsxRuntime.jsx(Le.Provider,{value:Ft,children:a&&react.isValidElement(s)?jsxRuntime.jsx(react$1.Slot,{...rt,children:react.cloneElement(s,void 0,s.props.children,o?jsxRuntime.jsx(he,{stack:c,positions:Ie,collapsed:nt,scale:S.scale,offset:S.top,window:Pe}):null,it)}):jsxRuntime.jsxs("aside",{...rt,children:[Z&&r!==void 0?jsxRuntime.jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:r}):null,zt,it]})})}function he({stack:e=true,positions:r,collapsed:a,scale:i=1,offset:s=0,window:t=null,children:n,className:o,hidden:c}){let{review:d,measure:l,cardClassName:m}=K();if(c)return null;let f=typeof n=="function"?null:Te(n,"list"),w=Ke(d.items),R=d.items.filter(b=>!He(b,w));return R.length===0?typeof n=="function"?null:f?.parts.Empty??jsxRuntime.jsx(Ye,{}):jsxRuntime.jsx("div",{className:`docx-review__list${o?` ${o}`:""}`,children:R.map(b=>{let g=e?r?.get(b.key)??b.anchorY:b.anchorY,k=g==null?null:s+g*i;if(k!==null&&t&&(k<t.top||k>t.bottom))return null;let v=k===null?{}:{position:"absolute",top:k};return jsxRuntime.jsx(I.Provider,{value:b,children:jsxRuntime.jsx("div",{className:"docx-review__slot",style:v,...a?.has(b.key)?{"data-collapsed":""}:{},ref:x=>{l(x,b.key);},children:typeof n=="function"?n(b):f?.parts.Card&&react.isValidElement(f.parts.Card)?dt(f.parts.Card,m):jsxRuntime.jsx(Ze,{...m?{className:m}:{},children:f?.rest})})},b.key)})})}he.docxReviewPart="List";function qe({scale:e=1,offset:r=0,window:a=null,className:i,hidden:s,icon:t}){let{review:n}=K(),o=Y(),{roots:c,stackedTops:d}=react.useMemo(()=>{let l=Ke(n.items),m=n.items.filter(R=>!He(R,l)),f=new Map,w=Number.NEGATIVE_INFINITY;for(let R of m){if(R.anchorY===null)continue;let b=Math.max(r+R.anchorY*e,w);f.set(R.key,b),w=b+Sn;}return {roots:m,stackedTops:f}},[n.items,r,e]);return s?null:jsxRuntime.jsx("div",{className:`docx-review__markers${i?` ${i}`:""}`,children:c.map(l=>{let m=d.get(l.key);return m===void 0||a&&(m<a.top||m>a.bottom)?null:jsxRuntime.jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":l.kind==="revision"?l.revisionKind:l.kind,style:{position:"absolute",top:m},title:l.author?`${l.author}: ${l.text}`:l.text,"aria-label":`${o("review.showPane")}: ${l.author?`${l.author}. `:""}${l.text}`,onMouseDown:j,onClick:()=>{n.setPaneOpen(true),n.setActive(l.key);},children:(typeof t=="function"?t(l):t)??F(bt(l))},l.key)})})}qe.docxReviewPart="Markers";function $e({top:e=null,drafting:r=false,className:a,hidden:i,children:s}){let{beginDraft:t,readOnly:n}=K(),o=Y();if(i||r||e===null||n)return null;let c={type:"button",className:`docx-review__add${a?` ${a}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":o("common.comment"),title:o("common.comment"),onMouseDown:j,onClick:t};return s?jsxRuntime.jsx(react$1.Slot,{...c,children:s}):jsxRuntime.jsx("button",{...c,children:F(pt)})}$e.docxReviewPart="AddComment";function Ve({className:e,hidden:r}){let{review:a,allItems:i,authorSlots:s}=K(),t=Y(),n=react.useRef(null),[o,c]=react.useState(null),d=react.useRef(false);d.current=o!==null,react.useEffect(()=>{let R=n.current,b=R?.closest(".docx-review"),g=b?.closest(".docx-editor__scroll-container")??b?.offsetParent;if(!R||!b||!g)return;let k=(x,N)=>{let C=b.getBoundingClientRect(),O=x.getBoundingClientRect(),U=x.ownerDocument.defaultView?.innerHeight??1/0,oe=Number(x.dataset.start),Z=Number(x.dataset.end);c({revisionId:x.dataset.revisionId,author:x.dataset.revisionAuthor??"",...x.dataset.revisionDate!==void 0?{date:x.dataset.revisionDate}:{},...x.dataset.revisionKind!==void 0?{kind:x.dataset.revisionKind}:{},structuralSite:N,...x.dataset.paragraphId!==void 0?{paragraphId:x.dataset.paragraphId}:{},...Number.isFinite(oe)?{start:oe}:{},...Number.isFinite(Z)?{end:Z}:{},left:O.left-C.left,top:O.top-C.top,bottom:O.bottom-C.top,above:O.bottom+220>U});},v=x=>{let N=x.target;if(!(N instanceof Element)||R.contains(N))return;let C=N.closest("[data-revision-id]");if(C instanceof HTMLElement&&g.contains(C)){let O=C.classList.contains("docx-table-row--revision");if(C.dataset.revisionKind==="format"||O){k(C,O);return}}d.current&&c(null);};return g.addEventListener("pointerdown",v,true),g.addEventListener("mousedown",v,true),()=>{g.removeEventListener("pointerdown",v,true),g.removeEventListener("mousedown",v,true);}},[]);let l=react.useMemo(()=>{if(!o)return null;let R=null,b=false,g=null,k=false,v=null,x=false;for(let N of i)if(!(N.kind!=="revision"||N.item.kind!=="revision")){for(let C of N.item.addresses)if(C.id===o.revisionId){if(C.author===o.author){if(C.date===o.date)return N;R===null?R=N:R!==N&&(b=true);}g===null?g=N:g!==N&&(k=true);}if(o.paragraphId!==void 0&&o.start!==void 0&&o.end!==void 0&&(N.revisionKind==="format"||N.revisionKind==="structural")){for(let C of N.item.ranges)if(C.start.paragraphId===o.paragraphId&&C.start.offset<o.end&&C.end.offset>o.start){v===null?v=N:v!==N&&(x=true);break}}}return R!==null&&!b?R:g!==null&&!k?g:v!==null&&!x?v:null},[i,o]),m=l&&(l.revisionKind==="format"||l.revisionKind==="structural")?l:null,f=react.useRef(false);if(react.useEffect(()=>{if(m){f.current=true;return}f.current&&(f.current=false,c(null));},[m]),r)return null;let w=o?.kind==="format"?"format":"structural";return jsxRuntime.jsx("div",{ref:n,className:`docx-review__balloon-root${e?` ${e}`:""}`,children:o===null?null:jsxRuntime.jsx("div",{className:"docx-review__balloon","data-testid":"review-balloon",style:{left:o.left,top:o.above?o.top-6:o.bottom+6,transform:o.above?"translateY(-100%)":void 0},onMouseDown:j,children:m?jsxRuntime.jsx(I.Provider,{value:m,children:jsxRuntime.jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":m.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(s.get(m.author)??0)%At})`},onClick:()=>a.setActive(m.key),children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(ae,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(le,{}),jsxRuntime.jsx(ce,{})]}),m.kind==="revision"&&!m.readOnly?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[jsxRuntime.jsx(Ce,{}),jsxRuntime.jsx(Ee,{})]}):null]}),jsxRuntime.jsx(de,{})]})}):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:Kn(o.author)}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx("span",{className:"docx-review__author",children:o.author||t("comments.unknown")}),o.date?jsxRuntime.jsx(qn,{raw:o.date}):null]})]}),jsxRuntime.jsx("div",{className:"docx-review__summary",children:jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":w,children:t(Se(w))})})]})})})}Ve.docxReviewPart="Balloon";function Kn(e){let r=e.trim().split(/\s+/).filter(Boolean);return r.length===0?"?":r.slice(0,2).map(a=>a[0].toUpperCase()).join("")}function qn({raw:e}){let r=new Date(e);return Number.isNaN(r.getTime())?null:jsxRuntime.jsx("time",{className:"docx-review__time",dateTime:e,children:Lt.format(r)})}function Ye({className:e,hidden:r,children:a}){let i=Y();return r?null:jsxRuntime.jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:a??i("review.empty")})}Ye.docxReviewPart="Empty";function Ze({className:e,asChild:r,hidden:a,children:i}){let{review:s,authorSlots:t}=K(),n=react.useContext(I),o=react.useId();if(a||!n)return null;let c=t.get(n.author)??0,d={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${o}-author ${o}-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-${c%At})`},tabIndex:0,role:"button",id:o,onMouseDown:l=>{l.target?.closest("[data-review-selectable]")||l.currentTarget.focus({preventScroll:true});},onClick:()=>s.setActive(n.key),onKeyDown:l=>{l.target===l.currentTarget&&(l.key!=="Enter"&&l.key!==" "||(l.preventDefault(),s.setActive(n.key)));}};return r?jsxRuntime.jsx(react$1.Slot,{...d,children:i}):jsxRuntime.jsx("div",{...d,children:jsxRuntime.jsx($n,{children:i})})}Ze.docxReviewPart="Card";function $n({children:e}){let r=react.useContext(I),a=react.useMemo(()=>Vn(e),[e]),i=(t,n)=>t in a?a[t]:n;if(!r)return null;if(r.kind==="custom"&&r.item.kind==="custom"){let t=r.item;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[i("Avatar",null),jsxRuntime.jsx("div",{className:"docx-review__meta",children:i("Author",jsxRuntime.jsx("span",{className:"docx-review__author","data-testid":"review-custom-title",children:t.title}))})]}),i("Summary",t.detail?jsxRuntime.jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsxRuntime.jsx("span",{className:"docx-review__text",children:t.detail})}):null),a.__extra]})}let s=r.kind==="revision"&&!r.readOnly;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[i("Avatar",jsxRuntime.jsx(ae,{})),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[i("Author",jsxRuntime.jsx(le,{})),i("Time",jsxRuntime.jsx(ce,{}))]}),s||r.kind==="comment"?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[i("Accept",jsxRuntime.jsx(Ce,{})),i("Reject",jsxRuntime.jsx(Ee,{})),i("Resolve",jsxRuntime.jsx(Tt,{})),i("Reopen",jsxRuntime.jsx(Dt,{})),i("Delete",jsxRuntime.jsx(_e,{}))]}):null]}),i("Summary",jsxRuntime.jsx(de,{})),i("Replies",jsxRuntime.jsx(Be,{})),i("Reply",jsxRuntime.jsx(Ot,{})),a.__extra]})}function Vn(e){let r={},a=[],i=s=>{if(Array.isArray(s)){s.forEach(i);return}if(!s||typeof s!="object"||!("type"in s)){s&&a.push(s);return}if(s.type===react.Fragment){i(s.props.children);return}let t=s.type.docxReviewPart;t?r[t]=s:a.push(s);};return i(e),a.length>0&&(r.__extra=a),r}function ae({className:e,asChild:r,hidden:a,children:i}){let s=react.useContext(I);if(a||!s||i===void 0&&!s.initials)return null;let t={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return r?jsxRuntime.jsx(react$1.Slot,{...t,children:i}):jsxRuntime.jsx("span",{...t,children:i??s.initials})}ae.docxReviewPart="Avatar";function le({className:e,asChild:r,hidden:a,children:i}){let s=react.useContext(I),t=Y();if(a||!s)return null;let n=s.author||t("comments.unknown"),o={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return r?jsxRuntime.jsx(react$1.Slot,{...o,children:i}):jsxRuntime.jsx("span",{...o,children:i??n})}le.docxReviewPart="Author";function ce({className:e,asChild:r,hidden:a,children:i}){let s=react.useContext(I);if(a||!s)return null;let t=s.date;if(!t)return null;let n=new Date(t);if(Number.isNaN(n.getTime()))return null;let o={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:t};return r?jsxRuntime.jsx(react$1.Slot,{...o,children:i}):jsxRuntime.jsx("time",{...o,children:i??Lt.format(n)})}ce.docxReviewPart="Time";var Lt=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function de({className:e,asChild:r,hidden:a,children:i}){let s=react.useContext(I),t=Y();if(a||!s)return null;let n=s.text,o=s.kind!=="revision"?null:t(Se(s.revisionKind,s.item.markDirection)),c=s.kind==="revision"&&s.revisionKind==="replace",d={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return r?jsxRuntime.jsx(react$1.Slot,{...d,children:i}):jsxRuntime.jsx("div",{...d,children:i??(c?jsxRuntime.jsxs("span",{className:"docx-review__text",children:[t("review.replaced")," ",jsxRuntime.jsxs("span",{className:"docx-review__removed",children:['"',s.replacedText,'"']})," ",t("review.replacedWith")," ",jsxRuntime.jsxs("span",{className:"docx-review__added",children:['"',n,'"']})]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[o?jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":s.kind==="revision"?s.revisionKind:"revision",children:o}):null,n?jsxRuntime.jsx("span",{className:"docx-review__text",children:n}):null]}))})}de.docxReviewPart="Summary";function Ce({className:e,asChild:r,hidden:a,children:i,icon:s}){let{readOnly:t,review:n}=K(),o=react.useContext(I),c=Y();if(a||!o||o.kind!=="revision"||o.readOnly)return null;let d=c("review.accept"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:f=>{f.stopPropagation(),!t&&n.accept(o);}};return r?jsxRuntime.jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:i}):jsxRuntime.jsx("button",{...m,children:s??i??F(pe)})}Ce.docxReviewPart="Accept";function Ee({className:e,asChild:r,hidden:a,children:i,icon:s}){let{readOnly:t,review:n}=K(),o=react.useContext(I),c=Y();if(a||!o||o.kind!=="revision"||o.readOnly)return null;let d=c("review.reject"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:f=>{f.stopPropagation(),!t&&n.reject(o);}};return r?jsxRuntime.jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:i}):jsxRuntime.jsx("button",{...m,children:s??i??F(Rt)})}Ee.docxReviewPart="Reject";function _e({className:e,asChild:r,hidden:a,children:i,icon:s}){let{readOnly:t,review:n}=K(),o=react.useContext(I),{t:c}=react$1.useTranslation();if(a||!o||o.kind==="custom"||o.kind==="revision"&&o.readOnly)return null;let d=o.kind==="comment"?c("review.deleteComment"):c("review.discardChange"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:f=>{f.stopPropagation(),!t&&n.remove(o);}};return r?jsxRuntime.jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:i}):jsxRuntime.jsx("button",{...m,children:s??i??F(yt)})}_e.docxReviewPart="Delete";function Be({className:e,hidden:r}){let{byId:a}=K(),i=react.useContext(I);if(r||!i||i.kind==="custom")return null;let s=i.replyIds.map(t=>a.get(t)).filter(t=>t!==void 0);return s.length===0?null:jsxRuntime.jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:s.map(t=>jsxRuntime.jsx(I.Provider,{value:t,children:jsxRuntime.jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(ae,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(le,{}),jsxRuntime.jsx(ce,{})]}),jsxRuntime.jsx("div",{className:"docx-review__actions",children:jsxRuntime.jsx(_e,{})})]}),jsxRuntime.jsx(de,{})]})},t.key))})}Be.docxReviewPart="Replies";var Yn=Object.assign(Hn,{List:he,Empty:Ye,Card:Ze,Avatar:ae,Author:le,Time:ce,Summary:de,Accept:Ce,Reject:Ee,Resolve:Tt,Reopen:Dt,Delete:_e,Replies:Be,Reply:Ot,Markers:qe,AddComment:$e,Draft:St,Balloon:Ve});function ue(e){let r=react$1.useDocxEditor();return react.useMemo(()=>e||(r?.getCustomNodeDefinitions()??[]).filter(chunkQIMNGUJX_cjs.j),[e,r])}var jn=".docx-content-control-boundary";function te(e,r){let{node:a,definition:i,controlId:s}=e,t=s?r?.getReviewItems().find(c=>c.kind==="custom"&&c.item.id===s):void 0;if(t&&t.kind==="custom"){let c=t.item;return {...a,attrs:c.attrs,text:c.text,...c.data===void 0?{}:{data:c.data},...s?{nodeId:s}:{}}}let n=s?Un(r,s,i):void 0,o=i.fromDocx?i.fromDocx({attrs:a.attrs,text:"",...n===void 0?{}:{data:n}}):a.attrs;return o===null?null:{...a,attrs:o,...n===void 0?{}:{data:n},...s?{nodeId:s}:{}}}function Un(e,r,a){let i=e?.surface;if(!i)return;let s=i.session.part(),t=store.customNodePayloadsByControl(i.session.currentPackage(),s.name).get(r);if(!t)return;let n=chunkQIMNGUJX_cjs.e(a.schema,t.data);return n.ok?n.value:void 0}function ne(e,r){let a=e?.closest?.(jn),i=a?.closest(".docx-content-control-chrome"),s=i?.getAttribute("data-tag"),t=s?chunkQIMNGUJX_cjs.c(s):null;if(!a||!t||!s)return null;let n=r.find(o=>o.tagPrefix===t.prefix&&o.name===t.name);return n?{node:{name:t.name,attrs:t.attrs,tag:s,rect:a.getBoundingClientRect()},definition:n,controlId:i?.getAttribute("data-docx-content-control")??null}:null}var Fe=".docx-content-control-boundary",Qn=e=>{if(!chunkQIMNGUJX_cjs.k.test(e.tagPrefix)||!chunkQIMNGUJX_cjs.k.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 Gn(e){let{onNodeClick:r,onNodeHover:a}=e,i=react$1.useDocxEditor(),s=ue(e.nodes);return react.useEffect(()=>{let t=document.createElement("style"),n=[];for(let o of s){let c=Qn(o);if(c.length===0)continue;let d=o.chrome?.color!==void 0&&CSS.supports("color",o.chrome.color)?o.chrome.color:"#2563eb";n.push(`${c.map(l=>`${l} ${Fe}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${d} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return t.textContent=n.join(`
2
+ `),document.head.append(t),()=>t.remove()},[s]),react.useEffect(()=>{let t=null,n=null,o=m=>ne(document.elementFromPoint(m.clientX,m.clientY),s),c=m=>{let f=m.button===0?o(m):null;t=f?.controlId??null,n=f?.node.tag??null;},d=m=>{let f=t,w=n;if(t=null,n=null,w===null)return;let R=o(m);if(!R||R.node.tag!==w||f!==null&&R.controlId!==f)return;let b=te(R,i);b&&(R.definition.onClick?.(b),r?.(b));},l=m=>{let f=ne(m.target,s);if(!f||m.relatedTarget?.closest?.(Fe)===m.target.closest(Fe))return;let R=te(f,i);R&&(f.definition.onHover?.(R),a?.(R));};return document.addEventListener("pointerdown",c,true),document.addEventListener("pointerup",d,true),document.addEventListener("mouseover",l),()=>{document.removeEventListener("pointerdown",c,true),document.removeEventListener("pointerup",d,true),document.removeEventListener("mouseover",l);}},[s,i,r,a]),null}function $t(e){let{onEditNode:r,onRemoveRefused:a,remove:i=true}=e,s=ue(e.nodes),t=react$1.useContextMenuTarget(),n=react$1.useDocxEditor(),{t:o}=react$1.useTranslation(),c=react.useMemo(()=>t?ne(t,s):null,[t,s]),d=react.useMemo(()=>c?te(c,n):null,[c,n]),l=react.useMemo(()=>!c?.definition.reviewCard||!d?null:c.definition.reviewCard({attrs:d.attrs,text:d.text??"",...d.data===void 0?{}:{data:d.data}}),[c,d]);if(!c||!d)return null;let{definition:m}=c,f=m.label??m.name,w=m.onEdit!==void 0||r!==void 0,R=i&&d.nodeId!==void 0&&n!==null;return !l&&!w&&!R?null:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[l?jsxRuntime.jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-title",children:l.title}),l.detail?jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-detail",children:l.detail}):null]}):null,w?jsxRuntime.jsx(react$1.ContextMenuItem,{label:o("contextMenu.editCustomNode",{label:f}),className:"docx-contextmenu__custom-edit",onSelect:()=>{m.onEdit?.(d),r?.(d,m);}}):null,R?jsxRuntime.jsx(react$1.ContextMenuItem,{label:o("contextMenu.removeCustomNode",{label:f}),className:"docx-contextmenu__custom-remove",onSelect:()=>{let b=chunkQIMNGUJX_cjs.q(n,d.nodeId);b.ok||a?.(d,b.reason);}}):null,jsxRuntime.jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}$t.docxRowPlacement="start";Object.defineProperty(exports,"reviewModule",{enumerable:true,get:function(){return chunkQIMNGUJX_cjs.o}});exports.CustomNodeChrome=Gn;exports.CustomNodeContextMenu=$t;exports.DocxEditorReview=Yn;exports.activatedCustomNodeOf=te;exports.resolveCustomNodeActivation=ne;exports.useCustomNodeDefinitions=ue;exports.useReview=fe;exports.useReviewItem=kn;exports.useReviewOf=mt;exports.useStackedReviewPositions=an;
@@ -302,7 +302,8 @@ interface ReviewMarkersProps {
302
302
  icon?: ReactNode | ((item: ReviewItemView) => ReactNode);
303
303
  }
304
304
  /**
305
- * The collapsed rail: one marker per item, at its anchor.
305
+ * The collapsed rail: one marker per item, at its anchor — or just below the previous
306
+ * marker, when the anchors are closer than a marker is tall.
306
307
  *
307
308
  * @public
308
309
  */
@@ -302,7 +302,8 @@ interface ReviewMarkersProps {
302
302
  icon?: ReactNode | ((item: ReviewItemView) => ReactNode);
303
303
  }
304
304
  /**
305
- * The collapsed rail: one marker per item, at its anchor.
305
+ * The collapsed rail: one marker per item, at its anchor — or just below the previous
306
+ * marker, when the anchors are closer than a marker is tall.
306
307
  *
307
308
  * @public
308
309
  */
@@ -1,2 +1,2 @@
1
- import {j as j$1,e,c,q as q$1,k}from'../chunk-PWNAGXXX.js';export{o as reviewModule}from'../chunk-PWNAGXXX.js';import {createContext,useMemo,useEffect,useCallback,useRef,useContext,useState,isValidElement,cloneElement,useId,Children,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';var Jt=new Set(["List","Markers","AddComment","Draft","Balloon"]),en=new Set(["Card","Empty"]);function Te(e,i){let a=i==="root"?Jt:en,r={},s=[],t=o=>{if(Array.isArray(o)){for(let c of o)t(c);return}if(!isValidElement(o)){o!=null&&o!==false&&s.push(o);return}if(o.type===Fragment$1){t(o.props.children);return}let n=o.type.docxReviewPart;n&&a.has(n)?r[n]=o:s.push(o);};return t(e),{parts:r,rest:s}}function dt(e,i){if(!i)return e;let a=e.props.className;return cloneElement(e,{className:`${i}${a?` ${a}`:""}`})}function ut(e){let i=useRef(new WeakMap),a=useRef(new Map),r=useRef(null),s=useCallback((t,o)=>{let n=a.current.get(o);if(!t){n&&(r.current?.unobserve(n),i.current.delete(n),a.current.delete(o));return}typeof ResizeObserver>"u"||(e(o,t.offsetHeight),r.current??(r.current=new ResizeObserver(c=>{for(let d of c){let l=i.current.get(d.target);l&&e(l,d.target.offsetHeight);}})),!(n===t&&i.current.get(t)===o)&&(n&&(r.current.unobserve(n),i.current.delete(n)),i.current.set(t,o),a.current.set(o,t),r.current.observe(t)));},[e]);return useEffect(()=>()=>{r.current?.disconnect(),a.current.clear();},[]),s}function sn(e){let i=false;return ()=>{if(i)return;if(!globalThis.navigator?.scheduling?.isInputPending?.({includeContinuous:true})){e();return}i=true,setTimeout(()=>{i=false,e();},0);}}function fe(e){let i=useDocxEditor();return mt(i,e)}function mt(e,i){let a=useCallback(v=>{if(!e)return ()=>{};let x=false,N=sn(()=>{x||v();}),C=e.on("change",N),O=e.on("selectionChange",N),U=e.on("error",N);return ()=>{x=true,C(),O(),U();}},[e]),r=useSyncExternalStore(a,()=>e?`${e.getReviewRevision()}:${e.getEditingMode()}`:"none",()=>"none"),s=useMemo(()=>e?e.getReviewItems(i).filter(v=>v.item.kind!=="custom"||v.item.carded):[],[e,r,i]),t=useMemo(()=>s.find(v=>v.isActive)?.key??null,[s]),o=useCallback((v,x)=>e?e.setActiveReviewItem(v,x).ok:false,[e]),n=useCallback(v=>!e||v.kind!=="revision"||v.readOnly?false:e.acceptReviewItem(v.key).ok,[e]),c=useCallback(v=>!e||v.kind!=="revision"||v.readOnly?false:e.rejectReviewItem(v.key).ok,[e]),d=useCallback(v=>!e||v.kind!=="comment"?false:e.setCommentResolved(v.key,true).ok,[e]),l=useCallback(v=>!e||v.kind!=="comment"?false:e.setCommentResolved(v.key,false).ok,[e]),m=e?.getEditingMode()==="viewing"?"the document is open for viewing":null,p=useCallback(v=>!e||v.kind==="custom"||v.kind==="revision"&&v.readOnly?false:e.deleteReviewItem(v.key).ok,[e]),w=useCallback((v,x,N)=>x.trim().length===0||!e?false:e.replyToReviewItem(v.key,x,N).ok,[e]),y=useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,r]),b=useCallback((v,x)=>v.trim().length===0||!e?false:e.addComment(v,x).ok,[e]),g=useMemo(()=>e?e.isReviewPaneOpen():true,[e,r]),k=useCallback(v=>{!e||e.isReviewPaneOpen()===v||e.exec({type:"toggleReviewPane"});},[e]);return useMemo(()=>({items:s,activeKey:t,setActive:o,accept:n,reject:c,resolve:d,reopen:l,commentResolutionDisabledReason:m,remove:p,reply:w,selectionAnchorY:y,comment:b,paneOpen:g,setPaneOpen:k,ready:e!==null&&!e.snapshot().isLoading&&e.snapshot().parseError===null}),[s,t,o,n,c,d,l,m,p,w,y,b,g,k,e])}function an(e,i,a={}){let r=a.gap??8,s=a.scale??1,t=a.defaultHeight??0;return useMemo(()=>{let o=new Map,n=Number.NEGATIVE_INFINITY;for(let c of e){let d=c.anchorY===null?Number.isFinite(n)?n:0:Math.max(c.anchorY,n);o.set(c.key,d),n=d+((i.get(c.key)??t)+r)/s;}return o},[e,i,r,s,t])}var F=e=>jsx("svg",{viewBox:"0 -960 960 960",width:16,height:16,"aria-hidden":"true",focusable:"false",children:jsx("path",{d:e,fill:"currentColor"})}),pt="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",vt="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",pe="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",wt="M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z",Rt="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",yt="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",ln="M200-200h57l391-391-57-57-391 391v57Zm-80 80v-170l528-527q12-11 26.5-17t30.5-6q16 0 31 6t26 18l55 56q12 11 17.5 26t5.5 30q0 16-5.5 30.5T817-647L290-120H120Zm640-584-56-56 56 56Zm-141 85-28-29 57 57-29-28Z",cn="M486-160q-76 0-135-45t-85-123l88-38q14 48 48.5 78t85.5 30q42 0 76-20t34-64q0-18-7-33t-19-27h112q5 14 7.5 28.5T694-341q0 86-61.5 133.5T486-160ZM80-520v-80h800v80H80Zm402-360q66 0 116 30t74 84l-88 38q-11-28-38.5-47T480-794q-42 0-72 19t-30 51q0 15 6 27t18 22H272q-6-13-9-27t-3-30q0-70 55-114t167-44Z",dn="M360-160q-83 0-141.5-58.5T160-360v-360q0-83 58.5-141.5T360-920q83 0 141.5 58.5T560-720v360q0 83-58.5 141.5T360-160Zm0-80q50 0 85-35t35-85v-360q0-50-35-85t-85-35q-50 0-85 35t-35 85v360q0 50 35 85t85 35Zm300 80q29 0 49.5-20.5T730-230q0-22-12.5-40T684-296l-64-32v-232l100 100q23 23 51.5 35.5T832-412v-80q-17 0-32-6.5T773-517L633-657q-12-12-27.5-17.5T573-680h-13v520h100ZM360-720Z",un="M580-360q-25 0-42.5-17.5T520-420v-160q0-25 17.5-42.5T580-640h160q25 0 42.5 17.5T800-580v260q0 66-47 113t-113 47v-80q33 0 56.5-23.5T720-320v-40H580Zm-360 0q-25 0-42.5-17.5T160-420v-160q0-25 17.5-42.5T220-640h160q25 0 42.5 17.5T440-580v260q0 66-47 113t-113 47v-80q33 0 56.5-23.5T360-320v-40H220Z";function bt(e){if(e.kind==="comment")return vt;if(e.kind==="custom")return e.item.icon??un;switch(e.revisionKind){case "insert":case "moveTo":return ln;case "delete":case "moveFrom":return cn;case "format":return dn;default:return vt}}function fn(e,i){return typeof i!="function"?e:typeof e!="function"?i:a=>{e(a),a.defaultPrevented||i(a);}}function pn(e,i){let a={...e,...i};for(let r of Object.keys(e))/^on[A-Z]/.test(r)?a[r]=fn(i[r],e[r]):r==="className"?a[r]=[e[r],i[r]].filter(Boolean).join(" "):r==="style"&&(a[r]={...e[r],...i[r]});return a}function ht(e){return e==="Enter"||e===" "}function wn(e){return ht(e.key)?(e.preventDefault(),e.stopPropagation(),true):false}function xt(e){return e.type==="button"}function Rn(e,i){return e.type==="a"||i.href!=null}function yn(e,i,a,r){let s=t=>{typeof a=="function"&&a(t);};return {onClick:t=>{typeof e=="function"&&e(t),t.defaultPrevented||s(t),r&&t.preventDefault();},onKeyDown:t=>{if(typeof i=="function"&&i(t),!ht(t.key))return;t.defaultPrevented||s(t),r&&t.preventDefault();}}}function W({engineDisabled:e,disabledReason:i,slotProps:a,children:r}){let s=Children.only(r);if(!isValidElement(s))return null;let t=s.props,o=pn(a,t);if(!e){if(!xt(s)){let n=yn(t.onClick,t.onKeyDown,a.onClick,Rn(s,t));o.onClick=n.onClick,o.onKeyDown=n.onKeyDown;}return cloneElement(s,o)}if(xt(s))o.disabled=true,delete o["aria-disabled"];else {delete o.disabled,o["aria-disabled"]=true,o["data-disabled"]="",o.tabIndex=-1,o.href=void 0,o.role===void 0&&(o.role="button");let n=o.onKeyDown;o.onKeyDown=c=>{wn(c)||typeof n=="function"&&n(c);};}return i&&(o.title=i),o.onClick=n=>{n.preventDefault(),n.stopPropagation();},cloneElement(s,o)}function Nt(e){function i({className:r,asChild:s,hidden:t,children:o,icon:n}){let c=e.useReview(),d=e.useItem(),l=e.useLabel();if(t||!d||d.kind!=="comment"||d.resolved)return null;let m=l("comments.resolve"),p=c.commentResolutionDisabledReason!==null,w=p?l("editingMode.viewingHint"):null,y={type:"button",className:`docx-review__action${r?` ${r}`:""}`,"data-testid":"review-resolve","aria-label":m,title:w??m,disabled:p,onMouseDown:e.guardMousedown,onClick:b=>{b.stopPropagation(),!p&&c.resolve(d);}};return s?jsx(W,{engineDisabled:p,disabledReason:w,slotProps:y,children:o}):jsx("button",{...y,children:n??o??F(pe)})}i.docxReviewPart="Resolve";function a({className:r,asChild:s,hidden:t,children:o,icon:n}){let c=e.useReview(),d=e.useItem(),l=e.useLabel();if(t||!d||d.kind!=="comment"||!d.resolved)return null;let m=l("comments.reopen"),p=c.commentResolutionDisabledReason!==null,w=p?l("editingMode.viewingHint"):null,y={type:"button",className:`docx-review__action${r?` ${r}`:""}`,"data-testid":"review-reopen","aria-label":m,title:w??m,disabled:p,onMouseDown:e.guardMousedown,onClick:b=>{b.stopPropagation(),!p&&c.reopen(d);}};return s?jsx(W,{engineDisabled:p,disabledReason:w,slotProps:y,children:o}):jsx("button",{...y,children:n??o??F(wt)})}return a.docxReviewPart="Reopen",{ReviewResolve:i,ReviewReopen:a}}function _t(e){function i({top:r=0,className:s,hidden:t}){let{review:o,endDraft:n,measure:c,readOnly:d}=e.useRail(),l=e.useLabel(),[m,p]=useState(""),[w,y]=useState(false),b=useRef(null),g=useId();useEffect(()=>{d||b.current?.focus({preventScroll:true});},[]);let k=useCallback(()=>{if(d||m.trim().length===0)return;let v=o.comment(m.trim());y(!v),v&&(p(""),n());},[d,m,o,n]);return t?null:jsx("div",{className:`docx-review__slot${s?` ${s}`:""}`,style:{position:"absolute",top:r},ref:v=>{c(v,e.composeKey);},children:jsx("div",{className:"docx-review__card","data-testid":"review-draft","data-draft":"",children:jsxs("form",{className:"docx-review__reply-box",onSubmit:v=>{v.preventDefault(),k();},children:[jsx("label",{className:"docx-editor-sr-only",htmlFor:g,children:l("comments.addComment")}),jsx("input",{id:g,ref:b,"data-testid":"review-draft-input",className:"docx-review__input",value:m,placeholder:l("comments.addComment"),readOnly:d,...w?{"aria-invalid":true}:{},onChange:v=>{d||(y(false),p(v.target.value));},onKeyDown:v=>{if(v.key==="Escape"){v.preventDefault(),n();return}d||v.key!=="Enter"||(v.preventDefault(),k());}}),jsxs("div",{className:"docx-review__reply-actions",children:[jsx("button",{type:"button","data-testid":"review-draft-cancel",className:"docx-review__text-button",onMouseDown:e.guardMousedown,onClick:n,children:l("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:d||m.trim().length===0,title:d?l("editingMode.viewingHint"):void 0,children:l("common.comment")})]}),w?jsx("span",{className:"docx-review__refused",role:"alert",children:l("review.commentRefused")}):null]})})})}i.docxReviewPart="Draft";function a({className:r,hidden:s,children:t}){let{review:o,readOnly:n}=e.useRail(),c=e.useItem(),d=e.useLabel(),[l,m]=useState(""),[p,w]=useState(false),y=useId(),b=useCallback(()=>{if(!c||n||l.trim().length===0)return;let g=o.reply(c,l.trim());w(!g),g&&m("");},[c,n,l,o]);return s||!c||!c.isActive?null:t?jsx(Fragment,{children:t}):jsxs("form",{className:`docx-review__reply-box${r?` ${r}`:""}`,onSubmit:g=>{g.preventDefault(),b();},children:[jsx("label",{className:"docx-editor-sr-only",htmlFor:y,children:d("comments.replyPlaceholder")}),jsx("input",{id:y,"data-testid":"review-reply-input",className:"docx-review__input",value:l,placeholder:d("comments.replyPlaceholder"),readOnly:n,...p?{"aria-invalid":true,"data-refused":""}:{},onChange:g=>{n||(w(false),m(g.target.value));},onClick:g=>g.stopPropagation(),onKeyDown:g=>{n||g.key!=="Enter"||(g.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:e.guardMousedown,onClick:g=>{g.stopPropagation(),m(""),w(false),o.setActive(null);},children:d("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:n||l.trim().length===0,title:n?d("editingMode.viewingHint"):void 0,children:d("review.reply")})]}),p?jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:d("review.replyRefused")}):null]})}return a.docxReviewPart="Reply",{ReviewDraft:i,ReviewReply:a}}function Se(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"}}var _n=e=>e.isLoading||e.parseError!==null||e.pageSetup==null,Pn=e=>e.editingMode==="viewing",Le=createContext(null),I=createContext(null);function kn(){return useContext(I)}var In={scale:96/72,top:0,left:null},An=16,xe="\0compose",It=600,Mt=8,Mn=72,Tn=64,Dn=480,Sn=Object.freeze({placement:false});function He(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 qe(e){return new Set(e.map(i=>i.id))}function j(e){let i=e.target?.tagName;i==="INPUT"||i==="SELECT"||i==="TEXTAREA"||e.preventDefault();}function q(){let e=useContext(Le);return e||On}function Y(){let{t:e}=useContext(Le)??{},{t:i}=useTranslation();return useCallback(a=>e?.(a)??i(a),[e,i])}var{ReviewResolve:Tt,ReviewReopen:Dt}=Nt({useReview:()=>q().review,useItem:()=>useContext(I),useLabel:Y,guardMousedown:j}),{ReviewDraft:St,ReviewReply:Ot}=_t({useRail:q,useItem:()=>useContext(I),useLabel:Y,guardMousedown:j,composeKey:xe}),On={t:void 0,cardClassName:void 0,readOnly:false,review:{items:[],activeKey:null,setActive:()=>false,accept:()=>false,reject:()=>false,resolve:()=>false,reopen:()=>false,commentResolutionDisabledReason:null,remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}};function Ln({className:e,furniture:i,asChild:a,hidden:r,children:s,t,card:o,preset:n=true,stack:c=true,gap:d=8,filter:l,structural:m=false,formatting:p=false}){let w=useDocxEditor(),y=useEditorState(_n),b=useEditorState(Pn),g=useMemo(()=>{let R=[];return m||R.push("structural"),p||R.push("format"),R.length>0?R:void 0},[m,p]),k=useMemo(()=>g?{excludeRevisionKinds:g}:void 0,[g]);useEffect(()=>(w?.setReviewActivationExclusions(g??null),()=>w?.setReviewActivationExclusions(null)),[w,g]);let v=fe(Sn),x=fe(k),N=x.setPaneOpen,{t:C}=useTranslation(),O=useCallback(R=>t?.(R)??C(R),[t,C]),U=useRef(null),oe=useContext(ReviewRailContext);useEffect(()=>oe?.register(),[oe]);let Z=x.paneOpen,L=useMemo(()=>l?x.items.filter(R=>l(R)):x.items,[x.items,l]),Ue=useMemo(()=>{let R=new Map;for(let f of L)f.author&&!R.has(f.author)&&R.set(f.author,R.size);return R},[L]),ze=useMemo(()=>{let R=new Map;for(let f of L)R.set(f.id,f);return R},[L]),[Qe,Vt]=useState(()=>new Map),Yt=useCallback((R,f)=>{f<=0||Vt(h=>{if(h.get(R)===f)return h;let P=new Map(h);return P.set(R,f),P});},[]),Ge=ut(Yt),[D,Zt]=useState(In);useEffect(()=>{let R=U.current;if(!w||!R)return;let f=R.offsetParent,h=f?.querySelector(".docx-paginated-surface")??null,P=()=>{Zt(M=>{let K=h&&f?h.getBoundingClientRect():null,H=K&&f?f.getBoundingClientRect():null,$={scale:w.getRenderScale(),top:K&&H&&f?K.top-H.top-f.clientTop+f.scrollTop:0,left:K&&H&&f?K.right-H.left-f.clientLeft+f.scrollLeft+An:null};return M.scale===$.scale&&M.top===$.top&&M.left===$.left?M:$});};P();let E=new ResizeObserver(P);return f&&E.observe(f),h&&E.observe(h),()=>E.disconnect()},[w,L,y,r]),useEffect(()=>{let R=U.current;if(!w||!R)return;let f=h=>{let P=h.target;if(!(P instanceof Node)||R.contains(P))return;let E=R.offsetParent;!E||!E.contains(P)||E.querySelector(".docx-paginated-surface")?.contains(P)||w.setActiveReviewItem(null);};return document.addEventListener("mousedown",f,true),()=>document.removeEventListener("mousedown",f,true)},[w,y,r]);let[Pe,Bt]=useState(null);useEffect(()=>{let R=U.current,f=R?.offsetParent;if(!f)return;let h=0,P=()=>{h=0,Bt(H=>{let $=f.scrollTop-It,ve=f.scrollTop+f.clientHeight+It;return H&&H.top===$&&H.bottom===ve?H:{top:$,bottom:ve}});},E=0,M=()=>{h===0&&(h=requestAnimationFrame(P)),R?.setAttribute("data-scrolling",""),window.clearTimeout(E),E=window.setTimeout(()=>R?.removeAttribute("data-scrolling"),150);};P(),f.addEventListener("scroll",M,{passive:true});let K=new ResizeObserver(M);return K.observe(f),()=>{h!==0&&cancelAnimationFrame(h),window.clearTimeout(E),f.removeEventListener("scroll",M),K.disconnect();}},[w,y,r]);let[B,ke]=useState(null),We=useCallback(()=>{!w||b||(w.surface?.retainSelection(),N(true),ke(w.getSelectionPlacement()?.anchorY??null));},[w,b,N]),Xe=useCallback(()=>{w?.surface?.releaseSelection(),ke(null),w?.focus();},[w]);useEffect(()=>{Z||B===null||(w?.surface?.releaseSelection(),ke(null));},[Z,B,w]);let Je=B??x.selectionAnchorY,z=useMemo(()=>{let R=qe(L);return L.filter(f=>!He(f,R))},[L]),et=useMemo(()=>{if(B===null)return z;let R=z.findIndex(h=>h.anchorY!==null&&h.anchorY>B),f={key:xe,anchorY:B};return R===-1?[...z,f]:[...z.slice(0,R),f,...z.slice(R)]},[z,B]),tt=useMemo(()=>{let R=new Map(Qe);for(let f of z){if(R.has(f.key))continue;let h=f.text.length+(f.kind==="revision"?f.replacedText?.length??0:0),P=Math.min(6,Math.max(1,Math.ceil(h/36)));R.set(f.key,64+P*20);}return R},[Qe,z]),{stacked:Ie,collapsedKeys:nt}=useMemo(()=>{let R=D.scale,f=new Map,h=new Set,P=Number.NEGATIVE_INFINITY;for(let E of et){let M=E.anchorY===null?Number.isFinite(P)?P:0:Math.max(E.anchorY,P);f.set(E.key,M);let K=E.anchorY===null?0:(M-E.anchorY)*R,H="isActive"in E&&E.isActive,$=K>Dn&&!H&&E.key!==xe;$&&h.add(E.key);let ve=$?Tn:tt.get(E.key)??Mn;P=M+(ve+d)/R;}return {stacked:f,collapsedKeys:h}},[et,tt,d,D.scale]),Ae=Je===null?null:D.top+(Ie.get(xe)??Je)*D.scale,ot=o?.className,Ft=useMemo(()=>({t,cardClassName:ot,readOnly:b,review:{...x,items:L},allItems:v.items,authorSlots:Ue,byId:ze,measure:Ge,beginDraft:We,endDraft:Xe}),[t,ot,b,x,v.items,L,Ue,ze,Ge,We,Xe]);if(r||y)return null;let rt={ref:U,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":L.length,"data-open":Z?"":void 0,role:"complementary","aria-label":O("review.ariaLabel"),onMouseDown:j,style:D.left===null?void 0:{left:D.left,right:"auto"}},J=typeof s=="function"?{parts:{},rest:s}:Te(s,"root"),G=J.parts,re=(R,f)=>{if(!(R in G))return f;let h=G[R];return !isValidElement(h)||!isValidElement(f)?h:cloneElement(h,{...f.props,...h.props})},it=jsxs(Fragment,{children:[n||"AddComment"in G?re("AddComment",jsx($e,{top:Ae,drafting:B!==null})):null,!Z||B===null||Ae===null||!n&&!("Draft"in G)?null:re("Draft",jsx(St,{top:Ae})),n||"Balloon"in G?re("Balloon",jsx(Ve,{})):null]}),jt=jsx(he,{stack:c,positions:Ie,collapsed:nt,scale:D.scale,offset:D.top,window:Pe,children:J.rest}),Ut=jsx(Ke,{scale:D.scale,offset:D.top,window:Pe}),zt=Z?n||"List"in G?re("List",jt):typeof J.rest=="function"?null:J.rest:n||"Markers"in G?re("Markers",Ut):typeof J.rest=="function"?null:J.rest;return jsx(Le.Provider,{value:Ft,children:a&&isValidElement(s)?jsx(Slot,{...rt,children:cloneElement(s,void 0,s.props.children,n?jsx(he,{stack:c,positions:Ie,collapsed:nt,scale:D.scale,offset:D.top,window:Pe}):null,it)}):jsxs("aside",{...rt,children:[Z&&i!==void 0?jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:i}):null,zt,it]})})}function he({stack:e=true,positions:i,collapsed:a,scale:r=1,offset:s=0,window:t=null,children:o,className:n,hidden:c}){let{review:d,measure:l,cardClassName:m}=q();if(c)return null;let p=typeof o=="function"?null:Te(o,"list"),w=qe(d.items),y=d.items.filter(b=>!He(b,w));return y.length===0?typeof o=="function"?null:p?.parts.Empty??jsx(Ye,{}):jsx("div",{className:`docx-review__list${n?` ${n}`:""}`,children:y.map(b=>{let g=e?i?.get(b.key)??b.anchorY:b.anchorY,k=g==null?null:s+g*r;if(k!==null&&t&&(k<t.top||k>t.bottom))return null;let v=k===null?{}:{position:"absolute",top:k};return jsx(I.Provider,{value:b,children:jsx("div",{className:"docx-review__slot",style:v,...a?.has(b.key)?{"data-collapsed":""}:{},ref:x=>{l(x,b.key);},children:typeof o=="function"?o(b):p?.parts.Card&&isValidElement(p.parts.Card)?dt(p.parts.Card,m):jsx(Ze,{...m?{className:m}:{},children:p?.rest})})},b.key)})})}he.docxReviewPart="List";function Ke({scale:e=1,offset:i=0,window:a=null,className:r,hidden:s,icon:t}){let{review:o}=q(),n=Y();if(s)return null;let c=qe(o.items),d=o.items.filter(l=>!He(l,c));return jsx("div",{className:`docx-review__markers${r?` ${r}`:""}`,children:d.map(l=>{if(l.anchorY===null)return null;let m=i+l.anchorY*e;return a&&(m<a.top||m>a.bottom)?null:jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":l.kind==="revision"?l.revisionKind:l.kind,style:{position:"absolute",top:m},title:l.author?`${l.author}: ${l.text}`:l.text,"aria-label":`${n("review.showPane")}: ${l.author?`${l.author}. `:""}${l.text}`,onMouseDown:j,onClick:()=>{o.setPaneOpen(true),o.setActive(l.key);},children:(typeof t=="function"?t(l):t)??F(bt(l))},l.key)})})}Ke.docxReviewPart="Markers";function $e({top:e=null,drafting:i=false,className:a,hidden:r,children:s}){let{beginDraft:t,readOnly:o}=q(),n=Y();if(r||i||e===null||o)return null;let c={type:"button",className:`docx-review__add${a?` ${a}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":n("common.comment"),title:n("common.comment"),onMouseDown:j,onClick:t};return s?jsx(Slot,{...c,children:s}):jsx("button",{...c,children:F(pt)})}$e.docxReviewPart="AddComment";function Ve({className:e,hidden:i}){let{review:a,allItems:r,authorSlots:s}=q(),t=Y(),o=useRef(null),[n,c]=useState(null),d=useRef(false);d.current=n!==null,useEffect(()=>{let y=o.current,b=y?.closest(".docx-review"),g=b?.closest(".docx-editor__scroll-container")??b?.offsetParent;if(!y||!b||!g)return;let k=(x,N)=>{let C=b.getBoundingClientRect(),O=x.getBoundingClientRect(),U=x.ownerDocument.defaultView?.innerHeight??1/0,oe=Number(x.dataset.start),Z=Number(x.dataset.end);c({revisionId:x.dataset.revisionId,author:x.dataset.revisionAuthor??"",...x.dataset.revisionDate!==void 0?{date:x.dataset.revisionDate}:{},...x.dataset.revisionKind!==void 0?{kind:x.dataset.revisionKind}:{},structuralSite:N,...x.dataset.paragraphId!==void 0?{paragraphId:x.dataset.paragraphId}:{},...Number.isFinite(oe)?{start:oe}:{},...Number.isFinite(Z)?{end:Z}:{},left:O.left-C.left,top:O.top-C.top,bottom:O.bottom-C.top,above:O.bottom+220>U});},v=x=>{let N=x.target;if(!(N instanceof Element)||y.contains(N))return;let C=N.closest("[data-revision-id]");if(C instanceof HTMLElement&&g.contains(C)){let O=C.classList.contains("docx-table-row--revision");if(C.dataset.revisionKind==="format"||O){k(C,O);return}}d.current&&c(null);};return g.addEventListener("pointerdown",v,true),g.addEventListener("mousedown",v,true),()=>{g.removeEventListener("pointerdown",v,true),g.removeEventListener("mousedown",v,true);}},[]);let l=useMemo(()=>{if(!n)return null;let y=null,b=false,g=null,k=false,v=null,x=false;for(let N of r)if(!(N.kind!=="revision"||N.item.kind!=="revision")){for(let C of N.item.addresses)if(C.id===n.revisionId){if(C.author===n.author){if(C.date===n.date)return N;y===null?y=N:y!==N&&(b=true);}g===null?g=N:g!==N&&(k=true);}if(n.paragraphId!==void 0&&n.start!==void 0&&n.end!==void 0&&(N.revisionKind==="format"||N.revisionKind==="structural")){for(let C of N.item.ranges)if(C.start.paragraphId===n.paragraphId&&C.start.offset<n.end&&C.end.offset>n.start){v===null?v=N:v!==N&&(x=true);break}}}return y!==null&&!b?y:g!==null&&!k?g:v!==null&&!x?v:null},[r,n]),m=l&&(l.revisionKind==="format"||l.revisionKind==="structural")?l:null,p=useRef(false);if(useEffect(()=>{if(m){p.current=true;return}p.current&&(p.current=false,c(null));},[m]),i)return null;let w=n?.kind==="format"?"format":"structural";return jsx("div",{ref:o,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:j,children:m?jsx(I.Provider,{value:m,children:jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":m.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(s.get(m.author)??0)%Mt})`},onClick:()=>a.setActive(m.key),children:[jsxs("div",{className:"docx-review__head",children:[jsx(ae,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(le,{}),jsx(ce,{})]}),m.kind==="revision"&&!m.readOnly?jsxs("div",{className:"docx-review__actions",children:[jsx(Ce,{}),jsx(Ee,{})]}):null]}),jsx(de,{})]})}):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:Hn(n.author)}),jsxs("div",{className:"docx-review__meta",children:[jsx("span",{className:"docx-review__author",children:n.author||t("comments.unknown")}),n.date?jsx(qn,{raw:n.date}):null]})]}),jsx("div",{className:"docx-review__summary",children:jsx("span",{className:"docx-review__label","data-kind":w,children:t(Se(w))})})]})})})}Ve.docxReviewPart="Balloon";function Hn(e){let i=e.trim().split(/\s+/).filter(Boolean);return i.length===0?"?":i.slice(0,2).map(a=>a[0].toUpperCase()).join("")}function qn({raw:e}){let i=new Date(e);return Number.isNaN(i.getTime())?null:jsx("time",{className:"docx-review__time",dateTime:e,children:Lt.format(i)})}function Ye({className:e,hidden:i,children:a}){let r=Y();return i?null:jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:a??r("review.empty")})}Ye.docxReviewPart="Empty";function Ze({className:e,asChild:i,hidden:a,children:r}){let{review:s,authorSlots:t}=q(),o=useContext(I),n=useId();if(a||!o)return null;let c=t.get(o.author)??0,d={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${n}-author ${n}-summary`,"data-kind":o.kind==="revision"?o.revisionKind??"revision":o.kind,...o.kind==="custom"&&o.item.kind==="custom"?{"data-node-name":o.item.name}:{},...o.isActive?{"data-active":""}:{},...o.kind==="comment"&&o.resolved?{"data-resolved":""}:{},style:{"--doc-review-author":`var(--doc-review-author-${c%Mt})`},tabIndex:0,role:"button",id:n,onMouseDown:l=>{l.target?.closest("[data-review-selectable]")||l.currentTarget.focus({preventScroll:true});},onClick:()=>s.setActive(o.key),onKeyDown:l=>{l.target===l.currentTarget&&(l.key!=="Enter"&&l.key!==" "||(l.preventDefault(),s.setActive(o.key)));}};return i?jsx(Slot,{...d,children:r}):jsx("div",{...d,children:jsx(Kn,{children:r})})}Ze.docxReviewPart="Card";function Kn({children:e}){let i=useContext(I),a=useMemo(()=>$n(e),[e]),r=(t,o)=>t in a?a[t]:o;if(!i)return null;if(i.kind==="custom"&&i.item.kind==="custom"){let t=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:t.title}))})]}),r("Summary",t.detail?jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsx("span",{className:"docx-review__text",children:t.detail})}):null),a.__extra]})}let s=i.kind==="revision"&&!i.readOnly;return jsxs(Fragment,{children:[jsxs("div",{className:"docx-review__head",children:[r("Avatar",jsx(ae,{})),jsxs("div",{className:"docx-review__meta",children:[r("Author",jsx(le,{})),r("Time",jsx(ce,{}))]}),s||i.kind==="comment"?jsxs("div",{className:"docx-review__actions",children:[r("Accept",jsx(Ce,{})),r("Reject",jsx(Ee,{})),r("Resolve",jsx(Tt,{})),r("Reopen",jsx(Dt,{})),r("Delete",jsx(_e,{}))]}):null]}),r("Summary",jsx(de,{})),r("Replies",jsx(Be,{})),r("Reply",jsx(Ot,{})),a.__extra]})}function $n(e){let i={},a=[],r=s=>{if(Array.isArray(s)){s.forEach(r);return}if(!s||typeof s!="object"||!("type"in s)){s&&a.push(s);return}if(s.type===Fragment$1){r(s.props.children);return}let t=s.type.docxReviewPart;t?i[t]=s:a.push(s);};return r(e),a.length>0&&(i.__extra=a),i}function ae({className:e,asChild:i,hidden:a,children:r}){let s=useContext(I);if(a||!s||r===void 0&&!s.initials)return null;let t={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return i?jsx(Slot,{...t,children:r}):jsx("span",{...t,children:r??s.initials})}ae.docxReviewPart="Avatar";function le({className:e,asChild:i,hidden:a,children:r}){let s=useContext(I),t=Y();if(a||!s)return null;let o=s.author||t("comments.unknown"),n={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return i?jsx(Slot,{...n,children:r}):jsx("span",{...n,children:r??o})}le.docxReviewPart="Author";function ce({className:e,asChild:i,hidden:a,children:r}){let s=useContext(I);if(a||!s)return null;let t=s.date;if(!t)return null;let o=new Date(t);if(Number.isNaN(o.getTime()))return null;let n={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:t};return i?jsx(Slot,{...n,children:r}):jsx("time",{...n,children:r??Lt.format(o)})}ce.docxReviewPart="Time";var Lt=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function de({className:e,asChild:i,hidden:a,children:r}){let s=useContext(I),t=Y();if(a||!s)return null;let o=s.text,n=s.kind!=="revision"?null:t(Se(s.revisionKind)),c=s.kind==="revision"&&s.revisionKind==="replace",d={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return i?jsx(Slot,{...d,children:r}):jsx("div",{...d,children:r??(c?jsxs("span",{className:"docx-review__text",children:[t("review.replaced")," ",jsxs("span",{className:"docx-review__removed",children:['"',s.replacedText,'"']})," ",t("review.replacedWith")," ",jsxs("span",{className:"docx-review__added",children:['"',o,'"']})]}):jsxs(Fragment,{children:[n?jsx("span",{className:"docx-review__label","data-kind":s.kind==="revision"?s.revisionKind:"revision",children:n}):null,o?jsx("span",{className:"docx-review__text",children:o}):null]}))})}de.docxReviewPart="Summary";function Ce({className:e,asChild:i,hidden:a,children:r,icon:s}){let{readOnly:t,review:o}=q(),n=useContext(I),c=Y();if(a||!n||n.kind!=="revision"||n.readOnly)return null;let d=c("review.accept"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:p=>{p.stopPropagation(),!t&&o.accept(n);}};return i?jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:r}):jsx("button",{...m,children:s??r??F(pe)})}Ce.docxReviewPart="Accept";function Ee({className:e,asChild:i,hidden:a,children:r,icon:s}){let{readOnly:t,review:o}=q(),n=useContext(I),c=Y();if(a||!n||n.kind!=="revision"||n.readOnly)return null;let d=c("review.reject"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:p=>{p.stopPropagation(),!t&&o.reject(n);}};return i?jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:r}):jsx("button",{...m,children:s??r??F(Rt)})}Ee.docxReviewPart="Reject";function _e({className:e,asChild:i,hidden:a,children:r,icon:s}){let{readOnly:t,review:o}=q(),n=useContext(I),{t:c}=useTranslation();if(a||!n||n.kind==="custom"||n.kind==="revision"&&n.readOnly)return null;let d=n.kind==="comment"?c("review.deleteComment"):c("review.discardChange"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:p=>{p.stopPropagation(),!t&&o.remove(n);}};return i?jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:r}):jsx("button",{...m,children:s??r??F(yt)})}_e.docxReviewPart="Delete";function Be({className:e,hidden:i}){let{byId:a}=q(),r=useContext(I);if(i||!r||r.kind==="custom")return null;let s=r.replyIds.map(t=>a.get(t)).filter(t=>t!==void 0);return s.length===0?null:jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:s.map(t=>jsx(I.Provider,{value:t,children:jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxs("div",{className:"docx-review__head",children:[jsx(ae,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(le,{}),jsx(ce,{})]}),jsx("div",{className:"docx-review__actions",children:jsx(_e,{})})]}),jsx(de,{})]})},t.key))})}Be.docxReviewPart="Replies";var Vn=Object.assign(Ln,{List:he,Empty:Ye,Card:Ze,Avatar:ae,Author:le,Time:ce,Summary:de,Accept:Ce,Reject:Ee,Resolve:Tt,Reopen:Dt,Delete:_e,Replies:Be,Reply:Ot,Markers:Ke,AddComment:$e,Draft:St,Balloon:Ve});function ue(e){let i=useDocxEditor();return useMemo(()=>e||(i?.getCustomNodeDefinitions()??[]).filter(j$1),[e,i])}var Fn=".docx-content-control-boundary";function te(e,i){let{node:a,definition:r,controlId:s}=e,t=s?i?.getReviewItems().find(c=>c.kind==="custom"&&c.item.id===s):void 0;if(t&&t.kind==="custom"){let c=t.item;return {...a,attrs:c.attrs,text:c.text,...c.data===void 0?{}:{data:c.data},...s?{nodeId:s}:{}}}let o=s?jn(i,s,r):void 0,n=r.fromDocx?r.fromDocx({attrs:a.attrs,text:"",...o===void 0?{}:{data:o}}):a.attrs;return n===null?null:{...a,attrs:n,...o===void 0?{}:{data:o},...s?{nodeId:s}:{}}}function jn(e$1,i,a){let r=e$1?.surface;if(!r)return;let s=r.session.part(),t=customNodePayloadsByControl(r.session.currentPackage(),s.name).get(i);if(!t)return;let o=e(a.schema,t.data);return o.ok?o.value:void 0}function ne(e,i){let a=e?.closest?.(Fn),r=a?.closest(".docx-content-control-chrome"),s=r?.getAttribute("data-tag"),t=s?c(s):null;if(!a||!t||!s)return null;let o=i.find(n=>n.tagPrefix===t.prefix&&n.name===t.name);return o?{node:{name:t.name,attrs:t.attrs,tag:s,rect:a.getBoundingClientRect()},definition:o,controlId:r?.getAttribute("data-docx-content-control")??null}:null}var Fe=".docx-content-control-boundary",zn=e=>{if(!k.test(e.tagPrefix)||!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 Qn(e){let{onNodeClick:i,onNodeHover:a}=e,r=useDocxEditor(),s=ue(e.nodes);return useEffect(()=>{let t=document.createElement("style"),o=[];for(let n of s){let c=zn(n);if(c.length===0)continue;let d=n.chrome?.color!==void 0&&CSS.supports("color",n.chrome.color)?n.chrome.color:"#2563eb";o.push(`${c.map(l=>`${l} ${Fe}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${d} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return t.textContent=o.join(`
2
- `),document.head.append(t),()=>t.remove()},[s]),useEffect(()=>{let t=null,o=null,n=m=>ne(document.elementFromPoint(m.clientX,m.clientY),s),c=m=>{let p=m.button===0?n(m):null;t=p?.controlId??null,o=p?.node.tag??null;},d=m=>{let p=t,w=o;if(t=null,o=null,w===null)return;let y=n(m);if(!y||y.node.tag!==w||p!==null&&y.controlId!==p)return;let b=te(y,r);b&&(y.definition.onClick?.(b),i?.(b));},l=m=>{let p=ne(m.target,s);if(!p||m.relatedTarget?.closest?.(Fe)===m.target.closest(Fe))return;let y=te(p,r);y&&(p.definition.onHover?.(y),a?.(y));};return document.addEventListener("pointerdown",c,true),document.addEventListener("pointerup",d,true),document.addEventListener("mouseover",l),()=>{document.removeEventListener("pointerdown",c,true),document.removeEventListener("pointerup",d,true),document.removeEventListener("mouseover",l);}},[s,r,i,a]),null}function $t(e){let{onEditNode:i,onRemoveRefused:a,remove:r=true}=e,s=ue(e.nodes),t=useContextMenuTarget(),o=useDocxEditor(),{t:n}=useTranslation(),c=useMemo(()=>t?ne(t,s):null,[t,s]),d=useMemo(()=>c?te(c,o):null,[c,o]),l=useMemo(()=>!c?.definition.reviewCard||!d?null:c.definition.reviewCard({attrs:d.attrs,text:d.text??"",...d.data===void 0?{}:{data:d.data}}),[c,d]);if(!c||!d)return null;let{definition:m}=c,p=m.label??m.name,w=m.onEdit!==void 0||i!==void 0,y=r&&d.nodeId!==void 0&&o!==null;return !l&&!w&&!y?null:jsxs(Fragment,{children:[l?jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsx("span",{className:"docx-contextmenu__custom-title",children:l.title}),l.detail?jsx("span",{className:"docx-contextmenu__custom-detail",children:l.detail}):null]}):null,w?jsx(ContextMenuItem,{label:n("contextMenu.editCustomNode",{label:p}),className:"docx-contextmenu__custom-edit",onSelect:()=>{m.onEdit?.(d),i?.(d,m);}}):null,y?jsx(ContextMenuItem,{label:n("contextMenu.removeCustomNode",{label:p}),className:"docx-contextmenu__custom-remove",onSelect:()=>{let b=q$1(o,d.nodeId);b.ok||a?.(d,b.reason);}}):null,jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}$t.docxRowPlacement="start";export{Qn as CustomNodeChrome,$t as CustomNodeContextMenu,Vn as DocxEditorReview,te as activatedCustomNodeOf,ne as resolveCustomNodeActivation,ue as useCustomNodeDefinitions,fe as useReview,kn as useReviewItem,mt as useReviewOf,an as useStackedReviewPositions};
1
+ import {j as j$1,e,c,q,k}from'../chunk-TNUAAUFI.js';export{o as reviewModule}from'../chunk-TNUAAUFI.js';import {createContext,useMemo,useEffect,useCallback,useRef,useContext,useState,isValidElement,cloneElement,useId,Children,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';var Jt=new Set(["List","Markers","AddComment","Draft","Balloon"]),en=new Set(["Card","Empty"]);function Te(e,r){let a=r==="root"?Jt:en,i={},s=[],t=n=>{if(Array.isArray(n)){for(let c of n)t(c);return}if(!isValidElement(n)){n!=null&&n!==false&&s.push(n);return}if(n.type===Fragment$1){t(n.props.children);return}let o=n.type.docxReviewPart;o&&a.has(o)?i[o]=n:s.push(n);};return t(e),{parts:i,rest:s}}function dt(e,r){if(!r)return e;let a=e.props.className;return cloneElement(e,{className:`${r}${a?` ${a}`:""}`})}function ut(e){let r=useRef(new WeakMap),a=useRef(new Map),i=useRef(null),s=useCallback((t,n)=>{let o=a.current.get(n);if(!t){o&&(i.current?.unobserve(o),r.current.delete(o),a.current.delete(n));return}typeof ResizeObserver>"u"||(e(n,t.offsetHeight),i.current??(i.current=new ResizeObserver(c=>{for(let d of c){let l=r.current.get(d.target);l&&e(l,d.target.offsetHeight);}})),!(o===t&&r.current.get(t)===n)&&(o&&(i.current.unobserve(o),r.current.delete(o)),r.current.set(t,n),a.current.set(n,t),i.current.observe(t)));},[e]);return useEffect(()=>()=>{i.current?.disconnect(),a.current.clear();},[]),s}function sn(e){let r=false;return ()=>{if(r)return;if(!globalThis.navigator?.scheduling?.isInputPending?.({includeContinuous:true})){e();return}r=true,setTimeout(()=>{r=false,e();},0);}}function fe(e){let r=useDocxEditor();return mt(r,e)}function mt(e,r){let a=useCallback(v=>{if(!e)return ()=>{};let x=false,N=sn(()=>{x||v();}),C=e.on("change",N),O=e.on("selectionChange",N),U=e.on("error",N);return ()=>{x=true,C(),O(),U();}},[e]),i=useSyncExternalStore(a,()=>e?`${e.getReviewRevision()}:${e.getEditingMode()}`:"none",()=>"none"),s=useMemo(()=>e?e.getReviewItems(r).filter(v=>v.item.kind!=="custom"||v.item.carded):[],[e,i,r]),t=useMemo(()=>s.find(v=>v.isActive)?.key??null,[s]),n=useCallback((v,x)=>e?e.setActiveReviewItem(v,x).ok:false,[e]),o=useCallback(v=>!e||v.kind!=="revision"||v.readOnly?false:e.acceptReviewItem(v.key).ok,[e]),c=useCallback(v=>!e||v.kind!=="revision"||v.readOnly?false:e.rejectReviewItem(v.key).ok,[e]),d=useCallback(v=>!e||v.kind!=="comment"?false:e.setCommentResolved(v.key,true).ok,[e]),l=useCallback(v=>!e||v.kind!=="comment"?false:e.setCommentResolved(v.key,false).ok,[e]),m=e?.getEditingMode()==="viewing"?"the document is open for viewing":null,f=useCallback(v=>!e||v.kind==="custom"||v.kind==="revision"&&v.readOnly?false:e.deleteReviewItem(v.key).ok,[e]),w=useCallback((v,x,N)=>x.trim().length===0||!e?false:e.replyToReviewItem(v.key,x,N).ok,[e]),R=useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,i]),b=useCallback((v,x)=>v.trim().length===0||!e?false:e.addComment(v,x).ok,[e]),g=useMemo(()=>e?e.isReviewPaneOpen():true,[e,i]),k=useCallback(v=>{!e||e.isReviewPaneOpen()===v||e.exec({type:"toggleReviewPane"});},[e]);return useMemo(()=>({items:s,activeKey:t,setActive:n,accept:o,reject:c,resolve:d,reopen:l,commentResolutionDisabledReason:m,remove:f,reply:w,selectionAnchorY:R,comment:b,paneOpen:g,setPaneOpen:k,ready:e!==null&&!e.snapshot().isLoading&&e.snapshot().parseError===null}),[s,t,n,o,c,d,l,m,f,w,R,b,g,k,e])}function an(e,r,a={}){let i=a.gap??8,s=a.scale??1,t=a.defaultHeight??0;return useMemo(()=>{let n=new Map,o=Number.NEGATIVE_INFINITY;for(let c of e){let d=c.anchorY===null?Number.isFinite(o)?o:0:Math.max(c.anchorY,o);n.set(c.key,d),o=d+((r.get(c.key)??t)+i)/s;}return n},[e,r,i,s,t])}var F=e=>jsx("svg",{viewBox:"0 -960 960 960",width:16,height:16,"aria-hidden":"true",focusable:"false",children:jsx("path",{d:e,fill:"currentColor"})}),pt="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",vt="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",pe="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",wt="M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z",Rt="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",yt="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",ln="M200-200h57l391-391-57-57-391 391v57Zm-80 80v-170l528-527q12-11 26.5-17t30.5-6q16 0 31 6t26 18l55 56q12 11 17.5 26t5.5 30q0 16-5.5 30.5T817-647L290-120H120Zm640-584-56-56 56 56Zm-141 85-28-29 57 57-29-28Z",cn="M486-160q-76 0-135-45t-85-123l88-38q14 48 48.5 78t85.5 30q42 0 76-20t34-64q0-18-7-33t-19-27h112q5 14 7.5 28.5T694-341q0 86-61.5 133.5T486-160ZM80-520v-80h800v80H80Zm402-360q66 0 116 30t74 84l-88 38q-11-28-38.5-47T480-794q-42 0-72 19t-30 51q0 15 6 27t18 22H272q-6-13-9-27t-3-30q0-70 55-114t167-44Z",dn="M360-160q-83 0-141.5-58.5T160-360v-360q0-83 58.5-141.5T360-920q83 0 141.5 58.5T560-720v360q0 83-58.5 141.5T360-160Zm0-80q50 0 85-35t35-85v-360q0-50-35-85t-85-35q-50 0-85 35t-35 85v360q0 50 35 85t85 35Zm300 80q29 0 49.5-20.5T730-230q0-22-12.5-40T684-296l-64-32v-232l100 100q23 23 51.5 35.5T832-412v-80q-17 0-32-6.5T773-517L633-657q-12-12-27.5-17.5T573-680h-13v520h100ZM360-720Z",un="M580-360q-25 0-42.5-17.5T520-420v-160q0-25 17.5-42.5T580-640h160q25 0 42.5 17.5T800-580v260q0 66-47 113t-113 47v-80q33 0 56.5-23.5T720-320v-40H580Zm-360 0q-25 0-42.5-17.5T160-420v-160q0-25 17.5-42.5T220-640h160q25 0 42.5 17.5T440-580v260q0 66-47 113t-113 47v-80q33 0 56.5-23.5T360-320v-40H220Z";function bt(e){if(e.kind==="comment")return vt;if(e.kind==="custom")return e.item.icon??un;switch(e.revisionKind){case "insert":case "moveTo":return ln;case "delete":case "moveFrom":return cn;case "format":return dn;default:return vt}}function fn(e,r){return typeof r!="function"?e:typeof e!="function"?r:a=>{e(a),a.defaultPrevented||r(a);}}function pn(e,r){let a={...e,...r};for(let i of Object.keys(e))/^on[A-Z]/.test(i)?a[i]=fn(r[i],e[i]):i==="className"?a[i]=[e[i],r[i]].filter(Boolean).join(" "):i==="style"&&(a[i]={...e[i],...r[i]});return a}function ht(e){return e==="Enter"||e===" "}function wn(e){return ht(e.key)?(e.preventDefault(),e.stopPropagation(),true):false}function xt(e){return e.type==="button"}function Rn(e,r){return e.type==="a"||r.href!=null}function yn(e,r,a,i){let s=t=>{typeof a=="function"&&a(t);};return {onClick:t=>{typeof e=="function"&&e(t),t.defaultPrevented||s(t),i&&t.preventDefault();},onKeyDown:t=>{if(typeof r=="function"&&r(t),!ht(t.key))return;t.defaultPrevented||s(t),i&&t.preventDefault();}}}function W({engineDisabled:e,disabledReason:r,slotProps:a,children:i}){let s=Children.only(i);if(!isValidElement(s))return null;let t=s.props,n=pn(a,t);if(!e){if(!xt(s)){let o=yn(t.onClick,t.onKeyDown,a.onClick,Rn(s,t));n.onClick=o.onClick,n.onKeyDown=o.onKeyDown;}return cloneElement(s,n)}if(xt(s))n.disabled=true,delete n["aria-disabled"];else {delete n.disabled,n["aria-disabled"]=true,n["data-disabled"]="",n.tabIndex=-1,n.href=void 0,n.role===void 0&&(n.role="button");let o=n.onKeyDown;n.onKeyDown=c=>{wn(c)||typeof o=="function"&&o(c);};}return r&&(n.title=r),n.onClick=o=>{o.preventDefault(),o.stopPropagation();},cloneElement(s,n)}function Nt(e){function r({className:i,asChild:s,hidden:t,children:n,icon:o}){let c=e.useReview(),d=e.useItem(),l=e.useLabel();if(t||!d||d.kind!=="comment"||d.resolved)return null;let m=l("comments.resolve"),f=c.commentResolutionDisabledReason!==null,w=f?l("editingMode.viewingHint"):null,R={type:"button",className:`docx-review__action${i?` ${i}`:""}`,"data-testid":"review-resolve","aria-label":m,title:w??m,disabled:f,onMouseDown:e.guardMousedown,onClick:b=>{b.stopPropagation(),!f&&c.resolve(d);}};return s?jsx(W,{engineDisabled:f,disabledReason:w,slotProps:R,children:n}):jsx("button",{...R,children:o??n??F(pe)})}r.docxReviewPart="Resolve";function a({className:i,asChild:s,hidden:t,children:n,icon:o}){let c=e.useReview(),d=e.useItem(),l=e.useLabel();if(t||!d||d.kind!=="comment"||!d.resolved)return null;let m=l("comments.reopen"),f=c.commentResolutionDisabledReason!==null,w=f?l("editingMode.viewingHint"):null,R={type:"button",className:`docx-review__action${i?` ${i}`:""}`,"data-testid":"review-reopen","aria-label":m,title:w??m,disabled:f,onMouseDown:e.guardMousedown,onClick:b=>{b.stopPropagation(),!f&&c.reopen(d);}};return s?jsx(W,{engineDisabled:f,disabledReason:w,slotProps:R,children:n}):jsx("button",{...R,children:o??n??F(wt)})}return a.docxReviewPart="Reopen",{ReviewResolve:r,ReviewReopen:a}}function _t(e){function r({top:i=0,className:s,hidden:t}){let{review:n,endDraft:o,measure:c,readOnly:d}=e.useRail(),l=e.useLabel(),[m,f]=useState(""),[w,R]=useState(false),b=useRef(null),g=useId();useEffect(()=>{d||b.current?.focus({preventScroll:true});},[]);let k=useCallback(()=>{if(d||m.trim().length===0)return;let v=n.comment(m.trim());R(!v),v&&(f(""),o());},[d,m,n,o]);return t?null:jsx("div",{className:`docx-review__slot${s?` ${s}`:""}`,style:{position:"absolute",top:i},ref:v=>{c(v,e.composeKey);},children:jsx("div",{className:"docx-review__card","data-testid":"review-draft","data-draft":"",children:jsxs("form",{className:"docx-review__reply-box",onSubmit:v=>{v.preventDefault(),k();},children:[jsx("label",{className:"docx-editor-sr-only",htmlFor:g,children:l("comments.addComment")}),jsx("input",{id:g,ref:b,"data-testid":"review-draft-input",className:"docx-review__input",value:m,placeholder:l("comments.addComment"),readOnly:d,...w?{"aria-invalid":true}:{},onChange:v=>{d||(R(false),f(v.target.value));},onKeyDown:v=>{if(v.key==="Escape"){v.preventDefault(),o();return}d||v.key!=="Enter"||(v.preventDefault(),k());}}),jsxs("div",{className:"docx-review__reply-actions",children:[jsx("button",{type:"button","data-testid":"review-draft-cancel",className:"docx-review__text-button",onMouseDown:e.guardMousedown,onClick:o,children:l("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:d||m.trim().length===0,title:d?l("editingMode.viewingHint"):void 0,children:l("common.comment")})]}),w?jsx("span",{className:"docx-review__refused",role:"alert",children:l("review.commentRefused")}):null]})})})}r.docxReviewPart="Draft";function a({className:i,hidden:s,children:t}){let{review:n,readOnly:o}=e.useRail(),c=e.useItem(),d=e.useLabel(),[l,m]=useState(""),[f,w]=useState(false),R=useId(),b=useCallback(()=>{if(!c||o||l.trim().length===0)return;let g=n.reply(c,l.trim());w(!g),g&&m("");},[c,o,l,n]);return s||!c||!c.isActive?null:t?jsx(Fragment,{children:t}):jsxs("form",{className:`docx-review__reply-box${i?` ${i}`:""}`,onSubmit:g=>{g.preventDefault(),b();},children:[jsx("label",{className:"docx-editor-sr-only",htmlFor:R,children:d("comments.replyPlaceholder")}),jsx("input",{id:R,"data-testid":"review-reply-input",className:"docx-review__input",value:l,placeholder:d("comments.replyPlaceholder"),readOnly:o,...f?{"aria-invalid":true,"data-refused":""}:{},onChange:g=>{o||(w(false),m(g.target.value));},onClick:g=>g.stopPropagation(),onKeyDown:g=>{o||g.key!=="Enter"||(g.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:e.guardMousedown,onClick:g=>{g.stopPropagation(),m(""),w(false),n.setActive(null);},children:d("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:o||l.trim().length===0,title:o?d("editingMode.viewingHint"):void 0,children:d("review.reply")})]}),f?jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:d("review.replyRefused")}):null]})}return a.docxReviewPart="Reply",{ReviewDraft:r,ReviewReply:a}}function Se(e,r){if(e==="paragraphMark")return r==="delete"?"revisions.paragraphMarkDeleted":r==="moveFrom"?"revisions.paragraphMarkMovedFrom":r==="moveTo"?"revisions.paragraphMarkMovedTo":"revisions.paragraphMarkInserted";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";default:return "review.structural"}}var _n=e=>e.isLoading||e.parseError!==null||e.pageSetup==null,Pn=e=>e.editingMode==="viewing",Le=createContext(null),I=createContext(null);function kn(){return useContext(I)}var In={scale:96/72,top:0,left:null},Mn=16,xe="\0compose",It=600,At=8,An=72,Tn=64,Dn=480,Sn=30,On=Object.freeze({placement:false});function He(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 j(e){let r=e.target?.tagName;r==="INPUT"||r==="SELECT"||r==="TEXTAREA"||e.preventDefault();}function K(){let e=useContext(Le);return e||Ln}function Y(){let{t:e}=useContext(Le)??{},{t:r}=useTranslation();return useCallback(a=>e?.(a)??r(a),[e,r])}var{ReviewResolve:Tt,ReviewReopen:Dt}=Nt({useReview:()=>K().review,useItem:()=>useContext(I),useLabel:Y,guardMousedown:j}),{ReviewDraft:St,ReviewReply:Ot}=_t({useRail:K,useItem:()=>useContext(I),useLabel:Y,guardMousedown:j,composeKey:xe}),Ln={t:void 0,cardClassName:void 0,readOnly:false,review:{items:[],activeKey:null,setActive:()=>false,accept:()=>false,reject:()=>false,resolve:()=>false,reopen:()=>false,commentResolutionDisabledReason:null,remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}};function Hn({className:e,furniture:r,asChild:a,hidden:i,children:s,t,card:n,preset:o=true,stack:c=true,gap:d=8,filter:l,structural:m=false,formatting:f=false}){let w=useDocxEditor(),R=useEditorState(_n),b=useEditorState(Pn),g=useMemo(()=>{let y=[];return m||y.push("structural"),f||y.push("format"),y.length>0?y:void 0},[m,f]),k=useMemo(()=>g?{excludeRevisionKinds:g}:void 0,[g]);useEffect(()=>(w?.setReviewActivationExclusions(g??null),()=>w?.setReviewActivationExclusions(null)),[w,g]);let v=fe(On),x=fe(k),N=x.setPaneOpen,{t:C}=useTranslation(),O=useCallback(y=>t?.(y)??C(y),[t,C]),U=useRef(null),oe=useContext(ReviewRailContext);useEffect(()=>oe?.register(),[oe]);let Z=x.paneOpen,L=useMemo(()=>l?x.items.filter(y=>l(y)):x.items,[x.items,l]),Ue=useMemo(()=>{let y=new Map;for(let p of L)p.author&&!y.has(p.author)&&y.set(p.author,y.size);return y},[L]),ze=useMemo(()=>{let y=new Map;for(let p of L)y.set(p.id,p);return y},[L]),[Qe,Vt]=useState(()=>new Map),Yt=useCallback((y,p)=>{p<=0||Vt(h=>{if(h.get(y)===p)return h;let P=new Map(h);return P.set(y,p),P});},[]),Ge=ut(Yt),[S,Zt]=useState(In);useEffect(()=>{let y=U.current;if(!w||!y)return;let p=y.offsetParent,h=p?.querySelector(".docx-paginated-surface")??null,P=()=>{Zt(A=>{let q=h&&p?h.getBoundingClientRect():null,H=q&&p?p.getBoundingClientRect():null,$={scale:w.getRenderScale(),top:q&&H&&p?q.top-H.top-p.clientTop+p.scrollTop:0,left:q&&H&&p?q.right-H.left-p.clientLeft+p.scrollLeft+Mn:null};return A.scale===$.scale&&A.top===$.top&&A.left===$.left?A:$});};P();let E=new ResizeObserver(P);return p&&E.observe(p),h&&E.observe(h),()=>E.disconnect()},[w,L,R,i]),useEffect(()=>{let y=U.current;if(!w||!y)return;let p=h=>{let P=h.target;if(!(P instanceof Node)||y.contains(P))return;let E=y.offsetParent;!E||!E.contains(P)||E.querySelector(".docx-paginated-surface")?.contains(P)||w.setActiveReviewItem(null);};return document.addEventListener("mousedown",p,true),()=>document.removeEventListener("mousedown",p,true)},[w,R,i]);let[Pe,Bt]=useState(null);useEffect(()=>{let y=U.current,p=y?.offsetParent;if(!p)return;let h=0,P=()=>{h=0,Bt(H=>{let $=p.scrollTop-It,ve=p.scrollTop+p.clientHeight+It;return H&&H.top===$&&H.bottom===ve?H:{top:$,bottom:ve}});},E=0,A=()=>{h===0&&(h=requestAnimationFrame(P)),y?.setAttribute("data-scrolling",""),window.clearTimeout(E),E=window.setTimeout(()=>y?.removeAttribute("data-scrolling"),150);};P(),p.addEventListener("scroll",A,{passive:true});let q=new ResizeObserver(A);return q.observe(p),()=>{h!==0&&cancelAnimationFrame(h),window.clearTimeout(E),p.removeEventListener("scroll",A),q.disconnect();}},[w,R,i]);let[B,ke]=useState(null),We=useCallback(()=>{!w||b||(w.surface?.retainSelection(),N(true),ke(w.getSelectionPlacement()?.anchorY??null));},[w,b,N]),Xe=useCallback(()=>{w?.surface?.releaseSelection(),ke(null),w?.focus();},[w]);useEffect(()=>{Z||B===null||(w?.surface?.releaseSelection(),ke(null));},[Z,B,w]);let Je=B??x.selectionAnchorY,z=useMemo(()=>{let y=Ke(L);return L.filter(p=>!He(p,y))},[L]),et=useMemo(()=>{if(B===null)return z;let y=z.findIndex(h=>h.anchorY!==null&&h.anchorY>B),p={key:xe,anchorY:B};return y===-1?[...z,p]:[...z.slice(0,y),p,...z.slice(y)]},[z,B]),tt=useMemo(()=>{let y=new Map(Qe);for(let p of z){if(y.has(p.key))continue;let h=p.text.length+(p.kind==="revision"?p.replacedText?.length??0:0),P=Math.min(6,Math.max(1,Math.ceil(h/36)));y.set(p.key,64+P*20);}return y},[Qe,z]),{stacked:Ie,collapsedKeys:nt}=useMemo(()=>{let y=S.scale,p=new Map,h=new Set,P=Number.NEGATIVE_INFINITY;for(let E of et){let A=E.anchorY===null?Number.isFinite(P)?P:0:Math.max(E.anchorY,P);p.set(E.key,A);let q=E.anchorY===null?0:(A-E.anchorY)*y,H="isActive"in E&&E.isActive,$=q>Dn&&!H&&E.key!==xe;$&&h.add(E.key);let ve=$?Tn:tt.get(E.key)??An;P=A+(ve+d)/y;}return {stacked:p,collapsedKeys:h}},[et,tt,d,S.scale]),Me=Je===null?null:S.top+(Ie.get(xe)??Je)*S.scale,ot=n?.className,Ft=useMemo(()=>({t,cardClassName:ot,readOnly:b,review:{...x,items:L},allItems:v.items,authorSlots:Ue,byId:ze,measure:Ge,beginDraft:We,endDraft:Xe}),[t,ot,b,x,v.items,L,Ue,ze,Ge,We,Xe]);if(i||R)return null;let rt={ref:U,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":L.length,"data-open":Z?"":void 0,role:"complementary","aria-label":O("review.ariaLabel"),onMouseDown:j,style:S.left===null?void 0:{left:S.left,right:"auto"}},J=typeof s=="function"?{parts:{},rest:s}:Te(s,"root"),G=J.parts,re=(y,p)=>{if(!(y in G))return p;let h=G[y];return !isValidElement(h)||!isValidElement(p)?h:cloneElement(h,{...p.props,...h.props})},it=jsxs(Fragment,{children:[o||"AddComment"in G?re("AddComment",jsx($e,{top:Me,drafting:B!==null})):null,!Z||B===null||Me===null||!o&&!("Draft"in G)?null:re("Draft",jsx(St,{top:Me})),o||"Balloon"in G?re("Balloon",jsx(Ve,{})):null]}),jt=jsx(he,{stack:c,positions:Ie,collapsed:nt,scale:S.scale,offset:S.top,window:Pe,children:J.rest}),Ut=jsx(qe,{scale:S.scale,offset:S.top,window:Pe}),zt=Z?o||"List"in G?re("List",jt):typeof J.rest=="function"?null:J.rest:o||"Markers"in G?re("Markers",Ut):typeof J.rest=="function"?null:J.rest;return jsx(Le.Provider,{value:Ft,children:a&&isValidElement(s)?jsx(Slot,{...rt,children:cloneElement(s,void 0,s.props.children,o?jsx(he,{stack:c,positions:Ie,collapsed:nt,scale:S.scale,offset:S.top,window:Pe}):null,it)}):jsxs("aside",{...rt,children:[Z&&r!==void 0?jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:r}):null,zt,it]})})}function he({stack:e=true,positions:r,collapsed:a,scale:i=1,offset:s=0,window:t=null,children:n,className:o,hidden:c}){let{review:d,measure:l,cardClassName:m}=K();if(c)return null;let f=typeof n=="function"?null:Te(n,"list"),w=Ke(d.items),R=d.items.filter(b=>!He(b,w));return R.length===0?typeof n=="function"?null:f?.parts.Empty??jsx(Ye,{}):jsx("div",{className:`docx-review__list${o?` ${o}`:""}`,children:R.map(b=>{let g=e?r?.get(b.key)??b.anchorY:b.anchorY,k=g==null?null:s+g*i;if(k!==null&&t&&(k<t.top||k>t.bottom))return null;let v=k===null?{}:{position:"absolute",top:k};return jsx(I.Provider,{value:b,children:jsx("div",{className:"docx-review__slot",style:v,...a?.has(b.key)?{"data-collapsed":""}:{},ref:x=>{l(x,b.key);},children:typeof n=="function"?n(b):f?.parts.Card&&isValidElement(f.parts.Card)?dt(f.parts.Card,m):jsx(Ze,{...m?{className:m}:{},children:f?.rest})})},b.key)})})}he.docxReviewPart="List";function qe({scale:e=1,offset:r=0,window:a=null,className:i,hidden:s,icon:t}){let{review:n}=K(),o=Y(),{roots:c,stackedTops:d}=useMemo(()=>{let l=Ke(n.items),m=n.items.filter(R=>!He(R,l)),f=new Map,w=Number.NEGATIVE_INFINITY;for(let R of m){if(R.anchorY===null)continue;let b=Math.max(r+R.anchorY*e,w);f.set(R.key,b),w=b+Sn;}return {roots:m,stackedTops:f}},[n.items,r,e]);return s?null:jsx("div",{className:`docx-review__markers${i?` ${i}`:""}`,children:c.map(l=>{let m=d.get(l.key);return m===void 0||a&&(m<a.top||m>a.bottom)?null:jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":l.kind==="revision"?l.revisionKind:l.kind,style:{position:"absolute",top:m},title:l.author?`${l.author}: ${l.text}`:l.text,"aria-label":`${o("review.showPane")}: ${l.author?`${l.author}. `:""}${l.text}`,onMouseDown:j,onClick:()=>{n.setPaneOpen(true),n.setActive(l.key);},children:(typeof t=="function"?t(l):t)??F(bt(l))},l.key)})})}qe.docxReviewPart="Markers";function $e({top:e=null,drafting:r=false,className:a,hidden:i,children:s}){let{beginDraft:t,readOnly:n}=K(),o=Y();if(i||r||e===null||n)return null;let c={type:"button",className:`docx-review__add${a?` ${a}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":o("common.comment"),title:o("common.comment"),onMouseDown:j,onClick:t};return s?jsx(Slot,{...c,children:s}):jsx("button",{...c,children:F(pt)})}$e.docxReviewPart="AddComment";function Ve({className:e,hidden:r}){let{review:a,allItems:i,authorSlots:s}=K(),t=Y(),n=useRef(null),[o,c]=useState(null),d=useRef(false);d.current=o!==null,useEffect(()=>{let R=n.current,b=R?.closest(".docx-review"),g=b?.closest(".docx-editor__scroll-container")??b?.offsetParent;if(!R||!b||!g)return;let k=(x,N)=>{let C=b.getBoundingClientRect(),O=x.getBoundingClientRect(),U=x.ownerDocument.defaultView?.innerHeight??1/0,oe=Number(x.dataset.start),Z=Number(x.dataset.end);c({revisionId:x.dataset.revisionId,author:x.dataset.revisionAuthor??"",...x.dataset.revisionDate!==void 0?{date:x.dataset.revisionDate}:{},...x.dataset.revisionKind!==void 0?{kind:x.dataset.revisionKind}:{},structuralSite:N,...x.dataset.paragraphId!==void 0?{paragraphId:x.dataset.paragraphId}:{},...Number.isFinite(oe)?{start:oe}:{},...Number.isFinite(Z)?{end:Z}:{},left:O.left-C.left,top:O.top-C.top,bottom:O.bottom-C.top,above:O.bottom+220>U});},v=x=>{let N=x.target;if(!(N instanceof Element)||R.contains(N))return;let C=N.closest("[data-revision-id]");if(C instanceof HTMLElement&&g.contains(C)){let O=C.classList.contains("docx-table-row--revision");if(C.dataset.revisionKind==="format"||O){k(C,O);return}}d.current&&c(null);};return g.addEventListener("pointerdown",v,true),g.addEventListener("mousedown",v,true),()=>{g.removeEventListener("pointerdown",v,true),g.removeEventListener("mousedown",v,true);}},[]);let l=useMemo(()=>{if(!o)return null;let R=null,b=false,g=null,k=false,v=null,x=false;for(let N of i)if(!(N.kind!=="revision"||N.item.kind!=="revision")){for(let C of N.item.addresses)if(C.id===o.revisionId){if(C.author===o.author){if(C.date===o.date)return N;R===null?R=N:R!==N&&(b=true);}g===null?g=N:g!==N&&(k=true);}if(o.paragraphId!==void 0&&o.start!==void 0&&o.end!==void 0&&(N.revisionKind==="format"||N.revisionKind==="structural")){for(let C of N.item.ranges)if(C.start.paragraphId===o.paragraphId&&C.start.offset<o.end&&C.end.offset>o.start){v===null?v=N:v!==N&&(x=true);break}}}return R!==null&&!b?R:g!==null&&!k?g:v!==null&&!x?v:null},[i,o]),m=l&&(l.revisionKind==="format"||l.revisionKind==="structural")?l:null,f=useRef(false);if(useEffect(()=>{if(m){f.current=true;return}f.current&&(f.current=false,c(null));},[m]),r)return null;let w=o?.kind==="format"?"format":"structural";return jsx("div",{ref:n,className:`docx-review__balloon-root${e?` ${e}`:""}`,children:o===null?null:jsx("div",{className:"docx-review__balloon","data-testid":"review-balloon",style:{left:o.left,top:o.above?o.top-6:o.bottom+6,transform:o.above?"translateY(-100%)":void 0},onMouseDown:j,children:m?jsx(I.Provider,{value:m,children:jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":m.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(s.get(m.author)??0)%At})`},onClick:()=>a.setActive(m.key),children:[jsxs("div",{className:"docx-review__head",children:[jsx(ae,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(le,{}),jsx(ce,{})]}),m.kind==="revision"&&!m.readOnly?jsxs("div",{className:"docx-review__actions",children:[jsx(Ce,{}),jsx(Ee,{})]}):null]}),jsx(de,{})]})}):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:Kn(o.author)}),jsxs("div",{className:"docx-review__meta",children:[jsx("span",{className:"docx-review__author",children:o.author||t("comments.unknown")}),o.date?jsx(qn,{raw:o.date}):null]})]}),jsx("div",{className:"docx-review__summary",children:jsx("span",{className:"docx-review__label","data-kind":w,children:t(Se(w))})})]})})})}Ve.docxReviewPart="Balloon";function Kn(e){let r=e.trim().split(/\s+/).filter(Boolean);return r.length===0?"?":r.slice(0,2).map(a=>a[0].toUpperCase()).join("")}function qn({raw:e}){let r=new Date(e);return Number.isNaN(r.getTime())?null:jsx("time",{className:"docx-review__time",dateTime:e,children:Lt.format(r)})}function Ye({className:e,hidden:r,children:a}){let i=Y();return r?null:jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:a??i("review.empty")})}Ye.docxReviewPart="Empty";function Ze({className:e,asChild:r,hidden:a,children:i}){let{review:s,authorSlots:t}=K(),n=useContext(I),o=useId();if(a||!n)return null;let c=t.get(n.author)??0,d={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${o}-author ${o}-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-${c%At})`},tabIndex:0,role:"button",id:o,onMouseDown:l=>{l.target?.closest("[data-review-selectable]")||l.currentTarget.focus({preventScroll:true});},onClick:()=>s.setActive(n.key),onKeyDown:l=>{l.target===l.currentTarget&&(l.key!=="Enter"&&l.key!==" "||(l.preventDefault(),s.setActive(n.key)));}};return r?jsx(Slot,{...d,children:i}):jsx("div",{...d,children:jsx($n,{children:i})})}Ze.docxReviewPart="Card";function $n({children:e}){let r=useContext(I),a=useMemo(()=>Vn(e),[e]),i=(t,n)=>t in a?a[t]:n;if(!r)return null;if(r.kind==="custom"&&r.item.kind==="custom"){let t=r.item;return jsxs(Fragment,{children:[jsxs("div",{className:"docx-review__head",children:[i("Avatar",null),jsx("div",{className:"docx-review__meta",children:i("Author",jsx("span",{className:"docx-review__author","data-testid":"review-custom-title",children:t.title}))})]}),i("Summary",t.detail?jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsx("span",{className:"docx-review__text",children:t.detail})}):null),a.__extra]})}let s=r.kind==="revision"&&!r.readOnly;return jsxs(Fragment,{children:[jsxs("div",{className:"docx-review__head",children:[i("Avatar",jsx(ae,{})),jsxs("div",{className:"docx-review__meta",children:[i("Author",jsx(le,{})),i("Time",jsx(ce,{}))]}),s||r.kind==="comment"?jsxs("div",{className:"docx-review__actions",children:[i("Accept",jsx(Ce,{})),i("Reject",jsx(Ee,{})),i("Resolve",jsx(Tt,{})),i("Reopen",jsx(Dt,{})),i("Delete",jsx(_e,{}))]}):null]}),i("Summary",jsx(de,{})),i("Replies",jsx(Be,{})),i("Reply",jsx(Ot,{})),a.__extra]})}function Vn(e){let r={},a=[],i=s=>{if(Array.isArray(s)){s.forEach(i);return}if(!s||typeof s!="object"||!("type"in s)){s&&a.push(s);return}if(s.type===Fragment$1){i(s.props.children);return}let t=s.type.docxReviewPart;t?r[t]=s:a.push(s);};return i(e),a.length>0&&(r.__extra=a),r}function ae({className:e,asChild:r,hidden:a,children:i}){let s=useContext(I);if(a||!s||i===void 0&&!s.initials)return null;let t={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return r?jsx(Slot,{...t,children:i}):jsx("span",{...t,children:i??s.initials})}ae.docxReviewPart="Avatar";function le({className:e,asChild:r,hidden:a,children:i}){let s=useContext(I),t=Y();if(a||!s)return null;let n=s.author||t("comments.unknown"),o={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return r?jsx(Slot,{...o,children:i}):jsx("span",{...o,children:i??n})}le.docxReviewPart="Author";function ce({className:e,asChild:r,hidden:a,children:i}){let s=useContext(I);if(a||!s)return null;let t=s.date;if(!t)return null;let n=new Date(t);if(Number.isNaN(n.getTime()))return null;let o={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:t};return r?jsx(Slot,{...o,children:i}):jsx("time",{...o,children:i??Lt.format(n)})}ce.docxReviewPart="Time";var Lt=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function de({className:e,asChild:r,hidden:a,children:i}){let s=useContext(I),t=Y();if(a||!s)return null;let n=s.text,o=s.kind!=="revision"?null:t(Se(s.revisionKind,s.item.markDirection)),c=s.kind==="revision"&&s.revisionKind==="replace",d={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return r?jsx(Slot,{...d,children:i}):jsx("div",{...d,children:i??(c?jsxs("span",{className:"docx-review__text",children:[t("review.replaced")," ",jsxs("span",{className:"docx-review__removed",children:['"',s.replacedText,'"']})," ",t("review.replacedWith")," ",jsxs("span",{className:"docx-review__added",children:['"',n,'"']})]}):jsxs(Fragment,{children:[o?jsx("span",{className:"docx-review__label","data-kind":s.kind==="revision"?s.revisionKind:"revision",children:o}):null,n?jsx("span",{className:"docx-review__text",children:n}):null]}))})}de.docxReviewPart="Summary";function Ce({className:e,asChild:r,hidden:a,children:i,icon:s}){let{readOnly:t,review:n}=K(),o=useContext(I),c=Y();if(a||!o||o.kind!=="revision"||o.readOnly)return null;let d=c("review.accept"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:f=>{f.stopPropagation(),!t&&n.accept(o);}};return r?jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:i}):jsx("button",{...m,children:s??i??F(pe)})}Ce.docxReviewPart="Accept";function Ee({className:e,asChild:r,hidden:a,children:i,icon:s}){let{readOnly:t,review:n}=K(),o=useContext(I),c=Y();if(a||!o||o.kind!=="revision"||o.readOnly)return null;let d=c("review.reject"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:f=>{f.stopPropagation(),!t&&n.reject(o);}};return r?jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:i}):jsx("button",{...m,children:s??i??F(Rt)})}Ee.docxReviewPart="Reject";function _e({className:e,asChild:r,hidden:a,children:i,icon:s}){let{readOnly:t,review:n}=K(),o=useContext(I),{t:c}=useTranslation();if(a||!o||o.kind==="custom"||o.kind==="revision"&&o.readOnly)return null;let d=o.kind==="comment"?c("review.deleteComment"):c("review.discardChange"),l=t?c("editingMode.viewingHint"):null,m={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:l??d,disabled:t,onMouseDown:j,onClick:f=>{f.stopPropagation(),!t&&n.remove(o);}};return r?jsx(W,{engineDisabled:t,disabledReason:l,slotProps:m,children:i}):jsx("button",{...m,children:s??i??F(yt)})}_e.docxReviewPart="Delete";function Be({className:e,hidden:r}){let{byId:a}=K(),i=useContext(I);if(r||!i||i.kind==="custom")return null;let s=i.replyIds.map(t=>a.get(t)).filter(t=>t!==void 0);return s.length===0?null:jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:s.map(t=>jsx(I.Provider,{value:t,children:jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxs("div",{className:"docx-review__head",children:[jsx(ae,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(le,{}),jsx(ce,{})]}),jsx("div",{className:"docx-review__actions",children:jsx(_e,{})})]}),jsx(de,{})]})},t.key))})}Be.docxReviewPart="Replies";var Yn=Object.assign(Hn,{List:he,Empty:Ye,Card:Ze,Avatar:ae,Author:le,Time:ce,Summary:de,Accept:Ce,Reject:Ee,Resolve:Tt,Reopen:Dt,Delete:_e,Replies:Be,Reply:Ot,Markers:qe,AddComment:$e,Draft:St,Balloon:Ve});function ue(e){let r=useDocxEditor();return useMemo(()=>e||(r?.getCustomNodeDefinitions()??[]).filter(j$1),[e,r])}var jn=".docx-content-control-boundary";function te(e,r){let{node:a,definition:i,controlId:s}=e,t=s?r?.getReviewItems().find(c=>c.kind==="custom"&&c.item.id===s):void 0;if(t&&t.kind==="custom"){let c=t.item;return {...a,attrs:c.attrs,text:c.text,...c.data===void 0?{}:{data:c.data},...s?{nodeId:s}:{}}}let n=s?Un(r,s,i):void 0,o=i.fromDocx?i.fromDocx({attrs:a.attrs,text:"",...n===void 0?{}:{data:n}}):a.attrs;return o===null?null:{...a,attrs:o,...n===void 0?{}:{data:n},...s?{nodeId:s}:{}}}function Un(e$1,r,a){let i=e$1?.surface;if(!i)return;let s=i.session.part(),t=customNodePayloadsByControl(i.session.currentPackage(),s.name).get(r);if(!t)return;let n=e(a.schema,t.data);return n.ok?n.value:void 0}function ne(e,r){let a=e?.closest?.(jn),i=a?.closest(".docx-content-control-chrome"),s=i?.getAttribute("data-tag"),t=s?c(s):null;if(!a||!t||!s)return null;let n=r.find(o=>o.tagPrefix===t.prefix&&o.name===t.name);return n?{node:{name:t.name,attrs:t.attrs,tag:s,rect:a.getBoundingClientRect()},definition:n,controlId:i?.getAttribute("data-docx-content-control")??null}:null}var Fe=".docx-content-control-boundary",Qn=e=>{if(!k.test(e.tagPrefix)||!k.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 Gn(e){let{onNodeClick:r,onNodeHover:a}=e,i=useDocxEditor(),s=ue(e.nodes);return useEffect(()=>{let t=document.createElement("style"),n=[];for(let o of s){let c=Qn(o);if(c.length===0)continue;let d=o.chrome?.color!==void 0&&CSS.supports("color",o.chrome.color)?o.chrome.color:"#2563eb";n.push(`${c.map(l=>`${l} ${Fe}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${d} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return t.textContent=n.join(`
2
+ `),document.head.append(t),()=>t.remove()},[s]),useEffect(()=>{let t=null,n=null,o=m=>ne(document.elementFromPoint(m.clientX,m.clientY),s),c=m=>{let f=m.button===0?o(m):null;t=f?.controlId??null,n=f?.node.tag??null;},d=m=>{let f=t,w=n;if(t=null,n=null,w===null)return;let R=o(m);if(!R||R.node.tag!==w||f!==null&&R.controlId!==f)return;let b=te(R,i);b&&(R.definition.onClick?.(b),r?.(b));},l=m=>{let f=ne(m.target,s);if(!f||m.relatedTarget?.closest?.(Fe)===m.target.closest(Fe))return;let R=te(f,i);R&&(f.definition.onHover?.(R),a?.(R));};return document.addEventListener("pointerdown",c,true),document.addEventListener("pointerup",d,true),document.addEventListener("mouseover",l),()=>{document.removeEventListener("pointerdown",c,true),document.removeEventListener("pointerup",d,true),document.removeEventListener("mouseover",l);}},[s,i,r,a]),null}function $t(e){let{onEditNode:r,onRemoveRefused:a,remove:i=true}=e,s=ue(e.nodes),t=useContextMenuTarget(),n=useDocxEditor(),{t:o}=useTranslation(),c=useMemo(()=>t?ne(t,s):null,[t,s]),d=useMemo(()=>c?te(c,n):null,[c,n]),l=useMemo(()=>!c?.definition.reviewCard||!d?null:c.definition.reviewCard({attrs:d.attrs,text:d.text??"",...d.data===void 0?{}:{data:d.data}}),[c,d]);if(!c||!d)return null;let{definition:m}=c,f=m.label??m.name,w=m.onEdit!==void 0||r!==void 0,R=i&&d.nodeId!==void 0&&n!==null;return !l&&!w&&!R?null:jsxs(Fragment,{children:[l?jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsx("span",{className:"docx-contextmenu__custom-title",children:l.title}),l.detail?jsx("span",{className:"docx-contextmenu__custom-detail",children:l.detail}):null]}):null,w?jsx(ContextMenuItem,{label:o("contextMenu.editCustomNode",{label:f}),className:"docx-contextmenu__custom-edit",onSelect:()=>{m.onEdit?.(d),r?.(d,m);}}):null,R?jsx(ContextMenuItem,{label:o("contextMenu.removeCustomNode",{label:f}),className:"docx-contextmenu__custom-remove",onSelect:()=>{let b=q(n,d.nodeId);b.ok||a?.(d,b.reason);}}):null,jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}$t.docxRowPlacement="start";export{Gn as CustomNodeChrome,$t as CustomNodeContextMenu,Yn as DocxEditorReview,te as activatedCustomNodeOf,ne as resolveCustomNodeActivation,ue as useCustomNodeDefinitions,fe as useReview,kn as useReviewItem,mt as useReviewOf,an as useStackedReviewPositions};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docx-editor.dev/pro",
3
- "version": "2.4.0",
3
+ "version": "2.5.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",
@@ -52,7 +52,7 @@
52
52
  "@docx-editor.dev/react": "workspace:*",
53
53
  "@happy-dom/global-registrator": "^20.8.3",
54
54
  "@testing-library/react": "^16.0.0",
55
- "@types/react": "^19.0.0",
55
+ "@types/react": "^19.2.18",
56
56
  "fflate": "^0.8.2",
57
57
  "license-check-and-add": "^4.0.5",
58
58
  "react": "^19.0.0",