@docx-editor.dev/pro 2.1.1 → 2.1.3

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.
@@ -0,0 +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;
@@ -0,0 +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};
@@ -299,6 +299,17 @@ interface CustomNodeDefinition<Schema extends StandardSchemaV1 | undefined = any
299
299
  }) => {
300
300
  readonly title: string;
301
301
  readonly detail?: string;
302
+ /**
303
+ * Glyph for this node in the COLLAPSED rail, as an SVG path in a `0 -960 960 960`
304
+ * viewBox (a Material Symbol path is exactly this). Without one every marker in the
305
+ * gutter is the generic comment bubble, so a citation, a tracked deletion and a
306
+ * comment are indistinguishable until the pane is opened.
307
+ *
308
+ * HOST-AUTHORED. Unlike `title` and `detail`, this is not derived from `attrs` or
309
+ * `text`: it lands in an SVG `d` attribute, and a path out of a document would be
310
+ * attacker-controlled markup.
311
+ */
312
+ readonly icon?: string;
302
313
  } | null;
303
314
  /**
304
315
  * The "Edit {label}" row the context menu shows at the top when the
@@ -299,6 +299,17 @@ interface CustomNodeDefinition<Schema extends StandardSchemaV1 | undefined = any
299
299
  }) => {
300
300
  readonly title: string;
301
301
  readonly detail?: string;
302
+ /**
303
+ * Glyph for this node in the COLLAPSED rail, as an SVG path in a `0 -960 960 960`
304
+ * viewBox (a Material Symbol path is exactly this). Without one every marker in the
305
+ * gutter is the generic comment bubble, so a citation, a tracked deletion and a
306
+ * comment are indistinguishable until the pane is opened.
307
+ *
308
+ * HOST-AUTHORED. Unlike `title` and `detail`, this is not derived from `attrs` or
309
+ * `text`: it lands in an SVG `d` attribute, and a path out of a document would be
310
+ * attacker-controlled markup.
311
+ */
312
+ readonly icon?: string;
302
313
  } | null;
303
314
  /**
304
315
  * The "Edit {label}" row the context menu shows at the top when the
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var chunkMNK6DXJQ_cjs=require('./chunk-MNK6DXJQ.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(chunkMNK6DXJQ_cjs.j);if(t.length===0)return [];let s=r.session.part();return chunkMNK6DXJQ_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=chunkMNK6DXJQ_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(chunkMNK6DXJQ_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(chunkMNK6DXJQ_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(!chunkMNK6DXJQ_cjs.k.test(e.tagPrefix)||!chunkMNK6DXJQ_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=chunkMNK6DXJQ_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=chunkMNK6DXJQ_cjs.i(e,o.data);if(!t.ok)return {reason:t.reason};let s=chunkMNK6DXJQ_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},chunkMNK6DXJQ_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:`<${chunkMNK6DXJQ_cjs.g} xmlns="${a(s)}"><node id="${a(p)}">${l}<data>${a(t.data)}</data></node></${chunkMNK6DXJQ_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 chunkMNK6DXJQ_cjs.g}});Object.defineProperty(exports,"MAX_CUSTOM_NODE_DATA_LENGTH",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.d}});Object.defineProperty(exports,"MAX_TAG_LENGTH",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.a}});Object.defineProperty(exports,"customNodeNamespace",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.h}});Object.defineProperty(exports,"customNodesModule",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.m}});Object.defineProperty(exports,"decodeCustomNodeTag",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.c}});Object.defineProperty(exports,"defineCustomNode",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.l}});Object.defineProperty(exports,"encodeCustomNodeTag",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.b}});Object.defineProperty(exports,"insertCustomNode",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.p}});Object.defineProperty(exports,"isCustomNodeDefinition",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.j}});Object.defineProperty(exports,"parseCustomNodeData",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.e}});Object.defineProperty(exports,"recognizeCustomNodes",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.n}});Object.defineProperty(exports,"removeCustomNode",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.q}});Object.defineProperty(exports,"reviewModule",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.o}});Object.defineProperty(exports,"serializeCustomNodeData",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.f}});Object.defineProperty(exports,"updateCustomNode",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.r}});exports.customNodeXml=J;exports.customNodesOf=b;exports.prepareForExport=E;exports.saveForExport=V;
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;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { A as AnyCustomNodeDefinition, C as CustomNodeDiagnostic, R as RecognizedCustomNode, S as StandardSchemaV1, I as InferSchemaInput, a as CustomNodeDefinition } from './define-custom-node-BTTX66B3.cjs';
2
- export { b as ActivatedCustomNode, c as CustomNode, d as CustomNodeDataRejection, e as CustomNodeDataResult, f as CustomNodePayloadSource, g as CustomNodesModuleOptions, h as InferSchemaOutput, M as MAX_CUSTOM_NODE_DATA_LENGTH, P as ProLicenseOptions, i as RecognizeCustomNodesOptions, j as ReviewModuleOptions, k as StandardSchemaIssue, l as StandardSchemaResult, m as customNodesModule, n as defineCustomNode, o as isCustomNodeDefinition, p as parseCustomNodeData, r as recognizeCustomNodes, q as reviewModule, s as serializeCustomNodeData } from './define-custom-node-BTTX66B3.cjs';
1
+ import { A as AnyCustomNodeDefinition, C as CustomNodeDiagnostic, R as RecognizedCustomNode, S as StandardSchemaV1, I as InferSchemaInput, a as CustomNodeDefinition } from './define-custom-node-RznSCnPr.cjs';
2
+ export { b as ActivatedCustomNode, c as CustomNode, d as CustomNodeDataRejection, e as CustomNodeDataResult, f as CustomNodePayloadSource, g as CustomNodesModuleOptions, h as InferSchemaOutput, M as MAX_CUSTOM_NODE_DATA_LENGTH, P as ProLicenseOptions, i as RecognizeCustomNodesOptions, j as ReviewModuleOptions, k as StandardSchemaIssue, l as StandardSchemaResult, m as customNodesModule, n as defineCustomNode, o as isCustomNodeDefinition, p as parseCustomNodeData, r as recognizeCustomNodes, q as reviewModule, s as serializeCustomNodeData } from './define-custom-node-RznSCnPr.cjs';
3
3
  import { Editor, ExecResult } from '@docx-editor.dev/core/contracts/editor';
4
4
  import '@docx-editor.dev/core/editor';
5
5
  import '@docx-editor.dev/core/store';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { A as AnyCustomNodeDefinition, C as CustomNodeDiagnostic, R as RecognizedCustomNode, S as StandardSchemaV1, I as InferSchemaInput, a as CustomNodeDefinition } from './define-custom-node-BTTX66B3.js';
2
- export { b as ActivatedCustomNode, c as CustomNode, d as CustomNodeDataRejection, e as CustomNodeDataResult, f as CustomNodePayloadSource, g as CustomNodesModuleOptions, h as InferSchemaOutput, M as MAX_CUSTOM_NODE_DATA_LENGTH, P as ProLicenseOptions, i as RecognizeCustomNodesOptions, j as ReviewModuleOptions, k as StandardSchemaIssue, l as StandardSchemaResult, m as customNodesModule, n as defineCustomNode, o as isCustomNodeDefinition, p as parseCustomNodeData, r as recognizeCustomNodes, q as reviewModule, s as serializeCustomNodeData } from './define-custom-node-BTTX66B3.js';
1
+ import { A as AnyCustomNodeDefinition, C as CustomNodeDiagnostic, R as RecognizedCustomNode, S as StandardSchemaV1, I as InferSchemaInput, a as CustomNodeDefinition } from './define-custom-node-RznSCnPr.js';
2
+ export { b as ActivatedCustomNode, c as CustomNode, d as CustomNodeDataRejection, e as CustomNodeDataResult, f as CustomNodePayloadSource, g as CustomNodesModuleOptions, h as InferSchemaOutput, M as MAX_CUSTOM_NODE_DATA_LENGTH, P as ProLicenseOptions, i as RecognizeCustomNodesOptions, j as ReviewModuleOptions, k as StandardSchemaIssue, l as StandardSchemaResult, m as customNodesModule, n as defineCustomNode, o as isCustomNodeDefinition, p as parseCustomNodeData, r as recognizeCustomNodes, q as reviewModule, s as serializeCustomNodeData } from './define-custom-node-RznSCnPr.js';
3
3
  import { Editor, ExecResult } from '@docx-editor.dev/core/contracts/editor';
4
4
  import '@docx-editor.dev/core/editor';
5
5
  import '@docx-editor.dev/core/store';
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import {j,n,h,k,b as b$1,i,g,c}from'./chunk-FVI3MGO7.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-FVI3MGO7.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-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,2 +1,2 @@
1
- 'use strict';var chunkMNK6DXJQ_cjs=require('../chunk-MNK6DXJQ.cjs'),react=require('react'),react$1=require('@docx-editor.dev/react'),jsxRuntime=require('react/jsx-runtime'),store=require('@docx-editor.dev/core/store');function me(e){let i=react$1.useDocxEditor();return rt(i,e)}function rt(e,i){let l=react.useCallback(m=>{if(!e)return ()=>{};let b=e.on("change",m),T=e.on("selectionChange",m),N=e.on("error",m);return ()=>{b(),T(),N();}},[e]),r=react.useSyncExternalStore(l,()=>e?`${e.getReviewRevision()}`:"none",()=>"none"),t=react.useMemo(()=>e?e.getReviewItems(i).filter(m=>m.item.kind!=="custom"||m.item.carded):[],[e,r,i]),o=react.useMemo(()=>t.find(m=>m.isActive)?.key??null,[t]),n=react.useCallback(m=>{e?.setActiveReviewItem(m);},[e]),a=react.useCallback(m=>!e||m.kind!=="revision"||m.readOnly?false:e.acceptReviewItem(m.key).ok,[e]),d=react.useCallback(m=>!e||m.kind!=="revision"||m.readOnly?false:e.rejectReviewItem(m.key).ok,[e]),c=react.useCallback(m=>!e||m.kind==="custom"||m.kind==="revision"&&m.readOnly?false:e.deleteReviewItem(m.key).ok,[e]),p=react.useCallback((m,b,T)=>b.trim().length===0||!e?false:e.replyToReviewItem(m.key,b,T).ok,[e]),w=react.useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,r]),R=react.useCallback((m,b)=>m.trim().length===0||!e?false:e.addComment(m,b).ok,[e]),y=react.useMemo(()=>e?e.isReviewPaneOpen():true,[e,r]),u=react.useCallback(m=>{!e||e.isReviewPaneOpen()===m||e.exec({type:"toggleReviewPane"});},[e]);return react.useMemo(()=>({items:t,activeKey:o,setActive:n,accept:a,reject:d,remove:c,reply:p,selectionAnchorY:w,comment:R,paneOpen:y,setPaneOpen:u,ready:e!==null&&!e.snapshot().isLoading&&e.snapshot().parseError===null}),[t,o,n,a,d,c,p,w,R,y,u,e])}function Nt(e,i,l={}){let r=l.gap??8,t=l.scale??1,o=l.defaultHeight??0;return react.useMemo(()=>{let n=new Map,a=Number.NEGATIVE_INFINITY;for(let d of e){let c=d.anchorY===null?Number.isFinite(a)?a:0:Math.max(d.anchorY,a);n.set(d.key,c),a=c+((i.get(d.key)??o)+r)/t;}return n},[e,i,r,t,o])}var It=e=>e.isLoading||e.parseError!==null||e.pageSetup==null,Pe=react.createContext(null),k=react.createContext(null);function Tt(){return react.useContext(k)}var Mt={scale:96/72,top:0,left:null},Dt=16,ve="\0compose",it=600,st=8,St=72,Lt=64,Ot=480,$t=Object.freeze({placement:false});function ke(e,i){return e.kind!=="comment"?false:e.parentId!==void 0?i.has(e.parentId):e.parentRevisionId!==void 0?i.has(e.parentRevisionId):false}function Ae(e){return new Set(e.map(i=>i.id))}function U(e){let i=e.target?.tagName;i==="INPUT"||i==="SELECT"||i==="TEXTAREA"||e.preventDefault();}function $(){let e=react.useContext(Pe);return e||Ht}function B(){let{t:e}=react.useContext(Pe)??{},{t:i}=react$1.useTranslation();return react.useCallback(l=>e?.(l)??i(l),[e,i])}var Ht={t:void 0,cardClassName:void 0,review:{items:[],activeKey:null,setActive:()=>{},accept:()=>false,reject:()=>false,remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}},oe=e=>jsxRuntime.jsx("svg",{viewBox:"0 -960 960 960",width:16,height:16,"aria-hidden":"true",focusable:"false",children:jsxRuntime.jsx("path",{d:e,fill:"currentColor"})}),Vt="M440-400h80v-120h120v-80H520v-120h-80v120H320v80h120v120ZM80-80v-720q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H240L80-80Zm126-240h594v-480H160v525l46-45Zm-46 0v-480 480Z",Kt="M240-400h480v-80H240v80Zm0-120h480v-80H240v80Zm0-120h480v-80H240v80ZM880-80 720-240H160q-33 0-56.5-23.5T80-320v-480q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v720ZM160-320h594l46 45v-525H160v480Zm0 0v-480 480Z",Yt="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",Bt="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z",jt="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z";function Ft({className:e,furniture:i,asChild:l,hidden:r,children:t,t:o,card:n,preset:a=true,stack:d=true,gap:c=8,filter:p,structural:w=false,formatting:R=false}){let y=react$1.useDocxEditor(),u=react$1.useEditorState(It),m=react.useMemo(()=>{let f=[];return w||f.push("structural"),R||f.push("format"),f.length>0?f:void 0},[w,R]),b=react.useMemo(()=>m?{excludeRevisionKinds:m}:void 0,[m]);react.useEffect(()=>(y?.setReviewActivationExclusions(m??null),()=>y?.setReviewActivationExclusions(null)),[y,m]);let T=me($t),N=me(b),E=N.setPaneOpen,{t:C}=react$1.useTranslation(),P=react.useCallback(f=>o?.(f)??C(f),[o,C]),D=react.useRef(null),de=react.useContext(react$1.ReviewRailContext);react.useEffect(()=>de?.register(),[de]);let j=N.paneOpen,I=react.useMemo(()=>p?N.items.filter(f=>p(f)):N.items,[N.items,p]),Ke=react.useMemo(()=>{let f=new Map;for(let v of I)v.author&&!f.has(v.author)&&f.set(v.author,f.size);return f},[I]),Ye=react.useMemo(()=>{let f=new Map;for(let v of I)f.set(v.id,v);return f},[I]),[Be,pt]=react.useState(()=>new Map),ye=react.useCallback((f,v)=>{v<=0||pt(x=>{if(x.get(f)===v)return x;let _=new Map(x);return _.set(f,v),_});},[]),be=react.useRef(new WeakMap),ee=react.useRef(null),je=react.useCallback((f,v)=>{!f||typeof ResizeObserver>"u"||(ye(v,f.offsetHeight),ee.current??(ee.current=new ResizeObserver(x=>{for(let _ of x){let h=be.current.get(_.target);h&&ye(h,_.target.offsetHeight);}})),be.current.get(f)!==v&&(be.current.set(f,v),ee.current.observe(f)));},[ye]);react.useEffect(()=>()=>ee.current?.disconnect(),[]);let[S,wt]=react.useState(Mt);react.useEffect(()=>{let f=D.current;if(!y||!f)return;let v=f.offsetParent,x=v?.querySelector(".docx-paginated-surface")??null,_=()=>{wt(M=>{let H=x&&v?x.getBoundingClientRect():null,O=H&&v?v.getBoundingClientRect():null,V={scale:y.getRenderScale(),top:H&&O&&v?H.top-O.top-v.clientTop+v.scrollTop:0,left:H&&O&&v?H.right-O.left-v.clientLeft+v.scrollLeft+Dt:null};return M.scale===V.scale&&M.top===V.top&&M.left===V.left?M:V});};_();let h=new ResizeObserver(_);return v&&h.observe(v),x&&h.observe(x),()=>h.disconnect()},[y,I,u,r]),react.useEffect(()=>{let f=D.current;if(!y||!f)return;let v=x=>{let _=x.target;if(!(_ instanceof Node)||f.contains(_))return;let h=f.offsetParent;!h||!h.contains(_)||h.querySelector(".docx-paginated-surface")?.contains(_)||y.setActiveReviewItem(null);};return document.addEventListener("mousedown",v,true),()=>document.removeEventListener("mousedown",v,true)},[y,u,r]);let[xe,Rt]=react.useState(null);react.useEffect(()=>{let f=D.current,v=f?.offsetParent;if(!v)return;let x=0,_=()=>{x=0,Rt(O=>{let V=v.scrollTop-it,ue=v.scrollTop+v.clientHeight+it;return O&&O.top===V&&O.bottom===ue?O:{top:V,bottom:ue}});},h=0,M=()=>{x===0&&(x=requestAnimationFrame(_)),f?.setAttribute("data-scrolling",""),window.clearTimeout(h),h=window.setTimeout(()=>f?.removeAttribute("data-scrolling"),150);};_(),v.addEventListener("scroll",M,{passive:true});let H=new ResizeObserver(M);return H.observe(v),()=>{x!==0&&cancelAnimationFrame(x),window.clearTimeout(h),v.removeEventListener("scroll",M),H.disconnect();}},[y,u,r]);let[F,ge]=react.useState(null),Fe=react.useCallback(()=>{y&&(y.surface?.retainSelection(),E(true),ge(y.getSelectionPlacement()?.anchorY??null));},[y,E]),Ze=react.useCallback(()=>{y?.surface?.releaseSelection(),ge(null),y?.focus();},[y]);react.useEffect(()=>{j||F===null||(y?.surface?.releaseSelection(),ge(null));},[j,F,y]);let Ue=F??N.selectionAnchorY,q=react.useMemo(()=>{let f=Ae(I);return I.filter(v=>!ke(v,f))},[I]),qe=react.useMemo(()=>{if(F===null)return q;let f=q.findIndex(x=>x.anchorY!==null&&x.anchorY>F),v={key:ve,anchorY:F};return f===-1?[...q,v]:[...q.slice(0,f),v,...q.slice(f)]},[q,F]),ze=react.useMemo(()=>{let f=new Map(Be);for(let v of q){if(f.has(v.key))continue;let x=v.text.length+(v.kind==="revision"?v.replacedText?.length??0:0),_=Math.min(6,Math.max(1,Math.ceil(x/36)));f.set(v.key,64+_*20);}return f},[Be,q]),{stacked:he,collapsedKeys:Qe}=react.useMemo(()=>{let f=S.scale,v=new Map,x=new Set,_=Number.NEGATIVE_INFINITY;for(let h of qe){let M=h.anchorY===null?Number.isFinite(_)?_:0:Math.max(h.anchorY,_);v.set(h.key,M);let H=h.anchorY===null?0:(M-h.anchorY)*f,O="isActive"in h&&h.isActive,V=H>Ot&&!O&&h.key!==ve;V&&x.add(h.key);let ue=V?Lt:ze.get(h.key)??St;_=M+(ue+c)/f;}return {stacked:v,collapsedKeys:x}},[qe,ze,c,S.scale]),Ne=Ue===null?null:S.top+(he.get(ve)??Ue)*S.scale,Ge=n?.className,yt=react.useMemo(()=>({t:o,cardClassName:Ge,review:{...N,items:I},allItems:T.items,authorSlots:Ke,byId:Ye,measure:je,beginDraft:Fe,endDraft:Ze}),[o,Ge,N,T.items,I,Ke,Ye,je,Fe,Ze]);if(r||u)return null;let We={ref:D,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":I.length,"data-open":j?"":void 0,role:"complementary","aria-label":P("review.ariaLabel"),onMouseDown:U,style:S.left===null?void 0:{left:S.left,right:"auto"}},Xe=typeof t=="function"?{}:lt(t),te=(f,v)=>f in Xe?Xe[f]:v,Je=a?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[te("AddComment",jsxRuntime.jsx(Te,{top:Ne,drafting:F!==null})),!j||F===null||Ne===null?null:te("Draft",jsxRuntime.jsx(Me,{top:Ne})),te("Balloon",jsxRuntime.jsx(De,{}))]}):null,bt=a?j?te("List",jsxRuntime.jsx(fe,{stack:d,positions:he,collapsed:Qe,scale:S.scale,offset:S.top,window:xe,children:t})):te("Markers",jsxRuntime.jsx(Ie,{scale:S.scale,offset:S.top,window:xe})):typeof t=="function"?null:t;return jsxRuntime.jsx(Pe.Provider,{value:yt,children:l&&react.isValidElement(t)?jsxRuntime.jsx(react$1.Slot,{...We,children:react.cloneElement(t,void 0,t.props.children,a?jsxRuntime.jsx(fe,{stack:d,positions:he,collapsed:Qe,scale:S.scale,offset:S.top,window:xe}):null,Je)}):jsxRuntime.jsxs("aside",{...We,children:[j&&i!==void 0?jsxRuntime.jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:i}):null,bt,Je]})})}function fe({stack:e=true,positions:i,collapsed:l,scale:r=1,offset:t=0,window:o=null,children:n,className:a,hidden:d}){let{review:c,measure:p,cardClassName:w}=$();if(d)return null;let R=Ae(c.items),y=c.items.filter(u=>!ke(u,R));return y.length===0?typeof n=="function"?null:jsxRuntime.jsx(Se,{}):jsxRuntime.jsx("div",{className:`docx-review__list${a?` ${a}`:""}`,children:y.map(u=>{let m=e?i?.get(u.key)??u.anchorY:u.anchorY,b=m==null?null:t+m*r;if(b!==null&&o&&(b<o.top||b>o.bottom))return null;let T=b===null?{}:{position:"absolute",top:b};return jsxRuntime.jsx(k.Provider,{value:u,children:jsxRuntime.jsx("div",{className:"docx-review__slot",style:T,...l?.has(u.key)?{"data-collapsed":""}:{},ref:N=>{p(N,u.key);},children:typeof n=="function"?n(u):jsxRuntime.jsx(Le,{...w?{className:w}:{},children:n})})},u.key)})})}fe.docxReviewPart="List";function Ie({scale:e=1,offset:i=0,window:l=null,className:r,hidden:t}){let{review:o}=$(),n=B();if(t)return null;let a=Ae(o.items),d=o.items.filter(c=>!ke(c,a));return jsxRuntime.jsx("div",{className:`docx-review__markers${r?` ${r}`:""}`,children:d.map(c=>{if(c.anchorY===null)return null;let p=i+c.anchorY*e;return l&&(p<l.top||p>l.bottom)?null:jsxRuntime.jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":c.kind==="revision"?c.revisionKind:c.kind,style:{position:"absolute",top:p},title:c.author?`${c.author}: ${c.text}`:c.text,"aria-label":`${n("review.showPane")}: ${c.author?`${c.author}. `:""}${c.text}`,onMouseDown:U,onClick:()=>{o.setPaneOpen(true),o.setActive(c.key);},children:oe(Kt)},c.key)})})}Ie.docxReviewPart="Markers";function Te({top:e,drafting:i=false,className:l,hidden:r,children:t}){let{beginDraft:o}=$(),n=B();if(r||i||e===null)return null;let a={type:"button",className:`docx-review__add${l?` ${l}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":n("common.comment"),title:n("common.comment"),onMouseDown:U,onClick:o};return t?jsxRuntime.jsx(react$1.Slot,{...a,children:t}):jsxRuntime.jsx("button",{...a,children:oe(Vt)})}Te.docxReviewPart="AddComment";function Me({top:e,className:i,hidden:l}){let{review:r,endDraft:t,measure:o}=$(),n=B(),[a,d]=react.useState(""),[c,p]=react.useState(false),w=react.useRef(null),R=react.useId();react.useEffect(()=>{w.current?.focus({preventScroll:true});},[]);let y=react.useCallback(()=>{if(a.trim().length===0)return;let u=r.comment(a.trim());p(!u),u&&(d(""),t());},[a,r,t]);return l?null:jsxRuntime.jsx("div",{className:`docx-review__slot${i?` ${i}`:""}`,style:{position:"absolute",top:e},ref:u=>{o(u,ve);},children:jsxRuntime.jsx("div",{className:"docx-review__card","data-testid":"review-draft","data-draft":"",children:jsxRuntime.jsxs("form",{className:"docx-review__reply-box",onSubmit:u=>{u.preventDefault(),y();},children:[jsxRuntime.jsx("label",{className:"docx-editor-sr-only",htmlFor:R,children:n("comments.addComment")}),jsxRuntime.jsx("input",{id:R,ref:w,"data-testid":"review-draft-input",className:"docx-review__input",value:a,placeholder:n("comments.addComment"),...c?{"aria-invalid":true}:{},onChange:u=>{p(false),d(u.target.value);},onKeyDown:u=>{if(u.key==="Escape"){u.preventDefault(),t();return}u.key==="Enter"&&(u.preventDefault(),y());}}),jsxRuntime.jsxs("div",{className:"docx-review__reply-actions",children:[jsxRuntime.jsx("button",{type:"button","data-testid":"review-draft-cancel",className:"docx-review__text-button",onMouseDown:U,onClick:t,children:n("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:a.trim().length===0,children:n("common.comment")})]}),c?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert",children:n("review.commentRefused")}):null]})})})}Me.docxReviewPart="Draft";function De({className:e,hidden:i}){let{review:l,allItems:r,authorSlots:t}=$(),o=B(),n=react.useRef(null),[a,d]=react.useState(null),c=react.useRef(false);c.current=a!==null,react.useEffect(()=>{let u=n.current,m=u?.closest(".docx-review"),b=m?.closest(".docx-editor__scroll-container")??m?.offsetParent;if(!u||!m||!b)return;let T=(E,C)=>{let P=m.getBoundingClientRect(),D=E.getBoundingClientRect(),de=E.ownerDocument.defaultView?.innerHeight??1/0,j=Number(E.dataset.start),I=Number(E.dataset.end);d({revisionId:E.dataset.revisionId,author:E.dataset.revisionAuthor??"",...E.dataset.revisionDate!==void 0?{date:E.dataset.revisionDate}:{},...E.dataset.revisionKind!==void 0?{kind:E.dataset.revisionKind}:{},structuralSite:C,...E.dataset.paragraphId!==void 0?{paragraphId:E.dataset.paragraphId}:{},...Number.isFinite(j)?{start:j}:{},...Number.isFinite(I)?{end:I}:{},left:D.left-P.left,top:D.top-P.top,bottom:D.bottom-P.top,above:D.bottom+220>de});},N=E=>{let C=E.target;if(!(C instanceof Element)||u.contains(C))return;let P=C.closest("[data-revision-id]");if(P instanceof HTMLElement&&b.contains(P)){let D=P.classList.contains("docx-table-row--revision");if(P.dataset.revisionKind==="format"||D){T(P,D);return}}c.current&&d(null);};return b.addEventListener("pointerdown",N,true),b.addEventListener("mousedown",N,true),()=>{b.removeEventListener("pointerdown",N,true),b.removeEventListener("mousedown",N,true);}},[]);let p=react.useMemo(()=>{if(!a)return null;let u=null,m=false,b=null,T=false,N=null,E=false;for(let C of r)if(!(C.kind!=="revision"||C.item.kind!=="revision")){for(let P of C.item.addresses)if(P.id===a.revisionId){if(P.author===a.author){if(P.date===a.date)return C;u===null?u=C:u!==C&&(m=true);}b===null?b=C:b!==C&&(T=true);}if(a.paragraphId!==void 0&&a.start!==void 0&&a.end!==void 0&&(C.revisionKind==="format"||C.revisionKind==="structural")){for(let P of C.item.ranges)if(P.start.paragraphId===a.paragraphId&&P.start.offset<a.end&&P.end.offset>a.start){N===null?N=C:N!==C&&(E=true);break}}}return u!==null&&!m?u:b!==null&&!T?b:N!==null&&!E?N:null},[r,a]),w=p&&(p.revisionKind==="format"||p.revisionKind==="structural")?p:null,R=react.useRef(false);if(react.useEffect(()=>{if(w){R.current=true;return}R.current&&(R.current=false,d(null));},[w]),i)return null;let y=a?.kind==="format"?"format":"structural";return jsxRuntime.jsx("div",{ref:n,className:`docx-review__balloon-root${e?` ${e}`:""}`,children:a===null?null:jsxRuntime.jsx("div",{className:"docx-review__balloon","data-testid":"review-balloon",style:{left:a.left,top:a.above?a.top-6:a.bottom+6,transform:a.above?"translateY(-100%)":void 0},onMouseDown:U,children:w?jsxRuntime.jsx(k.Provider,{value:w,children:jsxRuntime.jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":w.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(t.get(w.author)??0)%st})`},onClick:()=>l.setActive(w.key),children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(re,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(ie,{}),jsxRuntime.jsx(ae,{})]}),w.kind==="revision"&&!w.readOnly?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[jsxRuntime.jsx(pe,{}),jsxRuntime.jsx(we,{})]}):null]}),jsxRuntime.jsx(se,{})]})}):jsxRuntime.jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":y,children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx("span",{className:"docx-review__avatar","aria-hidden":"true",children:Zt(a.author)}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx("span",{className:"docx-review__author",children:a.author||o("comments.unknown")}),a.date?jsxRuntime.jsx(Ut,{raw:a.date}):null]})]}),jsxRuntime.jsx("div",{className:"docx-review__summary",children:jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":y,children:o(dt(y))})})]})})})}De.docxReviewPart="Balloon";function Zt(e){let i=e.trim().split(/\s+/).filter(Boolean);return i.length===0?"?":i.slice(0,2).map(l=>l[0].toUpperCase()).join("")}function Ut({raw:e}){let i=new Date(e);return Number.isNaN(i.getTime())?null:jsxRuntime.jsx("time",{className:"docx-review__time",dateTime:e,children:ct.format(i)})}function Se({className:e,hidden:i,children:l}){let r=B();return i?null:jsxRuntime.jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:l??r("review.empty")})}Se.docxReviewPart="Empty";function Le({className:e,asChild:i,hidden:l,children:r}){let{review:t,authorSlots:o}=$(),n=react.useContext(k),a=react.useId();if(l||!n)return null;let d=o.get(n.author)??0,c={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${a}-author ${a}-summary`,"data-kind":n.kind==="revision"?n.revisionKind??"revision":n.kind,...n.kind==="custom"&&n.item.kind==="custom"?{"data-node-name":n.item.name}:{},...n.isActive?{"data-active":""}:{},...n.kind==="comment"&&n.resolved?{"data-resolved":""}:{},style:{"--doc-review-author":`var(--doc-review-author-${d%st})`},tabIndex:0,role:"button",id:a,onMouseDown:p=>{p.target?.closest("[data-review-selectable]")||p.currentTarget.focus({preventScroll:true});},onClick:()=>t.setActive(n.key),onKeyDown:p=>{p.target===p.currentTarget&&(p.key!=="Enter"&&p.key!==" "||(p.preventDefault(),t.setActive(n.key)));}};return i?jsxRuntime.jsx(react$1.Slot,{...c,children:r}):jsxRuntime.jsx("div",{...c,children:jsxRuntime.jsx(qt,{children:r})})}Le.docxReviewPart="Card";function qt({children:e}){let i=react.useContext(k),l=react.useMemo(()=>lt(e),[e]),r=(o,n)=>o in l?l[o]:n;if(!i)return null;if(i.kind==="custom"&&i.item.kind==="custom"){let o=i.item;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[r("Avatar",null),jsxRuntime.jsx("div",{className:"docx-review__meta",children:r("Author",jsxRuntime.jsx("span",{className:"docx-review__author","data-testid":"review-custom-title",children:o.title}))})]}),r("Summary",o.detail?jsxRuntime.jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsxRuntime.jsx("span",{className:"docx-review__text",children:o.detail})}):null),l.__extra]})}let t=i.kind==="revision"&&!i.readOnly;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[r("Avatar",jsxRuntime.jsx(re,{})),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[r("Author",jsxRuntime.jsx(ie,{})),r("Time",jsxRuntime.jsx(ae,{}))]}),t||i.kind==="comment"?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[r("Accept",jsxRuntime.jsx(pe,{})),r("Reject",jsxRuntime.jsx(we,{})),r("Delete",jsxRuntime.jsx(Re,{}))]}):null]}),r("Summary",jsxRuntime.jsx(se,{})),r("Replies",jsxRuntime.jsx(Oe,{})),r("Reply",jsxRuntime.jsx($e,{})),l.__extra]})}function lt(e){let i={},l=[],r=t=>{if(Array.isArray(t)){t.forEach(r);return}if(!t||typeof t!="object"||!("type"in t)){t&&l.push(t);return}if(t.type===react.Fragment){r(t.props.children);return}let o=t.type.docxReviewPart;o?i[o]=t:l.push(t);};return r(e),l.length>0&&(i.__extra=l),i}function re({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(k);if(l||!t||r===void 0&&!t.initials)return null;let o={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return i?jsxRuntime.jsx(react$1.Slot,{...o,children:r}):jsxRuntime.jsx("span",{...o,children:r??t.initials})}re.docxReviewPart="Avatar";function ie({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(k),o=B();if(l||!t)return null;let n=t.author||o("comments.unknown"),a={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return i?jsxRuntime.jsx(react$1.Slot,{...a,children:r}):jsxRuntime.jsx("span",{...a,children:r??n})}ie.docxReviewPart="Author";function ae({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(k);if(l||!t)return null;let o=t.date;if(!o)return null;let n=new Date(o);if(Number.isNaN(n.getTime()))return null;let a={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:o};return i?jsxRuntime.jsx(react$1.Slot,{...a,children:r}):jsxRuntime.jsx("time",{...a,children:r??ct.format(n)})}ae.docxReviewPart="Time";var ct=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function se({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(k),o=B();if(l||!t)return null;let n=t.text,a=t.kind!=="revision"?null:o(dt(t.revisionKind)),d=t.kind==="revision"&&t.revisionKind==="replace",c={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return i?jsxRuntime.jsx(react$1.Slot,{...c,children:r}):jsxRuntime.jsx("div",{...c,children:r??(d?jsxRuntime.jsxs("span",{className:"docx-review__text",children:[o("review.replaced")," ",jsxRuntime.jsxs("span",{className:"docx-review__removed",children:['"',t.replacedText,'"']})," ",o("review.replacedWith")," ",jsxRuntime.jsxs("span",{className:"docx-review__added",children:['"',n,'"']})]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[a?jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":t.kind==="revision"?t.revisionKind:"revision",children:a}):null,n?jsxRuntime.jsx("span",{className:"docx-review__text",children:n}):null]}))})}se.docxReviewPart="Summary";function dt(e){switch(e){case "insert":return "review.inserted";case "delete":return "review.deleted";case "replace":return "review.replaced";case "moveFrom":return "review.movedFrom";case "moveTo":return "review.movedTo";case "format":return "revisions.runPropertiesChanged";case "paragraphMark":return "revisions.paragraphMarkInserted";default:return "review.structural"}}function pe({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=react.useContext(k),a=B();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.accept"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.accept(n);}};return i?jsxRuntime.jsx(react$1.Slot,{...c,children:r}):jsxRuntime.jsx("button",{...c,children:t??r??oe(Yt)})}pe.docxReviewPart="Accept";function we({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=react.useContext(k),a=B();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.reject"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.reject(n);}};return i?jsxRuntime.jsx(react$1.Slot,{...c,children:r}):jsxRuntime.jsx("button",{...c,children:t??r??oe(Bt)})}we.docxReviewPart="Reject";function Re({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=react.useContext(k),{t:a}=react$1.useTranslation();if(l||!n||n.kind==="custom"||n.kind==="revision"&&n.readOnly)return null;let d=n.kind==="comment"?a("review.deleteComment"):a("review.discardChange"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.remove(n);}};return i?jsxRuntime.jsx(react$1.Slot,{...c,children:r}):jsxRuntime.jsx("button",{...c,children:t??r??oe(jt)})}Re.docxReviewPart="Delete";function Oe({className:e,hidden:i}){let{byId:l}=$(),r=react.useContext(k);if(i||!r||r.kind==="custom")return null;let t=r.replyIds.map(o=>l.get(o)).filter(o=>o!==void 0);return t.length===0?null:jsxRuntime.jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:t.map(o=>jsxRuntime.jsx(k.Provider,{value:o,children:jsxRuntime.jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(re,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(ie,{}),jsxRuntime.jsx(ae,{})]}),jsxRuntime.jsx("div",{className:"docx-review__actions",children:jsxRuntime.jsx(Re,{})})]}),jsxRuntime.jsx(se,{})]})},o.key))})}Oe.docxReviewPart="Replies";function $e({className:e,hidden:i,children:l}){let{review:r}=$(),t=react.useContext(k),o=B(),[n,a]=react.useState(""),[d,c]=react.useState(false),p=react.useId(),w=react.useCallback(()=>{if(!t||n.trim().length===0)return;let R=r.reply(t,n.trim());c(!R),R&&a("");},[t,n,r]);return i||!t||!t.isActive?null:l?jsxRuntime.jsx(jsxRuntime.Fragment,{children:l}):jsxRuntime.jsxs("form",{className:`docx-review__reply-box${e?` ${e}`:""}`,onSubmit:R=>{R.preventDefault(),w();},children:[jsxRuntime.jsx("label",{className:"docx-editor-sr-only",htmlFor:p,children:o("comments.replyPlaceholder")}),jsxRuntime.jsx("input",{id:p,"data-testid":"review-reply-input",className:"docx-review__input",value:n,placeholder:o("comments.replyPlaceholder"),...d?{"aria-invalid":true,"data-refused":""}:{},onChange:R=>{c(false),a(R.target.value);},onClick:R=>R.stopPropagation(),onKeyDown:R=>{R.key==="Enter"&&(R.preventDefault(),w());}}),jsxRuntime.jsxs("div",{className:"docx-review__reply-actions",children:[jsxRuntime.jsx("button",{type:"button","data-testid":"review-reply-cancel",className:"docx-review__text-button",onMouseDown:U,onClick:R=>{R.stopPropagation(),a(""),c(false),r.setActive(null);},children:o("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:n.trim().length===0,children:o("review.reply")})]}),d?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:o("review.replyRefused")}):null]})}$e.docxReviewPart="Reply";var zt=Object.assign(Ft,{List:fe,Empty:Se,Card:Le,Avatar:re,Author:ie,Time:ae,Summary:se,Accept:pe,Reject:we,Delete:Re,Replies:Oe,Reply:$e,Markers:Ie,AddComment:Te,Draft:Me,Balloon:De});function le(e){let i=react$1.useDocxEditor();return react.useMemo(()=>e||(i?.getCustomNodeDefinitions()??[]).filter(chunkMNK6DXJQ_cjs.j),[e,i])}var Xt=".docx-content-control-boundary";function X(e,i){let{node:l,definition:r,controlId:t}=e,o=t?i?.getReviewItems().find(d=>d.kind==="custom"&&d.item.id===t):void 0;if(o&&o.kind==="custom"){let d=o.item;return {...l,attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data},...t?{nodeId:t}:{}}}let n=t?Jt(i,t,r):void 0,a=r.fromDocx?r.fromDocx({attrs:l.attrs,text:"",...n===void 0?{}:{data:n}}):l.attrs;return a===null?null:{...l,attrs:a,...n===void 0?{}:{data:n},...t?{nodeId:t}:{}}}function Jt(e,i,l){let r=e?.surface;if(!r)return;let t=r.session.part(),o=store.customNodePayloadsByControl(r.session.currentPackage(),t.name).get(i);if(!o)return;let n=chunkMNK6DXJQ_cjs.e(l.schema,o.data);return n.ok?n.value:void 0}function J(e,i){let l=e?.closest?.(Xt),r=l?.closest(".docx-content-control-chrome"),t=r?.getAttribute("data-tag"),o=t?chunkMNK6DXJQ_cjs.c(t):null;if(!l||!o||!t)return null;let n=i.find(a=>a.tagPrefix===o.prefix&&a.name===o.name);return n?{node:{name:o.name,attrs:o.attrs,tag:t,rect:l.getBoundingClientRect()},definition:n,controlId:r?.getAttribute("data-docx-content-control")??null}:null}var He=".docx-content-control-boundary",tn=e=>{if(!chunkMNK6DXJQ_cjs.k.test(e.tagPrefix)||!chunkMNK6DXJQ_cjs.k.test(e.name))return [];let i=`${e.tagPrefix}:${e.name}`;return [`.docx-content-control-chrome[data-tag="${i}"]`,`.docx-content-control-chrome[data-tag^="${i}?"]`]};function nn(e){let{onNodeClick:i,onNodeHover:l}=e,r=react$1.useDocxEditor(),t=le(e.nodes);return react.useEffect(()=>{let o=document.createElement("style"),n=[];for(let a of t){let d=tn(a);if(d.length===0)continue;let c=a.chrome?.color!==void 0&&CSS.supports("color",a.chrome.color)?a.chrome.color:"#2563eb";n.push(`${d.map(p=>`${p} ${He}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${c} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return o.textContent=n.join(`
2
- `),document.head.append(o),()=>o.remove()},[t]),react.useEffect(()=>{let o=null,n=null,a=w=>J(document.elementFromPoint(w.clientX,w.clientY),t),d=w=>{let R=w.button===0?a(w):null;o=R?.controlId??null,n=R?.node.tag??null;},c=w=>{let R=o,y=n;if(o=null,n=null,y===null)return;let u=a(w);if(!u||u.node.tag!==y||R!==null&&u.controlId!==R)return;let m=X(u,r);m&&(u.definition.onClick?.(m),i?.(m));},p=w=>{let R=J(w.target,t);if(!R||w.relatedTarget?.closest?.(He)===w.target.closest(He))return;let u=X(R,r);u&&(R.definition.onHover?.(u),l?.(u));};return document.addEventListener("pointerdown",d,true),document.addEventListener("pointerup",c,true),document.addEventListener("mouseover",p),()=>{document.removeEventListener("pointerdown",d,true),document.removeEventListener("pointerup",c,true),document.removeEventListener("mouseover",p);}},[t,r,i,l]),null}function ft(e){let{onEditNode:i,onRemoveRefused:l,remove:r=true}=e,t=le(e.nodes),o=react$1.useContextMenuTarget(),n=react$1.useDocxEditor(),{t:a}=react$1.useTranslation(),d=react.useMemo(()=>o?J(o,t):null,[o,t]),c=react.useMemo(()=>d?X(d,n):null,[d,n]),p=react.useMemo(()=>!d?.definition.reviewCard||!c?null:d.definition.reviewCard({attrs:c.attrs,text:c.text??"",...c.data===void 0?{}:{data:c.data}}),[d,c]);if(!d||!c)return null;let{definition:w}=d,R=w.label??w.name,y=w.onEdit!==void 0||i!==void 0,u=r&&c.nodeId!==void 0&&n!==null;return !p&&!y&&!u?null:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[p?jsxRuntime.jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-title",children:p.title}),p.detail?jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-detail",children:p.detail}):null]}):null,y?jsxRuntime.jsx(react$1.ContextMenuItem,{label:a("contextMenu.editCustomNode",{label:R}),className:"docx-contextmenu__custom-edit",onSelect:()=>{w.onEdit?.(c),i?.(c,w);}}):null,u?jsxRuntime.jsx(react$1.ContextMenuItem,{label:a("contextMenu.removeCustomNode",{label:R}),className:"docx-contextmenu__custom-remove",onSelect:()=>{let m=chunkMNK6DXJQ_cjs.q(n,c.nodeId);m.ok||l?.(c,m.reason);}}):null,jsxRuntime.jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}ft.docxRowPlacement="start";Object.defineProperty(exports,"reviewModule",{enumerable:true,get:function(){return chunkMNK6DXJQ_cjs.o}});exports.CustomNodeChrome=nn;exports.CustomNodeContextMenu=ft;exports.DocxEditorReview=zt;exports.activatedCustomNodeOf=X;exports.resolveCustomNodeActivation=J;exports.useCustomNodeDefinitions=le;exports.useReview=me;exports.useReviewItem=Tt;exports.useReviewOf=rt;exports.useStackedReviewPositions=Nt;
1
+ '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');function me(e){let i=react$1.useDocxEditor();return it(i,e)}function it(e,i){let l=react.useCallback(f=>{if(!e)return ()=>{};let x=e.on("change",f),A=e.on("selectionChange",f),N=e.on("error",f);return ()=>{x(),A(),N();}},[e]),r=react.useSyncExternalStore(l,()=>e?`${e.getReviewRevision()}`:"none",()=>"none"),t=react.useMemo(()=>e?e.getReviewItems(i).filter(f=>f.item.kind!=="custom"||f.item.carded):[],[e,r,i]),o=react.useMemo(()=>t.find(f=>f.isActive)?.key??null,[t]),n=react.useCallback((f,x)=>e?e.setActiveReviewItem(f,x).ok:false,[e]),a=react.useCallback(f=>!e||f.kind!=="revision"||f.readOnly?false:e.acceptReviewItem(f.key).ok,[e]),d=react.useCallback(f=>!e||f.kind!=="revision"||f.readOnly?false:e.rejectReviewItem(f.key).ok,[e]),u=react.useCallback(f=>!e||f.kind==="custom"||f.kind==="revision"&&f.readOnly?false:e.deleteReviewItem(f.key).ok,[e]),c=react.useCallback((f,x,A)=>x.trim().length===0||!e?false:e.replyToReviewItem(f.key,x,A).ok,[e]),w=react.useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,r]),R=react.useCallback((f,x)=>f.trim().length===0||!e?false:e.addComment(f,x).ok,[e]),y=react.useMemo(()=>e?e.isReviewPaneOpen():true,[e,r]),v=react.useCallback(f=>{!e||e.isReviewPaneOpen()===f||e.exec({type:"toggleReviewPane"});},[e]);return react.useMemo(()=>({items:t,activeKey:o,setActive:n,accept:a,reject:d,remove:u,reply:c,selectionAnchorY:w,comment:R,paneOpen:y,setPaneOpen:v,ready:e!==null&&!e.snapshot().isLoading&&e.snapshot().parseError===null}),[t,o,n,a,d,u,c,w,R,y,v,e])}function Mt(e,i,l={}){let r=l.gap??8,t=l.scale??1,o=l.defaultHeight??0;return react.useMemo(()=>{let n=new Map,a=Number.NEGATIVE_INFINITY;for(let d of e){let u=d.anchorY===null?Number.isFinite(a)?a:0:Math.max(d.anchorY,a);n.set(d.key,u),a=u+((i.get(d.key)??o)+r)/t;}return n},[e,i,r,t,o])}var X=e=>jsxRuntime.jsx("svg",{viewBox:"0 -960 960 960",width:16,height:16,"aria-hidden":"true",focusable:"false",children:jsxRuntime.jsx("path",{d:e,fill:"currentColor"})}),lt="M440-400h80v-120h120v-80H520v-120h-80v120H320v80h120v120ZM80-80v-720q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H240L80-80Zm126-240h594v-480H160v525l46-45Zm-46 0v-480 480Z",at="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",ct="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",dt="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",ut="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",Dt="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",St="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",Ot="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",Lt="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 mt(e){if(e.kind==="comment")return at;if(e.kind==="custom")return e.item.icon??Lt;switch(e.revisionKind){case "insert":case "moveTo":return Dt;case "delete":case "moveFrom":return St;case "format":return Ot;default:return at}}var Kt=e=>e.isLoading||e.parseError!==null||e.pageSetup==null,Ie=react.createContext(null),I=react.createContext(null);function Yt(){return react.useContext(I)}var Zt={scale:96/72,top:0,left:null},Bt=16,ve="\0compose",ft=600,wt=8,Ft=72,jt=64,Ut=480,zt=Object.freeze({placement:false});function Pe(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 ke(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 H(){let e=react.useContext(Ie);return e||Qt}function Y(){let{t:e}=react.useContext(Ie)??{},{t:i}=react$1.useTranslation();return react.useCallback(l=>e?.(l)??i(l),[e,i])}var Qt={t:void 0,cardClassName:void 0,review:{items:[],activeKey:null,setActive:()=>false,accept:()=>false,reject:()=>false,remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}};function Gt({className:e,furniture:i,asChild:l,hidden:r,children:t,t:o,card:n,preset:a=true,stack:d=true,gap:u=8,filter:c,structural:w=false,formatting:R=false}){let y=react$1.useDocxEditor(),v=react$1.useEditorState(Kt),f=react.useMemo(()=>{let p=[];return w||p.push("structural"),R||p.push("format"),p.length>0?p:void 0},[w,R]),x=react.useMemo(()=>f?{excludeRevisionKinds:f}:void 0,[f]);react.useEffect(()=>(y?.setReviewActivationExclusions(f??null),()=>y?.setReviewActivationExclusions(null)),[y,f]);let A=me(zt),N=me(x),E=N.setPaneOpen,{t:C}=react$1.useTranslation(),T=react.useCallback(p=>o?.(p)??C(p),[o,C]),D=react.useRef(null),de=react.useContext(react$1.ReviewRailContext);react.useEffect(()=>de?.register(),[de]);let Z=N.paneOpen,k=react.useMemo(()=>c?N.items.filter(p=>c(p)):N.items,[N.items,c]),Ke=react.useMemo(()=>{let p=new Map;for(let m of k)m.author&&!p.has(m.author)&&p.set(m.author,p.size);return p},[k]),Ye=react.useMemo(()=>{let p=new Map;for(let m of k)p.set(m.id,m);return p},[k]),[Ze,_t]=react.useState(()=>new Map),ye=react.useCallback((p,m)=>{m<=0||_t(b=>{if(b.get(p)===m)return b;let _=new Map(b);return _.set(p,m),_});},[]),be=react.useRef(new WeakMap),te=react.useRef(null),Be=react.useCallback((p,m)=>{!p||typeof ResizeObserver>"u"||(ye(m,p.offsetHeight),te.current??(te.current=new ResizeObserver(b=>{for(let _ of b){let g=be.current.get(_.target);g&&ye(g,_.target.offsetHeight);}})),be.current.get(p)!==m&&(be.current.set(p,m),te.current.observe(p)));},[ye]);react.useEffect(()=>()=>te.current?.disconnect(),[]);let[S,Ct]=react.useState(Zt);react.useEffect(()=>{let p=D.current;if(!y||!p)return;let m=p.offsetParent,b=m?.querySelector(".docx-paginated-surface")??null,_=()=>{Ct(M=>{let q=b&&m?b.getBoundingClientRect():null,L=q&&m?m.getBoundingClientRect():null,$={scale:y.getRenderScale(),top:q&&L&&m?q.top-L.top-m.clientTop+m.scrollTop:0,left:q&&L&&m?q.right-L.left-m.clientLeft+m.scrollLeft+Bt:null};return M.scale===$.scale&&M.top===$.top&&M.left===$.left?M:$});};_();let g=new ResizeObserver(_);return m&&g.observe(m),b&&g.observe(b),()=>g.disconnect()},[y,k,v,r]),react.useEffect(()=>{let p=D.current;if(!y||!p)return;let m=b=>{let _=b.target;if(!(_ instanceof Node)||p.contains(_))return;let g=p.offsetParent;!g||!g.contains(_)||g.querySelector(".docx-paginated-surface")?.contains(_)||y.setActiveReviewItem(null);};return document.addEventListener("mousedown",m,true),()=>document.removeEventListener("mousedown",m,true)},[y,v,r]);let[xe,Et]=react.useState(null);react.useEffect(()=>{let p=D.current,m=p?.offsetParent;if(!m)return;let b=0,_=()=>{b=0,Et(L=>{let $=m.scrollTop-ft,ue=m.scrollTop+m.clientHeight+ft;return L&&L.top===$&&L.bottom===ue?L:{top:$,bottom:ue}});},g=0,M=()=>{b===0&&(b=requestAnimationFrame(_)),p?.setAttribute("data-scrolling",""),window.clearTimeout(g),g=window.setTimeout(()=>p?.removeAttribute("data-scrolling"),150);};_(),m.addEventListener("scroll",M,{passive:true});let q=new ResizeObserver(M);return q.observe(m),()=>{b!==0&&cancelAnimationFrame(b),window.clearTimeout(g),m.removeEventListener("scroll",M),q.disconnect();}},[y,v,r]);let[B,he]=react.useState(null),Fe=react.useCallback(()=>{y&&(y.surface?.retainSelection(),E(true),he(y.getSelectionPlacement()?.anchorY??null));},[y,E]),je=react.useCallback(()=>{y?.surface?.releaseSelection(),he(null),y?.focus();},[y]);react.useEffect(()=>{Z||B===null||(y?.surface?.releaseSelection(),he(null));},[Z,B,y]);let Ue=B??N.selectionAnchorY,U=react.useMemo(()=>{let p=ke(k);return k.filter(m=>!Pe(m,p))},[k]),ze=react.useMemo(()=>{if(B===null)return U;let p=U.findIndex(b=>b.anchorY!==null&&b.anchorY>B),m={key:ve,anchorY:B};return p===-1?[...U,m]:[...U.slice(0,p),m,...U.slice(p)]},[U,B]),Qe=react.useMemo(()=>{let p=new Map(Ze);for(let m of U){if(p.has(m.key))continue;let b=m.text.length+(m.kind==="revision"?m.replacedText?.length??0:0),_=Math.min(6,Math.max(1,Math.ceil(b/36)));p.set(m.key,64+_*20);}return p},[Ze,U]),{stacked:ge,collapsedKeys:Ge}=react.useMemo(()=>{let p=S.scale,m=new Map,b=new Set,_=Number.NEGATIVE_INFINITY;for(let g of ze){let M=g.anchorY===null?Number.isFinite(_)?_:0:Math.max(g.anchorY,_);m.set(g.key,M);let q=g.anchorY===null?0:(M-g.anchorY)*p,L="isActive"in g&&g.isActive,$=q>Ut&&!L&&g.key!==ve;$&&b.add(g.key);let ue=$?jt:Qe.get(g.key)??Ft;_=M+(ue+u)/p;}return {stacked:m,collapsedKeys:b}},[ze,Qe,u,S.scale]),Ne=Ue===null?null:S.top+(ge.get(ve)??Ue)*S.scale,We=n?.className,Tt=react.useMemo(()=>({t:o,cardClassName:We,review:{...N,items:k},allItems:A.items,authorSlots:Ke,byId:Ye,measure:Be,beginDraft:Fe,endDraft:je}),[o,We,N,A.items,k,Ke,Ye,Be,Fe,je]);if(r||v)return null;let Xe={ref:D,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":k.length,"data-open":Z?"":void 0,role:"complementary","aria-label":T("review.ariaLabel"),onMouseDown:j,style:S.left===null?void 0:{left:S.left,right:"auto"}},Je=typeof t=="function"?{}:Rt(t),ne=(p,m)=>{if(!(p in Je))return m;let b=Je[p];return !react.isValidElement(b)||!react.isValidElement(m)?b:react.cloneElement(b,{...m.props,...b.props})},et=a?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[ne("AddComment",jsxRuntime.jsx(Me,{top:Ne,drafting:B!==null})),!Z||B===null||Ne===null?null:ne("Draft",jsxRuntime.jsx(De,{top:Ne})),ne("Balloon",jsxRuntime.jsx(Se,{}))]}):null,It=a?Z?ne("List",jsxRuntime.jsx(fe,{stack:d,positions:ge,collapsed:Ge,scale:S.scale,offset:S.top,window:xe,children:t})):ne("Markers",jsxRuntime.jsx(Ae,{scale:S.scale,offset:S.top,window:xe})):typeof t=="function"?null:t;return jsxRuntime.jsx(Ie.Provider,{value:Tt,children:l&&react.isValidElement(t)?jsxRuntime.jsx(react$1.Slot,{...Xe,children:react.cloneElement(t,void 0,t.props.children,a?jsxRuntime.jsx(fe,{stack:d,positions:ge,collapsed:Ge,scale:S.scale,offset:S.top,window:xe}):null,et)}):jsxRuntime.jsxs("aside",{...Xe,children:[Z&&i!==void 0?jsxRuntime.jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:i}):null,It,et]})})}function fe({stack:e=true,positions:i,collapsed:l,scale:r=1,offset:t=0,window:o=null,children:n,className:a,hidden:d}){let{review:u,measure:c,cardClassName:w}=H();if(d)return null;let R=ke(u.items),y=u.items.filter(v=>!Pe(v,R));return y.length===0?typeof n=="function"?null:jsxRuntime.jsx(Oe,{}):jsxRuntime.jsx("div",{className:`docx-review__list${a?` ${a}`:""}`,children:y.map(v=>{let f=e?i?.get(v.key)??v.anchorY:v.anchorY,x=f==null?null:t+f*r;if(x!==null&&o&&(x<o.top||x>o.bottom))return null;let A=x===null?{}:{position:"absolute",top:x};return jsxRuntime.jsx(I.Provider,{value:v,children:jsxRuntime.jsx("div",{className:"docx-review__slot",style:A,...l?.has(v.key)?{"data-collapsed":""}:{},ref:N=>{c(N,v.key);},children:typeof n=="function"?n(v):jsxRuntime.jsx(Le,{...w?{className:w}:{},children:n})})},v.key)})})}fe.docxReviewPart="List";function Ae({scale:e=1,offset:i=0,window:l=null,className:r,hidden:t,icon:o}){let{review:n}=H(),a=Y();if(t)return null;let d=ke(n.items),u=n.items.filter(c=>!Pe(c,d));return jsxRuntime.jsx("div",{className:`docx-review__markers${r?` ${r}`:""}`,children:u.map(c=>{if(c.anchorY===null)return null;let w=i+c.anchorY*e;return l&&(w<l.top||w>l.bottom)?null:jsxRuntime.jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":c.kind==="revision"?c.revisionKind:c.kind,style:{position:"absolute",top:w},title:c.author?`${c.author}: ${c.text}`:c.text,"aria-label":`${a("review.showPane")}: ${c.author?`${c.author}. `:""}${c.text}`,onMouseDown:j,onClick:()=>{n.setPaneOpen(true),n.setActive(c.key);},children:(typeof o=="function"?o(c):o)??X(mt(c))},c.key)})})}Ae.docxReviewPart="Markers";function Me({top:e,drafting:i=false,className:l,hidden:r,children:t}){let{beginDraft:o}=H(),n=Y();if(r||i||e===null)return null;let a={type:"button",className:`docx-review__add${l?` ${l}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":n("common.comment"),title:n("common.comment"),onMouseDown:j,onClick:o};return t?jsxRuntime.jsx(react$1.Slot,{...a,children:t}):jsxRuntime.jsx("button",{...a,children:X(lt)})}Me.docxReviewPart="AddComment";function De({top:e,className:i,hidden:l}){let{review:r,endDraft:t,measure:o}=H(),n=Y(),[a,d]=react.useState(""),[u,c]=react.useState(false),w=react.useRef(null),R=react.useId();react.useEffect(()=>{w.current?.focus({preventScroll:true});},[]);let y=react.useCallback(()=>{if(a.trim().length===0)return;let v=r.comment(a.trim());c(!v),v&&(d(""),t());},[a,r,t]);return l?null:jsxRuntime.jsx("div",{className:`docx-review__slot${i?` ${i}`:""}`,style:{position:"absolute",top:e},ref:v=>{o(v,ve);},children:jsxRuntime.jsx("div",{className:"docx-review__card","data-testid":"review-draft","data-draft":"",children:jsxRuntime.jsxs("form",{className:"docx-review__reply-box",onSubmit:v=>{v.preventDefault(),y();},children:[jsxRuntime.jsx("label",{className:"docx-editor-sr-only",htmlFor:R,children:n("comments.addComment")}),jsxRuntime.jsx("input",{id:R,ref:w,"data-testid":"review-draft-input",className:"docx-review__input",value:a,placeholder:n("comments.addComment"),...u?{"aria-invalid":true}:{},onChange:v=>{c(false),d(v.target.value);},onKeyDown:v=>{if(v.key==="Escape"){v.preventDefault(),t();return}v.key==="Enter"&&(v.preventDefault(),y());}}),jsxRuntime.jsxs("div",{className:"docx-review__reply-actions",children:[jsxRuntime.jsx("button",{type:"button","data-testid":"review-draft-cancel",className:"docx-review__text-button",onMouseDown:j,onClick:t,children:n("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:a.trim().length===0,children:n("common.comment")})]}),u?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert",children:n("review.commentRefused")}):null]})})})}De.docxReviewPart="Draft";function Se({className:e,hidden:i}){let{review:l,allItems:r,authorSlots:t}=H(),o=Y(),n=react.useRef(null),[a,d]=react.useState(null),u=react.useRef(false);u.current=a!==null,react.useEffect(()=>{let v=n.current,f=v?.closest(".docx-review"),x=f?.closest(".docx-editor__scroll-container")??f?.offsetParent;if(!v||!f||!x)return;let A=(E,C)=>{let T=f.getBoundingClientRect(),D=E.getBoundingClientRect(),de=E.ownerDocument.defaultView?.innerHeight??1/0,Z=Number(E.dataset.start),k=Number(E.dataset.end);d({revisionId:E.dataset.revisionId,author:E.dataset.revisionAuthor??"",...E.dataset.revisionDate!==void 0?{date:E.dataset.revisionDate}:{},...E.dataset.revisionKind!==void 0?{kind:E.dataset.revisionKind}:{},structuralSite:C,...E.dataset.paragraphId!==void 0?{paragraphId:E.dataset.paragraphId}:{},...Number.isFinite(Z)?{start:Z}:{},...Number.isFinite(k)?{end:k}:{},left:D.left-T.left,top:D.top-T.top,bottom:D.bottom-T.top,above:D.bottom+220>de});},N=E=>{let C=E.target;if(!(C instanceof Element)||v.contains(C))return;let T=C.closest("[data-revision-id]");if(T instanceof HTMLElement&&x.contains(T)){let D=T.classList.contains("docx-table-row--revision");if(T.dataset.revisionKind==="format"||D){A(T,D);return}}u.current&&d(null);};return x.addEventListener("pointerdown",N,true),x.addEventListener("mousedown",N,true),()=>{x.removeEventListener("pointerdown",N,true),x.removeEventListener("mousedown",N,true);}},[]);let c=react.useMemo(()=>{if(!a)return null;let v=null,f=false,x=null,A=false,N=null,E=false;for(let C of r)if(!(C.kind!=="revision"||C.item.kind!=="revision")){for(let T of C.item.addresses)if(T.id===a.revisionId){if(T.author===a.author){if(T.date===a.date)return C;v===null?v=C:v!==C&&(f=true);}x===null?x=C:x!==C&&(A=true);}if(a.paragraphId!==void 0&&a.start!==void 0&&a.end!==void 0&&(C.revisionKind==="format"||C.revisionKind==="structural")){for(let T of C.item.ranges)if(T.start.paragraphId===a.paragraphId&&T.start.offset<a.end&&T.end.offset>a.start){N===null?N=C:N!==C&&(E=true);break}}}return v!==null&&!f?v:x!==null&&!A?x:N!==null&&!E?N:null},[r,a]),w=c&&(c.revisionKind==="format"||c.revisionKind==="structural")?c:null,R=react.useRef(false);if(react.useEffect(()=>{if(w){R.current=true;return}R.current&&(R.current=false,d(null));},[w]),i)return null;let y=a?.kind==="format"?"format":"structural";return jsxRuntime.jsx("div",{ref:n,className:`docx-review__balloon-root${e?` ${e}`:""}`,children:a===null?null:jsxRuntime.jsx("div",{className:"docx-review__balloon","data-testid":"review-balloon",style:{left:a.left,top:a.above?a.top-6:a.bottom+6,transform:a.above?"translateY(-100%)":void 0},onMouseDown:j,children:w?jsxRuntime.jsx(I.Provider,{value:w,children:jsxRuntime.jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":w.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(t.get(w.author)??0)%wt})`},onClick:()=>l.setActive(w.key),children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(re,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(ie,{}),jsxRuntime.jsx(ae,{})]}),w.kind==="revision"&&!w.readOnly?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[jsxRuntime.jsx(pe,{}),jsxRuntime.jsx(we,{})]}):null]}),jsxRuntime.jsx(se,{})]})}):jsxRuntime.jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":y,children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx("span",{className:"docx-review__avatar","aria-hidden":"true",children:Wt(a.author)}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx("span",{className:"docx-review__author",children:a.author||o("comments.unknown")}),a.date?jsxRuntime.jsx(Xt,{raw:a.date}):null]})]}),jsxRuntime.jsx("div",{className:"docx-review__summary",children:jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":y,children:o(bt(y))})})]})})})}Se.docxReviewPart="Balloon";function Wt(e){let i=e.trim().split(/\s+/).filter(Boolean);return i.length===0?"?":i.slice(0,2).map(l=>l[0].toUpperCase()).join("")}function Xt({raw:e}){let i=new Date(e);return Number.isNaN(i.getTime())?null:jsxRuntime.jsx("time",{className:"docx-review__time",dateTime:e,children:yt.format(i)})}function Oe({className:e,hidden:i,children:l}){let r=Y();return i?null:jsxRuntime.jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:l??r("review.empty")})}Oe.docxReviewPart="Empty";function Le({className:e,asChild:i,hidden:l,children:r}){let{review:t,authorSlots:o}=H(),n=react.useContext(I),a=react.useId();if(l||!n)return null;let d=o.get(n.author)??0,u={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${a}-author ${a}-summary`,"data-kind":n.kind==="revision"?n.revisionKind??"revision":n.kind,...n.kind==="custom"&&n.item.kind==="custom"?{"data-node-name":n.item.name}:{},...n.isActive?{"data-active":""}:{},...n.kind==="comment"&&n.resolved?{"data-resolved":""}:{},style:{"--doc-review-author":`var(--doc-review-author-${d%wt})`},tabIndex:0,role:"button",id:a,onMouseDown:c=>{c.target?.closest("[data-review-selectable]")||c.currentTarget.focus({preventScroll:true});},onClick:()=>t.setActive(n.key),onKeyDown:c=>{c.target===c.currentTarget&&(c.key!=="Enter"&&c.key!==" "||(c.preventDefault(),t.setActive(n.key)));}};return i?jsxRuntime.jsx(react$1.Slot,{...u,children:r}):jsxRuntime.jsx("div",{...u,children:jsxRuntime.jsx(Jt,{children:r})})}Le.docxReviewPart="Card";function Jt({children:e}){let i=react.useContext(I),l=react.useMemo(()=>Rt(e),[e]),r=(o,n)=>o in l?l[o]:n;if(!i)return null;if(i.kind==="custom"&&i.item.kind==="custom"){let o=i.item;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[r("Avatar",null),jsxRuntime.jsx("div",{className:"docx-review__meta",children:r("Author",jsxRuntime.jsx("span",{className:"docx-review__author","data-testid":"review-custom-title",children:o.title}))})]}),r("Summary",o.detail?jsxRuntime.jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsxRuntime.jsx("span",{className:"docx-review__text",children:o.detail})}):null),l.__extra]})}let t=i.kind==="revision"&&!i.readOnly;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[r("Avatar",jsxRuntime.jsx(re,{})),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[r("Author",jsxRuntime.jsx(ie,{})),r("Time",jsxRuntime.jsx(ae,{}))]}),t||i.kind==="comment"?jsxRuntime.jsxs("div",{className:"docx-review__actions",children:[r("Accept",jsxRuntime.jsx(pe,{})),r("Reject",jsxRuntime.jsx(we,{})),r("Delete",jsxRuntime.jsx(Re,{}))]}):null]}),r("Summary",jsxRuntime.jsx(se,{})),r("Replies",jsxRuntime.jsx(He,{})),r("Reply",jsxRuntime.jsx(qe,{})),l.__extra]})}function Rt(e){let i={},l=[],r=t=>{if(Array.isArray(t)){t.forEach(r);return}if(!t||typeof t!="object"||!("type"in t)){t&&l.push(t);return}if(t.type===react.Fragment){r(t.props.children);return}let o=t.type.docxReviewPart;o?i[o]=t:l.push(t);};return r(e),l.length>0&&(i.__extra=l),i}function re({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(I);if(l||!t||r===void 0&&!t.initials)return null;let o={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return i?jsxRuntime.jsx(react$1.Slot,{...o,children:r}):jsxRuntime.jsx("span",{...o,children:r??t.initials})}re.docxReviewPart="Avatar";function ie({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(I),o=Y();if(l||!t)return null;let n=t.author||o("comments.unknown"),a={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return i?jsxRuntime.jsx(react$1.Slot,{...a,children:r}):jsxRuntime.jsx("span",{...a,children:r??n})}ie.docxReviewPart="Author";function ae({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(I);if(l||!t)return null;let o=t.date;if(!o)return null;let n=new Date(o);if(Number.isNaN(n.getTime()))return null;let a={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:o};return i?jsxRuntime.jsx(react$1.Slot,{...a,children:r}):jsxRuntime.jsx("time",{...a,children:r??yt.format(n)})}ae.docxReviewPart="Time";var yt=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function se({className:e,asChild:i,hidden:l,children:r}){let t=react.useContext(I),o=Y();if(l||!t)return null;let n=t.text,a=t.kind!=="revision"?null:o(bt(t.revisionKind)),d=t.kind==="revision"&&t.revisionKind==="replace",u={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return i?jsxRuntime.jsx(react$1.Slot,{...u,children:r}):jsxRuntime.jsx("div",{...u,children:r??(d?jsxRuntime.jsxs("span",{className:"docx-review__text",children:[o("review.replaced")," ",jsxRuntime.jsxs("span",{className:"docx-review__removed",children:['"',t.replacedText,'"']})," ",o("review.replacedWith")," ",jsxRuntime.jsxs("span",{className:"docx-review__added",children:['"',n,'"']})]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[a?jsxRuntime.jsx("span",{className:"docx-review__label","data-kind":t.kind==="revision"?t.revisionKind:"revision",children:a}):null,n?jsxRuntime.jsx("span",{className:"docx-review__text",children:n}):null]}))})}se.docxReviewPart="Summary";function bt(e){switch(e){case "insert":return "review.inserted";case "delete":return "review.deleted";case "replace":return "review.replaced";case "moveFrom":return "review.movedFrom";case "moveTo":return "review.movedTo";case "format":return "revisions.runPropertiesChanged";case "paragraphMark":return "revisions.paragraphMarkInserted";default:return "review.structural"}}function pe({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=H(),n=react.useContext(I),a=Y();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.accept"),u={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:d,onMouseDown:j,onClick:c=>{c.stopPropagation(),o.accept(n);}};return i?jsxRuntime.jsx(react$1.Slot,{...u,children:r}):jsxRuntime.jsx("button",{...u,children:t??r??X(ct)})}pe.docxReviewPart="Accept";function we({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=H(),n=react.useContext(I),a=Y();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.reject"),u={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:d,onMouseDown:j,onClick:c=>{c.stopPropagation(),o.reject(n);}};return i?jsxRuntime.jsx(react$1.Slot,{...u,children:r}):jsxRuntime.jsx("button",{...u,children:t??r??X(dt)})}we.docxReviewPart="Reject";function Re({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=H(),n=react.useContext(I),{t:a}=react$1.useTranslation();if(l||!n||n.kind==="custom"||n.kind==="revision"&&n.readOnly)return null;let d=n.kind==="comment"?a("review.deleteComment"):a("review.discardChange"),u={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:d,onMouseDown:j,onClick:c=>{c.stopPropagation(),o.remove(n);}};return i?jsxRuntime.jsx(react$1.Slot,{...u,children:r}):jsxRuntime.jsx("button",{...u,children:t??r??X(ut)})}Re.docxReviewPart="Delete";function He({className:e,hidden:i}){let{byId:l}=H(),r=react.useContext(I);if(i||!r||r.kind==="custom")return null;let t=r.replyIds.map(o=>l.get(o)).filter(o=>o!==void 0);return t.length===0?null:jsxRuntime.jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:t.map(o=>jsxRuntime.jsx(I.Provider,{value:o,children:jsxRuntime.jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxRuntime.jsxs("div",{className:"docx-review__head",children:[jsxRuntime.jsx(re,{}),jsxRuntime.jsxs("div",{className:"docx-review__meta",children:[jsxRuntime.jsx(ie,{}),jsxRuntime.jsx(ae,{})]}),jsxRuntime.jsx("div",{className:"docx-review__actions",children:jsxRuntime.jsx(Re,{})})]}),jsxRuntime.jsx(se,{})]})},o.key))})}He.docxReviewPart="Replies";function qe({className:e,hidden:i,children:l}){let{review:r}=H(),t=react.useContext(I),o=Y(),[n,a]=react.useState(""),[d,u]=react.useState(false),c=react.useId(),w=react.useCallback(()=>{if(!t||n.trim().length===0)return;let R=r.reply(t,n.trim());u(!R),R&&a("");},[t,n,r]);return i||!t||!t.isActive?null:l?jsxRuntime.jsx(jsxRuntime.Fragment,{children:l}):jsxRuntime.jsxs("form",{className:`docx-review__reply-box${e?` ${e}`:""}`,onSubmit:R=>{R.preventDefault(),w();},children:[jsxRuntime.jsx("label",{className:"docx-editor-sr-only",htmlFor:c,children:o("comments.replyPlaceholder")}),jsxRuntime.jsx("input",{id:c,"data-testid":"review-reply-input",className:"docx-review__input",value:n,placeholder:o("comments.replyPlaceholder"),...d?{"aria-invalid":true,"data-refused":""}:{},onChange:R=>{u(false),a(R.target.value);},onClick:R=>R.stopPropagation(),onKeyDown:R=>{R.key==="Enter"&&(R.preventDefault(),w());}}),jsxRuntime.jsxs("div",{className:"docx-review__reply-actions",children:[jsxRuntime.jsx("button",{type:"button","data-testid":"review-reply-cancel",className:"docx-review__text-button",onMouseDown:j,onClick:R=>{R.stopPropagation(),a(""),u(false),r.setActive(null);},children:o("common.cancel")}),jsxRuntime.jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:n.trim().length===0,children:o("review.reply")})]}),d?jsxRuntime.jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:o("review.replyRefused")}):null]})}qe.docxReviewPart="Reply";var en=Object.assign(Gt,{List:fe,Empty:Oe,Card:Le,Avatar:re,Author:ie,Time:ae,Summary:se,Accept:pe,Reject:we,Delete:Re,Replies:He,Reply:qe,Markers:Ae,AddComment:Me,Draft:De,Balloon:Se});function le(e){let i=react$1.useDocxEditor();return react.useMemo(()=>e||(i?.getCustomNodeDefinitions()??[]).filter(chunkA7NTVTWG_cjs.j),[e,i])}var rn=".docx-content-control-boundary";function J(e,i){let{node:l,definition:r,controlId:t}=e,o=t?i?.getReviewItems().find(d=>d.kind==="custom"&&d.item.id===t):void 0;if(o&&o.kind==="custom"){let d=o.item;return {...l,attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data},...t?{nodeId:t}:{}}}let n=t?an(i,t,r):void 0,a=r.fromDocx?r.fromDocx({attrs:l.attrs,text:"",...n===void 0?{}:{data:n}}):l.attrs;return a===null?null:{...l,attrs:a,...n===void 0?{}:{data:n},...t?{nodeId:t}:{}}}function an(e,i,l){let r=e?.surface;if(!r)return;let t=r.session.part(),o=store.customNodePayloadsByControl(r.session.currentPackage(),t.name).get(i);if(!o)return;let n=chunkA7NTVTWG_cjs.e(l.schema,o.data);return n.ok?n.value:void 0}function ee(e,i){let l=e?.closest?.(rn),r=l?.closest(".docx-content-control-chrome"),t=r?.getAttribute("data-tag"),o=t?chunkA7NTVTWG_cjs.c(t):null;if(!l||!o||!t)return null;let n=i.find(a=>a.tagPrefix===o.prefix&&a.name===o.name);return n?{node:{name:o.name,attrs:o.attrs,tag:t,rect:l.getBoundingClientRect()},definition:n,controlId:r?.getAttribute("data-docx-content-control")??null}:null}var $e=".docx-content-control-boundary",ln=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 cn(e){let{onNodeClick:i,onNodeHover:l}=e,r=react$1.useDocxEditor(),t=le(e.nodes);return react.useEffect(()=>{let o=document.createElement("style"),n=[];for(let a of t){let d=ln(a);if(d.length===0)continue;let u=a.chrome?.color!==void 0&&CSS.supports("color",a.chrome.color)?a.chrome.color:"#2563eb";n.push(`${d.map(c=>`${c} ${$e}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${u} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return o.textContent=n.join(`
2
+ `),document.head.append(o),()=>o.remove()},[t]),react.useEffect(()=>{let o=null,n=null,a=w=>ee(document.elementFromPoint(w.clientX,w.clientY),t),d=w=>{let R=w.button===0?a(w):null;o=R?.controlId??null,n=R?.node.tag??null;},u=w=>{let R=o,y=n;if(o=null,n=null,y===null)return;let v=a(w);if(!v||v.node.tag!==y||R!==null&&v.controlId!==R)return;let f=J(v,r);f&&(v.definition.onClick?.(f),i?.(f));},c=w=>{let R=ee(w.target,t);if(!R||w.relatedTarget?.closest?.($e)===w.target.closest($e))return;let v=J(R,r);v&&(R.definition.onHover?.(v),l?.(v));};return document.addEventListener("pointerdown",d,true),document.addEventListener("pointerup",u,true),document.addEventListener("mouseover",c),()=>{document.removeEventListener("pointerdown",d,true),document.removeEventListener("pointerup",u,true),document.removeEventListener("mouseover",c);}},[t,r,i,l]),null}function Nt(e){let{onEditNode:i,onRemoveRefused:l,remove:r=true}=e,t=le(e.nodes),o=react$1.useContextMenuTarget(),n=react$1.useDocxEditor(),{t:a}=react$1.useTranslation(),d=react.useMemo(()=>o?ee(o,t):null,[o,t]),u=react.useMemo(()=>d?J(d,n):null,[d,n]),c=react.useMemo(()=>!d?.definition.reviewCard||!u?null:d.definition.reviewCard({attrs:u.attrs,text:u.text??"",...u.data===void 0?{}:{data:u.data}}),[d,u]);if(!d||!u)return null;let{definition:w}=d,R=w.label??w.name,y=w.onEdit!==void 0||i!==void 0,v=r&&u.nodeId!==void 0&&n!==null;return !c&&!y&&!v?null:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[c?jsxRuntime.jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-title",children:c.title}),c.detail?jsxRuntime.jsx("span",{className:"docx-contextmenu__custom-detail",children:c.detail}):null]}):null,y?jsxRuntime.jsx(react$1.ContextMenuItem,{label:a("contextMenu.editCustomNode",{label:R}),className:"docx-contextmenu__custom-edit",onSelect:()=>{w.onEdit?.(u),i?.(u,w);}}):null,v?jsxRuntime.jsx(react$1.ContextMenuItem,{label:a("contextMenu.removeCustomNode",{label:R}),className:"docx-contextmenu__custom-remove",onSelect:()=>{let f=chunkA7NTVTWG_cjs.q(n,u.nodeId);f.ok||l?.(u,f.reason);}}):null,jsxRuntime.jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}Nt.docxRowPlacement="start";Object.defineProperty(exports,"reviewModule",{enumerable:true,get:function(){return chunkA7NTVTWG_cjs.o}});exports.CustomNodeChrome=cn;exports.CustomNodeContextMenu=Nt;exports.DocxEditorReview=en;exports.activatedCustomNodeOf=J;exports.resolveCustomNodeActivation=ee;exports.useCustomNodeDefinitions=le;exports.useReview=me;exports.useReviewItem=Yt;exports.useReviewOf=it;exports.useStackedReviewPositions=Mt;
@@ -1,9 +1,10 @@
1
- import { a as CustomNodeDefinition, b as ActivatedCustomNode, A as AnyCustomNodeDefinition } from '../define-custom-node-BTTX66B3.cjs';
2
- export { P as ProLicenseOptions, j as ReviewModuleOptions, q as reviewModule } from '../define-custom-node-BTTX66B3.cjs';
1
+ import { a as CustomNodeDefinition, b as ActivatedCustomNode, A as AnyCustomNodeDefinition } from '../define-custom-node-RznSCnPr.cjs';
2
+ export { P as ProLicenseOptions, j as ReviewModuleOptions, q as reviewModule } from '../define-custom-node-RznSCnPr.cjs';
3
3
  import * as react from 'react';
4
4
  import { ReactNode } from 'react';
5
5
  import { ToolbarTranslate } from '@docx-editor.dev/react';
6
- import { ReviewItemPlacement, ReviewItemQuery, Editor } from '@docx-editor.dev/core/contracts/editor';
6
+ import { ReviewItemPlacement, ReviewActivationOptions, ReviewItemQuery, Editor } from '@docx-editor.dev/core/contracts/editor';
7
+ export { ReviewActivationOptions } from '@docx-editor.dev/core/contracts/editor';
7
8
  import '@docx-editor.dev/core/editor';
8
9
  import '@docx-editor.dev/core/store';
9
10
 
@@ -16,6 +17,7 @@ import '@docx-editor.dev/core/store';
16
17
  * to be written once per framework.
17
18
  */
18
19
  type ReviewItemView = ReviewItemPlacement;
20
+
19
21
  /**
20
22
  * What {@link useReview} returns: the review rail's data and the four things a card can do.
21
23
  *
@@ -26,8 +28,20 @@ interface UseReviewReturn {
26
28
  readonly items: readonly ReviewItemView[];
27
29
  /** The item the caret is in, or null. */
28
30
  readonly activeKey: string | null;
29
- /** Card to document: selects the item's range and scrolls to it. */
30
- readonly setActive: (key: string | null) => void;
31
+ /**
32
+ * Card to document: selects the item's range and scrolls to it.
33
+ *
34
+ * Reports whether it landed, on the same terms as {@link accept}. False for an item whose
35
+ * `activatable` is false — no range to select, or a revision kind this rail excluded — and
36
+ * for a story that will not open. A queue walked with next/previous controls has no other
37
+ * way to tell a step that did nothing from one that worked, and skipping to the next item
38
+ * is only possible if you can find out.
39
+ *
40
+ * `options.reveal` picks where the item lands, or turns the engine's scroll off entirely
41
+ * for a host whose own list already drives it. Default is centred when it has to travel,
42
+ * still when it is already on screen.
43
+ */
44
+ readonly setActive: (key: string | null, options?: ReviewActivationOptions) => boolean;
31
45
  /**
32
46
  * Accept a revision. Reports whether it landed.
33
47
  *
@@ -232,11 +246,12 @@ declare namespace ReviewList {
232
246
  var docxReviewPart: "List";
233
247
  }
234
248
  /**
235
- * The collapsed rail: one marker per item, at its anchor.
249
+ * Props for the collapsed rail's gutter markers. @public
236
250
  *
237
- * @public
251
+ * `scale`, `offset` and `window` are the rail's own geometry and are supplied for you — an
252
+ * override inherits them, so a host passes only what it wants to change.
238
253
  */
239
- declare function ReviewMarkers({ scale, offset, window: visible, className, hidden, }: {
254
+ interface ReviewMarkersProps {
240
255
  scale?: number;
241
256
  offset?: number;
242
257
  /** Visible band of the scroller; markers outside it are not mounted. */
@@ -246,7 +261,20 @@ declare function ReviewMarkers({ scale, offset, window: visible, className, hidd
246
261
  } | null;
247
262
  className?: string;
248
263
  hidden?: boolean;
249
- }): react.JSX.Element | null;
264
+ /**
265
+ * Replace the glyph. A FUNCTION of the item, unlike the action parts' plain node, because
266
+ * one `Markers` draws every marker in the gutter — a single node would put one shape on all
267
+ * of them, which is the thing this part was fixed to stop doing. Return null or undefined
268
+ * for an item to keep its packaged glyph.
269
+ */
270
+ icon?: ReactNode | ((item: ReviewItemView) => ReactNode);
271
+ }
272
+ /**
273
+ * The collapsed rail: one marker per item, at its anchor.
274
+ *
275
+ * @public
276
+ */
277
+ declare function ReviewMarkers({ scale, offset, window: visible, className, hidden, icon: iconOverride, }: ReviewMarkersProps): react.JSX.Element | null;
250
278
  declare namespace ReviewMarkers {
251
279
  var docxReviewPart: "Markers";
252
280
  }
@@ -604,4 +632,4 @@ declare function activatedCustomNodeOf(resolved: ResolvedCustomNodeActivation, e
604
632
  */
605
633
  declare function resolveCustomNodeActivation(target: EventTarget | null, nodes: readonly AnyCustomNodeDefinition[]): ResolvedCustomNodeActivation | null;
606
634
 
607
- export { CustomNodeChrome, type CustomNodeChromeProps, CustomNodeContextMenu, type CustomNodeContextMenuProps, DocxEditorReview, type DocxEditorReviewNamespace, type ResolvedCustomNodeActivation, type ReviewActionProps, type ReviewItemView, type ReviewPartProps, type ReviewProps, type UseReviewReturn, activatedCustomNodeOf, resolveCustomNodeActivation, useCustomNodeDefinitions, useReview, useReviewItem, useReviewOf, useStackedReviewPositions };
635
+ export { CustomNodeChrome, type CustomNodeChromeProps, CustomNodeContextMenu, type CustomNodeContextMenuProps, DocxEditorReview, type DocxEditorReviewNamespace, type ResolvedCustomNodeActivation, type ReviewActionProps, type ReviewItemView, type ReviewMarkersProps, type ReviewPartProps, type ReviewProps, type UseReviewReturn, activatedCustomNodeOf, resolveCustomNodeActivation, useCustomNodeDefinitions, useReview, useReviewItem, useReviewOf, useStackedReviewPositions };
@@ -1,9 +1,10 @@
1
- import { a as CustomNodeDefinition, b as ActivatedCustomNode, A as AnyCustomNodeDefinition } from '../define-custom-node-BTTX66B3.js';
2
- export { P as ProLicenseOptions, j as ReviewModuleOptions, q as reviewModule } from '../define-custom-node-BTTX66B3.js';
1
+ import { a as CustomNodeDefinition, b as ActivatedCustomNode, A as AnyCustomNodeDefinition } from '../define-custom-node-RznSCnPr.js';
2
+ export { P as ProLicenseOptions, j as ReviewModuleOptions, q as reviewModule } from '../define-custom-node-RznSCnPr.js';
3
3
  import * as react from 'react';
4
4
  import { ReactNode } from 'react';
5
5
  import { ToolbarTranslate } from '@docx-editor.dev/react';
6
- import { ReviewItemPlacement, ReviewItemQuery, Editor } from '@docx-editor.dev/core/contracts/editor';
6
+ import { ReviewItemPlacement, ReviewActivationOptions, ReviewItemQuery, Editor } from '@docx-editor.dev/core/contracts/editor';
7
+ export { ReviewActivationOptions } from '@docx-editor.dev/core/contracts/editor';
7
8
  import '@docx-editor.dev/core/editor';
8
9
  import '@docx-editor.dev/core/store';
9
10
 
@@ -16,6 +17,7 @@ import '@docx-editor.dev/core/store';
16
17
  * to be written once per framework.
17
18
  */
18
19
  type ReviewItemView = ReviewItemPlacement;
20
+
19
21
  /**
20
22
  * What {@link useReview} returns: the review rail's data and the four things a card can do.
21
23
  *
@@ -26,8 +28,20 @@ interface UseReviewReturn {
26
28
  readonly items: readonly ReviewItemView[];
27
29
  /** The item the caret is in, or null. */
28
30
  readonly activeKey: string | null;
29
- /** Card to document: selects the item's range and scrolls to it. */
30
- readonly setActive: (key: string | null) => void;
31
+ /**
32
+ * Card to document: selects the item's range and scrolls to it.
33
+ *
34
+ * Reports whether it landed, on the same terms as {@link accept}. False for an item whose
35
+ * `activatable` is false — no range to select, or a revision kind this rail excluded — and
36
+ * for a story that will not open. A queue walked with next/previous controls has no other
37
+ * way to tell a step that did nothing from one that worked, and skipping to the next item
38
+ * is only possible if you can find out.
39
+ *
40
+ * `options.reveal` picks where the item lands, or turns the engine's scroll off entirely
41
+ * for a host whose own list already drives it. Default is centred when it has to travel,
42
+ * still when it is already on screen.
43
+ */
44
+ readonly setActive: (key: string | null, options?: ReviewActivationOptions) => boolean;
31
45
  /**
32
46
  * Accept a revision. Reports whether it landed.
33
47
  *
@@ -232,11 +246,12 @@ declare namespace ReviewList {
232
246
  var docxReviewPart: "List";
233
247
  }
234
248
  /**
235
- * The collapsed rail: one marker per item, at its anchor.
249
+ * Props for the collapsed rail's gutter markers. @public
236
250
  *
237
- * @public
251
+ * `scale`, `offset` and `window` are the rail's own geometry and are supplied for you — an
252
+ * override inherits them, so a host passes only what it wants to change.
238
253
  */
239
- declare function ReviewMarkers({ scale, offset, window: visible, className, hidden, }: {
254
+ interface ReviewMarkersProps {
240
255
  scale?: number;
241
256
  offset?: number;
242
257
  /** Visible band of the scroller; markers outside it are not mounted. */
@@ -246,7 +261,20 @@ declare function ReviewMarkers({ scale, offset, window: visible, className, hidd
246
261
  } | null;
247
262
  className?: string;
248
263
  hidden?: boolean;
249
- }): react.JSX.Element | null;
264
+ /**
265
+ * Replace the glyph. A FUNCTION of the item, unlike the action parts' plain node, because
266
+ * one `Markers` draws every marker in the gutter — a single node would put one shape on all
267
+ * of them, which is the thing this part was fixed to stop doing. Return null or undefined
268
+ * for an item to keep its packaged glyph.
269
+ */
270
+ icon?: ReactNode | ((item: ReviewItemView) => ReactNode);
271
+ }
272
+ /**
273
+ * The collapsed rail: one marker per item, at its anchor.
274
+ *
275
+ * @public
276
+ */
277
+ declare function ReviewMarkers({ scale, offset, window: visible, className, hidden, icon: iconOverride, }: ReviewMarkersProps): react.JSX.Element | null;
250
278
  declare namespace ReviewMarkers {
251
279
  var docxReviewPart: "Markers";
252
280
  }
@@ -604,4 +632,4 @@ declare function activatedCustomNodeOf(resolved: ResolvedCustomNodeActivation, e
604
632
  */
605
633
  declare function resolveCustomNodeActivation(target: EventTarget | null, nodes: readonly AnyCustomNodeDefinition[]): ResolvedCustomNodeActivation | null;
606
634
 
607
- export { CustomNodeChrome, type CustomNodeChromeProps, CustomNodeContextMenu, type CustomNodeContextMenuProps, DocxEditorReview, type DocxEditorReviewNamespace, type ResolvedCustomNodeActivation, type ReviewActionProps, type ReviewItemView, type ReviewPartProps, type ReviewProps, type UseReviewReturn, activatedCustomNodeOf, resolveCustomNodeActivation, useCustomNodeDefinitions, useReview, useReviewItem, useReviewOf, useStackedReviewPositions };
635
+ export { CustomNodeChrome, type CustomNodeChromeProps, CustomNodeContextMenu, type CustomNodeContextMenuProps, DocxEditorReview, type DocxEditorReviewNamespace, type ResolvedCustomNodeActivation, type ReviewActionProps, type ReviewItemView, type ReviewMarkersProps, type ReviewPartProps, type ReviewProps, type UseReviewReturn, activatedCustomNodeOf, resolveCustomNodeActivation, useCustomNodeDefinitions, useReview, useReviewItem, useReviewOf, useStackedReviewPositions };
@@ -1,2 +1,2 @@
1
- import {j,e,c,q,k as k$1}from'../chunk-FVI3MGO7.js';export{o as reviewModule}from'../chunk-FVI3MGO7.js';import {createContext,useMemo,useEffect,useCallback,useRef,useContext,useState,isValidElement,cloneElement,useId,useSyncExternalStore,Fragment as Fragment$1}from'react';import {useDocxEditor,useEditorState,useTranslation,ReviewRailContext,Slot,useContextMenuTarget,ContextMenuItem}from'@docx-editor.dev/react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';import {customNodePayloadsByControl}from'@docx-editor.dev/core/store';function me(e){let i=useDocxEditor();return rt(i,e)}function rt(e,i){let l=useCallback(m=>{if(!e)return ()=>{};let b=e.on("change",m),T=e.on("selectionChange",m),N=e.on("error",m);return ()=>{b(),T(),N();}},[e]),r=useSyncExternalStore(l,()=>e?`${e.getReviewRevision()}`:"none",()=>"none"),t=useMemo(()=>e?e.getReviewItems(i).filter(m=>m.item.kind!=="custom"||m.item.carded):[],[e,r,i]),o=useMemo(()=>t.find(m=>m.isActive)?.key??null,[t]),n=useCallback(m=>{e?.setActiveReviewItem(m);},[e]),a=useCallback(m=>!e||m.kind!=="revision"||m.readOnly?false:e.acceptReviewItem(m.key).ok,[e]),d=useCallback(m=>!e||m.kind!=="revision"||m.readOnly?false:e.rejectReviewItem(m.key).ok,[e]),c=useCallback(m=>!e||m.kind==="custom"||m.kind==="revision"&&m.readOnly?false:e.deleteReviewItem(m.key).ok,[e]),p=useCallback((m,b,T)=>b.trim().length===0||!e?false:e.replyToReviewItem(m.key,b,T).ok,[e]),w=useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,r]),R=useCallback((m,b)=>m.trim().length===0||!e?false:e.addComment(m,b).ok,[e]),y=useMemo(()=>e?e.isReviewPaneOpen():true,[e,r]),u=useCallback(m=>{!e||e.isReviewPaneOpen()===m||e.exec({type:"toggleReviewPane"});},[e]);return useMemo(()=>({items:t,activeKey:o,setActive:n,accept:a,reject:d,remove:c,reply:p,selectionAnchorY:w,comment:R,paneOpen:y,setPaneOpen:u,ready:e!==null&&!e.snapshot().isLoading&&e.snapshot().parseError===null}),[t,o,n,a,d,c,p,w,R,y,u,e])}function Nt(e,i,l={}){let r=l.gap??8,t=l.scale??1,o=l.defaultHeight??0;return useMemo(()=>{let n=new Map,a=Number.NEGATIVE_INFINITY;for(let d of e){let c=d.anchorY===null?Number.isFinite(a)?a:0:Math.max(d.anchorY,a);n.set(d.key,c),a=c+((i.get(d.key)??o)+r)/t;}return n},[e,i,r,t,o])}var It=e=>e.isLoading||e.parseError!==null||e.pageSetup==null,Pe=createContext(null),k=createContext(null);function Tt(){return useContext(k)}var Mt={scale:96/72,top:0,left:null},Dt=16,ve="\0compose",it=600,st=8,St=72,Lt=64,Ot=480,$t=Object.freeze({placement:false});function ke(e,i){return e.kind!=="comment"?false:e.parentId!==void 0?i.has(e.parentId):e.parentRevisionId!==void 0?i.has(e.parentRevisionId):false}function Ae(e){return new Set(e.map(i=>i.id))}function U(e){let i=e.target?.tagName;i==="INPUT"||i==="SELECT"||i==="TEXTAREA"||e.preventDefault();}function $(){let e=useContext(Pe);return e||Ht}function B(){let{t:e}=useContext(Pe)??{},{t:i}=useTranslation();return useCallback(l=>e?.(l)??i(l),[e,i])}var Ht={t:void 0,cardClassName:void 0,review:{items:[],activeKey:null,setActive:()=>{},accept:()=>false,reject:()=>false,remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}},oe=e=>jsx("svg",{viewBox:"0 -960 960 960",width:16,height:16,"aria-hidden":"true",focusable:"false",children:jsx("path",{d:e,fill:"currentColor"})}),Vt="M440-400h80v-120h120v-80H520v-120h-80v120H320v80h120v120ZM80-80v-720q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H240L80-80Zm126-240h594v-480H160v525l46-45Zm-46 0v-480 480Z",Kt="M240-400h480v-80H240v80Zm0-120h480v-80H240v80Zm0-120h480v-80H240v80ZM880-80 720-240H160q-33 0-56.5-23.5T80-320v-480q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v720ZM160-320h594l46 45v-525H160v480Zm0 0v-480 480Z",Yt="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",Bt="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z",jt="M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z";function Ft({className:e,furniture:i,asChild:l,hidden:r,children:t,t:o,card:n,preset:a=true,stack:d=true,gap:c=8,filter:p,structural:w=false,formatting:R=false}){let y=useDocxEditor(),u=useEditorState(It),m=useMemo(()=>{let f=[];return w||f.push("structural"),R||f.push("format"),f.length>0?f:void 0},[w,R]),b=useMemo(()=>m?{excludeRevisionKinds:m}:void 0,[m]);useEffect(()=>(y?.setReviewActivationExclusions(m??null),()=>y?.setReviewActivationExclusions(null)),[y,m]);let T=me($t),N=me(b),E=N.setPaneOpen,{t:C}=useTranslation(),P=useCallback(f=>o?.(f)??C(f),[o,C]),D=useRef(null),de=useContext(ReviewRailContext);useEffect(()=>de?.register(),[de]);let j=N.paneOpen,I=useMemo(()=>p?N.items.filter(f=>p(f)):N.items,[N.items,p]),Ke=useMemo(()=>{let f=new Map;for(let v of I)v.author&&!f.has(v.author)&&f.set(v.author,f.size);return f},[I]),Ye=useMemo(()=>{let f=new Map;for(let v of I)f.set(v.id,v);return f},[I]),[Be,pt]=useState(()=>new Map),ye=useCallback((f,v)=>{v<=0||pt(x=>{if(x.get(f)===v)return x;let _=new Map(x);return _.set(f,v),_});},[]),be=useRef(new WeakMap),ee=useRef(null),je=useCallback((f,v)=>{!f||typeof ResizeObserver>"u"||(ye(v,f.offsetHeight),ee.current??(ee.current=new ResizeObserver(x=>{for(let _ of x){let h=be.current.get(_.target);h&&ye(h,_.target.offsetHeight);}})),be.current.get(f)!==v&&(be.current.set(f,v),ee.current.observe(f)));},[ye]);useEffect(()=>()=>ee.current?.disconnect(),[]);let[S,wt]=useState(Mt);useEffect(()=>{let f=D.current;if(!y||!f)return;let v=f.offsetParent,x=v?.querySelector(".docx-paginated-surface")??null,_=()=>{wt(M=>{let H=x&&v?x.getBoundingClientRect():null,O=H&&v?v.getBoundingClientRect():null,V={scale:y.getRenderScale(),top:H&&O&&v?H.top-O.top-v.clientTop+v.scrollTop:0,left:H&&O&&v?H.right-O.left-v.clientLeft+v.scrollLeft+Dt:null};return M.scale===V.scale&&M.top===V.top&&M.left===V.left?M:V});};_();let h=new ResizeObserver(_);return v&&h.observe(v),x&&h.observe(x),()=>h.disconnect()},[y,I,u,r]),useEffect(()=>{let f=D.current;if(!y||!f)return;let v=x=>{let _=x.target;if(!(_ instanceof Node)||f.contains(_))return;let h=f.offsetParent;!h||!h.contains(_)||h.querySelector(".docx-paginated-surface")?.contains(_)||y.setActiveReviewItem(null);};return document.addEventListener("mousedown",v,true),()=>document.removeEventListener("mousedown",v,true)},[y,u,r]);let[xe,Rt]=useState(null);useEffect(()=>{let f=D.current,v=f?.offsetParent;if(!v)return;let x=0,_=()=>{x=0,Rt(O=>{let V=v.scrollTop-it,ue=v.scrollTop+v.clientHeight+it;return O&&O.top===V&&O.bottom===ue?O:{top:V,bottom:ue}});},h=0,M=()=>{x===0&&(x=requestAnimationFrame(_)),f?.setAttribute("data-scrolling",""),window.clearTimeout(h),h=window.setTimeout(()=>f?.removeAttribute("data-scrolling"),150);};_(),v.addEventListener("scroll",M,{passive:true});let H=new ResizeObserver(M);return H.observe(v),()=>{x!==0&&cancelAnimationFrame(x),window.clearTimeout(h),v.removeEventListener("scroll",M),H.disconnect();}},[y,u,r]);let[F,ge]=useState(null),Fe=useCallback(()=>{y&&(y.surface?.retainSelection(),E(true),ge(y.getSelectionPlacement()?.anchorY??null));},[y,E]),Ze=useCallback(()=>{y?.surface?.releaseSelection(),ge(null),y?.focus();},[y]);useEffect(()=>{j||F===null||(y?.surface?.releaseSelection(),ge(null));},[j,F,y]);let Ue=F??N.selectionAnchorY,q=useMemo(()=>{let f=Ae(I);return I.filter(v=>!ke(v,f))},[I]),qe=useMemo(()=>{if(F===null)return q;let f=q.findIndex(x=>x.anchorY!==null&&x.anchorY>F),v={key:ve,anchorY:F};return f===-1?[...q,v]:[...q.slice(0,f),v,...q.slice(f)]},[q,F]),ze=useMemo(()=>{let f=new Map(Be);for(let v of q){if(f.has(v.key))continue;let x=v.text.length+(v.kind==="revision"?v.replacedText?.length??0:0),_=Math.min(6,Math.max(1,Math.ceil(x/36)));f.set(v.key,64+_*20);}return f},[Be,q]),{stacked:he,collapsedKeys:Qe}=useMemo(()=>{let f=S.scale,v=new Map,x=new Set,_=Number.NEGATIVE_INFINITY;for(let h of qe){let M=h.anchorY===null?Number.isFinite(_)?_:0:Math.max(h.anchorY,_);v.set(h.key,M);let H=h.anchorY===null?0:(M-h.anchorY)*f,O="isActive"in h&&h.isActive,V=H>Ot&&!O&&h.key!==ve;V&&x.add(h.key);let ue=V?Lt:ze.get(h.key)??St;_=M+(ue+c)/f;}return {stacked:v,collapsedKeys:x}},[qe,ze,c,S.scale]),Ne=Ue===null?null:S.top+(he.get(ve)??Ue)*S.scale,Ge=n?.className,yt=useMemo(()=>({t:o,cardClassName:Ge,review:{...N,items:I},allItems:T.items,authorSlots:Ke,byId:Ye,measure:je,beginDraft:Fe,endDraft:Ze}),[o,Ge,N,T.items,I,Ke,Ye,je,Fe,Ze]);if(r||u)return null;let We={ref:D,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":I.length,"data-open":j?"":void 0,role:"complementary","aria-label":P("review.ariaLabel"),onMouseDown:U,style:S.left===null?void 0:{left:S.left,right:"auto"}},Xe=typeof t=="function"?{}:lt(t),te=(f,v)=>f in Xe?Xe[f]:v,Je=a?jsxs(Fragment,{children:[te("AddComment",jsx(Te,{top:Ne,drafting:F!==null})),!j||F===null||Ne===null?null:te("Draft",jsx(Me,{top:Ne})),te("Balloon",jsx(De,{}))]}):null,bt=a?j?te("List",jsx(fe,{stack:d,positions:he,collapsed:Qe,scale:S.scale,offset:S.top,window:xe,children:t})):te("Markers",jsx(Ie,{scale:S.scale,offset:S.top,window:xe})):typeof t=="function"?null:t;return jsx(Pe.Provider,{value:yt,children:l&&isValidElement(t)?jsx(Slot,{...We,children:cloneElement(t,void 0,t.props.children,a?jsx(fe,{stack:d,positions:he,collapsed:Qe,scale:S.scale,offset:S.top,window:xe}):null,Je)}):jsxs("aside",{...We,children:[j&&i!==void 0?jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:i}):null,bt,Je]})})}function fe({stack:e=true,positions:i,collapsed:l,scale:r=1,offset:t=0,window:o=null,children:n,className:a,hidden:d}){let{review:c,measure:p,cardClassName:w}=$();if(d)return null;let R=Ae(c.items),y=c.items.filter(u=>!ke(u,R));return y.length===0?typeof n=="function"?null:jsx(Se,{}):jsx("div",{className:`docx-review__list${a?` ${a}`:""}`,children:y.map(u=>{let m=e?i?.get(u.key)??u.anchorY:u.anchorY,b=m==null?null:t+m*r;if(b!==null&&o&&(b<o.top||b>o.bottom))return null;let T=b===null?{}:{position:"absolute",top:b};return jsx(k.Provider,{value:u,children:jsx("div",{className:"docx-review__slot",style:T,...l?.has(u.key)?{"data-collapsed":""}:{},ref:N=>{p(N,u.key);},children:typeof n=="function"?n(u):jsx(Le,{...w?{className:w}:{},children:n})})},u.key)})})}fe.docxReviewPart="List";function Ie({scale:e=1,offset:i=0,window:l=null,className:r,hidden:t}){let{review:o}=$(),n=B();if(t)return null;let a=Ae(o.items),d=o.items.filter(c=>!ke(c,a));return jsx("div",{className:`docx-review__markers${r?` ${r}`:""}`,children:d.map(c=>{if(c.anchorY===null)return null;let p=i+c.anchorY*e;return l&&(p<l.top||p>l.bottom)?null:jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":c.kind==="revision"?c.revisionKind:c.kind,style:{position:"absolute",top:p},title:c.author?`${c.author}: ${c.text}`:c.text,"aria-label":`${n("review.showPane")}: ${c.author?`${c.author}. `:""}${c.text}`,onMouseDown:U,onClick:()=>{o.setPaneOpen(true),o.setActive(c.key);},children:oe(Kt)},c.key)})})}Ie.docxReviewPart="Markers";function Te({top:e,drafting:i=false,className:l,hidden:r,children:t}){let{beginDraft:o}=$(),n=B();if(r||i||e===null)return null;let a={type:"button",className:`docx-review__add${l?` ${l}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":n("common.comment"),title:n("common.comment"),onMouseDown:U,onClick:o};return t?jsx(Slot,{...a,children:t}):jsx("button",{...a,children:oe(Vt)})}Te.docxReviewPart="AddComment";function Me({top:e,className:i,hidden:l}){let{review:r,endDraft:t,measure:o}=$(),n=B(),[a,d]=useState(""),[c,p]=useState(false),w=useRef(null),R=useId();useEffect(()=>{w.current?.focus({preventScroll:true});},[]);let y=useCallback(()=>{if(a.trim().length===0)return;let u=r.comment(a.trim());p(!u),u&&(d(""),t());},[a,r,t]);return l?null:jsx("div",{className:`docx-review__slot${i?` ${i}`:""}`,style:{position:"absolute",top:e},ref:u=>{o(u,ve);},children:jsx("div",{className:"docx-review__card","data-testid":"review-draft","data-draft":"",children:jsxs("form",{className:"docx-review__reply-box",onSubmit:u=>{u.preventDefault(),y();},children:[jsx("label",{className:"docx-editor-sr-only",htmlFor:R,children:n("comments.addComment")}),jsx("input",{id:R,ref:w,"data-testid":"review-draft-input",className:"docx-review__input",value:a,placeholder:n("comments.addComment"),...c?{"aria-invalid":true}:{},onChange:u=>{p(false),d(u.target.value);},onKeyDown:u=>{if(u.key==="Escape"){u.preventDefault(),t();return}u.key==="Enter"&&(u.preventDefault(),y());}}),jsxs("div",{className:"docx-review__reply-actions",children:[jsx("button",{type:"button","data-testid":"review-draft-cancel",className:"docx-review__text-button",onMouseDown:U,onClick:t,children:n("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:a.trim().length===0,children:n("common.comment")})]}),c?jsx("span",{className:"docx-review__refused",role:"alert",children:n("review.commentRefused")}):null]})})})}Me.docxReviewPart="Draft";function De({className:e,hidden:i}){let{review:l,allItems:r,authorSlots:t}=$(),o=B(),n=useRef(null),[a,d]=useState(null),c=useRef(false);c.current=a!==null,useEffect(()=>{let u=n.current,m=u?.closest(".docx-review"),b=m?.closest(".docx-editor__scroll-container")??m?.offsetParent;if(!u||!m||!b)return;let T=(E,C)=>{let P=m.getBoundingClientRect(),D=E.getBoundingClientRect(),de=E.ownerDocument.defaultView?.innerHeight??1/0,j=Number(E.dataset.start),I=Number(E.dataset.end);d({revisionId:E.dataset.revisionId,author:E.dataset.revisionAuthor??"",...E.dataset.revisionDate!==void 0?{date:E.dataset.revisionDate}:{},...E.dataset.revisionKind!==void 0?{kind:E.dataset.revisionKind}:{},structuralSite:C,...E.dataset.paragraphId!==void 0?{paragraphId:E.dataset.paragraphId}:{},...Number.isFinite(j)?{start:j}:{},...Number.isFinite(I)?{end:I}:{},left:D.left-P.left,top:D.top-P.top,bottom:D.bottom-P.top,above:D.bottom+220>de});},N=E=>{let C=E.target;if(!(C instanceof Element)||u.contains(C))return;let P=C.closest("[data-revision-id]");if(P instanceof HTMLElement&&b.contains(P)){let D=P.classList.contains("docx-table-row--revision");if(P.dataset.revisionKind==="format"||D){T(P,D);return}}c.current&&d(null);};return b.addEventListener("pointerdown",N,true),b.addEventListener("mousedown",N,true),()=>{b.removeEventListener("pointerdown",N,true),b.removeEventListener("mousedown",N,true);}},[]);let p=useMemo(()=>{if(!a)return null;let u=null,m=false,b=null,T=false,N=null,E=false;for(let C of r)if(!(C.kind!=="revision"||C.item.kind!=="revision")){for(let P of C.item.addresses)if(P.id===a.revisionId){if(P.author===a.author){if(P.date===a.date)return C;u===null?u=C:u!==C&&(m=true);}b===null?b=C:b!==C&&(T=true);}if(a.paragraphId!==void 0&&a.start!==void 0&&a.end!==void 0&&(C.revisionKind==="format"||C.revisionKind==="structural")){for(let P of C.item.ranges)if(P.start.paragraphId===a.paragraphId&&P.start.offset<a.end&&P.end.offset>a.start){N===null?N=C:N!==C&&(E=true);break}}}return u!==null&&!m?u:b!==null&&!T?b:N!==null&&!E?N:null},[r,a]),w=p&&(p.revisionKind==="format"||p.revisionKind==="structural")?p:null,R=useRef(false);if(useEffect(()=>{if(w){R.current=true;return}R.current&&(R.current=false,d(null));},[w]),i)return null;let y=a?.kind==="format"?"format":"structural";return jsx("div",{ref:n,className:`docx-review__balloon-root${e?` ${e}`:""}`,children:a===null?null:jsx("div",{className:"docx-review__balloon","data-testid":"review-balloon",style:{left:a.left,top:a.above?a.top-6:a.bottom+6,transform:a.above?"translateY(-100%)":void 0},onMouseDown:U,children:w?jsx(k.Provider,{value:w,children:jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":w.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(t.get(w.author)??0)%st})`},onClick:()=>l.setActive(w.key),children:[jsxs("div",{className:"docx-review__head",children:[jsx(re,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(ie,{}),jsx(ae,{})]}),w.kind==="revision"&&!w.readOnly?jsxs("div",{className:"docx-review__actions",children:[jsx(pe,{}),jsx(we,{})]}):null]}),jsx(se,{})]})}):jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":y,children:[jsxs("div",{className:"docx-review__head",children:[jsx("span",{className:"docx-review__avatar","aria-hidden":"true",children:Zt(a.author)}),jsxs("div",{className:"docx-review__meta",children:[jsx("span",{className:"docx-review__author",children:a.author||o("comments.unknown")}),a.date?jsx(Ut,{raw:a.date}):null]})]}),jsx("div",{className:"docx-review__summary",children:jsx("span",{className:"docx-review__label","data-kind":y,children:o(dt(y))})})]})})})}De.docxReviewPart="Balloon";function Zt(e){let i=e.trim().split(/\s+/).filter(Boolean);return i.length===0?"?":i.slice(0,2).map(l=>l[0].toUpperCase()).join("")}function Ut({raw:e}){let i=new Date(e);return Number.isNaN(i.getTime())?null:jsx("time",{className:"docx-review__time",dateTime:e,children:ct.format(i)})}function Se({className:e,hidden:i,children:l}){let r=B();return i?null:jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:l??r("review.empty")})}Se.docxReviewPart="Empty";function Le({className:e,asChild:i,hidden:l,children:r}){let{review:t,authorSlots:o}=$(),n=useContext(k),a=useId();if(l||!n)return null;let d=o.get(n.author)??0,c={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${a}-author ${a}-summary`,"data-kind":n.kind==="revision"?n.revisionKind??"revision":n.kind,...n.kind==="custom"&&n.item.kind==="custom"?{"data-node-name":n.item.name}:{},...n.isActive?{"data-active":""}:{},...n.kind==="comment"&&n.resolved?{"data-resolved":""}:{},style:{"--doc-review-author":`var(--doc-review-author-${d%st})`},tabIndex:0,role:"button",id:a,onMouseDown:p=>{p.target?.closest("[data-review-selectable]")||p.currentTarget.focus({preventScroll:true});},onClick:()=>t.setActive(n.key),onKeyDown:p=>{p.target===p.currentTarget&&(p.key!=="Enter"&&p.key!==" "||(p.preventDefault(),t.setActive(n.key)));}};return i?jsx(Slot,{...c,children:r}):jsx("div",{...c,children:jsx(qt,{children:r})})}Le.docxReviewPart="Card";function qt({children:e}){let i=useContext(k),l=useMemo(()=>lt(e),[e]),r=(o,n)=>o in l?l[o]:n;if(!i)return null;if(i.kind==="custom"&&i.item.kind==="custom"){let o=i.item;return jsxs(Fragment,{children:[jsxs("div",{className:"docx-review__head",children:[r("Avatar",null),jsx("div",{className:"docx-review__meta",children:r("Author",jsx("span",{className:"docx-review__author","data-testid":"review-custom-title",children:o.title}))})]}),r("Summary",o.detail?jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsx("span",{className:"docx-review__text",children:o.detail})}):null),l.__extra]})}let t=i.kind==="revision"&&!i.readOnly;return jsxs(Fragment,{children:[jsxs("div",{className:"docx-review__head",children:[r("Avatar",jsx(re,{})),jsxs("div",{className:"docx-review__meta",children:[r("Author",jsx(ie,{})),r("Time",jsx(ae,{}))]}),t||i.kind==="comment"?jsxs("div",{className:"docx-review__actions",children:[r("Accept",jsx(pe,{})),r("Reject",jsx(we,{})),r("Delete",jsx(Re,{}))]}):null]}),r("Summary",jsx(se,{})),r("Replies",jsx(Oe,{})),r("Reply",jsx($e,{})),l.__extra]})}function lt(e){let i={},l=[],r=t=>{if(Array.isArray(t)){t.forEach(r);return}if(!t||typeof t!="object"||!("type"in t)){t&&l.push(t);return}if(t.type===Fragment$1){r(t.props.children);return}let o=t.type.docxReviewPart;o?i[o]=t:l.push(t);};return r(e),l.length>0&&(i.__extra=l),i}function re({className:e,asChild:i,hidden:l,children:r}){let t=useContext(k);if(l||!t||r===void 0&&!t.initials)return null;let o={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return i?jsx(Slot,{...o,children:r}):jsx("span",{...o,children:r??t.initials})}re.docxReviewPart="Avatar";function ie({className:e,asChild:i,hidden:l,children:r}){let t=useContext(k),o=B();if(l||!t)return null;let n=t.author||o("comments.unknown"),a={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return i?jsx(Slot,{...a,children:r}):jsx("span",{...a,children:r??n})}ie.docxReviewPart="Author";function ae({className:e,asChild:i,hidden:l,children:r}){let t=useContext(k);if(l||!t)return null;let o=t.date;if(!o)return null;let n=new Date(o);if(Number.isNaN(n.getTime()))return null;let a={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:o};return i?jsx(Slot,{...a,children:r}):jsx("time",{...a,children:r??ct.format(n)})}ae.docxReviewPart="Time";var ct=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function se({className:e,asChild:i,hidden:l,children:r}){let t=useContext(k),o=B();if(l||!t)return null;let n=t.text,a=t.kind!=="revision"?null:o(dt(t.revisionKind)),d=t.kind==="revision"&&t.revisionKind==="replace",c={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return i?jsx(Slot,{...c,children:r}):jsx("div",{...c,children:r??(d?jsxs("span",{className:"docx-review__text",children:[o("review.replaced")," ",jsxs("span",{className:"docx-review__removed",children:['"',t.replacedText,'"']})," ",o("review.replacedWith")," ",jsxs("span",{className:"docx-review__added",children:['"',n,'"']})]}):jsxs(Fragment,{children:[a?jsx("span",{className:"docx-review__label","data-kind":t.kind==="revision"?t.revisionKind:"revision",children:a}):null,n?jsx("span",{className:"docx-review__text",children:n}):null]}))})}se.docxReviewPart="Summary";function dt(e){switch(e){case "insert":return "review.inserted";case "delete":return "review.deleted";case "replace":return "review.replaced";case "moveFrom":return "review.movedFrom";case "moveTo":return "review.movedTo";case "format":return "revisions.runPropertiesChanged";case "paragraphMark":return "revisions.paragraphMarkInserted";default:return "review.structural"}}function pe({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=useContext(k),a=B();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.accept"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.accept(n);}};return i?jsx(Slot,{...c,children:r}):jsx("button",{...c,children:t??r??oe(Yt)})}pe.docxReviewPart="Accept";function we({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=useContext(k),a=B();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.reject"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.reject(n);}};return i?jsx(Slot,{...c,children:r}):jsx("button",{...c,children:t??r??oe(Bt)})}we.docxReviewPart="Reject";function Re({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=$(),n=useContext(k),{t:a}=useTranslation();if(l||!n||n.kind==="custom"||n.kind==="revision"&&n.readOnly)return null;let d=n.kind==="comment"?a("review.deleteComment"):a("review.discardChange"),c={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:d,onMouseDown:U,onClick:p=>{p.stopPropagation(),o.remove(n);}};return i?jsx(Slot,{...c,children:r}):jsx("button",{...c,children:t??r??oe(jt)})}Re.docxReviewPart="Delete";function Oe({className:e,hidden:i}){let{byId:l}=$(),r=useContext(k);if(i||!r||r.kind==="custom")return null;let t=r.replyIds.map(o=>l.get(o)).filter(o=>o!==void 0);return t.length===0?null:jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:t.map(o=>jsx(k.Provider,{value:o,children:jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxs("div",{className:"docx-review__head",children:[jsx(re,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(ie,{}),jsx(ae,{})]}),jsx("div",{className:"docx-review__actions",children:jsx(Re,{})})]}),jsx(se,{})]})},o.key))})}Oe.docxReviewPart="Replies";function $e({className:e,hidden:i,children:l}){let{review:r}=$(),t=useContext(k),o=B(),[n,a]=useState(""),[d,c]=useState(false),p=useId(),w=useCallback(()=>{if(!t||n.trim().length===0)return;let R=r.reply(t,n.trim());c(!R),R&&a("");},[t,n,r]);return i||!t||!t.isActive?null:l?jsx(Fragment,{children:l}):jsxs("form",{className:`docx-review__reply-box${e?` ${e}`:""}`,onSubmit:R=>{R.preventDefault(),w();},children:[jsx("label",{className:"docx-editor-sr-only",htmlFor:p,children:o("comments.replyPlaceholder")}),jsx("input",{id:p,"data-testid":"review-reply-input",className:"docx-review__input",value:n,placeholder:o("comments.replyPlaceholder"),...d?{"aria-invalid":true,"data-refused":""}:{},onChange:R=>{c(false),a(R.target.value);},onClick:R=>R.stopPropagation(),onKeyDown:R=>{R.key==="Enter"&&(R.preventDefault(),w());}}),jsxs("div",{className:"docx-review__reply-actions",children:[jsx("button",{type:"button","data-testid":"review-reply-cancel",className:"docx-review__text-button",onMouseDown:U,onClick:R=>{R.stopPropagation(),a(""),c(false),r.setActive(null);},children:o("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:n.trim().length===0,children:o("review.reply")})]}),d?jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:o("review.replyRefused")}):null]})}$e.docxReviewPart="Reply";var zt=Object.assign(Ft,{List:fe,Empty:Se,Card:Le,Avatar:re,Author:ie,Time:ae,Summary:se,Accept:pe,Reject:we,Delete:Re,Replies:Oe,Reply:$e,Markers:Ie,AddComment:Te,Draft:Me,Balloon:De});function le(e){let i=useDocxEditor();return useMemo(()=>e||(i?.getCustomNodeDefinitions()??[]).filter(j),[e,i])}var Xt=".docx-content-control-boundary";function X(e,i){let{node:l,definition:r,controlId:t}=e,o=t?i?.getReviewItems().find(d=>d.kind==="custom"&&d.item.id===t):void 0;if(o&&o.kind==="custom"){let d=o.item;return {...l,attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data},...t?{nodeId:t}:{}}}let n=t?Jt(i,t,r):void 0,a=r.fromDocx?r.fromDocx({attrs:l.attrs,text:"",...n===void 0?{}:{data:n}}):l.attrs;return a===null?null:{...l,attrs:a,...n===void 0?{}:{data:n},...t?{nodeId:t}:{}}}function Jt(e$1,i,l){let r=e$1?.surface;if(!r)return;let t=r.session.part(),o=customNodePayloadsByControl(r.session.currentPackage(),t.name).get(i);if(!o)return;let n=e(l.schema,o.data);return n.ok?n.value:void 0}function J(e,i){let l=e?.closest?.(Xt),r=l?.closest(".docx-content-control-chrome"),t=r?.getAttribute("data-tag"),o=t?c(t):null;if(!l||!o||!t)return null;let n=i.find(a=>a.tagPrefix===o.prefix&&a.name===o.name);return n?{node:{name:o.name,attrs:o.attrs,tag:t,rect:l.getBoundingClientRect()},definition:n,controlId:r?.getAttribute("data-docx-content-control")??null}:null}var He=".docx-content-control-boundary",tn=e=>{if(!k$1.test(e.tagPrefix)||!k$1.test(e.name))return [];let i=`${e.tagPrefix}:${e.name}`;return [`.docx-content-control-chrome[data-tag="${i}"]`,`.docx-content-control-chrome[data-tag^="${i}?"]`]};function nn(e){let{onNodeClick:i,onNodeHover:l}=e,r=useDocxEditor(),t=le(e.nodes);return useEffect(()=>{let o=document.createElement("style"),n=[];for(let a of t){let d=tn(a);if(d.length===0)continue;let c=a.chrome?.color!==void 0&&CSS.supports("color",a.chrome.color)?a.chrome.color:"#2563eb";n.push(`${d.map(p=>`${p} ${He}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${c} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return o.textContent=n.join(`
2
- `),document.head.append(o),()=>o.remove()},[t]),useEffect(()=>{let o=null,n=null,a=w=>J(document.elementFromPoint(w.clientX,w.clientY),t),d=w=>{let R=w.button===0?a(w):null;o=R?.controlId??null,n=R?.node.tag??null;},c=w=>{let R=o,y=n;if(o=null,n=null,y===null)return;let u=a(w);if(!u||u.node.tag!==y||R!==null&&u.controlId!==R)return;let m=X(u,r);m&&(u.definition.onClick?.(m),i?.(m));},p=w=>{let R=J(w.target,t);if(!R||w.relatedTarget?.closest?.(He)===w.target.closest(He))return;let u=X(R,r);u&&(R.definition.onHover?.(u),l?.(u));};return document.addEventListener("pointerdown",d,true),document.addEventListener("pointerup",c,true),document.addEventListener("mouseover",p),()=>{document.removeEventListener("pointerdown",d,true),document.removeEventListener("pointerup",c,true),document.removeEventListener("mouseover",p);}},[t,r,i,l]),null}function ft(e){let{onEditNode:i,onRemoveRefused:l,remove:r=true}=e,t=le(e.nodes),o=useContextMenuTarget(),n=useDocxEditor(),{t:a}=useTranslation(),d=useMemo(()=>o?J(o,t):null,[o,t]),c=useMemo(()=>d?X(d,n):null,[d,n]),p=useMemo(()=>!d?.definition.reviewCard||!c?null:d.definition.reviewCard({attrs:c.attrs,text:c.text??"",...c.data===void 0?{}:{data:c.data}}),[d,c]);if(!d||!c)return null;let{definition:w}=d,R=w.label??w.name,y=w.onEdit!==void 0||i!==void 0,u=r&&c.nodeId!==void 0&&n!==null;return !p&&!y&&!u?null:jsxs(Fragment,{children:[p?jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsx("span",{className:"docx-contextmenu__custom-title",children:p.title}),p.detail?jsx("span",{className:"docx-contextmenu__custom-detail",children:p.detail}):null]}):null,y?jsx(ContextMenuItem,{label:a("contextMenu.editCustomNode",{label:R}),className:"docx-contextmenu__custom-edit",onSelect:()=>{w.onEdit?.(c),i?.(c,w);}}):null,u?jsx(ContextMenuItem,{label:a("contextMenu.removeCustomNode",{label:R}),className:"docx-contextmenu__custom-remove",onSelect:()=>{let m=q(n,c.nodeId);m.ok||l?.(c,m.reason);}}):null,jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}ft.docxRowPlacement="start";export{nn as CustomNodeChrome,ft as CustomNodeContextMenu,zt as DocxEditorReview,X as activatedCustomNodeOf,J as resolveCustomNodeActivation,le as useCustomNodeDefinitions,me as useReview,Tt as useReviewItem,rt as useReviewOf,Nt as useStackedReviewPositions};
1
+ import {j as j$1,e,c,q,k}from'../chunk-PWNAGXXX.js';export{o as reviewModule}from'../chunk-PWNAGXXX.js';import {createContext,useMemo,useEffect,useCallback,useRef,useContext,useState,isValidElement,cloneElement,useId,useSyncExternalStore,Fragment as Fragment$1}from'react';import {useDocxEditor,useEditorState,useTranslation,ReviewRailContext,Slot,useContextMenuTarget,ContextMenuItem}from'@docx-editor.dev/react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';import {customNodePayloadsByControl}from'@docx-editor.dev/core/store';function me(e){let i=useDocxEditor();return it(i,e)}function it(e,i){let l=useCallback(f=>{if(!e)return ()=>{};let x=e.on("change",f),A=e.on("selectionChange",f),N=e.on("error",f);return ()=>{x(),A(),N();}},[e]),r=useSyncExternalStore(l,()=>e?`${e.getReviewRevision()}`:"none",()=>"none"),t=useMemo(()=>e?e.getReviewItems(i).filter(f=>f.item.kind!=="custom"||f.item.carded):[],[e,r,i]),o=useMemo(()=>t.find(f=>f.isActive)?.key??null,[t]),n=useCallback((f,x)=>e?e.setActiveReviewItem(f,x).ok:false,[e]),a=useCallback(f=>!e||f.kind!=="revision"||f.readOnly?false:e.acceptReviewItem(f.key).ok,[e]),d=useCallback(f=>!e||f.kind!=="revision"||f.readOnly?false:e.rejectReviewItem(f.key).ok,[e]),u=useCallback(f=>!e||f.kind==="custom"||f.kind==="revision"&&f.readOnly?false:e.deleteReviewItem(f.key).ok,[e]),c=useCallback((f,x,A)=>x.trim().length===0||!e?false:e.replyToReviewItem(f.key,x,A).ok,[e]),w=useMemo(()=>e?e.getSelectionPlacement()?.anchorY??null:null,[e,r]),R=useCallback((f,x)=>f.trim().length===0||!e?false:e.addComment(f,x).ok,[e]),y=useMemo(()=>e?e.isReviewPaneOpen():true,[e,r]),v=useCallback(f=>{!e||e.isReviewPaneOpen()===f||e.exec({type:"toggleReviewPane"});},[e]);return useMemo(()=>({items:t,activeKey:o,setActive:n,accept:a,reject:d,remove:u,reply:c,selectionAnchorY:w,comment:R,paneOpen:y,setPaneOpen:v,ready:e!==null&&!e.snapshot().isLoading&&e.snapshot().parseError===null}),[t,o,n,a,d,u,c,w,R,y,v,e])}function Mt(e,i,l={}){let r=l.gap??8,t=l.scale??1,o=l.defaultHeight??0;return useMemo(()=>{let n=new Map,a=Number.NEGATIVE_INFINITY;for(let d of e){let u=d.anchorY===null?Number.isFinite(a)?a:0:Math.max(d.anchorY,a);n.set(d.key,u),a=u+((i.get(d.key)??o)+r)/t;}return n},[e,i,r,t,o])}var X=e=>jsx("svg",{viewBox:"0 -960 960 960",width:16,height:16,"aria-hidden":"true",focusable:"false",children:jsx("path",{d:e,fill:"currentColor"})}),lt="M440-400h80v-120h120v-80H520v-120h-80v120H320v80h120v120ZM80-80v-720q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H240L80-80Zm126-240h594v-480H160v525l46-45Zm-46 0v-480 480Z",at="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",ct="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z",dt="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",ut="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",Dt="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",St="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",Ot="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",Lt="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 mt(e){if(e.kind==="comment")return at;if(e.kind==="custom")return e.item.icon??Lt;switch(e.revisionKind){case "insert":case "moveTo":return Dt;case "delete":case "moveFrom":return St;case "format":return Ot;default:return at}}var Kt=e=>e.isLoading||e.parseError!==null||e.pageSetup==null,Ie=createContext(null),I=createContext(null);function Yt(){return useContext(I)}var Zt={scale:96/72,top:0,left:null},Bt=16,ve="\0compose",ft=600,wt=8,Ft=72,jt=64,Ut=480,zt=Object.freeze({placement:false});function Pe(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 ke(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 H(){let e=useContext(Ie);return e||Qt}function Y(){let{t:e}=useContext(Ie)??{},{t:i}=useTranslation();return useCallback(l=>e?.(l)??i(l),[e,i])}var Qt={t:void 0,cardClassName:void 0,review:{items:[],activeKey:null,setActive:()=>false,accept:()=>false,reject:()=>false,remove:()=>false,reply:()=>false,selectionAnchorY:null,comment:()=>false,paneOpen:true,setPaneOpen:()=>{},ready:false},allItems:[],authorSlots:new Map,byId:new Map,measure:()=>{},beginDraft:()=>{},endDraft:()=>{}};function Gt({className:e,furniture:i,asChild:l,hidden:r,children:t,t:o,card:n,preset:a=true,stack:d=true,gap:u=8,filter:c,structural:w=false,formatting:R=false}){let y=useDocxEditor(),v=useEditorState(Kt),f=useMemo(()=>{let p=[];return w||p.push("structural"),R||p.push("format"),p.length>0?p:void 0},[w,R]),x=useMemo(()=>f?{excludeRevisionKinds:f}:void 0,[f]);useEffect(()=>(y?.setReviewActivationExclusions(f??null),()=>y?.setReviewActivationExclusions(null)),[y,f]);let A=me(zt),N=me(x),E=N.setPaneOpen,{t:C}=useTranslation(),T=useCallback(p=>o?.(p)??C(p),[o,C]),D=useRef(null),de=useContext(ReviewRailContext);useEffect(()=>de?.register(),[de]);let Z=N.paneOpen,k=useMemo(()=>c?N.items.filter(p=>c(p)):N.items,[N.items,c]),Ke=useMemo(()=>{let p=new Map;for(let m of k)m.author&&!p.has(m.author)&&p.set(m.author,p.size);return p},[k]),Ye=useMemo(()=>{let p=new Map;for(let m of k)p.set(m.id,m);return p},[k]),[Ze,_t]=useState(()=>new Map),ye=useCallback((p,m)=>{m<=0||_t(b=>{if(b.get(p)===m)return b;let _=new Map(b);return _.set(p,m),_});},[]),be=useRef(new WeakMap),te=useRef(null),Be=useCallback((p,m)=>{!p||typeof ResizeObserver>"u"||(ye(m,p.offsetHeight),te.current??(te.current=new ResizeObserver(b=>{for(let _ of b){let g=be.current.get(_.target);g&&ye(g,_.target.offsetHeight);}})),be.current.get(p)!==m&&(be.current.set(p,m),te.current.observe(p)));},[ye]);useEffect(()=>()=>te.current?.disconnect(),[]);let[S,Ct]=useState(Zt);useEffect(()=>{let p=D.current;if(!y||!p)return;let m=p.offsetParent,b=m?.querySelector(".docx-paginated-surface")??null,_=()=>{Ct(M=>{let q=b&&m?b.getBoundingClientRect():null,L=q&&m?m.getBoundingClientRect():null,$={scale:y.getRenderScale(),top:q&&L&&m?q.top-L.top-m.clientTop+m.scrollTop:0,left:q&&L&&m?q.right-L.left-m.clientLeft+m.scrollLeft+Bt:null};return M.scale===$.scale&&M.top===$.top&&M.left===$.left?M:$});};_();let g=new ResizeObserver(_);return m&&g.observe(m),b&&g.observe(b),()=>g.disconnect()},[y,k,v,r]),useEffect(()=>{let p=D.current;if(!y||!p)return;let m=b=>{let _=b.target;if(!(_ instanceof Node)||p.contains(_))return;let g=p.offsetParent;!g||!g.contains(_)||g.querySelector(".docx-paginated-surface")?.contains(_)||y.setActiveReviewItem(null);};return document.addEventListener("mousedown",m,true),()=>document.removeEventListener("mousedown",m,true)},[y,v,r]);let[xe,Et]=useState(null);useEffect(()=>{let p=D.current,m=p?.offsetParent;if(!m)return;let b=0,_=()=>{b=0,Et(L=>{let $=m.scrollTop-ft,ue=m.scrollTop+m.clientHeight+ft;return L&&L.top===$&&L.bottom===ue?L:{top:$,bottom:ue}});},g=0,M=()=>{b===0&&(b=requestAnimationFrame(_)),p?.setAttribute("data-scrolling",""),window.clearTimeout(g),g=window.setTimeout(()=>p?.removeAttribute("data-scrolling"),150);};_(),m.addEventListener("scroll",M,{passive:true});let q=new ResizeObserver(M);return q.observe(m),()=>{b!==0&&cancelAnimationFrame(b),window.clearTimeout(g),m.removeEventListener("scroll",M),q.disconnect();}},[y,v,r]);let[B,he]=useState(null),Fe=useCallback(()=>{y&&(y.surface?.retainSelection(),E(true),he(y.getSelectionPlacement()?.anchorY??null));},[y,E]),je=useCallback(()=>{y?.surface?.releaseSelection(),he(null),y?.focus();},[y]);useEffect(()=>{Z||B===null||(y?.surface?.releaseSelection(),he(null));},[Z,B,y]);let Ue=B??N.selectionAnchorY,U=useMemo(()=>{let p=ke(k);return k.filter(m=>!Pe(m,p))},[k]),ze=useMemo(()=>{if(B===null)return U;let p=U.findIndex(b=>b.anchorY!==null&&b.anchorY>B),m={key:ve,anchorY:B};return p===-1?[...U,m]:[...U.slice(0,p),m,...U.slice(p)]},[U,B]),Qe=useMemo(()=>{let p=new Map(Ze);for(let m of U){if(p.has(m.key))continue;let b=m.text.length+(m.kind==="revision"?m.replacedText?.length??0:0),_=Math.min(6,Math.max(1,Math.ceil(b/36)));p.set(m.key,64+_*20);}return p},[Ze,U]),{stacked:ge,collapsedKeys:Ge}=useMemo(()=>{let p=S.scale,m=new Map,b=new Set,_=Number.NEGATIVE_INFINITY;for(let g of ze){let M=g.anchorY===null?Number.isFinite(_)?_:0:Math.max(g.anchorY,_);m.set(g.key,M);let q=g.anchorY===null?0:(M-g.anchorY)*p,L="isActive"in g&&g.isActive,$=q>Ut&&!L&&g.key!==ve;$&&b.add(g.key);let ue=$?jt:Qe.get(g.key)??Ft;_=M+(ue+u)/p;}return {stacked:m,collapsedKeys:b}},[ze,Qe,u,S.scale]),Ne=Ue===null?null:S.top+(ge.get(ve)??Ue)*S.scale,We=n?.className,Tt=useMemo(()=>({t:o,cardClassName:We,review:{...N,items:k},allItems:A.items,authorSlots:Ke,byId:Ye,measure:Be,beginDraft:Fe,endDraft:je}),[o,We,N,A.items,k,Ke,Ye,Be,Fe,je]);if(r||v)return null;let Xe={ref:D,className:`docx-review${e?` ${e}`:""}`,"data-testid":"review-rail","data-count":k.length,"data-open":Z?"":void 0,role:"complementary","aria-label":T("review.ariaLabel"),onMouseDown:j,style:S.left===null?void 0:{left:S.left,right:"auto"}},Je=typeof t=="function"?{}:Rt(t),ne=(p,m)=>{if(!(p in Je))return m;let b=Je[p];return !isValidElement(b)||!isValidElement(m)?b:cloneElement(b,{...m.props,...b.props})},et=a?jsxs(Fragment,{children:[ne("AddComment",jsx(Me,{top:Ne,drafting:B!==null})),!Z||B===null||Ne===null?null:ne("Draft",jsx(De,{top:Ne})),ne("Balloon",jsx(Se,{}))]}):null,It=a?Z?ne("List",jsx(fe,{stack:d,positions:ge,collapsed:Ge,scale:S.scale,offset:S.top,window:xe,children:t})):ne("Markers",jsx(Ae,{scale:S.scale,offset:S.top,window:xe})):typeof t=="function"?null:t;return jsx(Ie.Provider,{value:Tt,children:l&&isValidElement(t)?jsx(Slot,{...Xe,children:cloneElement(t,void 0,t.props.children,a?jsx(fe,{stack:d,positions:ge,collapsed:Ge,scale:S.scale,offset:S.top,window:xe}):null,et)}):jsxs("aside",{...Xe,children:[Z&&i!==void 0?jsx("div",{className:"docx-review__furniture","data-testid":"review-furniture",children:i}):null,It,et]})})}function fe({stack:e=true,positions:i,collapsed:l,scale:r=1,offset:t=0,window:o=null,children:n,className:a,hidden:d}){let{review:u,measure:c,cardClassName:w}=H();if(d)return null;let R=ke(u.items),y=u.items.filter(v=>!Pe(v,R));return y.length===0?typeof n=="function"?null:jsx(Oe,{}):jsx("div",{className:`docx-review__list${a?` ${a}`:""}`,children:y.map(v=>{let f=e?i?.get(v.key)??v.anchorY:v.anchorY,x=f==null?null:t+f*r;if(x!==null&&o&&(x<o.top||x>o.bottom))return null;let A=x===null?{}:{position:"absolute",top:x};return jsx(I.Provider,{value:v,children:jsx("div",{className:"docx-review__slot",style:A,...l?.has(v.key)?{"data-collapsed":""}:{},ref:N=>{c(N,v.key);},children:typeof n=="function"?n(v):jsx(Le,{...w?{className:w}:{},children:n})})},v.key)})})}fe.docxReviewPart="List";function Ae({scale:e=1,offset:i=0,window:l=null,className:r,hidden:t,icon:o}){let{review:n}=H(),a=Y();if(t)return null;let d=ke(n.items),u=n.items.filter(c=>!Pe(c,d));return jsx("div",{className:`docx-review__markers${r?` ${r}`:""}`,children:u.map(c=>{if(c.anchorY===null)return null;let w=i+c.anchorY*e;return l&&(w<l.top||w>l.bottom)?null:jsx("button",{type:"button",className:"docx-review__marker","data-testid":"review-marker","data-kind":c.kind==="revision"?c.revisionKind:c.kind,style:{position:"absolute",top:w},title:c.author?`${c.author}: ${c.text}`:c.text,"aria-label":`${a("review.showPane")}: ${c.author?`${c.author}. `:""}${c.text}`,onMouseDown:j,onClick:()=>{n.setPaneOpen(true),n.setActive(c.key);},children:(typeof o=="function"?o(c):o)??X(mt(c))},c.key)})})}Ae.docxReviewPart="Markers";function Me({top:e,drafting:i=false,className:l,hidden:r,children:t}){let{beginDraft:o}=H(),n=Y();if(r||i||e===null)return null;let a={type:"button",className:`docx-review__add${l?` ${l}`:""}`,"data-testid":"review-add-comment",style:{position:"absolute",top:e},"aria-label":n("common.comment"),title:n("common.comment"),onMouseDown:j,onClick:o};return t?jsx(Slot,{...a,children:t}):jsx("button",{...a,children:X(lt)})}Me.docxReviewPart="AddComment";function De({top:e,className:i,hidden:l}){let{review:r,endDraft:t,measure:o}=H(),n=Y(),[a,d]=useState(""),[u,c]=useState(false),w=useRef(null),R=useId();useEffect(()=>{w.current?.focus({preventScroll:true});},[]);let y=useCallback(()=>{if(a.trim().length===0)return;let v=r.comment(a.trim());c(!v),v&&(d(""),t());},[a,r,t]);return l?null:jsx("div",{className:`docx-review__slot${i?` ${i}`:""}`,style:{position:"absolute",top:e},ref:v=>{o(v,ve);},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(),y();},children:[jsx("label",{className:"docx-editor-sr-only",htmlFor:R,children:n("comments.addComment")}),jsx("input",{id:R,ref:w,"data-testid":"review-draft-input",className:"docx-review__input",value:a,placeholder:n("comments.addComment"),...u?{"aria-invalid":true}:{},onChange:v=>{c(false),d(v.target.value);},onKeyDown:v=>{if(v.key==="Escape"){v.preventDefault(),t();return}v.key==="Enter"&&(v.preventDefault(),y());}}),jsxs("div",{className:"docx-review__reply-actions",children:[jsx("button",{type:"button","data-testid":"review-draft-cancel",className:"docx-review__text-button",onMouseDown:j,onClick:t,children:n("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-draft-submit",className:"docx-review__submit",disabled:a.trim().length===0,children:n("common.comment")})]}),u?jsx("span",{className:"docx-review__refused",role:"alert",children:n("review.commentRefused")}):null]})})})}De.docxReviewPart="Draft";function Se({className:e,hidden:i}){let{review:l,allItems:r,authorSlots:t}=H(),o=Y(),n=useRef(null),[a,d]=useState(null),u=useRef(false);u.current=a!==null,useEffect(()=>{let v=n.current,f=v?.closest(".docx-review"),x=f?.closest(".docx-editor__scroll-container")??f?.offsetParent;if(!v||!f||!x)return;let A=(E,C)=>{let T=f.getBoundingClientRect(),D=E.getBoundingClientRect(),de=E.ownerDocument.defaultView?.innerHeight??1/0,Z=Number(E.dataset.start),k=Number(E.dataset.end);d({revisionId:E.dataset.revisionId,author:E.dataset.revisionAuthor??"",...E.dataset.revisionDate!==void 0?{date:E.dataset.revisionDate}:{},...E.dataset.revisionKind!==void 0?{kind:E.dataset.revisionKind}:{},structuralSite:C,...E.dataset.paragraphId!==void 0?{paragraphId:E.dataset.paragraphId}:{},...Number.isFinite(Z)?{start:Z}:{},...Number.isFinite(k)?{end:k}:{},left:D.left-T.left,top:D.top-T.top,bottom:D.bottom-T.top,above:D.bottom+220>de});},N=E=>{let C=E.target;if(!(C instanceof Element)||v.contains(C))return;let T=C.closest("[data-revision-id]");if(T instanceof HTMLElement&&x.contains(T)){let D=T.classList.contains("docx-table-row--revision");if(T.dataset.revisionKind==="format"||D){A(T,D);return}}u.current&&d(null);};return x.addEventListener("pointerdown",N,true),x.addEventListener("mousedown",N,true),()=>{x.removeEventListener("pointerdown",N,true),x.removeEventListener("mousedown",N,true);}},[]);let c=useMemo(()=>{if(!a)return null;let v=null,f=false,x=null,A=false,N=null,E=false;for(let C of r)if(!(C.kind!=="revision"||C.item.kind!=="revision")){for(let T of C.item.addresses)if(T.id===a.revisionId){if(T.author===a.author){if(T.date===a.date)return C;v===null?v=C:v!==C&&(f=true);}x===null?x=C:x!==C&&(A=true);}if(a.paragraphId!==void 0&&a.start!==void 0&&a.end!==void 0&&(C.revisionKind==="format"||C.revisionKind==="structural")){for(let T of C.item.ranges)if(T.start.paragraphId===a.paragraphId&&T.start.offset<a.end&&T.end.offset>a.start){N===null?N=C:N!==C&&(E=true);break}}}return v!==null&&!f?v:x!==null&&!A?x:N!==null&&!E?N:null},[r,a]),w=c&&(c.revisionKind==="format"||c.revisionKind==="structural")?c:null,R=useRef(false);if(useEffect(()=>{if(w){R.current=true;return}R.current&&(R.current=false,d(null));},[w]),i)return null;let y=a?.kind==="format"?"format":"structural";return jsx("div",{ref:n,className:`docx-review__balloon-root${e?` ${e}`:""}`,children:a===null?null:jsx("div",{className:"docx-review__balloon","data-testid":"review-balloon",style:{left:a.left,top:a.above?a.top-6:a.bottom+6,transform:a.above?"translateY(-100%)":void 0},onMouseDown:j,children:w?jsx(I.Provider,{value:w,children:jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":w.revisionKind??"revision",style:{"--doc-review-author":`var(--doc-review-author-${(t.get(w.author)??0)%wt})`},onClick:()=>l.setActive(w.key),children:[jsxs("div",{className:"docx-review__head",children:[jsx(re,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(ie,{}),jsx(ae,{})]}),w.kind==="revision"&&!w.readOnly?jsxs("div",{className:"docx-review__actions",children:[jsx(pe,{}),jsx(we,{})]}):null]}),jsx(se,{})]})}):jsxs("div",{className:"docx-review__card","data-testid":"review-balloon-card","data-kind":y,children:[jsxs("div",{className:"docx-review__head",children:[jsx("span",{className:"docx-review__avatar","aria-hidden":"true",children:Wt(a.author)}),jsxs("div",{className:"docx-review__meta",children:[jsx("span",{className:"docx-review__author",children:a.author||o("comments.unknown")}),a.date?jsx(Xt,{raw:a.date}):null]})]}),jsx("div",{className:"docx-review__summary",children:jsx("span",{className:"docx-review__label","data-kind":y,children:o(bt(y))})})]})})})}Se.docxReviewPart="Balloon";function Wt(e){let i=e.trim().split(/\s+/).filter(Boolean);return i.length===0?"?":i.slice(0,2).map(l=>l[0].toUpperCase()).join("")}function Xt({raw:e}){let i=new Date(e);return Number.isNaN(i.getTime())?null:jsx("time",{className:"docx-review__time",dateTime:e,children:yt.format(i)})}function Oe({className:e,hidden:i,children:l}){let r=Y();return i?null:jsx("div",{className:`docx-review__empty${e?` ${e}`:""}`,"data-testid":"review-empty",children:l??r("review.empty")})}Oe.docxReviewPart="Empty";function Le({className:e,asChild:i,hidden:l,children:r}){let{review:t,authorSlots:o}=H(),n=useContext(I),a=useId();if(l||!n)return null;let d=o.get(n.author)??0,u={className:`docx-review__card${e?` ${e}`:""}`,"data-testid":"review-card","aria-labelledby":`${a}-author ${a}-summary`,"data-kind":n.kind==="revision"?n.revisionKind??"revision":n.kind,...n.kind==="custom"&&n.item.kind==="custom"?{"data-node-name":n.item.name}:{},...n.isActive?{"data-active":""}:{},...n.kind==="comment"&&n.resolved?{"data-resolved":""}:{},style:{"--doc-review-author":`var(--doc-review-author-${d%wt})`},tabIndex:0,role:"button",id:a,onMouseDown:c=>{c.target?.closest("[data-review-selectable]")||c.currentTarget.focus({preventScroll:true});},onClick:()=>t.setActive(n.key),onKeyDown:c=>{c.target===c.currentTarget&&(c.key!=="Enter"&&c.key!==" "||(c.preventDefault(),t.setActive(n.key)));}};return i?jsx(Slot,{...u,children:r}):jsx("div",{...u,children:jsx(Jt,{children:r})})}Le.docxReviewPart="Card";function Jt({children:e}){let i=useContext(I),l=useMemo(()=>Rt(e),[e]),r=(o,n)=>o in l?l[o]:n;if(!i)return null;if(i.kind==="custom"&&i.item.kind==="custom"){let o=i.item;return jsxs(Fragment,{children:[jsxs("div",{className:"docx-review__head",children:[r("Avatar",null),jsx("div",{className:"docx-review__meta",children:r("Author",jsx("span",{className:"docx-review__author","data-testid":"review-custom-title",children:o.title}))})]}),r("Summary",o.detail?jsx("div",{className:"docx-review__summary","data-testid":"review-summary","data-review-selectable":"",children:jsx("span",{className:"docx-review__text",children:o.detail})}):null),l.__extra]})}let t=i.kind==="revision"&&!i.readOnly;return jsxs(Fragment,{children:[jsxs("div",{className:"docx-review__head",children:[r("Avatar",jsx(re,{})),jsxs("div",{className:"docx-review__meta",children:[r("Author",jsx(ie,{})),r("Time",jsx(ae,{}))]}),t||i.kind==="comment"?jsxs("div",{className:"docx-review__actions",children:[r("Accept",jsx(pe,{})),r("Reject",jsx(we,{})),r("Delete",jsx(Re,{}))]}):null]}),r("Summary",jsx(se,{})),r("Replies",jsx(He,{})),r("Reply",jsx(qe,{})),l.__extra]})}function Rt(e){let i={},l=[],r=t=>{if(Array.isArray(t)){t.forEach(r);return}if(!t||typeof t!="object"||!("type"in t)){t&&l.push(t);return}if(t.type===Fragment$1){r(t.props.children);return}let o=t.type.docxReviewPart;o?i[o]=t:l.push(t);};return r(e),l.length>0&&(i.__extra=l),i}function re({className:e,asChild:i,hidden:l,children:r}){let t=useContext(I);if(l||!t||r===void 0&&!t.initials)return null;let o={className:`docx-review__avatar${e?` ${e}`:""}`,"data-testid":"review-avatar","aria-hidden":true};return i?jsx(Slot,{...o,children:r}):jsx("span",{...o,children:r??t.initials})}re.docxReviewPart="Avatar";function ie({className:e,asChild:i,hidden:l,children:r}){let t=useContext(I),o=Y();if(l||!t)return null;let n=t.author||o("comments.unknown"),a={className:`docx-review__author${e?` ${e}`:""}`,"data-testid":"review-author"};return i?jsx(Slot,{...a,children:r}):jsx("span",{...a,children:r??n})}ie.docxReviewPart="Author";function ae({className:e,asChild:i,hidden:l,children:r}){let t=useContext(I);if(l||!t)return null;let o=t.date;if(!o)return null;let n=new Date(o);if(Number.isNaN(n.getTime()))return null;let a={className:`docx-review__time${e?` ${e}`:""}`,"data-testid":"review-time",dateTime:o};return i?jsx(Slot,{...a,children:r}):jsx("time",{...a,children:r??yt.format(n)})}ae.docxReviewPart="Time";var yt=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function se({className:e,asChild:i,hidden:l,children:r}){let t=useContext(I),o=Y();if(l||!t)return null;let n=t.text,a=t.kind!=="revision"?null:o(bt(t.revisionKind)),d=t.kind==="revision"&&t.revisionKind==="replace",u={className:`docx-review__summary${e?` ${e}`:""}`,"data-testid":"review-summary","data-review-selectable":""};return i?jsx(Slot,{...u,children:r}):jsx("div",{...u,children:r??(d?jsxs("span",{className:"docx-review__text",children:[o("review.replaced")," ",jsxs("span",{className:"docx-review__removed",children:['"',t.replacedText,'"']})," ",o("review.replacedWith")," ",jsxs("span",{className:"docx-review__added",children:['"',n,'"']})]}):jsxs(Fragment,{children:[a?jsx("span",{className:"docx-review__label","data-kind":t.kind==="revision"?t.revisionKind:"revision",children:a}):null,n?jsx("span",{className:"docx-review__text",children:n}):null]}))})}se.docxReviewPart="Summary";function bt(e){switch(e){case "insert":return "review.inserted";case "delete":return "review.deleted";case "replace":return "review.replaced";case "moveFrom":return "review.movedFrom";case "moveTo":return "review.movedTo";case "format":return "revisions.runPropertiesChanged";case "paragraphMark":return "revisions.paragraphMarkInserted";default:return "review.structural"}}function pe({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=H(),n=useContext(I),a=Y();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.accept"),u={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-accept","aria-label":d,title:d,onMouseDown:j,onClick:c=>{c.stopPropagation(),o.accept(n);}};return i?jsx(Slot,{...u,children:r}):jsx("button",{...u,children:t??r??X(ct)})}pe.docxReviewPart="Accept";function we({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=H(),n=useContext(I),a=Y();if(l||!n||n.kind!=="revision"||n.readOnly)return null;let d=a("review.reject"),u={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-reject","aria-label":d,title:d,onMouseDown:j,onClick:c=>{c.stopPropagation(),o.reject(n);}};return i?jsx(Slot,{...u,children:r}):jsx("button",{...u,children:t??r??X(dt)})}we.docxReviewPart="Reject";function Re({className:e,asChild:i,hidden:l,children:r,icon:t}){let{review:o}=H(),n=useContext(I),{t:a}=useTranslation();if(l||!n||n.kind==="custom"||n.kind==="revision"&&n.readOnly)return null;let d=n.kind==="comment"?a("review.deleteComment"):a("review.discardChange"),u={type:"button",className:`docx-review__action${e?` ${e}`:""}`,"data-testid":"review-delete","aria-label":d,title:d,onMouseDown:j,onClick:c=>{c.stopPropagation(),o.remove(n);}};return i?jsx(Slot,{...u,children:r}):jsx("button",{...u,children:t??r??X(ut)})}Re.docxReviewPart="Delete";function He({className:e,hidden:i}){let{byId:l}=H(),r=useContext(I);if(i||!r||r.kind==="custom")return null;let t=r.replyIds.map(o=>l.get(o)).filter(o=>o!==void 0);return t.length===0?null:jsx("ol",{className:`docx-review__replies${e?` ${e}`:""}`,children:t.map(o=>jsx(I.Provider,{value:o,children:jsxs("li",{className:"docx-review__reply","data-testid":"review-reply",children:[jsxs("div",{className:"docx-review__head",children:[jsx(re,{}),jsxs("div",{className:"docx-review__meta",children:[jsx(ie,{}),jsx(ae,{})]}),jsx("div",{className:"docx-review__actions",children:jsx(Re,{})})]}),jsx(se,{})]})},o.key))})}He.docxReviewPart="Replies";function qe({className:e,hidden:i,children:l}){let{review:r}=H(),t=useContext(I),o=Y(),[n,a]=useState(""),[d,u]=useState(false),c=useId(),w=useCallback(()=>{if(!t||n.trim().length===0)return;let R=r.reply(t,n.trim());u(!R),R&&a("");},[t,n,r]);return i||!t||!t.isActive?null:l?jsx(Fragment,{children:l}):jsxs("form",{className:`docx-review__reply-box${e?` ${e}`:""}`,onSubmit:R=>{R.preventDefault(),w();},children:[jsx("label",{className:"docx-editor-sr-only",htmlFor:c,children:o("comments.replyPlaceholder")}),jsx("input",{id:c,"data-testid":"review-reply-input",className:"docx-review__input",value:n,placeholder:o("comments.replyPlaceholder"),...d?{"aria-invalid":true,"data-refused":""}:{},onChange:R=>{u(false),a(R.target.value);},onClick:R=>R.stopPropagation(),onKeyDown:R=>{R.key==="Enter"&&(R.preventDefault(),w());}}),jsxs("div",{className:"docx-review__reply-actions",children:[jsx("button",{type:"button","data-testid":"review-reply-cancel",className:"docx-review__text-button",onMouseDown:j,onClick:R=>{R.stopPropagation(),a(""),u(false),r.setActive(null);},children:o("common.cancel")}),jsx("button",{type:"submit","data-testid":"review-reply-submit",className:"docx-review__submit",disabled:n.trim().length===0,children:o("review.reply")})]}),d?jsx("span",{className:"docx-review__refused",role:"alert","data-testid":"review-reply-refused",children:o("review.replyRefused")}):null]})}qe.docxReviewPart="Reply";var en=Object.assign(Gt,{List:fe,Empty:Oe,Card:Le,Avatar:re,Author:ie,Time:ae,Summary:se,Accept:pe,Reject:we,Delete:Re,Replies:He,Reply:qe,Markers:Ae,AddComment:Me,Draft:De,Balloon:Se});function le(e){let i=useDocxEditor();return useMemo(()=>e||(i?.getCustomNodeDefinitions()??[]).filter(j$1),[e,i])}var rn=".docx-content-control-boundary";function J(e,i){let{node:l,definition:r,controlId:t}=e,o=t?i?.getReviewItems().find(d=>d.kind==="custom"&&d.item.id===t):void 0;if(o&&o.kind==="custom"){let d=o.item;return {...l,attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data},...t?{nodeId:t}:{}}}let n=t?an(i,t,r):void 0,a=r.fromDocx?r.fromDocx({attrs:l.attrs,text:"",...n===void 0?{}:{data:n}}):l.attrs;return a===null?null:{...l,attrs:a,...n===void 0?{}:{data:n},...t?{nodeId:t}:{}}}function an(e$1,i,l){let r=e$1?.surface;if(!r)return;let t=r.session.part(),o=customNodePayloadsByControl(r.session.currentPackage(),t.name).get(i);if(!o)return;let n=e(l.schema,o.data);return n.ok?n.value:void 0}function ee(e,i){let l=e?.closest?.(rn),r=l?.closest(".docx-content-control-chrome"),t=r?.getAttribute("data-tag"),o=t?c(t):null;if(!l||!o||!t)return null;let n=i.find(a=>a.tagPrefix===o.prefix&&a.name===o.name);return n?{node:{name:o.name,attrs:o.attrs,tag:t,rect:l.getBoundingClientRect()},definition:n,controlId:r?.getAttribute("data-docx-content-control")??null}:null}var $e=".docx-content-control-boundary",ln=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 cn(e){let{onNodeClick:i,onNodeHover:l}=e,r=useDocxEditor(),t=le(e.nodes);return useEffect(()=>{let o=document.createElement("style"),n=[];for(let a of t){let d=ln(a);if(d.length===0)continue;let u=a.chrome?.color!==void 0&&CSS.supports("color",a.chrome.color)?a.chrome.color:"#2563eb";n.push(`${d.map(c=>`${c} ${$e}`).join(", ")} {`," pointer-events: auto !important;"," opacity: 1;"," border: none;",` background: color-mix(in srgb, ${u} 12%, transparent);`," border-radius: 6px;"," cursor: default;","}");}return o.textContent=n.join(`
2
+ `),document.head.append(o),()=>o.remove()},[t]),useEffect(()=>{let o=null,n=null,a=w=>ee(document.elementFromPoint(w.clientX,w.clientY),t),d=w=>{let R=w.button===0?a(w):null;o=R?.controlId??null,n=R?.node.tag??null;},u=w=>{let R=o,y=n;if(o=null,n=null,y===null)return;let v=a(w);if(!v||v.node.tag!==y||R!==null&&v.controlId!==R)return;let f=J(v,r);f&&(v.definition.onClick?.(f),i?.(f));},c=w=>{let R=ee(w.target,t);if(!R||w.relatedTarget?.closest?.($e)===w.target.closest($e))return;let v=J(R,r);v&&(R.definition.onHover?.(v),l?.(v));};return document.addEventListener("pointerdown",d,true),document.addEventListener("pointerup",u,true),document.addEventListener("mouseover",c),()=>{document.removeEventListener("pointerdown",d,true),document.removeEventListener("pointerup",u,true),document.removeEventListener("mouseover",c);}},[t,r,i,l]),null}function Nt(e){let{onEditNode:i,onRemoveRefused:l,remove:r=true}=e,t=le(e.nodes),o=useContextMenuTarget(),n=useDocxEditor(),{t:a}=useTranslation(),d=useMemo(()=>o?ee(o,t):null,[o,t]),u=useMemo(()=>d?J(d,n):null,[d,n]),c=useMemo(()=>!d?.definition.reviewCard||!u?null:d.definition.reviewCard({attrs:u.attrs,text:u.text??"",...u.data===void 0?{}:{data:u.data}}),[d,u]);if(!d||!u)return null;let{definition:w}=d,R=w.label??w.name,y=w.onEdit!==void 0||i!==void 0,v=r&&u.nodeId!==void 0&&n!==null;return !c&&!y&&!v?null:jsxs(Fragment,{children:[c?jsxs("div",{className:"docx-contextmenu__custom-info","data-testid":"custom-node-info",children:[jsx("span",{className:"docx-contextmenu__custom-title",children:c.title}),c.detail?jsx("span",{className:"docx-contextmenu__custom-detail",children:c.detail}):null]}):null,y?jsx(ContextMenuItem,{label:a("contextMenu.editCustomNode",{label:R}),className:"docx-contextmenu__custom-edit",onSelect:()=>{w.onEdit?.(u),i?.(u,w);}}):null,v?jsx(ContextMenuItem,{label:a("contextMenu.removeCustomNode",{label:R}),className:"docx-contextmenu__custom-remove",onSelect:()=>{let f=q(n,u.nodeId);f.ok||l?.(u,f.reason);}}):null,jsx("div",{role:"separator",className:"docx-toolbar__menu-separator"})]})}Nt.docxRowPlacement="start";export{cn as CustomNodeChrome,Nt as CustomNodeContextMenu,en as DocxEditorReview,J as activatedCustomNodeOf,ee as resolveCustomNodeActivation,le as useCustomNodeDefinitions,me as useReview,Yt as useReviewItem,it as useReviewOf,Mt as useStackedReviewPositions};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docx-editor.dev/pro",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
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",
@@ -1 +0,0 @@
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),c=i!==void 0?N(i):null,u=c?n.get(`${c.prefix}:${c.name}`):void 0;if(c&&u&&i!==void 0){let l=j(s),f=re(u,s.id,o.payloads?.get(s.id),contentControlPropertiesOf(s).dataBinding!==void 0,o.onDiagnostic),m=u.fromDocx?u.fromDocx({attrs:c.attrs,text:l,...f.present?{data:f.value}:{}}):c.attrs;if(m!==null){r.push({name:u.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 c=i.reviewCard?i.reviewCard({attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data}}):null;if(i.reviewCard&&c===null)continue;let u=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&&c!==null,title:c?.title??"",...c?.detail!==void 0?{detail:c.detail}:{},range:u?{partName:e.name,start:{paragraphId:u.paragraphId,offset:u.start},end:{paragraphId:u.paragraphId,offset:u.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 c=s.size;for(let[u,l]of paragraphOrderOfPart(i))s.has(u)||s.set(u,c+l);}return a.length===0?t:[...t,...a].sort((i,c)=>reviewItemPositionRank(i,s)-reviewItemPositionRank(c,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,c=o.lock===void 0?"contentLocked":o.lock,u=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},...c===false?{}:{lock:c},...r?{payload:D(n,t,r.serialized,a.text)}:{}},u);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 c of i.children)n(c);},r=i=>{if(i.id===t)return i;if(i.kind==="textValue")return null;for(let c of i.children){let u=r(c);if(u)return u}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),c=i?xe(i,o):null,u=Se(r,o,s);if(!i||!c||!u)return {ok:false,code:"notFound",reason:"no custom node with that id"};let l=`${t.tagPrefix}:${t.name}`;if(u.identity!==null&&u.identity!==l)return {ok:false,code:"invalidArgs",reason:`node ${o} is a ${u.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?u.attrs:void 0),text:n.text??(m===null&&n.data===null?u.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??u.alias,w=n.lock??u.lock,y=r.session.insertCustomNode({replaceControlId:o,paragraphId:i.id,offset:c.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 +0,0 @@
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),c=i!==void 0?N(i):null,u=c?n.get(`${c.prefix}:${c.name}`):void 0;if(c&&u&&i!==void 0){let l=j(s),f=re(u,s.id,o.payloads?.get(s.id),store.contentControlPropertiesOf(s).dataBinding!==void 0,o.onDiagnostic),m=u.fromDocx?u.fromDocx({attrs:c.attrs,text:l,...f.present?{data:f.value}:{}}):c.attrs;if(m!==null){r.push({name:u.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 c=i.reviewCard?i.reviewCard({attrs:d.attrs,text:d.text,...d.data===void 0?{}:{data:d.data}}):null;if(i.reviewCard&&c===null)continue;let u=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&&c!==null,title:c?.title??"",...c?.detail!==void 0?{detail:c.detail}:{},range:u?{partName:e.name,start:{paragraphId:u.paragraphId,offset:u.start},end:{paragraphId:u.paragraphId,offset:u.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 c=s.size;for(let[u,l]of store.paragraphOrderOfPart(i))s.has(u)||s.set(u,c+l);}return a.length===0?t:[...t,...a].sort((i,c)=>layout.reviewItemPositionRank(i,s)-layout.reviewItemPositionRank(c,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,c=o.lock===void 0?"contentLocked":o.lock,u=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},...c===false?{}:{lock:c},...r?{payload:D(n,t,r.serialized,a.text)}:{}},u);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 c of i.children)n(c);},r=i=>{if(i.id===t)return i;if(i.kind==="textValue")return null;for(let c of i.children){let u=r(c);if(u)return u}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),c=i?xe(i,o):null,u=Se(r,o,s);if(!i||!c||!u)return {ok:false,code:"notFound",reason:"no custom node with that id"};let l=`${t.tagPrefix}:${t.name}`;if(u.identity!==null&&u.identity!==l)return {ok:false,code:"invalidArgs",reason:`node ${o} is a ${u.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?u.attrs:void 0),text:n.text??(m===null&&n.data===null?u.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??u.alias,w=n.lock??u.lock,y=r.session.insertCustomNode({replaceControlId:o,paragraphId:i.id,offset:c.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;