@univerjs/sheets-data-validation 0.12.4 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.js +1 -1
- package/lib/es/index.js +433 -416
- package/lib/index.js +433 -416
- package/lib/umd/index.js +1 -1
- package/package.json +8 -8
package/lib/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var je=Object.defineProperty;var Pe=(n,s,e)=>s in n?je(n,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[s]=e;var p=(n,s,e)=>Pe(n,typeof s!="symbol"?s+"":s,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),g=require("@univerjs/data-validation"),E=require("@univerjs/engine-formula"),R=require("@univerjs/sheets"),B=require("rxjs"),se=require("@univerjs/sheets-formula");var He=Object.getOwnPropertyDescriptor,We=(n,s,e,t)=>{for(var a=t>1?void 0:t?He(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},ce=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationCacheService=class extends o.Disposable{constructor(e,t,a){super();p(this,"_cacheMatrix",new Map);p(this,"_dirtyRanges$",new B.Subject);p(this,"dirtyRanges$",this._dirtyRanges$.asObservable());this._commandService=e,this._univerInstanceService=t,this._sheetDataValidationModel=a,this._initDirtyRanges(),this._initSheetRemove()}_initDirtyRanges(){this.disposeWithMe(this._commandService.onCommandExecuted((e,t)=>{if(e.id===R.SetRangeValuesMutation.id&&!(t!=null&&t.onlyLocal)){const{cellValue:a,unitId:r,subUnitId:i}=e.params;if(a){const l=new o.ObjectMatrix(a).getDataRange();if(l.endRow===-1)return;const c=this._sheetDataValidationModel.getRules(r,i).map(h=>h.ranges).flat().map(h=>o.getIntersectRange(h,l)).filter(Boolean);c.length&&this.markRangeDirty(r,i,c,!0)}}}))}_initSheetRemove(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{var t;if(e.id===R.RemoveSheetMutation.id){const{unitId:a,subUnitId:r}=e.params;(t=this._cacheMatrix.get(a))==null||t.delete(r)}})),this.disposeWithMe(this._univerInstanceService.unitDisposed$.subscribe(e=>{e.type===o.UniverInstanceType.UNIVER_SHEET&&this._cacheMatrix.delete(e.getUnitId())}))}_ensureCache(e,t){let a=this._cacheMatrix.get(e);a||(a=new Map,this._cacheMatrix.set(e,a));let r=a.get(t);return r||(r=new o.ObjectMatrix,a.set(t,r)),r}ensureCache(e,t){return this._ensureCache(e,t)}addRule(e,t,a){this.markRangeDirty(e,t,a.ranges)}removeRule(e,t,a){this._deleteRange(e,t,a.ranges)}markRangeDirty(e,t,a,r){const i=this._ensureCache(e,t);a.forEach(l=>{o.Range.foreach(l,(d,u)=>{i.getValue(d,u)!==void 0&&i.setValue(d,u,void 0)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a,isSetRange:r})}_deleteRange(e,t,a){const r=this._ensureCache(e,t);a.forEach(i=>{o.Range.foreach(i,(l,d)=>{r.realDeleteValue(l,d)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a})}getValue(e,t,a,r){return this._ensureCache(e,t).getValue(a,r)}};exports.DataValidationCacheService=We([ce(0,o.Inject(o.ICommandService)),ce(1,o.Inject(o.IUniverInstanceService)),ce(2,o.Inject(g.DataValidationModel))],exports.DataValidationCacheService);function L(n){var s,e;return(e=(s=n==null?void 0:n[0])==null?void 0:s[0])==null?void 0:e.v}function P(n){var s;return(s=n==null?void 0:n[0])==null?void 0:s[0]}function M(n){return!E.ERROR_TYPE_SET.has(n)}function Y(n,s){var t;const e=s.getValidatorItem(n);return(t=e==null?void 0:e.offsetFormulaByRange)!=null?t:!1}var $e=Object.getOwnPropertyDescriptor,ke=(n,s,e,t)=>{for(var a=t>1?void 0:t?$e(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},j=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationCustomFormulaService=class extends o.Disposable{constructor(e,t,a,r,i){super();p(this,"_ruleFormulaMap",new Map);p(this,"_ruleFormulaMap2",new Map);this._instanceSrv=e,this._registerOtherFormulaService=t,this._dataValidationModel=a,this._dataValidationCacheService=r,this._validatorRegistryService=i,this._initFormulaResultHandler(),this._initDirtyRanges()}dispose(){super.dispose(),this._ruleFormulaMap.clear(),this._ruleFormulaMap2.clear()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceSrv.getUnitType(t)===o.UniverInstanceType.UNIVER_SHEET)for(const i in a){const l=a[i],{ruleFormulaMap:d}=this._ensureMaps(t,i);l.forEach(u=>{var m,f;const c=d.get((m=u.extra)==null?void 0:m.ruleId),h=this._dataValidationModel.getRuleById(t,i,(f=u.extra)==null?void 0:f.ruleId);h&&c&&this._dataValidationCacheService.markRangeDirty(t,i,h.ranges)})}}}))}_ensureMaps(e,t){let a=this._ruleFormulaMap.get(e),r=this._ruleFormulaMap2.get(e);a||(a=new Map,this._ruleFormulaMap.set(e,a)),r||(r=new Map,this._ruleFormulaMap2.set(e,r));let i=a.get(t);i||(i=new Map,a.set(t,i));let l=r.get(t);return l||(l=new Map,r.set(t,l)),{ruleFormulaMap:i,ruleFormulaMap2:l}}_registerFormula(e,t,a,r,i){return this._registerOtherFormulaService.registerFormulaWithRange(e,t,r,i,{ruleId:a})}_handleDirtyRanges(e,t,a){this._dataValidationModel.getRules(e,t).forEach(i=>{const l=i.ranges;o.Rectangle.doAnyRangesIntersect(l,a)&&this.makeRuleDirty(e,t,i.uid)})}_initDirtyRanges(){this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.subscribe(e=>{e.isSetRange&&this._handleDirtyRanges(e.unitId,e.subUnitId,e.ranges)}))}deleteByRuleId(e,t,a){const{ruleFormulaMap:r,ruleFormulaMap2:i}=this._ensureMaps(e,t),l=this._dataValidationModel.getRuleById(e,t,a),d=r.get(a);if(!l||!d)return;const u=r.get(a);u&&(r.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[u.formulaId]));const c=i.get(a);c&&(i.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[c.formulaId]))}_addFormulaByRange(e,t,a,r,i,l){const{ruleFormulaMap:d,ruleFormulaMap2:u}=this._ensureMaps(e,t),c=l[0].startRow,h=l[0].startColumn;if(r&&o.isFormulaString(r)){const m=this._registerFormula(e,t,a,r,l);d.set(a,{formula:r,originCol:h,originRow:c,formulaId:m})}if(i&&o.isFormulaString(i)){const m=this._registerFormula(e,t,a,i,l);u.set(a,{formula:i,originCol:h,originRow:c,formulaId:m})}}addRule(e,t,a){if(Y(a.type,this._validatorRegistryService)){const{ranges:r,formula1:i,formula2:l,uid:d}=a;this._addFormulaByRange(e,t,d,i,l,r)}}async getCellFormulaValue(e,t,a,r,i){var v,_;const{ruleFormulaMap:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return Promise.resolve(void 0);const u=await this._registerOtherFormulaService.getFormulaValue(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,f=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[f])}async getCellFormula2Value(e,t,a,r,i){var v,_;const{ruleFormulaMap2:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return Promise.resolve(void 0);const u=await this._registerOtherFormulaService.getFormulaValue(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,f=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[f])}getCellFormulaValueSync(e,t,a,r,i){var v,_;const{ruleFormulaMap:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return;const u=this._registerOtherFormulaService.getFormulaValueSync(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,f=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[f])}getCellFormula2ValueSync(e,t,a,r,i){var v,_;const{ruleFormulaMap2:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return;const u=this._registerOtherFormulaService.getFormulaValueSync(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,f=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[f])}getRuleFormulaInfo(e,t,a){const{ruleFormulaMap:r}=this._ensureMaps(e,t);return r.get(a)}makeRuleDirty(e,t,a){var l,d,u,c;const r=(d=(l=this._ruleFormulaMap.get(e))==null?void 0:l.get(t))==null?void 0:d.get(a),i=(c=(u=this._ruleFormulaMap2.get(e))==null?void 0:u.get(t))==null?void 0:c.get(a);r&&this._registerOtherFormulaService.markFormulaDirty(e,t,r.formulaId),i&&this._registerOtherFormulaService.markFormulaDirty(e,t,i.formulaId)}};exports.DataValidationCustomFormulaService=ke([j(0,o.IUniverInstanceService),j(1,o.Inject(se.RegisterOtherFormulaService)),j(2,o.Inject(g.DataValidationModel)),j(3,o.Inject(exports.DataValidationCacheService)),j(4,o.Inject(g.DataValidatorRegistryService))],exports.DataValidationCustomFormulaService);function N(n){return o.getOriginCellValue(n)}function Ee(n){var s;return String((s=N(n))!=null?s:"")}function qe(n){return n.filter(Boolean).join(",")}function W(n){return n.split(",").filter(Boolean)}function Qe(n){const s=N(n);return s==null?"":s.toString()}function X(n,s,e){const{formula1:t,formula2:a}=s,r=s.ranges[0].startRow,i=s.ranges[0].startColumn,l=e.row-r,d=e.col-i,u=o.isFormulaString(t)?n.moveFormulaRefOffset(t,d,l,!0):t,c=o.isFormulaString(a)?n.moveFormulaRefOffset(a,d,l,!0):a;return{transformedFormula1:u,transformedFormula2:c}}var Ge=Object.getOwnPropertyDescriptor,Ye=(n,s,e,t)=>{for(var a=t>1?void 0:t?Ge(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},Ve=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationListCacheService=class extends o.Disposable{constructor(e,t){super();p(this,"_cache",new Map);this._injector=e,this._dataValidationModel=t,this._initRuleChangeListener()}_initRuleChangeListener(){this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{(e.type==="remove"||e.type==="update")&&this.markRuleDirty(e.unitId,e.subUnitId,e.rule.uid)}))}getOrCompute(e,t,a){const r=this.getCache(e,t,a.uid);if(r)return r;const l=this._injector.get(exports.DataValidationFormulaService).getRuleFormulaResultSync(e,t,a.uid);return this.computeAndCache(e,t,a,l)}_ensureCache(e,t){let a=this._cache.get(e);a||(a=new Map,this._cache.set(e,a));let r=a.get(t);return r||(r=new Map,a.set(t,r)),r}getCache(e,t,a){var r,i;return(i=(r=this._cache.get(e))==null?void 0:r.get(t))==null?void 0:i.get(a)}setCache(e,t,a,r){this._ensureCache(e,t).set(a,r)}markRuleDirty(e,t,a){var r,i;(i=(r=this._cache.get(e))==null?void 0:r.get(t))==null||i.delete(a)}clear(){this._cache.clear()}computeAndCache(e,t,a,r){var v,_,V;const{formula1:i="",formula2:l=""}=a,d=o.isFormulaString(i)?this._getRuleFormulaResultSet((V=(_=(v=r==null?void 0:r[0])==null?void 0:v.result)==null?void 0:_[0])==null?void 0:V[0]):W(i),u=l.split(","),c=d.map((S,D)=>({label:S,color:u[D]||""})),h={};for(const S of c)S.color&&(h[S.label]=S.color);const m=new Set(d),f={list:d,listWithColor:c,colorMap:h,set:m};return this.setCache(e,t,a.uid,f),f}_getRuleFormulaResultSet(e){var a,r;if(!e)return[];const t=new Set;for(let i=0,l=e.length;i<l;i++){const d=e[i];if(d)for(let u=0,c=d.length;u<c;u++){const h=d[u],m=N(h);if(m!=null){if(typeof m!="string"&&typeof(h==null?void 0:h.s)=="object"&&((r=(a=h.s)==null?void 0:a.n)!=null&&r.pattern)){t.add(o.numfmt.format(h.s.n.pattern,m,{throws:!1}));continue}const f=typeof m=="string"?m:String(m);M(f)&&t.add(f)}}}return[...t]}};exports.DataValidationListCacheService=Ye([Ve(0,o.Inject(o.Injector)),Ve(1,o.Inject(g.DataValidationModel))],exports.DataValidationListCacheService);var Xe=Object.getOwnPropertyDescriptor,Ke=(n,s,e,t)=>{for(var a=t>1?void 0:t?Xe(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},U=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationFormulaService=class extends o.Disposable{constructor(e,t,a,r,i,l){super();p(this,"_formulaRuleMap",new Map);this._instanceService=e,this._registerOtherFormulaService=t,this._dataValidationCacheService=a,this._dataValidationModel=r,this._validatorRegistryService=i,this._listCacheService=l,this._initFormulaResultHandler()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceService.getUnitType(t)===o.UniverInstanceType.UNIVER_SHEET)for(const i in a){const l=a[i],d=this._ensureRuleFormulaMap(t,i);l.forEach(u=>{var h;const c=(h=u.extra)==null?void 0:h.ruleId;if(c&&d.get(c)){const m=this._dataValidationModel.getRuleById(t,i,c);m&&(this._listCacheService.markRuleDirty(t,i,c),this._dataValidationCacheService.markRangeDirty(t,i,m.ranges))}})}}}))}_ensureRuleFormulaMap(e,t){let a=this._formulaRuleMap.get(e);a||(a=new Map,this._formulaRuleMap.set(e,a));let r=a.get(t);return r||(r=new Map,a.set(t,r)),r}_registerSingleFormula(e,t,a,r){const i=[{startColumn:0,endColumn:0,startRow:0,endRow:0}];return this._registerOtherFormulaService.registerFormulaWithRange(e,t,a,i,{ruleId:r})}addRule(e,t,a){if(!Y(a.type,this._validatorRegistryService)&&a.type!==o.DataValidationType.CHECKBOX){const{formula1:r,formula2:i,uid:l}=a,d=o.isFormulaString(r),u=o.isFormulaString(i);if(!d&&!u)return;const c=this._ensureRuleFormulaMap(e,t),h=[void 0,void 0];if(d){const m=this._registerSingleFormula(e,t,r,l);h[0]={id:m,text:r}}if(u){const m=this._registerSingleFormula(e,t,i,l);h[1]={id:m,text:i}}c.set(l,h)}}removeRule(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(!i)return;const[l,d]=i,u=[l==null?void 0:l.id,d==null?void 0:d.id].filter(Boolean);u.length&&this._registerOtherFormulaService.deleteFormula(e,t,u)}getRuleFormulaResult(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(!i)return Promise.resolve(null);const l=async d=>d&&this._registerOtherFormulaService.getFormulaValue(e,t,d.id);return Promise.all([l(i[0]),l(i[1])])}getRuleFormulaResultSync(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(i)return i.map(l=>{if(l)return this._registerOtherFormulaService.getFormulaValueSync(e,t,l.id)})}getRuleFormulaInfo(e,t,a){return this._ensureRuleFormulaMap(e,t).get(a)}};exports.DataValidationFormulaService=Ke([U(0,o.IUniverInstanceService),U(1,o.Inject(se.RegisterOtherFormulaService)),U(2,o.Inject(exports.DataValidationCacheService)),U(3,o.Inject(g.DataValidationModel)),U(4,o.Inject(g.DataValidatorRegistryService)),U(5,o.Inject(exports.DataValidationListCacheService))],exports.DataValidationFormulaService);class fe{constructor(s,e,t,a,r=!1){p(this,"_map");p(this,"_tree",new o.RBush);p(this,"_dirty",!0);p(this,"_buildTree",()=>{if(!this._dirty||this._disableTree)return;this._tree.clear();const s=[];this._map.forEach((e,t)=>{e.forEach(a=>{s.push({minX:a.startRow,maxX:a.endRow,minY:a.startColumn,maxY:a.endColumn,ruleId:t})})}),this._tree.load(s),this._dirty=!1});p(this,"_debonceBuildTree",o.debounce(this._buildTree,0));this._unitId=e,this._subUnitId=t,this._univerInstanceService=a,this._disableTree=r,this._map=s,this._buildTree()}get _worksheet(){var s;return(s=this._univerInstanceService.getUnit(this._unitId,o.UniverInstanceType.UNIVER_SHEET))==null?void 0:s.getSheetBySheetId(this._subUnitId)}_addRule(s,e){if(!this._worksheet)return;const t=o.Rectangle.mergeRanges(e.map(a=>o.Range.transformRange(a,this._worksheet)));this._map.forEach((a,r)=>{const i=o.Rectangle.subtractMulti(a,t);i.length===0?this._map.delete(r):this._map.set(r,i)}),this._dirty=!0,this._map.set(s,t),this._debonceBuildTree()}addRule(s){this._addRule(s.uid,s.ranges)}removeRange(s){if(!this._worksheet)return;const e=s.map(t=>o.Range.transformRange(t,this._worksheet));this._map.forEach((t,a)=>{const r=o.Rectangle.subtractMulti(t,e);r.length===0?this._map.delete(a):this._map.set(a,r)}),this._dirty=!0,this._debonceBuildTree()}_removeRule(s){this._map.delete(s),this._dirty=!0,this._debonceBuildTree()}removeRule(s){this._removeRule(s.uid)}updateRange(s,e){this._removeRule(s),this._addRule(s,e)}addRangeRules(s){s.forEach(({id:e,ranges:t})=>{if(!t.length)return;let a=this._map.get(e);a?(this._map.set(e,o.Rectangle.mergeRanges([...a,...t])),a=this._map.get(e)):(a=t,this._map.set(e,a)),this._map.forEach((r,i)=>{if(i===e)return;const l=o.Rectangle.subtractMulti(r,t);l.length===0?this._map.delete(i):this._map.set(i,l)})}),this._dirty=!0,this._debonceBuildTree()}diff(s){const e=[];let t=0;return s.forEach((a,r)=>{var d;const i=(d=this._map.get(a.uid))!=null?d:[],l=a.ranges;i.length!==0&&(i.length!==l.length||i.some((u,c)=>!o.Rectangle.equals(u,l[c])))&&e.push({type:"update",ruleId:a.uid,oldRanges:l,newRanges:o.Rectangle.sort(i),rule:a}),i.length===0&&(e.push({type:"delete",rule:a,index:r-t}),t++)}),e}diffWithAddition(s,e){const t=[];let a=0;return s.forEach((r,i)=>{var u;const l=(u=this._map.get(r.uid))!=null?u:[],d=r.ranges;l.length!==0&&(l.length!==d.length||l.some((c,h)=>!o.Rectangle.equals(c,d[h])))&&t.push({type:"update",ruleId:r.uid,oldRanges:d,newRanges:o.Rectangle.sort(l),rule:r}),l.length===0&&(t.push({type:"delete",rule:r,index:i-a}),a++)}),Array.from(e).forEach(r=>{var l;const i=(l=this._map.get(r.uid))!=null?l:[];t.push({type:"add",rule:{...r,ranges:o.Rectangle.sort(i)}})}),t}clone(){return new fe(new Map(o.Tools.deepClone(Array.from(this._map.entries()))),this._unitId,this._subUnitId,this._univerInstanceService,!0)}getValue(s,e){this._dirty&&this._buildTree();const t=this._tree.search({minX:s,maxX:s,minY:e,maxY:e});return t.length>0?t[0].ruleId:void 0}}var ze=Object.getOwnPropertyDescriptor,Ze=(n,s,e,t)=>{for(var a=t>1?void 0:t?ze(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},I=(n,s)=>(e,t)=>s(e,t,n);exports.SheetDataValidationModel=class extends o.Disposable{constructor(e,t,a,r,i,l,d){super();p(this,"_ruleMatrixMap",new Map);p(this,"_validStatusChange$",new B.Subject);p(this,"_ruleChange$",new B.Subject);p(this,"ruleChange$",this._ruleChange$.asObservable());p(this,"validStatusChange$",this._validStatusChange$.asObservable());this._dataValidationModel=e,this._univerInstanceService=t,this._dataValidatorRegistryService=a,this._dataValidationCacheService=r,this._dataValidationFormulaService=i,this._dataValidationCustomFormulaService=l,this._commandService=d,this._initRuleUpdateListener(),this.disposeWithMe(()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()}),this._initUniverInstanceListener()}_initUniverInstanceListener(){this.disposeWithMe(this._univerInstanceService.unitDisposed$.subscribe(e=>{this._ruleMatrixMap.delete(e.getUnitId())})),this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===R.RemoveSheetMutation.id){const{unitId:t,subUnitId:a}=e.params,r=this._ruleMatrixMap.get(t);r&&r.delete(a)}}))}_initRuleUpdateListener(){const e=this._dataValidationModel.getAll();for(const[t,a]of e)for(const[r,i]of a)for(const l of i)this._addRule(t,r,l),this._ruleChange$.next({type:"add",unitId:t,subUnitId:r,rule:l,source:"patched"});this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(t=>{switch(t.type){case"add":this._addRule(t.unitId,t.subUnitId,t.rule);break;case"update":this._updateRule(t.unitId,t.subUnitId,t.rule.uid,t.oldRule,t.updatePayload);break;case"remove":this._removeRule(t.unitId,t.subUnitId,t.rule);break}this._ruleChange$.next(t)}))}_ensureRuleMatrix(e,t){let a=this._ruleMatrixMap.get(e);a||(a=new Map,this._ruleMatrixMap.set(e,a));let r=a.get(t);return r||(r=new fe(new Map,e,t,this._univerInstanceService),a.set(t,r)),r}_addRuleSideEffect(e,t,a){this._ensureRuleMatrix(e,t).addRule(a),this._dataValidationCacheService.addRule(e,t,a),this._dataValidationFormulaService.addRule(e,t,a),this._dataValidationCustomFormulaService.addRule(e,t,a)}_addRule(e,t,a){(Array.isArray(a)?a:[a]).forEach(i=>{this._addRuleSideEffect(e,t,i)})}_updateRule(e,t,a,r,i){const l=this._ensureRuleMatrix(e,t),d={...r,...i.payload};i.type===g.UpdateRuleType.RANGE?l.updateRange(a,i.payload):i.type===g.UpdateRuleType.ALL&&l.updateRange(a,i.payload.ranges),this._dataValidationCacheService.removeRule(e,t,r),this._dataValidationCacheService.addRule(e,t,d),this._dataValidationFormulaService.removeRule(e,t,r.uid),this._dataValidationFormulaService.addRule(e,t,d),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a),this._dataValidationCustomFormulaService.addRule(e,t,d)}_removeRule(e,t,a){this._ensureRuleMatrix(e,t).removeRule(a),this._dataValidationCacheService.removeRule(e,t,a),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a.uid)}getValidator(e){return this._dataValidatorRegistryService.getValidatorItem(e)}getRuleIdByLocation(e,t,a,r){return this._ensureRuleMatrix(e,t).getValue(a,r)}getRuleByLocation(e,t,a,r){const i=this.getRuleIdByLocation(e,t,a,r);if(i)return this._dataValidationModel.getRuleById(e,t,i)}validator(e,t,a){const{col:r,row:i,unitId:l,subUnitId:d,worksheet:u}=t,c=(_,V)=>{a&&a(_,V),V&&this._validStatusChange$.next({unitId:l,subUnitId:d,ruleId:e.uid,status:_,row:i,col:r})},h=u.getCellValueOnly(i,r),m=this.getValidator(e.type),f=u.getCellRaw(i,r),v=N(f);if(m){const _=this._dataValidationCacheService.ensureCache(l,d),V=_.getValue(i,r);return V==null?(_.setValue(i,r,o.DataValidationStatus.VALIDATING),m.validator({value:v,unitId:l,subUnitId:d,row:i,column:r,worksheet:t.worksheet,workbook:t.workbook,interceptValue:N(h),t:f==null?void 0:f.t},e).then(S=>{const D=S?o.DataValidationStatus.VALID:o.DataValidationStatus.INVALID,y=_.getValue(i,r);D===o.DataValidationStatus.VALID?_.realDeleteValue(i,r):_.setValue(i,r,D),c(D,V!==y)}),o.DataValidationStatus.VALIDATING):(c(V!=null?V:o.DataValidationStatus.VALID,!1),V!=null?V:o.DataValidationStatus.VALID)}else return c(o.DataValidationStatus.VALID,!1),o.DataValidationStatus.VALID}getRuleObjectMatrix(e,t){return this._ensureRuleMatrix(e,t)}getRuleById(e,t,a){return this._dataValidationModel.getRuleById(e,t,a)}getRuleIndex(e,t,a){return this._dataValidationModel.getRuleIndex(e,t,a)}getRules(e,t){return[...this._dataValidationModel.getRules(e,t)]}getUnitRules(e){return this._dataValidationModel.getUnitRules(e)}deleteUnitRules(e){return this._dataValidationModel.deleteUnitRules(e)}getSubUnitIds(e){return this._dataValidationModel.getSubUnitIds(e)}getAll(){return this._dataValidationModel.getAll()}};exports.SheetDataValidationModel=Ze([I(0,o.Inject(g.DataValidationModel)),I(1,o.IUniverInstanceService),I(2,o.Inject(g.DataValidatorRegistryService)),I(3,o.Inject(exports.DataValidationCacheService)),I(4,o.Inject(exports.DataValidationFormulaService)),I(5,o.Inject(exports.DataValidationCustomFormulaService)),I(6,o.ICommandService)],exports.SheetDataValidationModel);const $=1,k=0;function Re(n,s){return o.Tools.isBlank(n)?s.t("dataValidation.validFail.value"):o.isFormulaString(n)?s.t("dataValidation.validFail.primitive"):""}const H=n=>o.Tools.isDefine(n)&&String(n).toLowerCase()==="true"?"1":String(n).toLowerCase()==="false"?"0":n;class ye extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.CHECKBOX);p(this,"title","dataValidation.checkbox.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",41);p(this,"offsetFormulaByRange",!1);p(this,"_formulaService",this.injector.get(exports.DataValidationFormulaService));p(this,"skipDefaultFontRender",(e,t,a)=>{const{unitId:r,subUnitId:i}=a,{formula1:l,formula2:d}=this.parseFormulaSync(e,r,i),u=`${t!=null?t:""}`;return!u||u===`${l}`||u===`${d}`})}validatorFormula(e,t,a){const{formula1:r,formula2:i}=e,l=r===i;if(o.Tools.isBlank(r)&&o.Tools.isBlank(i))return{success:!0};if(l)return{success:!1,formula1:this.localeService.t("dataValidation.validFail.checkboxEqual"),formula2:this.localeService.t("dataValidation.validFail.checkboxEqual")};const d=Re(r,this.localeService),u=Re(i,this.localeService);return{success:!d&&!u,formula1:d,formula2:u}}async parseFormula(e,t,a){var h,m,f,v;const{formula1:r=$,formula2:i=k}=e,l=await this._formulaService.getRuleFormulaResult(t,a,e.uid),d=o.isFormulaString(r)?L((m=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:m[0][0]):r,u=o.isFormulaString(i)?L((v=(f=l==null?void 0:l[1])==null?void 0:f.result)==null?void 0:v[0][0]):i,c=M(String(d))&&M(String(u));return{formula1:H(d),formula2:H(u),originFormula1:d,originFormula2:u,isFormulaValid:c}}getExtraStyle(e,t){return{tb:o.WrapStrategy.CLIP}}parseFormulaSync(e,t,a){var h,m,f,v;const{formula1:r=$,formula2:i=k}=e,l=this._formulaService.getRuleFormulaResultSync(t,a,e.uid),d=o.isFormulaString(r)?L((m=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:m[0][0]):r,u=o.isFormulaString(i)?L((v=(f=l==null?void 0:l[1])==null?void 0:f.result)==null?void 0:v[0][0]):i,c=M(String(d))&&M(String(u));return{formula1:H(d),formula2:H(u),originFormula1:d,originFormula2:u,isFormulaValid:c}}async isValidType(e,t,a){const{value:r,unitId:i,subUnitId:l}=e,{formula1:d,formula2:u,originFormula1:c,originFormula2:h}=await this.parseFormula(a,i,l);return!o.Tools.isDefine(d)||!o.Tools.isDefine(u)?!0:o.Tools.isDefine(r)&&(String(r)===String(d)||String(r)===String(u)||String(r)===String(c!=null?c:"")||String(r)===String(h!=null?h:""))}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.checkbox.error")}generateRuleName(e){return this.titleStr}}const Je={[o.DataValidationOperator.BETWEEN]:"dataValidation.date.operators.between",[o.DataValidationOperator.EQUAL]:"dataValidation.date.operators.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.date.operators.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.operators.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.date.operators.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.operators.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.operators.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.operators.notEqual"};o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const De={[o.DataValidationOperator.BETWEEN]:"dataValidation.date.ruleName.between",[o.DataValidationOperator.EQUAL]:"dataValidation.date.ruleName.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.date.ruleName.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.ruleName.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.date.ruleName.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.ruleName.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.ruleName.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.ruleName.notEqual",NONE:"dataValidation.date.ruleName.legal"},et={[o.DataValidationOperator.BETWEEN]:"dataValidation.date.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.date.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.date.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.date.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.errorMsg.notEqual",NONE:"dataValidation.date.errorMsg.legal"},le=[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.NOT_BETWEEN],q="{FORMULA1}",Q="{FORMULA2}",he=n=>{var e,t;if(n==null||typeof n=="boolean")return;if(typeof n=="number"||!Number.isNaN(+n))return+n;const s=(e=o.numfmt.parseDate(n))==null?void 0:e.v;return o.Tools.isDefine(s)?s:(t=o.numfmt.parseDate(o.dayjs(n).format("YYYY-MM-DD HH:mm:ss")))==null?void 0:t.v};class Te extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.DATE);p(this,"title","dataValidation.date.title");p(this,"order",40);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"]);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder))}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=M(String(l==null?void 0:l.v))&&M(String(d==null?void 0:d.v));return{formula1:he(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:he(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}async isValidType(e){const{interceptValue:t,value:a}=e;return typeof a=="number"&&typeof t=="string"||typeof t=="string"?!!o.numfmt.parseDate(t):!1}_validatorSingleFormula(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)||!!(e&&o.numfmt.parseDate(e)))}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=this._validatorSingleFormula(e.formula1),l=this.localeService.t("dataValidation.validFail.date");if(le.includes(r)){const u=this._validatorSingleFormula(e.formula2);return{success:i&&u,formula1:i?void 0:l,formula2:u?void 0:l}}return{success:i,formula1:i?void 0:l}}normalizeFormula(e,t,a){const{formula1:r,formula2:i,bizInfo:l}=e,d=u=>{var h;if(!u)return u;let c;if(!Number.isNaN(+u))c=o.numfmt.dateFromSerial(+u);else{const m=(h=o.numfmt.parseDate(u))==null?void 0:h.v;if(m==null)return"";c=o.numfmt.dateFromSerial(m)}return o.dayjs(`${c[0]}/${c[1]}/${c[2]} ${c[3]}:${c[4]}:${c[5]}`).format(l!=null&&l.showTime?"YYYY-MM-DD HH:mm:ss":"YYYY-MM-DD")};return{formula1:o.isFormulaString(r)?r:d(`${r}`),formula2:o.isFormulaString(i)?i:d(`${i}`)}}transform(e,t,a){const{value:r}=e;return{...e,value:he(r)}}get operatorNames(){return this.operators.map(e=>this.localeService.t(Je[e]))}generateRuleName(e){var a,r;if(!e.operator)return this.localeService.t(De.NONE);const t=this.localeService.t(De[e.operator]).replace(q,(a=e.formula1)!=null?a:"").replace(Q,(r=e.formula2)!=null?r:"");return`${this.titleStr} ${t}`}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(et[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const ae={[o.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual",NONE:"dataValidation.errorMsg.legal"};function G(n){return+n}class tt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"id",o.DataValidationType.DECIMAL);p(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));p(this,"title","dataValidation.decimal.title");p(this,"order",20);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"])}_isFormulaOrNumber(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e))}async isValidType(e,t,a){const{value:r}=e;return!Number.isNaN(G(r))}transform(e,t,a){const{value:r}=e;return{...e,value:G(r)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=M(String(l==null?void 0:l.v))&&M(String(d==null?void 0:d.v));return{formula1:this._parseNumber(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:this._parseNumber(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrNumber(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrNumber(e.formula2),d=le.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:i?"":u}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(ae.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(ae[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}function at(n){var e,t;if(!n)return[];const s=new Set;for(let a=0,r=n.length;a<r;a++){const i=n[a];if(i)for(let l=0,d=i.length;l<d;l++){const u=i[l],c=N(u);if(c!=null){if(typeof c!="string"&&typeof(u==null?void 0:u.s)=="object"&&((t=(e=u.s)==null?void 0:e.n)!=null&&t.pattern)){s.add(o.numfmt.format(u.s.n.pattern,c,{throws:!1}));continue}const h=typeof c=="string"?c:String(c);M(h)&&s.add(h)}}}return[...s]}const rt=["if","indirect","choose","offset"];function it(n,s){if(!o.isFormulaString(n)||E.isReferenceString(n.slice(1)))return!0;const t=s.sequenceNodesBuilder(n);return t&&t.some(a=>typeof a=="object"&&a.nodeType===E.sequenceNodeType.FUNCTION&&rt.indexOf(a.token.toLowerCase())>-1)}function ot(n,s){const{formula1:e="",ranges:t}=n;if(E.isReferenceString(e.slice(1))){const r=E.deserializeRangeWithSheet(e.slice(1));if((!r.sheetName||r.sheetName===s)&&t.some(i=>o.Rectangle.intersects(i,r.range)))return!0}return!1}class ve extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"formulaService",this.injector.get(exports.DataValidationFormulaService));p(this,"_lexer",this.injector.get(E.LexerTreeBuilder));p(this,"_univerInstanceService",this.injector.get(o.IUniverInstanceService));p(this,"_listCacheService",this.injector.get(exports.DataValidationListCacheService));p(this,"order",50);p(this,"offsetFormulaByRange",!1);p(this,"id",o.DataValidationType.LIST);p(this,"title","dataValidation.list.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"skipDefaultFontRender",e=>e.renderMode!==o.DataValidationRenderMode.TEXT)}validatorFormula(e,t,a){var u,c,h;const r=!o.Tools.isBlank(e.formula1),i=it((u=e.formula1)!=null?u:"",this._lexer),l=(h=(c=this._univerInstanceService.getUnit(t,o.UniverInstanceType.UNIVER_SHEET))==null?void 0:c.getSheetBySheetId(a))==null?void 0:h.getName(),d=ot(e,l!=null?l:"");return{success:!!(r&&i&&!d),formula1:r?i?d?this.localeService.t("dataValidation.validFail.listIntersects"):void 0:this.localeService.t("dataValidation.validFail.listInvalid"):this.localeService.t("dataValidation.validFail.list")}}getExtraStyle(e,t,{style:a}){var i;const r=(i=a.tb!==o.WrapStrategy.OVERFLOW?a.tb:o.WrapStrategy.CLIP)!=null?i:o.WrapStrategy.WRAP;if(e.type===o.DataValidationType.LIST&&(e.renderMode===o.DataValidationRenderMode.ARROW||e.renderMode===o.DataValidationRenderMode.TEXT)){const l=this.getListWithColorMap(e),d=`${t!=null?t:""}`,u=l[d];if(u)return{bg:{rgb:u},tb:r}}return{tb:r}}parseCellValue(e){const t=e.toString();return W(t)}async parseFormula(e,t,a){var d,u;const r=await this.formulaService.getRuleFormulaResult(t,a,e.uid),i=L((u=(d=r==null?void 0:r[0])==null?void 0:d.result)==null?void 0:u[0][0]);return{formula1:void 0,formula2:void 0,isFormulaValid:M(String(i))}}async isValidType(e,t,a){const{value:r,unitId:i,subUnitId:l}=e,{formula1:d=""}=a,u=o.isFormulaString(d)?this._listCacheService.getOrCompute(i,l,a).list:W(d);return this.parseCellValue(r).every(h=>u.includes(h))}generateRuleName(){return this.localeService.t("dataValidation.list.name")}generateRuleErrorMessage(){return this.localeService.t("dataValidation.list.error")}_getUnitAndSubUnit(e,t){var i,l;const a=(i=e?this._univerInstanceService.getUniverSheetInstance(e):void 0)!=null?i:this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET);if(!a)return null;const r=(l=t?a.getSheetBySheetId(t):void 0)!=null?l:a.getActiveSheet();return r?{unitId:a.getUnitId(),subUnitId:r.getSheetId()}:null}getList(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return[];const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).list}async getListAsync(e,t,a){var c,h;const{formula1:r=""}=e,i=this._getUnitAndSubUnit(t,a);if(!i)return[];const{unitId:l,subUnitId:d}=i,u=await this.formulaService.getRuleFormulaResult(l,d,e.uid);return o.isFormulaString(r)?at((h=(c=u==null?void 0:u[0])==null?void 0:c.result)==null?void 0:h[0][0]):W(r)}getListWithColor(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return[];const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).listWithColor}getListWithColorMap(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return{};const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).colorMap}}class nt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.TEXT_LENGTH);p(this,"title","dataValidation.textLength.title");p(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));p(this,"order",30);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"]);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService))}_isFormulaOrInt(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!1};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),d=le.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:u}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=M(String(l==null?void 0:l.v))&&M(String(d==null?void 0:d.v));return{formula1:this._parseNumber(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:this._parseNumber(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}transform(e,t,a){return{...e,value:e.value.toString().length}}async isValidType(e,t,a){const{value:r}=e;return typeof r=="string"||typeof r=="number"}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(g.TextLengthErrorTitleMap[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}function Oe(n){var e,t;return n?n.p?!((t=(e=n.p.body)==null?void 0:e.dataStream)!=null?t:"").slice(0,-2).trim():o.Tools.isBlank(n.v):!0}function K(n,s,e,t,a="command",r=!0){const i=t.get(E.LexerTreeBuilder),l=t.get(g.DataValidatorRegistryService),d=[],u=[],c=t.get(exports.SheetDataValidationModel),h=t.get(o.IUniverInstanceService),m=R.getSheetCommandTarget(h,{unitId:n,subUnitId:s});if(!m)return{redoMutations:d,undoMutations:u};const{worksheet:f}=m,v=new o.ObjectMatrix;let _=!1;function V(S,D){r&&S.forEach(y=>{o.Range.foreach(y,(T,F)=>{const O=f.getCellRaw(T,F),A=Ee(O);(Oe(O)||A===D)&&!(O!=null&&O.p)&&(_=!0,v.setValue(T,F,{v:D,p:null}))})})}if(e.forEach(S=>{switch(S.type){case"delete":d.push({id:g.RemoveDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:S.rule.uid,source:a}}),u.unshift({id:g.AddDataValidationMutation.id,params:{unitId:n,subUnitId:s,rule:S.rule,index:S.index,source:a}});break;case"update":{if(Y(S.rule.type,l)){const y=S.oldRanges[0].startRow,T=S.oldRanges[0].startColumn,F=S.newRanges[0].startRow,O=S.newRanges[0].startColumn,A=F-y,z=O-T,Z=o.isFormulaString(S.rule.formula1)?i.moveFormulaRefOffset(S.rule.formula1,z,A):S.rule.formula1,J=o.isFormulaString(S.rule.formula2)?i.moveFormulaRefOffset(S.rule.formula2,z,A):S.rule.formula2;Z!==S.rule.formula1||J!==S.rule.formula2||!o.isRangesEqual(S.newRanges,S.oldRanges)?(d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:S.ruleId,payload:{type:g.UpdateRuleType.ALL,payload:{formula1:Z,formula2:J,ranges:S.newRanges}}}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:S.ruleId,payload:{type:g.UpdateRuleType.ALL,payload:{formula1:S.rule.formula1,formula2:S.rule.formula2,ranges:S.oldRanges}}}})):(d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:S.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:S.newRanges},source:a}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:S.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:S.oldRanges},source:a}}))}else d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:S.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:S.newRanges},source:a}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:S.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:S.oldRanges},source:a}});const D=c.getRuleById(n,s,S.ruleId);if(D&&D.type===o.DataValidationType.CHECKBOX){const T=c.getValidator(o.DataValidationType.CHECKBOX).parseFormulaSync(D,n,s);V(S.newRanges,T.formula2)}break}case"add":{if(d.push({id:g.AddDataValidationMutation.id,params:{unitId:n,subUnitId:s,rule:S.rule,source:a}}),u.unshift({id:g.RemoveDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:S.rule.uid,source:a}}),S.rule.type===o.DataValidationType.CHECKBOX){const y=c.getValidator(o.DataValidationType.CHECKBOX).parseFormulaSync(S.rule,n,s);V(S.rule.ranges,y.originFormula2)}break}}}),_){const S={id:R.SetRangeValuesMutation.id,params:{unitId:n,subUnitId:s,cellValue:v.getData()}},D={id:R.SetRangeValuesMutation.id,params:R.SetRangeValuesUndoMutationFactory(t,S.params)};d.push(S),u.push(D)}return{redoMutations:d,undoMutations:u}}const Fe={type:o.CommandType.COMMAND,id:"sheet.command.updateDataValidationRuleRange",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a,ruleId:r}=s,i=n.get(exports.SheetDataValidationModel),l=n.get(o.ICommandService),d=n.get(o.IUndoRedoService);if(!i.getRuleById(e,t,r))return!1;const c=i.getRuleObjectMatrix(e,t).clone();c.updateRange(r,a);const h=c.diff(i.getRules(e,t)),{redoMutations:m,undoMutations:f}=K(e,t,h,n);return d.pushUndoRedo({undoMutations:f,redoMutations:m,unitID:e}),o.sequenceExecute(m,l),!0}},Ce={type:o.CommandType.COMMAND,id:"sheet.command.addDataValidation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,rule:a}=s,r=n.get(exports.SheetDataValidationModel),i=n.get(o.ICommandService),l=n.get(o.IUndoRedoService),d=r.getRuleObjectMatrix(e,t).clone();d.addRule(a);const u=d.diff(r.getRules(e,t)),c=r.getValidator(a.type),h={unitId:e,subUnitId:t,rule:{...a,...c==null?void 0:c.normalizeFormula(a,e,t)}},{redoMutations:m,undoMutations:f}=K(e,t,u,n);return m.push({id:g.AddDataValidationMutation.id,params:h}),f.unshift({id:g.RemoveDataValidationMutation.id,params:{unitId:e,subUnitId:t,ruleId:a.uid}}),l.pushUndoRedo({unitID:e,redoMutations:m,undoMutations:f}),o.sequenceExecute(m,i),!0}},Ie={type:o.CommandType.COMMAND,id:"sheets.command.update-data-validation-setting",handler(n,s){if(!s)return!1;const e=n.get(o.ICommandService),t=n.get(o.IUndoRedoService),a=n.get(exports.SheetDataValidationModel),r=n.get(g.DataValidatorRegistryService),{unitId:i,subUnitId:l,ruleId:d,setting:u}=s,c=r.getValidatorItem(u.type);if(!c)return!1;const h=a.getRuleById(i,l,d);if(!h)return!1;const m={...h,...u};if(!c.validatorFormula(m,i,l).success)return!1;const f={unitId:i,subUnitId:l,ruleId:d,payload:{type:g.UpdateRuleType.SETTING,payload:{...u,...c.normalizeFormula(m,i,l)}}},v=[{id:g.UpdateDataValidationMutation.id,params:f}],_={unitId:i,subUnitId:l,ruleId:d,payload:{type:g.UpdateRuleType.SETTING,payload:g.getRuleSetting(h)}},V=[{id:g.UpdateDataValidationMutation.id,params:_}];if(u.type===o.DataValidationType.CHECKBOX){const D=h.ranges,y=n.get(o.IUniverInstanceService),T=R.getSheetCommandTarget(y,{unitId:i,subUnitId:l});if(T){const F=new o.ObjectMatrix,{worksheet:O}=T,{formula2:A=k,formula1:z=$}=h,{formula2:Z=k,formula1:J=$}=u;let de=!1;if(D.forEach(ee=>{o.Range.foreach(ee,(x,ue)=>{const C=O.getCellRaw(x,ue),_e=Ee(C);(Oe(C)||_e===String(A))&&!(C!=null&&C.p)?(F.setValue(x,ue,{v:Z,p:null}),de=!0):_e===String(z)&&!(C!=null&&C.p)&&(F.setValue(x,ue,{v:J,p:null}),de=!0)})}),de){const ee={id:R.SetRangeValuesMutation.id,params:{unitId:i,subUnitId:l,cellValue:F.getData()}},x={id:R.SetRangeValuesMutation.id,params:R.SetRangeValuesUndoMutationFactory(n,ee.params)};v.push(ee),V.push(x)}}}return o.sequenceExecute(v,e).result?(t.pushUndoRedo({unitID:i,redoMutations:v,undoMutations:V}),!0):!1}},Ne={type:o.CommandType.COMMAND,id:"sheets.command.update-data-validation-options",handler(n,s){if(!s)return!1;const e=n.get(o.ICommandService),t=n.get(o.IUndoRedoService),a=n.get(exports.SheetDataValidationModel),{unitId:r,subUnitId:i,ruleId:l,options:d}=s,u=a.getRuleById(r,i,l);if(!u)return!1;const c={unitId:r,subUnitId:i,ruleId:l,payload:{type:g.UpdateRuleType.OPTIONS,payload:d}},h=[{id:g.UpdateDataValidationMutation.id,params:c}],m={unitId:r,subUnitId:i,ruleId:l,payload:{type:g.UpdateRuleType.OPTIONS,payload:g.getRuleOptions(u)}},f=[{id:g.UpdateDataValidationMutation.id,params:m}];return t.pushUndoRedo({unitID:r,redoMutations:h,undoMutations:f}),e.executeCommand(g.UpdateDataValidationMutation.id,c),!0}},Ae={type:o.CommandType.COMMAND,id:"sheets.command.clear-range-data-validation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a}=s,r=n.get(o.ICommandService),i=n.get(o.IUniverInstanceService),l=R.getSheetCommandTarget(i,{unitId:e,subUnitId:t}),d=n.get(exports.SheetDataValidationModel);if(!l)return!1;const u=n.get(o.IUndoRedoService),c=d.getRuleObjectMatrix(e,t).clone();c.removeRange(a);const h=c.diff(d.getRules(e,t)),{redoMutations:m,undoMutations:f}=K(e,t,h,n);return u.pushUndoRedo({unitID:e,redoMutations:m,undoMutations:f}),o.sequenceExecute(m,r).result}},Ue={type:o.CommandType.COMMAND,id:"sheet.command.remove-all-data-validation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t}=s,a=n.get(o.ICommandService),r=n.get(exports.SheetDataValidationModel),i=n.get(o.IUndoRedoService),l=[...r.getRules(e,t)],d={unitId:e,subUnitId:t,ruleId:l.map(h=>h.uid)},u=[{id:g.RemoveDataValidationMutation.id,params:d}],c=[{id:g.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:l}}];return i.pushUndoRedo({redoMutations:u,undoMutations:c,unitID:e}),a.executeCommand(g.RemoveDataValidationMutation.id,d),!0}},st=(n,s)=>{const e=n.get(exports.SheetDataValidationModel),{unitId:t,subUnitId:a,ruleId:r,source:i}=s;if(Array.isArray(r)){const d=r.map(u=>e.getRuleById(t,a,u)).filter(Boolean);return[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:d,source:i}}]}return[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:{...e.getRuleById(t,a,r)},index:e.getRuleIndex(t,a,r)}}]},we={type:o.CommandType.COMMAND,id:"sheet.command.remove-data-validation-rule",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ruleId:a}=s,r=n.get(o.ICommandService),i=n.get(o.IUndoRedoService),l=n.get(exports.SheetDataValidationModel),d=[{id:g.RemoveDataValidationMutation.id,params:s}],u=[{id:g.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:{...l.getRuleById(e,t,a)},index:l.getRuleIndex(e,t,a)}}];return i.pushUndoRedo({undoMutations:u,redoMutations:d,unitID:s.unitId}),r.executeCommand(g.RemoveDataValidationMutation.id,s),!0}},be="SHEET_DATA_VALIDATION_PLUGIN";var Le=(n=>(n[n.View=0]="View",n[n.Edit=1]="Edit",n[n.ManageCollaborator=2]="ManageCollaborator",n[n.Print=3]="Print",n[n.Duplicate=4]="Duplicate",n[n.Comment=5]="Comment",n[n.Copy=6]="Copy",n[n.Share=7]="Share",n[n.Export=8]="Export",n[n.MoveWorksheet=9]="MoveWorksheet",n[n.DeleteWorksheet=10]="DeleteWorksheet",n[n.HideWorksheet=11]="HideWorksheet",n[n.RenameWorksheet=12]="RenameWorksheet",n[n.CreateWorksheet=13]="CreateWorksheet",n[n.SetWorksheetStyle=14]="SetWorksheetStyle",n[n.EditWorksheetCell=15]="EditWorksheetCell",n[n.InsertHyperlink=16]="InsertHyperlink",n[n.Sort=17]="Sort",n[n.Filter=18]="Filter",n[n.PivotTable=19]="PivotTable",n[n.FloatImg=20]="FloatImg",n[n.History=21]="History",n[n.RwHgtClWdt=22]="RwHgtClWdt",n[n.ViemRwHgtClWdt=23]="ViemRwHgtClWdt",n[n.ViewFilter=24]="ViewFilter",n[n.MoveSheet=25]="MoveSheet",n[n.DeleteSheet=26]="DeleteSheet",n[n.HideSheet=27]="HideSheet",n[n.CopySheet=28]="CopySheet",n[n.RenameSheet=29]="RenameSheet",n[n.CreateSheet=30]="CreateSheet",n[n.SelectProtectedCells=31]="SelectProtectedCells",n[n.SelectUnProtectedCells=32]="SelectUnProtectedCells",n[n.SetCellStyle=33]="SetCellStyle",n[n.SetCellValue=34]="SetCellValue",n[n.SetRowStyle=35]="SetRowStyle",n[n.SetColumnStyle=36]="SetColumnStyle",n[n.InsertRow=37]="InsertRow",n[n.InsertColumn=38]="InsertColumn",n[n.DeleteRow=39]="DeleteRow",n[n.DeleteColumn=40]="DeleteColumn",n[n.EditExtraObject=41]="EditExtraObject",n[n.Delete=42]="Delete",n[n.RecoverHistory=43]="RecoverHistory",n[n.ViewHistory=44]="ViewHistory",n[n.CreatePermissionObject=45]="CreatePermissionObject",n[n.UNRECOGNIZED=-1]="UNRECOGNIZED",n))(Le||{}),lt=Object.getOwnPropertyDescriptor,dt=(n,s,e,t)=>{for(var a=t>1?void 0:t?lt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},me=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationFormulaController=class extends o.Disposable{constructor(s,e,t){super(),this._univerInstanceService=s,this._permissionService=e,this._lexerTreeBuilder=t}getFormulaRefCheck(s){var t,a;const e=this._lexerTreeBuilder.sequenceNodesBuilder(s);if(!e)return!0;for(let r=0;r<e.length;r++){const i=e[r];if(typeof i=="string")continue;const{token:l}=i,d=E.deserializeRangeWithSheetWithCache(l),u=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET);let c=u.getActiveSheet();const h=u.getUnitId();if(d.sheetName){if(c=u.getSheetBySheetName(d.sheetName),!c)return!1;const V=c==null?void 0:c.getSheetId();if(!this._permissionService.getPermissionPoint(new R.WorksheetViewPermission(h,V).id))return!1}if(!c)return!1;const{startRow:m,endRow:f,startColumn:v,endColumn:_}=d.range;for(let V=m;V<=f;V++)for(let S=v;S<=_;S++){const D=(a=(t=c.getCell(V,S))==null?void 0:t.selectionProtection)==null?void 0:a[0];if((D==null?void 0:D[Le.View])===!1)return!1}}return!0}};exports.DataValidationFormulaController=dt([me(0,o.IUniverInstanceService),me(1,o.IPermissionService),me(2,o.Inject(E.LexerTreeBuilder))],exports.DataValidationFormulaController);const ut="sheets-data-validation.config",Me={};var ct=Object.getOwnPropertyDescriptor,ht=(n,s,e,t)=>{for(var a=t>1?void 0:t?ct(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},pe=(n,s)=>(e,t)=>s(e,t,n);let re=class extends o.Disposable{constructor(s,e,t){super();p(this,"_disposableMap",new Map);p(this,"registerRule",(s,e,t)=>{Y(t.type,this._validatorRegistryService)&&this.register(s,e,t)});this._dataValidationModel=s,this._formulaRefRangeService=e,this._validatorRegistryService=t,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}register(s,e,t){const a=t.ranges,r=t.formula1,i=t.formula2,l=this._formulaRefRangeService.registerRangeFormula(s,e,a,[r!=null?r:"",i!=null?i:""],u=>{if(u.length===0)return{undos:[{id:g.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:t,source:"patched"}}],redos:[{id:g.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,source:"patched"}}]};const c=[],h=[],m=u[0];c.push({id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.ALL,payload:{ranges:m.ranges,formula1:m.formulas[0],formula2:m.formulas[1]}},source:"patched"}}),h.push({id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.ALL,payload:{ranges:a,formula1:r,formula2:i}},source:"patched"}});for(let f=1;f<u.length;f++){const v=u[f],_=o.generateRandomId();c.push({id:g.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:{...t,uid:_,formula1:v.formulas[0],formula2:v.formulas[1],ranges:v.ranges},source:"patched"}}),h.push({id:g.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:_,source:"patched"}})}return{undos:h,redos:c}}),d=this._getIdWithUnitId(s,e,t.uid);this._disposableMap.set(d,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,r]of t)for(const i of r)this.registerRule(e,a,i);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:r}=e;switch(e.type){case"add":{const i=e.rule;this.registerRule(e.unitId,e.subUnitId,i);break}case"remove":{const i=this._disposableMap.get(this._getIdWithUnitId(t,a,r.uid));i&&i.dispose();break}case"update":{const i=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,i.uid));l&&l.dispose(),this.registerRule(e.unitId,e.subUnitId,i);break}}})),this.disposeWithMe(o.toDisposable(()=>{this._disposableMap.forEach(e=>{e.dispose()}),this._disposableMap.clear()}))}};re=ht([pe(0,o.Inject(exports.SheetDataValidationModel)),pe(1,o.Inject(se.FormulaRefRangeService)),pe(2,o.Inject(g.DataValidatorRegistryService))],re);var mt=Object.getOwnPropertyDescriptor,pt=(n,s,e,t)=>{for(var a=t>1?void 0:t?mt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},w=(n,s)=>(e,t)=>s(e,t,n);let ie=class extends o.Disposable{constructor(s,e,t,a,r,i){super();p(this,"_disposableMap",new Map);p(this,"registerRule",(s,e,t)=>{Y(t.type,this._validatorRegistryService)||(this.register(s,e,t),this.registerFormula(s,e,t))});this._dataValidationModel=s,this._injector=e,this._refRangeService=t,this._dataValidationFormulaService=a,this._formulaRefRangeService=r,this._validatorRegistryService=i,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}registerFormula(s,e,t){var u;const a=t.uid,r=this._getIdWithUnitId(s,e,a),i=(u=this._disposableMap.get(r))!=null?u:new Set,l=(c,h)=>{const m=this._dataValidationModel.getRuleById(s,e,a);if(!m)return{redos:[],undos:[]};const f=m[c];if(!f||f===h)return{redos:[],undos:[]};const v={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.SETTING,payload:{type:m.type,formula1:m.formula1,formula2:m.formula2,[c]:h}},source:"patched"},_={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.SETTING,payload:{type:m.type,formula1:m.formula1,formula2:m.formula2}},source:"patched"},V=[{id:g.UpdateDataValidationMutation.id,params:v}],S=[{id:g.UpdateDataValidationMutation.id,params:_}];return{redos:V,undos:S}},d=this._dataValidationFormulaService.getRuleFormulaInfo(s,e,a);if(d){const[c,h]=d;if(c){const m=this._formulaRefRangeService.registerFormula(s,e,c.text,f=>l("formula1",f));i.add(()=>m.dispose())}if(h){const m=this._formulaRefRangeService.registerFormula(s,e,h.text,f=>l("formula2",f));i.add(()=>m.dispose())}}}register(s,e,t){var d;const a=u=>{const c=[...t.ranges],m=c.map(v=>R.handleCommonDefaultRangeChangeWithEffectRefCommands(v,u)).filter(v=>!!v).flat();if(o.isRangesEqual(m,c))return{redos:[],undos:[]};if(m.length){const v={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.RANGE,payload:m},source:"patched"},_=[{id:g.UpdateDataValidationMutation.id,params:v}],V=[{id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.RANGE,payload:c},source:"patched"}}];return{redos:_,undos:V}}else{const v={unitId:s,subUnitId:e,ruleId:t.uid},_=[{id:g.RemoveDataValidationMutation.id,params:v}],V=st(this._injector,v);return{redos:_,undos:V}}},r=[];t.ranges.forEach(u=>{const c=this._refRangeService.registerRefRange(u,a,s,e);r.push(()=>c.dispose())});const i=this._getIdWithUnitId(s,e,t.uid),l=(d=this._disposableMap.get(i))!=null?d:new Set;l.add(()=>r.forEach(u=>u())),this._disposableMap.set(i,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,r]of t)for(const i of r)this.registerRule(e,a,i);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:r}=e;switch(e.type){case"add":{const i=e.rule;this.registerRule(e.unitId,e.subUnitId,i);break}case"remove":{const i=this._disposableMap.get(this._getIdWithUnitId(t,a,r.uid));i&&i.forEach(l=>l());break}case"update":{const i=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,i.uid));l&&l.forEach(d=>d()),this.registerRule(e.unitId,e.subUnitId,i);break}}})),this.disposeWithMe(o.toDisposable(()=>{this._disposableMap.forEach(e=>{e.forEach(t=>t())}),this._disposableMap.clear()}))}};ie=pt([w(0,o.Inject(exports.SheetDataValidationModel)),w(1,o.Inject(o.Injector)),w(2,o.Inject(R.RefRangeService)),w(3,o.Inject(exports.DataValidationFormulaService)),w(4,o.Inject(se.FormulaRefRangeService)),w(5,o.Inject(g.DataValidatorRegistryService))],ie);var gt=Object.getOwnPropertyDescriptor,St=(n,s,e,t)=>{for(var a=t>1?void 0:t?gt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},ge=(n,s)=>(e,t)=>s(e,t,n);let oe=class extends o.Disposable{constructor(n,s,e){super(),this._sheetInterceptorService=n,this._univerInstanceService=s,this._sheetDataValidationModel=e,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:n=>{var s;if(n.id===R.RemoveSheetCommand.id){const e=n.params,t=e.unitId||this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET).getUnitId(),a=this._univerInstanceService.getUniverSheetInstance(t);if(!a)return{redos:[],undos:[]};const r=e.subUnitId||((s=a.getActiveSheet())==null?void 0:s.getSheetId());if(!r)return{redos:[],undos:[]};const i=this._sheetDataValidationModel.getRules(t,r);if(i.length===0)return{redos:[],undos:[]};const l=i.map(c=>c.uid),d={unitId:t,subUnitId:r,ruleId:l,source:"patched"},u={unitId:t,subUnitId:r,rule:[...i],source:"patched"};return{redos:[{id:g.RemoveDataValidationMutation.id,params:d}],undos:[{id:g.AddDataValidationMutation.id,params:u}]}}else if(n.id===R.CopySheetCommand.id){const e=n.params,{unitId:t,subUnitId:a,targetSubUnitId:r}=e;if(!t||!a||!r)return{redos:[],undos:[]};const i=this._sheetDataValidationModel.getRules(t,a);if(i.length===0)return{redos:[],undos:[]};const l=i.map(d=>({...d,uid:o.generateRandomId(6)}));return{redos:[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:r,rule:l,source:"patched"}}],undos:[{id:g.RemoveDataValidationMutation.id,params:{unitId:t,subUnitId:r,ruleId:l.map(d=>d.uid),source:"patched"}}]}}return{redos:[],undos:[]}}}))}};oe=St([ge(0,o.Inject(R.SheetInterceptorService)),ge(1,o.Inject(o.IUniverInstanceService)),ge(2,o.Inject(exports.SheetDataValidationModel))],oe);class ft extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.ANY);p(this,"title","dataValidation.any.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",0);p(this,"offsetFormulaByRange",!1)}async parseFormula(e,t,a){return{formula1:e.formula1,formula2:e.formula2,isFormulaValid:!0}}validatorFormula(e,t,a){return{success:!0}}async isValidType(e,t,a){return!0}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.any.error")}}class vt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.CUSTOM);p(this,"title","dataValidation.custom.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",60);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder))}validatorFormula(e,t,a){var u;const r=o.isFormulaString(e.formula1),i=(u=e.formula1)!=null?u:"",d=this._lexerTreeBuilder.checkIfAddBracket(i)===0&&i.startsWith(E.operatorToken.EQUALS);return{success:r&&d,formula1:r&&d?"":this.localeService.t("dataValidation.validFail.formula")}}async parseFormula(e,t,a){return{formula1:void 0,formula2:void 0,isFormulaValid:!0}}async isValidType(e,t,a){const{column:r,row:i,unitId:l,subUnitId:d}=e,u=await this._customFormulaService.getCellFormulaValue(l,d,a.uid,i,r),c=u==null?void 0:u.v;return M(String(c))&&o.Tools.isDefine(c)&&c!==""?u.t===o.CellValueType.BOOLEAN?!!c:typeof c=="boolean"?c:typeof c=="number"?!!c:typeof c=="string"?M(c):!!c:!1}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.custom.error")}generateRuleName(e){var t;return this.localeService.t("dataValidation.custom.ruleName").replace("{FORMULA1}",(t=e.formula1)!=null?t:"")}}class Be extends ve{constructor(){super(...arguments);p(this,"id",o.DataValidationType.LIST_MULTIPLE);p(this,"title","dataValidation.listMultiple.title");p(this,"offsetFormulaByRange",!1);p(this,"skipDefaultFontRender",()=>!0)}}class _t extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));p(this,"id",o.DataValidationType.WHOLE);p(this,"title","dataValidation.whole.title");p(this,"order",10);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"])}_isFormulaOrInt(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}async isValidType(e,t,a){const{value:r}=e,i=G(r);return!Number.isNaN(i)&&Number.isInteger(i)}transform(e,t,a){const{value:r}=e;return{...e,value:G(r)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=o.isFormulaString(u)?l==null?void 0:l.v:u,m=o.isFormulaString(c)?d==null?void 0:d.v:c,f=M(`${h}`)&&M(`${m}`);return{formula1:this._parseNumber(h),formula2:this._parseNumber(m),isFormulaValid:f}}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),d=le.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:u}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(ae.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(ae[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}var Vt=Object.getOwnPropertyDescriptor,Rt=(n,s,e,t)=>{for(var a=t>1?void 0:t?Vt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},b=(n,s)=>(e,t)=>s(e,t,n);let ne=class extends o.RxDisposable{constructor(n,s,e,t,a,r){super(),this._univerInstanceService=n,this._dataValidatorRegistryService=s,this._injector=e,this._selectionManagerService=t,this._sheetInterceptorService=a,this._sheetDataValidationModel=r,this._init()}_init(){this._registerValidators(),this._initCommandInterceptor()}_registerValidators(){[ft,tt,_t,nt,Te,ye,ve,Be,vt].forEach(n=>{const s=this._injector.createInstance(n);this.disposeWithMe(this._dataValidatorRegistryService.register(s)),this.disposeWithMe(o.toDisposable(()=>this._injector.delete(n)))})}_initCommandInterceptor(){this._sheetInterceptorService.interceptCommand({getMutations:n=>{var s;if(n.id===R.ClearSelectionAllCommand.id){const e=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET),t=e.getUnitId(),a=e.getActiveSheet();if(!a)throw new Error("No active sheet found");const r=a.getSheetId(),i=(s=this._selectionManagerService.getCurrentSelections())==null?void 0:s.map(h=>h.range),l=this._sheetDataValidationModel.getRuleObjectMatrix(t,r).clone();i&&l.removeRange(i);const d=l.diff(this._sheetDataValidationModel.getRules(t,r)),{redoMutations:u,undoMutations:c}=K(t,r,d,this._injector,"patched");return{undos:c,redos:u}}return{undos:[],redos:[]}}})}};ne=Rt([b(0,o.IUniverInstanceService),b(1,o.Inject(g.DataValidatorRegistryService)),b(2,o.Inject(o.Injector)),b(3,o.Inject(R.SheetsSelectionsService)),b(4,o.Inject(R.SheetInterceptorService)),b(5,o.Inject(exports.SheetDataValidationModel))],ne);var Dt=Object.getOwnPropertyDescriptor,Mt=(n,s,e,t)=>{for(var a=t>1?void 0:t?Dt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},te=(n,s)=>(e,t)=>s(e,t,n);exports.SheetsDataValidationValidatorService=class extends o.Disposable{constructor(s,e,t,a){super(),this._univerInstanceService=s,this._sheetDataValidationModel=e,this._dataValidationCacheService=t,this._lifecycleService=a,this._initRecalculate()}_initRecalculate(){const s=e=>{if(e.length===0)return;const t=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET),a=t==null?void 0:t.getActiveSheet(),r={};e.flat().forEach(i=>{r[i.unitId]||(r[i.unitId]={}),r[i.unitId][i.subUnitId]||(r[i.unitId][i.subUnitId]=[]);const l=this._univerInstanceService.getUnit(i.unitId,o.UniverInstanceType.UNIVER_SHEET),d=l==null?void 0:l.getSheetBySheetId(i.subUnitId);d&&r[i.unitId][i.subUnitId].push(...i.ranges.map(u=>o.Range.transformRange(u,d)))}),Object.entries(r).forEach(([i,l])=>{Object.entries(l).forEach(([d,u])=>{(t==null?void 0:t.getUnitId())===i&&(a==null?void 0:a.getSheetId())===d?this.validatorRanges(i,d,u):requestIdleCallback(()=>{this.validatorRanges(i,d,u)})})})};this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(B.bufferWhen(()=>this._lifecycleService.lifecycle$.pipe(B.filter(e=>e===o.LifecycleStages.Rendered)))).subscribe(s)),this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(B.filter(()=>this._lifecycleService.stage>=o.LifecycleStages.Rendered),o.bufferDebounceTime(20)).subscribe(s))}async _validatorByCell(s,e,t,a){const r=s.getUnitId(),i=e.getSheetId();if(!o.Tools.isDefine(t)||!o.Tools.isDefine(a))throw new Error(`row or col is not defined, row: ${t}, col: ${a}`);const l=this._sheetDataValidationModel.getRuleByLocation(r,i,t,a);return l?new Promise(d=>{this._sheetDataValidationModel.validator(l,{unitId:r,subUnitId:i,row:t,col:a,worksheet:e,workbook:s},u=>{d(u)})}):o.DataValidationStatus.VALID}async validatorCell(s,e,t,a){const r=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!r)throw new Error(`cannot find current workbook, unitId: ${s}`);const i=r.getSheetBySheetId(e);if(!i)throw new Error(`cannot find current worksheet, sheetId: ${e}`);return this._validatorByCell(r,i,t,a)}validatorRanges(s,e,t){if(!t.length)return Promise.resolve([]);const a=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!a)throw new Error(`cannot find current workbook, unitId: ${s}`);const r=a.getSheetBySheetId(e);if(!r)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const l=this._sheetDataValidationModel.getRules(s,e).map(u=>u.ranges).flat(),d=t.map(u=>l.map(c=>o.getIntersectRange(u,c))).flat().filter(Boolean);return Promise.all(d.map(u=>{const c=[];return o.Range.foreach(u,(h,m)=>{c.push(this._validatorByCell(a,r,h,m))}),Promise.all(c)}))}async validatorWorksheet(s,e){const t=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!t)throw new Error(`cannot find current workbook, unitId: ${s}`);const a=t.getSheetBySheetId(e);if(!a)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const r=this._sheetDataValidationModel.getRules(s,e);return await Promise.all(r.map(i=>Promise.all(i.ranges.map(l=>{const d=[];return o.Range.foreach(l,(u,c)=>{d.push(this._validatorByCell(t,a,u,c))}),Promise.all(d)})))),this._dataValidationCacheService.ensureCache(s,e)}async validatorWorkbook(s){const e=this._sheetDataValidationModel.getSubUnitIds(s),t=await Promise.all(e.map(r=>this.validatorWorksheet(s,r))),a={};return t.forEach((r,i)=>{a[e[i]]=r}),a}getDataValidations(s,e,t){const a=this._sheetDataValidationModel.getRuleObjectMatrix(s,e),r=new Set;return t.forEach(l=>{o.Range.foreach(l,(d,u)=>{const c=a.getValue(d,u);c&&r.add(c)})}),Array.from(r).map(l=>this._sheetDataValidationModel.getRuleById(s,e,l)).filter(Boolean)}getDataValidation(s,e,t){return this.getDataValidations(s,e,t)[0]}};exports.SheetsDataValidationValidatorService=Mt([te(0,o.IUniverInstanceService),te(1,o.Inject(exports.SheetDataValidationModel)),te(2,o.Inject(exports.DataValidationCacheService)),te(3,o.Inject(o.LifecycleService))],exports.SheetsDataValidationValidatorService);var Et=Object.defineProperty,yt=Object.getOwnPropertyDescriptor,Tt=(n,s,e)=>s in n?Et(n,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[s]=e,Ot=(n,s,e,t)=>{for(var a=t>1?void 0:t?yt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},Se=(n,s)=>(e,t)=>s(e,t,n),xe=(n,s,e)=>Tt(n,typeof s!="symbol"?s+"":s,e);exports.UniverSheetsDataValidationPlugin=class extends o.Plugin{constructor(s=Me,e,t,a){super(),this._config=s,this._injector=e,this._commandService=t,this._configService=a;const{...r}=o.merge({},Me,this._config);this._configService.setConfig(ut,r)}onStarting(){[[exports.DataValidationCacheService],[exports.DataValidationListCacheService],[exports.DataValidationFormulaService],[exports.DataValidationCustomFormulaService],[exports.SheetsDataValidationValidatorService],[exports.SheetDataValidationModel],[ne],[exports.DataValidationFormulaController],[oe],[ie],[re]].forEach(s=>{this._injector.add(s)}),[Ce,Fe,Ie,Ne,we,Ue,Ae].forEach(s=>{this._commandService.registerCommand(s)}),this._injector.get(exports.DataValidationCacheService),this._injector.get(exports.SheetsDataValidationValidatorService),this._injector.get(ne),this._injector.get(re),this._injector.get(ie)}onReady(){this._injector.get(oe)}onRendered(){this._injector.get(exports.DataValidationFormulaController)}};xe(exports.UniverSheetsDataValidationPlugin,"pluginName",be);xe(exports.UniverSheetsDataValidationPlugin,"type",o.UniverInstanceType.UNIVER_SHEET);exports.UniverSheetsDataValidationPlugin=Ot([o.DependentOn(g.UniverDataValidationPlugin),Se(1,o.Inject(o.Injector)),Se(2,o.ICommandService),Se(3,o.IConfigService)],exports.UniverSheetsDataValidationPlugin);function Ft(n){const e=n.get(R.SheetsSelectionsService).getCurrentSelections().map(r=>r.range);return{uid:o.generateRandomId(6),type:o.DataValidationType.DECIMAL,operator:o.DataValidationOperator.EQUAL,formula1:"100",ranges:e!=null?e:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}const Ct="data-validation.custom-formula-input",It="data-validation.formula-input",Nt="data-validation.list-formula-input",At="data-validation.checkbox-formula-input";exports.AddSheetDataValidationCommand=Ce;exports.BASE_FORMULA_INPUT_NAME=It;exports.CHECKBOX_FORMULA_1=$;exports.CHECKBOX_FORMULA_2=k;exports.CHECKBOX_FORMULA_INPUT_NAME=At;exports.CUSTOM_FORMULA_INPUT_NAME=Ct;exports.CheckboxValidator=ye;exports.ClearRangeDataValidationCommand=Ae;exports.DATA_VALIDATION_PLUGIN_NAME=be;exports.DateValidator=Te;exports.LIST_FORMULA_INPUT_NAME=Nt;exports.ListMultipleValidator=Be;exports.ListValidator=ve;exports.RemoveSheetAllDataValidationCommand=Ue;exports.RemoveSheetDataValidationCommand=we;exports.UpdateSheetDataValidationOptionsCommand=Ne;exports.UpdateSheetDataValidationRangeCommand=Fe;exports.UpdateSheetDataValidationSettingCommand=Ie;exports.createDefaultNewRule=Ft;exports.deserializeListOptions=W;exports.getCellValueNumber=G;exports.getCellValueOrigin=N;exports.getDataValidationCellValue=Qe;exports.getDataValidationDiffMutations=K;exports.getFormulaCellData=P;exports.getFormulaResult=L;exports.getTransformedFormula=X;exports.isLegalFormulaResult=M;exports.serializeListOptions=qe;exports.transformCheckboxValue=H;
|
|
1
|
+
"use strict";var je=Object.defineProperty;var Pe=(n,s,e)=>s in n?je(n,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[s]=e;var p=(n,s,e)=>Pe(n,typeof s!="symbol"?s+"":s,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),g=require("@univerjs/data-validation"),E=require("@univerjs/engine-formula"),R=require("@univerjs/sheets"),B=require("rxjs"),se=require("@univerjs/sheets-formula");var He=Object.getOwnPropertyDescriptor,We=(n,s,e,t)=>{for(var a=t>1?void 0:t?He(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},ce=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationCacheService=class extends o.Disposable{constructor(e,t,a){super();p(this,"_cacheMatrix",new Map);p(this,"_dirtyRanges$",new B.Subject);p(this,"dirtyRanges$",this._dirtyRanges$.asObservable());this._commandService=e,this._univerInstanceService=t,this._sheetDataValidationModel=a,this._initDirtyRanges(),this._initSheetRemove()}_initDirtyRanges(){this.disposeWithMe(this._commandService.onCommandExecuted((e,t)=>{if(e.id===R.SetRangeValuesMutation.id&&!(t!=null&&t.onlyLocal)){const{cellValue:a,unitId:r,subUnitId:i}=e.params;if(a){const l=new o.ObjectMatrix(a).getDataRange();if(l.endRow===-1)return;const c=this._sheetDataValidationModel.getRules(r,i).map(h=>h.ranges).flat().map(h=>o.getIntersectRange(h,l)).filter(Boolean);c.length&&this.markRangeDirty(r,i,c,!0)}}}))}_initSheetRemove(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{var t;if(e.id===R.RemoveSheetMutation.id){const{unitId:a,subUnitId:r}=e.params;(t=this._cacheMatrix.get(a))==null||t.delete(r)}})),this.disposeWithMe(this._univerInstanceService.unitDisposed$.subscribe(e=>{e.type===o.UniverInstanceType.UNIVER_SHEET&&this._cacheMatrix.delete(e.getUnitId())}))}_ensureCache(e,t){let a=this._cacheMatrix.get(e);a||(a=new Map,this._cacheMatrix.set(e,a));let r=a.get(t);return r||(r=new o.ObjectMatrix,a.set(t,r)),r}ensureCache(e,t){return this._ensureCache(e,t)}addRule(e,t,a){this.markRangeDirty(e,t,a.ranges)}removeRule(e,t,a){this._deleteRange(e,t,a.ranges)}markRangeDirty(e,t,a,r){const i=this._ensureCache(e,t);a.forEach(l=>{o.Range.foreach(l,(d,u)=>{i.getValue(d,u)!==void 0&&i.setValue(d,u,void 0)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a,isSetRange:r})}_deleteRange(e,t,a){const r=this._ensureCache(e,t);a.forEach(i=>{o.Range.foreach(i,(l,d)=>{r.realDeleteValue(l,d)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a})}getValue(e,t,a,r){return this._ensureCache(e,t).getValue(a,r)}};exports.DataValidationCacheService=We([ce(0,o.Inject(o.ICommandService)),ce(1,o.Inject(o.IUniverInstanceService)),ce(2,o.Inject(g.DataValidationModel))],exports.DataValidationCacheService);function L(n){var s,e;return(e=(s=n==null?void 0:n[0])==null?void 0:s[0])==null?void 0:e.v}function P(n){var s;return(s=n==null?void 0:n[0])==null?void 0:s[0]}function M(n){return!E.ERROR_TYPE_SET.has(n)}function Y(n,s){var t;const e=s.getValidatorItem(n);return(t=e==null?void 0:e.offsetFormulaByRange)!=null?t:!1}var $e=Object.getOwnPropertyDescriptor,ke=(n,s,e,t)=>{for(var a=t>1?void 0:t?$e(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},j=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationCustomFormulaService=class extends o.Disposable{constructor(e,t,a,r,i){super();p(this,"_ruleFormulaMap",new Map);p(this,"_ruleFormulaMap2",new Map);this._instanceSrv=e,this._registerOtherFormulaService=t,this._dataValidationModel=a,this._dataValidationCacheService=r,this._validatorRegistryService=i,this._initFormulaResultHandler(),this._initDirtyRanges()}dispose(){super.dispose(),this._ruleFormulaMap.clear(),this._ruleFormulaMap2.clear()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceSrv.getUnitType(t)===o.UniverInstanceType.UNIVER_SHEET)for(const i in a){const l=a[i],{ruleFormulaMap:d}=this._ensureMaps(t,i);l.forEach(u=>{var m,S;const c=d.get((m=u.extra)==null?void 0:m.ruleId),h=this._dataValidationModel.getRuleById(t,i,(S=u.extra)==null?void 0:S.ruleId);h&&c&&this._dataValidationCacheService.markRangeDirty(t,i,h.ranges)})}}}))}_ensureMaps(e,t){let a=this._ruleFormulaMap.get(e),r=this._ruleFormulaMap2.get(e);a||(a=new Map,this._ruleFormulaMap.set(e,a)),r||(r=new Map,this._ruleFormulaMap2.set(e,r));let i=a.get(t);i||(i=new Map,a.set(t,i));let l=r.get(t);return l||(l=new Map,r.set(t,l)),{ruleFormulaMap:i,ruleFormulaMap2:l}}_registerFormula(e,t,a,r,i){return this._registerOtherFormulaService.registerFormulaWithRange(e,t,r,i,{ruleId:a})}_handleDirtyRanges(e,t,a){this._dataValidationModel.getRules(e,t).forEach(i=>{const l=i.ranges;o.Rectangle.doAnyRangesIntersect(l,a)&&this.makeRuleDirty(e,t,i.uid)})}_initDirtyRanges(){this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.subscribe(e=>{e.isSetRange&&this._handleDirtyRanges(e.unitId,e.subUnitId,e.ranges)}))}deleteByRuleId(e,t,a){const{ruleFormulaMap:r,ruleFormulaMap2:i}=this._ensureMaps(e,t),l=this._dataValidationModel.getRuleById(e,t,a),d=r.get(a);if(!l||!d)return;const u=r.get(a);u&&(r.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[u.formulaId]));const c=i.get(a);c&&(i.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[c.formulaId]))}_addFormulaByRange(e,t,a,r,i,l){const{ruleFormulaMap:d,ruleFormulaMap2:u}=this._ensureMaps(e,t),c=l[0].startRow,h=l[0].startColumn;if(r&&o.isFormulaString(r)){const m=this._registerFormula(e,t,a,r,l);d.set(a,{formula:r,originCol:h,originRow:c,formulaId:m})}if(i&&o.isFormulaString(i)){const m=this._registerFormula(e,t,a,i,l);u.set(a,{formula:i,originCol:h,originRow:c,formulaId:m})}}addRule(e,t,a){if(Y(a.type,this._validatorRegistryService)){const{ranges:r,formula1:i,formula2:l,uid:d}=a;this._addFormulaByRange(e,t,d,i,l,r)}}async getCellFormulaValue(e,t,a,r,i){var v,_;const{ruleFormulaMap:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return Promise.resolve(void 0);const u=await this._registerOtherFormulaService.getFormulaValue(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}async getCellFormula2Value(e,t,a,r,i){var v,_;const{ruleFormulaMap2:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return Promise.resolve(void 0);const u=await this._registerOtherFormulaService.getFormulaValue(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}getCellFormulaValueSync(e,t,a,r,i){var v,_;const{ruleFormulaMap:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return;const u=this._registerOtherFormulaService.getFormulaValueSync(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}getCellFormula2ValueSync(e,t,a,r,i){var v,_;const{ruleFormulaMap2:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return;const u=this._registerOtherFormulaService.getFormulaValueSync(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}getRuleFormulaInfo(e,t,a){const{ruleFormulaMap:r}=this._ensureMaps(e,t);return r.get(a)}makeRuleDirty(e,t,a){var l,d,u,c;const r=(d=(l=this._ruleFormulaMap.get(e))==null?void 0:l.get(t))==null?void 0:d.get(a),i=(c=(u=this._ruleFormulaMap2.get(e))==null?void 0:u.get(t))==null?void 0:c.get(a);r&&this._registerOtherFormulaService.markFormulaDirty(e,t,r.formulaId),i&&this._registerOtherFormulaService.markFormulaDirty(e,t,i.formulaId)}};exports.DataValidationCustomFormulaService=ke([j(0,o.IUniverInstanceService),j(1,o.Inject(se.RegisterOtherFormulaService)),j(2,o.Inject(g.DataValidationModel)),j(3,o.Inject(exports.DataValidationCacheService)),j(4,o.Inject(g.DataValidatorRegistryService))],exports.DataValidationCustomFormulaService);function N(n){return o.getOriginCellValue(n)}function Ee(n){var s;return String((s=N(n))!=null?s:"")}function qe(n){return n.filter(Boolean).join(",")}function W(n){return n.split(",").filter(Boolean)}function Qe(n){const s=N(n);return s==null?"":s.toString()}function X(n,s,e){const{formula1:t,formula2:a}=s,r=s.ranges[0].startRow,i=s.ranges[0].startColumn,l=e.row-r,d=e.col-i,u=o.isFormulaString(t)?n.moveFormulaRefOffset(t,d,l,!0):t,c=o.isFormulaString(a)?n.moveFormulaRefOffset(a,d,l,!0):a;return{transformedFormula1:u,transformedFormula2:c}}var Ge=Object.getOwnPropertyDescriptor,Ye=(n,s,e,t)=>{for(var a=t>1?void 0:t?Ge(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},Ve=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationListCacheService=class extends o.Disposable{constructor(e,t){super();p(this,"_cache",new Map);this._injector=e,this._dataValidationModel=t,this._initRuleChangeListener()}_initRuleChangeListener(){this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{(e.type==="remove"||e.type==="update")&&this.markRuleDirty(e.unitId,e.subUnitId,e.rule.uid)}))}getOrCompute(e,t,a){const r=this.getCache(e,t,a.uid);if(r)return r;const l=this._injector.get(exports.DataValidationFormulaService).getRuleFormulaResultSync(e,t,a.uid);return this.computeAndCache(e,t,a,l)}_ensureCache(e,t){let a=this._cache.get(e);a||(a=new Map,this._cache.set(e,a));let r=a.get(t);return r||(r=new Map,a.set(t,r)),r}getCache(e,t,a){var r,i;return(i=(r=this._cache.get(e))==null?void 0:r.get(t))==null?void 0:i.get(a)}setCache(e,t,a,r){this._ensureCache(e,t).set(a,r)}markRuleDirty(e,t,a){var r,i;(i=(r=this._cache.get(e))==null?void 0:r.get(t))==null||i.delete(a)}clear(){this._cache.clear()}computeAndCache(e,t,a,r){var v,_,V;const{formula1:i="",formula2:l=""}=a,d=o.isFormulaString(i)?this._getRuleFormulaResultSet((V=(_=(v=r==null?void 0:r[0])==null?void 0:v.result)==null?void 0:_[0])==null?void 0:V[0]):W(i),u=l.split(","),c=d.map((f,D)=>({label:f,color:u[D]||""})),h={};for(const f of c)f.color&&(h[f.label]=f.color);const m=new Set(d),S={list:d,listWithColor:c,colorMap:h,set:m};return this.setCache(e,t,a.uid,S),S}_getRuleFormulaResultSet(e){var a,r;if(!e)return[];const t=new Set;for(let i=0,l=e.length;i<l;i++){const d=e[i];if(d)for(let u=0,c=d.length;u<c;u++){const h=d[u],m=N(h);if(m!=null){if(typeof m!="string"&&typeof(h==null?void 0:h.s)=="object"&&((r=(a=h.s)==null?void 0:a.n)!=null&&r.pattern)){t.add(o.numfmt.format(h.s.n.pattern,m,{throws:!1}));continue}const S=typeof m=="string"?m:String(m);M(S)&&t.add(S)}}}return[...t]}};exports.DataValidationListCacheService=Ye([Ve(0,o.Inject(o.Injector)),Ve(1,o.Inject(g.DataValidationModel))],exports.DataValidationListCacheService);var Xe=Object.getOwnPropertyDescriptor,Ke=(n,s,e,t)=>{for(var a=t>1?void 0:t?Xe(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},w=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationFormulaService=class extends o.Disposable{constructor(e,t,a,r,i,l){super();p(this,"_formulaRuleMap",new Map);this._instanceService=e,this._registerOtherFormulaService=t,this._dataValidationCacheService=a,this._dataValidationModel=r,this._validatorRegistryService=i,this._listCacheService=l,this._initFormulaResultHandler()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceService.getUnitType(t)===o.UniverInstanceType.UNIVER_SHEET)for(const i in a){const l=a[i],d=this._ensureRuleFormulaMap(t,i);l.forEach(u=>{var h;const c=(h=u.extra)==null?void 0:h.ruleId;if(c&&d.get(c)){const m=this._dataValidationModel.getRuleById(t,i,c);m&&(this._listCacheService.markRuleDirty(t,i,c),this._dataValidationCacheService.markRangeDirty(t,i,m.ranges))}})}}}))}_ensureRuleFormulaMap(e,t){let a=this._formulaRuleMap.get(e);a||(a=new Map,this._formulaRuleMap.set(e,a));let r=a.get(t);return r||(r=new Map,a.set(t,r)),r}_registerSingleFormula(e,t,a,r){const i=[{startColumn:0,endColumn:0,startRow:0,endRow:0}];return this._registerOtherFormulaService.registerFormulaWithRange(e,t,a,i,{ruleId:r})}addRule(e,t,a){if(!Y(a.type,this._validatorRegistryService)&&a.type!==o.DataValidationType.CHECKBOX){const{formula1:r,formula2:i,uid:l}=a,d=o.isFormulaString(r),u=o.isFormulaString(i);if(!d&&!u)return;const c=this._ensureRuleFormulaMap(e,t),h=[void 0,void 0];if(d){const m=this._registerSingleFormula(e,t,r,l);h[0]={id:m,text:r}}if(u){const m=this._registerSingleFormula(e,t,i,l);h[1]={id:m,text:i}}c.set(l,h)}}removeRule(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(!i)return;const[l,d]=i,u=[l==null?void 0:l.id,d==null?void 0:d.id].filter(Boolean);u.length&&this._registerOtherFormulaService.deleteFormula(e,t,u)}getRuleFormulaResult(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(!i)return Promise.resolve(null);const l=async d=>d&&this._registerOtherFormulaService.getFormulaValue(e,t,d.id);return Promise.all([l(i[0]),l(i[1])])}getRuleFormulaResultSync(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(i)return i.map(l=>{if(l)return this._registerOtherFormulaService.getFormulaValueSync(e,t,l.id)})}getRuleFormulaInfo(e,t,a){return this._ensureRuleFormulaMap(e,t).get(a)}};exports.DataValidationFormulaService=Ke([w(0,o.IUniverInstanceService),w(1,o.Inject(se.RegisterOtherFormulaService)),w(2,o.Inject(exports.DataValidationCacheService)),w(3,o.Inject(g.DataValidationModel)),w(4,o.Inject(g.DataValidatorRegistryService)),w(5,o.Inject(exports.DataValidationListCacheService))],exports.DataValidationFormulaService);class fe{constructor(s,e,t,a,r=!1){p(this,"_map");p(this,"_tree",new o.RBush);p(this,"_dirty",!0);p(this,"_buildTree",()=>{if(!this._dirty||this._disableTree)return;this._tree.clear();const s=[];this._map.forEach((e,t)=>{e.forEach(a=>{s.push({minX:a.startRow,maxX:a.endRow,minY:a.startColumn,maxY:a.endColumn,ruleId:t})})}),this._tree.load(s),this._dirty=!1});p(this,"_debonceBuildTree",o.debounce(this._buildTree,0));this._unitId=e,this._subUnitId=t,this._univerInstanceService=a,this._disableTree=r,this._map=s,this._buildTree()}get _worksheet(){var s;return(s=this._univerInstanceService.getUnit(this._unitId,o.UniverInstanceType.UNIVER_SHEET))==null?void 0:s.getSheetBySheetId(this._subUnitId)}_addRule(s,e){if(!this._worksheet)return;const t=o.Rectangle.mergeRanges(e.map(a=>o.Range.transformRange(a,this._worksheet)));this._map.forEach((a,r)=>{const i=o.Rectangle.subtractMulti(a,t);i.length===0?this._map.delete(r):this._map.set(r,i)}),this._dirty=!0,this._map.set(s,t),this._debonceBuildTree()}addRule(s){this._addRule(s.uid,s.ranges)}removeRange(s){if(!this._worksheet)return;const e=s.map(t=>o.Range.transformRange(t,this._worksheet));this._map.forEach((t,a)=>{const r=o.Rectangle.subtractMulti(t,e);r.length===0?this._map.delete(a):this._map.set(a,r)}),this._dirty=!0,this._debonceBuildTree()}_removeRule(s){this._map.delete(s),this._dirty=!0,this._debonceBuildTree()}removeRule(s){this._removeRule(s.uid)}updateRange(s,e){this._removeRule(s),this._addRule(s,e)}addRangeRules(s){s.forEach(({id:e,ranges:t})=>{if(!t.length)return;let a=this._map.get(e);a?(this._map.set(e,o.Rectangle.mergeRanges([...a,...t])),a=this._map.get(e)):(a=t,this._map.set(e,a)),this._map.forEach((r,i)=>{if(i===e)return;const l=o.Rectangle.subtractMulti(r,t);l.length===0?this._map.delete(i):this._map.set(i,l)})}),this._dirty=!0,this._debonceBuildTree()}diff(s){const e=[];let t=0;return s.forEach((a,r)=>{var d;const i=(d=this._map.get(a.uid))!=null?d:[],l=a.ranges;i.length!==0&&(i.length!==l.length||i.some((u,c)=>!o.Rectangle.equals(u,l[c])))&&e.push({type:"update",ruleId:a.uid,oldRanges:l,newRanges:o.Rectangle.sort(i),rule:a}),i.length===0&&(e.push({type:"delete",rule:a,index:r-t}),t++)}),e}diffWithAddition(s,e){const t=[];let a=0;return s.forEach((r,i)=>{var u;const l=(u=this._map.get(r.uid))!=null?u:[],d=r.ranges;l.length!==0&&(l.length!==d.length||l.some((c,h)=>!o.Rectangle.equals(c,d[h])))&&t.push({type:"update",ruleId:r.uid,oldRanges:d,newRanges:o.Rectangle.sort(l),rule:r}),l.length===0&&(t.push({type:"delete",rule:r,index:i-a}),a++)}),Array.from(e).forEach(r=>{var l;const i=(l=this._map.get(r.uid))!=null?l:[];t.push({type:"add",rule:{...r,ranges:o.Rectangle.sort(i)}})}),t}clone(){return new fe(new Map(o.Tools.deepClone(Array.from(this._map.entries()))),this._unitId,this._subUnitId,this._univerInstanceService,!0)}getValue(s,e){this._dirty&&this._buildTree();const t=this._tree.search({minX:s,maxX:s,minY:e,maxY:e});return t.length>0?t[0].ruleId:void 0}}var ze=Object.getOwnPropertyDescriptor,Ze=(n,s,e,t)=>{for(var a=t>1?void 0:t?ze(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},I=(n,s)=>(e,t)=>s(e,t,n);exports.SheetDataValidationModel=class extends o.Disposable{constructor(e,t,a,r,i,l,d){super();p(this,"_ruleMatrixMap",new Map);p(this,"_validStatusChange$",new B.Subject);p(this,"_ruleChange$",new B.Subject);p(this,"ruleChange$",this._ruleChange$.asObservable());p(this,"validStatusChange$",this._validStatusChange$.asObservable());this._dataValidationModel=e,this._univerInstanceService=t,this._dataValidatorRegistryService=a,this._dataValidationCacheService=r,this._dataValidationFormulaService=i,this._dataValidationCustomFormulaService=l,this._commandService=d,this._initRuleUpdateListener(),this.disposeWithMe(()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()}),this._initUniverInstanceListener()}_initUniverInstanceListener(){this.disposeWithMe(this._univerInstanceService.unitDisposed$.subscribe(e=>{this._ruleMatrixMap.delete(e.getUnitId())})),this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===R.RemoveSheetMutation.id){const{unitId:t,subUnitId:a}=e.params,r=this._ruleMatrixMap.get(t);r&&r.delete(a)}}))}_initRuleUpdateListener(){const e=this._dataValidationModel.getAll();for(const[t,a]of e)for(const[r,i]of a)for(const l of i)this._addRule(t,r,l),this._ruleChange$.next({type:"add",unitId:t,subUnitId:r,rule:l,source:"patched"});this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(t=>{switch(t.type){case"add":this._addRule(t.unitId,t.subUnitId,t.rule);break;case"update":this._updateRule(t.unitId,t.subUnitId,t.rule.uid,t.oldRule,t.updatePayload);break;case"remove":this._removeRule(t.unitId,t.subUnitId,t.rule);break}this._ruleChange$.next(t)}))}_ensureRuleMatrix(e,t){let a=this._ruleMatrixMap.get(e);a||(a=new Map,this._ruleMatrixMap.set(e,a));let r=a.get(t);return r||(r=new fe(new Map,e,t,this._univerInstanceService),a.set(t,r)),r}_addRuleSideEffect(e,t,a){this._ensureRuleMatrix(e,t).addRule(a),this._dataValidationCacheService.addRule(e,t,a),this._dataValidationFormulaService.addRule(e,t,a),this._dataValidationCustomFormulaService.addRule(e,t,a)}_addRule(e,t,a){(Array.isArray(a)?a:[a]).forEach(i=>{this._addRuleSideEffect(e,t,i)})}_updateRule(e,t,a,r,i){const l=this._ensureRuleMatrix(e,t),d={...r,...i.payload};i.type===g.UpdateRuleType.RANGE?l.updateRange(a,i.payload):i.type===g.UpdateRuleType.ALL&&l.updateRange(a,i.payload.ranges),this._dataValidationCacheService.removeRule(e,t,r),this._dataValidationCacheService.addRule(e,t,d),this._dataValidationFormulaService.removeRule(e,t,r.uid),this._dataValidationFormulaService.addRule(e,t,d),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a),this._dataValidationCustomFormulaService.addRule(e,t,d)}_removeRule(e,t,a){this._ensureRuleMatrix(e,t).removeRule(a),this._dataValidationCacheService.removeRule(e,t,a),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a.uid)}getValidator(e){return this._dataValidatorRegistryService.getValidatorItem(e)}getRuleIdByLocation(e,t,a,r){return this._ensureRuleMatrix(e,t).getValue(a,r)}getRuleByLocation(e,t,a,r){const i=this.getRuleIdByLocation(e,t,a,r);if(i)return this._dataValidationModel.getRuleById(e,t,i)}validator(e,t,a){const{col:r,row:i,unitId:l,subUnitId:d,worksheet:u}=t,c=(_,V)=>{a&&a(_,V),V&&this._validStatusChange$.next({unitId:l,subUnitId:d,ruleId:e.uid,status:_,row:i,col:r})},h=u.getCellValueOnly(i,r),m=this.getValidator(e.type),S=u.getCellRaw(i,r),v=N(S);if(m){const _=this._dataValidationCacheService.ensureCache(l,d),V=_.getValue(i,r);return V==null?(_.setValue(i,r,o.DataValidationStatus.VALIDATING),m.validator({value:v,unitId:l,subUnitId:d,row:i,column:r,worksheet:t.worksheet,workbook:t.workbook,interceptValue:N(h),t:S==null?void 0:S.t},e).then(f=>{const D=f?o.DataValidationStatus.VALID:o.DataValidationStatus.INVALID,y=_.getValue(i,r);D===o.DataValidationStatus.VALID?_.realDeleteValue(i,r):_.setValue(i,r,D),c(D,V!==y)}),o.DataValidationStatus.VALIDATING):(c(V!=null?V:o.DataValidationStatus.VALID,!1),V!=null?V:o.DataValidationStatus.VALID)}else return c(o.DataValidationStatus.VALID,!1),o.DataValidationStatus.VALID}getRuleObjectMatrix(e,t){return this._ensureRuleMatrix(e,t)}getRuleById(e,t,a){return this._dataValidationModel.getRuleById(e,t,a)}getRuleIndex(e,t,a){return this._dataValidationModel.getRuleIndex(e,t,a)}getRules(e,t){return[...this._dataValidationModel.getRules(e,t)]}getUnitRules(e){return this._dataValidationModel.getUnitRules(e)}deleteUnitRules(e){return this._dataValidationModel.deleteUnitRules(e)}getSubUnitIds(e){return this._dataValidationModel.getSubUnitIds(e)}getAll(){return this._dataValidationModel.getAll()}};exports.SheetDataValidationModel=Ze([I(0,o.Inject(g.DataValidationModel)),I(1,o.IUniverInstanceService),I(2,o.Inject(g.DataValidatorRegistryService)),I(3,o.Inject(exports.DataValidationCacheService)),I(4,o.Inject(exports.DataValidationFormulaService)),I(5,o.Inject(exports.DataValidationCustomFormulaService)),I(6,o.ICommandService)],exports.SheetDataValidationModel);const $=1,k=0;function Re(n,s){return o.Tools.isBlank(n)?s.t("dataValidation.validFail.value"):o.isFormulaString(n)?s.t("dataValidation.validFail.primitive"):""}const H=n=>o.Tools.isDefine(n)&&String(n).toLowerCase()==="true"?"1":String(n).toLowerCase()==="false"?"0":n;class ye extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.CHECKBOX);p(this,"title","dataValidation.checkbox.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",41);p(this,"offsetFormulaByRange",!1);p(this,"_formulaService",this.injector.get(exports.DataValidationFormulaService));p(this,"skipDefaultFontRender",(e,t,a)=>{const{unitId:r,subUnitId:i}=a,{formula1:l,formula2:d}=this.parseFormulaSync(e,r,i),u=`${t!=null?t:""}`;return!u||u===`${l}`||u===`${d}`})}validatorFormula(e,t,a){const{formula1:r,formula2:i}=e,l=r===i;if(o.Tools.isBlank(r)&&o.Tools.isBlank(i))return{success:!0};if(l)return{success:!1,formula1:this.localeService.t("dataValidation.validFail.checkboxEqual"),formula2:this.localeService.t("dataValidation.validFail.checkboxEqual")};const d=Re(r,this.localeService),u=Re(i,this.localeService);return{success:!d&&!u,formula1:d,formula2:u}}async parseFormula(e,t,a){var h,m,S,v;const{formula1:r=$,formula2:i=k}=e,l=await this._formulaService.getRuleFormulaResult(t,a,e.uid),d=o.isFormulaString(r)?L((m=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:m[0][0]):r,u=o.isFormulaString(i)?L((v=(S=l==null?void 0:l[1])==null?void 0:S.result)==null?void 0:v[0][0]):i,c=M(String(d))&&M(String(u));return{formula1:H(d),formula2:H(u),originFormula1:d,originFormula2:u,isFormulaValid:c}}getExtraStyle(e,t){return{tb:o.WrapStrategy.CLIP}}parseFormulaSync(e,t,a){var h,m,S,v;const{formula1:r=$,formula2:i=k}=e,l=this._formulaService.getRuleFormulaResultSync(t,a,e.uid),d=o.isFormulaString(r)?L((m=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:m[0][0]):r,u=o.isFormulaString(i)?L((v=(S=l==null?void 0:l[1])==null?void 0:S.result)==null?void 0:v[0][0]):i,c=M(String(d))&&M(String(u));return{formula1:H(d),formula2:H(u),originFormula1:d,originFormula2:u,isFormulaValid:c}}async isValidType(e,t,a){const{value:r,unitId:i,subUnitId:l}=e,{formula1:d,formula2:u,originFormula1:c,originFormula2:h}=await this.parseFormula(a,i,l);return!o.Tools.isDefine(d)||!o.Tools.isDefine(u)?!0:o.Tools.isDefine(r)&&(String(r)===String(d)||String(r)===String(u)||String(r)===String(c!=null?c:"")||String(r)===String(h!=null?h:""))}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.checkbox.error")}generateRuleName(e){return this.titleStr}}const Je={[o.DataValidationOperator.BETWEEN]:"dataValidation.date.operators.between",[o.DataValidationOperator.EQUAL]:"dataValidation.date.operators.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.date.operators.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.operators.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.date.operators.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.operators.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.operators.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.operators.notEqual"};o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const De={[o.DataValidationOperator.BETWEEN]:"dataValidation.date.ruleName.between",[o.DataValidationOperator.EQUAL]:"dataValidation.date.ruleName.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.date.ruleName.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.ruleName.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.date.ruleName.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.ruleName.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.ruleName.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.ruleName.notEqual",NONE:"dataValidation.date.ruleName.legal"},et={[o.DataValidationOperator.BETWEEN]:"dataValidation.date.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.date.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.date.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.date.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.errorMsg.notEqual",NONE:"dataValidation.date.errorMsg.legal"},le=[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.NOT_BETWEEN],q="{FORMULA1}",Q="{FORMULA2}",he=n=>{var e,t;if(n==null||typeof n=="boolean")return;if(typeof n=="number"||!Number.isNaN(+n))return+n;const s=(e=o.numfmt.parseDate(n))==null?void 0:e.v;return o.Tools.isDefine(s)?s:(t=o.numfmt.parseDate(o.dayjs(n).format("YYYY-MM-DD HH:mm:ss")))==null?void 0:t.v};class Te extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.DATE);p(this,"title","dataValidation.date.title");p(this,"order",40);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"]);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder))}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=M(String(l==null?void 0:l.v))&&M(String(d==null?void 0:d.v));return{formula1:he(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:he(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}async isValidType(e){const{interceptValue:t,value:a}=e;return typeof a=="number"&&typeof t=="string"||typeof t=="string"?!!o.numfmt.parseDate(t):!1}_validatorSingleFormula(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)||!!(e&&o.numfmt.parseDate(e)))}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=this._validatorSingleFormula(e.formula1),l=this.localeService.t("dataValidation.validFail.date");if(le.includes(r)){const u=this._validatorSingleFormula(e.formula2);return{success:i&&u,formula1:i?void 0:l,formula2:u?void 0:l}}return{success:i,formula1:i?void 0:l}}normalizeFormula(e,t,a){const{formula1:r,formula2:i,bizInfo:l}=e,d=u=>{var h;if(!u)return u;let c;if(!Number.isNaN(+u))c=o.numfmt.dateFromSerial(+u);else{const m=(h=o.numfmt.parseDate(u))==null?void 0:h.v;if(m==null)return"";c=o.numfmt.dateFromSerial(m)}return o.dayjs(`${c[0]}/${c[1]}/${c[2]} ${c[3]}:${c[4]}:${c[5]}`).format(l!=null&&l.showTime?"YYYY-MM-DD HH:mm:ss":"YYYY-MM-DD")};return{formula1:o.isFormulaString(r)?r:d(`${r}`),formula2:o.isFormulaString(i)?i:d(`${i}`)}}transform(e,t,a){const{value:r}=e;return{...e,value:he(r)}}get operatorNames(){return this.operators.map(e=>this.localeService.t(Je[e]))}generateRuleName(e){var a,r;if(!e.operator)return this.localeService.t(De.NONE);const t=this.localeService.t(De[e.operator]).replace(q,(a=e.formula1)!=null?a:"").replace(Q,(r=e.formula2)!=null?r:"");return`${this.titleStr} ${t}`}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(et[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const ae={[o.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual",NONE:"dataValidation.errorMsg.legal"};function G(n){return+n}class tt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"id",o.DataValidationType.DECIMAL);p(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));p(this,"title","dataValidation.decimal.title");p(this,"order",20);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"])}_isFormulaOrNumber(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e))}async isValidType(e,t,a){const{value:r}=e;return!Number.isNaN(G(r))}transform(e,t,a){const{value:r}=e;return{...e,value:G(r)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=M(String(l==null?void 0:l.v))&&M(String(d==null?void 0:d.v));return{formula1:this._parseNumber(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:this._parseNumber(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrNumber(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrNumber(e.formula2),d=le.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:i?"":u}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(ae.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(ae[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}function at(n){var e,t;if(!n)return[];const s=new Set;for(let a=0,r=n.length;a<r;a++){const i=n[a];if(i)for(let l=0,d=i.length;l<d;l++){const u=i[l],c=N(u);if(c!=null){if(typeof c!="string"&&typeof(u==null?void 0:u.s)=="object"&&((t=(e=u.s)==null?void 0:e.n)!=null&&t.pattern)){s.add(o.numfmt.format(u.s.n.pattern,c,{throws:!1}));continue}const h=typeof c=="string"?c:String(c);M(h)&&s.add(h)}}}return[...s]}const rt=["if","indirect","choose","offset"];function it(n,s){if(!o.isFormulaString(n)||E.isReferenceString(n.slice(1)))return!0;const t=s.sequenceNodesBuilder(n);return t&&t.some(a=>typeof a=="object"&&a.nodeType===E.sequenceNodeType.FUNCTION&&rt.indexOf(a.token.toLowerCase())>-1)}function ot(n,s){const{formula1:e="",ranges:t}=n;if(E.isReferenceString(e.slice(1))){const r=E.deserializeRangeWithSheet(e.slice(1));if((!r.sheetName||r.sheetName===s)&&t.some(i=>o.Rectangle.intersects(i,r.range)))return!0}return!1}class ve extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"formulaService",this.injector.get(exports.DataValidationFormulaService));p(this,"_lexer",this.injector.get(E.LexerTreeBuilder));p(this,"_univerInstanceService",this.injector.get(o.IUniverInstanceService));p(this,"_listCacheService",this.injector.get(exports.DataValidationListCacheService));p(this,"order",50);p(this,"offsetFormulaByRange",!1);p(this,"id",o.DataValidationType.LIST);p(this,"title","dataValidation.list.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"skipDefaultFontRender",e=>e.renderMode!==o.DataValidationRenderMode.TEXT)}validatorFormula(e,t,a){var u,c,h;const r=!o.Tools.isBlank(e.formula1),i=it((u=e.formula1)!=null?u:"",this._lexer),l=(h=(c=this._univerInstanceService.getUnit(t,o.UniverInstanceType.UNIVER_SHEET))==null?void 0:c.getSheetBySheetId(a))==null?void 0:h.getName(),d=ot(e,l!=null?l:"");return{success:!!(r&&i&&!d),formula1:r?i?d?this.localeService.t("dataValidation.validFail.listIntersects"):void 0:this.localeService.t("dataValidation.validFail.listInvalid"):this.localeService.t("dataValidation.validFail.list")}}getExtraStyle(e,t,{style:a}){var i;const r=(i=a.tb!==o.WrapStrategy.OVERFLOW?a.tb:o.WrapStrategy.CLIP)!=null?i:o.WrapStrategy.WRAP;if(e.type===o.DataValidationType.LIST&&(e.renderMode===o.DataValidationRenderMode.ARROW||e.renderMode===o.DataValidationRenderMode.TEXT)){const l=this.getListWithColorMap(e),d=`${t!=null?t:""}`,u=l[d];if(u)return{bg:{rgb:u},tb:r}}return{tb:r}}parseCellValue(e){const t=e.toString();return W(t)}async parseFormula(e,t,a){var d,u;const r=await this.formulaService.getRuleFormulaResult(t,a,e.uid),i=L((u=(d=r==null?void 0:r[0])==null?void 0:d.result)==null?void 0:u[0][0]);return{formula1:void 0,formula2:void 0,isFormulaValid:M(String(i))}}async isValidType(e,t,a){const{value:r,unitId:i,subUnitId:l}=e,{formula1:d=""}=a,u=o.isFormulaString(d)?this._listCacheService.getOrCompute(i,l,a).list:W(d);return this.parseCellValue(r).every(h=>u.includes(h))}generateRuleName(){return this.localeService.t("dataValidation.list.name")}generateRuleErrorMessage(){return this.localeService.t("dataValidation.list.error")}_getUnitAndSubUnit(e,t){var i,l;const a=(i=e?this._univerInstanceService.getUniverSheetInstance(e):void 0)!=null?i:this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET);if(!a)return null;const r=(l=t?a.getSheetBySheetId(t):void 0)!=null?l:a.getActiveSheet();return r?{unitId:a.getUnitId(),subUnitId:r.getSheetId()}:null}getList(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return[];const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).list}async getListAsync(e,t,a){var c,h;const{formula1:r=""}=e,i=this._getUnitAndSubUnit(t,a);if(!i)return[];const{unitId:l,subUnitId:d}=i,u=await this.formulaService.getRuleFormulaResult(l,d,e.uid);return o.isFormulaString(r)?at((h=(c=u==null?void 0:u[0])==null?void 0:c.result)==null?void 0:h[0][0]):W(r)}getListWithColor(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return[];const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).listWithColor}getListWithColorMap(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return{};const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).colorMap}}class nt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.TEXT_LENGTH);p(this,"title","dataValidation.textLength.title");p(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));p(this,"order",30);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"]);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService))}_isFormulaOrInt(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!1};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),d=le.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:u}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=M(String(l==null?void 0:l.v))&&M(String(d==null?void 0:d.v));return{formula1:this._parseNumber(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:this._parseNumber(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}transform(e,t,a){return{...e,value:e.value.toString().length}}async isValidType(e,t,a){const{value:r}=e;return typeof r=="string"||typeof r=="number"}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(g.TextLengthErrorTitleMap[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}function Ce(n){var e,t;return n?n.p?!((t=(e=n.p.body)==null?void 0:e.dataStream)!=null?t:"").slice(0,-2).trim():o.Tools.isBlank(n.v):!0}function K(n,s,e,t,a="command",r=!0){const i=t.get(E.LexerTreeBuilder),l=t.get(g.DataValidatorRegistryService),d=[],u=[],c=t.get(exports.SheetDataValidationModel),h=t.get(o.IUniverInstanceService),m=R.getSheetCommandTarget(h,{unitId:n,subUnitId:s});if(!m)return{redoMutations:d,undoMutations:u};const{worksheet:S}=m,v=new o.ObjectMatrix;let _=!1;function V(f,D){r&&f.forEach(y=>{o.Range.foreach(y,(T,O)=>{const C=S.getCellRaw(T,O),A=Ee(C);(Ce(C)||A===D)&&!(C!=null&&C.p)&&(_=!0,v.setValue(T,O,{v:D,p:null}))})})}if(e.forEach(f=>{switch(f.type){case"delete":d.push({id:g.RemoveDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.rule.uid,source:a}}),u.unshift({id:g.AddDataValidationMutation.id,params:{unitId:n,subUnitId:s,rule:f.rule,index:f.index,source:a}});break;case"update":{if(Y(f.rule.type,l)){const y=f.oldRanges[0].startRow,T=f.oldRanges[0].startColumn,O=f.newRanges[0].startRow,C=f.newRanges[0].startColumn,A=O-y,z=C-T,Z=o.isFormulaString(f.rule.formula1)?i.moveFormulaRefOffset(f.rule.formula1,z,A):f.rule.formula1,J=o.isFormulaString(f.rule.formula2)?i.moveFormulaRefOffset(f.rule.formula2,z,A):f.rule.formula2;Z!==f.rule.formula1||J!==f.rule.formula2||!o.isRangesEqual(f.newRanges,f.oldRanges)?(d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.ALL,payload:{formula1:Z,formula2:J,ranges:f.newRanges}}}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.ALL,payload:{formula1:f.rule.formula1,formula2:f.rule.formula2,ranges:f.oldRanges}}}})):(d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.newRanges},source:a}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.oldRanges},source:a}}))}else d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.newRanges},source:a}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.oldRanges},source:a}});const D=c.getRuleById(n,s,f.ruleId);if(D&&D.type===o.DataValidationType.CHECKBOX){const T=c.getValidator(o.DataValidationType.CHECKBOX).parseFormulaSync(D,n,s);V(f.newRanges,T.formula2)}break}case"add":{if(d.push({id:g.AddDataValidationMutation.id,params:{unitId:n,subUnitId:s,rule:f.rule,source:a}}),u.unshift({id:g.RemoveDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.rule.uid,source:a}}),f.rule.type===o.DataValidationType.CHECKBOX){const y=c.getValidator(o.DataValidationType.CHECKBOX).parseFormulaSync(f.rule,n,s);V(f.rule.ranges,y.originFormula2)}break}}}),_){const f={id:R.SetRangeValuesMutation.id,params:{unitId:n,subUnitId:s,cellValue:v.getData()}},D={id:R.SetRangeValuesMutation.id,params:R.SetRangeValuesUndoMutationFactory(t,f.params)};d.push(f),u.push(D)}return{redoMutations:d,undoMutations:u}}const Oe={type:o.CommandType.COMMAND,id:"sheet.command.updateDataValidationRuleRange",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a,ruleId:r}=s,i=n.get(exports.SheetDataValidationModel),l=n.get(o.ICommandService),d=n.get(o.IUndoRedoService);if(!i.getRuleById(e,t,r))return!1;const c=i.getRuleObjectMatrix(e,t).clone();c.updateRange(r,a);const h=c.diff(i.getRules(e,t)),{redoMutations:m,undoMutations:S}=K(e,t,h,n);return d.pushUndoRedo({undoMutations:S,redoMutations:m,unitID:e}),o.sequenceExecute(m,l),!0}},Fe={type:o.CommandType.COMMAND,id:"sheet.command.addDataValidation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,rule:a}=s,r=n.get(exports.SheetDataValidationModel),i=n.get(o.ICommandService),l=n.get(o.IUndoRedoService),d=r.getRuleObjectMatrix(e,t).clone();d.addRule(a);const u=d.diff(r.getRules(e,t)),c=r.getValidator(a.type),h={unitId:e,subUnitId:t,rule:{...a,...c==null?void 0:c.normalizeFormula(a,e,t)}},{redoMutations:m,undoMutations:S}=K(e,t,u,n);return m.push({id:g.AddDataValidationMutation.id,params:h}),S.unshift({id:g.RemoveDataValidationMutation.id,params:{unitId:e,subUnitId:t,ruleId:a.uid}}),l.pushUndoRedo({unitID:e,redoMutations:m,undoMutations:S}),o.sequenceExecute(m,i),!0}},Ie={type:o.CommandType.COMMAND,id:"sheets.command.update-data-validation-setting",handler(n,s){if(!s)return!1;const e=n.get(o.ICommandService),t=n.get(o.IUndoRedoService),a=n.get(exports.SheetDataValidationModel),r=n.get(g.DataValidatorRegistryService),{unitId:i,subUnitId:l,ruleId:d,setting:u}=s,c=r.getValidatorItem(u.type);if(!c)return!1;const h=a.getRuleById(i,l,d);if(!h)return!1;const m={...h,...u};if(!c.validatorFormula(m,i,l).success)return!1;const S={unitId:i,subUnitId:l,ruleId:d,payload:{type:g.UpdateRuleType.SETTING,payload:{...u,...c.normalizeFormula(m,i,l)}}},v=[{id:g.UpdateDataValidationMutation.id,params:S}],_={unitId:i,subUnitId:l,ruleId:d,payload:{type:g.UpdateRuleType.SETTING,payload:g.getRuleSetting(h)}},V=[{id:g.UpdateDataValidationMutation.id,params:_}];if(u.type===o.DataValidationType.CHECKBOX){const D=h.ranges,y=n.get(o.IUniverInstanceService),T=R.getSheetCommandTarget(y,{unitId:i,subUnitId:l});if(T){const O=new o.ObjectMatrix,{worksheet:C}=T,{formula2:A=k,formula1:z=$}=h,{formula2:Z=k,formula1:J=$}=u;let de=!1;if(D.forEach(ee=>{o.Range.foreach(ee,(x,ue)=>{const F=C.getCellRaw(x,ue),_e=Ee(F);(Ce(F)||_e===String(A))&&!(F!=null&&F.p)?(O.setValue(x,ue,{v:Z,p:null}),de=!0):_e===String(z)&&!(F!=null&&F.p)&&(O.setValue(x,ue,{v:J,p:null}),de=!0)})}),de){const ee={id:R.SetRangeValuesMutation.id,params:{unitId:i,subUnitId:l,cellValue:O.getData()}},x={id:R.SetRangeValuesMutation.id,params:R.SetRangeValuesUndoMutationFactory(n,ee.params)};v.push(ee),V.push(x)}}}return o.sequenceExecute(v,e).result?(t.pushUndoRedo({unitID:i,redoMutations:v,undoMutations:V}),!0):!1}},Ne={type:o.CommandType.COMMAND,id:"sheets.command.update-data-validation-options",handler(n,s){if(!s)return!1;const e=n.get(o.ICommandService),t=n.get(o.IUndoRedoService),a=n.get(exports.SheetDataValidationModel),{unitId:r,subUnitId:i,ruleId:l,options:d}=s,u=a.getRuleById(r,i,l);if(!u)return!1;const c={unitId:r,subUnitId:i,ruleId:l,payload:{type:g.UpdateRuleType.OPTIONS,payload:d}},h=[{id:g.UpdateDataValidationMutation.id,params:c}],m={unitId:r,subUnitId:i,ruleId:l,payload:{type:g.UpdateRuleType.OPTIONS,payload:g.getRuleOptions(u)}},S=[{id:g.UpdateDataValidationMutation.id,params:m}];return t.pushUndoRedo({unitID:r,redoMutations:h,undoMutations:S}),e.executeCommand(g.UpdateDataValidationMutation.id,c),!0}},Ae={type:o.CommandType.COMMAND,id:"sheets.command.clear-range-data-validation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a}=s,r=n.get(o.ICommandService),i=n.get(o.IUniverInstanceService),l=R.getSheetCommandTarget(i,{unitId:e,subUnitId:t}),d=n.get(exports.SheetDataValidationModel);if(!l)return!1;const u=n.get(o.IUndoRedoService),c=d.getRuleObjectMatrix(e,t).clone();c.removeRange(a);const h=c.diff(d.getRules(e,t)),{redoMutations:m,undoMutations:S}=K(e,t,h,n);return u.pushUndoRedo({unitID:e,redoMutations:m,undoMutations:S}),o.sequenceExecute(m,r).result}},we={type:o.CommandType.COMMAND,id:"sheet.command.remove-all-data-validation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t}=s,a=n.get(o.ICommandService),r=n.get(exports.SheetDataValidationModel),i=n.get(o.IUndoRedoService),l=[...r.getRules(e,t)],d={unitId:e,subUnitId:t,ruleId:l.map(h=>h.uid)},u=[{id:g.RemoveDataValidationMutation.id,params:d}],c=[{id:g.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:l}}];return i.pushUndoRedo({redoMutations:u,undoMutations:c,unitID:e}),a.executeCommand(g.RemoveDataValidationMutation.id,d),!0}},st=(n,s)=>{const e=n.get(exports.SheetDataValidationModel),{unitId:t,subUnitId:a,ruleId:r,source:i}=s;if(Array.isArray(r)){const d=r.map(u=>e.getRuleById(t,a,u)).filter(Boolean);return[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:d,source:i}}]}return[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:{...e.getRuleById(t,a,r)},index:e.getRuleIndex(t,a,r)}}]},Ue={type:o.CommandType.COMMAND,id:"sheet.command.remove-data-validation-rule",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ruleId:a}=s,r=n.get(o.ICommandService),i=n.get(o.IUndoRedoService),l=n.get(exports.SheetDataValidationModel),d=[{id:g.RemoveDataValidationMutation.id,params:s}],u=[{id:g.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:{...l.getRuleById(e,t,a)},index:l.getRuleIndex(e,t,a)}}];return i.pushUndoRedo({undoMutations:u,redoMutations:d,unitID:s.unitId}),r.executeCommand(g.RemoveDataValidationMutation.id,s),!0}},be="SHEET_DATA_VALIDATION_PLUGIN";var Le=(n=>(n[n.View=0]="View",n[n.Edit=1]="Edit",n[n.ManageCollaborator=2]="ManageCollaborator",n[n.Print=3]="Print",n[n.Duplicate=4]="Duplicate",n[n.Comment=5]="Comment",n[n.Copy=6]="Copy",n[n.Share=7]="Share",n[n.Export=8]="Export",n[n.MoveWorksheet=9]="MoveWorksheet",n[n.DeleteWorksheet=10]="DeleteWorksheet",n[n.HideWorksheet=11]="HideWorksheet",n[n.RenameWorksheet=12]="RenameWorksheet",n[n.CreateWorksheet=13]="CreateWorksheet",n[n.SetWorksheetStyle=14]="SetWorksheetStyle",n[n.EditWorksheetCell=15]="EditWorksheetCell",n[n.InsertHyperlink=16]="InsertHyperlink",n[n.Sort=17]="Sort",n[n.Filter=18]="Filter",n[n.PivotTable=19]="PivotTable",n[n.FloatImg=20]="FloatImg",n[n.History=21]="History",n[n.RwHgtClWdt=22]="RwHgtClWdt",n[n.ViemRwHgtClWdt=23]="ViemRwHgtClWdt",n[n.ViewFilter=24]="ViewFilter",n[n.MoveSheet=25]="MoveSheet",n[n.DeleteSheet=26]="DeleteSheet",n[n.HideSheet=27]="HideSheet",n[n.CopySheet=28]="CopySheet",n[n.RenameSheet=29]="RenameSheet",n[n.CreateSheet=30]="CreateSheet",n[n.SelectProtectedCells=31]="SelectProtectedCells",n[n.SelectUnProtectedCells=32]="SelectUnProtectedCells",n[n.SetCellStyle=33]="SetCellStyle",n[n.SetCellValue=34]="SetCellValue",n[n.SetRowStyle=35]="SetRowStyle",n[n.SetColumnStyle=36]="SetColumnStyle",n[n.InsertRow=37]="InsertRow",n[n.InsertColumn=38]="InsertColumn",n[n.DeleteRow=39]="DeleteRow",n[n.DeleteColumn=40]="DeleteColumn",n[n.EditExtraObject=41]="EditExtraObject",n[n.Delete=42]="Delete",n[n.RecoverHistory=43]="RecoverHistory",n[n.ViewHistory=44]="ViewHistory",n[n.CreatePermissionObject=45]="CreatePermissionObject",n[n.UNRECOGNIZED=-1]="UNRECOGNIZED",n))(Le||{}),lt=Object.getOwnPropertyDescriptor,dt=(n,s,e,t)=>{for(var a=t>1?void 0:t?lt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},me=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationFormulaController=class extends o.Disposable{constructor(s,e,t){super(),this._univerInstanceService=s,this._permissionService=e,this._lexerTreeBuilder=t}getFormulaRefCheck(s){var t,a;const e=this._lexerTreeBuilder.sequenceNodesBuilder(s);if(!e)return!0;for(let r=0;r<e.length;r++){const i=e[r];if(typeof i=="string")continue;const{token:l}=i,d=E.deserializeRangeWithSheetWithCache(l),u=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET);let c=u.getActiveSheet();const h=u.getUnitId();if(d.sheetName){if(c=u.getSheetBySheetName(d.sheetName),!c)return!1;const V=c==null?void 0:c.getSheetId();if(!this._permissionService.getPermissionPoint(new R.WorksheetViewPermission(h,V).id))return!1}if(!c)return!1;const{startRow:m,endRow:S,startColumn:v,endColumn:_}=d.range;for(let V=m;V<=S;V++)for(let f=v;f<=_;f++){const D=(a=(t=c.getCell(V,f))==null?void 0:t.selectionProtection)==null?void 0:a[0];if((D==null?void 0:D[Le.View])===!1)return!1}}return!0}};exports.DataValidationFormulaController=dt([me(0,o.IUniverInstanceService),me(1,o.IPermissionService),me(2,o.Inject(E.LexerTreeBuilder))],exports.DataValidationFormulaController);const ut="sheets-data-validation.config",Me={};var ct=Object.getOwnPropertyDescriptor,ht=(n,s,e,t)=>{for(var a=t>1?void 0:t?ct(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},pe=(n,s)=>(e,t)=>s(e,t,n);let re=class extends o.Disposable{constructor(s,e,t){super();p(this,"_disposableMap",new Map);p(this,"registerRule",(s,e,t)=>{Y(t.type,this._validatorRegistryService)&&this.register(s,e,t)});this._dataValidationModel=s,this._formulaRefRangeService=e,this._validatorRegistryService=t,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}register(s,e,t){const a=t.ranges,r=t.formula1,i=t.formula2,l=this._formulaRefRangeService.registerRangeFormula(s,e,a,[r!=null?r:"",i!=null?i:""],u=>{if(u.length===0)return{undos:[{id:g.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:t,source:"patched"}}],redos:[{id:g.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,source:"patched"}}]};const c=[],h=[],m=u[0];c.push({id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.ALL,payload:{ranges:m.ranges,formula1:m.formulas[0],formula2:m.formulas[1]}},source:"patched"}}),h.push({id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.ALL,payload:{ranges:a,formula1:r,formula2:i}},source:"patched"}});for(let S=1;S<u.length;S++){const v=u[S],_=o.generateRandomId();c.push({id:g.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:{...t,uid:_,formula1:v.formulas[0],formula2:v.formulas[1],ranges:v.ranges},source:"patched"}}),h.push({id:g.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:_,source:"patched"}})}return{undos:h,redos:c}}),d=this._getIdWithUnitId(s,e,t.uid);this._disposableMap.set(d,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,r]of t)for(const i of r)this.registerRule(e,a,i);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:r}=e;switch(e.type){case"add":{const i=e.rule;this.registerRule(e.unitId,e.subUnitId,i);break}case"remove":{const i=this._disposableMap.get(this._getIdWithUnitId(t,a,r.uid));i&&i.dispose();break}case"update":{const i=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,i.uid));l&&l.dispose(),this.registerRule(e.unitId,e.subUnitId,i);break}}})),this.disposeWithMe(o.toDisposable(()=>{this._disposableMap.forEach(e=>{e.dispose()}),this._disposableMap.clear()}))}};re=ht([pe(0,o.Inject(exports.SheetDataValidationModel)),pe(1,o.Inject(se.FormulaRefRangeService)),pe(2,o.Inject(g.DataValidatorRegistryService))],re);var mt=Object.getOwnPropertyDescriptor,pt=(n,s,e,t)=>{for(var a=t>1?void 0:t?mt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},U=(n,s)=>(e,t)=>s(e,t,n);let ie=class extends o.Disposable{constructor(s,e,t,a,r,i){super();p(this,"_disposableMap",new Map);p(this,"registerRule",(s,e,t)=>{Y(t.type,this._validatorRegistryService)||(this.register(s,e,t),this.registerFormula(s,e,t))});this._dataValidationModel=s,this._injector=e,this._refRangeService=t,this._dataValidationFormulaService=a,this._formulaRefRangeService=r,this._validatorRegistryService=i,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}registerFormula(s,e,t){var u;const a=t.uid,r=this._getIdWithUnitId(s,e,a),i=(u=this._disposableMap.get(r))!=null?u:new Set,l=(c,h)=>{const m=this._dataValidationModel.getRuleById(s,e,a);if(!m)return{redos:[],undos:[]};const S=m[c];if(!S||S===h)return{redos:[],undos:[]};const v={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.SETTING,payload:{type:m.type,formula1:m.formula1,formula2:m.formula2,[c]:h}},source:"patched"},_={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.SETTING,payload:{type:m.type,formula1:m.formula1,formula2:m.formula2}},source:"patched"},V=[{id:g.UpdateDataValidationMutation.id,params:v}],f=[{id:g.UpdateDataValidationMutation.id,params:_}];return{redos:V,undos:f}},d=this._dataValidationFormulaService.getRuleFormulaInfo(s,e,a);if(d){const[c,h]=d;if(c){const m=this._formulaRefRangeService.registerFormula(s,e,c.text,S=>l("formula1",S));i.add(()=>m.dispose())}if(h){const m=this._formulaRefRangeService.registerFormula(s,e,h.text,S=>l("formula2",S));i.add(()=>m.dispose())}}}register(s,e,t){var d;const a=u=>{const c=[...t.ranges],m=c.map(v=>R.handleCommonDefaultRangeChangeWithEffectRefCommands(v,u)).filter(v=>!!v).flat();if(o.isRangesEqual(m,c))return{redos:[],undos:[]};if(m.length){const v={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.RANGE,payload:m},source:"patched"},_=[{id:g.UpdateDataValidationMutation.id,params:v}],V=[{id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.RANGE,payload:c},source:"patched"}}];return{redos:_,undos:V}}else{const v={unitId:s,subUnitId:e,ruleId:t.uid},_=[{id:g.RemoveDataValidationMutation.id,params:v}],V=st(this._injector,v);return{redos:_,undos:V}}},r=[];t.ranges.forEach(u=>{const c=this._refRangeService.registerRefRange(u,a,s,e);r.push(()=>c.dispose())});const i=this._getIdWithUnitId(s,e,t.uid),l=(d=this._disposableMap.get(i))!=null?d:new Set;l.add(()=>r.forEach(u=>u())),this._disposableMap.set(i,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,r]of t)for(const i of r)this.registerRule(e,a,i);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:r}=e;switch(e.type){case"add":{const i=e.rule;this.registerRule(e.unitId,e.subUnitId,i);break}case"remove":{const i=this._disposableMap.get(this._getIdWithUnitId(t,a,r.uid));i&&i.forEach(l=>l());break}case"update":{const i=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,i.uid));l&&l.forEach(d=>d()),this.registerRule(e.unitId,e.subUnitId,i);break}}})),this.disposeWithMe(o.toDisposable(()=>{this._disposableMap.forEach(e=>{e.forEach(t=>t())}),this._disposableMap.clear()}))}};ie=pt([U(0,o.Inject(exports.SheetDataValidationModel)),U(1,o.Inject(o.Injector)),U(2,o.Inject(R.RefRangeService)),U(3,o.Inject(exports.DataValidationFormulaService)),U(4,o.Inject(se.FormulaRefRangeService)),U(5,o.Inject(g.DataValidatorRegistryService))],ie);var gt=Object.getOwnPropertyDescriptor,St=(n,s,e,t)=>{for(var a=t>1?void 0:t?gt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},ge=(n,s)=>(e,t)=>s(e,t,n);let oe=class extends o.Disposable{constructor(n,s,e){super(),this._sheetInterceptorService=n,this._univerInstanceService=s,this._sheetDataValidationModel=e,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:n=>{var s;if(n.id===R.RemoveSheetCommand.id){const e=n.params,t=e.unitId||this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET).getUnitId(),a=this._univerInstanceService.getUniverSheetInstance(t);if(!a)return{redos:[],undos:[]};const r=e.subUnitId||((s=a.getActiveSheet())==null?void 0:s.getSheetId());if(!r)return{redos:[],undos:[]};const i=this._sheetDataValidationModel.getRules(t,r);if(i.length===0)return{redos:[],undos:[]};const l=i.map(c=>c.uid),d={unitId:t,subUnitId:r,ruleId:l,source:"patched"},u={unitId:t,subUnitId:r,rule:[...i],source:"patched"};return{redos:[{id:g.RemoveDataValidationMutation.id,params:d}],undos:[{id:g.AddDataValidationMutation.id,params:u}]}}else if(n.id===R.CopySheetCommand.id){const e=n.params,{unitId:t,subUnitId:a,targetSubUnitId:r}=e;if(!t||!a||!r)return{redos:[],undos:[]};const i=this._sheetDataValidationModel.getRules(t,a);if(i.length===0)return{redos:[],undos:[]};const l=i.map(d=>({...d,uid:o.generateRandomId(6)}));return{redos:[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:r,rule:l,source:"patched"}}],undos:[{id:g.RemoveDataValidationMutation.id,params:{unitId:t,subUnitId:r,ruleId:l.map(d=>d.uid),source:"patched"}}]}}return{redos:[],undos:[]}}}))}};oe=St([ge(0,o.Inject(R.SheetInterceptorService)),ge(1,o.Inject(o.IUniverInstanceService)),ge(2,o.Inject(exports.SheetDataValidationModel))],oe);class ft extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.ANY);p(this,"title","dataValidation.any.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",0);p(this,"offsetFormulaByRange",!1)}async parseFormula(e,t,a){return{formula1:e.formula1,formula2:e.formula2,isFormulaValid:!0}}validatorFormula(e,t,a){return{success:!0}}async isValidType(e,t,a){return!0}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.any.error")}}class vt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.CUSTOM);p(this,"title","dataValidation.custom.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",60);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder))}validatorFormula(e,t,a){var u;const r=o.isFormulaString(e.formula1),i=(u=e.formula1)!=null?u:"",d=this._lexerTreeBuilder.checkIfAddBracket(i)===0&&i.startsWith(E.operatorToken.EQUALS);return{success:r&&d,formula1:r&&d?"":this.localeService.t("dataValidation.validFail.formula")}}async parseFormula(e,t,a){return{formula1:void 0,formula2:void 0,isFormulaValid:!0}}async isValidType(e,t,a){const{column:r,row:i,unitId:l,subUnitId:d}=e,u=await this._customFormulaService.getCellFormulaValue(l,d,a.uid,i,r),c=u==null?void 0:u.v;return M(String(c))&&o.Tools.isDefine(c)&&c!==""?u.t===o.CellValueType.BOOLEAN?!!c:typeof c=="boolean"?c:typeof c=="number"?!!c:typeof c=="string"?M(c):!!c:!1}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.custom.error")}generateRuleName(e){var t;return this.localeService.t("dataValidation.custom.ruleName").replace("{FORMULA1}",(t=e.formula1)!=null?t:"")}}class Be extends ve{constructor(){super(...arguments);p(this,"id",o.DataValidationType.LIST_MULTIPLE);p(this,"title","dataValidation.listMultiple.title");p(this,"offsetFormulaByRange",!1);p(this,"skipDefaultFontRender",()=>!0)}}class _t extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));p(this,"id",o.DataValidationType.WHOLE);p(this,"title","dataValidation.whole.title");p(this,"order",10);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"])}_isFormulaOrInt(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}async isValidType(e,t,a){const{value:r}=e,i=G(r);return!Number.isNaN(i)&&Number.isInteger(i)}transform(e,t,a){const{value:r}=e;return{...e,value:G(r)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=o.isFormulaString(u)?l==null?void 0:l.v:u,m=o.isFormulaString(c)?d==null?void 0:d.v:c,S=M(`${h}`)&&M(`${m}`);return{formula1:this._parseNumber(h),formula2:this._parseNumber(m),isFormulaValid:S}}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),d=le.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:u}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(ae.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(ae[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}var Vt=Object.getOwnPropertyDescriptor,Rt=(n,s,e,t)=>{for(var a=t>1?void 0:t?Vt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},b=(n,s)=>(e,t)=>s(e,t,n);let ne=class extends o.RxDisposable{constructor(n,s,e,t,a,r){super(),this._univerInstanceService=n,this._dataValidatorRegistryService=s,this._injector=e,this._selectionManagerService=t,this._sheetInterceptorService=a,this._sheetDataValidationModel=r,this._init()}_init(){this._registerValidators(),this._initCommandInterceptor()}_registerValidators(){[ft,tt,_t,nt,Te,ye,ve,Be,vt].forEach(n=>{const s=this._injector.createInstance(n);this.disposeWithMe(this._dataValidatorRegistryService.register(s)),this.disposeWithMe(o.toDisposable(()=>this._injector.delete(n)))})}_initCommandInterceptor(){this._sheetInterceptorService.interceptCommand({getMutations:n=>{var s;if(n.id===R.ClearSelectionAllCommand.id){const e=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET),t=e.getUnitId(),a=e.getActiveSheet();if(!a)throw new Error("No active sheet found");const r=a.getSheetId(),i=(s=this._selectionManagerService.getCurrentSelections())==null?void 0:s.map(h=>h.range),l=this._sheetDataValidationModel.getRuleObjectMatrix(t,r).clone();i&&l.removeRange(i);const d=l.diff(this._sheetDataValidationModel.getRules(t,r)),{redoMutations:u,undoMutations:c}=K(t,r,d,this._injector,"patched");return{undos:c,redos:u}}return{undos:[],redos:[]}}})}};ne=Rt([b(0,o.IUniverInstanceService),b(1,o.Inject(g.DataValidatorRegistryService)),b(2,o.Inject(o.Injector)),b(3,o.Inject(R.SheetsSelectionsService)),b(4,o.Inject(R.SheetInterceptorService)),b(5,o.Inject(exports.SheetDataValidationModel))],ne);var Dt=Object.getOwnPropertyDescriptor,Mt=(n,s,e,t)=>{for(var a=t>1?void 0:t?Dt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},te=(n,s)=>(e,t)=>s(e,t,n);exports.SheetsDataValidationValidatorService=class extends o.Disposable{constructor(s,e,t,a){super(),this._univerInstanceService=s,this._sheetDataValidationModel=e,this._dataValidationCacheService=t,this._lifecycleService=a,this._initRecalculate()}_initRecalculate(){const s=e=>{if(e.length===0)return;const t=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET),a=t==null?void 0:t.getActiveSheet(),r={};e.flat().forEach(i=>{r[i.unitId]||(r[i.unitId]={}),r[i.unitId][i.subUnitId]||(r[i.unitId][i.subUnitId]=[]);const l=this._univerInstanceService.getUnit(i.unitId,o.UniverInstanceType.UNIVER_SHEET),d=l==null?void 0:l.getSheetBySheetId(i.subUnitId);d&&r[i.unitId][i.subUnitId].push(...i.ranges.map(u=>o.Range.transformRange(u,d)))}),Object.entries(r).forEach(([i,l])=>{Object.entries(l).forEach(([d,u])=>{(t==null?void 0:t.getUnitId())===i&&(a==null?void 0:a.getSheetId())===d?this.validatorRanges(i,d,u):requestIdleCallback(()=>{this.validatorRanges(i,d,u)})})})};this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(B.bufferWhen(()=>this._lifecycleService.lifecycle$.pipe(B.filter(e=>e===o.LifecycleStages.Rendered)))).subscribe(s)),this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(B.filter(()=>this._lifecycleService.stage>=o.LifecycleStages.Rendered),o.bufferDebounceTime(20)).subscribe(s))}async _validatorByCell(s,e,t,a){const r=s.getUnitId(),i=e.getSheetId();if(!o.Tools.isDefine(t)||!o.Tools.isDefine(a))throw new Error(`row or col is not defined, row: ${t}, col: ${a}`);let l=t,d=a;const u=e.getMergedCell(t,a);u&&(l=u.startRow,d=u.startColumn);const c=this._sheetDataValidationModel.getRuleByLocation(r,i,l,d);return c?new Promise(h=>{this._sheetDataValidationModel.validator(c,{unitId:r,subUnitId:i,row:l,col:d,worksheet:e,workbook:s},m=>{h(m)})}):o.DataValidationStatus.VALID}async validatorCell(s,e,t,a){const r=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!r)throw new Error(`cannot find current workbook, unitId: ${s}`);const i=r.getSheetBySheetId(e);if(!i)throw new Error(`cannot find current worksheet, sheetId: ${e}`);return this._validatorByCell(r,i,t,a)}async validatorRanges(s,e,t){if(!t.length)return Promise.resolve([]);const a=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!a)throw new Error(`cannot find current workbook, unitId: ${s}`);const r=a.getSheetBySheetId(e);if(!r)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const l=this._sheetDataValidationModel.getRules(s,e).map(h=>h.ranges).flat(),d=t.map(h=>l.map(m=>o.getIntersectRange(h,m))).flat().filter(Boolean),u=[],c=await Promise.all(d.map((h,m)=>{const S=[];for(let v=h.startRow;v<=h.endRow;v++)for(let _=h.startColumn;_<=h.endColumn;_++){S.push(this._validatorByCell(a,r,v,_));const V=r.getMergedCell(v,_);V&&u.push({resultRowIndex:m,resultColIndex:S.length-1,row:V.startRow,col:V.startColumn})}return Promise.all(S)}));return u.length&&u.forEach(({resultRowIndex:h,resultColIndex:m,row:S,col:v})=>{var _;c[h][m]===o.DataValidationStatus.VALIDATING&&(c[h][m]=(_=this._dataValidationCacheService.getValue(s,e,S,v))!=null?_:o.DataValidationStatus.VALID)}),c}async validatorWorksheet(s,e){const t=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!t)throw new Error(`cannot find current workbook, unitId: ${s}`);const a=t.getSheetBySheetId(e);if(!a)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const r=this._sheetDataValidationModel.getRules(s,e);return await Promise.all(r.map(i=>Promise.all(i.ranges.map(l=>{const d=[];return o.Range.foreach(l,(u,c)=>{d.push(this._validatorByCell(t,a,u,c))}),Promise.all(d)})))),this._dataValidationCacheService.ensureCache(s,e)}async validatorWorkbook(s){const e=this._sheetDataValidationModel.getSubUnitIds(s),t=await Promise.all(e.map(r=>this.validatorWorksheet(s,r))),a={};return t.forEach((r,i)=>{a[e[i]]=r}),a}getDataValidations(s,e,t){const a=this._sheetDataValidationModel.getRuleObjectMatrix(s,e),r=new Set;return t.forEach(l=>{o.Range.foreach(l,(d,u)=>{const c=a.getValue(d,u);c&&r.add(c)})}),Array.from(r).map(l=>this._sheetDataValidationModel.getRuleById(s,e,l)).filter(Boolean)}getDataValidation(s,e,t){return this.getDataValidations(s,e,t)[0]}};exports.SheetsDataValidationValidatorService=Mt([te(0,o.IUniverInstanceService),te(1,o.Inject(exports.SheetDataValidationModel)),te(2,o.Inject(exports.DataValidationCacheService)),te(3,o.Inject(o.LifecycleService))],exports.SheetsDataValidationValidatorService);var Et=Object.defineProperty,yt=Object.getOwnPropertyDescriptor,Tt=(n,s,e)=>s in n?Et(n,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[s]=e,Ct=(n,s,e,t)=>{for(var a=t>1?void 0:t?yt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},Se=(n,s)=>(e,t)=>s(e,t,n),xe=(n,s,e)=>Tt(n,typeof s!="symbol"?s+"":s,e);exports.UniverSheetsDataValidationPlugin=class extends o.Plugin{constructor(s=Me,e,t,a){super(),this._config=s,this._injector=e,this._commandService=t,this._configService=a;const{...r}=o.merge({},Me,this._config);this._configService.setConfig(ut,r)}onStarting(){[[exports.DataValidationCacheService],[exports.DataValidationListCacheService],[exports.DataValidationFormulaService],[exports.DataValidationCustomFormulaService],[exports.SheetsDataValidationValidatorService],[exports.SheetDataValidationModel],[ne],[exports.DataValidationFormulaController],[oe],[ie],[re]].forEach(s=>{this._injector.add(s)}),[Fe,Oe,Ie,Ne,Ue,we,Ae].forEach(s=>{this._commandService.registerCommand(s)}),this._injector.get(exports.DataValidationCacheService),this._injector.get(exports.SheetsDataValidationValidatorService),this._injector.get(ne),this._injector.get(re),this._injector.get(ie)}onReady(){this._injector.get(oe)}onRendered(){this._injector.get(exports.DataValidationFormulaController)}};xe(exports.UniverSheetsDataValidationPlugin,"pluginName",be);xe(exports.UniverSheetsDataValidationPlugin,"type",o.UniverInstanceType.UNIVER_SHEET);exports.UniverSheetsDataValidationPlugin=Ct([o.DependentOn(g.UniverDataValidationPlugin),Se(1,o.Inject(o.Injector)),Se(2,o.ICommandService),Se(3,o.IConfigService)],exports.UniverSheetsDataValidationPlugin);function Ot(n){const e=n.get(R.SheetsSelectionsService).getCurrentSelections().map(r=>r.range);return{uid:o.generateRandomId(6),type:o.DataValidationType.DECIMAL,operator:o.DataValidationOperator.EQUAL,formula1:"100",ranges:e!=null?e:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}const Ft="data-validation.custom-formula-input",It="data-validation.formula-input",Nt="data-validation.list-formula-input",At="data-validation.checkbox-formula-input";exports.AddSheetDataValidationCommand=Fe;exports.BASE_FORMULA_INPUT_NAME=It;exports.CHECKBOX_FORMULA_1=$;exports.CHECKBOX_FORMULA_2=k;exports.CHECKBOX_FORMULA_INPUT_NAME=At;exports.CUSTOM_FORMULA_INPUT_NAME=Ft;exports.CheckboxValidator=ye;exports.ClearRangeDataValidationCommand=Ae;exports.DATA_VALIDATION_PLUGIN_NAME=be;exports.DateValidator=Te;exports.LIST_FORMULA_INPUT_NAME=Nt;exports.ListMultipleValidator=Be;exports.ListValidator=ve;exports.RemoveSheetAllDataValidationCommand=we;exports.RemoveSheetDataValidationCommand=Ue;exports.UpdateSheetDataValidationOptionsCommand=Ne;exports.UpdateSheetDataValidationRangeCommand=Oe;exports.UpdateSheetDataValidationSettingCommand=Ie;exports.createDefaultNewRule=Ot;exports.deserializeListOptions=W;exports.getCellValueNumber=G;exports.getCellValueOrigin=N;exports.getDataValidationCellValue=Qe;exports.getDataValidationDiffMutations=K;exports.getFormulaCellData=P;exports.getFormulaResult=L;exports.getTransformedFormula=X;exports.isLegalFormulaResult=M;exports.serializeListOptions=qe;exports.transformCheckboxValue=H;
|