@univerjs/docs 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.js CHANGED
@@ -2781,7 +2781,7 @@ function composeActions(actions) {
2781
2781
  //#endregion
2782
2782
  //#region package.json
2783
2783
  var name = "@univerjs/docs";
2784
- var version = "1.0.1";
2784
+ var version = "1.0.2";
2785
2785
 
2786
2786
  //#endregion
2787
2787
  //#region src/config/config.ts
package/lib/es/index.js CHANGED
@@ -2780,7 +2780,7 @@ function composeActions(actions) {
2780
2780
  //#endregion
2781
2781
  //#region package.json
2782
2782
  var name = "@univerjs/docs";
2783
- var version = "1.0.1";
2783
+ var version = "1.0.2";
2784
2784
 
2785
2785
  //#endregion
2786
2786
  //#region src/config/config.ts
package/lib/index.js CHANGED
@@ -2780,7 +2780,7 @@ function composeActions(actions) {
2780
2780
  //#endregion
2781
2781
  //#region package.json
2782
2782
  var name = "@univerjs/docs";
2783
- var version = "1.0.1";
2783
+ var version = "1.0.2";
2784
2784
 
2785
2785
  //#endregion
2786
2786
  //#region src/config/config.ts
package/lib/umd/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("@univerjs/core"),require("@univerjs/engine-render"),require("rxjs"),require("@univerjs/protocol"),require("@univerjs/rpc")):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`@univerjs/engine-render`,`rxjs`,`@univerjs/protocol`,`@univerjs/rpc`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverDocs={},e.UniverCore,e.UniverEngineRender,e.rxjs,e.UniverProtocol,e.UniverRpc))})(this,function(e,t,n,r,i,a){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let o={id:`doc.operation.set-selections`,type:t.CommandType.OPERATION,handler:()=>!0};function s(e){"@babel/helpers - typeof";return s=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},s(e)}function c(e,t){if(s(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(s(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function l(e){var t=c(e,`string`);return s(t)==`symbol`?t:t+``}function u(e,t,n){return(t=l(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e,t){return function(n,r){t(n,r,e)}}function f(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let p=class extends t.RxDisposable{constructor(e,t){super(),this._commandService=e,this._univerInstanceService=t,u(this,`_currentSelection`,null),u(this,`_textSelectionInfo`,new Map),u(this,`_textSelection$`,new r.Subject),u(this,`textSelection$`,this._textSelection$.asObservable()),u(this,`_refreshSelection$`,new r.BehaviorSubject(null)),u(this,`refreshSelection$`,this._refreshSelection$.asObservable()),this._listenCurrentUnit()}_listenCurrentUnit(){this._univerInstanceService.getCurrentTypeOfUnit$(t.UniverInstanceType.UNIVER_DOC).pipe((0,r.takeUntil)(this.dispose$)).subscribe(e=>{if(e==null)return;let t=e.getUnitId();this._setCurrentSelectionNotRefresh({unitId:t,subUnitId:t})})}__getCurrentSelection(){return this._currentSelection}getSelectionInfo(e=this._currentSelection){return this._getTextRanges(e)}refreshSelection(e=this._currentSelection,t=!1){e!=null&&this._refresh(e,t)}__TEST_ONLY_setCurrentSelection(e){this._currentSelection=e,this._refresh(e)}getTextRanges(e=this._currentSelection){var t;return(t=this._getTextRanges(e))==null?void 0:t.textRanges}getRectRanges(e=this._currentSelection){var t;return(t=this._getTextRanges(e))==null?void 0:t.rectRanges}getDocRanges(e=this._currentSelection){let t=this.getTextRanges(e)??[],n=this.getRectRanges(e)??[];return[...t,...n].filter(e=>e.startOffset!=null&&e.endOffset!=null).sort((e,t)=>e.startOffset>t.startOffset?1:e.startOffset<t.startOffset?-1:0)}getActiveTextRange(){let e=this._getTextRanges(this._currentSelection);if(e==null)return;let{textRanges:t}=e;return t.find(e=>e.isActive)}__TEST_ONLY_add(e,t=!0){this._currentSelection!=null&&this._addByParam({...this._currentSelection,textRanges:e,rectRanges:[],segmentId:``,segmentPage:-1,isEditing:t,style:n.NORMAL_TEXT_SELECTION_PLUGIN_STYLE})}replaceDocRanges(e,t=this._currentSelection,n=!0,r){if(t==null)return;let{unitId:i,subUnitId:a}=t;this._refreshSelection$.next({unitId:i,subUnitId:a,docRanges:e,isEditing:n,options:r})}replaceSelectionInfoWithoutRefresh(e,t=this._currentSelection){t!=null&&this._replaceByParam({...e,...t})}__replaceTextRangesWithNoRefresh(e,t){let n={...e,...t};this._replaceByParam(n),this._textSelection$.next(n);let{unitId:r,subUnitId:i,segmentId:a,style:s,textRanges:c,rectRanges:l,isEditing:u}=n,d=[...c,...l].filter(e=>e.startOffset!=null&&e.endOffset!=null).sort((e,t)=>e.startOffset>t.startOffset?1:e.startOffset<t.startOffset?-1:0);this._commandService.executeCommand(o.id,{unitId:r,subUnitId:i,segmentId:a,style:s,isEditing:u,ranges:d})}dispose(){this._textSelection$.complete(),this._refreshSelection$.complete()}_setCurrentSelectionNotRefresh(e){this._currentSelection=e}_getTextRanges(e){var t;if(e==null)return;let{unitId:n,subUnitId:r=``}=e;return(t=this._textSelectionInfo.get(n))==null?void 0:t.get(r)}_refresh(e,t=!1){let n=this._getTextRanges(e);if(n==null)return;let{textRanges:r,rectRanges:i,options:a}=n,o=[...r,...i],{unitId:s,subUnitId:c}=e;this._refreshSelection$.next({unitId:s,subUnitId:c,docRanges:o,isEditing:t,options:a!=null&&a.forceFocus?{...a,forceFocus:!1}:a})}_replaceByParam(e){let{unitId:t,subUnitId:n,...r}=e;this._textSelectionInfo.has(t)||this._textSelectionInfo.set(t,new Map),this._textSelectionInfo.get(t).set(n,{...r})}_addByParam(e){let{unitId:t,subUnitId:n,...r}=e;this._textSelectionInfo.has(t)||this._textSelectionInfo.set(t,new Map);let i=this._textSelectionInfo.get(t);i.has(n)?i.get(n).textRanges.push(...e.textRanges):i.set(n,{...r})}};p=f([d(0,t.ICommandService),d(1,t.IUniverInstanceService)],p);let m=`doc.mutation.rich-text-editing`;function h(e){let{docxRawXml:t,docxExportTs:n,...r}=e;return r}function g(e){let{docxRawCustomBlocks:t,docxRawBlocks:n,docxExportExcludedRanges:r,payloads:i,customBlocks:a,...o}=e;return{...o,...a==null?{}:{customBlocks:a.map(h)}}}function _(e){return{...e,body:g(e.body)}}function v(e){return{...e,body:g(e.body)}}function y(e){let{resources:t,body:n,headers:r,footers:i,footnotes:a,endnotes:o,...s}=e;return{...s,...a==null?{}:{footnotes:Object.fromEntries(Object.entries(a).map(([e,t])=>[e,{...t,body:g(t.body)}]))},...o==null?{}:{endnotes:Object.fromEntries(Object.entries(o).map(([e,t])=>[e,{...t,body:g(t.body)}]))},...n==null?{}:{body:g(n)},...r==null?{}:{headers:Object.fromEntries(Object.entries(r).map(([e,t])=>[e,_(t)]))},...i==null?{}:{footers:Object.fromEntries(Object.entries(i).map(([e,t])=>[e,v(t)]))}}}var b;let x=function(e){return e.MAIN_THREAD=`main-thread`,e.WORKER=`worker`,e}({}),S=function(e){return e.ACCEPTED=`accepted`,e.NOT_FOUND=`not-found`,e.RESNAPSHOT_REQUIRED=`resnapshot-required`,e.SUPERSEDED=`superseded`,e}({}),C=function(e){return e.UNREGISTERED=`unregistered`,e.INITIALIZING=`initializing`,e.ACTIVE=`active`,e.RECOVERING=`recovering`,e.FAILED=`failed`,e}({});function w(e,t){let n=e,r=t,i=Object.keys(n),a=Object.keys(r);return i.length===a.length&&i.every(e=>n[e]===r[e])}function T(e,t){let n={},r=[];for(let[r,i]of Object.entries(t))(e[r]==null||!w(e[r],i))&&(n[r]=i);for(let n of Object.keys(e))t[n]??r.push(n);return{removals:r,upserts:n}}function ee(e){return JSON.stringify([e.segmentId,e.rangeId])}function E(e){return new Map(e.map(e=>[ee(e),e]))}function D(e,t){let n=[],r=[];for(let[r,i]of t){let t=e.get(r);(t==null||!w(t.presentation,i.presentation))&&n.push(i)}for(let[n,i]of e)t.has(n)||r.push({segmentId:i.segmentId,rangeId:i.rangeId});return{removals:r,upserts:n}}function te(e){return typeof e==`object`&&!!e&&`unitId`in e&&typeof e.unitId==`string`&&`actions`in e}function ne(e){let t=e.getSnapshot(),r=t.documentStyle,i={},a=[t.body,...Object.values(t.headers??{}).map(e=>e.body),...Object.values(t.footers??{}).map(e=>e.body)];for(let c of a.flatMap(e=>(e==null?void 0:e.customBlocks)??[])){var o,s;let a=(o=t.drawings)==null?void 0:o[c.blockId];if(a==null)continue;let l=(0,n.getDocsCustomBlockRenderViewport)(e.getUnitId(),c.blockId,{fallbackHeight:a.docTransform.size.height??0,fallbackWidth:a.docTransform.size.width??0,pageMarginLeft:r.marginLeft,pageMarginRight:r.marginRight,pageWidth:(s=r.pageSize)==null?void 0:s.width});l!=null&&(i[c.blockId]={...l})}return i}let O=b=class extends t.Disposable{constructor(e,n,i,a){super(),this._univerInstanceService=e,this._commandService=n,this._localeService=i,this._logService=a,u(this,`_executor`,null),u(this,`_executorReady`,null),u(this,`_recoveryFailure`,null),u(this,`_sessionEpoch`,0),u(this,`_sessions`,new Map),u(this,`_hydrationSamples`,new Map),u(this,`_customRangePresentationProviders`,new Set),u(this,`_executorStatus$`,new r.BehaviorSubject({state:`unregistered`,executor:null,diagnostic:null,recoveryUnitId:null})),u(this,`executorStatus$`,this._executorStatus$.asObservable()),this.disposeWithMe(this._univerInstanceService.getTypeOfUnitAdded$(t.UniverInstanceType.UNIVER_DOC).subscribe(({unit:e})=>this._createSessionIfEligible(e))),this.disposeWithMe(this._univerInstanceService.getTypeOfUnitDisposed$(t.UniverInstanceType.UNIVER_DOC).subscribe(e=>this._disposeSession(e.getUnitId()))),this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id!==`doc.mutation.rich-text-editing`)return;let t=e.params;if(!te(t)){this._logService.warn(`[DocLayoutExecutorService]: ignored malformed document mutation parameters.`);return}this._enqueueCommittedMutation(t)})),this.disposeWithMe(this._localeService.localeChanged$.subscribe(()=>{for(let e of this._sessions.keys()){let t=this._getEligibleModel(e);t!=null&&this._replaceSession(t).catch(e=>{this._logService.error(`[DocLayoutExecutorService]: failed to refresh Worker locale.`,e)})}}))}register(e){if(this._executor!=null)throw Error(`A document layout executor is already registered.`);this._executor=e,this._recoveryFailure=null,this._executorStatus$.next({state:`initializing`,executor:e.type,diagnostic:null,recoveryUnitId:null});let n=e.initialize();this._executorReady=n,n.then(()=>{this._executor===e&&this._executorStatus$.next({state:`active`,executor:e.type,diagnostic:null,recoveryUnitId:null})}).catch(t=>{if(this._executor!==e)return;this._executor=null,this._executorReady=null,this._disposeManagedSessions(),this._sessions.clear();let n=t instanceof Error?t.message:String(t);this._executorStatus$.next({state:`failed`,executor:e.type,diagnostic:n,recoveryUnitId:null}),this._logService.error(`[DocLayoutExecutorService]: document layout executor initialization failed.`,t)});for(let e of this._univerInstanceService.getAllUnitsForType(t.UniverInstanceType.UNIVER_DOC))this._createSessionIfEligible(e);return(0,t.toDisposable)(()=>{this._executor===e&&(this._executor=null,this._executorReady=null,this._disposeManagedSessions(),this._sessions.clear(),this._executorStatus$.next({state:`unregistered`,executor:null,diagnostic:null,recoveryUnitId:null}))})}getExecutor(){return this._executor}getExecutorStatus(){return this._executorStatus$.value}registerCustomRangePresentationProvider(e){return this._customRangePresentationProviders.add(e),(0,t.toDisposable)(()=>this._customRangePresentationProviders.delete(e))}async getPerformanceMetrics(e){var t;let n=await((t=this._executor)==null?void 0:t.getPerformanceMetrics(e));return{hydrationMs:[...this._hydrationSamples.get(e)??[]],mutationTransferMs:[...(n==null?void 0:n.mutationTransferMs)??[]],patchTransferMs:[...(n==null?void 0:n.patchTransferMs)??[]],snapshotTransferMs:[...(n==null?void 0:n.snapshotTransferMs)??[]]}}async resetPerformanceMetrics(e){var t;this._hydrationSamples.delete(e),await((t=this._executor)==null?void 0:t.resetPerformanceMetrics(e))}recordHydrationDuration(e,t){this._appendPerformanceSample(this._hydrationSamples,e,t)}async recoverExecutor(e,t){let n=this._requireExecutor();this._executorStatus$.next({state:`recovering`,executor:n.type,diagnostic:t,recoveryUnitId:e});for(let e of this._sessions.values())this._markSessionDisposed(e);this._sessions.clear(),this._hydrationSamples.clear();try{let e=n.recover();this._executorReady=e,await e}catch(t){if(this._executor===n){let r=t instanceof Error?t.message:String(t);this._executor=null,this._executorReady=null,this._recoveryFailure={diagnostic:r,unitId:e},this._executorStatus$.next({state:`recovering`,executor:n.type,diagnostic:r,recoveryUnitId:e})}throw t}}completeRecovery(e){var t;let n=this._executorStatus$.value;if(n.state!==`recovering`||n.recoveryUnitId!==e)return;let r=((t=this._recoveryFailure)==null?void 0:t.unitId)===e?this._recoveryFailure:null;this._recoveryFailure=null,this._executorStatus$.next({state:r==null?`active`:`failed`,executor:n.executor,diagnostic:(r==null?void 0:r.diagnostic)??null,recoveryUnitId:null})}async startLayout(e,t,n){let{unitId:r}=e,i=this._executor,a=this._getEligibleModel(r);if(i==null||a==null)return null;let o=this._sessions.get(r);if(o!=null&&o.sourceMutationRevision!==a.getMutationRevision()&&(o.needsResnapshot=!0),(o==null||o.needsResnapshot)&&(o=await this._replaceSession(a)),o.disposed||this._executor!==i||this._getEligibleModel(r)!==a)return null;let s=await this._startSynchronizedLayout(i,o,e,t,n);return o.disposed||this._executor!==i||this._getEligibleModel(r)!==a?null:((s.status===`not-found`||s.status===`resnapshot-required`)&&(o=await this._replaceSession(a),s=await this._startSynchronizedLayout(i,o,e,t,n)),s)}stepLayout(e){return this._requireExecutor().stepLayout(e)}publishBacklog(e){return this._requireExecutor().publishBacklog(e)}getLayoutPage(e){return this._requireExecutor().getLayoutPage(e)}cancelLayout(e){let t=this._executor;return t==null?Promise.resolve():t.cancelLayout(e)}disposeLayoutMount(e){let t=this._executor,n=this._sessions.get(e.unitId),r=n==null?void 0:n.latestStarts.get(e.mountId);return(r==null?void 0:r.mountEpoch)===e.mountEpoch&&r.viewportEpoch===e.viewportEpoch&&(n==null||n.latestStarts.delete(e.mountId),n==null||n.customBlockViewportsByMount.delete(e.mountId)),t==null?Promise.resolve():t.disposeLayoutMount(e)}dispose(){let e=this._executor;if(e!=null)for(let[t,n]of this._sessions)this._markSessionDisposed(n),e.disposeSession({unitId:t,sessionEpoch:n.sessionEpoch}).catch(t=>{this._executor===e&&this._logService.error(`[DocLayoutExecutorService]: failed to dispose a Worker session.`,t)});this._sessions.clear(),this._executor=null,this._executorReady=null,this._recoveryFailure=null,this._executorStatus$.complete(),this._customRangePresentationProviders.clear(),super.dispose()}_createSessionIfEligible(e){this._executor!=null&&this._isEligible(e)&&!this._sessions.has(e.getUnitId())&&this._replaceSession(e).catch(e=>{this._logService.error(`[DocLayoutExecutorService]: failed to create a Worker session.`,e)})}_enqueueCommittedMutation(e){let n=this._executor,r=this._getEligibleModel(e.unitId);if(n==null||r==null)return;let i=this._sessions.get(e.unitId);if(i==null){this._replaceSession(r).catch(e=>{this._logService.error(`[DocLayoutExecutorService]: failed to snapshot a document mutation.`,e)});return}if(t.JSONX.isNoop(e.actions))return;let a=r.getMutationRevision();if(a!==i.sourceMutationRevision+1){i.needsResnapshot=!0;return}let o=i.modelRevision,s=o+1;i.modelRevision=s,i.sourceMutationRevision=a,i.pendingMutations.push({baseRevision:o,modelRevision:s,actions:e.actions})}async _startSynchronizedLayout(e,t,n,r,i){var a;let{unitId:o,mountId:s}=n,c=(((a=t.latestStarts.get(s))==null?void 0:a.startId)??0)+1,l={startId:c,mountEpoch:n.mountEpoch,viewportEpoch:n.viewportEpoch};t.latestStarts.set(s,l);let u=t.queue.then(async()=>{if(t.disposed||this._executor!==e)return{status:`not-found`};let a=this._getEligibleModel(o);if(a==null||a.getMutationRevision()!==t.sourceMutationRevision)return t.needsResnapshot=!0,{status:`resnapshot-required`,modelRevision:t.workerRevision};if(t.latestStarts.get(s)!==l)return{status:`superseded`};let u=t.pendingMutations.slice(),d=this._createLayoutProjectionPayload(t,n,this._getRequiredModel(o)),f={...n,metricsRevision:c,baseRevision:t.workerRevision,modelRevision:t.modelRevision,mutations:u,...d.request,budgetMs:i,...r},p=await e.startLayout(f);return p.status===`accepted`?(t.workerRevision=f.modelRevision,t.pendingMutations.splice(0,u.length),t.customBlockViewportsByMount.set(s,{mountEpoch:n.mountEpoch,value:d.customBlockViewports}),t.customRangePresentations=d.customRangePresentations):t.needsResnapshot=!0,p});return t.queue=u.then(()=>void 0,n=>{t.disposed||this._executor!==e||(t.needsResnapshot=!0,this._logService.error(`[DocLayoutExecutorService]: synchronized layout start failed.`,n))}),u}_createLayoutProjectionPayload(e,t,n){let r=ne(n),i=e.customBlockViewportsByMount.get(t.mountId),a=this._collectCustomRangePresentations(n),o=E(a),s={};if(i==null||i.mountEpoch!==t.mountEpoch)s.customBlockViewports=r;else{let e=T(i.value,r);(e.removals.length>0||Object.keys(e.upserts).length>0)&&(s.customBlockViewportPatch=e)}if(e.customRangePresentations==null)s.customRangePresentations=a;else{let t=D(e.customRangePresentations,o);(t.removals.length>0||t.upserts.length>0)&&(s.customRangePresentationPatch=t)}return{request:s,customBlockViewports:r,customRangePresentations:o}}async _replaceSession(e){let t=this._requireExecutor(),n=e.getUnitId(),r=this._sessions.get(n);r!=null&&this._markSessionDisposed(r);let i=(r==null?void 0:r.modelRevision)??0,a={sessionEpoch:++this._sessionEpoch,modelRevision:i,sourceMutationRevision:e.getMutationRevision(),workerRevision:i,pendingMutations:[],latestStarts:new Map,customBlockViewportsByMount:new Map,customRangePresentations:null,queue:Promise.resolve(),needsResnapshot:!1,disposed:!1,cancelPendingCreateTask:null},o=this._createSessionOnNextMacroTask(t,a,e);a.queue=o,this._sessions.set(n,a);try{await o}catch(e){if(!a.disposed&&this._executor===t)throw a.needsResnapshot=!0,e}return a}_disposeSession(e){let t=this._sessions.get(e);if(t==null)return;this._markSessionDisposed(t),this._sessions.delete(e),this._hydrationSamples.delete(e);let n=this._executor;n==null||n.disposeSession({unitId:e,sessionEpoch:t.sessionEpoch}).catch(e=>{this._executor===n&&this._logService.error(`[DocLayoutExecutorService]: failed to dispose a Worker session.`,e)})}_getEligibleModel(e){let n=this._univerInstanceService.getUnit(e,t.UniverInstanceType.UNIVER_DOC);return n!=null&&this._isEligible(n)?n:null}_getRequiredModel(e){let t=this._getEligibleModel(e);if(t==null)throw Error(`Eligible document model not found for Worker layout: "${e}".`);return t}_collectCustomRangePresentations(e){let t=[],n=Array.from(this._customRangePresentationProviders).reverse();if(n.length===0)return t;let r=(r,i)=>{if(i==null)return;let a=new Set;for(let o of i.customRanges??[])if(!a.has(o.rangeId)){a.add(o.rangeId);for(let a of n){let n=a(e.getUnitId(),o,{segmentId:r,body:i});if(n!=null){t.push({segmentId:r,rangeId:o.rangeId,presentation:{...n}});break}}}};r(``,e.getBody());for(let[t,n]of e.headerModelMap)r(t,n.getBody());for(let[t,n]of e.footerModelMap)r(t,n.getBody());return t}_isEligible(e){if((0,t.isInternalEditorID)(e.getUnitId()))return!1;let n=e.getSnapshot().documentStyle.documentFlavor;return n===t.DocumentFlavor.TRADITIONAL||n===t.DocumentFlavor.MODERN}_requireExecutor(){if(this._executor==null)throw Error(`No document layout executor is registered.`);return this._executor}_appendPerformanceSample(e,t,n){let r=e.get(t)??[];r.push(n),r.length>b._performanceSampleLimit&&r.splice(0,r.length-b._performanceSampleLimit),e.set(t,r)}_createSessionOnNextMacroTask(e,n,r){return new Promise((i,a)=>{let o=(0,t.requestImmediateMacroTask)(()=>{n.cancelPendingCreateTask=null;let t=r.getUnitId();if(n.disposed||this._executor!==e||this._sessions.get(t)!==n){i();return}let o=this._executorReady;if(o==null){i();return}o.then(()=>{if(n.disposed||this._executor!==e||this._sessions.get(t)!==n||this._getEligibleModel(t)!==r){i();return}n.sourceMutationRevision=r.getMutationRevision(),n.workerRevision=n.modelRevision,n.pendingMutations.length=0;let o={unitId:t,sessionEpoch:n.sessionEpoch,snapshot:y(r.getSnapshot()),modelRevision:n.modelRevision,locale:this._localeService.getCurrentLocale(),localeData:this._localeService.getLocales(),direction:this._localeService.getDirection()};e.createSession(o).then(i,a)},a)});n.cancelPendingCreateTask=()=>{o(),n.cancelPendingCreateTask=null,i()}})}_markSessionDisposed(e){var t;e.disposed=!0,(t=e.cancelPendingCreateTask)==null||t.call(e),e.cancelPendingCreateTask=null}_disposeManagedSessions(){for(let e of this._sessions.values())this._markSessionDisposed(e)}};u(O,`_performanceSampleLimit`,2048),O=b=f([d(0,t.IUniverInstanceService),d(1,t.ICommandService),d(2,(0,t.Inject)(t.LocaleService)),d(3,t.ILogService)],O);let k=class extends t.RxDisposable{constructor(e,n,i,a){super(),this._context=e,this._localeService=n,this._univerInstanceService=i,this._docLayoutExecutorService=a,u(this,`_skeleton`,void 0),u(this,`_docViewModel`,void 0),u(this,`_currentSkeleton$`,new r.BehaviorSubject(null)),u(this,`currentSkeleton$`,this._currentSkeleton$.asObservable()),u(this,`_currentSkeletonBefore$`,new r.BehaviorSubject(null)),u(this,`currentSkeletonBefore$`,this._currentSkeletonBefore$.asObservable()),u(this,`_currentViewModel$`,new r.BehaviorSubject(null)),u(this,`currentViewModel$`,this._currentViewModel$.asObservable()),this._init(),this._univerInstanceService.getCurrentTypeOfUnit$(t.UniverInstanceType.UNIVER_DOC).pipe((0,r.takeUntil)(this.dispose$)).subscribe(e=>{e&&e.getUnitId()===this._context.unitId&&this._update(e)})}dispose(){super.dispose(),this._currentSkeletonBefore$.complete(),this._currentSkeleton$.complete()}getSkeleton(){return this._skeleton}getViewModel(){return this._docViewModel}getLayoutPerformanceMetrics(){return this._docLayoutExecutorService.getPerformanceMetrics(this._context.unitId)}supportsIncrementalLayout(){var e;let r=(e=this._context.unit.getSnapshot().documentStyle)==null?void 0:e.documentFlavor;return this._docLayoutExecutorService.getExecutor()!=null&&!(0,t.isInternalEditorID)(this._context.unitId)&&!(0,n.getDocumentLayoutPresentation)(this._context.unit)&&(r===t.DocumentFlavor.TRADITIONAL||r===t.DocumentFlavor.MODERN)}recalculate(){let e=this._skeleton;return e.calculate(),this._publishSkeleton(e),e}_publishSkeleton(e){this._currentSkeletonBefore$.next(e),this._currentSkeleton$.next(e)}_init(){let e=this._context.unit;this._update(e)}_update(e){let n=this._context.unitId;e.getBody()!=null&&(this._docViewModel&&(0,t.isInternalEditorID)(n)?(this._docViewModel.reset(e),this._context.unit=e):this._docViewModel||=this._buildDocViewModel(e),this._skeleton||=this._buildSkeleton(this._docViewModel),this.supportsIncrementalLayout()?this._publishSkeleton(this._skeleton):this.recalculate(),this._currentViewModel$.next(this._docViewModel))}_buildSkeleton(e){return n.DocumentSkeleton.create(e,this._localeService)}_buildDocViewModel(e){return new n.DocumentViewModel(e)}};k=f([d(1,(0,t.Inject)(t.LocaleService)),d(2,t.IUniverInstanceService),d(3,(0,t.Inject)(O))],k);var re=class extends t.RxDisposable{constructor(){super(),u(this,`_docStateChangeParams$`,new r.BehaviorSubject(null)),u(this,`docStateChangeParams$`,this._docStateChangeParams$.asObservable())}emitStateChangeInfo(e){this._docStateChangeParams$.next(e)}dispose(){super.dispose(),this._docStateChangeParams$.complete()}};let ie=[`paragraphs`,`sectionBreaks`,`customBlocks`,`docxRawCustomBlocks`,`docxRawBlocks`,`docxExportExcludedRanges`,`tables`,`columnGroups`,`blockRanges`],A=new Set([t.DataStreamTreeTokenType.PARAGRAPH,t.DataStreamTreeTokenType.SECTION_BREAK,t.DataStreamTreeTokenType.TABLE_START,t.DataStreamTreeTokenType.TABLE_ROW_START,t.DataStreamTreeTokenType.TABLE_CELL_START,t.DataStreamTreeTokenType.TABLE_CELL_END,t.DataStreamTreeTokenType.TABLE_ROW_END,t.DataStreamTreeTokenType.TABLE_END,t.DataStreamTreeTokenType.COLUMN_GROUP_START,t.DataStreamTreeTokenType.COLUMN_START,t.DataStreamTreeTokenType.COLUMN_END,t.DataStreamTreeTokenType.COLUMN_GROUP_END,t.DataStreamTreeTokenType.BLOCK_START,t.DataStreamTreeTokenType.BLOCK_END,t.DataStreamTreeTokenType.CUSTOM_BLOCK]),ae=new Set([`disabled`,`documentStyle`,`drawings`,`drawingsOrder`,`lists`,`locale`,`resources`,`rev`,`settings`,`styles`,`tableSource`,`title`]);function j(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function oe(e){for(let t=0;t<e.length;t++)if(A.has(e[t]))return!0;return!1}function se(e){if(!j(e))return!1;let t=e.dataStream;return t!=null&&(typeof t!=`string`||oe(t))?!1:ie.every(t=>{let n=e[t];return n==null||Array.isArray(n)&&n.length===0})}function ce(e){return Array.isArray(e)?e.every(e=>!j(e)||typeof e.len!=`number`||!Number.isFinite(e.len)?!1:e.t===t.TextXActionType.DELETE?!0:e.t===t.TextXActionType.INSERT?se(e.body):e.t===t.TextXActionType.RETAIN&&(e.body==null||se(e.body))):!1}function le(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function ue(e,n){let r=t.JSON1.type.readCursor(e),i=!1,a=!0;return r.traverse(null,e=>{if(!a)return;let o=r.getPath();if(i=!0,ae.has(String(o[0])))return;let s=Object.keys(e);if(e.et!==t.TextX.id||s.some(e=>e!==`et`&&e!==`e`)||!le(o,n)){a=!1;return}let c=e.e;a=ce(c)}),i&&a}function de(e,t){var n;if(!t)return`body`;let{headers:r,footers:i}=e.getSnapshot();return r!=null&&r[t]?`header`:i!=null&&i[t]?`footer`:(n=e.getSnapshot().notes)!=null&&n[t]?`note`:`body`}function M(e,t){var n,r,i;return t?((n=e.headers)==null||(n=n[t])==null?void 0:n.body)??((r=e.footers)==null||(r=r[t])==null?void 0:r.body)??((i=e.notes)==null||(i=i[t])==null?void 0:i.body):e.body}function fe(e){let n=t.JSON1.type.readCursor(e),r=!1;return n.traverse(null,e=>{e.et===t.TextX.id&&(r=!0)}),r}function pe(e,t){let n=new Map;return t.forEach(e=>n.set(e.code,(n.get(e.code)??0)+1)),e.filter(e=>{let t=n.get(e.code)??0;return t===0||(n.set(e.code,t-1),!1)})}function me(e,n,r){var i;let a=e.getSelfOrHeaderFooterModel(n),o=a==null?void 0:a.getBody();if(!o)return;let s=de(e,n),c={segmentType:s,segmentId:n||void 0},l=(i=e.getSnapshot().notes)==null?void 0:i[n],u=l?(0,t.validateDocumentStructure)({notes:{[n]:l}}):(0,t.validateDocBodyStructure)(o,{segmentType:s,segmentId:n||void 0});if(!u.length)return;let d=t.Tools.deepClone(e.getSnapshot()),f=M(t.JSONX.apply(d,r),n),p=f?pe(u,(0,t.validateDocBodyStructure)(f,c)):u;if(!p.length)return;let m=p.map(e=>`${e.code}${e.index==null?``:`@${e.index}`}`).join(`, `),h=n?`${s} ${n}`:s;throw Error(`[DocStructure] ${h}: ${m}`)}function he(e,n){var r;if(((r=n.properties)==null?void 0:r.kind)!==`group`)return e.dataStream.slice(n.startIndex,n.endIndex+1);let i=(e.customRanges??[]).filter(e=>e.rangeType===t.CustomRangeType.SDT&&e.rangeId!==n.rangeId&&e.startIndex>=n.startIndex&&e.endIndex<=n.endIndex).sort((e,t)=>{let n=e.startIndex-t.startIndex||t.endIndex-e.endIndex;return n||e.rangeId===t.rangeId?n:e.rangeId<t.rangeId?-1:1}),a=[],o=n.startIndex;for(let t of i)t.startIndex<o||(a.push(e.dataStream.slice(o,t.startIndex),t.rangeId),o=t.endIndex+1);return a.push(e.dataStream.slice(o,n.endIndex+1)),JSON.stringify(a)}function ge(e,n){let r=e.customRanges??[],i=r.indexOf(n),a=r.filter((e,r)=>{var a;return e.rangeType===t.CustomRangeType.SDT&&((a=e.properties)==null?void 0:a.kind)===`repeatingSection`&&e.rangeId!==n.rangeId&&e.startIndex>=n.startIndex&&e.endIndex<=n.endIndex&&(e.startIndex>n.startIndex||e.endIndex<n.endIndex||r<i)});return r.filter((e,i)=>{var o;return e.rangeType===t.CustomRangeType.SDT&&((o=e.properties)==null?void 0:o.kind)===`repeatingSectionItem`&&e.startIndex>=n.startIndex&&e.endIndex<=n.endIndex&&!a.some(t=>t.startIndex<=e.startIndex&&e.endIndex<=t.endIndex&&(t.startIndex<e.startIndex||e.endIndex<t.endIndex||i<r.indexOf(t)))}).map(e=>e.rangeId).sort()}function _e(e,n,r){var i;if(!fe(r)&&ue(r,(0,t.getRichTextEditPath)(e,n)))return!0;let a=e.getSnapshot(),o=M(a,n),s=o==null||(i=o.customRanges)==null?void 0:i.filter(e=>{var n,r,i;return e.rangeType===t.CustomRangeType.SDT&&(((n=e.properties)==null?void 0:n.lock)&&e.properties.lock!==`unlocked`||((r=e.properties)==null?void 0:r.kind)===`repeatingSection`&&((i=e.properties.repeatingSection)==null?void 0:i.doNotAllowInsertDelete))});if(!o||!(s!=null&&s.length))return!0;let c=t.JSONX.apply(t.Tools.deepClone(a),r),l=M(c,n);for(let e of s){var u,d,f,p;let n=(u=e.properties)==null?void 0:u.lock,r=l==null||(d=l.customRanges)==null?void 0:d.find(n=>n.rangeId===e.rangeId&&n.rangeType===t.CustomRangeType.SDT),i=n===`sdtLocked`||n===`sdtContentLocked`,s=n===`contentLocked`||n===`sdtContentLocked`;if(i&&!r)return!1;if(((f=e.properties)==null?void 0:f.kind)===`repeatingSection`&&(p=e.properties.repeatingSection)!=null&&p.doNotAllowInsertDelete&&r&&l){let t=ge(o,e),n=ge(l,r);if(t.length!==n.length||t.some((e,t)=>e!==n[t]))return!1}if(s&&r&&l&&he(o,e)!==he(l,r)&&!ve(a,c,e,r,l))return!1}return!0}function ve(e,n,r,i,a){let o=(0,t.getSdtBindingKey)(r),s=(0,t.getSdtBindingValue)(a,i);return!o||o!==(0,t.getSdtBindingKey)(i)||s===void 0?!1:[``,...Object.keys(e.headers??{}),...Object.keys(e.footers??{}),...Object.keys(e.notes??{})].some(r=>{var i;let a=M(e,r),c=M(n,r);return!a||!c?!1:((i=a.customRanges)==null?void 0:i.some(e=>{var n,r,i;if(e.rangeType!==t.CustomRangeType.SDT||((n=e.properties)==null?void 0:n.lock)===`contentLocked`||((r=e.properties)==null?void 0:r.lock)===`sdtContentLocked`||(0,t.getSdtBindingKey)(e)!==o)return!1;let l=(i=c.customRanges)==null?void 0:i.find(n=>n.rangeType===t.CustomRangeType.SDT&&n.rangeId===e.rangeId);return l!=null&&(0,t.getSdtBindingKey)(l)===o&&(0,t.getSdtBindingValue)(a,e)!==s&&(0,t.getSdtBindingValue)(c,l)===s}))??!1})}function ye(e,n,r,i,a=!1){let o=(0,t.getRichTextEditPath)(e,n),s=ue(r,o)&&ue(i,o),c=!1,l=t.JSON1.type.readCursor(r);if(l.traverse(null,e=>{let n=l.getPath();if((n[0]===`notes`&&(n.length<=2||n[2]!==`body`)||n.includes(`customRanges`))&&(c=!0),e.et===t.TextX.id&&Array.isArray(e.e))for(let n of e.e){j(n)&&Array.isArray(n.rangeUpdates)&&n.rangeUpdates.some(e=>j(e)&&j(e.range)&&(e.range.rangeType===t.CustomRangeType.FOOTNOTE||e.range.rangeType===t.CustomRangeType.ENDNOTE))&&(c=!0);let e=j(n)&&j(n.body)?n.body.customRanges:void 0;Array.isArray(e)&&e.some(e=>j(e)&&(e.rangeType===t.CustomRangeType.FOOTNOTE||e.rangeType===t.CustomRangeType.ENDNOTE))&&(c=!0)}}),c){let n=(0,t.validateDocumentStructure)(e.getSnapshot());if(n.length>0)throw Error(`[DocStructure] ${n.map(e=>`${e.code}@${e.index??e.segmentId??``}`).join(`, `)}`)}else!s&&!a&&me(e,n,i);return s&&!c}let be=function(e){return e.DeleteChart=`delete-chart`,e.DeleteDivider=`delete-divider`,e.DeleteImage=`delete-image`,e.DeleteShape=`delete-shape`,e.EditTableCell=`edit-table-cell`,e.FormatParagraph=`format-paragraph`,e.InsertCustomRange=`insert-custom-range`,e.UpdateImage=`update-image`,e.UpdatePageLayout=`update-page-layout`,e}({});function xe(e,t){if(!Array.isArray(e))return;let n=e.indexOf(`body`)>-1?e:e.find(e=>Array.isArray(e)&&e.indexOf(`body`)>-1);if(!Array.isArray(n))return;let r=n.indexOf(`body`);if(r!==-1)return(r===0?``:n[r-1])===t?n.slice(r):void 0}function Se(e,n,r=`right`){if(n.length===0)return[];let i=xe(e,n[0].segmentId??``);return i==null?n:n.map(e=>{let n=t.JSONX.transformPosition(i,e.startOffset,r),a=t.JSONX.transformPosition(i,e.endOffset,r);return{...e,startOffset:n,endOffset:a,collapsed:n===a}})}function Ce(e,n){let r=!1,i=t.JSON1.type.readCursor(e);return i.traverse(null,e=>{let a=i.getPath();if(a.length===0&&(r=!0),!(r||a[0]!==`body`)){if(a.length===1&&e.et===t.TextX.id&&Array.isArray(e.e)){let i=0;for(let a of e.e){var o,s;if(a.t===t.TextXActionType.DELETE&&n.some(e=>i<=e.endIndex&&i+a.len>e.startIndex)){r=!0;return}if(a.t===t.TextXActionType.RETAIN&&(((o=a.body)==null?void 0:o.customRanges)!=null||(s=a.rangeUpdates)!=null&&s.some(e=>n.some(t=>t.rangeId===e.rangeId)))){r=!0;return}a.t!==t.TextXActionType.INSERT&&(i+=a.len)}}else(a.length===1||a[1]===`customRanges`||a[1]===`dataStream`)&&(r=!0)}}),r}function we(e,n){var r,i;if(!e.notes)return n;let a=((r=e.body)==null||(r=r.customRanges)==null?void 0:r.filter(e=>e.rangeType===t.CustomRangeType.FOOTNOTE||e.rangeType===t.CustomRangeType.ENDNOTE))??[];if(a.length===0||!Ce(n,a))return n;let o=t.JSONX.apply(t.Tools.deepClone(e),n),s=new Set((i=o.body)==null||(i=i.customRanges)==null?void 0:i.filter(e=>e.rangeType===t.CustomRangeType.FOOTNOTE||e.rangeType===t.CustomRangeType.ENDNOTE).map(e=>{var t;return(t=e.properties)==null?void 0:t.noteId})),c=null,l=new Set(a.map(e=>{var t;return(t=e.properties)==null?void 0:t.noteId}));for(let e of l){var u;typeof e==`string`&&!s.has(e)&&(u=o.notes)!=null&&u[e]&&(c=t.JSONX.compose(c,t.JSONX.getInstance().removeOp([`notes`,e],o.notes[e])))}return t.JSONX.isNoop(c)?n:t.JSONX.compose(n,c)}function Te(e,n,r,i=!1){let a=e.getSnapshot(),o=we(a,r),s=t.JSONX.invertWithDoc(o,a);e.apply(o);try{return{actions:o,undoActions:s,preservesStructure:ye(e,n,o,s,i)}}catch(t){throw e.apply(s),t}}function Ee(e,t,n,r,i){var a,o;e!=null&&(n===``&&i&&((a=e.resetByValidatedTextMutation)!=null&&a.call(e,t,r)||(o=e.resetByValidatedMetadataMutation)!=null&&o.call(e,t,r))||e.reset(t))}function De(e,t,n){let{unitId:r,textRanges:i,trigger:a,noNeedSetTextRange:o,isEditing:s=!0}=t;if(o||i==null||i.length===0||a==null||n)return;let c={unitId:r,subUnitId:r},l=e.getSelectionInfo(c),u=i.map((e,n)=>({...e,segmentId:e.segmentId??t.segmentId??``,collapsed:e.startOffset===e.endOffset,isActive:n===i.length-1}));l!=null&&e.replaceSelectionInfoWithoutRefresh({...l,segmentId:u[u.length-1].segmentId,textRanges:u,rectRanges:[],isEditing:s,options:t.options},c);let d=e.getSelectionInfo(c);queueMicrotask(()=>{e.getSelectionInfo(c)===d&&(d==null?e.replaceDocRanges(u,c,s,t.options):e.refreshSelection(c,s))})}let N={id:m,type:t.CommandType.MUTATION,handler:(e,r,i)=>{var a;let{unitId:o,segmentId:s=``,actions:c,textRanges:l,prevTextRanges:u,trigger:d,noHistory:f,isCompositionEnd:h,debounce:g,isEditing:_=!0,isSync:v,syncer:y}=r,b=!!(v||i!=null&&i.fromCollab||i!=null&&i.fromChangeset),x=e.get(t.IUniverInstanceService),S=e.get(n.IRenderManagerService),C=e.get(re),w=x.getUnit(o,t.UniverInstanceType.UNIVER_DOC),T=(a=S.getRenderUnitById(o))==null?void 0:a.with(k).getViewModel();if(w==null)throw Error(`DocumentDataModel not found for unitId: ${o}`);let ee=e.get(p),E=ee.getDocRanges()??[],D=ee.getSelectionInfo(),te=!!w.getSnapshot().disabled;if(t.JSONX.isNoop(c)||c&&c.length===0||te)return{unitId:o,actions:[],textRanges:E};let ne=d===t.UndoCommandId||d===t.RedoCommandId;if(!ne&&!_e(w,s,c))return r.actions=[],{unitId:o,actions:[],textRanges:E};let O=(0,n.getDocumentLayoutPresentation)(w),ie=O==null?void 0:O.captureState(),{actions:A,undoActions:ae,preservesStructure:j}=Te(w,s,c,ne);if(O)try{r.layoutState===void 0?O.applyActions(A,w.getSnapshot()):O.restoreState(r.layoutState),r.layoutState=O.captureState()}catch(e){throw w.apply(ae),O.restoreState(ie),e}r.actions=A,Ee(T,w,s,A,j),De(ee,r,b);let oe={commandId:m,unitId:o,segmentId:s,trigger:d,noHistory:f,debounce:g,redoState:{...O?{layoutState:r.layoutState}:{},actions:A,textRanges:l,options:r.options,isEditing:_},undoState:{...O?{layoutState:ie}:{},actions:ae,textRanges:u??E,options:D==null?void 0:D.options,isEditing:D==null?void 0:D.isEditing},isCompositionEnd:h,isSync:b,syncer:y};return C.emitStateChangeInfo(oe),{unitId:o,actions:ae,...O?{layoutState:ie}:{},textRanges:E}}},Oe={id:`doc.command.insert-text`,type:t.CommandType.COMMAND,handler:(e,n)=>{var r;let i=e.get(t.ICommandService),{range:a,segmentId:o,body:s,unitId:c,cursorOffset:l,debounce:u=!0,textRanges:d,noNeedSetTextRange:f,isEditing:m}=n,h=e.get(p),g=e.get(t.IUniverInstanceService).getUnit(c,t.UniverInstanceType.UNIVER_DOC);if(g==null)return!1;let _=h.getActiveTextRange(),v=`segmentId`in a&&typeof a.segmentId==`string`?a.segmentId:void 0,y=o??v??(_==null?void 0:_.segmentId)??``,b=(r=g.getSelfOrHeaderFooterModel(y))==null?void 0:r.getBody();if(b==null)return!1;let{startOffset:x,collapsed:S}=a,C=l??s.dataStream.length,w=d??[{startOffset:x+C,endOffset:x+C,collapsed:S}],T={id:N.id,params:{unitId:c,segmentId:y,actions:[],textRanges:w,debounce:u,noNeedSetTextRange:f,isEditing:m}};return T.params.actions=ke(g,b,a,s,y),!!i.syncExecuteCommand(T.id,T.params)}};function ke(e,n,r,i,a){let{startOffset:o,endOffset:s,collapsed:c}=r,l=new t.TextX;c?(o>0&&l.push({t:t.TextXActionType.RETAIN,len:o}),l.push({t:t.TextXActionType.INSERT,body:i,len:i.dataStream.length})):l.push(...t.BuildTextUtils.selection.delete([r],n,0,i));let u=t.JSONX.getInstance().editOp(l.serialize(),(0,t.getRichTextEditPath)(e,a));return c?u:Ae(u,e,n,o,s,a)}function Ae(e,n,r,i,a,o){return[e,...t.BuildTextUtils.drawing.remove(n.getSnapshot(),[{startOffset:i,endOffset:a,collapsed:!1}],r,o)].reduce((e,n)=>t.JSONX.compose(e,n))}let je={id:`doc.command.delete-text`,type:t.CommandType.COMMAND,handler:(e,n)=>{var r,i;let a=e.get(t.ICommandService),o=e.get(t.IUniverInstanceService),{range:s,segmentId:c,unitId:l,direction:u,len:d=1}=n,f=o.getUnit(l,t.UniverInstanceType.UNIVER_DOC),p=f==null||(r=f.getSelfOrHeaderFooterModel(c))==null?void 0:r.getBody();if(f==null||p==null)return!1;let{startOffset:m}=s,h=u===t.DeleteDirection.LEFT?m-d:m,g=u===t.DeleteDirection.LEFT?m-1:m+d-1,_=(i=p.customRanges)==null?void 0:i.find(e=>e.startIndex<=h&&e.endIndex>=g);_!=null&&_.wholeEntity&&(h=_.startIndex,g=Math.max(g,_.endIndex));let v={id:N.id,params:{unitId:l,segmentId:c,actions:[],textRanges:[{startOffset:h,endOffset:h,collapsed:!0}],debounce:!0}},y=new t.TextX,b=t.JSONX.getInstance();y.push(...t.BuildTextUtils.selection.delete([{...s,startOffset:h,endOffset:g+1,collapsed:!1}],p,0,null,!0,f.getDocumentStyle().documentFlavor));let x=(0,t.getRichTextEditPath)(f,c);return v.params.actions=Ae(b.editOp(y.serialize(),x),f,p,h,g+1,c),!!a.syncExecuteCommand(v.id,v.params)}},Me={id:`doc.command.update-text`,type:t.CommandType.COMMAND,handler:(e,n)=>{let{range:r,segmentId:i,updateBody:a,coverType:o,unitId:s,textRanges:c}=n,l=e.get(t.ICommandService),u=e.get(t.IUniverInstanceService).getCurrentUnitOfType(t.UniverInstanceType.UNIVER_DOC);if(u==null)return!1;let d={id:N.id,params:{unitId:s,actions:[],textRanges:c}},f=new t.TextX,p=t.JSONX.getInstance(),{startOffset:m,endOffset:h}=r;f.push({t:t.TextXActionType.RETAIN,len:m}),f.push({t:t.TextXActionType.RETAIN,body:a,len:h-m,coverType:o});let g=(0,t.getRichTextEditPath)(u,i);return d.params.actions=p.editOp(f.serialize(),g),!!l.syncExecuteCommand(d.id,d.params)}},Ne=function(e){return e[e.FIRST_PAGE_HEADER=0]=`FIRST_PAGE_HEADER`,e[e.FIRST_PAGE_FOOTER=1]=`FIRST_PAGE_FOOTER`,e[e.DEFAULT_HEADER=2]=`DEFAULT_HEADER`,e[e.DEFAULT_FOOTER=3]=`DEFAULT_FOOTER`,e[e.EVEN_PAGE_HEADER=4]=`EVEN_PAGE_HEADER`,e[e.EVEN_PAGE_FOOTER=5]=`EVEN_PAGE_FOOTER`,e}({});function Pe(){return{dataStream:`\r
2
- `,textRuns:[{st:0,ed:0,ts:{fs:9}}],customBlocks:[],paragraphs:[{startIndex:0,paragraphId:(0,t.createParagraphId)(new Set),paragraphStyle:{spaceAbove:{v:0},lineSpacing:1.5,spaceBelow:{v:0}}}],sectionBreaks:[{sectionId:(0,t.createSectionId)(new Set),startIndex:1}]}}function Fe(e,n,r,i,a=`single`,o=[`documentStyle`]){let s=t.JSONX.getInstance(),c=e??(0,t.generateRandomId)(6),l=n===2||n===0||n===4,u=s.insertOp([l?`headers`:`footers`,c],{[l?`headerId`:`footerId`]:c,body:Pe()});i.push(u);let d=`defaultHeaderId`,f=`defaultFooterId`;switch(n){case 2:d=`defaultHeaderId`,f=`defaultFooterId`;break;case 3:d=`defaultFooterId`,f=`defaultHeaderId`;break;case 0:d=`firstPageHeaderId`,f=`firstPageFooterId`;break;case 1:d=`firstPageFooterId`,f=`firstPageHeaderId`;break;case 4:d=`evenPageHeaderId`,f=`evenPageFooterId`;break;case 5:d=`evenPageFooterId`,f=`evenPageHeaderId`;break;default:throw Error(`Unknown header footer type: ${n}`)}let p=[[d,c]];if(a===`pair`&&f!=null){let e=(0,t.generateRandomId)(6),n=s.insertOp([l?`footers`:`headers`,e],{[l?`footerId`:`headerId`]:e,body:Pe()});i.push(n),p.push([f,e])}for(let[e,t]of p)if(r[e]!=null){let n=s.replaceOp([...o,e],r[e],t);i.push(n)}else{let n=s.insertOp([...o,e],t);i.push(n)}return i}let Ie={id:`doc.command.create-header-footer`,type:t.CommandType.COMMAND,handler:(e,n)=>{var r,i;let a=e.get(t.ICommandService),o=e.get(t.IUniverInstanceService),{unitId:s,segmentId:c,createType:l,headerFooterProps:u,createMode:d=`single`,sectionId:f}=n,p=o.getUnit(s,t.UniverInstanceType.UNIVER_DOC);if(p==null)return!1;let{documentStyle:m,body:h}=p.getSnapshot();if(m.documentFlavor===t.DocumentFlavor.MODERN)return!1;let g=[],_=t.JSONX.getInstance(),v=f==null?-1:(h==null||(r=h.sectionBreaks)==null?void 0:r.findIndex(e=>e.sectionId===f))??-1,y=v<0||h==null||(i=h.sectionBreaks)==null?void 0:i[v];if(f!=null&&!y)return!1;let b=y??m,x=f==null?[`documentStyle`]:[`body`,`sectionBreaks`,v];if(l!=null&&Fe(c,l,b,g,d,x),u!=null&&Object.keys(u).forEach(e=>{let t=u[e],n=b[e];if(t===n)return;let r=n===void 0?_.insertOp([...x,e],t):_.replaceOp([...x,e],n,t);g.push(r)}),g.length===0)return!1;let S={id:N.id,params:{unitId:s,actions:g.reduce((e,n)=>t.JSONX.compose(e,n),null),textRanges:[{startOffset:0,endOffset:0,collapsed:!0}],debounce:!0}};return((u==null?void 0:u.marginFooter)!=null||(u==null?void 0:u.marginHeader)!=null)&&(S.params.noNeedSetTextRange=!0),!!a.syncExecuteCommand(S.id,S.params)}},Le={id:`doc.command.set-default-paragraph-style`,type:t.CommandType.COMMAND,handler:(e,n)=>{if(n==null)return!1;let r=e.get(t.ICommandService),i=e.get(t.IUniverInstanceService).getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC);if(i==null)return!1;let a=i.getSnapshot().documentStyle.defaultParagraphStyle,o=t.JSONX.getInstance(),s=[`documentStyle`,`defaultParagraphStyle`],c=[];if(n.defaultParagraphStyle==null)a!=null&&c.push(o.removeOp(s,a));else if(a==null){let e=Object.fromEntries(Object.entries(n.defaultParagraphStyle).filter(([,e])=>e!=null).map(([e,n])=>[e,t.Tools.deepClone(n)]));Object.keys(e).length>0&&c.push(o.insertOp(s,e))}else Object.entries(n.defaultParagraphStyle).forEach(([e,n])=>{let r=a[e],i=[...s,e];n==null?r!=null&&c.push(o.removeOp(i,r)):r==null?c.push(o.insertOp(i,t.Tools.deepClone(n))):c.push(o.replaceOp(i,r,t.Tools.deepClone(n)))});let l=c.reduce((e,n)=>t.JSONX.compose(e,n),null);if(c.length===0||t.JSONX.isNoop(l))return!1;let u={id:N.id,params:{unitId:n.unitId,actions:l,textRanges:null,noNeedSetTextRange:!0,debounce:!0,isEditing:!1}};return!!r.syncExecuteCommand(u.id,u.params)}},P={id:`doc.mutation.rename-doc`,type:t.CommandType.MUTATION,handler:(e,n)=>{let r=e.get(t.IUniverInstanceService).getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC);return r?(r.setName(n.name),!0):!1}},Re={id:`doc.command.set-name`,type:t.CommandType.COMMAND,handler:(e,n)=>{if(!n)return!1;let r=e.get(t.IUniverInstanceService).getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC);if(!r)return!1;let i=e.get(t.ICommandService),a={unitId:n.unitId,name:n.name},o={unitId:n.unitId,name:r.getTitle()||``};return i.syncExecuteCommand(P.id,a)?(e.get(t.IUndoRedoService).pushUndoRedo({unitID:n.unitId,redoMutations:[{id:P.id,params:a}],undoMutations:[{id:P.id,params:o}]}),!0):!1}};var ze=class{constructor(e){this.unitId=e,u(this,`type`,i.UnitObject.Document),u(this,`subType`,i.UnitAction.Comment),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}`}},Be=class{constructor(e){this.unitId=e,u(this,`type`,i.UnitObject.Document),u(this,`subType`,i.UnitAction.Copy),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}`}},Ve=class{constructor(e){this.unitId=e,u(this,`type`,i.UnitObject.Document),u(this,`subType`,i.UnitAction.Edit),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}`}},He=class{constructor(e){this.unitId=e,u(this,`type`,i.UnitObject.Document),u(this,`subType`,i.UnitAction.Export),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}`}},Ue=class{constructor(e){this.unitId=e,u(this,`type`,i.UnitObject.Document),u(this,`subType`,i.UnitAction.Print),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}`}},We=class{constructor(e,n){this.unitId=e,this.objectId=n,u(this,`type`,i.UnitObject.DocumentEntity),u(this,`subType`,i.UnitAction.Edit),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}_${n}`}},Ge=class{constructor(e,n){this.unitId=e,this.objectId=n,u(this,`type`,i.UnitObject.DocumentParagraph),u(this,`subType`,i.UnitAction.Edit),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}_${n}`}},Ke=class{constructor(e,n){this.unitId=e,this.objectId=n,u(this,`type`,i.UnitObject.DocumentSection),u(this,`subType`,i.UnitAction.Edit),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}_${n}`}};let F=[i.UnitAction.Edit,i.UnitAction.Copy,i.UnitAction.Print,i.UnitAction.Export,i.UnitAction.Comment],qe=new Set([i.UnitObject.Document,i.UnitObject.DocumentSection,i.UnitObject.DocumentParagraph,i.UnitObject.DocumentEntity]),Je=`section/`,Ye=`paragraph/`,Xe=`entity/`;function I(e,t){return`${Je}${encodeURIComponent(e)}/${encodeURIComponent(t)}`}function Ze(e,t){return`${Ye}${encodeURIComponent(e)}/${encodeURIComponent(t)}`}function Qe(e,t,n){return`${Xe}${encodeURIComponent(e)}/${encodeURIComponent(t)}/${encodeURIComponent(n)}`}function L(e,t,n){if(t===e)switch(n){case i.UnitAction.Edit:return new Ve(e);case i.UnitAction.Copy:return new Be(e);case i.UnitAction.Print:return new Ue(e);case i.UnitAction.Export:return new He(e);case i.UnitAction.Comment:return new ze(e);default:throw Error(`Unsupported Document permission action: ${n}`)}if(n!==i.UnitAction.Edit)throw Error(`Document object permissions only support Edit: ${t}`);if(t.startsWith(Je))return new Ke(e,t);if(t.startsWith(Ye))return new Ge(e,t);if(t.startsWith(Xe))return new We(e,t);throw Error(`Unsupported Document permission object: ${t}`)}function $e(e,t,n,r){var i;return((i=e.getPermissionPoint(L(t,n,r).id))==null?void 0:i.value)??!0}function et(e,t,n,r,i){let a=L(t,n,r);e.getPermissionPoint(a.id)||e.addPermissionPoint(a),e.updatePermissionPoint(a.id,i)}function tt(e,t){e.getAllPermissionPoint().forEach((n,r)=>{n.subscribe(n=>{qe.has(n.type)&&`unitId`in n&&n.unitId===t&&e.deletePermissionPoint(r)}).unsubscribe()})}function nt(e,t,n){if(!$e(e,t,t,i.UnitAction.Edit))return!1;for(let r of n)if(!$e(e,t,r,i.UnitAction.Edit))return!1;return!0}let rt={type:t.CommandType.COMMAND,id:`doc.command.set-permission`,async handler(e,n){if(!n||!F.includes(n.action)||n.objectId!==n.unitId&&n.action!==i.UnitAction.Edit||n.policy&&(![`all`,`owner`,`members`].includes(n.policy.edit)||n.policy.strategies.some(e=>!F.includes(e.action)||n.objectId!==n.unitId&&e.action!==i.UnitAction.Edit)))return!1;let r=L(n.unitId,n.objectId,n.action),a={unitId:n.unitId,objectId:n.objectId,objectType:r.type},o=e.get(t.ObjectPermissionService);return n.remove?await o.remove(a):n.policy?await o.save(a,n.policy):await o.setPoint(a,r,n.value),!0}},it={type:t.CommandType.COMMAND,id:`doc.command.set-permissions`,async handler(e,n){if(!(n!=null&&n.unitId)||!Array.isArray(n.changes)||!n.changes.length||n.changes.some(e=>!(e!=null&&e.objectId)||e.objectId===n.unitId||e.policy!==null&&(!e.policy||![`all`,`owner`,`members`].includes(e.policy.edit)||!Array.isArray(e.policy.collaborators)||!Array.isArray(e.policy.strategies)||e.policy.strategies.some(e=>e.action!==i.UnitAction.Edit))))throw Error(`Invalid object permission batch.`);return e.get(t.ObjectPermissionService).saveMany(n.changes.map(e=>{let t=L(n.unitId,e.objectId,i.UnitAction.Edit);return{unitId:n.unitId,objectId:e.objectId,objectType:t.type,policy:e.policy}}))}};function R(e){let n=new Map((e.sectionBreaks??[]).map(e=>[e.startIndex,e])),r=[],i=0,a=0;for(let o=0;o<e.dataStream.length;o++){let s=e.dataStream[o];if(s===t.DataStreamTreeTokenType.TABLE_CELL_START)i++;else if(s===t.DataStreamTreeTokenType.TABLE_CELL_END)i=Math.max(0,i-1);else if(s===t.DataStreamTreeTokenType.COLUMN_START)a++;else if(s===t.DataStreamTreeTokenType.COLUMN_END)a=Math.max(0,a-1);else if(s===t.DataStreamTreeTokenType.SECTION_BREAK&&i===0&&a===0){let e=n.get(o);e&&r.push(e)}}return r}let at={id:`doc.command.set-section-header-footer-link`,type:t.CommandType.COMMAND,handler:(e,n)=>{var r;if(!n)return!1;let i=e.get(t.IUniverInstanceService),a=e.get(t.ICommandService),o=i.getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC),s=o==null?void 0:o.getSnapshot();if(!o||!(s!=null&&s.body)||s.documentStyle.documentFlavor!==t.DocumentFlavor.TRADITIONAL)return!1;let c=R(s.body),l=c.findIndex(e=>e.sectionId===n.sectionId);if(l<=0)return!1;let u=((r=s.body.sectionBreaks)==null?void 0:r.findIndex(e=>e.sectionId===n.sectionId))??-1;if(u<0)return!1;let d={snapshot:s,sections:c,sectionIndex:l,storageIndex:u,key:(0,t.getSectionHeaderFooterReferenceKey)(n.kind,n.variant)},f=n.linkedToPrevious?ot(d,n.kind):st(d,n.kind,n.segmentId);if(!f)return!1;let p={id:N.id,params:{unitId:n.unitId,actions:f.reduce((e,n)=>t.JSONX.compose(e,n),null),textRanges:null,noNeedSetTextRange:!0,debounce:!0,isEditing:!1,trigger:at.id}};return!!a.syncExecuteCommand(p.id,p.params)}};function ot(e,n){let{snapshot:r,sections:i,sectionIndex:a,storageIndex:o,key:s}=e,c=i[a],l=c[s];if(typeof l!=`string`||!l)return null;let u=t.JSONX.getInstance(),d=[u.removeOp([`body`,`sectionBreaks`,o,s],l)],f=n===`header`?[`defaultHeaderId`,`firstPageHeaderId`,`evenPageHeaderId`]:[`defaultFooterId`,`firstPageFooterId`,`evenPageFooterId`],p=f.some(e=>r.documentStyle[e]===l),m=i.some(e=>f.some(t=>(e.sectionId!==c.sectionId||t!==s)&&e[t]===l)),h=n===`header`?r.headers:r.footers;return!p&&!m&&h!=null&&h[l]&&d.push(u.removeOp([n===`header`?`headers`:`footers`,l],h[l])),d}function st(e,n,r){let{snapshot:i,sections:a,sectionIndex:o,storageIndex:s,key:c}=e,l=a[o][c];if(typeof l==`string`&&l)return null;let u=(0,t.resolveSectionHeaderFooterReference)(i.documentStyle,a,o-1,c).segmentId,d=r??(0,t.generateRandomId)(6),f=n===`header`?i.headers:i.footers;if(f!=null&&f[d])return null;let p=u?f==null?void 0:f[u]:void 0,m=n===`header`?`headerId`:`footerId`,h=p?{...t.Tools.deepClone(p),[m]:d}:{[m]:d,body:Pe()},g=t.JSONX.getInstance();return[g.insertOp([n===`header`?`headers`:`footers`,d],h),g.insertOp([`body`,`sectionBreaks`,s,c],d)]}function ct(e){return!!(e!=null&&e.unitId&&e.paragraphId&&Number.isInteger(e.startOffset)&&Number.isInteger(e.endOffset)&&e.startOffset>=0&&e.endOffset>=e.startOffset&&e.style&&Object.keys(e.style).length>0)}function lt(e,n){let r=(e.paragraphs??[]).filter(e=>e.paragraphId===n.paragraphId);if(r.length!==1)return null;let i=r[0];return(0,t.getParagraphContentStartOffset)(e,i)===n.startOffset&&i.startIndex===n.endOffset&&e.dataStream[n.endOffset]===`\r`?i:null}function ut(e,n,r){let i=new t.TextX,a=!!(r.style.textStyle&&r.startOffset<r.endOffset&&e.textRuns==null);r.startOffset>0&&i.push({t:t.TextXActionType.RETAIN,len:r.startOffset}),r.style.textStyle&&r.startOffset<r.endOffset&&!a?i.push({t:t.TextXActionType.RETAIN,len:r.endOffset-r.startOffset,coverType:t.UpdateDocsAttributeType.COVER,body:{dataStream:``,textRuns:[{st:0,ed:r.endOffset-r.startOffset,ts:t.Tools.deepClone(r.style.textStyle)}]}}):r.startOffset<r.endOffset&&i.push({t:t.TextXActionType.RETAIN,len:r.endOffset-r.startOffset});let o={dataStream:``,paragraphs:[{...t.Tools.deepClone(n),startIndex:0,paragraphStyle:{...t.Tools.deepClone(n.paragraphStyle??{}),...t.Tools.deepClone(r.style)}}]};return Object.defineProperty(o,t.RESTORE_INSERTED_PARAGRAPH_IDS,{value:!0,enumerable:!0}),i.push({t:t.TextXActionType.RETAIN,len:1,coverType:t.UpdateDocsAttributeType.REPLACE,body:o}),{textX:i,initializesTextRuns:a}}let dt={id:`doc.command.update-paragraph-style`,type:t.CommandType.COMMAND,handler:(e,n)=>{var r;if(!ct(n))return!1;let i=e.get(t.IUniverInstanceService),a=e.get(t.ICommandService),o=i.getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC),s=n.segmentId??``,c=o==null||(r=o.getSelfOrHeaderFooterModel(s))==null?void 0:r.getBody();if(!o||!c)return!1;let l=lt(c,n);if(!l)return!1;let{textX:u,initializesTextRuns:d}=ut(c,l,n),f=t.JSONX.getInstance(),p=(0,t.getRichTextEditPath)(o,s),m=f.editOp(u.serialize(),p);if(d){let e=f.replaceOp([...p,`textRuns`],void 0,[{st:n.startOffset,ed:n.endOffset,ts:t.Tools.deepClone(n.style.textStyle)}]);m=t.JSONX.compose(e,m)}return!!a.syncExecuteCommand(N.id,{unitId:n.unitId,segmentId:s,actions:m,textRanges:null,noNeedSetTextRange:!0,isEditing:!1,trigger:dt.id})}};function z(e,t,n){return e??t??n}function ft(e,n){var r,i,a,o;let s=t.PAGE_SIZE[t.PaperType.A4];return{width:z(n==null||(r=n.pageSize)==null?void 0:r.width,e==null||(i=e.pageSize)==null?void 0:i.width,s.width),height:z(n==null||(a=n.pageSize)==null?void 0:a.height,e==null||(o=e.pageSize)==null?void 0:o.height,s.height)}}function pt(e,n){return{top:z(n==null?void 0:n.marginTop,e==null?void 0:e.marginTop,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN),bottom:z(n==null?void 0:n.marginBottom,e==null?void 0:e.marginBottom,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN),left:z(n==null?void 0:n.marginLeft,e==null?void 0:e.marginLeft,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN),right:z(n==null?void 0:n.marginRight,e==null?void 0:e.marginRight,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN)}}function mt(e,t){if(![e.width,e.height,t.width,t.height].every(e=>Number.isFinite(e)&&e>0))throw RangeError(`Effective section page setup must leave a positive content area and use finite positive page dimensions.`)}function ht(e,n){let r=ft(e,n),i=pt(e,n),a={width:B(e,n),height:r.height-i.top-i.bottom};mt(r,a);let o=(n==null?void 0:n.pageNumberStart)??(e==null?void 0:e.pageNumberStart);return{pageSize:r,pageOrient:z(n==null?void 0:n.pageOrient,e==null?void 0:e.pageOrient,t.PageOrientType.PORTRAIT),margins:i,contentSize:a,...o==null?{}:{pageNumberStart:o}}}function B(e,n){var r,i;let a=z(n==null||(r=n.pageSize)==null?void 0:r.width,e==null||(i=e.pageSize)==null?void 0:i.width,t.PAGE_SIZE[t.PaperType.A4].width);return Math.max(0,a-z(n==null?void 0:n.marginLeft,e==null?void 0:e.marginLeft,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN)-z(n==null?void 0:n.marginRight,e==null?void 0:e.marginRight,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN))}function gt(e,t,n,r,i){if(n<=1)return[];let a=Math.max(0,r),o=B(e,t),s=Math.max(0,o-a*(n-1));if(i){if(i.some(e=>!Number.isFinite(e)||e<0))throw RangeError(`Section column widths must be finite and non-negative.`);if(i.reduce((e,t)=>e+t,0)>s)throw RangeError(`Section columns exceed the available page content width.`)}return(i??Array.from({length:n},()=>s/n)).map((e,t)=>({width:Math.max(0,e),paddingEnd:t===n-1?0:a}))}let V={id:`doc.command.update-section`,type:t.CommandType.COMMAND,handler:(e,n)=>{if(!(n!=null&&n.updates.length)||n.updates.some(({sectionId:e,config:t})=>!e||Object.keys(t).length===0))return!1;let r=e.get(t.IUniverInstanceService),i=e.get(t.ICommandService),a=r.getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC);if(!a||a.getDocumentStyle().documentFlavor!==t.DocumentFlavor.TRADITIONAL)return!1;let o=a.getBody();if(!o)return!1;let s=new Map(n.updates.map(({sectionId:e,config:t})=>[e,t]));if(s.size!==n.updates.length)return!1;let c=new Set(s.keys()),l=R(o).filter(e=>c.has(e.sectionId)).sort((e,t)=>e.startIndex-t.startIndex);if(l.length!==c.size)return!1;let u=a.getDocumentStyle();if(l.some(e=>!yt({...e,...s.get(e.sectionId)},u)))return!1;let d=new t.MemoryCursor,f=new t.TextX;for(let e of l)f.push({t:t.TextXActionType.RETAIN,len:e.startIndex-d.cursor}),f.push({t:t.TextXActionType.RETAIN,len:1,coverType:t.UpdateDocsAttributeType.REPLACE,body:{dataStream:``,sectionBreaks:[{...t.Tools.deepClone(e),...t.Tools.deepClone(s.get(e.sectionId)),sectionId:e.sectionId,startIndex:0}]}}),d.moveCursorTo(e.startIndex+1);let p=t.JSONX.getInstance(),m={id:N.id,params:{unitId:n.unitId,actions:p.editOp(f.serialize(),(0,t.getRichTextEditPath)(a)),textRanges:null,noNeedSetTextRange:!0,debounce:!0,isEditing:!1,trigger:V.id}};return!!i.syncExecuteCommand(m.id,m.params)}},H={id:`doc.command.insert-section-break`,type:t.CommandType.COMMAND,handler:(e,n)=>{var r;if(!n)return!1;let i=_t(e,n.unitId);if(!i||!n.sectionId||!Number.isInteger(n.offset)||n.nextSectionType!=null&&!G(t.SectionType,n.nextSectionType))return!1;let{body:a,documentDataModel:o,commandService:s}=i,c={...t.Tools.deepClone(n.config??{}),sectionId:n.sectionId,startIndex:n.offset};if(!vt(a,n.offset)||(r=a.sectionBreaks)!=null&&r.some(e=>e.sectionId===n.sectionId)||!yt(c,o.getDocumentStyle()))return!1;let l=n.nextSectionType==null?void 0:R(a).find(e=>e.startIndex>=n.offset);if(n.nextSectionType!=null&&!l)return!1;let u=new t.TextX;return u.retain(n.offset),u.insert(1,{dataStream:t.DataStreamTreeTokenType.SECTION_BREAK,sectionBreaks:[{...c,startIndex:0}]}),l&&n.nextSectionType!=null&&(u.retain(l.startIndex-n.offset),u.push({t:t.TextXActionType.RETAIN,len:1,coverType:t.UpdateDocsAttributeType.REPLACE,body:{dataStream:``,sectionBreaks:[{...t.Tools.deepClone(l),sectionType:n.nextSectionType,startIndex:0}]}})),xt(s,o,u,H.id)}},U={id:`doc.command.insert-column-break`,type:t.CommandType.COMMAND,handler:(e,n)=>{if(!n)return!1;let r=_t(e,n.unitId);if(!r||!vt(r.body,n.offset))return!1;let i=new t.TextX;return i.retain(n.offset),i.insert(1,{dataStream:t.DataStreamTreeTokenType.COLUMN_BREAK,customRanges:[{startIndex:0,endIndex:0,rangeId:`docx-break-${(0,t.generateRandomId)()}`,rangeType:t.CustomRangeType.CUSTOM,wholeEntity:!0,properties:{breakType:t.DocxBreakType.COLUMN}}]}),xt(r.commandService,r.documentDataModel,i,U.id)}},W={id:`doc.command.delete-section-break`,type:t.CommandType.COMMAND,handler:(e,n)=>{if(!n)return!1;let r=_t(e,n.unitId);if(!r||!n.sectionId)return!1;let i=R(r.body);if(i.length<=1)return!1;let a=i.find(e=>e.sectionId===n.sectionId);if(!a||a===i[i.length-1])return!1;let o=new t.TextX;return o.retain(a.startIndex),o.delete(1),xt(r.commandService,r.documentDataModel,o,W.id)}};function _t(e,n){if(!n)return null;let r=e.get(t.IUniverInstanceService).getUnit(n,t.UniverInstanceType.UNIVER_DOC),i=r==null?void 0:r.getBody();return!r||!i||r.getDocumentStyle().documentFlavor!==t.DocumentFlavor.TRADITIONAL?null:{body:i,documentDataModel:r,commandService:e.get(t.ICommandService)}}function vt(e,n){var r,i,a;return Number.isInteger(n)&&n>=0&&n<=e.dataStream.length&&!((r=e.tables)!=null&&r.some(e=>(0,t.containsInteriorInsertionOffset)((0,t.getTableRangeInterval)(e),n)))&&!((i=e.columnGroups)!=null&&i.some(e=>(0,t.containsInteriorInsertionOffset)((0,t.getColumnGroupRangeInterval)(e),n)))&&!((a=e.blockRanges)!=null&&a.some(e=>(0,t.containsInteriorInsertionOffset)((0,t.getBlockRangeInterval)(e),n)))}function yt(e,n){if(e.sectionType!=null&&!G(t.SectionType,e.sectionType)||e.pageOrient!=null&&!G(t.PageOrientType,e.pageOrient)||e.columnSeparatorType!=null&&!G(t.ColumnSeparatorType,e.columnSeparatorType)||e.pageNumberStart!=null&&(!Number.isInteger(e.pageNumberStart)||e.pageNumberStart<1)||e.pageSize&&(!bt(e.pageSize.width)||!bt(e.pageSize.height))||[e.marginTop,e.marginBottom,e.marginLeft,e.marginRight].some(e=>e!=null&&(!Number.isFinite(e)||e<0)))return!1;let r=e.pageSize??n.pageSize,i=e.marginTop??n.marginTop??0,a=e.marginBottom??n.marginBottom??0,o=e.marginLeft??n.marginLeft??0,s=e.marginRight??n.marginRight??0;if((r==null?void 0:r.width)!=null&&o+s>=r.width||(r==null?void 0:r.height)!=null&&i+a>=r.height)return!1;let c=e.columnProperties??[];return!c.some(({width:e,paddingEnd:t})=>!Number.isFinite(e)||!Number.isFinite(t)||e<0||t<0)&&c.reduce((e,{width:t,paddingEnd:n})=>e+t+n,0)<=B(n,e)}function bt(e){return e!=null&&Number.isFinite(e)&&e>0}function G(e,t){return Object.values(e).includes(t)}function xt(e,n,r,i){let a=t.JSONX.getInstance().editOp(r.serialize(),(0,t.getRichTextEditPath)(n));return!!e.syncExecuteCommand(N.id,{unitId:n.getUnitId(),actions:a,textRanges:null,noNeedSetTextRange:!0,debounce:!0,isEditing:!1,trigger:i})}let K=class extends t.ObjectPermissionRuleModel{constructor(e){super(e,`DOC_OBJECT_PERMISSION_PLUGIN`,t.UniverInstanceType.UNIVER_DOC,[i.UnitObject.DocumentSection,i.UnitObject.DocumentParagraph,i.UnitObject.DocumentEntity])}};K=f([d(0,t.IResourceManagerService)],K);let St={id:`doc.mutation.set-permission-rule`,type:t.CommandType.MUTATION,handler:(e,n)=>!n||!e.get(t.IUniverInstanceService).getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC)?!1:e.get(K).setRule(n.unitId,n.objectType,n.objectId,n.rule)},Ct={id:`doc.mutation.set-permission-rules`,type:t.CommandType.MUTATION,handler:(e,n)=>!n||!e.get(t.IUniverInstanceService).getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC)?!1:e.get(K).setRules(n.unitId,n.rules)},wt={width:720,height:360},Tt={width:960,height:480},Et={width:720,height:405};function Dt(e){return Lt(e.unitId,e.segmentId,kt(e))}function Ot(e){return Lt(e.unitId,e.segmentId,At(e))}function kt(e){let n=new t.TextX;return e.startIndex>0&&n.push({t:t.TextXActionType.RETAIN,len:e.startIndex}),n.push({t:t.TextXActionType.INSERT,body:{dataStream:`\b`,customBlocks:[{startIndex:0,blockId:e.blockId}]},len:1}),Vt([Rt(n,e.segmentId),zt(e)])}function At(e){let n=new t.TextX;return e.startIndex>0&&n.push({t:t.TextXActionType.RETAIN,len:e.startIndex}),n.push({t:t.TextXActionType.DELETE,len:1}),Vt([Rt(n,e.segmentId),Bt(e)])}function jt(e){let n=Mt(e.childType),r=e.interactionMode===`inline`;return{unitId:e.unitId,subUnitId:e.unitId,drawingId:e.blockId,drawingType:t.DrawingTypeEnum.DRAWING_DOM,componentKey:e.componentKey??`UniverEmbedDocsCustomBlock`,data:Pt(e),title:e.blockId,description:`Univer embedded unit custom block`,layoutType:r?t.PositionedObjectLayoutType.INLINE:t.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM,allowTransform:!1,docTransform:{size:{width:n.width,height:n.height},positionH:{relativeFrom:r?t.ObjectRelativeFromH.PAGE:t.ObjectRelativeFromH.COLUMN,...r?{posOffset:0}:{align:t.AlignTypeH.LEFT}},positionV:{relativeFrom:r?t.ObjectRelativeFromV.PAGE:t.ObjectRelativeFromV.PARAGRAPH,posOffset:0},angle:0},transform:{left:0,top:0,width:n.width,height:n.height}}}function Mt(e){return e===t.UniverInstanceType.UNIVER_SHEET||e===t.UniverInstanceType.UNIVER_BASE?Tt:e===t.UniverInstanceType.UNIVER_SLIDE?Et:wt}function Nt(e){return e===t.UniverInstanceType.UNIVER_SHEET||e===t.UniverInstanceType.UNIVER_BASE}function Pt(e){return{version:1,embedId:e.embedId??e.blockId,hostUnitId:e.unitId,hostAnchorId:e.blockId,childUnitId:e.childUnitId,childType:e.childType,interactionMode:e.interactionMode??`block`}}function Ft(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.version===1&&typeof t.embedId==`string`&&typeof t.hostAnchorId==`string`}function It(e){let t=e&&typeof e==`object`?e.data:void 0;return!Ft(t)||t.interactionMode===`inline`}function Lt(e,t,n){return{id:N.id,params:{unitId:e,segmentId:t,actions:n,textRanges:[],isEditing:!1,noNeedSetTextRange:!0}}}function Rt(e,n){return t.JSONX.getInstance().editOp(e.serialize(),n?[`headers`,n,`body`]:[`body`])??[]}function zt(e){if(e.segmentId)return[];let n=t.JSONX.getInstance(),r=jt(e);return Vt([n.insertOp([`drawings`,e.blockId],r)??[],n.insertOp([`drawingsOrder`,e.drawingOrderIndex??0],e.blockId)??[]])}function Bt(e){if(e.segmentId)return[];let n=t.JSONX.getInstance(),r=jt(e);return Vt([n.removeOp([`drawings`,e.blockId],r)??[],n.removeOp([`drawingsOrder`,e.drawingOrderIndex??0],e.blockId)??[]])}function Vt(e){return e.reduce((e,n)=>!n||t.JSONX.isNoop(n)||n.length===0?e:!e||t.JSONX.isNoop(e)||e.length===0?n:t.JSONX.compose(e,n)??[],[])}var Ht=`@univerjs/docs`,Ut=`1.0.1`;let Wt={},Gt=class extends t.Disposable{constructor(e,t,n){super(),this._commandService=e,this._textSelectionManagerService=t,this._univerInstanceService=n,this._initSelectionChange()}_transformCustomRange(e,n){var r;let{startOffset:i,endOffset:a,collapsed:o}=n,s=(r=e.getCustomRanges())==null?void 0:r.filter(e=>!e.wholeEntity||i<=e.startIndex&&a>e.endIndex?!1:o?e.startIndex<i&&e.endIndex>=a:t.BuildTextUtils.range.isIntersects(i,a-1,e.startIndex,e.endIndex));if(s!=null&&s.length){let e=i,t=a;return s.forEach(n=>{e=Math.min(n.startIndex,e),t=Math.max(n.endIndex+1,t)}),{...n,startOffset:e,endOffset:t,collapsed:e===t}}return n}_initSelectionChange(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===o.id){let{unitId:t,ranges:n,isEditing:r}=e.params,i=this._univerInstanceService.getUnit(t);if(!i)return;let a=n.map(e=>this._transformCustomRange(i,e));a.some((e,t)=>n[t]!==e)&&this._textSelectionManagerService.replaceDocRanges(a,void 0,r)}}))}};Gt=f([d(0,t.ICommandService),d(1,(0,t.Inject)(p)),d(2,t.IUniverInstanceService)],Gt);let Kt=[`defaultHeaderId`,`defaultFooterId`,`firstPageHeaderId`,`firstPageFooterId`,`evenPageHeaderId`,`evenPageFooterId`],qt=new WeakMap;function q(e){var n,r;let i=((n=e.getMutationRevision)==null?void 0:n.call(e))??NaN,a=qt.get(e);if((a==null?void 0:a.mutationRevision)===i)return a;let o=e.getSnapshot(),s=o.body?R(o.body):[],c=new Map,l=(e,t)=>{for(let n of(e==null?void 0:e.customBlocks)??[])c.has(n.blockId)||c.set(n.blockId,t)};l(o.body,``),Object.entries(o.headers??{}).forEach(([e,t])=>l(t.body,e)),Object.entries(o.footers??{}).forEach(([e,t])=>l(t.body,e)),Object.entries(o.notes??{}).forEach(([e,t])=>l(t.body,e));let u=new Map;for(let e of((r=o.body)==null?void 0:r.customRanges)??[]){var d;(e.rangeType===t.CustomRangeType.FOOTNOTE||e.rangeType===t.CustomRangeType.ENDNOTE)&&typeof((d=e.properties)==null?void 0:d.noteId)==`string`&&u.set(e.properties.noteId,{startOffset:e.startIndex,endOffset:e.endIndex+1})}let f={drawingSegmentIds:c,footnoteReferenceRanges:u,mutationRevision:i,segments:new Map,topLevelSections:s};return qt.set(e,f),f}function Jt(e,n,r=q(e)){var i,a;let o=r.segments.get(n);if(o)return o;let s=((i=e.getSelfOrHeaderFooterModel(n))==null?void 0:i.getBody())??null,c=e.getSnapshot(),l=(a=c.notes)==null?void 0:a[n],u=(l?l.drawings:c.drawings)??{},d=s==null?[]:[...(s.tables??[]).map(e=>({type:`table`,id:e.tableId,startOffset:e.startIndex,endOffset:e.endIndex})),...(s.customBlocks??[]).map(e=>({type:u[e.blockId]?`drawing`:`custom-block`,id:e.blockId,startOffset:e.startIndex,endOffset:e.startIndex+1})),...(s.blockRanges??[]).map(e=>({type:`block-range`,id:e.blockId,startOffset:e.startIndex,endOffset:e.endIndex+1})),...(s.customRanges??[]).map(e=>({type:`custom-range`,id:e.rangeId,startOffset:e.startIndex,endOffset:e.endIndex+1})),...(s.columnGroups??[]).map(e=>({type:`column-group`,id:e.columnGroupId,startOffset:e.startIndex,endOffset:e.endIndex+1}))],f=new Map(d.map(e=>[`${e.type}:${e.id}`,{startOffset:e.startOffset,endOffset:e.endOffset}]));for(let e of(s==null?void 0:s.customBlocks)??[]){let t={startOffset:e.startIndex,endOffset:e.startIndex+1};f.set(`custom-block:${e.blockId}`,t),f.set(`drawing:${e.blockId}`,t)}let p={body:s,entities:d,entityRanges:f,paragraphContentStartOffsets:s==null?new Map:(0,t.getParagraphContentStartOffsets)(s),paragraphsById:new Map(((s==null?void 0:s.paragraphs)??[]).filter(e=>e.paragraphId!=null).map(e=>[e.paragraphId,e]))};return r.segments.set(n,p),p}function Yt(e,t){return q(e).drawingSegmentIds.get(t)??``}function J(e,t,n){let r=q(e),i=Jt(e,t,r),{body:a}=i;return a?[...Y(e,t,n,r),...an(a,t,n,i),...on(t,n,i)]:[]}function Xt(e,n,r){let i=new Set;if(r==null)return[];let a=t.JSON1.type.readCursor(r);return a.traverse(null,()=>{let r=a.getPath(),o=a.getComponent(),s=[`headers`,`footers`,`notes`].includes(String(r[0]))&&typeof r[1]==`string`?r[1]:n;if(r[0]===`notes`&&typeof r[1]==`string`&&Y(e,r[1],{startOffset:0,endOffset:0}).forEach(e=>i.add(e)),r[0]===`noteSettings`&&q(e).topLevelSections.forEach(e=>{i.add(I(``,e.sectionId))}),r[0]===`body`&&r[1]===`sectionBreaks`&&typeof r[2]==`number`&&(r[3]===`noteProperties`||r[3]===`suppressEndnotes`)){var c;let t=(c=e.getBody())==null||(c=c.sectionBreaks)==null||(c=c[r[2]])==null?void 0:c.sectionId;t&&i.add(I(``,t))}if(r[r.length-1]!==`body`||(o==null?void 0:o.et)!==t.TextX.id||!Array.isArray(o.e)||!o.e.every(Qt))return;let l=o.e,u=0,d=(t,n)=>{J(e,s,{startOffset:t,endOffset:n}).forEach(e=>i.add(e))};l.forEach(e=>{if(e.t===t.TextXActionType.INSERT){d(u,u);return}if(e.t===t.TextXActionType.DELETE){d(u,u+e.len),u+=e.len;return}(e.body!==void 0||e.oldBody!==void 0||e.coverType!==void 0)&&d(u,u+e.len),u+=e.len})}),Zt(r).forEach(t=>{var r,a;i.add(Qe(n,`drawing`,t));let o=(r=e.getSelfOrHeaderFooterModel(n))==null?void 0:r.getBody(),s=o==null||(a=o.customBlocks)==null?void 0:a.find(e=>e.blockId===t);s&&Y(e,n,{startOffset:s.startIndex,endOffset:s.startIndex+1}).forEach(e=>i.add(e))}),[...i]}function Zt(e){let t=new Set,n=e=>{if(Array.isArray(e)){e.forEach((r,i)=>{r===`drawings`&&typeof e[i+1]==`string`&&t.add(e[i+1]),n(r)});return}$t(e)&&Object.values(e).forEach(n)};return n(e),[...t]}function Qt(e){return!$t(e)||typeof e.len!=`number`?!1:e.t===t.TextXActionType.INSERT?$t(e.body):e.t===t.TextXActionType.RETAIN||e.t===t.TextXActionType.DELETE}function $t(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function en(e,t,n,r){let i=q(e),a=Jt(e,t,i).entityRanges.get(`${n}:${r}`)??null;return a?Y(e,t,a,i):[]}function tn(e,n,r){let i=q(e),a=Jt(e,n,i),{body:o}=a,s=a.paragraphsById.get(r);return!o||!s?[]:Y(e,n,{startOffset:a.paragraphContentStartOffsets.get(s.startIndex)??(0,t.getParagraphContentStartOffset)(o,s),endOffset:s.startIndex+1},i)}function nn(e){return Array.from(e,e=>I(``,e))}function rn(e,t){return sn(R(e),{startOffset:t,endOffset:t}).map(e=>e.sectionId)}function Y(e,t,n,r=q(e)){if(t){let n=r.footnoteReferenceRanges.get(t);return n?J(e,``,n):ln(e,t,r.topLevelSections).map(e=>I(``,e))}return sn(r.topLevelSections,n).map(e=>I(``,e.sectionId))}function an(e,n,r,i){let a=Math.min(r.startOffset,r.endOffset),o=Math.max(r.startOffset,r.endOffset);return(e.paragraphs??[]).filter(n=>cn(i.paragraphContentStartOffsets.get(n.startIndex)??(0,t.getParagraphContentStartOffset)(e,n),n.startIndex+1,a,o)).flatMap(e=>e.paragraphId?[Ze(n,e.paragraphId)]:[])}function on(e,t,n){let r=Math.min(t.startOffset,t.endOffset),i=Math.max(t.startOffset,t.endOffset);return n.entities.filter(e=>cn(e.startOffset,e.endOffset,r,i)).map(t=>Qe(e,t.type,t.id))}function sn(e,t){let n=Math.min(t.startOffset,t.endOffset),r=Math.max(t.startOffset,t.endOffset);return e.filter((t,i)=>cn(i===0?0:e[i-1].startIndex+1,t.startIndex+1,n,r))}function cn(e,t,n,r){return n===r?n>=e&&n<t:n<t&&r>e}function ln(e,n,r=q(e).topLevelSections){let i=e.getSnapshot(),a=new Set;return r.forEach((e,o)=>{Kt.some(e=>(0,t.resolveSectionHeaderFooterReference)(i.documentStyle,r,o,e).segmentId===n)&&a.add(e.sectionId)}),[...a]}let un=new Set([rt.id,it.id,`doc.command.open-header-footer-panel`,`doc.command.close-header-footer`,`doc.command.select-all`,`doc.command.set-zoom-ratio`]),dn=new Set([`docs-formula.mutation.set-last-values`]),fn=class extends t.Disposable{constructor(e,n,r,i){super(),this._injector=e,this._commandService=n,this._permissionService=r,this._univerInstanceService=i,this._univerInstanceService.getAllUnitsForType(t.UniverInstanceType.UNIVER_DOC).forEach(e=>this._registerUnitPermissionPoints(e.getUnitId())),this.disposeWithMe(this._univerInstanceService.getTypeOfUnitAdded$(t.UniverInstanceType.UNIVER_DOC).subscribe(({unit:e})=>this._registerUnitPermissionPoints(e.getUnitId()))),this.disposeWithMe(this._commandService.beforeCommandExecuted((e,t)=>{this._check(e,t)})),this.disposeWithMe(this._univerInstanceService.getTypeOfUnitDisposed$(t.UniverInstanceType.UNIVER_DOC).subscribe(e=>{this._injector.get(t.ObjectPermissionService).clearUnit(e.getUnitId()),tt(this._permissionService,e.getUnitId())}))}_registerUnitPermissionPoints(e){F.forEach(t=>{let n=L(e,e,t);this._permissionService.getPermissionPoint(n.id)||this._permissionService.addPermissionPoint(n)}),this._injector.get(t.ObjectPermissionService).initializeUnit({unitId:e,objectId:e,objectType:i.UnitObject.Document})}_check(e,n){var r;if(n!=null&&n.fromCollab||n!=null&&n.fromChangeset)return;let a=yn(e.id),o=vn(e,n)??(a?(r=this._univerInstanceService.getCurrentUnitOfType(t.UniverInstanceType.UNIVER_DOC))==null?void 0:r.getUnitId():void 0);if(!o||this._univerInstanceService.getUnitType(o)!==t.UniverInstanceType.UNIVER_DOC)return;if(a){if(!$e(this._permissionService,o,o,a))throw this._injector.get(t.ErrorService).emitPermissionDenied(o),new t.CustomCommandExecutionError(`Document ${i.UnitAction[a]} permission denied.`);return}let s=this._univerInstanceService.getUnit(o,t.UniverInstanceType.UNIVER_DOC);if(!s)return;let c=this._resolveTargetObjectIds(s,e);if(c!==null&&!nt(this._permissionService,o,c))throw this._injector.get(t.ErrorService).emitPermissionDenied(o,c),new t.CustomCommandExecutionError(`Document edit permission denied.`)}_resolveTargetObjectIds(e,t){if(t.id===N.id){let n=t.params;return Xt(e,n.segmentId??``,n.actions)}if(t.id===P.id)return[];if(hn(t))return null;let n=bn(e,t)??xn(e,t);if(n)return n;let r=gn(e,t);return r.length?r:pn(t.id)||mn(t)?[]:null}};fn=f([d(0,(0,t.Inject)(t.Injector)),d(1,t.ICommandService),d(2,t.IPermissionService),d(3,t.IUniverInstanceService)],fn);function pn(e){return un.has(e)?!1:e.startsWith(`doc.command.`)||e.startsWith(`docs.command.`)||e.startsWith(`doc.command-`)||e.startsWith(`doc.table.`)}function mn(e){let{id:t}=e;return hn(e)?!1:t.startsWith(`doc.mutation.`)||t.startsWith(`docs.mutation.`)||/^docs-[^.]+\.mutation\./.test(t)}function hn(e){let t=Sn(e.params)?e.params:void 0;return dn.has(e.id)||e.id===`doc.mutation.update-shape-data`&&!!(t!=null&&t.formulaLastValueGuard)}function gn(e,t){let n=t.params;if(!Sn(n))return[];let r=new Set,i=(t,n,i)=>{r.add(Qe(t,n,i)),en(e,t,n,i).forEach(e=>r.add(e))};return _n(n).forEach(({entityType:t,entityId:r})=>{let a=n.segmentId,o=typeof a==`string`?a:t===`drawing`||t===`custom-block`?Yt(e,r):``;i(o,t,r)}),[...r]}function _n(e){let t=new Map,n={blockId:[`custom-block`],drawingId:[`drawing`],shapeId:[`drawing`,`custom-block`],tableId:[`table`],rangeId:[`custom-range`],columnGroupId:[`column-group`]},r=(e,i=``)=>{if(typeof e==`string`){var a;(a=n[i])==null||a.forEach(n=>{t.set(`${n}\u001F${e}`,{entityType:n,entityId:e})});return}if(Array.isArray(e)){let t=i.endsWith(`Ids`)?`${i.slice(0,-3)}Id`:i;e.forEach(e=>r(e,t));return}Sn(e)&&Object.entries(e).forEach(([e,t])=>r(t,e))};return r(e),[...t.values()]}function vn(e,t){let n=Sn(e.params)?e.params:void 0;return typeof(n==null?void 0:n.unitId)==`string`?n.unitId:typeof(t==null?void 0:t.unitId)==`string`?t.unitId:void 0}function yn(e){if(e===`doc.command.copy-current-paragraph`||e===`docs-table.command.copy-selection`)return i.UnitAction.Copy;if(e===`docs.operation.print`)return i.UnitAction.Print;if(e===`docs-exchange-client.operation.export-doc`)return i.UnitAction.Export;if(e===`docs.operation.start-add-comment`||e===`docs.operation.add-drawing-comment`||e.startsWith(`docs.command.`)&&e.includes(`comment`)||e.startsWith(`thread-comment.command.`)||e.startsWith(`thread-comment.mutation.`))return i.UnitAction.Comment}function bn(e,n){let{id:r}=n;if(r===Oe.id||r===Me.id){let t=n.params;return J(e,t.segmentId??``,t.range)}if(r===je.id){let r=n.params,i=r.direction===t.DeleteDirection.LEFT;return J(e,r.segmentId??``,{startOffset:i?r.range.startOffset-(r.len??1):r.range.startOffset,endOffset:i?r.range.startOffset:r.range.startOffset+(r.len??1)})}if(r===dt.id){let t=n.params;return J(e,t.segmentId??``,t)}return null}function xn(e,t){let{id:n}=t;if(n===V.id){let e=t.params;return nn(e.updates.map(e=>e.sectionId))}if(n===H.id||n===U.id){let n=t.params,r=e.getBody();return r?nn(rn(r,n.offset)):[]}if(n===W.id){let n=t.params,r=e.getBody(),i=r?R(r):[],a=i.findIndex(e=>e.sectionId===n.sectionId);return nn([n.sectionId,...a>=0&&a+1<i.length?[i[a+1].sectionId]:[]])}if(n===at.id){let e=t.params;return[I(``,e.sectionId)]}if(n===Ie.id){let e=t.params;return e.sectionId?[I(``,e.sectionId)]:[]}return null}function Sn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Cn=class extends t.Disposable{constructor(...e){super(...e),u(this,`_validators`,[]),u(this,`_transformers`,[])}registerValidator(e){return this._validators.push(e),this.disposeWithMe((0,t.toDisposable)(()=>(0,t.remove)(this._validators,e)))}registerTransformer(e){return this._transformers.push(e),this.disposeWithMe((0,t.toDisposable)(()=>(0,t.remove)(this._transformers,e)))}canMoveBlock(e){return this._validators.every(t=>t(e))}transformMoveResult(e){return this._transformers.reduce((t,n)=>n({...e,result:t}),e.result)}},wn=class extends t.Disposable{constructor(...e){super(...e),u(this,`_range`,null)}setInsertRange(e){this._range=e}consumeInsertRange(e){if(!this._range||e&&this._range.unitId!==e)return null;let t=this._range;return this._range=null,t}clearInsertRange(){this._range=null}};let Tn=(0,t.createIdentifier)(`doc.state-change-interceptor-service`),X=class extends t.RxDisposable{constructor(e,t,n,i,a){super(),this._undoRedoService=e,this._commandService=t,this._univerInstanceService=n,this._docStateEmitService=i,this._docStateChangeInterceptorService=a,u(this,`_docStateChange$`,new r.BehaviorSubject(null)),u(this,`docStateChange$`,this._docStateChange$.asObservable()),u(this,`_historyStateCache`,new Map),u(this,`_changeStateCache`,new Map),u(this,`_historyTimer`,null),u(this,`_changeStateCacheTimer`,null),this._initialize(),this._listenDocStateChange()}dispose(){this._historyTimer!=null&&(clearTimeout(this._historyTimer),this._historyTimer=null),this._changeStateCacheTimer!=null&&(clearTimeout(this._changeStateCacheTimer),this._changeStateCacheTimer=null),this._historyStateCache.clear(),this._changeStateCache.clear(),this._docStateChange$.complete(),super.dispose()}getStateCache(e){return{history:this._historyStateCache.get(e)??[],collaboration:this._changeStateCache.get(e)??[]}}setStateCache(e,t){this._historyStateCache.set(e,t.history),this._changeStateCache.set(e,t.collaboration)}clearHistory(e){this._historyStateCache.delete(e)}flushPendingChanges(e){this._pushHistory(e),this._emitChangeState(e)}_setChangeState(e){this._cacheChangeState(e,`history`),this._cacheChangeState(e,`collaboration`)}_initialize(){this.disposeWithMe(this._commandService.beforeCommandExecuted(e=>{if(e.id===t.UndoCommandId||e.id===t.RedoCommandId){let e=this._univerInstanceService.getCurrentUnitOfType(t.UniverInstanceType.UNIVER_DOC);if(e==null)return;let n=e.getUnitId();this._pushHistory(n),this._emitChangeState(n)}}))}_listenDocStateChange(){this._docStateEmitService.docStateChangeParams$.pipe((0,r.takeUntil)(this.dispose$)).subscribe(e=>{var t;if(e==null)return;let n=((t=this._docStateChangeInterceptorService)==null?void 0:t.transformChangeStateInfo(e))??e;if(n==null||n.isSync)return;let{isCompositionEnd:r,isSync:i,syncer:a,...o}=n;this._setChangeState(o)})}_cacheChangeState(e,n=`history`){let{trigger:r,unitId:i,noHistory:a,debounce:o=!1}=e;if(a||n===`history`&&r==null||n===`history`&&(r===t.RedoCommandId||r===t.UndoCommandId))return;let s=n===`history`?this._historyStateCache:this._changeStateCache,c=n===`history`?this._pushHistory.bind(this):this._emitChangeState.bind(this),l=s.get(i);if(l!=null&&l.length&&l[l.length-1].segmentId!==e.segmentId&&c(i),s.has(i)){let t=s.get(i);t==null||t.push(e)}else s.set(i,[e]);o?n===`history`?(this._historyTimer&&clearTimeout(this._historyTimer),this._historyTimer=setTimeout(()=>{c(i)},300)):(this._changeStateCacheTimer&&clearTimeout(this._changeStateCacheTimer),this._changeStateCacheTimer=setTimeout(()=>{c(i)},300)):c(i)}_pushHistory(e){let n=this._undoRedoService,r=this._historyStateCache.get(e);if(n==null||!Array.isArray(r)||r.length===0)return;let i=r.length,a=r[0].commandId,o=r[0],s=r[i-1],c={unitId:e,trigger:t.RedoCommandId,...s.redoState.layoutState===void 0?{}:{layoutState:s.redoState.layoutState},actions:r.reduce((e,n)=>t.JSONX.compose(e,n.redoState.actions),null),textRanges:s.redoState.textRanges,segmentId:s.segmentId,options:s.redoState.options,isEditing:s.redoState.isEditing},l={unitId:e,trigger:t.UndoCommandId,...o.undoState.layoutState===void 0?{}:{layoutState:o.undoState.layoutState},actions:r.reverse().reduce((e,n)=>t.JSONX.compose(e,n.undoState.actions),null),textRanges:o.undoState.textRanges,segmentId:o.segmentId,options:o.undoState.options,isEditing:o.undoState.isEditing};n.pushUndoRedo({unitID:e,undoMutations:[{id:a,params:l}],redoMutations:[{id:a,params:c}]}),r.length=0}_emitChangeState(e){let n=this._changeStateCache.get(e);if(!Array.isArray(n)||n.length===0)return;let r=n.length,{commandId:i,trigger:a,segmentId:o,noHistory:s,debounce:c}=n[0],l=n[0],u=n[r-1],d={commandId:i,unitId:e,trigger:a,redoState:{unitId:e,actions:n.reduce((e,n)=>t.JSONX.compose(e,n.redoState.actions),null),textRanges:u.redoState.textRanges,segmentId:u.segmentId,options:u.redoState.options,isEditing:u.redoState.isEditing},undoState:{unitId:e,actions:n.reverse().reduce((e,n)=>t.JSONX.compose(e,n.undoState.actions),null),textRanges:l.undoState.textRanges,segmentId:l.segmentId,options:l.undoState.options,isEditing:l.undoState.isEditing},segmentId:o,noHistory:s,debounce:c};n.length=0,this._docStateChange$.next(d)}};X=f([d(0,(0,t.Optional)(t.IUndoRedoService)),d(1,t.ICommandService),d(2,t.IUniverInstanceService),d(3,(0,t.Inject)(re)),d(4,(0,t.Optional)(Tn))],X);var En=class extends t.Disposable{constructor(...e){super(...e),u(this,`_resolvers`,new Set),u(this,`_textChanged$`,new r.Subject),u(this,`textChanged$`,this._textChanged$.asObservable())}register(e){return this._resolvers.add(e),(0,t.toDisposable)(()=>this._resolvers.delete(e))}notifyTextChanged(e){this._textChanged$.next(e)}resolve(e,t){let n=this._collectReplacements(e,t),r=[],i=``,a=0;for(let e of n){let n=t.dataStream.slice(a,e.startOffset);i+=n;for(let t=a;t<e.startOffset;t+=1)r.push({startOffset:t,endOffset:t+1,replaceable:!0});i+=e.text;for(let t=0;t<e.text.length;t+=1)r.push({startOffset:e.startOffset,endOffset:e.endOffset,replaceable:e.replaceable??!1});a=e.endOffset}i+=t.dataStream.slice(a);for(let e=a;e<t.dataStream.length;e+=1)r.push({startOffset:e,endOffset:e+1,replaceable:!0});return{characters:r,text:i}}_collectReplacements(e,t){let n=[...this._resolvers].flatMap(n=>n.resolve(e,t)).filter(e=>Number.isInteger(e.startOffset)&&Number.isInteger(e.endOffset)&&e.startOffset>=0&&e.endOffset>e.startOffset&&e.endOffset<=t.dataStream.length).sort((e,t)=>e.startOffset-t.startOffset||t.endOffset-e.endOffset),r=[],i=-1;for(let e of n)e.startOffset<i||(r.push(e),i=e.endOffset);return r}dispose(){this._textChanged$.complete(),super.dispose()}};let Z=class extends t.Plugin{constructor(e=Wt,n,r){super(),this._config=e,this._injector=n,this._configService=r;let{...i}=(0,t.merge)({},Wt,this._config);this._configService.setConfig(`docs.config`,i)}onStarting(){this._injector.add([K]),this.disposeWithMe(this._injector.get(t.ICommandService).registerCommand(St)),this.disposeWithMe(this._injector.get(t.ICommandService).registerCommand(Ct)),this.disposeWithMe(this._injector.get(t.ObjectPermissionService).registerRuleModel(i.UnitObject.Document,this._injector.get(K),St.id,Ct.id)),this._initializeDependencies(),this._initializeCommands(),this._initializeWordResources()}_initializeWordResources(){for(let e of[`DOC_WORD_STYLES_PLUGIN`,`DOC_NOTE_PLUGIN`]){let n=new Map;this.disposeWithMe({dispose:()=>n.clear()}),this.disposeWithMe(this._injector.get(t.IResourceManagerService).registerPluginResource({pluginName:e,businesses:[t.UniverInstanceType.UNIVER_DOC],parseJson:e=>e,onLoad:(e,t)=>{n.set(e,t)},onUnLoad:e=>{n.delete(e)},toJson:e=>n.get(e)??``}))}}_initializeCommands(){[Oe,je,Me,Ie,rt,it,Le,Re,at,dt,V,H,U,W,N,P,o].forEach(e=>{this._injector.get(t.ICommandService).registerCommand(e)})}_initializeDependencies(){[[p],[re],[X],[Cn],[wn],[O],[En],[Gt],[fn]].forEach(e=>this._injector.add(e))}onReady(){this._injector.get(X),this._injector.get(Gt),this._injector.get(fn)}};u(Z,`pluginName`,`DOCS_PLUGIN`),u(Z,`packageName`,Ht),u(Z,`version`,Ut),Z=f([d(1,(0,t.Inject)(t.Injector)),d(2,t.IConfigService)],Z);let Dn=15e3,On={requestTimeoutMs:Dn};function kn(e,n){if(typeof e!=`object`||!e)return;if(Array.isArray(e)){for(let t=0;t<e.length;t++){let r=e[t];e[t-1]===`ff`&&typeof r==`object`&&r&&typeof r.i==`string`&&n.add(r.i),kn(r,n)}return}let r=e;if(typeof r.eastAsiaFontFamily==`string`&&r.eastAsiaFontFamily.trim()){let e=typeof r.ff==`string`&&r.ff.trim()?r.ff:t.DEFAULT_STYLES.ff;n.add(`${e}, ${r.eastAsiaFontFamily.trim()}`),n.add(`${r.eastAsiaFontFamily.trim()}, ${e}, ${r.eastAsiaFontFamily.trim()}`)}for(let[t,r]of Object.entries(e))t===`ff`&&typeof r==`string`?n.add(r):kn(r,n)}function An(e){n.FontCache.getNormalLineHeight((0,n.getFontStyleString)());for(let r of[``,...e])for(let e of[t.BooleanNumber.FALSE,t.BooleanNumber.TRUE])for(let i of[t.BooleanNumber.FALSE,t.BooleanNumber.TRUE])n.FontCache.getNormalLineHeight((0,n.getFontStyleString)({ff:r,bl:e,it:i}));return n.FontCache.getNormalLineHeightCache()}var jn=class extends t.Disposable{constructor(...e){super(...e),u(this,`_loading`,null),u(this,`_fontSet`,void 0),u(this,`_faces`,[])}load(e){return this._loading??=this._load(e),this._loading}dispose(){for(let t of this._faces){var e;(e=this._fontSet)==null||e.delete(t)}this._faces.length>0&&n.FontCache.invalidateMetrics(()=>!0),this._faces=[],this._fontSet=void 0,super.dispose()}async _load(e){if(this.ensureNotDisposed(),e.length===0)return;let t=typeof document>`u`?globalThis.fonts:document.fonts;if(typeof FontFace>`u`||t==null)throw Error(`Document layout requires FontFace support to load the configured fonts.`);try{let r=e.map(({family:e,source:t,descriptors:n})=>{if(!e.trim()||(typeof t==`string`?!t.trim():t.byteLength===0))throw TypeError(`Document layout font family and source must not be empty.`);return new FontFace(e,t,n)});await Promise.all(r.map(e=>e.load())),this.ensureNotDisposed(),this._fontSet=t,this._faces=r;for(let e of r)t.add(e);n.FontCache.invalidateMetrics(()=>!0)}catch(e){throw this.dispose(),e}}};let Mn=2048;function Q(e){return typeof e==`object`&&!!e}function Nn(e){if(!Q(e)||typeof e.method!=`string`||!Array.isArray(e.args))return null;let t=e.args[0];return Q(t)?{method:e.method,request:t}:null}function Pn(e){if(!Q(e)||!Q(e.data))return null;let t=e.data;return Q(t.step)?t.step:t}function Fn(){return{mutationTransferMs:[],patchTransferMs:[],snapshotTransferMs:[]}}var In=class{constructor(){u(this,`_metrics`,new Map)}recordRequest(e,t){let n=Nn(e),r=n==null?void 0:n.request.unitId;if(n!=null&&typeof r==`string`){if(n.method===`createSession`){this._append(r,`snapshotTransferMs`,t);return}n.method===`startLayout`&&Array.isArray(n.request.mutations)&&n.request.mutations.length>0&&this._append(r,`mutationTransferMs`,t)}}recordResponse(e,t){let n=Pn(e);n!=null&&typeof n.unitId==`string`&&n.publication!=null&&this._append(n.unitId,`patchTransferMs`,t)}getMetrics(e){let t=this._metrics.get(e)??Fn();return{mutationTransferMs:[...t.mutationTransferMs],patchTransferMs:[...t.patchTransferMs],snapshotTransferMs:[...t.snapshotTransferMs]}}reset(e){this._metrics.delete(e)}resetAll(){this._metrics.clear()}_append(e,t,n){let r=this._metrics.get(e)??Fn(),i=r[t];i.push(n),i.length>Mn&&i.splice(0,i.length-Mn),this._metrics.set(e,r)}};let Ln=`univer.docs-layout-worker`,Rn=`Univer 文档 Worker 0123456789`,zn=`16px Arial`;function Bn(){return new Promise(e=>{(0,t.requestImmediateMacroTask)(()=>e())})}function Vn(e){return{send(n){let r=t.Tools.now();postMessage(n),e.recordResponse(n,t.Tools.now()-r)},onMessage:new r.Observable(e=>{let t=t=>e.next(t.data);return addEventListener(`message`,t),()=>removeEventListener(`message`,t)}).pipe((0,r.shareReplay)({bufferSize:1,refCount:!0}))}}function Hn(e){return JSON.stringify([e.segmentId,e.rangeId])}function Un(e,t){if(t!=null){for(let n of t.removals)delete e[n];Object.assign(e,t.upserts)}}var Wn=class{constructor(e=new In){this._performanceTracker=e,u(this,`_sessions`,new Map),u(this,`_fontLoader`,new jn),u(this,`type`,`worker`)}initialize(e=[]){return this._fontLoader.load(e)}async getCapabilities(){let e=n.FontCache.getMeasureText(Rn,zn);return{protocolVersion:5,executor:`worker`,offscreenCanvas:typeof OffscreenCanvas<`u`,structuredClone:typeof structuredClone==`function`,fontProbe:{content:Rn,font:zn,width:e.width,actualBoundingBoxAscent:e.actualBoundingBoxAscent,actualBoundingBoxDescent:e.actualBoundingBoxDescent}}}async recover(){for(let e of this._sessions.values())for(let t of e.layoutSessions.values())t.layoutSession.dispose();this._sessions.clear()}async createSession(e){if(typeof OffscreenCanvas>`u`)throw Error(`Document layout Worker requires OffscreenCanvas text measurement support.`);let r=this._sessions.get(e.unitId);if(r!=null&&e.sessionEpoch<r.sessionEpoch)return;this._disposeSession(e.unitId),n.FontCache.setNormalLineHeightCache(e.normalFontLineHeights??{});let i=new t.DocumentDataModel(e.snapshot),a=new t.LocaleService;e.localeData!=null&&a.load({[e.locale]:e.localeData}),a.setLocale(e.locale),a.setDirection(e.direction),this._sessions.set(e.unitId,{sessionEpoch:e.sessionEpoch,dataModel:i,layoutSessions:new Map,localeService:a,modelRevision:e.modelRevision,customRangePresentations:new Map})}async startLayout(e){let t=this._sessions.get(e.unitId);if(t==null)return{status:`not-found`};if(t.modelRevision!==e.baseRevision||!this._applyMutations(t,e))return{status:`resnapshot-required`,modelRevision:t.modelRevision};n.FontCache.setNormalLineHeightCache(e.normalFontLineHeights??{}),this._updateCustomRangePresentations(t,e),this._applyCustomRangePresentations(t.dataModel,Array.from(t.customRangePresentations.values()));let r=t.layoutSessions.get(e.mountId);if(r!=null&&(e.mountEpoch<r.mountEpoch||e.mountEpoch===r.mountEpoch&&e.viewportEpoch<r.viewportEpoch))return{status:`superseded`};if(r!=null&&e.mountEpoch>r.mountEpoch&&(r.layoutSession.dispose(),t.layoutSessions.delete(e.mountId),r=void 0),r==null){let i={...e.customBlockViewports};Un(i,e.customBlockViewportPatch),r={mountId:e.mountId,layoutSession:new n.DocumentLayoutSession(t.dataModel,t.localeService),customBlockViewports:i,metricsRevision:e.metricsRevision,mountEpoch:e.mountEpoch,viewportEpoch:e.viewportEpoch,activeGeneration:null,cancelledGeneration:null},t.layoutSessions.set(e.mountId,r)}else e.customBlockViewports!=null&&(r.customBlockViewports={...e.customBlockViewports}),Un(r.customBlockViewports,e.customBlockViewportPatch),r.metricsRevision=e.metricsRevision,r.viewportEpoch=e.viewportEpoch;let i=r.layoutSession.start({waitForHyphenationPatterns:!0,reason:e.reason,anchor:e.anchor,priorityAnchor:e.priorityAnchor,invalidation:e.invalidation,modernPageWidth:e.modernPageWidth,modernHorizontalMargin:e.modernHorizontalMargin});return r.activeGeneration=i,r.cancelledGeneration=null,{status:`accepted`,step:await this._runLayoutStep(t,r,i,e.budgetMs)}}_applyMutations(e,t){for(let n of t.mutations){if(n.baseRevision!==e.modelRevision||n.modelRevision!==n.baseRevision+1)return!1;e.dataModel.apply(n.actions),e.modelRevision=n.modelRevision}if(e.modelRevision!==t.modelRevision)return!1;if(t.mutations.length>0)for(let t of e.layoutSessions.values())t.activeGeneration=null,t.cancelledGeneration=null,t.layoutSession.resetDataModel(e.dataModel);return!0}_applyCustomRangePresentations(e,t){let n=new Map,r=[[``,e],...e.headerModelMap,...e.footerModelMap];for(let[e,t]of r){var i;let r=new Map;for(let e of((i=t.getBody())==null?void 0:i.customRanges)??[]){let t=e;delete t.active,delete t.glyphAscentEm,delete t.glyphDescentEm,delete t.glyphWidthEm,delete t.show,r.has(e.rangeId)||r.set(e.rangeId,t)}n.set(e,r)}for(let{segmentId:e,rangeId:r,presentation:i}of t??[]){let t=n.get(e),a=t==null?void 0:t.get(r);a!=null&&(Object.assign(a,i),t==null||t.delete(r))}}_updateCustomRangePresentations(e,t){var n,r;if(t.customRangePresentations!=null){e.customRangePresentations.clear();for(let n of t.customRangePresentations){let t=Hn(n);e.customRangePresentations.has(t)||e.customRangePresentations.set(t,n)}}for(let r of((n=t.customRangePresentationPatch)==null?void 0:n.removals)??[])e.customRangePresentations.delete(Hn(r));for(let n of((r=t.customRangePresentationPatch)==null?void 0:r.upserts)??[])e.customRangePresentations.set(Hn(n),n)}async stepLayout(e){let t=this._getSession(e.unitId),n=this._getLayoutMount(t,e);return await this._runLayoutStep(t,n,e.generation,e.budgetMs)}async publishBacklog(e){let t=this._getSession(e.unitId),n=this._getLayoutMount(t,e);return this._runWithCustomBlockViewports(t,n,()=>({...n.layoutSession.publishBacklog(e.generation),unitId:e.unitId,mountId:e.mountId,mountEpoch:n.mountEpoch,viewportEpoch:n.viewportEpoch,modelRevision:t.modelRevision,metricsRevision:n.metricsRevision}))}async getLayoutPage(e){let t=this._getSession(e.unitId),n=this._getLayoutMount(t,e);return{...e,modelRevision:t.modelRevision,metricsRevision:n.metricsRevision,page:n.layoutSession.getPage(e.pageIndex)}}async cancelLayout(e){var t;let n=(t=this._sessions.get(e.unitId))==null?void 0:t.layoutSessions.get(e.mountId);(n==null?void 0:n.mountEpoch)===e.mountEpoch&&n.viewportEpoch===e.viewportEpoch&&((e.generation==null||e.generation===n.activeGeneration)&&(n.cancelledGeneration=e.generation??n.activeGeneration),n.layoutSession.cancel(e.generation))}async getPerformanceMetrics(e){return this._performanceTracker.getMetrics(e)}async resetPerformanceMetrics(e){this._performanceTracker.reset(e)}async disposeLayoutMount(e){let t=this._sessions.get(e.unitId),n=t==null?void 0:t.layoutSessions.get(e.mountId);t!=null&&n!=null&&n.mountEpoch===e.mountEpoch&&n.viewportEpoch===e.viewportEpoch&&(t.layoutSessions.delete(e.mountId),n.activeGeneration=null,n.layoutSession.dispose())}async disposeSession(e){let t=this._sessions.get(e.unitId);(t==null?void 0:t.sessionEpoch)===e.sessionEpoch&&(this._disposeSession(e.unitId),this._performanceTracker.reset(e.unitId))}dispose(){this._fontLoader.dispose();for(let e of this._sessions.keys())this._disposeSession(e);this._performanceTracker.resetAll()}_getSession(e){let t=this._sessions.get(e);if(t==null)throw Error(`Document layout Worker session not found for unit "${e}".`);return t}_getLayoutMount(e,t){let n=e.layoutSessions.get(t.mountId);if(n==null)throw Error(`Document layout Worker mount not found: "${t.mountId}".`);if(n.mountEpoch!==t.mountEpoch||n.viewportEpoch!==t.viewportEpoch)throw Error(`Document layout Worker rejected a stale mount publication: "${t.mountId}".`);return n}async _runLayoutStep(e,t,n,r){let i=this._runWithCustomBlockViewports(e,t,()=>({...t.layoutSession.step(n,r,8),unitId:e.dataModel.getUnitId(),mountId:t.mountId,mountEpoch:t.mountEpoch,viewportEpoch:t.viewportEpoch,modelRevision:e.modelRevision,metricsRevision:t.metricsRevision}));return await Bn(),t.activeGeneration===n&&t.cancelledGeneration!==n?i:this._runWithCustomBlockViewports(e,t,()=>({...t.layoutSession.step(n,0,1),unitId:e.dataModel.getUnitId(),mountId:t.mountId,mountEpoch:t.mountEpoch,viewportEpoch:t.viewportEpoch,modelRevision:e.modelRevision,metricsRevision:t.metricsRevision}))}_runWithCustomBlockViewports(e,t,r){let i=(0,n.setDocsCustomBlockRenderViewportProvider)((n,r)=>n===e.dataModel.getUnitId()?t.customBlockViewports[r]:null);try{return r()}finally{i()}}_disposeSession(e){let t=this._sessions.get(e);if(t!=null){this._sessions.delete(e);for(let e of t.layoutSessions.values())e.activeGeneration=null,e.layoutSession.dispose();t.layoutSessions.clear(),t.dataModel.dispose(),t.localeService.dispose()}}},Gn=class extends a.ChannelService{constructor(e,t){super(e),this._runtime=t}dispose(){this._runtime.dispose(),super.dispose()}};function Kn(){let e=new In,t=new Wn(e),n=new Gn(Vn(e),t);return n.registerChannel(Ln,(0,a.fromModule)(t)),n}var qn=class extends Error{constructor(e){super(e),this.name=`DocsLayoutWorkerCapabilityError`}};function Jn(e,n){return{send(r){let i=t.Tools.now();e.postMessage(r),n.recordRequest(r,t.Tools.now()-i)},onMessage:new r.Observable(t=>{let n=e=>t.next(e.data);return e.addEventListener(`message`,n),()=>e.removeEventListener(`message`,n)}).pipe((0,r.shareReplay)({bufferSize:1,refCount:!0}))}}var Yn=class extends t.Disposable{constructor(e,t=Dn,n=[]){super(),this._workerFactory=e,this._requestTimeoutMs=t,this._fontFaces=n,u(this,`type`,`worker`),u(this,`_worker`,null),u(this,`_channelService`,null),u(this,`_runtime`,null),u(this,`_initialization`,void 0),u(this,`_initialized`,!1),u(this,`_performanceTracker`,new In),u(this,`_fontFamilies`,new Map),u(this,`_fontLoader`,new jn),this.disposeWithMe(this._fontLoader),this._initialization=this._replaceRuntime()}initialize(){return this._initialization}get renderingFontsReady(){return this._fontFaces.length>0?this._initialization:void 0}async getCapabilities(){return await this._initialization,this._getRuntime().getCapabilities()}async recover(){this._initialization=this._replaceRuntime(),await this._initialization}createSession(e){let n=new Set;kn(e.snapshot,n),this._fontFamilies.set(e.unitId,n);let r={...e,normalFontLineHeights:An(n)};if(this._initialized)return this._withTimeout(this._getRuntime().createSession(r),`create session`);let i=t.Tools.deepClone(r);return this._initialization.then(()=>this._withTimeout(this._getRuntime().createSession(i),`create session`))}async startLayout(e){await this._initialization;let t=this._fontFamilies.get(e.unitId);t!=null&&kn(e.mutations,t);let n=t==null?e:{...e,normalFontLineHeights:An(t)};return this._withTimeout(this._getRuntime().startLayout(n),`start layout`)}async stepLayout(e){return await this._initialization,this._withTimeout(this._getRuntime().stepLayout(e),`step layout`)}async publishBacklog(e){return await this._initialization,this._withTimeout(this._getRuntime().publishBacklog(e),`publish layout backlog`)}async getLayoutPage(e){return await this._initialization,this._withTimeout(this._getRuntime().getLayoutPage(e),`get layout page`)}async cancelLayout(e){return await this._initialization,this._withTimeout(this._getRuntime().cancelLayout(e),`cancel layout`)}async getPerformanceMetrics(e){await this._initialization;let t=await this._withTimeout(this._getRuntime().getPerformanceMetrics(e),`read performance metrics`),n=this._performanceTracker.getMetrics(e);return{mutationTransferMs:n.mutationTransferMs,patchTransferMs:t.patchTransferMs,snapshotTransferMs:n.snapshotTransferMs}}async resetPerformanceMetrics(e){await this._initialization,await this._withTimeout(this._getRuntime().resetPerformanceMetrics(e),`reset performance metrics`),this._performanceTracker.reset(e)}async disposeLayoutMount(e){return await this._initialization,this._withTimeout(this._getRuntime().disposeLayoutMount(e),`dispose layout mount`)}async disposeSession(e){await this._initialization,await this._withTimeout(this._getRuntime().disposeSession(e),`dispose session`),this._performanceTracker.reset(e.unitId),this._fontFamilies.delete(e.unitId)}dispose(){this._disposeRuntime(),super.dispose()}async _replaceRuntime(){this._initialized=!1,this._disposeRuntime(),await this._withTimeout(this._fontLoader.load(this._fontFaces),`load rendering fonts`),this.ensureNotDisposed();let e=this._workerFactory(),t=new a.ChannelService(Jn(e,this._performanceTracker));this._worker=e,this._channelService=t,this._runtime=(0,a.toModule)(t.requestChannel(Ln));try{await this._withTimeout(this._runtime.initialize(this._fontFaces),`load Worker fonts`),await this._withTimeout(this._verifyCapabilities(),`verify capabilities`),this.ensureNotDisposed(),this._initialized=!0}catch(t){throw this._worker===e&&this._disposeRuntime(),t}}_disposeRuntime(){var e,t;this._fontFamilies.clear(),this._initialized=!1,(e=this._channelService)==null||e.dispose(),this._channelService=null,this._runtime=null,(t=this._worker)==null||t.terminate(),this._worker=null,this._performanceTracker.resetAll()}_getRuntime(){if(this._runtime==null)throw Error(`Document layout Worker runtime is unavailable.`);return this._runtime}_withTimeout(e,t){let n=null,r=new Promise((e,r)=>{n=setTimeout(()=>{r(Error(`Document layout Worker timed out while attempting to ${t}.`))},this._requestTimeoutMs)});return Promise.race([e,r]).finally(()=>{n!=null&&clearTimeout(n)})}async _verifyCapabilities(){let e=await this._getRuntime().getCapabilities();if(e.protocolVersion!==5)throw new qn(`Document layout Worker protocol version mismatch.`);if(!e.offscreenCanvas||!e.structuredClone)throw new qn(`Document layout Worker requires OffscreenCanvas and structured clone support.`);let t=n.FontCache.getMeasureText(e.fontProbe.content,e.fontProbe.font);if([[t.width,e.fontProbe.width],[t.actualBoundingBoxAscent,e.fontProbe.actualBoundingBoxAscent],[t.actualBoundingBoxDescent,e.fontProbe.actualBoundingBoxDescent]].some(([e,t])=>!Number.isFinite(e)||!Number.isFinite(t)||Math.abs(e-t)>1))throw new qn(`Document layout Worker font metrics differ from the main rendering context.`)}};let $=class extends t.Plugin{constructor(e=On,n,r,i){super(),this._config=e,this._injector=n,this._layoutExecutorService=r,this._configService=i;let{...a}=(0,t.merge)({},On,this._config);this._configService.setConfig(`docs-layout-worker.config`,a)}onStarting(){if(typeof this._config.workerFactory!=`function`)throw TypeError(`[UniverDocsLayoutWorkerPlugin]: workerFactory is required.`);let e=this._config.requestTimeoutMs??15e3;if(!Number.isFinite(e)||e<=0)throw RangeError(`[UniverDocsLayoutWorkerPlugin]: requestTimeoutMs must be a positive finite number.`);let t=new Yn(this._config.workerFactory,e,this._config.fontFaces);this._injector.add([Yn,{useValue:t}]),this.disposeWithMe(t),this.disposeWithMe(this._layoutExecutorService.register(t))}};u($,`pluginName`,`DOCS_LAYOUT_WORKER_PLUGIN`),u($,`packageName`,Ht),u($,`version`,Ut),$=f([(0,t.DependentOn)(Z),d(1,(0,t.Inject)(t.Injector)),d(2,(0,t.Inject)(O)),d(3,t.IConfigService)],$);let Xn={CUSTOM_RANGE:(0,t.createInterceptorKey)(`CUSTOM_RANGE`),CUSTOM_DECORATION:(0,t.createInterceptorKey)(`CUSTOM_DECORATION`)},Zn=class extends t.Disposable{constructor(e,n){super(),this._context=e,this._docSkeletonManagerService=n,u(this,`_interceptorsByName`,new Map);let r=this._docSkeletonManagerService.getViewModel(),i=r.getDataModel().getUnitId();if(i===t.DOCS_NORMAL_EDITOR_UNIT_ID_KEY||i===t.DOCS_FORMULA_BAR_EDITOR_UNIT_ID_KEY)return;this.disposeWithMe(this.interceptDocumentViewModel(r)),this.disposeWithMe(this.intercept(Xn.CUSTOM_RANGE,{priority:-1,handler:(e,t,n)=>n(e)}));let a=new t.DisposableCollection;r.segmentViewModels$.subscribe(e=>{a.dispose(),a=new t.DisposableCollection,e.forEach(e=>{a.add(this.interceptDocumentViewModel(e))})}),this.disposeWithMe(a)}intercept(e,n){let r=e;this._interceptorsByName.has(r)||this._interceptorsByName.set(r,[]);let i=this._interceptorsByName.get(r);return i.push(n),this._interceptorsByName.set(r,i.sort((e,t)=>(t.priority??0)-(e.priority??0))),this.disposeWithMe((0,t.toDisposable)(()=>(0,t.remove)(this._interceptorsByName.get(r),n)))}fetchThroughInterceptors(e){let n=e,r=this._interceptorsByName.get(n);return(0,t.composeInterceptors)(r||[])}interceptDocumentViewModel(e){let n=new t.DisposableCollection;return n.add(e.registerCustomRangeInterceptor({getCustomRange:t=>this.fetchThroughInterceptors(Xn.CUSTOM_RANGE)(e.getCustomRangeRaw(t),{index:t,unitId:e.getDataModel().getUnitId(),body:e.getDataModel().getBody(),customRanges:e.getDataModel().getCustomRanges()??[]}),getCustomDecoration:t=>this.fetchThroughInterceptors(Xn.CUSTOM_DECORATION)(e.getCustomDecorationRaw(t),{index:t,unitId:e.getDataModel().getUnitId(),customDecorations:e.getDataModel().getCustomDecorations()??[]})})),n}};Zn=f([d(1,(0,t.Inject)(k))],Zn);function Qn(e,n,r){let{unitId:i,segmentId:a}=n,o=e.get(t.IUniverInstanceService).getUnit(i);if(!o)return!1;let s={id:N.id,params:{unitId:n.unitId,actions:[],textRanges:void 0}},c=t.JSONX.getInstance(),l=t.BuildTextUtils.customRange.add({...n,body:r});if(!l)return!1;let u=(0,t.getRichTextEditPath)(o,a);return s.params.actions=c.editOp(l.serialize(),u),s}function $n(e,n){var r,i;let{rangeId:a,rangeType:o,wholeEntity:s,properties:c,unitId:l,selections:u}=n,d=e.get(p),f=e.get(t.IUniverInstanceService),m=u??d.getTextRanges({unitId:l,subUnitId:l}),h=m==null||(r=m[0])==null?void 0:r.segmentId;if(!(m!=null&&m.length))return!1;let g=f.getUnit(l,t.UniverInstanceType.UNIVER_DOC);if(!g)return!1;let _=(i=g.getSelfOrHeaderFooterModel(h))==null?void 0:i.getBody();if(!_)return!1;let v=t.BuildTextUtils.customRange.add({ranges:m,rangeId:a,rangeType:o,segmentId:h,wholeEntity:s,properties:c,body:_});if(!v)return!1;let y=t.JSONX.getInstance(),b={id:N.id,params:{unitId:l,actions:[],textRanges:v.selections,segmentId:h},textX:v},x=(0,t.getRichTextEditPath)(g,h);return b.params.actions=y.editOp(v.serialize(),x),b}function er(e,n){let{unitId:r,segmentId:i,insert:a}=n,o=e.get(t.IUniverInstanceService).getUnit(r);if(!o)return!1;let s={id:N.id,params:{unitId:n.unitId,actions:[],textRanges:void 0,segmentId:i}},c=t.JSONX.getInstance(),l=t.BuildTextUtils.customRange.delete({documentDataModel:o,rangeId:n.rangeId,insert:a,segmentId:i});if(!l)return!1;let u=(0,t.getRichTextEditPath)(o,i);return s.params.actions=c.editOp(l.serialize(),u),s.params.textRanges=l.selections,s}function tr(e,n,r,i=[]){let a=[],o=new Set(i);for(let n=0,r=e.length;n<r;n++)e[n]===t.DataStreamTreeTokenType.PARAGRAPH&&a.push({startIndex:n,paragraphId:(0,t.createParagraphId)(o)});for(let e of a)n!=null&&n.bullet&&(e.bullet=t.Tools.deepClone(n.bullet)),n!=null&&n.paragraphStyle&&(e.paragraphStyle=t.Tools.deepClone(n.paragraphStyle),delete e.paragraphStyle.borderBottom,n.paragraphStyle.headingId&&(e.paragraphStyle.headingId=(0,t.generateRandomId)(6))),r&&(e.paragraphStyle??={},e.paragraphStyle.borderBottom=t.Tools.deepClone(r),e.paragraphStyle.spaceBelow={v:10});return a}function nr(e,n){var r,i;let{unitId:a,body:o,doc:s}=n,c=s;if(c||=e.get(t.IUniverInstanceService).getUnit(a),!c)return!1;let l=(r=n.selection)==null?void 0:r.segmentId,u=(i=c.getSelfOrHeaderFooterModel(l))==null?void 0:i.getBody();if(!u)return!1;let d=e.get(p),f=n.selection??d.getActiveTextRange();if(!f||!u)return!1;let m=n.textRanges??[{startOffset:f.startOffset+o.dataStream.length,endOffset:f.startOffset+o.dataStream.length,collapsed:!0,segmentId:l}],h=t.BuildTextUtils.selection.replace({selection:f,body:o,doc:c});if(!h)return!1;let g={id:N.id,params:{unitId:a,actions:[],textRanges:m,debounce:!0,segmentId:l},textX:h},_=t.JSONX.getInstance();return g.params.actions=_.editOp(h.serialize()),g}function rr(e,n,r){return{size:{width:e,height:n},positionH:{relativeFrom:t.ObjectRelativeFromH.PAGE,posOffset:(r==null?void 0:r.left)??0},positionV:{relativeFrom:t.ObjectRelativeFromV.PARAGRAPH,posOffset:(r==null?void 0:r.top)??0},angle:0}}function ir(e){return{left:e.positionH.posOffset,top:e.positionV.posOffset,width:e.size.width,height:e.size.height,flipX:e.flipX,flipY:e.flipY}}function ar(e,n=0,r=0){return{size:{width:e.width,height:e.height},positionH:{relativeFrom:t.ObjectRelativeFromH.MARGIN,posOffset:(e.left||0)-n},positionV:{relativeFrom:t.ObjectRelativeFromV.PAGE,posOffset:(e.top||0)-r},angle:e.angle||0,flipX:e.flipX,flipY:e.flipY}}function or(e,t){try{return e.get(wn).consumeInsertRange(t)}catch{return null}}function sr(e,n){var r;let i=n??((r=e.get(t.IUniverInstanceService).getCurrentUnitOfType(t.UniverInstanceType.UNIVER_DOC))==null?void 0:r.getUnitId());if(!i)return null;let a=or(e,i);return a?{...a,collapsed:(a==null?void 0:a.startOffset)===(a==null?void 0:a.endOffset)}:null}function cr(e){return!!(e!=null&&e.segmentId)}function lr(e){let t=e.endOffset??e.startOffset;return{...e,endOffset:t,collapsed:e.collapsed??e.startOffset===t,segmentId:e.segmentId??``}}e.CreateHeaderFooterCommand=Ie,e.DOCUMENT_UNIT_PERMISSION_ACTIONS=F,e.DOC_INTERCEPTOR_POINT=Xn,e.DOC_SELECTION_OPTION_PRESERVE_CARET=`preserveCaret`,e.DeleteDocumentSectionBreakCommand=W,e.DeleteTextCommand=je,e.DocBlockMoveValidatorService=Cn,e.DocContentInsertService=wn,e.DocHistoryAction=be,Object.defineProperty(e,"DocInterceptorService",{enumerable:!0,get:function(){return Zn}}),Object.defineProperty(e,"DocLayoutExecutorService",{enumerable:!0,get:function(){return O}}),e.DocLayoutExecutorState=C,e.DocLayoutExecutorType=x,e.DocLayoutSessionStatus=S,Object.defineProperty(e,"DocSelectionManagerService",{enumerable:!0,get:function(){return p}}),Object.defineProperty(e,"DocSkeletonManagerService",{enumerable:!0,get:function(){return k}}),Object.defineProperty(e,"DocStateChangeManagerService",{enumerable:!0,get:function(){return X}}),e.DocStateEmitService=re,e.DocTextResolverService=En,e.DocsLayoutWorkerCapabilityError=qn,e.DocsLayoutWorkerClientService=Yn,e.EMBED_DOCS_CUSTOM_BLOCK_DEFAULT_COMPONENT_KEY=`UniverEmbedDocsCustomBlock`,e.HeaderFooterType=Ne,e.IDocStateChangeInterceptorService=Tn,e.InsertDocumentColumnBreakCommand=U,e.InsertDocumentSectionBreakCommand=H,e.InsertTextCommand=Oe,e.RichTextEditingMutation=N,e.SetDocumentDefaultParagraphStyleCommand=Le,e.SetDocumentNameCommand=Re,e.SetDocumentPermissionCommand=rt,e.SetDocumentPermissionRuleMutation=St,e.SetDocumentPermissionRulesMutation=Ct,e.SetDocumentPermissionsCommand=it,e.SetSectionHeaderFooterLinkCommand=at,e.SetTextSelectionsOperation=o,Object.defineProperty(e,"UniverDocsLayoutWorkerPlugin",{enumerable:!0,get:function(){return $}}),Object.defineProperty(e,"UniverDocsPlugin",{enumerable:!0,get:function(){return Z}}),e.UpdateDocumentParagraphStyleCommand=dt,e.UpdateDocumentSectionCommand=V,e.UpdateTextCommand=Me,e.addCustomRangeBySelectionFactory=$n,e.addCustomRangeFactory=Qn,e.buildDocTransform=rr,e.canEditDocumentTargets=nt,e.consumeContentInsertRange=or,e.createDocsCustomBlockDrawing=jt,e.createDocsCustomBlockInsertMutation=Dt,e.createDocsCustomBlockRemoveMutation=Ot,e.createDocumentPermissionPoint=L,e.createEmbedDocsCustomBlockData=Pt,e.createInsertCustomBlockActions=kt,e.createRemoveCustomBlockActions=At,e.createSectionColumnProperties=gt,e.deleteCustomRangeFactory=er,e.docDrawingPositionToTransform=ir,e.generateParagraphs=tr,e.getContentInsertRange=sr,e.getDocumentDrawingSegmentId=Yt,e.getDocumentEditTargetObjectIds=J,e.getDocumentEntityParentPermissionObjectIds=en,e.getDocumentEntityPermissionObjectId=Qe,e.getDocumentParagraphParentPermissionObjectIds=tn,e.getDocumentParagraphPermissionObjectId=Ze,e.getDocumentPermissionValue=$e,e.getDocumentSectionPermissionObjectId=I,e.getEffectiveSectionPageSetup=ht,e.getSectionContentWidth=B,e.getTopLevelSectionBreaks=R,e.isEmbedDocsCustomBlockData=Ft,e.isHeaderFooterSelection=cr,e.isSheetLikeDocsCustomBlockChildType=Nt,e.normalizeTextRange=lr,e.replaceSelectionFactory=nr,e.resolveDocsCustomBlockSize=Mt,e.setDocumentPermissionValue=et,e.shouldUseInlineTextSelectionForDocsCustomBlockDrawing=It,e.startDocsLayoutWorker=Kn,e.transformDocumentTextRanges=Se,e.transformToDocDrawingPosition=ar});
2
+ `,textRuns:[{st:0,ed:0,ts:{fs:9}}],customBlocks:[],paragraphs:[{startIndex:0,paragraphId:(0,t.createParagraphId)(new Set),paragraphStyle:{spaceAbove:{v:0},lineSpacing:1.5,spaceBelow:{v:0}}}],sectionBreaks:[{sectionId:(0,t.createSectionId)(new Set),startIndex:1}]}}function Fe(e,n,r,i,a=`single`,o=[`documentStyle`]){let s=t.JSONX.getInstance(),c=e??(0,t.generateRandomId)(6),l=n===2||n===0||n===4,u=s.insertOp([l?`headers`:`footers`,c],{[l?`headerId`:`footerId`]:c,body:Pe()});i.push(u);let d=`defaultHeaderId`,f=`defaultFooterId`;switch(n){case 2:d=`defaultHeaderId`,f=`defaultFooterId`;break;case 3:d=`defaultFooterId`,f=`defaultHeaderId`;break;case 0:d=`firstPageHeaderId`,f=`firstPageFooterId`;break;case 1:d=`firstPageFooterId`,f=`firstPageHeaderId`;break;case 4:d=`evenPageHeaderId`,f=`evenPageFooterId`;break;case 5:d=`evenPageFooterId`,f=`evenPageHeaderId`;break;default:throw Error(`Unknown header footer type: ${n}`)}let p=[[d,c]];if(a===`pair`&&f!=null){let e=(0,t.generateRandomId)(6),n=s.insertOp([l?`footers`:`headers`,e],{[l?`footerId`:`headerId`]:e,body:Pe()});i.push(n),p.push([f,e])}for(let[e,t]of p)if(r[e]!=null){let n=s.replaceOp([...o,e],r[e],t);i.push(n)}else{let n=s.insertOp([...o,e],t);i.push(n)}return i}let Ie={id:`doc.command.create-header-footer`,type:t.CommandType.COMMAND,handler:(e,n)=>{var r,i;let a=e.get(t.ICommandService),o=e.get(t.IUniverInstanceService),{unitId:s,segmentId:c,createType:l,headerFooterProps:u,createMode:d=`single`,sectionId:f}=n,p=o.getUnit(s,t.UniverInstanceType.UNIVER_DOC);if(p==null)return!1;let{documentStyle:m,body:h}=p.getSnapshot();if(m.documentFlavor===t.DocumentFlavor.MODERN)return!1;let g=[],_=t.JSONX.getInstance(),v=f==null?-1:(h==null||(r=h.sectionBreaks)==null?void 0:r.findIndex(e=>e.sectionId===f))??-1,y=v<0||h==null||(i=h.sectionBreaks)==null?void 0:i[v];if(f!=null&&!y)return!1;let b=y??m,x=f==null?[`documentStyle`]:[`body`,`sectionBreaks`,v];if(l!=null&&Fe(c,l,b,g,d,x),u!=null&&Object.keys(u).forEach(e=>{let t=u[e],n=b[e];if(t===n)return;let r=n===void 0?_.insertOp([...x,e],t):_.replaceOp([...x,e],n,t);g.push(r)}),g.length===0)return!1;let S={id:N.id,params:{unitId:s,actions:g.reduce((e,n)=>t.JSONX.compose(e,n),null),textRanges:[{startOffset:0,endOffset:0,collapsed:!0}],debounce:!0}};return((u==null?void 0:u.marginFooter)!=null||(u==null?void 0:u.marginHeader)!=null)&&(S.params.noNeedSetTextRange=!0),!!a.syncExecuteCommand(S.id,S.params)}},Le={id:`doc.command.set-default-paragraph-style`,type:t.CommandType.COMMAND,handler:(e,n)=>{if(n==null)return!1;let r=e.get(t.ICommandService),i=e.get(t.IUniverInstanceService).getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC);if(i==null)return!1;let a=i.getSnapshot().documentStyle.defaultParagraphStyle,o=t.JSONX.getInstance(),s=[`documentStyle`,`defaultParagraphStyle`],c=[];if(n.defaultParagraphStyle==null)a!=null&&c.push(o.removeOp(s,a));else if(a==null){let e=Object.fromEntries(Object.entries(n.defaultParagraphStyle).filter(([,e])=>e!=null).map(([e,n])=>[e,t.Tools.deepClone(n)]));Object.keys(e).length>0&&c.push(o.insertOp(s,e))}else Object.entries(n.defaultParagraphStyle).forEach(([e,n])=>{let r=a[e],i=[...s,e];n==null?r!=null&&c.push(o.removeOp(i,r)):r==null?c.push(o.insertOp(i,t.Tools.deepClone(n))):c.push(o.replaceOp(i,r,t.Tools.deepClone(n)))});let l=c.reduce((e,n)=>t.JSONX.compose(e,n),null);if(c.length===0||t.JSONX.isNoop(l))return!1;let u={id:N.id,params:{unitId:n.unitId,actions:l,textRanges:null,noNeedSetTextRange:!0,debounce:!0,isEditing:!1}};return!!r.syncExecuteCommand(u.id,u.params)}},P={id:`doc.mutation.rename-doc`,type:t.CommandType.MUTATION,handler:(e,n)=>{let r=e.get(t.IUniverInstanceService).getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC);return r?(r.setName(n.name),!0):!1}},Re={id:`doc.command.set-name`,type:t.CommandType.COMMAND,handler:(e,n)=>{if(!n)return!1;let r=e.get(t.IUniverInstanceService).getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC);if(!r)return!1;let i=e.get(t.ICommandService),a={unitId:n.unitId,name:n.name},o={unitId:n.unitId,name:r.getTitle()||``};return i.syncExecuteCommand(P.id,a)?(e.get(t.IUndoRedoService).pushUndoRedo({unitID:n.unitId,redoMutations:[{id:P.id,params:a}],undoMutations:[{id:P.id,params:o}]}),!0):!1}};var ze=class{constructor(e){this.unitId=e,u(this,`type`,i.UnitObject.Document),u(this,`subType`,i.UnitAction.Comment),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}`}},Be=class{constructor(e){this.unitId=e,u(this,`type`,i.UnitObject.Document),u(this,`subType`,i.UnitAction.Copy),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}`}},Ve=class{constructor(e){this.unitId=e,u(this,`type`,i.UnitObject.Document),u(this,`subType`,i.UnitAction.Edit),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}`}},He=class{constructor(e){this.unitId=e,u(this,`type`,i.UnitObject.Document),u(this,`subType`,i.UnitAction.Export),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}`}},Ue=class{constructor(e){this.unitId=e,u(this,`type`,i.UnitObject.Document),u(this,`subType`,i.UnitAction.Print),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}`}},We=class{constructor(e,n){this.unitId=e,this.objectId=n,u(this,`type`,i.UnitObject.DocumentEntity),u(this,`subType`,i.UnitAction.Edit),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}_${n}`}},Ge=class{constructor(e,n){this.unitId=e,this.objectId=n,u(this,`type`,i.UnitObject.DocumentParagraph),u(this,`subType`,i.UnitAction.Edit),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}_${n}`}},Ke=class{constructor(e,n){this.unitId=e,this.objectId=n,u(this,`type`,i.UnitObject.DocumentSection),u(this,`subType`,i.UnitAction.Edit),u(this,`status`,t.PermissionStatus.INIT),u(this,`id`,void 0),u(this,`value`,!0),this.id=`${this.type}.${this.subType}_${e}_${n}`}};let F=[i.UnitAction.Edit,i.UnitAction.Copy,i.UnitAction.Print,i.UnitAction.Export,i.UnitAction.Comment],qe=new Set([i.UnitObject.Document,i.UnitObject.DocumentSection,i.UnitObject.DocumentParagraph,i.UnitObject.DocumentEntity]),Je=`section/`,Ye=`paragraph/`,Xe=`entity/`;function I(e,t){return`${Je}${encodeURIComponent(e)}/${encodeURIComponent(t)}`}function Ze(e,t){return`${Ye}${encodeURIComponent(e)}/${encodeURIComponent(t)}`}function Qe(e,t,n){return`${Xe}${encodeURIComponent(e)}/${encodeURIComponent(t)}/${encodeURIComponent(n)}`}function L(e,t,n){if(t===e)switch(n){case i.UnitAction.Edit:return new Ve(e);case i.UnitAction.Copy:return new Be(e);case i.UnitAction.Print:return new Ue(e);case i.UnitAction.Export:return new He(e);case i.UnitAction.Comment:return new ze(e);default:throw Error(`Unsupported Document permission action: ${n}`)}if(n!==i.UnitAction.Edit)throw Error(`Document object permissions only support Edit: ${t}`);if(t.startsWith(Je))return new Ke(e,t);if(t.startsWith(Ye))return new Ge(e,t);if(t.startsWith(Xe))return new We(e,t);throw Error(`Unsupported Document permission object: ${t}`)}function $e(e,t,n,r){var i;return((i=e.getPermissionPoint(L(t,n,r).id))==null?void 0:i.value)??!0}function et(e,t,n,r,i){let a=L(t,n,r);e.getPermissionPoint(a.id)||e.addPermissionPoint(a),e.updatePermissionPoint(a.id,i)}function tt(e,t){e.getAllPermissionPoint().forEach((n,r)=>{n.subscribe(n=>{qe.has(n.type)&&`unitId`in n&&n.unitId===t&&e.deletePermissionPoint(r)}).unsubscribe()})}function nt(e,t,n){if(!$e(e,t,t,i.UnitAction.Edit))return!1;for(let r of n)if(!$e(e,t,r,i.UnitAction.Edit))return!1;return!0}let rt={type:t.CommandType.COMMAND,id:`doc.command.set-permission`,async handler(e,n){if(!n||!F.includes(n.action)||n.objectId!==n.unitId&&n.action!==i.UnitAction.Edit||n.policy&&(![`all`,`owner`,`members`].includes(n.policy.edit)||n.policy.strategies.some(e=>!F.includes(e.action)||n.objectId!==n.unitId&&e.action!==i.UnitAction.Edit)))return!1;let r=L(n.unitId,n.objectId,n.action),a={unitId:n.unitId,objectId:n.objectId,objectType:r.type},o=e.get(t.ObjectPermissionService);return n.remove?await o.remove(a):n.policy?await o.save(a,n.policy):await o.setPoint(a,r,n.value),!0}},it={type:t.CommandType.COMMAND,id:`doc.command.set-permissions`,async handler(e,n){if(!(n!=null&&n.unitId)||!Array.isArray(n.changes)||!n.changes.length||n.changes.some(e=>!(e!=null&&e.objectId)||e.objectId===n.unitId||e.policy!==null&&(!e.policy||![`all`,`owner`,`members`].includes(e.policy.edit)||!Array.isArray(e.policy.collaborators)||!Array.isArray(e.policy.strategies)||e.policy.strategies.some(e=>e.action!==i.UnitAction.Edit))))throw Error(`Invalid object permission batch.`);return e.get(t.ObjectPermissionService).saveMany(n.changes.map(e=>{let t=L(n.unitId,e.objectId,i.UnitAction.Edit);return{unitId:n.unitId,objectId:e.objectId,objectType:t.type,policy:e.policy}}))}};function R(e){let n=new Map((e.sectionBreaks??[]).map(e=>[e.startIndex,e])),r=[],i=0,a=0;for(let o=0;o<e.dataStream.length;o++){let s=e.dataStream[o];if(s===t.DataStreamTreeTokenType.TABLE_CELL_START)i++;else if(s===t.DataStreamTreeTokenType.TABLE_CELL_END)i=Math.max(0,i-1);else if(s===t.DataStreamTreeTokenType.COLUMN_START)a++;else if(s===t.DataStreamTreeTokenType.COLUMN_END)a=Math.max(0,a-1);else if(s===t.DataStreamTreeTokenType.SECTION_BREAK&&i===0&&a===0){let e=n.get(o);e&&r.push(e)}}return r}let at={id:`doc.command.set-section-header-footer-link`,type:t.CommandType.COMMAND,handler:(e,n)=>{var r;if(!n)return!1;let i=e.get(t.IUniverInstanceService),a=e.get(t.ICommandService),o=i.getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC),s=o==null?void 0:o.getSnapshot();if(!o||!(s!=null&&s.body)||s.documentStyle.documentFlavor!==t.DocumentFlavor.TRADITIONAL)return!1;let c=R(s.body),l=c.findIndex(e=>e.sectionId===n.sectionId);if(l<=0)return!1;let u=((r=s.body.sectionBreaks)==null?void 0:r.findIndex(e=>e.sectionId===n.sectionId))??-1;if(u<0)return!1;let d={snapshot:s,sections:c,sectionIndex:l,storageIndex:u,key:(0,t.getSectionHeaderFooterReferenceKey)(n.kind,n.variant)},f=n.linkedToPrevious?ot(d,n.kind):st(d,n.kind,n.segmentId);if(!f)return!1;let p={id:N.id,params:{unitId:n.unitId,actions:f.reduce((e,n)=>t.JSONX.compose(e,n),null),textRanges:null,noNeedSetTextRange:!0,debounce:!0,isEditing:!1,trigger:at.id}};return!!a.syncExecuteCommand(p.id,p.params)}};function ot(e,n){let{snapshot:r,sections:i,sectionIndex:a,storageIndex:o,key:s}=e,c=i[a],l=c[s];if(typeof l!=`string`||!l)return null;let u=t.JSONX.getInstance(),d=[u.removeOp([`body`,`sectionBreaks`,o,s],l)],f=n===`header`?[`defaultHeaderId`,`firstPageHeaderId`,`evenPageHeaderId`]:[`defaultFooterId`,`firstPageFooterId`,`evenPageFooterId`],p=f.some(e=>r.documentStyle[e]===l),m=i.some(e=>f.some(t=>(e.sectionId!==c.sectionId||t!==s)&&e[t]===l)),h=n===`header`?r.headers:r.footers;return!p&&!m&&h!=null&&h[l]&&d.push(u.removeOp([n===`header`?`headers`:`footers`,l],h[l])),d}function st(e,n,r){let{snapshot:i,sections:a,sectionIndex:o,storageIndex:s,key:c}=e,l=a[o][c];if(typeof l==`string`&&l)return null;let u=(0,t.resolveSectionHeaderFooterReference)(i.documentStyle,a,o-1,c).segmentId,d=r??(0,t.generateRandomId)(6),f=n===`header`?i.headers:i.footers;if(f!=null&&f[d])return null;let p=u?f==null?void 0:f[u]:void 0,m=n===`header`?`headerId`:`footerId`,h=p?{...t.Tools.deepClone(p),[m]:d}:{[m]:d,body:Pe()},g=t.JSONX.getInstance();return[g.insertOp([n===`header`?`headers`:`footers`,d],h),g.insertOp([`body`,`sectionBreaks`,s,c],d)]}function ct(e){return!!(e!=null&&e.unitId&&e.paragraphId&&Number.isInteger(e.startOffset)&&Number.isInteger(e.endOffset)&&e.startOffset>=0&&e.endOffset>=e.startOffset&&e.style&&Object.keys(e.style).length>0)}function lt(e,n){let r=(e.paragraphs??[]).filter(e=>e.paragraphId===n.paragraphId);if(r.length!==1)return null;let i=r[0];return(0,t.getParagraphContentStartOffset)(e,i)===n.startOffset&&i.startIndex===n.endOffset&&e.dataStream[n.endOffset]===`\r`?i:null}function ut(e,n,r){let i=new t.TextX,a=!!(r.style.textStyle&&r.startOffset<r.endOffset&&e.textRuns==null);r.startOffset>0&&i.push({t:t.TextXActionType.RETAIN,len:r.startOffset}),r.style.textStyle&&r.startOffset<r.endOffset&&!a?i.push({t:t.TextXActionType.RETAIN,len:r.endOffset-r.startOffset,coverType:t.UpdateDocsAttributeType.COVER,body:{dataStream:``,textRuns:[{st:0,ed:r.endOffset-r.startOffset,ts:t.Tools.deepClone(r.style.textStyle)}]}}):r.startOffset<r.endOffset&&i.push({t:t.TextXActionType.RETAIN,len:r.endOffset-r.startOffset});let o={dataStream:``,paragraphs:[{...t.Tools.deepClone(n),startIndex:0,paragraphStyle:{...t.Tools.deepClone(n.paragraphStyle??{}),...t.Tools.deepClone(r.style)}}]};return Object.defineProperty(o,t.RESTORE_INSERTED_PARAGRAPH_IDS,{value:!0,enumerable:!0}),i.push({t:t.TextXActionType.RETAIN,len:1,coverType:t.UpdateDocsAttributeType.REPLACE,body:o}),{textX:i,initializesTextRuns:a}}let dt={id:`doc.command.update-paragraph-style`,type:t.CommandType.COMMAND,handler:(e,n)=>{var r;if(!ct(n))return!1;let i=e.get(t.IUniverInstanceService),a=e.get(t.ICommandService),o=i.getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC),s=n.segmentId??``,c=o==null||(r=o.getSelfOrHeaderFooterModel(s))==null?void 0:r.getBody();if(!o||!c)return!1;let l=lt(c,n);if(!l)return!1;let{textX:u,initializesTextRuns:d}=ut(c,l,n),f=t.JSONX.getInstance(),p=(0,t.getRichTextEditPath)(o,s),m=f.editOp(u.serialize(),p);if(d){let e=f.replaceOp([...p,`textRuns`],void 0,[{st:n.startOffset,ed:n.endOffset,ts:t.Tools.deepClone(n.style.textStyle)}]);m=t.JSONX.compose(e,m)}return!!a.syncExecuteCommand(N.id,{unitId:n.unitId,segmentId:s,actions:m,textRanges:null,noNeedSetTextRange:!0,isEditing:!1,trigger:dt.id})}};function z(e,t,n){return e??t??n}function ft(e,n){var r,i,a,o;let s=t.PAGE_SIZE[t.PaperType.A4];return{width:z(n==null||(r=n.pageSize)==null?void 0:r.width,e==null||(i=e.pageSize)==null?void 0:i.width,s.width),height:z(n==null||(a=n.pageSize)==null?void 0:a.height,e==null||(o=e.pageSize)==null?void 0:o.height,s.height)}}function pt(e,n){return{top:z(n==null?void 0:n.marginTop,e==null?void 0:e.marginTop,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN),bottom:z(n==null?void 0:n.marginBottom,e==null?void 0:e.marginBottom,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN),left:z(n==null?void 0:n.marginLeft,e==null?void 0:e.marginLeft,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN),right:z(n==null?void 0:n.marginRight,e==null?void 0:e.marginRight,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN)}}function mt(e,t){if(![e.width,e.height,t.width,t.height].every(e=>Number.isFinite(e)&&e>0))throw RangeError(`Effective section page setup must leave a positive content area and use finite positive page dimensions.`)}function ht(e,n){let r=ft(e,n),i=pt(e,n),a={width:B(e,n),height:r.height-i.top-i.bottom};mt(r,a);let o=(n==null?void 0:n.pageNumberStart)??(e==null?void 0:e.pageNumberStart);return{pageSize:r,pageOrient:z(n==null?void 0:n.pageOrient,e==null?void 0:e.pageOrient,t.PageOrientType.PORTRAIT),margins:i,contentSize:a,...o==null?{}:{pageNumberStart:o}}}function B(e,n){var r,i;let a=z(n==null||(r=n.pageSize)==null?void 0:r.width,e==null||(i=e.pageSize)==null?void 0:i.width,t.PAGE_SIZE[t.PaperType.A4].width);return Math.max(0,a-z(n==null?void 0:n.marginLeft,e==null?void 0:e.marginLeft,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN)-z(n==null?void 0:n.marginRight,e==null?void 0:e.marginRight,t.TRADITIONAL_DOCUMENT_DEFAULT_MARGIN))}function gt(e,t,n,r,i){if(n<=1)return[];let a=Math.max(0,r),o=B(e,t),s=Math.max(0,o-a*(n-1));if(i){if(i.some(e=>!Number.isFinite(e)||e<0))throw RangeError(`Section column widths must be finite and non-negative.`);if(i.reduce((e,t)=>e+t,0)>s)throw RangeError(`Section columns exceed the available page content width.`)}return(i??Array.from({length:n},()=>s/n)).map((e,t)=>({width:Math.max(0,e),paddingEnd:t===n-1?0:a}))}let V={id:`doc.command.update-section`,type:t.CommandType.COMMAND,handler:(e,n)=>{if(!(n!=null&&n.updates.length)||n.updates.some(({sectionId:e,config:t})=>!e||Object.keys(t).length===0))return!1;let r=e.get(t.IUniverInstanceService),i=e.get(t.ICommandService),a=r.getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC);if(!a||a.getDocumentStyle().documentFlavor!==t.DocumentFlavor.TRADITIONAL)return!1;let o=a.getBody();if(!o)return!1;let s=new Map(n.updates.map(({sectionId:e,config:t})=>[e,t]));if(s.size!==n.updates.length)return!1;let c=new Set(s.keys()),l=R(o).filter(e=>c.has(e.sectionId)).sort((e,t)=>e.startIndex-t.startIndex);if(l.length!==c.size)return!1;let u=a.getDocumentStyle();if(l.some(e=>!yt({...e,...s.get(e.sectionId)},u)))return!1;let d=new t.MemoryCursor,f=new t.TextX;for(let e of l)f.push({t:t.TextXActionType.RETAIN,len:e.startIndex-d.cursor}),f.push({t:t.TextXActionType.RETAIN,len:1,coverType:t.UpdateDocsAttributeType.REPLACE,body:{dataStream:``,sectionBreaks:[{...t.Tools.deepClone(e),...t.Tools.deepClone(s.get(e.sectionId)),sectionId:e.sectionId,startIndex:0}]}}),d.moveCursorTo(e.startIndex+1);let p=t.JSONX.getInstance(),m={id:N.id,params:{unitId:n.unitId,actions:p.editOp(f.serialize(),(0,t.getRichTextEditPath)(a)),textRanges:null,noNeedSetTextRange:!0,debounce:!0,isEditing:!1,trigger:V.id}};return!!i.syncExecuteCommand(m.id,m.params)}},H={id:`doc.command.insert-section-break`,type:t.CommandType.COMMAND,handler:(e,n)=>{var r;if(!n)return!1;let i=_t(e,n.unitId);if(!i||!n.sectionId||!Number.isInteger(n.offset)||n.nextSectionType!=null&&!G(t.SectionType,n.nextSectionType))return!1;let{body:a,documentDataModel:o,commandService:s}=i,c={...t.Tools.deepClone(n.config??{}),sectionId:n.sectionId,startIndex:n.offset};if(!vt(a,n.offset)||(r=a.sectionBreaks)!=null&&r.some(e=>e.sectionId===n.sectionId)||!yt(c,o.getDocumentStyle()))return!1;let l=n.nextSectionType==null?void 0:R(a).find(e=>e.startIndex>=n.offset);if(n.nextSectionType!=null&&!l)return!1;let u=new t.TextX;return u.retain(n.offset),u.insert(1,{dataStream:t.DataStreamTreeTokenType.SECTION_BREAK,sectionBreaks:[{...c,startIndex:0}]}),l&&n.nextSectionType!=null&&(u.retain(l.startIndex-n.offset),u.push({t:t.TextXActionType.RETAIN,len:1,coverType:t.UpdateDocsAttributeType.REPLACE,body:{dataStream:``,sectionBreaks:[{...t.Tools.deepClone(l),sectionType:n.nextSectionType,startIndex:0}]}})),xt(s,o,u,H.id)}},U={id:`doc.command.insert-column-break`,type:t.CommandType.COMMAND,handler:(e,n)=>{if(!n)return!1;let r=_t(e,n.unitId);if(!r||!vt(r.body,n.offset))return!1;let i=new t.TextX;return i.retain(n.offset),i.insert(1,{dataStream:t.DataStreamTreeTokenType.COLUMN_BREAK,customRanges:[{startIndex:0,endIndex:0,rangeId:`docx-break-${(0,t.generateRandomId)()}`,rangeType:t.CustomRangeType.CUSTOM,wholeEntity:!0,properties:{breakType:t.DocxBreakType.COLUMN}}]}),xt(r.commandService,r.documentDataModel,i,U.id)}},W={id:`doc.command.delete-section-break`,type:t.CommandType.COMMAND,handler:(e,n)=>{if(!n)return!1;let r=_t(e,n.unitId);if(!r||!n.sectionId)return!1;let i=R(r.body);if(i.length<=1)return!1;let a=i.find(e=>e.sectionId===n.sectionId);if(!a||a===i[i.length-1])return!1;let o=new t.TextX;return o.retain(a.startIndex),o.delete(1),xt(r.commandService,r.documentDataModel,o,W.id)}};function _t(e,n){if(!n)return null;let r=e.get(t.IUniverInstanceService).getUnit(n,t.UniverInstanceType.UNIVER_DOC),i=r==null?void 0:r.getBody();return!r||!i||r.getDocumentStyle().documentFlavor!==t.DocumentFlavor.TRADITIONAL?null:{body:i,documentDataModel:r,commandService:e.get(t.ICommandService)}}function vt(e,n){var r,i,a;return Number.isInteger(n)&&n>=0&&n<=e.dataStream.length&&!((r=e.tables)!=null&&r.some(e=>(0,t.containsInteriorInsertionOffset)((0,t.getTableRangeInterval)(e),n)))&&!((i=e.columnGroups)!=null&&i.some(e=>(0,t.containsInteriorInsertionOffset)((0,t.getColumnGroupRangeInterval)(e),n)))&&!((a=e.blockRanges)!=null&&a.some(e=>(0,t.containsInteriorInsertionOffset)((0,t.getBlockRangeInterval)(e),n)))}function yt(e,n){if(e.sectionType!=null&&!G(t.SectionType,e.sectionType)||e.pageOrient!=null&&!G(t.PageOrientType,e.pageOrient)||e.columnSeparatorType!=null&&!G(t.ColumnSeparatorType,e.columnSeparatorType)||e.pageNumberStart!=null&&(!Number.isInteger(e.pageNumberStart)||e.pageNumberStart<1)||e.pageSize&&(!bt(e.pageSize.width)||!bt(e.pageSize.height))||[e.marginTop,e.marginBottom,e.marginLeft,e.marginRight].some(e=>e!=null&&(!Number.isFinite(e)||e<0)))return!1;let r=e.pageSize??n.pageSize,i=e.marginTop??n.marginTop??0,a=e.marginBottom??n.marginBottom??0,o=e.marginLeft??n.marginLeft??0,s=e.marginRight??n.marginRight??0;if((r==null?void 0:r.width)!=null&&o+s>=r.width||(r==null?void 0:r.height)!=null&&i+a>=r.height)return!1;let c=e.columnProperties??[];return!c.some(({width:e,paddingEnd:t})=>!Number.isFinite(e)||!Number.isFinite(t)||e<0||t<0)&&c.reduce((e,{width:t,paddingEnd:n})=>e+t+n,0)<=B(n,e)}function bt(e){return e!=null&&Number.isFinite(e)&&e>0}function G(e,t){return Object.values(e).includes(t)}function xt(e,n,r,i){let a=t.JSONX.getInstance().editOp(r.serialize(),(0,t.getRichTextEditPath)(n));return!!e.syncExecuteCommand(N.id,{unitId:n.getUnitId(),actions:a,textRanges:null,noNeedSetTextRange:!0,debounce:!0,isEditing:!1,trigger:i})}let K=class extends t.ObjectPermissionRuleModel{constructor(e){super(e,`DOC_OBJECT_PERMISSION_PLUGIN`,t.UniverInstanceType.UNIVER_DOC,[i.UnitObject.DocumentSection,i.UnitObject.DocumentParagraph,i.UnitObject.DocumentEntity])}};K=f([d(0,t.IResourceManagerService)],K);let St={id:`doc.mutation.set-permission-rule`,type:t.CommandType.MUTATION,handler:(e,n)=>!n||!e.get(t.IUniverInstanceService).getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC)?!1:e.get(K).setRule(n.unitId,n.objectType,n.objectId,n.rule)},Ct={id:`doc.mutation.set-permission-rules`,type:t.CommandType.MUTATION,handler:(e,n)=>!n||!e.get(t.IUniverInstanceService).getUnit(n.unitId,t.UniverInstanceType.UNIVER_DOC)?!1:e.get(K).setRules(n.unitId,n.rules)},wt={width:720,height:360},Tt={width:960,height:480},Et={width:720,height:405};function Dt(e){return Lt(e.unitId,e.segmentId,kt(e))}function Ot(e){return Lt(e.unitId,e.segmentId,At(e))}function kt(e){let n=new t.TextX;return e.startIndex>0&&n.push({t:t.TextXActionType.RETAIN,len:e.startIndex}),n.push({t:t.TextXActionType.INSERT,body:{dataStream:`\b`,customBlocks:[{startIndex:0,blockId:e.blockId}]},len:1}),Vt([Rt(n,e.segmentId),zt(e)])}function At(e){let n=new t.TextX;return e.startIndex>0&&n.push({t:t.TextXActionType.RETAIN,len:e.startIndex}),n.push({t:t.TextXActionType.DELETE,len:1}),Vt([Rt(n,e.segmentId),Bt(e)])}function jt(e){let n=Mt(e.childType),r=e.interactionMode===`inline`;return{unitId:e.unitId,subUnitId:e.unitId,drawingId:e.blockId,drawingType:t.DrawingTypeEnum.DRAWING_DOM,componentKey:e.componentKey??`UniverEmbedDocsCustomBlock`,data:Pt(e),title:e.blockId,description:`Univer embedded unit custom block`,layoutType:r?t.PositionedObjectLayoutType.INLINE:t.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM,allowTransform:!1,docTransform:{size:{width:n.width,height:n.height},positionH:{relativeFrom:r?t.ObjectRelativeFromH.PAGE:t.ObjectRelativeFromH.COLUMN,...r?{posOffset:0}:{align:t.AlignTypeH.LEFT}},positionV:{relativeFrom:r?t.ObjectRelativeFromV.PAGE:t.ObjectRelativeFromV.PARAGRAPH,posOffset:0},angle:0},transform:{left:0,top:0,width:n.width,height:n.height}}}function Mt(e){return e===t.UniverInstanceType.UNIVER_SHEET||e===t.UniverInstanceType.UNIVER_BASE?Tt:e===t.UniverInstanceType.UNIVER_SLIDE?Et:wt}function Nt(e){return e===t.UniverInstanceType.UNIVER_SHEET||e===t.UniverInstanceType.UNIVER_BASE}function Pt(e){return{version:1,embedId:e.embedId??e.blockId,hostUnitId:e.unitId,hostAnchorId:e.blockId,childUnitId:e.childUnitId,childType:e.childType,interactionMode:e.interactionMode??`block`}}function Ft(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.version===1&&typeof t.embedId==`string`&&typeof t.hostAnchorId==`string`}function It(e){let t=e&&typeof e==`object`?e.data:void 0;return!Ft(t)||t.interactionMode===`inline`}function Lt(e,t,n){return{id:N.id,params:{unitId:e,segmentId:t,actions:n,textRanges:[],isEditing:!1,noNeedSetTextRange:!0}}}function Rt(e,n){return t.JSONX.getInstance().editOp(e.serialize(),n?[`headers`,n,`body`]:[`body`])??[]}function zt(e){if(e.segmentId)return[];let n=t.JSONX.getInstance(),r=jt(e);return Vt([n.insertOp([`drawings`,e.blockId],r)??[],n.insertOp([`drawingsOrder`,e.drawingOrderIndex??0],e.blockId)??[]])}function Bt(e){if(e.segmentId)return[];let n=t.JSONX.getInstance(),r=jt(e);return Vt([n.removeOp([`drawings`,e.blockId],r)??[],n.removeOp([`drawingsOrder`,e.drawingOrderIndex??0],e.blockId)??[]])}function Vt(e){return e.reduce((e,n)=>!n||t.JSONX.isNoop(n)||n.length===0?e:!e||t.JSONX.isNoop(e)||e.length===0?n:t.JSONX.compose(e,n)??[],[])}var Ht=`@univerjs/docs`,Ut=`1.0.2`;let Wt={},Gt=class extends t.Disposable{constructor(e,t,n){super(),this._commandService=e,this._textSelectionManagerService=t,this._univerInstanceService=n,this._initSelectionChange()}_transformCustomRange(e,n){var r;let{startOffset:i,endOffset:a,collapsed:o}=n,s=(r=e.getCustomRanges())==null?void 0:r.filter(e=>!e.wholeEntity||i<=e.startIndex&&a>e.endIndex?!1:o?e.startIndex<i&&e.endIndex>=a:t.BuildTextUtils.range.isIntersects(i,a-1,e.startIndex,e.endIndex));if(s!=null&&s.length){let e=i,t=a;return s.forEach(n=>{e=Math.min(n.startIndex,e),t=Math.max(n.endIndex+1,t)}),{...n,startOffset:e,endOffset:t,collapsed:e===t}}return n}_initSelectionChange(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===o.id){let{unitId:t,ranges:n,isEditing:r}=e.params,i=this._univerInstanceService.getUnit(t);if(!i)return;let a=n.map(e=>this._transformCustomRange(i,e));a.some((e,t)=>n[t]!==e)&&this._textSelectionManagerService.replaceDocRanges(a,void 0,r)}}))}};Gt=f([d(0,t.ICommandService),d(1,(0,t.Inject)(p)),d(2,t.IUniverInstanceService)],Gt);let Kt=[`defaultHeaderId`,`defaultFooterId`,`firstPageHeaderId`,`firstPageFooterId`,`evenPageHeaderId`,`evenPageFooterId`],qt=new WeakMap;function q(e){var n,r;let i=((n=e.getMutationRevision)==null?void 0:n.call(e))??NaN,a=qt.get(e);if((a==null?void 0:a.mutationRevision)===i)return a;let o=e.getSnapshot(),s=o.body?R(o.body):[],c=new Map,l=(e,t)=>{for(let n of(e==null?void 0:e.customBlocks)??[])c.has(n.blockId)||c.set(n.blockId,t)};l(o.body,``),Object.entries(o.headers??{}).forEach(([e,t])=>l(t.body,e)),Object.entries(o.footers??{}).forEach(([e,t])=>l(t.body,e)),Object.entries(o.notes??{}).forEach(([e,t])=>l(t.body,e));let u=new Map;for(let e of((r=o.body)==null?void 0:r.customRanges)??[]){var d;(e.rangeType===t.CustomRangeType.FOOTNOTE||e.rangeType===t.CustomRangeType.ENDNOTE)&&typeof((d=e.properties)==null?void 0:d.noteId)==`string`&&u.set(e.properties.noteId,{startOffset:e.startIndex,endOffset:e.endIndex+1})}let f={drawingSegmentIds:c,footnoteReferenceRanges:u,mutationRevision:i,segments:new Map,topLevelSections:s};return qt.set(e,f),f}function Jt(e,n,r=q(e)){var i,a;let o=r.segments.get(n);if(o)return o;let s=((i=e.getSelfOrHeaderFooterModel(n))==null?void 0:i.getBody())??null,c=e.getSnapshot(),l=(a=c.notes)==null?void 0:a[n],u=(l?l.drawings:c.drawings)??{},d=s==null?[]:[...(s.tables??[]).map(e=>({type:`table`,id:e.tableId,startOffset:e.startIndex,endOffset:e.endIndex})),...(s.customBlocks??[]).map(e=>({type:u[e.blockId]?`drawing`:`custom-block`,id:e.blockId,startOffset:e.startIndex,endOffset:e.startIndex+1})),...(s.blockRanges??[]).map(e=>({type:`block-range`,id:e.blockId,startOffset:e.startIndex,endOffset:e.endIndex+1})),...(s.customRanges??[]).map(e=>({type:`custom-range`,id:e.rangeId,startOffset:e.startIndex,endOffset:e.endIndex+1})),...(s.columnGroups??[]).map(e=>({type:`column-group`,id:e.columnGroupId,startOffset:e.startIndex,endOffset:e.endIndex+1}))],f=new Map(d.map(e=>[`${e.type}:${e.id}`,{startOffset:e.startOffset,endOffset:e.endOffset}]));for(let e of(s==null?void 0:s.customBlocks)??[]){let t={startOffset:e.startIndex,endOffset:e.startIndex+1};f.set(`custom-block:${e.blockId}`,t),f.set(`drawing:${e.blockId}`,t)}let p={body:s,entities:d,entityRanges:f,paragraphContentStartOffsets:s==null?new Map:(0,t.getParagraphContentStartOffsets)(s),paragraphsById:new Map(((s==null?void 0:s.paragraphs)??[]).filter(e=>e.paragraphId!=null).map(e=>[e.paragraphId,e]))};return r.segments.set(n,p),p}function Yt(e,t){return q(e).drawingSegmentIds.get(t)??``}function J(e,t,n){let r=q(e),i=Jt(e,t,r),{body:a}=i;return a?[...Y(e,t,n,r),...an(a,t,n,i),...on(t,n,i)]:[]}function Xt(e,n,r){let i=new Set;if(r==null)return[];let a=t.JSON1.type.readCursor(r);return a.traverse(null,()=>{let r=a.getPath(),o=a.getComponent(),s=[`headers`,`footers`,`notes`].includes(String(r[0]))&&typeof r[1]==`string`?r[1]:n;if(r[0]===`notes`&&typeof r[1]==`string`&&Y(e,r[1],{startOffset:0,endOffset:0}).forEach(e=>i.add(e)),r[0]===`noteSettings`&&q(e).topLevelSections.forEach(e=>{i.add(I(``,e.sectionId))}),r[0]===`body`&&r[1]===`sectionBreaks`&&typeof r[2]==`number`&&(r[3]===`noteProperties`||r[3]===`suppressEndnotes`)){var c;let t=(c=e.getBody())==null||(c=c.sectionBreaks)==null||(c=c[r[2]])==null?void 0:c.sectionId;t&&i.add(I(``,t))}if(r[r.length-1]!==`body`||(o==null?void 0:o.et)!==t.TextX.id||!Array.isArray(o.e)||!o.e.every(Qt))return;let l=o.e,u=0,d=(t,n)=>{J(e,s,{startOffset:t,endOffset:n}).forEach(e=>i.add(e))};l.forEach(e=>{if(e.t===t.TextXActionType.INSERT){d(u,u);return}if(e.t===t.TextXActionType.DELETE){d(u,u+e.len),u+=e.len;return}(e.body!==void 0||e.oldBody!==void 0||e.coverType!==void 0)&&d(u,u+e.len),u+=e.len})}),Zt(r).forEach(t=>{var r,a;i.add(Qe(n,`drawing`,t));let o=(r=e.getSelfOrHeaderFooterModel(n))==null?void 0:r.getBody(),s=o==null||(a=o.customBlocks)==null?void 0:a.find(e=>e.blockId===t);s&&Y(e,n,{startOffset:s.startIndex,endOffset:s.startIndex+1}).forEach(e=>i.add(e))}),[...i]}function Zt(e){let t=new Set,n=e=>{if(Array.isArray(e)){e.forEach((r,i)=>{r===`drawings`&&typeof e[i+1]==`string`&&t.add(e[i+1]),n(r)});return}$t(e)&&Object.values(e).forEach(n)};return n(e),[...t]}function Qt(e){return!$t(e)||typeof e.len!=`number`?!1:e.t===t.TextXActionType.INSERT?$t(e.body):e.t===t.TextXActionType.RETAIN||e.t===t.TextXActionType.DELETE}function $t(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function en(e,t,n,r){let i=q(e),a=Jt(e,t,i).entityRanges.get(`${n}:${r}`)??null;return a?Y(e,t,a,i):[]}function tn(e,n,r){let i=q(e),a=Jt(e,n,i),{body:o}=a,s=a.paragraphsById.get(r);return!o||!s?[]:Y(e,n,{startOffset:a.paragraphContentStartOffsets.get(s.startIndex)??(0,t.getParagraphContentStartOffset)(o,s),endOffset:s.startIndex+1},i)}function nn(e){return Array.from(e,e=>I(``,e))}function rn(e,t){return sn(R(e),{startOffset:t,endOffset:t}).map(e=>e.sectionId)}function Y(e,t,n,r=q(e)){if(t){let n=r.footnoteReferenceRanges.get(t);return n?J(e,``,n):ln(e,t,r.topLevelSections).map(e=>I(``,e))}return sn(r.topLevelSections,n).map(e=>I(``,e.sectionId))}function an(e,n,r,i){let a=Math.min(r.startOffset,r.endOffset),o=Math.max(r.startOffset,r.endOffset);return(e.paragraphs??[]).filter(n=>cn(i.paragraphContentStartOffsets.get(n.startIndex)??(0,t.getParagraphContentStartOffset)(e,n),n.startIndex+1,a,o)).flatMap(e=>e.paragraphId?[Ze(n,e.paragraphId)]:[])}function on(e,t,n){let r=Math.min(t.startOffset,t.endOffset),i=Math.max(t.startOffset,t.endOffset);return n.entities.filter(e=>cn(e.startOffset,e.endOffset,r,i)).map(t=>Qe(e,t.type,t.id))}function sn(e,t){let n=Math.min(t.startOffset,t.endOffset),r=Math.max(t.startOffset,t.endOffset);return e.filter((t,i)=>cn(i===0?0:e[i-1].startIndex+1,t.startIndex+1,n,r))}function cn(e,t,n,r){return n===r?n>=e&&n<t:n<t&&r>e}function ln(e,n,r=q(e).topLevelSections){let i=e.getSnapshot(),a=new Set;return r.forEach((e,o)=>{Kt.some(e=>(0,t.resolveSectionHeaderFooterReference)(i.documentStyle,r,o,e).segmentId===n)&&a.add(e.sectionId)}),[...a]}let un=new Set([rt.id,it.id,`doc.command.open-header-footer-panel`,`doc.command.close-header-footer`,`doc.command.select-all`,`doc.command.set-zoom-ratio`]),dn=new Set([`docs-formula.mutation.set-last-values`]),fn=class extends t.Disposable{constructor(e,n,r,i){super(),this._injector=e,this._commandService=n,this._permissionService=r,this._univerInstanceService=i,this._univerInstanceService.getAllUnitsForType(t.UniverInstanceType.UNIVER_DOC).forEach(e=>this._registerUnitPermissionPoints(e.getUnitId())),this.disposeWithMe(this._univerInstanceService.getTypeOfUnitAdded$(t.UniverInstanceType.UNIVER_DOC).subscribe(({unit:e})=>this._registerUnitPermissionPoints(e.getUnitId()))),this.disposeWithMe(this._commandService.beforeCommandExecuted((e,t)=>{this._check(e,t)})),this.disposeWithMe(this._univerInstanceService.getTypeOfUnitDisposed$(t.UniverInstanceType.UNIVER_DOC).subscribe(e=>{this._injector.get(t.ObjectPermissionService).clearUnit(e.getUnitId()),tt(this._permissionService,e.getUnitId())}))}_registerUnitPermissionPoints(e){F.forEach(t=>{let n=L(e,e,t);this._permissionService.getPermissionPoint(n.id)||this._permissionService.addPermissionPoint(n)}),this._injector.get(t.ObjectPermissionService).initializeUnit({unitId:e,objectId:e,objectType:i.UnitObject.Document})}_check(e,n){var r;if(n!=null&&n.fromCollab||n!=null&&n.fromChangeset)return;let a=yn(e.id),o=vn(e,n)??(a?(r=this._univerInstanceService.getCurrentUnitOfType(t.UniverInstanceType.UNIVER_DOC))==null?void 0:r.getUnitId():void 0);if(!o||this._univerInstanceService.getUnitType(o)!==t.UniverInstanceType.UNIVER_DOC)return;if(a){if(!$e(this._permissionService,o,o,a))throw this._injector.get(t.ErrorService).emitPermissionDenied(o),new t.CustomCommandExecutionError(`Document ${i.UnitAction[a]} permission denied.`);return}let s=this._univerInstanceService.getUnit(o,t.UniverInstanceType.UNIVER_DOC);if(!s)return;let c=this._resolveTargetObjectIds(s,e);if(c!==null&&!nt(this._permissionService,o,c))throw this._injector.get(t.ErrorService).emitPermissionDenied(o,c),new t.CustomCommandExecutionError(`Document edit permission denied.`)}_resolveTargetObjectIds(e,t){if(t.id===N.id){let n=t.params;return Xt(e,n.segmentId??``,n.actions)}if(t.id===P.id)return[];if(hn(t))return null;let n=bn(e,t)??xn(e,t);if(n)return n;let r=gn(e,t);return r.length?r:pn(t.id)||mn(t)?[]:null}};fn=f([d(0,(0,t.Inject)(t.Injector)),d(1,t.ICommandService),d(2,t.IPermissionService),d(3,t.IUniverInstanceService)],fn);function pn(e){return un.has(e)?!1:e.startsWith(`doc.command.`)||e.startsWith(`docs.command.`)||e.startsWith(`doc.command-`)||e.startsWith(`doc.table.`)}function mn(e){let{id:t}=e;return hn(e)?!1:t.startsWith(`doc.mutation.`)||t.startsWith(`docs.mutation.`)||/^docs-[^.]+\.mutation\./.test(t)}function hn(e){let t=Sn(e.params)?e.params:void 0;return dn.has(e.id)||e.id===`doc.mutation.update-shape-data`&&!!(t!=null&&t.formulaLastValueGuard)}function gn(e,t){let n=t.params;if(!Sn(n))return[];let r=new Set,i=(t,n,i)=>{r.add(Qe(t,n,i)),en(e,t,n,i).forEach(e=>r.add(e))};return _n(n).forEach(({entityType:t,entityId:r})=>{let a=n.segmentId,o=typeof a==`string`?a:t===`drawing`||t===`custom-block`?Yt(e,r):``;i(o,t,r)}),[...r]}function _n(e){let t=new Map,n={blockId:[`custom-block`],drawingId:[`drawing`],shapeId:[`drawing`,`custom-block`],tableId:[`table`],rangeId:[`custom-range`],columnGroupId:[`column-group`]},r=(e,i=``)=>{if(typeof e==`string`){var a;(a=n[i])==null||a.forEach(n=>{t.set(`${n}\u001F${e}`,{entityType:n,entityId:e})});return}if(Array.isArray(e)){let t=i.endsWith(`Ids`)?`${i.slice(0,-3)}Id`:i;e.forEach(e=>r(e,t));return}Sn(e)&&Object.entries(e).forEach(([e,t])=>r(t,e))};return r(e),[...t.values()]}function vn(e,t){let n=Sn(e.params)?e.params:void 0;return typeof(n==null?void 0:n.unitId)==`string`?n.unitId:typeof(t==null?void 0:t.unitId)==`string`?t.unitId:void 0}function yn(e){if(e===`doc.command.copy-current-paragraph`||e===`docs-table.command.copy-selection`)return i.UnitAction.Copy;if(e===`docs.operation.print`)return i.UnitAction.Print;if(e===`docs-exchange-client.operation.export-doc`)return i.UnitAction.Export;if(e===`docs.operation.start-add-comment`||e===`docs.operation.add-drawing-comment`||e.startsWith(`docs.command.`)&&e.includes(`comment`)||e.startsWith(`thread-comment.command.`)||e.startsWith(`thread-comment.mutation.`))return i.UnitAction.Comment}function bn(e,n){let{id:r}=n;if(r===Oe.id||r===Me.id){let t=n.params;return J(e,t.segmentId??``,t.range)}if(r===je.id){let r=n.params,i=r.direction===t.DeleteDirection.LEFT;return J(e,r.segmentId??``,{startOffset:i?r.range.startOffset-(r.len??1):r.range.startOffset,endOffset:i?r.range.startOffset:r.range.startOffset+(r.len??1)})}if(r===dt.id){let t=n.params;return J(e,t.segmentId??``,t)}return null}function xn(e,t){let{id:n}=t;if(n===V.id){let e=t.params;return nn(e.updates.map(e=>e.sectionId))}if(n===H.id||n===U.id){let n=t.params,r=e.getBody();return r?nn(rn(r,n.offset)):[]}if(n===W.id){let n=t.params,r=e.getBody(),i=r?R(r):[],a=i.findIndex(e=>e.sectionId===n.sectionId);return nn([n.sectionId,...a>=0&&a+1<i.length?[i[a+1].sectionId]:[]])}if(n===at.id){let e=t.params;return[I(``,e.sectionId)]}if(n===Ie.id){let e=t.params;return e.sectionId?[I(``,e.sectionId)]:[]}return null}function Sn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Cn=class extends t.Disposable{constructor(...e){super(...e),u(this,`_validators`,[]),u(this,`_transformers`,[])}registerValidator(e){return this._validators.push(e),this.disposeWithMe((0,t.toDisposable)(()=>(0,t.remove)(this._validators,e)))}registerTransformer(e){return this._transformers.push(e),this.disposeWithMe((0,t.toDisposable)(()=>(0,t.remove)(this._transformers,e)))}canMoveBlock(e){return this._validators.every(t=>t(e))}transformMoveResult(e){return this._transformers.reduce((t,n)=>n({...e,result:t}),e.result)}},wn=class extends t.Disposable{constructor(...e){super(...e),u(this,`_range`,null)}setInsertRange(e){this._range=e}consumeInsertRange(e){if(!this._range||e&&this._range.unitId!==e)return null;let t=this._range;return this._range=null,t}clearInsertRange(){this._range=null}};let Tn=(0,t.createIdentifier)(`doc.state-change-interceptor-service`),X=class extends t.RxDisposable{constructor(e,t,n,i,a){super(),this._undoRedoService=e,this._commandService=t,this._univerInstanceService=n,this._docStateEmitService=i,this._docStateChangeInterceptorService=a,u(this,`_docStateChange$`,new r.BehaviorSubject(null)),u(this,`docStateChange$`,this._docStateChange$.asObservable()),u(this,`_historyStateCache`,new Map),u(this,`_changeStateCache`,new Map),u(this,`_historyTimer`,null),u(this,`_changeStateCacheTimer`,null),this._initialize(),this._listenDocStateChange()}dispose(){this._historyTimer!=null&&(clearTimeout(this._historyTimer),this._historyTimer=null),this._changeStateCacheTimer!=null&&(clearTimeout(this._changeStateCacheTimer),this._changeStateCacheTimer=null),this._historyStateCache.clear(),this._changeStateCache.clear(),this._docStateChange$.complete(),super.dispose()}getStateCache(e){return{history:this._historyStateCache.get(e)??[],collaboration:this._changeStateCache.get(e)??[]}}setStateCache(e,t){this._historyStateCache.set(e,t.history),this._changeStateCache.set(e,t.collaboration)}clearHistory(e){this._historyStateCache.delete(e)}flushPendingChanges(e){this._pushHistory(e),this._emitChangeState(e)}_setChangeState(e){this._cacheChangeState(e,`history`),this._cacheChangeState(e,`collaboration`)}_initialize(){this.disposeWithMe(this._commandService.beforeCommandExecuted(e=>{if(e.id===t.UndoCommandId||e.id===t.RedoCommandId){let e=this._univerInstanceService.getCurrentUnitOfType(t.UniverInstanceType.UNIVER_DOC);if(e==null)return;let n=e.getUnitId();this._pushHistory(n),this._emitChangeState(n)}}))}_listenDocStateChange(){this._docStateEmitService.docStateChangeParams$.pipe((0,r.takeUntil)(this.dispose$)).subscribe(e=>{var t;if(e==null)return;let n=((t=this._docStateChangeInterceptorService)==null?void 0:t.transformChangeStateInfo(e))??e;if(n==null||n.isSync)return;let{isCompositionEnd:r,isSync:i,syncer:a,...o}=n;this._setChangeState(o)})}_cacheChangeState(e,n=`history`){let{trigger:r,unitId:i,noHistory:a,debounce:o=!1}=e;if(a||n===`history`&&r==null||n===`history`&&(r===t.RedoCommandId||r===t.UndoCommandId))return;let s=n===`history`?this._historyStateCache:this._changeStateCache,c=n===`history`?this._pushHistory.bind(this):this._emitChangeState.bind(this),l=s.get(i);if(l!=null&&l.length&&l[l.length-1].segmentId!==e.segmentId&&c(i),s.has(i)){let t=s.get(i);t==null||t.push(e)}else s.set(i,[e]);o?n===`history`?(this._historyTimer&&clearTimeout(this._historyTimer),this._historyTimer=setTimeout(()=>{c(i)},300)):(this._changeStateCacheTimer&&clearTimeout(this._changeStateCacheTimer),this._changeStateCacheTimer=setTimeout(()=>{c(i)},300)):c(i)}_pushHistory(e){let n=this._undoRedoService,r=this._historyStateCache.get(e);if(n==null||!Array.isArray(r)||r.length===0)return;let i=r.length,a=r[0].commandId,o=r[0],s=r[i-1],c={unitId:e,trigger:t.RedoCommandId,...s.redoState.layoutState===void 0?{}:{layoutState:s.redoState.layoutState},actions:r.reduce((e,n)=>t.JSONX.compose(e,n.redoState.actions),null),textRanges:s.redoState.textRanges,segmentId:s.segmentId,options:s.redoState.options,isEditing:s.redoState.isEditing},l={unitId:e,trigger:t.UndoCommandId,...o.undoState.layoutState===void 0?{}:{layoutState:o.undoState.layoutState},actions:r.reverse().reduce((e,n)=>t.JSONX.compose(e,n.undoState.actions),null),textRanges:o.undoState.textRanges,segmentId:o.segmentId,options:o.undoState.options,isEditing:o.undoState.isEditing};n.pushUndoRedo({unitID:e,undoMutations:[{id:a,params:l}],redoMutations:[{id:a,params:c}]}),r.length=0}_emitChangeState(e){let n=this._changeStateCache.get(e);if(!Array.isArray(n)||n.length===0)return;let r=n.length,{commandId:i,trigger:a,segmentId:o,noHistory:s,debounce:c}=n[0],l=n[0],u=n[r-1],d={commandId:i,unitId:e,trigger:a,redoState:{unitId:e,actions:n.reduce((e,n)=>t.JSONX.compose(e,n.redoState.actions),null),textRanges:u.redoState.textRanges,segmentId:u.segmentId,options:u.redoState.options,isEditing:u.redoState.isEditing},undoState:{unitId:e,actions:n.reverse().reduce((e,n)=>t.JSONX.compose(e,n.undoState.actions),null),textRanges:l.undoState.textRanges,segmentId:l.segmentId,options:l.undoState.options,isEditing:l.undoState.isEditing},segmentId:o,noHistory:s,debounce:c};n.length=0,this._docStateChange$.next(d)}};X=f([d(0,(0,t.Optional)(t.IUndoRedoService)),d(1,t.ICommandService),d(2,t.IUniverInstanceService),d(3,(0,t.Inject)(re)),d(4,(0,t.Optional)(Tn))],X);var En=class extends t.Disposable{constructor(...e){super(...e),u(this,`_resolvers`,new Set),u(this,`_textChanged$`,new r.Subject),u(this,`textChanged$`,this._textChanged$.asObservable())}register(e){return this._resolvers.add(e),(0,t.toDisposable)(()=>this._resolvers.delete(e))}notifyTextChanged(e){this._textChanged$.next(e)}resolve(e,t){let n=this._collectReplacements(e,t),r=[],i=``,a=0;for(let e of n){let n=t.dataStream.slice(a,e.startOffset);i+=n;for(let t=a;t<e.startOffset;t+=1)r.push({startOffset:t,endOffset:t+1,replaceable:!0});i+=e.text;for(let t=0;t<e.text.length;t+=1)r.push({startOffset:e.startOffset,endOffset:e.endOffset,replaceable:e.replaceable??!1});a=e.endOffset}i+=t.dataStream.slice(a);for(let e=a;e<t.dataStream.length;e+=1)r.push({startOffset:e,endOffset:e+1,replaceable:!0});return{characters:r,text:i}}_collectReplacements(e,t){let n=[...this._resolvers].flatMap(n=>n.resolve(e,t)).filter(e=>Number.isInteger(e.startOffset)&&Number.isInteger(e.endOffset)&&e.startOffset>=0&&e.endOffset>e.startOffset&&e.endOffset<=t.dataStream.length).sort((e,t)=>e.startOffset-t.startOffset||t.endOffset-e.endOffset),r=[],i=-1;for(let e of n)e.startOffset<i||(r.push(e),i=e.endOffset);return r}dispose(){this._textChanged$.complete(),super.dispose()}};let Z=class extends t.Plugin{constructor(e=Wt,n,r){super(),this._config=e,this._injector=n,this._configService=r;let{...i}=(0,t.merge)({},Wt,this._config);this._configService.setConfig(`docs.config`,i)}onStarting(){this._injector.add([K]),this.disposeWithMe(this._injector.get(t.ICommandService).registerCommand(St)),this.disposeWithMe(this._injector.get(t.ICommandService).registerCommand(Ct)),this.disposeWithMe(this._injector.get(t.ObjectPermissionService).registerRuleModel(i.UnitObject.Document,this._injector.get(K),St.id,Ct.id)),this._initializeDependencies(),this._initializeCommands(),this._initializeWordResources()}_initializeWordResources(){for(let e of[`DOC_WORD_STYLES_PLUGIN`,`DOC_NOTE_PLUGIN`]){let n=new Map;this.disposeWithMe({dispose:()=>n.clear()}),this.disposeWithMe(this._injector.get(t.IResourceManagerService).registerPluginResource({pluginName:e,businesses:[t.UniverInstanceType.UNIVER_DOC],parseJson:e=>e,onLoad:(e,t)=>{n.set(e,t)},onUnLoad:e=>{n.delete(e)},toJson:e=>n.get(e)??``}))}}_initializeCommands(){[Oe,je,Me,Ie,rt,it,Le,Re,at,dt,V,H,U,W,N,P,o].forEach(e=>{this._injector.get(t.ICommandService).registerCommand(e)})}_initializeDependencies(){[[p],[re],[X],[Cn],[wn],[O],[En],[Gt],[fn]].forEach(e=>this._injector.add(e))}onReady(){this._injector.get(X),this._injector.get(Gt),this._injector.get(fn)}};u(Z,`pluginName`,`DOCS_PLUGIN`),u(Z,`packageName`,Ht),u(Z,`version`,Ut),Z=f([d(1,(0,t.Inject)(t.Injector)),d(2,t.IConfigService)],Z);let Dn=15e3,On={requestTimeoutMs:Dn};function kn(e,n){if(typeof e!=`object`||!e)return;if(Array.isArray(e)){for(let t=0;t<e.length;t++){let r=e[t];e[t-1]===`ff`&&typeof r==`object`&&r&&typeof r.i==`string`&&n.add(r.i),kn(r,n)}return}let r=e;if(typeof r.eastAsiaFontFamily==`string`&&r.eastAsiaFontFamily.trim()){let e=typeof r.ff==`string`&&r.ff.trim()?r.ff:t.DEFAULT_STYLES.ff;n.add(`${e}, ${r.eastAsiaFontFamily.trim()}`),n.add(`${r.eastAsiaFontFamily.trim()}, ${e}, ${r.eastAsiaFontFamily.trim()}`)}for(let[t,r]of Object.entries(e))t===`ff`&&typeof r==`string`?n.add(r):kn(r,n)}function An(e){n.FontCache.getNormalLineHeight((0,n.getFontStyleString)());for(let r of[``,...e])for(let e of[t.BooleanNumber.FALSE,t.BooleanNumber.TRUE])for(let i of[t.BooleanNumber.FALSE,t.BooleanNumber.TRUE])n.FontCache.getNormalLineHeight((0,n.getFontStyleString)({ff:r,bl:e,it:i}));return n.FontCache.getNormalLineHeightCache()}var jn=class extends t.Disposable{constructor(...e){super(...e),u(this,`_loading`,null),u(this,`_fontSet`,void 0),u(this,`_faces`,[])}load(e){return this._loading??=this._load(e),this._loading}dispose(){for(let t of this._faces){var e;(e=this._fontSet)==null||e.delete(t)}this._faces.length>0&&n.FontCache.invalidateMetrics(()=>!0),this._faces=[],this._fontSet=void 0,super.dispose()}async _load(e){if(this.ensureNotDisposed(),e.length===0)return;let t=typeof document>`u`?globalThis.fonts:document.fonts;if(typeof FontFace>`u`||t==null)throw Error(`Document layout requires FontFace support to load the configured fonts.`);try{let r=e.map(({family:e,source:t,descriptors:n})=>{if(!e.trim()||(typeof t==`string`?!t.trim():t.byteLength===0))throw TypeError(`Document layout font family and source must not be empty.`);return new FontFace(e,t,n)});await Promise.all(r.map(e=>e.load())),this.ensureNotDisposed(),this._fontSet=t,this._faces=r;for(let e of r)t.add(e);n.FontCache.invalidateMetrics(()=>!0)}catch(e){throw this.dispose(),e}}};let Mn=2048;function Q(e){return typeof e==`object`&&!!e}function Nn(e){if(!Q(e)||typeof e.method!=`string`||!Array.isArray(e.args))return null;let t=e.args[0];return Q(t)?{method:e.method,request:t}:null}function Pn(e){if(!Q(e)||!Q(e.data))return null;let t=e.data;return Q(t.step)?t.step:t}function Fn(){return{mutationTransferMs:[],patchTransferMs:[],snapshotTransferMs:[]}}var In=class{constructor(){u(this,`_metrics`,new Map)}recordRequest(e,t){let n=Nn(e),r=n==null?void 0:n.request.unitId;if(n!=null&&typeof r==`string`){if(n.method===`createSession`){this._append(r,`snapshotTransferMs`,t);return}n.method===`startLayout`&&Array.isArray(n.request.mutations)&&n.request.mutations.length>0&&this._append(r,`mutationTransferMs`,t)}}recordResponse(e,t){let n=Pn(e);n!=null&&typeof n.unitId==`string`&&n.publication!=null&&this._append(n.unitId,`patchTransferMs`,t)}getMetrics(e){let t=this._metrics.get(e)??Fn();return{mutationTransferMs:[...t.mutationTransferMs],patchTransferMs:[...t.patchTransferMs],snapshotTransferMs:[...t.snapshotTransferMs]}}reset(e){this._metrics.delete(e)}resetAll(){this._metrics.clear()}_append(e,t,n){let r=this._metrics.get(e)??Fn(),i=r[t];i.push(n),i.length>Mn&&i.splice(0,i.length-Mn),this._metrics.set(e,r)}};let Ln=`univer.docs-layout-worker`,Rn=`Univer 文档 Worker 0123456789`,zn=`16px Arial`;function Bn(){return new Promise(e=>{(0,t.requestImmediateMacroTask)(()=>e())})}function Vn(e){return{send(n){let r=t.Tools.now();postMessage(n),e.recordResponse(n,t.Tools.now()-r)},onMessage:new r.Observable(e=>{let t=t=>e.next(t.data);return addEventListener(`message`,t),()=>removeEventListener(`message`,t)}).pipe((0,r.shareReplay)({bufferSize:1,refCount:!0}))}}function Hn(e){return JSON.stringify([e.segmentId,e.rangeId])}function Un(e,t){if(t!=null){for(let n of t.removals)delete e[n];Object.assign(e,t.upserts)}}var Wn=class{constructor(e=new In){this._performanceTracker=e,u(this,`_sessions`,new Map),u(this,`_fontLoader`,new jn),u(this,`type`,`worker`)}initialize(e=[]){return this._fontLoader.load(e)}async getCapabilities(){let e=n.FontCache.getMeasureText(Rn,zn);return{protocolVersion:5,executor:`worker`,offscreenCanvas:typeof OffscreenCanvas<`u`,structuredClone:typeof structuredClone==`function`,fontProbe:{content:Rn,font:zn,width:e.width,actualBoundingBoxAscent:e.actualBoundingBoxAscent,actualBoundingBoxDescent:e.actualBoundingBoxDescent}}}async recover(){for(let e of this._sessions.values())for(let t of e.layoutSessions.values())t.layoutSession.dispose();this._sessions.clear()}async createSession(e){if(typeof OffscreenCanvas>`u`)throw Error(`Document layout Worker requires OffscreenCanvas text measurement support.`);let r=this._sessions.get(e.unitId);if(r!=null&&e.sessionEpoch<r.sessionEpoch)return;this._disposeSession(e.unitId),n.FontCache.setNormalLineHeightCache(e.normalFontLineHeights??{});let i=new t.DocumentDataModel(e.snapshot),a=new t.LocaleService;e.localeData!=null&&a.load({[e.locale]:e.localeData}),a.setLocale(e.locale),a.setDirection(e.direction),this._sessions.set(e.unitId,{sessionEpoch:e.sessionEpoch,dataModel:i,layoutSessions:new Map,localeService:a,modelRevision:e.modelRevision,customRangePresentations:new Map})}async startLayout(e){let t=this._sessions.get(e.unitId);if(t==null)return{status:`not-found`};if(t.modelRevision!==e.baseRevision||!this._applyMutations(t,e))return{status:`resnapshot-required`,modelRevision:t.modelRevision};n.FontCache.setNormalLineHeightCache(e.normalFontLineHeights??{}),this._updateCustomRangePresentations(t,e),this._applyCustomRangePresentations(t.dataModel,Array.from(t.customRangePresentations.values()));let r=t.layoutSessions.get(e.mountId);if(r!=null&&(e.mountEpoch<r.mountEpoch||e.mountEpoch===r.mountEpoch&&e.viewportEpoch<r.viewportEpoch))return{status:`superseded`};if(r!=null&&e.mountEpoch>r.mountEpoch&&(r.layoutSession.dispose(),t.layoutSessions.delete(e.mountId),r=void 0),r==null){let i={...e.customBlockViewports};Un(i,e.customBlockViewportPatch),r={mountId:e.mountId,layoutSession:new n.DocumentLayoutSession(t.dataModel,t.localeService),customBlockViewports:i,metricsRevision:e.metricsRevision,mountEpoch:e.mountEpoch,viewportEpoch:e.viewportEpoch,activeGeneration:null,cancelledGeneration:null},t.layoutSessions.set(e.mountId,r)}else e.customBlockViewports!=null&&(r.customBlockViewports={...e.customBlockViewports}),Un(r.customBlockViewports,e.customBlockViewportPatch),r.metricsRevision=e.metricsRevision,r.viewportEpoch=e.viewportEpoch;let i=r.layoutSession.start({waitForHyphenationPatterns:!0,reason:e.reason,anchor:e.anchor,priorityAnchor:e.priorityAnchor,invalidation:e.invalidation,modernPageWidth:e.modernPageWidth,modernHorizontalMargin:e.modernHorizontalMargin});return r.activeGeneration=i,r.cancelledGeneration=null,{status:`accepted`,step:await this._runLayoutStep(t,r,i,e.budgetMs)}}_applyMutations(e,t){for(let n of t.mutations){if(n.baseRevision!==e.modelRevision||n.modelRevision!==n.baseRevision+1)return!1;e.dataModel.apply(n.actions),e.modelRevision=n.modelRevision}if(e.modelRevision!==t.modelRevision)return!1;if(t.mutations.length>0)for(let t of e.layoutSessions.values())t.activeGeneration=null,t.cancelledGeneration=null,t.layoutSession.resetDataModel(e.dataModel);return!0}_applyCustomRangePresentations(e,t){let n=new Map,r=[[``,e],...e.headerModelMap,...e.footerModelMap];for(let[e,t]of r){var i;let r=new Map;for(let e of((i=t.getBody())==null?void 0:i.customRanges)??[]){let t=e;delete t.active,delete t.glyphAscentEm,delete t.glyphDescentEm,delete t.glyphWidthEm,delete t.show,r.has(e.rangeId)||r.set(e.rangeId,t)}n.set(e,r)}for(let{segmentId:e,rangeId:r,presentation:i}of t??[]){let t=n.get(e),a=t==null?void 0:t.get(r);a!=null&&(Object.assign(a,i),t==null||t.delete(r))}}_updateCustomRangePresentations(e,t){var n,r;if(t.customRangePresentations!=null){e.customRangePresentations.clear();for(let n of t.customRangePresentations){let t=Hn(n);e.customRangePresentations.has(t)||e.customRangePresentations.set(t,n)}}for(let r of((n=t.customRangePresentationPatch)==null?void 0:n.removals)??[])e.customRangePresentations.delete(Hn(r));for(let n of((r=t.customRangePresentationPatch)==null?void 0:r.upserts)??[])e.customRangePresentations.set(Hn(n),n)}async stepLayout(e){let t=this._getSession(e.unitId),n=this._getLayoutMount(t,e);return await this._runLayoutStep(t,n,e.generation,e.budgetMs)}async publishBacklog(e){let t=this._getSession(e.unitId),n=this._getLayoutMount(t,e);return this._runWithCustomBlockViewports(t,n,()=>({...n.layoutSession.publishBacklog(e.generation),unitId:e.unitId,mountId:e.mountId,mountEpoch:n.mountEpoch,viewportEpoch:n.viewportEpoch,modelRevision:t.modelRevision,metricsRevision:n.metricsRevision}))}async getLayoutPage(e){let t=this._getSession(e.unitId),n=this._getLayoutMount(t,e);return{...e,modelRevision:t.modelRevision,metricsRevision:n.metricsRevision,page:n.layoutSession.getPage(e.pageIndex)}}async cancelLayout(e){var t;let n=(t=this._sessions.get(e.unitId))==null?void 0:t.layoutSessions.get(e.mountId);(n==null?void 0:n.mountEpoch)===e.mountEpoch&&n.viewportEpoch===e.viewportEpoch&&((e.generation==null||e.generation===n.activeGeneration)&&(n.cancelledGeneration=e.generation??n.activeGeneration),n.layoutSession.cancel(e.generation))}async getPerformanceMetrics(e){return this._performanceTracker.getMetrics(e)}async resetPerformanceMetrics(e){this._performanceTracker.reset(e)}async disposeLayoutMount(e){let t=this._sessions.get(e.unitId),n=t==null?void 0:t.layoutSessions.get(e.mountId);t!=null&&n!=null&&n.mountEpoch===e.mountEpoch&&n.viewportEpoch===e.viewportEpoch&&(t.layoutSessions.delete(e.mountId),n.activeGeneration=null,n.layoutSession.dispose())}async disposeSession(e){let t=this._sessions.get(e.unitId);(t==null?void 0:t.sessionEpoch)===e.sessionEpoch&&(this._disposeSession(e.unitId),this._performanceTracker.reset(e.unitId))}dispose(){this._fontLoader.dispose();for(let e of this._sessions.keys())this._disposeSession(e);this._performanceTracker.resetAll()}_getSession(e){let t=this._sessions.get(e);if(t==null)throw Error(`Document layout Worker session not found for unit "${e}".`);return t}_getLayoutMount(e,t){let n=e.layoutSessions.get(t.mountId);if(n==null)throw Error(`Document layout Worker mount not found: "${t.mountId}".`);if(n.mountEpoch!==t.mountEpoch||n.viewportEpoch!==t.viewportEpoch)throw Error(`Document layout Worker rejected a stale mount publication: "${t.mountId}".`);return n}async _runLayoutStep(e,t,n,r){let i=this._runWithCustomBlockViewports(e,t,()=>({...t.layoutSession.step(n,r,8),unitId:e.dataModel.getUnitId(),mountId:t.mountId,mountEpoch:t.mountEpoch,viewportEpoch:t.viewportEpoch,modelRevision:e.modelRevision,metricsRevision:t.metricsRevision}));return await Bn(),t.activeGeneration===n&&t.cancelledGeneration!==n?i:this._runWithCustomBlockViewports(e,t,()=>({...t.layoutSession.step(n,0,1),unitId:e.dataModel.getUnitId(),mountId:t.mountId,mountEpoch:t.mountEpoch,viewportEpoch:t.viewportEpoch,modelRevision:e.modelRevision,metricsRevision:t.metricsRevision}))}_runWithCustomBlockViewports(e,t,r){let i=(0,n.setDocsCustomBlockRenderViewportProvider)((n,r)=>n===e.dataModel.getUnitId()?t.customBlockViewports[r]:null);try{return r()}finally{i()}}_disposeSession(e){let t=this._sessions.get(e);if(t!=null){this._sessions.delete(e);for(let e of t.layoutSessions.values())e.activeGeneration=null,e.layoutSession.dispose();t.layoutSessions.clear(),t.dataModel.dispose(),t.localeService.dispose()}}},Gn=class extends a.ChannelService{constructor(e,t){super(e),this._runtime=t}dispose(){this._runtime.dispose(),super.dispose()}};function Kn(){let e=new In,t=new Wn(e),n=new Gn(Vn(e),t);return n.registerChannel(Ln,(0,a.fromModule)(t)),n}var qn=class extends Error{constructor(e){super(e),this.name=`DocsLayoutWorkerCapabilityError`}};function Jn(e,n){return{send(r){let i=t.Tools.now();e.postMessage(r),n.recordRequest(r,t.Tools.now()-i)},onMessage:new r.Observable(t=>{let n=e=>t.next(e.data);return e.addEventListener(`message`,n),()=>e.removeEventListener(`message`,n)}).pipe((0,r.shareReplay)({bufferSize:1,refCount:!0}))}}var Yn=class extends t.Disposable{constructor(e,t=Dn,n=[]){super(),this._workerFactory=e,this._requestTimeoutMs=t,this._fontFaces=n,u(this,`type`,`worker`),u(this,`_worker`,null),u(this,`_channelService`,null),u(this,`_runtime`,null),u(this,`_initialization`,void 0),u(this,`_initialized`,!1),u(this,`_performanceTracker`,new In),u(this,`_fontFamilies`,new Map),u(this,`_fontLoader`,new jn),this.disposeWithMe(this._fontLoader),this._initialization=this._replaceRuntime()}initialize(){return this._initialization}get renderingFontsReady(){return this._fontFaces.length>0?this._initialization:void 0}async getCapabilities(){return await this._initialization,this._getRuntime().getCapabilities()}async recover(){this._initialization=this._replaceRuntime(),await this._initialization}createSession(e){let n=new Set;kn(e.snapshot,n),this._fontFamilies.set(e.unitId,n);let r={...e,normalFontLineHeights:An(n)};if(this._initialized)return this._withTimeout(this._getRuntime().createSession(r),`create session`);let i=t.Tools.deepClone(r);return this._initialization.then(()=>this._withTimeout(this._getRuntime().createSession(i),`create session`))}async startLayout(e){await this._initialization;let t=this._fontFamilies.get(e.unitId);t!=null&&kn(e.mutations,t);let n=t==null?e:{...e,normalFontLineHeights:An(t)};return this._withTimeout(this._getRuntime().startLayout(n),`start layout`)}async stepLayout(e){return await this._initialization,this._withTimeout(this._getRuntime().stepLayout(e),`step layout`)}async publishBacklog(e){return await this._initialization,this._withTimeout(this._getRuntime().publishBacklog(e),`publish layout backlog`)}async getLayoutPage(e){return await this._initialization,this._withTimeout(this._getRuntime().getLayoutPage(e),`get layout page`)}async cancelLayout(e){return await this._initialization,this._withTimeout(this._getRuntime().cancelLayout(e),`cancel layout`)}async getPerformanceMetrics(e){await this._initialization;let t=await this._withTimeout(this._getRuntime().getPerformanceMetrics(e),`read performance metrics`),n=this._performanceTracker.getMetrics(e);return{mutationTransferMs:n.mutationTransferMs,patchTransferMs:t.patchTransferMs,snapshotTransferMs:n.snapshotTransferMs}}async resetPerformanceMetrics(e){await this._initialization,await this._withTimeout(this._getRuntime().resetPerformanceMetrics(e),`reset performance metrics`),this._performanceTracker.reset(e)}async disposeLayoutMount(e){return await this._initialization,this._withTimeout(this._getRuntime().disposeLayoutMount(e),`dispose layout mount`)}async disposeSession(e){await this._initialization,await this._withTimeout(this._getRuntime().disposeSession(e),`dispose session`),this._performanceTracker.reset(e.unitId),this._fontFamilies.delete(e.unitId)}dispose(){this._disposeRuntime(),super.dispose()}async _replaceRuntime(){this._initialized=!1,this._disposeRuntime(),await this._withTimeout(this._fontLoader.load(this._fontFaces),`load rendering fonts`),this.ensureNotDisposed();let e=this._workerFactory(),t=new a.ChannelService(Jn(e,this._performanceTracker));this._worker=e,this._channelService=t,this._runtime=(0,a.toModule)(t.requestChannel(Ln));try{await this._withTimeout(this._runtime.initialize(this._fontFaces),`load Worker fonts`),await this._withTimeout(this._verifyCapabilities(),`verify capabilities`),this.ensureNotDisposed(),this._initialized=!0}catch(t){throw this._worker===e&&this._disposeRuntime(),t}}_disposeRuntime(){var e,t;this._fontFamilies.clear(),this._initialized=!1,(e=this._channelService)==null||e.dispose(),this._channelService=null,this._runtime=null,(t=this._worker)==null||t.terminate(),this._worker=null,this._performanceTracker.resetAll()}_getRuntime(){if(this._runtime==null)throw Error(`Document layout Worker runtime is unavailable.`);return this._runtime}_withTimeout(e,t){let n=null,r=new Promise((e,r)=>{n=setTimeout(()=>{r(Error(`Document layout Worker timed out while attempting to ${t}.`))},this._requestTimeoutMs)});return Promise.race([e,r]).finally(()=>{n!=null&&clearTimeout(n)})}async _verifyCapabilities(){let e=await this._getRuntime().getCapabilities();if(e.protocolVersion!==5)throw new qn(`Document layout Worker protocol version mismatch.`);if(!e.offscreenCanvas||!e.structuredClone)throw new qn(`Document layout Worker requires OffscreenCanvas and structured clone support.`);let t=n.FontCache.getMeasureText(e.fontProbe.content,e.fontProbe.font);if([[t.width,e.fontProbe.width],[t.actualBoundingBoxAscent,e.fontProbe.actualBoundingBoxAscent],[t.actualBoundingBoxDescent,e.fontProbe.actualBoundingBoxDescent]].some(([e,t])=>!Number.isFinite(e)||!Number.isFinite(t)||Math.abs(e-t)>1))throw new qn(`Document layout Worker font metrics differ from the main rendering context.`)}};let $=class extends t.Plugin{constructor(e=On,n,r,i){super(),this._config=e,this._injector=n,this._layoutExecutorService=r,this._configService=i;let{...a}=(0,t.merge)({},On,this._config);this._configService.setConfig(`docs-layout-worker.config`,a)}onStarting(){if(typeof this._config.workerFactory!=`function`)throw TypeError(`[UniverDocsLayoutWorkerPlugin]: workerFactory is required.`);let e=this._config.requestTimeoutMs??15e3;if(!Number.isFinite(e)||e<=0)throw RangeError(`[UniverDocsLayoutWorkerPlugin]: requestTimeoutMs must be a positive finite number.`);let t=new Yn(this._config.workerFactory,e,this._config.fontFaces);this._injector.add([Yn,{useValue:t}]),this.disposeWithMe(t),this.disposeWithMe(this._layoutExecutorService.register(t))}};u($,`pluginName`,`DOCS_LAYOUT_WORKER_PLUGIN`),u($,`packageName`,Ht),u($,`version`,Ut),$=f([(0,t.DependentOn)(Z),d(1,(0,t.Inject)(t.Injector)),d(2,(0,t.Inject)(O)),d(3,t.IConfigService)],$);let Xn={CUSTOM_RANGE:(0,t.createInterceptorKey)(`CUSTOM_RANGE`),CUSTOM_DECORATION:(0,t.createInterceptorKey)(`CUSTOM_DECORATION`)},Zn=class extends t.Disposable{constructor(e,n){super(),this._context=e,this._docSkeletonManagerService=n,u(this,`_interceptorsByName`,new Map);let r=this._docSkeletonManagerService.getViewModel(),i=r.getDataModel().getUnitId();if(i===t.DOCS_NORMAL_EDITOR_UNIT_ID_KEY||i===t.DOCS_FORMULA_BAR_EDITOR_UNIT_ID_KEY)return;this.disposeWithMe(this.interceptDocumentViewModel(r)),this.disposeWithMe(this.intercept(Xn.CUSTOM_RANGE,{priority:-1,handler:(e,t,n)=>n(e)}));let a=new t.DisposableCollection;r.segmentViewModels$.subscribe(e=>{a.dispose(),a=new t.DisposableCollection,e.forEach(e=>{a.add(this.interceptDocumentViewModel(e))})}),this.disposeWithMe(a)}intercept(e,n){let r=e;this._interceptorsByName.has(r)||this._interceptorsByName.set(r,[]);let i=this._interceptorsByName.get(r);return i.push(n),this._interceptorsByName.set(r,i.sort((e,t)=>(t.priority??0)-(e.priority??0))),this.disposeWithMe((0,t.toDisposable)(()=>(0,t.remove)(this._interceptorsByName.get(r),n)))}fetchThroughInterceptors(e){let n=e,r=this._interceptorsByName.get(n);return(0,t.composeInterceptors)(r||[])}interceptDocumentViewModel(e){let n=new t.DisposableCollection;return n.add(e.registerCustomRangeInterceptor({getCustomRange:t=>this.fetchThroughInterceptors(Xn.CUSTOM_RANGE)(e.getCustomRangeRaw(t),{index:t,unitId:e.getDataModel().getUnitId(),body:e.getDataModel().getBody(),customRanges:e.getDataModel().getCustomRanges()??[]}),getCustomDecoration:t=>this.fetchThroughInterceptors(Xn.CUSTOM_DECORATION)(e.getCustomDecorationRaw(t),{index:t,unitId:e.getDataModel().getUnitId(),customDecorations:e.getDataModel().getCustomDecorations()??[]})})),n}};Zn=f([d(1,(0,t.Inject)(k))],Zn);function Qn(e,n,r){let{unitId:i,segmentId:a}=n,o=e.get(t.IUniverInstanceService).getUnit(i);if(!o)return!1;let s={id:N.id,params:{unitId:n.unitId,actions:[],textRanges:void 0}},c=t.JSONX.getInstance(),l=t.BuildTextUtils.customRange.add({...n,body:r});if(!l)return!1;let u=(0,t.getRichTextEditPath)(o,a);return s.params.actions=c.editOp(l.serialize(),u),s}function $n(e,n){var r,i;let{rangeId:a,rangeType:o,wholeEntity:s,properties:c,unitId:l,selections:u}=n,d=e.get(p),f=e.get(t.IUniverInstanceService),m=u??d.getTextRanges({unitId:l,subUnitId:l}),h=m==null||(r=m[0])==null?void 0:r.segmentId;if(!(m!=null&&m.length))return!1;let g=f.getUnit(l,t.UniverInstanceType.UNIVER_DOC);if(!g)return!1;let _=(i=g.getSelfOrHeaderFooterModel(h))==null?void 0:i.getBody();if(!_)return!1;let v=t.BuildTextUtils.customRange.add({ranges:m,rangeId:a,rangeType:o,segmentId:h,wholeEntity:s,properties:c,body:_});if(!v)return!1;let y=t.JSONX.getInstance(),b={id:N.id,params:{unitId:l,actions:[],textRanges:v.selections,segmentId:h},textX:v},x=(0,t.getRichTextEditPath)(g,h);return b.params.actions=y.editOp(v.serialize(),x),b}function er(e,n){let{unitId:r,segmentId:i,insert:a}=n,o=e.get(t.IUniverInstanceService).getUnit(r);if(!o)return!1;let s={id:N.id,params:{unitId:n.unitId,actions:[],textRanges:void 0,segmentId:i}},c=t.JSONX.getInstance(),l=t.BuildTextUtils.customRange.delete({documentDataModel:o,rangeId:n.rangeId,insert:a,segmentId:i});if(!l)return!1;let u=(0,t.getRichTextEditPath)(o,i);return s.params.actions=c.editOp(l.serialize(),u),s.params.textRanges=l.selections,s}function tr(e,n,r,i=[]){let a=[],o=new Set(i);for(let n=0,r=e.length;n<r;n++)e[n]===t.DataStreamTreeTokenType.PARAGRAPH&&a.push({startIndex:n,paragraphId:(0,t.createParagraphId)(o)});for(let e of a)n!=null&&n.bullet&&(e.bullet=t.Tools.deepClone(n.bullet)),n!=null&&n.paragraphStyle&&(e.paragraphStyle=t.Tools.deepClone(n.paragraphStyle),delete e.paragraphStyle.borderBottom,n.paragraphStyle.headingId&&(e.paragraphStyle.headingId=(0,t.generateRandomId)(6))),r&&(e.paragraphStyle??={},e.paragraphStyle.borderBottom=t.Tools.deepClone(r),e.paragraphStyle.spaceBelow={v:10});return a}function nr(e,n){var r,i;let{unitId:a,body:o,doc:s}=n,c=s;if(c||=e.get(t.IUniverInstanceService).getUnit(a),!c)return!1;let l=(r=n.selection)==null?void 0:r.segmentId,u=(i=c.getSelfOrHeaderFooterModel(l))==null?void 0:i.getBody();if(!u)return!1;let d=e.get(p),f=n.selection??d.getActiveTextRange();if(!f||!u)return!1;let m=n.textRanges??[{startOffset:f.startOffset+o.dataStream.length,endOffset:f.startOffset+o.dataStream.length,collapsed:!0,segmentId:l}],h=t.BuildTextUtils.selection.replace({selection:f,body:o,doc:c});if(!h)return!1;let g={id:N.id,params:{unitId:a,actions:[],textRanges:m,debounce:!0,segmentId:l},textX:h},_=t.JSONX.getInstance();return g.params.actions=_.editOp(h.serialize()),g}function rr(e,n,r){return{size:{width:e,height:n},positionH:{relativeFrom:t.ObjectRelativeFromH.PAGE,posOffset:(r==null?void 0:r.left)??0},positionV:{relativeFrom:t.ObjectRelativeFromV.PARAGRAPH,posOffset:(r==null?void 0:r.top)??0},angle:0}}function ir(e){return{left:e.positionH.posOffset,top:e.positionV.posOffset,width:e.size.width,height:e.size.height,flipX:e.flipX,flipY:e.flipY}}function ar(e,n=0,r=0){return{size:{width:e.width,height:e.height},positionH:{relativeFrom:t.ObjectRelativeFromH.MARGIN,posOffset:(e.left||0)-n},positionV:{relativeFrom:t.ObjectRelativeFromV.PAGE,posOffset:(e.top||0)-r},angle:e.angle||0,flipX:e.flipX,flipY:e.flipY}}function or(e,t){try{return e.get(wn).consumeInsertRange(t)}catch{return null}}function sr(e,n){var r;let i=n??((r=e.get(t.IUniverInstanceService).getCurrentUnitOfType(t.UniverInstanceType.UNIVER_DOC))==null?void 0:r.getUnitId());if(!i)return null;let a=or(e,i);return a?{...a,collapsed:(a==null?void 0:a.startOffset)===(a==null?void 0:a.endOffset)}:null}function cr(e){return!!(e!=null&&e.segmentId)}function lr(e){let t=e.endOffset??e.startOffset;return{...e,endOffset:t,collapsed:e.collapsed??e.startOffset===t,segmentId:e.segmentId??``}}e.CreateHeaderFooterCommand=Ie,e.DOCUMENT_UNIT_PERMISSION_ACTIONS=F,e.DOC_INTERCEPTOR_POINT=Xn,e.DOC_SELECTION_OPTION_PRESERVE_CARET=`preserveCaret`,e.DeleteDocumentSectionBreakCommand=W,e.DeleteTextCommand=je,e.DocBlockMoveValidatorService=Cn,e.DocContentInsertService=wn,e.DocHistoryAction=be,Object.defineProperty(e,"DocInterceptorService",{enumerable:!0,get:function(){return Zn}}),Object.defineProperty(e,"DocLayoutExecutorService",{enumerable:!0,get:function(){return O}}),e.DocLayoutExecutorState=C,e.DocLayoutExecutorType=x,e.DocLayoutSessionStatus=S,Object.defineProperty(e,"DocSelectionManagerService",{enumerable:!0,get:function(){return p}}),Object.defineProperty(e,"DocSkeletonManagerService",{enumerable:!0,get:function(){return k}}),Object.defineProperty(e,"DocStateChangeManagerService",{enumerable:!0,get:function(){return X}}),e.DocStateEmitService=re,e.DocTextResolverService=En,e.DocsLayoutWorkerCapabilityError=qn,e.DocsLayoutWorkerClientService=Yn,e.EMBED_DOCS_CUSTOM_BLOCK_DEFAULT_COMPONENT_KEY=`UniverEmbedDocsCustomBlock`,e.HeaderFooterType=Ne,e.IDocStateChangeInterceptorService=Tn,e.InsertDocumentColumnBreakCommand=U,e.InsertDocumentSectionBreakCommand=H,e.InsertTextCommand=Oe,e.RichTextEditingMutation=N,e.SetDocumentDefaultParagraphStyleCommand=Le,e.SetDocumentNameCommand=Re,e.SetDocumentPermissionCommand=rt,e.SetDocumentPermissionRuleMutation=St,e.SetDocumentPermissionRulesMutation=Ct,e.SetDocumentPermissionsCommand=it,e.SetSectionHeaderFooterLinkCommand=at,e.SetTextSelectionsOperation=o,Object.defineProperty(e,"UniverDocsLayoutWorkerPlugin",{enumerable:!0,get:function(){return $}}),Object.defineProperty(e,"UniverDocsPlugin",{enumerable:!0,get:function(){return Z}}),e.UpdateDocumentParagraphStyleCommand=dt,e.UpdateDocumentSectionCommand=V,e.UpdateTextCommand=Me,e.addCustomRangeBySelectionFactory=$n,e.addCustomRangeFactory=Qn,e.buildDocTransform=rr,e.canEditDocumentTargets=nt,e.consumeContentInsertRange=or,e.createDocsCustomBlockDrawing=jt,e.createDocsCustomBlockInsertMutation=Dt,e.createDocsCustomBlockRemoveMutation=Ot,e.createDocumentPermissionPoint=L,e.createEmbedDocsCustomBlockData=Pt,e.createInsertCustomBlockActions=kt,e.createRemoveCustomBlockActions=At,e.createSectionColumnProperties=gt,e.deleteCustomRangeFactory=er,e.docDrawingPositionToTransform=ir,e.generateParagraphs=tr,e.getContentInsertRange=sr,e.getDocumentDrawingSegmentId=Yt,e.getDocumentEditTargetObjectIds=J,e.getDocumentEntityParentPermissionObjectIds=en,e.getDocumentEntityPermissionObjectId=Qe,e.getDocumentParagraphParentPermissionObjectIds=tn,e.getDocumentParagraphPermissionObjectId=Ze,e.getDocumentPermissionValue=$e,e.getDocumentSectionPermissionObjectId=I,e.getEffectiveSectionPageSetup=ht,e.getSectionContentWidth=B,e.getTopLevelSectionBreaks=R,e.isEmbedDocsCustomBlockData=Ft,e.isHeaderFooterSelection=cr,e.isSheetLikeDocsCustomBlockChildType=Nt,e.normalizeTextRange=lr,e.replaceSelectionFactory=nr,e.resolveDocsCustomBlockSize=Mt,e.setDocumentPermissionValue=et,e.shouldUseInlineTextSelectionForDocsCustomBlockDrawing=It,e.startDocsLayoutWorker=Kn,e.transformDocumentTextRanges=Se,e.transformToDocDrawingPosition=ar});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/docs",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "private": false,
5
5
  "description": "Core document model and rich-text operations for Univer Docs.",
6
6
  "author": "DreamNum Co., Ltd. <developer@univer.ai>",
@@ -62,13 +62,13 @@
62
62
  "rxjs": ">=7.0.0"
63
63
  },
64
64
  "dependencies": {
65
- "@univerjs/core": "1.0.1",
66
- "@univerjs/engine-render": "1.0.1",
67
- "@univerjs/protocol": "1.0.1",
68
- "@univerjs/rpc": "1.0.1"
65
+ "@univerjs/core": "1.0.2",
66
+ "@univerjs/engine-render": "1.0.2",
67
+ "@univerjs/protocol": "1.0.2",
68
+ "@univerjs/rpc": "1.0.2"
69
69
  },
70
70
  "devDependencies": {
71
- "@univerjs-infra/shared": "1.0.1",
71
+ "@univerjs-infra/shared": "1.0.2",
72
72
  "rxjs": "^7.8.2",
73
73
  "typescript": "^6.0.3",
74
74
  "vitest": "^5.0.0"