@univerjs/sheets-data-validation 0.4.2 → 0.5.0-beta.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.
@@ -0,0 +1 @@
1
+ "use strict";var c=Object.defineProperty;var g=(n,t,e)=>t in n?c(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var u=(n,t,e)=>g(n,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@univerjs/sheets/facade"),o=require("@univerjs/sheets-data-validation"),a=require("@univerjs/core"),h=require("@univerjs/data-validation"),D=require("@univerjs/engine-formula"),m=require("rxjs");class d{constructor(t){u(this,"_rule");this._rule=t!=null?t:{uid:a.generateRandomId(),ranges:void 0,type:a.DataValidationType.CUSTOM}}build(){return new l(this._rule)}copy(){return new d({...this._rule,uid:a.generateRandomId()})}getAllowInvalid(){return this._rule.errorStyle!==a.DataValidationErrorStyle.STOP}getCriteriaType(){return this._rule.type}getCriteriaValues(){return[this._rule.operator,this._rule.formula1,this._rule.formula2]}getHelpText(){return this._rule.error}requireCheckbox(t,e){return this._rule.type=a.DataValidationType.CHECKBOX,this._rule.formula1=t,this._rule.formula2=e,this}requireDateAfter(t){return this._rule.type=a.DataValidationType.DATE,this._rule.formula1=t.toLocaleDateString(),this._rule.operator=a.DataValidationOperator.GREATER_THAN,this}requireDateBefore(t){return this._rule.type=a.DataValidationType.DATE,this._rule.formula1=t.toLocaleDateString(),this._rule.formula2=void 0,this._rule.operator=a.DataValidationOperator.LESS_THAN,this}requireDateBetween(t,e){return this._rule.type=a.DataValidationType.DATE,this._rule.formula1=t.toLocaleDateString(),this._rule.formula2=e.toLocaleDateString(),this._rule.operator=a.DataValidationOperator.BETWEEN,this}requireDateEqualTo(t){return this._rule.type=a.DataValidationType.DATE,this._rule.formula1=t.toLocaleDateString(),this._rule.formula2=void 0,this._rule.operator=a.DataValidationOperator.EQUAL,this}requireDateNotBetween(t,e){return this._rule.type=a.DataValidationType.DATE,this._rule.formula1=t.toLocaleDateString(),this._rule.formula2=e.toLocaleDateString(),this._rule.operator=a.DataValidationOperator.NOT_BETWEEN,this}requireDateOnOrAfter(t){return this._rule.type=a.DataValidationType.DATE,this._rule.formula1=t.toLocaleDateString(),this._rule.formula2=void 0,this._rule.operator=a.DataValidationOperator.GREATER_THAN_OR_EQUAL,this}requireDateOnOrBefore(t){return this._rule.type=a.DataValidationType.DATE,this._rule.formula1=t.toLocaleDateString(),this._rule.formula2=void 0,this._rule.operator=a.DataValidationOperator.LESS_THAN_OR_EQUAL,this}requireFormulaSatisfied(t){return this._rule.type=a.DataValidationType.CUSTOM,this._rule.formula1=t,this._rule.formula2=void 0,this}requireNumberBetween(t,e,r){return this._rule.formula1=`${t}`,this._rule.formula2=`${e}`,this._rule.operator=a.DataValidationOperator.BETWEEN,this._rule.type=r?a.DataValidationType.WHOLE:a.DataValidationType.DECIMAL,this}requireNumberEqualTo(t,e){return this._rule.formula1=`${t}`,this._rule.formula2=void 0,this._rule.operator=a.DataValidationOperator.EQUAL,this._rule.type=e?a.DataValidationType.WHOLE:a.DataValidationType.DECIMAL,this}requireNumberGreaterThan(t,e){return this._rule.formula1=`${t}`,this._rule.formula2=void 0,this._rule.operator=a.DataValidationOperator.GREATER_THAN,this._rule.type=e?a.DataValidationType.WHOLE:a.DataValidationType.DECIMAL,this}requireNumberGreaterThanOrEqualTo(t,e){return this._rule.formula1=`${t}`,this._rule.formula2=void 0,this._rule.operator=a.DataValidationOperator.GREATER_THAN_OR_EQUAL,this._rule.type=e?a.DataValidationType.WHOLE:a.DataValidationType.DECIMAL,this}requireNumberLessThan(t,e){return this._rule.formula1=`${t}`,this._rule.formula2=void 0,this._rule.operator=a.DataValidationOperator.LESS_THAN,this._rule.type=e?a.DataValidationType.WHOLE:a.DataValidationType.DECIMAL,this}requireNumberLessThanOrEqualTo(t,e){return this._rule.formula1=`${t}`,this._rule.formula2=void 0,this._rule.operator=a.DataValidationOperator.LESS_THAN_OR_EQUAL,this._rule.type=e?a.DataValidationType.WHOLE:a.DataValidationType.DECIMAL,this}requireNumberNotBetween(t,e,r){return this._rule.formula1=`${t}`,this._rule.formula2=`${e}`,this._rule.operator=a.DataValidationOperator.NOT_BETWEEN,this._rule.type=r?a.DataValidationType.WHOLE:a.DataValidationType.DECIMAL,this}requireNumberNotEqualTo(t,e){return this._rule.formula1=`${t}`,this._rule.formula2=void 0,this._rule.operator=a.DataValidationOperator.NOT_EQUAL,this._rule.type=e?a.DataValidationType.WHOLE:a.DataValidationType.DECIMAL,this}requireValueInList(t,e,r){return this._rule.type=e?a.DataValidationType.LIST_MULTIPLE:a.DataValidationType.LIST,this._rule.formula1=t.join(","),this._rule.formula2=void 0,this._rule.showDropDown=r!=null?r:!0,this}requireValueInRange(t,e,r){return this._rule.type=e?a.DataValidationType.LIST_MULTIPLE:a.DataValidationType.LIST,this._rule.formula1=`=${D.serializeRangeToRefString({unitId:t.getUnitId(),sheetName:t.getSheetName(),range:t.getRange()})}`,this._rule.formula2=void 0,this._rule.showDropDown=r!=null?r:!0,this}setAllowInvalid(t){return this._rule.errorStyle=t?a.DataValidationErrorStyle.WARNING:a.DataValidationErrorStyle.STOP,this}setHelpText(t){return this._rule.error=t,this._rule.showErrorMessage=!0,this}withCriteriaValues(t,e){return this._rule.type=t,this._rule.operator=e[0],this._rule.formula1=e[1],this._rule.formula2=e[2],this}setOptions(t){return Object.assign(this._rule,t),this}}class l{constructor(t,e){u(this,"rule");u(this,"_worksheet");this.rule=t,this._worksheet=e}getAllowInvalid(){return this.rule.errorStyle!==a.DataValidationErrorStyle.STOP}getCriteriaType(){return this.rule.type}getCriteriaValues(){return[this.rule.operator,this.rule.formula1,this.rule.formula2]}getHelpText(){return this.rule.error}copy(){return new d(this.rule)}getApplied(){if(!this._worksheet)return!1;const e=this._worksheet.getInject().get(h.DataValidationModel).getRuleById(this._worksheet.getWorkbook().getUnitId(),this._worksheet.getSheetId(),this.rule.uid);return!!(e&&e.ranges.length)}getRanges(){var i;if(!this.getAllowInvalid())return[];const t=(i=this._worksheet)==null?void 0:i.getWorkbook(),e=this.getSheetId();if(!e)return[];const r=t==null?void 0:t.getSheetBySheetId(e);return!t||!r?[]:this.rule.ranges.map(p=>{var _;return(_=this._worksheet)==null?void 0:_.getInject().createInstance(s.FRange,t,r,p)})}getUnitId(){var t;return(t=this._worksheet)==null?void 0:t.getWorkbook().getUnitId()}getSheetId(){var t;return(t=this._worksheet)==null?void 0:t.getSheetId()}setCriteria(t,e){return this.getApplied()&&!this._worksheet.getInject().get(a.ICommandService).syncExecuteCommand(o.UpdateSheetDataValidationSettingCommand.id,{unitId:this.getUnitId(),subUnitId:this.getSheetId(),ruleId:this.rule.uid,setting:{operator:e[0],formula1:e[1],formula2:e[2],type:this.rule.type}})?!1:(this.rule.operator=e[0],this.rule.formula1=e[1],this.rule.formula2=e[2],this.rule.type=t,!0)}setOptions(t){return this.getApplied()&&!this._worksheet.getInject().get(a.ICommandService).syncExecuteCommand(o.UpdateSheetDataValidationOptionsCommand.id,{unitId:this.getUnitId(),subUnitId:this.getSheetId(),ruleId:this.rule.uid,options:{...h.getRuleOptions(this.rule),...t}})?!1:(Object.assign(this.rule,t),!0)}setRanges(t){return this.getApplied()&&!this._worksheet.getInject().get(a.ICommandService).syncExecuteCommand(o.UpdateSheetDataValidationRangeCommand.id,{unitId:this.getUnitId(),subUnitId:this.getSheetId(),ruleId:this.rule.uid,ranges:t.map(i=>i.getRange())})?!1:(this.rule.ranges=t,!0)}delete(){return this.getApplied()?this._worksheet.getInject().get(a.ICommandService).syncExecuteCommand(o.RemoveSheetDataValidationCommand.id,{unitId:this.getUnitId(),subUnitId:this.getSheetId(),ruleId:this.rule.uid}):!1}}class V extends s.FRange{async setDataValidation(t){if(!t)return this._commandService.executeCommand(o.ClearRangeDataValidationCommand.id,{unitId:this._workbook.getUnitId(),subUnitId:this._worksheet.getSheetId(),ranges:[this._range]}),this;const e={unitId:this._workbook.getUnitId(),subUnitId:this._worksheet.getSheetId(),rule:{...t.rule,ranges:[this._range]}};return await this._commandService.executeCommand(o.AddSheetDataValidationCommand.id,e),this}getDataValidation(){const e=this._injector.get(o.SheetsDataValidationValidatorService).getDataValidation(this._workbook.getUnitId(),this._worksheet.getSheetId(),[this._range]);return e&&new l(e)}getDataValidations(){return this._injector.get(o.SheetsDataValidationValidatorService).getDataValidations(this._workbook.getUnitId(),this._worksheet.getSheetId(),[this._range]).map(e=>new l(e))}async getValidatorStatus(){return this._injector.get(o.SheetsDataValidationValidatorService).validatorRanges(this._workbook.getUnitId(),this._worksheet.getSheetId(),[this._range])}}s.FRange.extend(V);class f{static newDataValidation(){return new d}}a.FUniver.extend(f);class S extends s.FWorkbook{_initialize(){Object.defineProperty(this,"_dataValidationModel",{get(){return this._injector.get(o.SheetDataValidationModel)}})}getValidatorStatus(){return this._injector.get(o.SheetsDataValidationValidatorService).validatorWorkbook(this._workbook.getUnitId())}onDataValidationChange(t){return a.toDisposable(this._dataValidationModel.ruleChange$.pipe(m.filter(e=>e.unitId===this._workbook.getUnitId())).subscribe(t))}onDataValidationStatusChange(t){return a.toDisposable(this._dataValidationModel.validStatusChange$.pipe(m.filter(e=>e.unitId===this._workbook.getUnitId())).subscribe(t))}onBeforeAddDataValidation(t){return a.toDisposable(this._commandService.beforeCommandExecuted((e,r)=>{const i=e.params;if(e.id===o.AddSheetDataValidationCommand.id){if(i.unitId!==this._workbook.getUnitId())return;if(t(i,r)===!1)throw new Error("Command is stopped by the hook onBeforeAddDataValidation")}}))}onBeforeUpdateDataValidationCriteria(t){return a.toDisposable(this._commandService.beforeCommandExecuted((e,r)=>{const i=e.params;if(e.id===o.UpdateSheetDataValidationSettingCommand.id){if(i.unitId!==this._workbook.getUnitId())return;if(t(i,r)===!1)throw new Error("Command is stopped by the hook onBeforeUpdateDataValidationCriteria")}}))}onBeforeUpdateDataValidationRange(t){return a.toDisposable(this._commandService.beforeCommandExecuted((e,r)=>{const i=e.params;if(e.id===o.UpdateSheetDataValidationRangeCommand.id){if(i.unitId!==this._workbook.getUnitId())return;if(t(i,r)===!1)throw new Error("Command is stopped by the hook onBeforeUpdateDataValidationRange")}}))}onBeforeUpdateDataValidationOptions(t){return a.toDisposable(this._commandService.beforeCommandExecuted((e,r)=>{const i=e.params;if(e.id===o.UpdateSheetDataValidationOptionsCommand.id){if(i.unitId!==this._workbook.getUnitId())return;if(t(i,r)===!1)throw new Error("Command is stopped by the hook onBeforeUpdateDataValidationOptions")}}))}onBeforeDeleteDataValidation(t){return a.toDisposable(this._commandService.beforeCommandExecuted((e,r)=>{const i=e.params;if(e.id===o.RemoveSheetDataValidationCommand.id){if(i.unitId!==this._workbook.getUnitId())return;if(t(i,r)===!1)throw new Error("Command is stopped by the hook onBeforeDeleteDataValidation")}}))}onBeforeDeleteAllDataValidation(t){return a.toDisposable(this._commandService.beforeCommandExecuted((e,r)=>{const i=e.params;if(e.id===o.RemoveSheetAllDataValidationCommand.id){if(i.unitId!==this._workbook.getUnitId())return;if(t(i,r)===!1)throw new Error("Command is stopped by the hook onBeforeDeleteAllDataValidation")}}))}}s.FWorkbook.extend(S);class I extends s.FWorksheet{getDataValidations(){return this._injector.get(h.DataValidationModel).getRules(this._workbook.getUnitId(),this._worksheet.getSheetId()).map(e=>new l(e))}getValidatorStatus(){return this._injector.get(o.SheetsDataValidationValidatorService).validatorWorksheet(this._workbook.getUnitId(),this._worksheet.getSheetId())}}s.FWorksheet.extend(I);exports.FDataValidation=l;exports.FDataValidationBuilder=d;
package/lib/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const core=require("@univerjs/core"),dataValidation=require("@univerjs/data-validation"),sheets=require("@univerjs/sheets"),rxjs=require("rxjs"),engineFormula=require("@univerjs/engine-formula"),sheetsFormula=require("@univerjs/sheets-formula"),DATA_VALIDATION_PLUGIN_NAME="SHEET_DATA_VALIDATION_PLUGIN";var __defProp$9=Object.defineProperty,__getOwnPropDesc$9=Object.getOwnPropertyDescriptor,__decorateClass$9=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$9(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$9(target,key,result),result},"__decorateClass$9"),__decorateParam$9=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$9"),_a;exports.DataValidationCacheService=(_a=class extends core.Disposable{constructor(_commandService){super();__publicField(this,"_cacheMatrix",new Map);__publicField(this,"_dirtyRanges$",new rxjs.Subject);__publicField(this,"dirtyRanges$",this._dirtyRanges$.asObservable());this._commandService=_commandService,this._initDirtyRanges()}_initDirtyRanges(){this.disposeWithMe(this._commandService.onCommandExecuted(commandInfo=>{if(commandInfo.id===sheets.SetRangeValuesMutation.id){const{cellValue,unitId,subUnitId}=commandInfo.params;if(cellValue){const range=new core.ObjectMatrix(cellValue).getDataRange();if(range.endRow===-1)return;this._dirtyRanges$.next({unitId,subUnitId,ranges:[range]})}}}))}_ensureCache(unitId,subUnitId){let unitMap=this._cacheMatrix.get(unitId);unitMap||(unitMap=new Map,this._cacheMatrix.set(unitId,unitMap));let cacheMatrix=unitMap.get(subUnitId);return cacheMatrix||(cacheMatrix=new core.ObjectMatrix,unitMap.set(subUnitId,cacheMatrix)),cacheMatrix}ensureCache(unitId,subUnitId){return this._ensureCache(unitId,subUnitId)}addRule(unitId,subUnitId,rule){this.markRangeDirty(unitId,subUnitId,rule.ranges)}removeRule(unitId,subUnitId,rule){this._deleteRange(unitId,subUnitId,rule.ranges)}updateRuleRanges(unitId,subUnitId,ruleId,newRanges,oldRanges){const cache=this._ensureCache(unitId,subUnitId);oldRanges.forEach(range=>{core.Range.foreach(range,(row,col)=>{const item=cache.getValue(row,col);item&&(item.temp=!0)})}),newRanges.forEach(range=>{core.Range.foreach(range,(row,col)=>{const item=cache.getValue(row,col);item&&item.ruleId===ruleId?item.temp=!1:cache.setValue(row,col,void 0)})}),oldRanges.forEach(range=>{core.Range.foreach(range,(row,col)=>{const item=cache.getValue(row,col);item&&item.temp===!0&&cache.realDeleteValue(row,col)})}),this._dirtyRanges$.next({unitId,subUnitId,ranges:[...oldRanges,...newRanges]})}markRangeDirty(unitId,subUnitId,ranges){const cache=this._ensureCache(unitId,subUnitId);ranges.forEach(range=>{core.Range.foreach(range,(row,col)=>{cache.setValue(row,col,void 0)})}),this._dirtyRanges$.next({unitId,subUnitId,ranges})}markCellDirty(unitId,subUnitId,row,col){this._ensureCache(unitId,subUnitId).setValue(row,col,void 0),this._dirtyRanges$.next({unitId,subUnitId,ranges:[{startRow:row,startColumn:col,endRow:row,endColumn:col}]})}_deleteRange(unitId,subUnitId,ranges){const cache=this._ensureCache(unitId,subUnitId);ranges.forEach(range=>{core.Range.foreach(range,(row,col)=>{cache.realDeleteValue(row,col)})}),this._dirtyRanges$.next({unitId,subUnitId,ranges})}getValue(unitId,subUnitId,row,col){return this._ensureCache(unitId,subUnitId).getValue(row,col)}setValue(unitId,subUnitId,row,col,value){return this._ensureCache(unitId,subUnitId).setValue(row,col,value)}},__name(_a,"DataValidationCacheService"),_a);exports.DataValidationCacheService=__decorateClass$9([__decorateParam$9(0,core.Inject(core.ICommandService))],exports.DataValidationCacheService);var __defProp$8=Object.defineProperty,__getOwnPropDesc$8=Object.getOwnPropertyDescriptor,__decorateClass$8=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$8(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$8(target,key,result),result},"__decorateClass$8"),__decorateParam$8=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$8");function transformFormula(lexerTreeBuilder,formula,originRow,originCol,targetRow,targetCol){return lexerTreeBuilder.moveFormulaRefOffset(formula,targetCol-originCol,targetRow-originRow)}__name(transformFormula,"transformFormula");var _a2;exports.DataValidationCustomFormulaService=(_a2=class extends core.Disposable{constructor(_instanceSrv,_registerOtherFormulaService,_lexerTreeBuilder,_dataValidationModel,_dataValidationCacheService,_injector){super();__publicField(this,"_formulaMap",new Map);__publicField(this,"_ruleFormulaMap",new Map);__publicField(this,"_formulaCellMap",new Map);this._instanceSrv=_instanceSrv,this._registerOtherFormulaService=_registerOtherFormulaService,this._lexerTreeBuilder=_lexerTreeBuilder,this._dataValidationModel=_dataValidationModel,this._dataValidationCacheService=_dataValidationCacheService,this._injector=_injector,this._initFormulaResultHandler()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(resultMap=>{for(const unitId in resultMap){const unitMap=resultMap[unitId];if(this._instanceSrv.getUnitType(unitId)===core.UniverInstanceType.UNIVER_SHEET)for(const subUnitId in unitMap){const results=unitMap[subUnitId],{formulaCellMap,ruleFormulaMap}=this._ensureMaps(unitId,subUnitId);results.forEach(result=>{var _a12,_b;const ruleInfo=ruleFormulaMap.get((_a12=result.extra)==null?void 0:_a12.ruleId),cellInfo=formulaCellMap.get(result.formulaId),rule=this._dataValidationModel.getRuleById(unitId,subUnitId,(_b=result.extra)==null?void 0:_b.ruleId);rule&&ruleInfo&&!ruleInfo.isTransformable&&this._dataValidationCacheService.markRangeDirty(unitId,subUnitId,rule.ranges),cellInfo&&this._dataValidationCacheService.markCellDirty(unitId,subUnitId,cellInfo.row,cellInfo.column)})}}}))}_ensureMaps(unitId,subUnitId){let formulaUnitMap=this._formulaMap.get(unitId),ruleFormulaUnitMap=this._ruleFormulaMap.get(unitId),formulaCellUnitMap=this._formulaCellMap.get(unitId);(!formulaUnitMap||!ruleFormulaUnitMap||!formulaCellUnitMap)&&(formulaUnitMap=new Map,ruleFormulaUnitMap=new Map,formulaCellUnitMap=new Map,this._formulaMap.set(unitId,formulaUnitMap),this._ruleFormulaMap.set(unitId,ruleFormulaUnitMap),this._formulaCellMap.set(unitId,formulaCellUnitMap));let formulaMap=formulaUnitMap.get(subUnitId),ruleFormulaMap=ruleFormulaUnitMap.get(subUnitId),formulaCellMap=formulaCellUnitMap.get(subUnitId);return(!formulaMap||!ruleFormulaMap||!formulaCellMap)&&(formulaMap=new core.ObjectMatrix,formulaUnitMap.set(subUnitId,formulaMap),ruleFormulaMap=new Map,ruleFormulaUnitMap.set(subUnitId,ruleFormulaMap),formulaCellMap=new Map,formulaCellUnitMap.set(subUnitId,formulaCellMap)),{formulaMap,ruleFormulaMap,formulaCellMap}}_registerFormula(unitId,subUnitId,ruleId,formulaString){return this._registerOtherFormulaService.registerFormula(unitId,subUnitId,formulaString,{ruleId})}deleteByRuleId(unitId,subUnitId,ruleId){const{formulaMap,formulaCellMap,ruleFormulaMap}=this._ensureMaps(unitId,subUnitId),rule=this._dataValidationModel.getRuleById(unitId,subUnitId,ruleId),formulaIdList=new Set,formulaInfo=ruleFormulaMap.get(ruleId);!rule||!formulaInfo||(ruleFormulaMap.delete(ruleId),rule.ranges.forEach(range=>{core.Range.foreach(range,(row,col)=>{const value=formulaMap.getValue(row,col);if(value&&value.ruleId===ruleId){const{formulaId}=value;formulaMap.realDeleteValue(row,col),formulaIdList.add(formulaId),formulaCellMap.delete(formulaId)}})}),this._registerOtherFormulaService.deleteFormula(unitId,subUnitId,Array.from(formulaIdList.values())))}_addFormulaByRange(unitId,subUnitId,ruleId,formula,ranges){const{formulaMap,ruleFormulaMap,formulaCellMap}=this._ensureMaps(unitId,subUnitId);if(!formula)return;const originRow=ranges[0].startRow,originCol=ranges[0].startColumn;let originFormulaId;ranges.forEach(range=>{core.Range.foreach(range,(row,column)=>{const relativeFormula=transformFormula(this._lexerTreeBuilder,formula,originRow,originCol,row,column),formulaId=this._registerFormula(unitId,subUnitId,ruleId,relativeFormula);formulaMap.setValue(row,column,{formulaId,ruleId}),formulaCellMap.set(formulaId,{row,column})})}),ruleFormulaMap.set(ruleId,{formula,originCol,originRow,formulaId:originFormulaId,isTransformable:!0})}addRule(unitId,subUnitId,rule){const{ranges,formula1,uid:ruleId,type}=rule;type!==core.DataValidationType.CUSTOM||!formula1||!core.isFormulaString(formula1)||this._addFormulaByRange(unitId,subUnitId,ruleId,formula1,ranges)}updateRuleRanges(unitId,subUnitId,ruleId,oldRanges,newRanges){const{formulaMap,ruleFormulaMap,formulaCellMap}=this._ensureMaps(unitId,subUnitId),info=ruleFormulaMap.get(ruleId);if(!info)return;const{formula,originCol,originRow,isTransformable,formulaId}=info,deleteFormulaIdList=new Set;oldRanges.forEach(range=>{core.Range.foreach(range,(row,col)=>{const value=formulaMap.getValue(row,col);value&&value.ruleId===ruleId&&(value.temp=!0)})}),newRanges.forEach(range=>{core.Range.foreach(range,(row,col)=>{var _a12;const oldValue=(_a12=formulaMap.getValue(row,col))!=null?_a12:{};if(oldValue.ruleId!==ruleId){const oldRuleFormula=ruleFormulaMap.get(oldValue.ruleId);if(oldRuleFormula!=null&&oldRuleFormula.isTransformable&&deleteFormulaIdList.add(oldValue.formulaId),isTransformable){const relativeText=transformFormula(this._lexerTreeBuilder,formula,originRow,originCol,row,col),formulaId2=this._registerFormula(unitId,subUnitId,ruleId,relativeText);formulaMap.setValue(row,col,{ruleId,formulaId:formulaId2}),formulaCellMap.set(formulaId2,{row,column:col})}else formulaMap.setValue(row,col,{ruleId,formulaId})}else oldValue.temp=!1})}),oldRanges.forEach(range=>{core.Range.foreach(range,(row,col)=>{const value=formulaMap.getValue(row,col);value&&value.ruleId===ruleId&&value.temp===!0&&(formulaMap.realDeleteValue(row,col),isTransformable&&deleteFormulaIdList.add(value.formulaId))})}),deleteFormulaIdList.forEach(formulaId2=>{formulaCellMap.delete(formulaId2)}),this._registerOtherFormulaService.deleteFormula(unitId,subUnitId,Array.from(deleteFormulaIdList.values()))}updateRuleFormula(unitId,subUnitId,ruleId,ranges,formula){const{ruleFormulaMap}=this._ensureMaps(unitId,subUnitId),current=ruleFormulaMap.get(ruleId);(!current||current.formula!==formula)&&this._addFormulaByRange(unitId,subUnitId,ruleId,formula,ranges)}getCellFormulaValue(unitId,subUnitId,row,col){const{formulaMap}=this._ensureMaps(unitId,subUnitId),current=formulaMap.getValue(row,col);return current?this._registerOtherFormulaService.getFormulaValue(unitId,subUnitId,current.formulaId):Promise.resolve(void 0)}getRuleFormulaInfo(unitId,subUnitId,ruleId){const{ruleFormulaMap}=this._ensureMaps(unitId,subUnitId);return ruleFormulaMap.get(ruleId)}},__name(_a2,"DataValidationCustomFormulaService"),_a2);exports.DataValidationCustomFormulaService=__decorateClass$8([__decorateParam$8(0,core.IUniverInstanceService),__decorateParam$8(1,core.Inject(sheetsFormula.RegisterOtherFormulaService)),__decorateParam$8(2,core.Inject(engineFormula.LexerTreeBuilder)),__decorateParam$8(3,core.Inject(dataValidation.DataValidationModel)),__decorateParam$8(4,core.Inject(exports.DataValidationCacheService)),__decorateParam$8(5,core.Inject(core.Injector))],exports.DataValidationCustomFormulaService);var __defProp$7=Object.defineProperty,__getOwnPropDesc$7=Object.getOwnPropertyDescriptor,__decorateClass$7=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$7(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$7(target,key,result),result},"__decorateClass$7"),__decorateParam$7=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$7"),_a3;exports.DataValidationFormulaService=(_a3=class extends core.Disposable{constructor(_instanceService,_registerOtherFormulaService,_dataValidationCacheService,_dataValidationModel){super();__publicField(this,"_formulaRuleMap",new Map);this._instanceService=_instanceService,this._registerOtherFormulaService=_registerOtherFormulaService,this._dataValidationCacheService=_dataValidationCacheService,this._dataValidationModel=_dataValidationModel,this._initFormulaResultHandler()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(resultMap=>{for(const unitId in resultMap){const unitMap=resultMap[unitId];if(this._instanceService.getUnitType(unitId)===core.UniverInstanceType.UNIVER_SHEET)for(const subUnitId in unitMap){const results=unitMap[subUnitId],formulaMap=this._ensureRuleFormulaMap(unitId,subUnitId);results.forEach(result=>{var _a12,_b;if(formulaMap.get((_a12=result.extra)==null?void 0:_a12.ruleId)){const rule=this._dataValidationModel.getRuleById(unitId,subUnitId,(_b=result.extra)==null?void 0:_b.ruleId);rule&&this._dataValidationCacheService.markRangeDirty(unitId,subUnitId,rule.ranges)}})}}}))}_ensureRuleFormulaMap(unitId,subUnitId){let unitMap=this._formulaRuleMap.get(unitId);unitMap||(unitMap=new Map,this._formulaRuleMap.set(unitId,unitMap));let subUnitMap=unitMap.get(subUnitId);return subUnitMap||(subUnitMap=new Map,unitMap.set(subUnitId,subUnitMap)),subUnitMap}addRule(unitId,subUnitId,ruleId,formula1,formula2){const isFormula1Legal=core.isFormulaString(formula1),isFormula2Legal=core.isFormulaString(formula2);if(!isFormula1Legal&&!isFormula2Legal)return;const formulaRuleMap=this._ensureRuleFormulaMap(unitId,subUnitId),item=[void 0,void 0];if(isFormula1Legal){const id=this._registerOtherFormulaService.registerFormula(unitId,subUnitId,formula1,{ruleId});item[0]={id,text:formula1}}if(isFormula2Legal){const id=this._registerOtherFormulaService.registerFormula(unitId,subUnitId,formula2,{ruleId});item[1]={id,text:formula2}}formulaRuleMap.set(ruleId,item)}removeRule(unitId,subUnitId,ruleId){const item=this._ensureRuleFormulaMap(unitId,subUnitId).get(ruleId);if(!item)return;const[formula1,formula2]=item,idList=[formula1==null?void 0:formula1.id,formula2==null?void 0:formula2.id].filter(Boolean);idList.length&&this._registerOtherFormulaService.deleteFormula(unitId,subUnitId,idList)}updateRuleFormulaText(unitId,subUnitId,ruleId,formula1,formula2){const item=this._ensureRuleFormulaMap(unitId,subUnitId).get(ruleId);if(!item){this.addRule(unitId,subUnitId,ruleId,formula1,formula2);return}const[oldFormula1,oldFormula2]=item;if((oldFormula1==null?void 0:oldFormula1.text)!==formula1)if(oldFormula1&&this._registerOtherFormulaService.deleteFormula(unitId,subUnitId,[oldFormula1.id]),core.isFormulaString(formula1)){const formulaId=this._registerOtherFormulaService.registerFormula(unitId,subUnitId,formula1,{ruleId});item[0]={text:formula1,id:formulaId}}else item[0]=void 0;if((oldFormula2==null?void 0:oldFormula2.text)!==formula2)if(oldFormula2&&this._registerOtherFormulaService.deleteFormula(unitId,subUnitId,[oldFormula2.id]),core.isFormulaString(formula2)){const formulaId=this._registerOtherFormulaService.registerFormula(unitId,subUnitId,formula2,{ruleId});item[1]={text:formula2,id:formulaId}}else item[1]=void 0}getRuleFormulaResult(unitId,subUnitId,ruleId){const formulaInfo=this._ensureRuleFormulaMap(unitId,subUnitId).get(ruleId);if(!formulaInfo)return Promise.resolve(null);const getResult=__name(async info=>info&&this._registerOtherFormulaService.getFormulaValue(unitId,subUnitId,info.id),"getResult");return Promise.all([getResult(formulaInfo[0]),getResult(formulaInfo[1])])}getRuleFormulaResultSync(unitId,subUnitId,ruleId){const formulaInfo=this._ensureRuleFormulaMap(unitId,subUnitId).get(ruleId);if(formulaInfo)return formulaInfo.map(i=>{if(i)return this._registerOtherFormulaService.getFormulaValueSync(unitId,subUnitId,i.id)})}getRuleFormulaInfo(unitId,subUnitId,ruleId){return this._ensureRuleFormulaMap(unitId,subUnitId).get(ruleId)}},__name(_a3,"DataValidationFormulaService"),_a3);exports.DataValidationFormulaService=__decorateClass$7([__decorateParam$7(0,core.IUniverInstanceService),__decorateParam$7(1,core.Inject(sheetsFormula.RegisterOtherFormulaService)),__decorateParam$7(2,core.Inject(exports.DataValidationCacheService)),__decorateParam$7(3,core.Inject(dataValidation.DataValidationModel))],exports.DataValidationFormulaService);function getCellValueOrigin(cell){return core.getOriginCellValue(cell)}__name(getCellValueOrigin,"getCellValueOrigin");function getStringCellValue(cell){var _a12;return String((_a12=getCellValueOrigin(cell))!=null?_a12:"")}__name(getStringCellValue,"getStringCellValue");var _a4;const Interval=(_a4=class{constructor(low,high){this.low=low,this.high=high}clone(){return new _a4(this.low,this.high)}get max(){return this.clone()}less_than(other_interval){return this.low<other_interval.low||this.low===other_interval.low&&this.high<other_interval.high}equal_to(other_interval){return this.low===other_interval.low&&this.high===other_interval.high}intersect(other_interval){return!this.not_intersect(other_interval)}not_intersect(other_interval){return this.high<other_interval.low||other_interval.high<this.low}merge(other_interval){return new _a4(this.low===void 0?other_interval.low:this.low<other_interval.low?this.low:other_interval.low,this.high===void 0?other_interval.high:this.high>other_interval.high?this.high:other_interval.high)}output(){return[this.low,this.high]}static comparable_max(interval1,interval2){return interval1.merge(interval2)}static comparable_less_than(val1,val2){return val1<val2}},__name(_a4,"Interval"),_a4),RB_TREE_COLOR_RED=0,RB_TREE_COLOR_BLACK=1,_Node=class _Node{constructor(key=void 0,value=void 0,left=null,right=null,parent=null,color=RB_TREE_COLOR_BLACK){if(this.left=left,this.right=right,this.parent=parent,this.color=color,this.item={key,value},key&&key instanceof Array&&key.length===2&&!Number.isNaN(key[0])&&!Number.isNaN(key[1])){let[low,high]=key;low>high&&([low,high]=[high,low]),this.item.key=new Interval(low,high)}this.max=this.item.key?this.item.key.max:void 0}isNil(){return this.item.key===void 0&&this.item.value===void 0&&this.left===null&&this.right===null&&this.color===RB_TREE_COLOR_BLACK}_value_less_than(other_node){return this.item.value&&other_node.item.value&&this.item.value.less_than?this.item.value.less_than(other_node.item.value):this.item.value<other_node.item.value}less_than(other_node){return this.item.value===this.item.key&&other_node.item.value===other_node.item.key?this.item.key.less_than(other_node.item.key):this.item.key.less_than(other_node.item.key)||this.item.key.equal_to(other_node.item.key)&&this._value_less_than(other_node)}_value_equal(other_node){return this.item.value&&other_node.item.value&&this.item.value.equal_to?this.item.value.equal_to(other_node.item.value):this.item.value===other_node.item.value}equal_to(other_node){return this.item.value===this.item.key&&other_node.item.value===other_node.item.key?this.item.key.equal_to(other_node.item.key):this.item.key.equal_to(other_node.item.key)&&this._value_equal(other_node)}intersect(other_node){return this.item.key.intersect(other_node.item.key)}copy_data(other_node){this.item.key=other_node.item.key,this.item.value=other_node.item.value}update_max(){if(this.max=this.item.key?this.item.key.max:void 0,this.right&&this.right.max){const comparable_max=this.item.key.constructor.comparable_max;this.max=comparable_max(this.max,this.right.max)}if(this.left&&this.left.max){const comparable_max=this.item.key.constructor.comparable_max;this.max=comparable_max(this.max,this.left.max)}}not_intersect_left_subtree(search_node){const comparable_less_than=this.item.key.constructor.comparable_less_than;let high=this.left.max.high!==void 0?this.left.max.high:this.left.max;return comparable_less_than(high,search_node.item.key.low)}not_intersect_right_subtree(search_node){const comparable_less_than=this.item.key.constructor.comparable_less_than;let low=this.right.max.low!==void 0?this.right.max.low:this.right.item.key.low;return comparable_less_than(search_node.item.key.high,low)}};__name(_Node,"Node");let Node=_Node;const _IntervalTree=class _IntervalTree{constructor(){this.root=null,this.nil_node=new Node}get size(){let count=0;return this.tree_walk(this.root,()=>count++),count}get keys(){let res=[];return this.tree_walk(this.root,node=>res.push(node.item.key.output?node.item.key.output():node.item.key)),res}get values(){let res=[];return this.tree_walk(this.root,node=>res.push(node.item.value)),res}get items(){let res=[];return this.tree_walk(this.root,node=>res.push({key:node.item.key.output?node.item.key.output():node.item.key,value:node.item.value})),res}isEmpty(){return this.root==null||this.root===this.nil_node}clear(){this.root=null}insert(key,value=key){if(key===void 0)return;let insert_node=new Node(key,value,this.nil_node,this.nil_node,null,RB_TREE_COLOR_RED);return this.tree_insert(insert_node),this.recalc_max(insert_node),insert_node}exist(key,value=key){let search_node=new Node(key,value);return!!this.tree_search(this.root,search_node)}remove(key,value=key){let search_node=new Node(key,value),delete_node=this.tree_search(this.root,search_node);return delete_node&&this.tree_delete(delete_node),delete_node}search(interval,outputMapperFn=(value,key)=>value===key?key.output():value){let search_node=new Node(interval),resp_nodes=[];return this.tree_search_interval(this.root,search_node,resp_nodes),resp_nodes.map(node=>outputMapperFn(node.item.value,node.item.key))}intersect_any(interval){let search_node=new Node(interval);return this.tree_find_any_interval(this.root,search_node)}forEach(visitor){this.tree_walk(this.root,node=>visitor(node.item.key,node.item.value))}map(callback){const tree=new _IntervalTree;return this.tree_walk(this.root,node=>tree.insert(node.item.key,callback(node.item.value,node.item.key))),tree}*iterate(interval,outputMapperFn=(value,key)=>value===key?key.output():value){let node;for(interval?node=this.tree_search_nearest_forward(this.root,new Node(interval)):this.root&&(node=this.local_minimum(this.root));node;)yield outputMapperFn(node.item.value,node.item.key),node=this.tree_successor(node)}recalc_max(node){let node_current=node;for(;node_current.parent!=null;)node_current.parent.update_max(),node_current=node_current.parent}tree_insert(insert_node){let current_node=this.root,parent_node=null;if(this.root==null||this.root===this.nil_node)this.root=insert_node;else{for(;current_node!==this.nil_node;)parent_node=current_node,insert_node.less_than(current_node)?current_node=current_node.left:current_node=current_node.right;insert_node.parent=parent_node,insert_node.less_than(parent_node)?parent_node.left=insert_node:parent_node.right=insert_node}this.insert_fixup(insert_node)}insert_fixup(insert_node){let current_node,uncle_node;for(current_node=insert_node;current_node!==this.root&&current_node.parent.color===RB_TREE_COLOR_RED;)current_node.parent===current_node.parent.parent.left?(uncle_node=current_node.parent.parent.right,uncle_node.color===RB_TREE_COLOR_RED?(current_node.parent.color=RB_TREE_COLOR_BLACK,uncle_node.color=RB_TREE_COLOR_BLACK,current_node.parent.parent.color=RB_TREE_COLOR_RED,current_node=current_node.parent.parent):(current_node===current_node.parent.right&&(current_node=current_node.parent,this.rotate_left(current_node)),current_node.parent.color=RB_TREE_COLOR_BLACK,current_node.parent.parent.color=RB_TREE_COLOR_RED,this.rotate_right(current_node.parent.parent))):(uncle_node=current_node.parent.parent.left,uncle_node.color===RB_TREE_COLOR_RED?(current_node.parent.color=RB_TREE_COLOR_BLACK,uncle_node.color=RB_TREE_COLOR_BLACK,current_node.parent.parent.color=RB_TREE_COLOR_RED,current_node=current_node.parent.parent):(current_node===current_node.parent.left&&(current_node=current_node.parent,this.rotate_right(current_node)),current_node.parent.color=RB_TREE_COLOR_BLACK,current_node.parent.parent.color=RB_TREE_COLOR_RED,this.rotate_left(current_node.parent.parent)));this.root.color=RB_TREE_COLOR_BLACK}tree_delete(delete_node){let cut_node,fix_node;delete_node.left===this.nil_node||delete_node.right===this.nil_node?cut_node=delete_node:cut_node=this.tree_successor(delete_node),cut_node.left!==this.nil_node?fix_node=cut_node.left:fix_node=cut_node.right,fix_node.parent=cut_node.parent,cut_node===this.root?this.root=fix_node:(cut_node===cut_node.parent.left?cut_node.parent.left=fix_node:cut_node.parent.right=fix_node,cut_node.parent.update_max()),this.recalc_max(fix_node),cut_node!==delete_node&&(delete_node.copy_data(cut_node),delete_node.update_max(),this.recalc_max(delete_node)),cut_node.color===RB_TREE_COLOR_BLACK&&this.delete_fixup(fix_node)}delete_fixup(fix_node){let current_node=fix_node,brother_node;for(;current_node!==this.root&&current_node.parent!=null&&current_node.color===RB_TREE_COLOR_BLACK;)current_node===current_node.parent.left?(brother_node=current_node.parent.right,brother_node.color===RB_TREE_COLOR_RED&&(brother_node.color=RB_TREE_COLOR_BLACK,current_node.parent.color=RB_TREE_COLOR_RED,this.rotate_left(current_node.parent),brother_node=current_node.parent.right),brother_node.left.color===RB_TREE_COLOR_BLACK&&brother_node.right.color===RB_TREE_COLOR_BLACK?(brother_node.color=RB_TREE_COLOR_RED,current_node=current_node.parent):(brother_node.right.color===RB_TREE_COLOR_BLACK&&(brother_node.color=RB_TREE_COLOR_RED,brother_node.left.color=RB_TREE_COLOR_BLACK,this.rotate_right(brother_node),brother_node=current_node.parent.right),brother_node.color=current_node.parent.color,current_node.parent.color=RB_TREE_COLOR_BLACK,brother_node.right.color=RB_TREE_COLOR_BLACK,this.rotate_left(current_node.parent),current_node=this.root)):(brother_node=current_node.parent.left,brother_node.color===RB_TREE_COLOR_RED&&(brother_node.color=RB_TREE_COLOR_BLACK,current_node.parent.color=RB_TREE_COLOR_RED,this.rotate_right(current_node.parent),brother_node=current_node.parent.left),brother_node.left.color===RB_TREE_COLOR_BLACK&&brother_node.right.color===RB_TREE_COLOR_BLACK?(brother_node.color=RB_TREE_COLOR_RED,current_node=current_node.parent):(brother_node.left.color===RB_TREE_COLOR_BLACK&&(brother_node.color=RB_TREE_COLOR_RED,brother_node.right.color=RB_TREE_COLOR_BLACK,this.rotate_left(brother_node),brother_node=current_node.parent.left),brother_node.color=current_node.parent.color,current_node.parent.color=RB_TREE_COLOR_BLACK,brother_node.left.color=RB_TREE_COLOR_BLACK,this.rotate_right(current_node.parent),current_node=this.root));current_node.color=RB_TREE_COLOR_BLACK}tree_search(node,search_node){if(!(node==null||node===this.nil_node))return search_node.equal_to(node)?node:search_node.less_than(node)?this.tree_search(node.left,search_node):this.tree_search(node.right,search_node)}tree_search_nearest_forward(node,search_node){let best,curr=node;for(;curr&&curr!==this.nil_node;)curr.less_than(search_node)?curr.intersect(search_node)?(best=curr,curr=curr.left):curr=curr.right:((!best||curr.less_than(best))&&(best=curr),curr=curr.left);return best||null}tree_search_interval(node,search_node,res){node!=null&&node!==this.nil_node&&(node.left!==this.nil_node&&!node.not_intersect_left_subtree(search_node)&&this.tree_search_interval(node.left,search_node,res),node.intersect(search_node)&&res.push(node),node.right!==this.nil_node&&!node.not_intersect_right_subtree(search_node)&&this.tree_search_interval(node.right,search_node,res))}tree_find_any_interval(node,search_node){let found=!1;return node!=null&&node!==this.nil_node&&(node.left!==this.nil_node&&!node.not_intersect_left_subtree(search_node)&&(found=this.tree_find_any_interval(node.left,search_node)),found||(found=node.intersect(search_node)),!found&&node.right!==this.nil_node&&!node.not_intersect_right_subtree(search_node)&&(found=this.tree_find_any_interval(node.right,search_node))),found}local_minimum(node){let node_min=node;for(;node_min.left!=null&&node_min.left!==this.nil_node;)node_min=node_min.left;return node_min}local_maximum(node){let node_max=node;for(;node_max.right!=null&&node_max.right!==this.nil_node;)node_max=node_max.right;return node_max}tree_successor(node){let node_successor,current_node,parent_node;if(node.right!==this.nil_node)node_successor=this.local_minimum(node.right);else{for(current_node=node,parent_node=node.parent;parent_node!=null&&parent_node.right===current_node;)current_node=parent_node,parent_node=parent_node.parent;node_successor=parent_node}return node_successor}rotate_left(x){let y=x.right;x.right=y.left,y.left!==this.nil_node&&(y.left.parent=x),y.parent=x.parent,x===this.root?this.root=y:x===x.parent.left?x.parent.left=y:x.parent.right=y,y.left=x,x.parent=y,x!=null&&x!==this.nil_node&&x.update_max(),y=x.parent,y!=null&&y!==this.nil_node&&y.update_max()}rotate_right(y){let x=y.left;y.left=x.right,x.right!==this.nil_node&&(x.right.parent=y),x.parent=y.parent,y===this.root?this.root=x:y===y.parent.left?y.parent.left=x:y.parent.right=x,x.right=y,y.parent=x,y!==null&&y!==this.nil_node&&y.update_max(),x=y.parent,x!=null&&x!==this.nil_node&&x.update_max()}tree_walk(node,action){node!=null&&node!==this.nil_node&&(this.tree_walk(node.left,action),action(node),this.tree_walk(node.right,action))}testRedBlackProperty(){let res=!0;return this.tree_walk(this.root,function(node){node.color===RB_TREE_COLOR_RED&&(node.left.color===RB_TREE_COLOR_BLACK&&node.right.color===RB_TREE_COLOR_BLACK||(res=!1))}),res}testBlackHeightProperty(node){let height=0,heightLeft=0,heightRight=0;if(node.color===RB_TREE_COLOR_BLACK&&height++,node.left!==this.nil_node?heightLeft=this.testBlackHeightProperty(node.left):heightLeft=1,node.right!==this.nil_node?heightRight=this.testBlackHeightProperty(node.right):heightRight=1,heightLeft!==heightRight)throw new Error("Red-black height property violated");return height+=heightLeft,height}};__name(_IntervalTree,"IntervalTree");let IntervalTree=_IntervalTree;const _RuleMatrix=class _RuleMatrix{constructor(value,_unitId,_subUnitId,_univerInstanceService,_disableTree=!1){__publicField(this,"_map");__publicField(this,"_tree",new Map);__publicField(this,"_dirty",!0);__publicField(this,"_buildTree",__name(()=>{if(!this._dirty||this._disableTree)return;const map=new Map;this._map.forEach((ranges,ruleId)=>{ranges.forEach(range=>{for(let col=range.startColumn;col<=range.endColumn;col++){let items=map.get(col);items||(items=[],map.set(col,items)),items.push({startRow:range.startRow,endRow:range.endRow,ruleId})}})});const treeMap=new Map;map.forEach((items,col)=>{const tree=new IntervalTree;items.forEach(item=>{tree.insert([item.startRow,item.endRow],item.ruleId)}),treeMap.set(col,tree)}),this._tree=treeMap,this._dirty=!1},"_buildTree"));__publicField(this,"_debonceBuildTree",core.debounce(this._buildTree,0));this._unitId=_unitId,this._subUnitId=_subUnitId,this._univerInstanceService=_univerInstanceService,this._disableTree=_disableTree,this._map=value,this._buildTree()}get _worksheet(){var _a12;return(_a12=this._univerInstanceService.getUnit(this._unitId,core.UniverInstanceType.UNIVER_SHEET))==null?void 0:_a12.getSheetBySheetId(this._subUnitId)}addRule(rule){if(!this._worksheet)return;const ruleId=rule.uid,ranges=rule.ranges.map(range=>core.Range.transformRange(range,this._worksheet));this._map.forEach((value,key)=>{const newRanges=core.Rectangle.subtractMulti(value,ranges);newRanges.length===0?this._map.delete(key):this._map.set(key,newRanges)}),this._dirty=!0,this._map.set(ruleId,ranges),this._debonceBuildTree()}removeRange(_ranges){if(!this._worksheet)return;const ranges=_ranges.map(range=>core.Range.transformRange(range,this._worksheet));this._map.forEach((value,key)=>{const newRanges=core.Rectangle.subtractMulti(value,ranges);newRanges.length===0?this._map.delete(key):this._map.set(key,newRanges)}),this._dirty=!0,this._debonceBuildTree()}removeRule(rule){this._map.delete(rule.uid),this._dirty=!0,this._debonceBuildTree()}updateRange(ruleId,_newRanges){if(!this._worksheet)return;this._map.delete(ruleId);const ranges=_newRanges.map(range=>core.Range.transformRange(range,this._worksheet));this._map.forEach((value,key)=>{const newRanges=core.Rectangle.subtractMulti(value,ranges);newRanges.length===0?this._map.delete(key):this._map.set(key,newRanges)}),this._map.set(ruleId,ranges),this._dirty=!0,this._debonceBuildTree()}addRangeRules(rules){rules.forEach(({id:ruleId,ranges})=>{if(!ranges.length)return;let current=this._map.get(ruleId);current?(this._map.set(ruleId,core.Rectangle.mergeRanges([...current,...ranges])),current=this._map.get(ruleId)):(current=ranges,this._map.set(ruleId,current)),this._map.forEach((value,key)=>{if(key===ruleId)return;const newRanges=core.Rectangle.subtractMulti(value,ranges);newRanges.length===0?this._map.delete(key):this._map.set(key,newRanges)})}),this._dirty=!0,this._debonceBuildTree()}diff(rules){const mutations=[];let deleteIndex=0;return rules.forEach((rule,index)=>{var _a12;const newRanges=(_a12=this._map.get(rule.uid))!=null?_a12:[],oldRanges=rule.ranges;newRanges.length!==0&&(newRanges.length!==oldRanges.length||newRanges.some((range,i)=>!core.Rectangle.equals(range,oldRanges[i])))&&mutations.push({type:"update",ruleId:rule.uid,oldRanges,newRanges:core.Rectangle.sort(newRanges),rule}),newRanges.length===0&&(mutations.push({type:"delete",rule,index:index-deleteIndex}),deleteIndex++)}),mutations}diffWithAddition(rules,additionRules){const mutations=[];let deleteIndex=0;return rules.forEach((rule,index)=>{var _a12;const newRanges=(_a12=this._map.get(rule.uid))!=null?_a12:[],oldRanges=rule.ranges;newRanges.length!==0&&(newRanges.length!==oldRanges.length||newRanges.some((range,i)=>!core.Rectangle.equals(range,oldRanges[i])))&&mutations.push({type:"update",ruleId:rule.uid,oldRanges,newRanges:core.Rectangle.sort(newRanges),rule}),newRanges.length===0&&(mutations.push({type:"delete",rule,index:index-deleteIndex}),deleteIndex++)}),Array.from(additionRules).forEach(rule=>{var _a12;const newRanges=(_a12=this._map.get(rule.uid))!=null?_a12:[];mutations.push({type:"add",rule:{...rule,ranges:core.Rectangle.sort(newRanges)}})}),mutations}clone(){return new _RuleMatrix(new Map(core.Tools.deepClone(Array.from(this._map.entries()))),this._unitId,this._subUnitId,this._univerInstanceService,!0)}getValue(row,col){this._dirty&&this._buildTree();const tree=this._tree.get(col);if(!tree)return;const result=tree.search([row,row]);return result.length>0?result[0]:void 0}};__name(_RuleMatrix,"RuleMatrix");let RuleMatrix=_RuleMatrix;var __defProp$6=Object.defineProperty,__getOwnPropDesc$6=Object.getOwnPropertyDescriptor,__decorateClass$6=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$6(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$6(target,key,result),result},"__decorateClass$6"),__decorateParam$6=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$6"),_a5;exports.SheetDataValidationModel=(_a5=class extends core.Disposable{constructor(_dataValidationModel,_univerInstanceService,_dataValidatorRegistryService,_dataValidationCacheService,_dataValidationFormulaService,_dataValidationCustomFormulaService,_commandService){super();__publicField(this,"_ruleMatrixMap",new Map);__publicField(this,"_validStatusChange$",new rxjs.Subject);__publicField(this,"_ruleChange$",new rxjs.Subject);__publicField(this,"ruleChange$",this._ruleChange$.asObservable());__publicField(this,"validStatusChange$",this._validStatusChange$.asObservable());this._dataValidationModel=_dataValidationModel,this._univerInstanceService=_univerInstanceService,this._dataValidatorRegistryService=_dataValidatorRegistryService,this._dataValidationCacheService=_dataValidationCacheService,this._dataValidationFormulaService=_dataValidationFormulaService,this._dataValidationCustomFormulaService=_dataValidationCustomFormulaService,this._commandService=_commandService,this._initRuleUpdateListener(),this.disposeWithMe(()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()}),this._initUniverInstanceListener()}_initUniverInstanceListener(){this.disposeWithMe(this._univerInstanceService.unitDisposed$.subscribe(unit=>{this._ruleMatrixMap.delete(unit.getUnitId())})),this.disposeWithMe(this._commandService.onCommandExecuted(command=>{if(command.id===sheets.RemoveSheetMutation.id){const{unitId,subUnitId}=command.params,subUnitMap=this._ruleMatrixMap.get(unitId);subUnitMap&&subUnitMap.delete(subUnitId)}}))}_initRuleUpdateListener(){const allRules=this._dataValidationModel.getAll();for(const[unitId,subUnitMap]of allRules)for(const[subUnitId,rules]of subUnitMap)for(const rule of rules)this._addRule(unitId,subUnitId,rule),this._ruleChange$.next({type:"add",unitId,subUnitId,rule,source:"patched"});this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(ruleChange=>{switch(ruleChange.type){case"add":this._addRule(ruleChange.unitId,ruleChange.subUnitId,ruleChange.rule);break;case"update":this._updateRule(ruleChange.unitId,ruleChange.subUnitId,ruleChange.rule.uid,ruleChange.oldRule,ruleChange.updatePayload);break;case"remove":this._removeRule(ruleChange.unitId,ruleChange.subUnitId,ruleChange.rule);break}this._ruleChange$.next(ruleChange)}))}_ensureRuleMatrix(unitId,subUnitId){let unitMap=this._ruleMatrixMap.get(unitId);unitMap||(unitMap=new Map,this._ruleMatrixMap.set(unitId,unitMap));let matrix=unitMap.get(subUnitId);return matrix||(matrix=new RuleMatrix(new Map,unitId,subUnitId,this._univerInstanceService),unitMap.set(subUnitId,matrix)),matrix}_addRuleSideEffect(unitId,subUnitId,rule){this._ensureRuleMatrix(unitId,subUnitId).addRule(rule),this._dataValidationCacheService.addRule(unitId,subUnitId,rule),this._dataValidationFormulaService.addRule(unitId,subUnitId,rule.uid,rule.formula1,rule.formula2),rule.type===core.DataValidationType.CUSTOM&&this._dataValidationCustomFormulaService.addRule(unitId,subUnitId,rule)}_addRule(unitId,subUnitId,rule){(Array.isArray(rule)?rule:[rule]).forEach(item=>{this._addRuleSideEffect(unitId,subUnitId,item)})}_updateRule(unitId,subUnitId,ruleId,oldRule,payload){const ruleMatrix=this._ensureRuleMatrix(unitId,subUnitId);payload.type===dataValidation.UpdateRuleType.RANGE?(ruleMatrix.updateRange(ruleId,payload.payload),this._dataValidationCacheService.updateRuleRanges(unitId,subUnitId,ruleId,payload.payload,oldRule.ranges),oldRule.type===core.DataValidationType.CUSTOM&&this._dataValidationCustomFormulaService.updateRuleRanges(unitId,subUnitId,ruleId,oldRule.ranges,payload.payload)):payload.type===dataValidation.UpdateRuleType.SETTING&&(this._dataValidationCacheService.markRangeDirty(unitId,subUnitId,oldRule.ranges),this._dataValidationFormulaService.updateRuleFormulaText(unitId,subUnitId,ruleId,payload.payload.formula1,payload.payload.formula2),oldRule.type===core.DataValidationType.CUSTOM?this._dataValidationCustomFormulaService.updateRuleFormula(unitId,subUnitId,ruleId,oldRule.ranges,payload.payload.formula1):payload.payload.type===core.DataValidationType.CUSTOM&&this._dataValidationCustomFormulaService.addRule(unitId,subUnitId,{...oldRule,...payload.payload}))}_removeRule(unitId,subUnitId,oldRule){this._ensureRuleMatrix(unitId,subUnitId).removeRule(oldRule),this._dataValidationCacheService.removeRule(unitId,subUnitId,oldRule),oldRule.type===core.DataValidationType.CUSTOM&&this._dataValidationCustomFormulaService.deleteByRuleId(unitId,subUnitId,oldRule.uid)}getValidator(type){return this._dataValidatorRegistryService.getValidatorItem(type)}getRuleIdByLocation(unitId,subUnitId,row,col){return this._ensureRuleMatrix(unitId,subUnitId).getValue(row,col)}getRuleByLocation(unitId,subUnitId,row,col){const ruleId=this.getRuleIdByLocation(unitId,subUnitId,row,col);if(ruleId)return this._dataValidationModel.getRuleById(unitId,subUnitId,ruleId)}validator(rule,pos,_onCompete){const{col,row,unitId,subUnitId,worksheet}=pos,ruleId=rule.uid,formula1=rule.formula1,formula2=rule.formula2,onCompete=__name((status,changed)=>{_onCompete&&_onCompete(status,changed),changed&&this._validStatusChange$.next({unitId,subUnitId,ruleId:rule.uid,status,row,col})},"onCompete"),cell=worksheet.getCellValueOnly(row,col),validator=this.getValidator(rule.type),cellRaw=worksheet.getCellRaw(row,col),cellValue=getCellValueOrigin(cellRaw),interceptValue=getCellValueOrigin(cell);if(validator){const cache=this._dataValidationCacheService.ensureCache(unitId,subUnitId),current=cache.getValue(row,col);return!current||current.value!==cellValue||current.interceptValue!==interceptValue||current.ruleId!==ruleId||current.formula1!==formula1||current.formula2!==formula2?(cache.setValue(row,col,{value:cellValue,interceptValue,status:core.DataValidationStatus.VALIDATING,ruleId,formula1:formula1||"",formula2:formula2||""}),validator.validator({value:cellValue,unitId,subUnitId,row,column:col,worksheet:pos.worksheet,workbook:pos.workbook,interceptValue:getCellValueOrigin(cell),t:cellRaw==null?void 0:cellRaw.t},rule).then(status=>{const realStatus=status?core.DataValidationStatus.VALID:core.DataValidationStatus.INVALID;cache.setValue(row,col,{value:cellValue,status:realStatus,ruleId,interceptValue,formula1:formula1||"",formula2:formula2||""}),onCompete(realStatus,!0)}),core.DataValidationStatus.VALIDATING):(onCompete(current.status,!1),current.status)}else return onCompete(core.DataValidationStatus.VALID,!1),core.DataValidationStatus.VALID}getRuleErrorMsg(unitId,subUnitId,ruleId){const rule=this._dataValidationModel.getRuleById(unitId,subUnitId,ruleId);if(!rule)return"";const validator=this._dataValidatorRegistryService.getValidatorItem(rule.type);return rule.error?rule.error:validator?validator.getRuleFinalError(rule):""}getRuleObjectMatrix(unitId,subUnitId){return this._ensureRuleMatrix(unitId,subUnitId)}getRuleById(unitId,subUnitId,ruleId){return this._dataValidationModel.getRuleById(unitId,subUnitId,ruleId)}getRuleIndex(unitId,subUnitId,ruleId){return this._dataValidationModel.getRuleIndex(unitId,subUnitId,ruleId)}getRules(unitId,subUnitId){return[...this._dataValidationModel.getRules(unitId,subUnitId)]}getUnitRules(unitId){return this._dataValidationModel.getUnitRules(unitId)}deleteUnitRules(unitId){return this._dataValidationModel.deleteUnitRules(unitId)}getSubUnitIds(unitId){return this._dataValidationModel.getSubUnitIds(unitId)}getAll(){return this._dataValidationModel.getAll()}},__name(_a5,"SheetDataValidationModel"),_a5);exports.SheetDataValidationModel=__decorateClass$6([__decorateParam$6(0,core.Inject(dataValidation.DataValidationModel)),__decorateParam$6(1,core.IUniverInstanceService),__decorateParam$6(2,core.Inject(dataValidation.DataValidatorRegistryService)),__decorateParam$6(3,core.Inject(exports.DataValidationCacheService)),__decorateParam$6(4,core.Inject(exports.DataValidationFormulaService)),__decorateParam$6(5,core.Inject(exports.DataValidationCustomFormulaService)),__decorateParam$6(6,core.ICommandService)],exports.SheetDataValidationModel);function getFormulaResult(result){var _a12,_b;return(_b=(_a12=result==null?void 0:result[0])==null?void 0:_a12[0])==null?void 0:_b.v}__name(getFormulaResult,"getFormulaResult");function getFormulaCellData(result){var _a12;return(_a12=result==null?void 0:result[0])==null?void 0:_a12[0]}__name(getFormulaCellData,"getFormulaCellData");function isLegalFormulaResult(res){return!engineFormula.ERROR_TYPE_SET.has(res)}__name(isLegalFormulaResult,"isLegalFormulaResult");const CHECKBOX_FORMULA_1=1,CHECKBOX_FORMULA_2=0;function getFailMessage(formula,localeService){return core.Tools.isBlank(formula)?localeService.t("dataValidation.validFail.value"):core.isFormulaString(formula)?localeService.t("dataValidation.validFail.primitive"):""}__name(getFailMessage,"getFailMessage");const transformCheckboxValue=__name(value=>core.Tools.isDefine(value)&&String(value).toLowerCase()==="true"?"1":String(value).toLowerCase()==="false"?"0":value,"transformCheckboxValue"),_CheckboxValidator=class _CheckboxValidator extends dataValidation.BaseDataValidator{constructor(){super(...arguments);__publicField(this,"id",core.DataValidationType.CHECKBOX);__publicField(this,"title","dataValidation.checkbox.title");__publicField(this,"operators",[]);__publicField(this,"scopes",["sheet"]);__publicField(this,"_formulaService",this.injector.get(exports.DataValidationFormulaService));__publicField(this,"skipDefaultFontRender",__name((rule,cellValue,pos)=>{const{formula1,formula2}=this.parseFormulaSync(rule,pos.unitId,pos.subUnitId),valueStr=`${cellValue!=null?cellValue:""}`;return!valueStr||valueStr===`${formula1}`||valueStr===`${formula2}`},"skipDefaultFontRender"))}validatorFormula(rule,unitId,subUnitId){const{formula1,formula2}=rule,isEqual=formula1===formula2;if(core.Tools.isBlank(formula1)&&core.Tools.isBlank(formula2))return{success:!0};if(isEqual)return{success:!1,formula1:this.localeService.t("dataValidation.validFail.checkboxEqual"),formula2:this.localeService.t("dataValidation.validFail.checkboxEqual")};const error1=getFailMessage(formula1,this.localeService),error2=getFailMessage(formula2,this.localeService);return{success:!error1&&!error2,formula1:error1,formula2:error2}}async parseFormula(rule,unitId,subUnitId){var _a12,_b;const{formula1=CHECKBOX_FORMULA_1,formula2=CHECKBOX_FORMULA_2}=rule,results=await this._formulaService.getRuleFormulaResult(unitId,subUnitId,rule.uid),originFormula1=core.isFormulaString(formula1)?getFormulaResult((_a12=results==null?void 0:results[0])==null?void 0:_a12.result):formula1,originFormula2=core.isFormulaString(formula2)?getFormulaResult((_b=results==null?void 0:results[1])==null?void 0:_b.result):formula2,isFormulaValid=isLegalFormulaResult(String(originFormula1))&&isLegalFormulaResult(String(originFormula2));return{formula1:transformCheckboxValue(originFormula1),formula2:transformCheckboxValue(originFormula2),originFormula1,originFormula2,isFormulaValid}}getExtraStyle(rule,value){return{tb:core.WrapStrategy.CLIP}}parseFormulaSync(rule,unitId,subUnitId){var _a12,_b;const{formula1=CHECKBOX_FORMULA_1,formula2=CHECKBOX_FORMULA_2}=rule,results=this._formulaService.getRuleFormulaResultSync(unitId,subUnitId,rule.uid),originFormula1=core.isFormulaString(formula1)?getFormulaResult((_a12=results==null?void 0:results[0])==null?void 0:_a12.result):formula1,originFormula2=core.isFormulaString(formula2)?getFormulaResult((_b=results==null?void 0:results[1])==null?void 0:_b.result):formula2;return{formula1:transformCheckboxValue(originFormula1),formula2:transformCheckboxValue(originFormula2),originFormula1,originFormula2}}async isValidType(cellInfo,formula,rule){const{value,unitId,subUnitId}=cellInfo,{formula1,formula2,originFormula1,originFormula2}=await this.parseFormula(rule,unitId,subUnitId);return!core.Tools.isDefine(formula1)||!core.Tools.isDefine(formula2)?!0:core.Tools.isDefine(value)&&(String(value)===String(formula1)||String(value)===String(formula2)||String(value)===String(originFormula1!=null?originFormula1:"")||String(value)===String(originFormula2!=null?originFormula2:""))}generateRuleErrorMessage(rule){return this.localeService.t("dataValidation.checkbox.error")}};__name(_CheckboxValidator,"CheckboxValidator");let CheckboxValidator=_CheckboxValidator;var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x.default:x}__name(getDefaultExportFromCjs,"getDefaultExportFromCjs");var dayjs_min={exports:{}};(function(module2,exports2){(function(t,e){module2.exports=e()})(commonjsGlobal,function(){var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",c="month",f="quarter",h="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:__name(function(t2){var e2=["th","st","nd","rd"],n2=t2%100;return"["+t2+(e2[(n2-20)%10]||e2[n2]||e2[0])+"]"},"ordinal")},m=__name(function(t2,e2,n2){var r2=String(t2);return!r2||r2.length>=e2?t2:""+Array(e2+1-r2.length).join(n2)+t2},"m"),v={s:m,z:__name(function(t2){var e2=-t2.utcOffset(),n2=Math.abs(e2),r2=Math.floor(n2/60),i2=n2%60;return(e2<=0?"+":"-")+m(r2,2,"0")+":"+m(i2,2,"0")},"z"),m:__name(function t2(e2,n2){if(e2.date()<n2.date())return-t2(n2,e2);var r2=12*(n2.year()-e2.year())+(n2.month()-e2.month()),i2=e2.clone().add(r2,c),s2=n2-i2<0,u2=e2.clone().add(r2+(s2?-1:1),c);return+(-(r2+(n2-i2)/(s2?i2-u2:u2-i2))||0)},"t"),a:__name(function(t2){return t2<0?Math.ceil(t2)||0:Math.floor(t2)},"a"),p:__name(function(t2){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t2]||String(t2||"").toLowerCase().replace(/s$/,"")},"p"),u:__name(function(t2){return t2===void 0},"u")},g="en",D={};D[g]=M;var p="$isDayjsObject",S=__name(function(t2){return t2 instanceof _||!(!t2||!t2[p])},"S"),w=__name(function t2(e2,n2,r2){var i2;if(!e2)return g;if(typeof e2=="string"){var s2=e2.toLowerCase();D[s2]&&(i2=s2),n2&&(D[s2]=n2,i2=s2);var u2=e2.split("-");if(!i2&&u2.length>1)return t2(u2[0])}else{var a2=e2.name;D[a2]=e2,i2=a2}return!r2&&i2&&(g=i2),i2||!r2&&g},"t"),O=__name(function(t2,e2){if(S(t2))return t2.clone();var n2=typeof e2=="object"?e2:{};return n2.date=t2,n2.args=arguments,new _(n2)},"O"),b=v;b.l=w,b.i=S,b.w=function(t2,e2){return O(t2,{locale:e2.$L,utc:e2.$u,x:e2.$x,$offset:e2.$offset})};var _=function(){function M2(t2){this.$L=w(t2.locale,null,!0),this.parse(t2),this.$x=this.$x||t2.x||{},this[p]=!0}__name(M2,"M");var m2=M2.prototype;return m2.parse=function(t2){this.$d=function(t3){var e2=t3.date,n2=t3.utc;if(e2===null)return new Date(NaN);if(b.u(e2))return new Date;if(e2 instanceof Date)return new Date(e2);if(typeof e2=="string"&&!/Z$/i.test(e2)){var r2=e2.match($);if(r2){var i2=r2[2]-1||0,s2=(r2[7]||"0").substring(0,3);return n2?new Date(Date.UTC(r2[1],i2,r2[3]||1,r2[4]||0,r2[5]||0,r2[6]||0,s2)):new Date(r2[1],i2,r2[3]||1,r2[4]||0,r2[5]||0,r2[6]||0,s2)}}return new Date(e2)}(t2),this.init()},m2.init=function(){var t2=this.$d;this.$y=t2.getFullYear(),this.$M=t2.getMonth(),this.$D=t2.getDate(),this.$W=t2.getDay(),this.$H=t2.getHours(),this.$m=t2.getMinutes(),this.$s=t2.getSeconds(),this.$ms=t2.getMilliseconds()},m2.$utils=function(){return b},m2.isValid=function(){return this.$d.toString()!==l},m2.isSame=function(t2,e2){var n2=O(t2);return this.startOf(e2)<=n2&&n2<=this.endOf(e2)},m2.isAfter=function(t2,e2){return O(t2)<this.startOf(e2)},m2.isBefore=function(t2,e2){return this.endOf(e2)<O(t2)},m2.$g=function(t2,e2,n2){return b.u(t2)?this[e2]:this.set(n2,t2)},m2.unix=function(){return Math.floor(this.valueOf()/1e3)},m2.valueOf=function(){return this.$d.getTime()},m2.startOf=function(t2,e2){var n2=this,r2=!!b.u(e2)||e2,f2=b.p(t2),l2=__name(function(t3,e3){var i2=b.w(n2.$u?Date.UTC(n2.$y,e3,t3):new Date(n2.$y,e3,t3),n2);return r2?i2:i2.endOf(a)},"l"),$2=__name(function(t3,e3){return b.w(n2.toDate()[t3].apply(n2.toDate("s"),(r2?[0,0,0,0]:[23,59,59,999]).slice(e3)),n2)},"$"),y2=this.$W,M3=this.$M,m3=this.$D,v2="set"+(this.$u?"UTC":"");switch(f2){case h:return r2?l2(1,0):l2(31,11);case c:return r2?l2(1,M3):l2(0,M3+1);case o:var g2=this.$locale().weekStart||0,D2=(y2<g2?y2+7:y2)-g2;return l2(r2?m3-D2:m3+(6-D2),M3);case a:case d:return $2(v2+"Hours",0);case u:return $2(v2+"Minutes",1);case s:return $2(v2+"Seconds",2);case i:return $2(v2+"Milliseconds",3);default:return this.clone()}},m2.endOf=function(t2){return this.startOf(t2,!1)},m2.$set=function(t2,e2){var n2,o2=b.p(t2),f2="set"+(this.$u?"UTC":""),l2=(n2={},n2[a]=f2+"Date",n2[d]=f2+"Date",n2[c]=f2+"Month",n2[h]=f2+"FullYear",n2[u]=f2+"Hours",n2[s]=f2+"Minutes",n2[i]=f2+"Seconds",n2[r]=f2+"Milliseconds",n2)[o2],$2=o2===a?this.$D+(e2-this.$W):e2;if(o2===c||o2===h){var y2=this.clone().set(d,1);y2.$d[l2]($2),y2.init(),this.$d=y2.set(d,Math.min(this.$D,y2.daysInMonth())).$d}else l2&&this.$d[l2]($2);return this.init(),this},m2.set=function(t2,e2){return this.clone().$set(t2,e2)},m2.get=function(t2){return this[b.p(t2)]()},m2.add=function(r2,f2){var d2,l2=this;r2=Number(r2);var $2=b.p(f2),y2=__name(function(t2){var e2=O(l2);return b.w(e2.date(e2.date()+Math.round(t2*r2)),l2)},"y");if($2===c)return this.set(c,this.$M+r2);if($2===h)return this.set(h,this.$y+r2);if($2===a)return y2(1);if($2===o)return y2(7);var M3=(d2={},d2[s]=e,d2[u]=n,d2[i]=t,d2)[$2]||1,m3=this.$d.getTime()+r2*M3;return b.w(m3,this)},m2.subtract=function(t2,e2){return this.add(-1*t2,e2)},m2.format=function(t2){var e2=this,n2=this.$locale();if(!this.isValid())return n2.invalidDate||l;var r2=t2||"YYYY-MM-DDTHH:mm:ssZ",i2=b.z(this),s2=this.$H,u2=this.$m,a2=this.$M,o2=n2.weekdays,c2=n2.months,f2=n2.meridiem,h2=__name(function(t3,n3,i3,s3){return t3&&(t3[n3]||t3(e2,r2))||i3[n3].slice(0,s3)},"h"),d2=__name(function(t3){return b.s(s2%12||12,t3,"0")},"d"),$2=f2||function(t3,e3,n3){var r3=t3<12?"AM":"PM";return n3?r3.toLowerCase():r3};return r2.replace(y,function(t3,r3){return r3||function(t4){switch(t4){case"YY":return String(e2.$y).slice(-2);case"YYYY":return b.s(e2.$y,4,"0");case"M":return a2+1;case"MM":return b.s(a2+1,2,"0");case"MMM":return h2(n2.monthsShort,a2,c2,3);case"MMMM":return h2(c2,a2);case"D":return e2.$D;case"DD":return b.s(e2.$D,2,"0");case"d":return String(e2.$W);case"dd":return h2(n2.weekdaysMin,e2.$W,o2,2);case"ddd":return h2(n2.weekdaysShort,e2.$W,o2,3);case"dddd":return o2[e2.$W];case"H":return String(s2);case"HH":return b.s(s2,2,"0");case"h":return d2(1);case"hh":return d2(2);case"a":return $2(s2,u2,!0);case"A":return $2(s2,u2,!1);case"m":return String(u2);case"mm":return b.s(u2,2,"0");case"s":return String(e2.$s);case"ss":return b.s(e2.$s,2,"0");case"SSS":return b.s(e2.$ms,3,"0");case"Z":return i2}return null}(t3)||i2.replace(":","")})},m2.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m2.diff=function(r2,d2,l2){var $2,y2=this,M3=b.p(d2),m3=O(r2),v2=(m3.utcOffset()-this.utcOffset())*e,g2=this-m3,D2=__name(function(){return b.m(y2,m3)},"D");switch(M3){case h:$2=D2()/12;break;case c:$2=D2();break;case f:$2=D2()/3;break;case o:$2=(g2-v2)/6048e5;break;case a:$2=(g2-v2)/864e5;break;case u:$2=g2/n;break;case s:$2=g2/e;break;case i:$2=g2/t;break;default:$2=g2}return l2?$2:b.a($2)},m2.daysInMonth=function(){return this.endOf(c).$D},m2.$locale=function(){return D[this.$L]},m2.locale=function(t2,e2){if(!t2)return this.$L;var n2=this.clone(),r2=w(t2,e2,!0);return r2&&(n2.$L=r2),n2},m2.clone=function(){return b.w(this.$d,this)},m2.toDate=function(){return new Date(this.valueOf())},m2.toJSON=function(){return this.isValid()?this.toISOString():null},m2.toISOString=function(){return this.$d.toISOString()},m2.toString=function(){return this.$d.toUTCString()},M2}(),k=_.prototype;return O.prototype=k,[["$ms",r],["$s",i],["$m",s],["$H",u],["$W",a],["$M",c],["$y",h],["$D",d]].forEach(function(t2){k[t2[1]]=function(e2){return this.$g(e2,t2[0],t2[1])}}),O.extend=function(t2,e2){return t2.$i||(t2(e2,_,O),t2.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t2){return O(1e3*t2)},O.en=D[g],O.Ls=D,O.p={},O})})(dayjs_min);var dayjs_minExports=dayjs_min.exports;const dayjs=getDefaultExportFromCjs(dayjs_minExports),DateOperatorNameMap={[core.DataValidationOperator.BETWEEN]:"dataValidation.date.operators.between",[core.DataValidationOperator.EQUAL]:"dataValidation.date.operators.equal",[core.DataValidationOperator.GREATER_THAN]:"dataValidation.date.operators.greaterThan",[core.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.operators.greaterThanOrEqual",[core.DataValidationOperator.LESS_THAN]:"dataValidation.date.operators.lessThan",[core.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.operators.lessThanOrEqual",[core.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.operators.notBetween",[core.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.operators.notEqual"};core.DataValidationOperator.BETWEEN+"",core.DataValidationOperator.EQUAL+"",core.DataValidationOperator.GREATER_THAN+"",core.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",core.DataValidationOperator.LESS_THAN+"",core.DataValidationOperator.LESS_THAN_OR_EQUAL+"",core.DataValidationOperator.NOT_BETWEEN+"",core.DataValidationOperator.NOT_EQUAL+"";const DateOperatorTitleMap={[core.DataValidationOperator.BETWEEN]:"dataValidation.date.ruleName.between",[core.DataValidationOperator.EQUAL]:"dataValidation.date.ruleName.equal",[core.DataValidationOperator.GREATER_THAN]:"dataValidation.date.ruleName.greaterThan",[core.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.ruleName.greaterThanOrEqual",[core.DataValidationOperator.LESS_THAN]:"dataValidation.date.ruleName.lessThan",[core.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.ruleName.lessThanOrEqual",[core.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.ruleName.notBetween",[core.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.ruleName.notEqual"},DateOperatorErrorTitleMap={[core.DataValidationOperator.BETWEEN]:"dataValidation.date.errorMsg.between",[core.DataValidationOperator.EQUAL]:"dataValidation.date.errorMsg.equal",[core.DataValidationOperator.GREATER_THAN]:"dataValidation.date.errorMsg.greaterThan",[core.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.greaterThanOrEqual",[core.DataValidationOperator.LESS_THAN]:"dataValidation.date.errorMsg.lessThan",[core.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.lessThanOrEqual",[core.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.errorMsg.notBetween",[core.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.errorMsg.notEqual"},TWO_FORMULA_OPERATOR_COUNT=[core.DataValidationOperator.BETWEEN,core.DataValidationOperator.NOT_BETWEEN],FORMULA1$1="{FORMULA1}",FORMULA2$1="{FORMULA2}",transformDate2SerialNumber=__name(value=>{var _a12,_b;if(value==null||typeof value=="boolean")return;if(typeof value=="number"||!Number.isNaN(+value))return+value;const v=(_a12=core.numfmt.parseDate(value))==null?void 0:_a12.v;return core.Tools.isDefine(v)?v:(_b=core.numfmt.parseDate(dayjs(value).format("YYYY-MM-DD HH:mm:ss")))==null?void 0:_b.v},"transformDate2SerialNumber"),_DateValidator=class _DateValidator extends dataValidation.BaseDataValidator{constructor(){super(...arguments);__publicField(this,"id",core.DataValidationType.DATE);__publicField(this,"title","dataValidation.date.title");__publicField(this,"operators",[core.DataValidationOperator.BETWEEN,core.DataValidationOperator.EQUAL,core.DataValidationOperator.GREATER_THAN,core.DataValidationOperator.GREATER_THAN_OR_EQUAL,core.DataValidationOperator.LESS_THAN,core.DataValidationOperator.LESS_THAN_OR_EQUAL,core.DataValidationOperator.NOT_BETWEEN,core.DataValidationOperator.NOT_EQUAL]);__publicField(this,"scopes",["sheet"]);__publicField(this,"_formulaService",this.injector.get(exports.DataValidationFormulaService))}async parseFormula(rule,unitId,subUnitId){var _a12,_b;const results=await this._formulaService.getRuleFormulaResult(unitId,subUnitId,rule.uid),{formula1,formula2}=rule,formulaResult1=getFormulaResult((_a12=results==null?void 0:results[0])==null?void 0:_a12.result),formulaResult2=getFormulaResult((_b=results==null?void 0:results[1])==null?void 0:_b.result),isFormulaValid=isLegalFormulaResult(String(formulaResult1))&&isLegalFormulaResult(String(formulaResult2));return{formula1:transformDate2SerialNumber(core.isFormulaString(formula1)?formulaResult1:formula1),formula2:transformDate2SerialNumber(core.isFormulaString(formula2)?formulaResult2:formula2),isFormulaValid}}parseFormulaSync(rule,unitId,subUnitId){var _a12,_b;const results=this._formulaService.getRuleFormulaResultSync(unitId,subUnitId,rule.uid),{formula1,formula2}=rule;return{formula1:transformDate2SerialNumber(core.isFormulaString(formula1)?getFormulaResult((_a12=results==null?void 0:results[0])==null?void 0:_a12.result):formula1),formula2:transformDate2SerialNumber(core.isFormulaString(formula2)?getFormulaResult((_b=results==null?void 0:results[1])==null?void 0:_b.result):formula2)}}async isValidType(info){const{interceptValue,value}=info;return typeof value=="number"&&typeof interceptValue=="string"?!0:typeof interceptValue=="string"?!!core.numfmt.parseDate(interceptValue):!1}_validatorSingleFormula(formula){return!core.Tools.isBlank(formula)&&(core.isFormulaString(formula)||!Number.isNaN(+formula)||!!(formula&&core.numfmt.parseDate(formula)))}validatorFormula(rule,unitId,subUnitId){const operator=rule.operator;if(!operator)return{success:!1};const formula1Success=this._validatorSingleFormula(rule.formula1),errorMsg=this.localeService.t("dataValidation.validFail.date");if(TWO_FORMULA_OPERATOR_COUNT.includes(operator)){const formula2Success=this._validatorSingleFormula(rule.formula2);return{success:formula1Success&&formula2Success,formula1:formula1Success?void 0:errorMsg,formula2:formula2Success?void 0:errorMsg}}return{success:formula1Success,formula1:formula1Success?void 0:errorMsg}}normalizeFormula(rule,_unitId,_subUnitId){const{formula1,formula2,bizInfo}=rule,normlizeSingleFormula=__name(formula=>{var _a12;if(!formula)return formula;let date;if(!Number.isNaN(+formula))date=core.numfmt.dateFromSerial(+formula);else{const res=(_a12=core.numfmt.parseDate(formula))==null?void 0:_a12.v;if(res==null)return"";date=core.numfmt.dateFromSerial(res)}return dayjs(`${date[0]}/${date[1]}/${date[2]} ${date[3]}:${date[4]}:${date[5]}`).format(bizInfo!=null&&bizInfo.showTime?"YYYY-MM-DD HH:mm:ss":"YYYY-MM-DD")},"normlizeSingleFormula");return{formula1:core.isFormulaString(formula1)?formula1:normlizeSingleFormula(`${formula1}`),formula2:core.isFormulaString(formula2)?formula2:normlizeSingleFormula(`${formula2}`)}}transform(cellInfo,_formula,_rule){const{value}=cellInfo;return{...cellInfo,value:transformDate2SerialNumber(value)}}async validatorIsEqual(cellInfo,formula,rule){const{formula1}=formula,{value:cellValue}=cellInfo;return Number.isNaN(formula1)?!0:cellValue===formula1}async validatorIsNotEqual(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value!==formula1}async validatorIsBetween(cellInfo,formula,_rule){const{formula1,formula2}=formula;if(Number.isNaN(formula1)||Number.isNaN(formula2))return!0;const start=Math.min(formula1,formula2),end=Math.max(formula1,formula2);return cellInfo.value>=start&&cellInfo.value<=end}async validatorIsNotBetween(cellInfo,formula,_rule){const{formula1,formula2}=formula;if(Number.isNaN(formula1)||Number.isNaN(formula2))return!0;const start=Math.min(formula1,formula2),end=Math.max(formula1,formula2);return cellInfo.value<start||cellInfo.value>end}async validatorIsGreaterThan(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value>formula1}async validatorIsGreaterThanOrEqual(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value>=formula1}async validatorIsLessThan(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value<formula1}async validatorIsLessThanOrEqual(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value<=formula1}get operatorNames(){return this.operators.map(operator=>this.localeService.t(DateOperatorNameMap[operator]))}generateRuleName(rule){var _a12,_b;if(!rule.operator)return this.titleStr;const ruleName=this.localeService.t(DateOperatorTitleMap[rule.operator]).replace(FORMULA1$1,(_a12=rule.formula1)!=null?_a12:"").replace(FORMULA2$1,(_b=rule.formula2)!=null?_b:"");return`${this.titleStr} ${ruleName}`}generateRuleErrorMessage(rule){var _a12,_b;return rule.operator?`${this.localeService.t(DateOperatorErrorTitleMap[rule.operator]).replace(FORMULA1$1,(_a12=rule.formula1)!=null?_a12:"").replace(FORMULA2$1,(_b=rule.formula2)!=null?_b:"")}`:this.titleStr}};__name(_DateValidator,"DateValidator");let DateValidator=_DateValidator;function getCellValueNumber(cellValue){let str=cellValue;return typeof cellValue=="string"?((cellValue.startsWith("¥")||cellValue.startsWith("$"))&&(str=cellValue.slice(1)),+str):+cellValue}__name(getCellValueNumber,"getCellValueNumber");const _DecimalValidator=class _DecimalValidator extends dataValidation.BaseDataValidator{constructor(){super(...arguments);__publicField(this,"_formulaService",this.injector.get(exports.DataValidationFormulaService));__publicField(this,"id",core.DataValidationType.DECIMAL);__publicField(this,"title","dataValidation.decimal.title");__publicField(this,"operators",[core.DataValidationOperator.BETWEEN,core.DataValidationOperator.EQUAL,core.DataValidationOperator.GREATER_THAN,core.DataValidationOperator.GREATER_THAN_OR_EQUAL,core.DataValidationOperator.LESS_THAN,core.DataValidationOperator.LESS_THAN_OR_EQUAL,core.DataValidationOperator.NOT_BETWEEN,core.DataValidationOperator.NOT_EQUAL]);__publicField(this,"scopes",["sheet"])}_isFormulaOrNumber(formula){return!core.Tools.isBlank(formula)&&(core.isFormulaString(formula)||!Number.isNaN(+formula))}async isValidType(cellInfo,formula,rule){const{value:cellValue}=cellInfo;return!Number.isNaN(getCellValueNumber(cellValue))}transform(cellInfo,formula,rule){const{value:cellValue}=cellInfo;return{...cellInfo,value:getCellValueNumber(cellValue)}}_parseNumber(formula){return formula==null?Number.NaN:+formula}async parseFormula(rule,unitId,subUnitId){var _a12,_b;const formulaInfo=await this._formulaService.getRuleFormulaResult(unitId,subUnitId,rule.uid),{formula1,formula2}=rule,formulaResult1=getFormulaResult((_a12=formulaInfo==null?void 0:formulaInfo[0])==null?void 0:_a12.result),formulaResult2=getFormulaResult((_b=formulaInfo==null?void 0:formulaInfo[1])==null?void 0:_b.result),isFormulaValid=isLegalFormulaResult(String(formulaResult1))&&isLegalFormulaResult(String(formulaResult2));return{formula1:this._parseNumber(core.isFormulaString(formula1)?formulaResult1:formula1),formula2:this._parseNumber(core.isFormulaString(formula2)?formulaResult2:formula2),isFormulaValid}}validatorFormula(rule,unitId,subUnitId){const operator=rule.operator;if(!operator)return{success:!1};const formula1Success=core.Tools.isDefine(rule.formula1)&&this._isFormulaOrNumber(rule.formula1),formula2Success=core.Tools.isDefine(rule.formula2)&&this._isFormulaOrNumber(rule.formula2),isTwoFormula=TWO_FORMULA_OPERATOR_COUNT.includes(operator),errorMsg=this.localeService.t("dataValidation.validFail.number");return isTwoFormula?{success:formula1Success&&formula2Success,formula1:formula1Success?void 0:errorMsg,formula2:formula2Success?void 0:errorMsg}:{success:formula1Success,formula1:formula1Success?"":errorMsg}}async validatorIsEqual(cellInfo,formula,rule){const{formula1}=formula,{value:cellValue}=cellInfo;return Number.isNaN(formula1)?!0:cellValue===formula1}async validatorIsNotEqual(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value!==formula1}async validatorIsBetween(cellInfo,formula,_rule){const{formula1,formula2}=formula;if(Number.isNaN(formula1)||Number.isNaN(formula2))return!0;const start=Math.min(formula1,formula2),end=Math.max(formula1,formula2);return cellInfo.value>=start&&cellInfo.value<=end}async validatorIsNotBetween(cellInfo,formula,_rule){const{formula1,formula2}=formula;if(Number.isNaN(formula1)||Number.isNaN(formula2))return!0;const start=Math.min(formula1,formula2),end=Math.max(formula1,formula2);return cellInfo.value<start||cellInfo.value>end}async validatorIsGreaterThan(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value>formula1}async validatorIsGreaterThanOrEqual(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value>=formula1}async validatorIsLessThan(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value<formula1}async validatorIsLessThanOrEqual(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value<=formula1}};__name(_DecimalValidator,"DecimalValidator");let DecimalValidator=_DecimalValidator;function serializeListOptions(options){return options.filter(Boolean).join(",")}__name(serializeListOptions,"serializeListOptions");function deserializeListOptions(optionsStr){return optionsStr.split(",").filter(Boolean)}__name(deserializeListOptions,"deserializeListOptions");function getDataValidationCellValue(cellData){const cellValue=getCellValueOrigin(cellData);return cellValue==null?"":cellValue.toString()}__name(getDataValidationCellValue,"getDataValidationCellValue");function getRuleFormulaResultSet(result){if(!result)return[];const resultSet=new Set;return result.forEach(row=>{row.forEach(cell=>{var _a12,_b;const value=getCellValueOrigin(cell);if(value!=null){if(typeof value!="string"&&typeof(cell==null?void 0:cell.s)=="object"&&((_b=(_a12=cell.s)==null?void 0:_a12.n)!=null&&_b.pattern)){resultSet.add(core.numfmt.format(cell.s.n.pattern,value,{throws:!1}));return}isLegalFormulaResult(value.toString())&&resultSet.add(value.toString())}})}),[...resultSet]}__name(getRuleFormulaResultSet,"getRuleFormulaResultSet");const supportedFormula=["if","indirect","choose","offset"];function isValidListFormula(formula,lexer){if(!core.isFormulaString(formula)||engineFormula.isReferenceString(formula.slice(1)))return!0;const nodes=lexer.sequenceNodesBuilder(formula);return nodes&&nodes.some(node=>typeof node=="object"&&node.nodeType===engineFormula.sequenceNodeType.FUNCTION&&supportedFormula.indexOf(node.token.toLowerCase())>-1)}__name(isValidListFormula,"isValidListFormula");function isRuleIntersects(rule,sheetName){const{formula1="",ranges}=rule;if(engineFormula.isReferenceString(formula1.slice(1))){const refRange=engineFormula.deserializeRangeWithSheet(formula1.slice(1));if((!refRange.sheetName||refRange.sheetName===sheetName)&&ranges.some(range=>core.Rectangle.intersects(range,refRange.range)))return!0}return!1}__name(isRuleIntersects,"isRuleIntersects");const _ListValidator=class _ListValidator extends dataValidation.BaseDataValidator{constructor(){super(...arguments);__publicField(this,"formulaService",this.injector.get(exports.DataValidationFormulaService));__publicField(this,"_lexer",this.injector.get(engineFormula.LexerTreeBuilder));__publicField(this,"_univerInstanceService",this.injector.get(core.IUniverInstanceService));__publicField(this,"id",core.DataValidationType.LIST);__publicField(this,"title","dataValidation.list.title");__publicField(this,"operators",[]);__publicField(this,"scopes",["sheet"]);__publicField(this,"skipDefaultFontRender",__name(rule=>rule.renderMode!==core.DataValidationRenderMode.TEXT,"skipDefaultFontRender"))}validatorFormula(rule,unitId,subUnitId){var _a12,_b,_c;const success=!core.Tools.isBlank(rule.formula1),valid=isValidListFormula((_a12=rule.formula1)!=null?_a12:"",this._lexer),sheetName=(_c=(_b=this._univerInstanceService.getUnit(unitId,core.UniverInstanceType.UNIVER_SHEET))==null?void 0:_b.getSheetBySheetId(subUnitId))==null?void 0:_c.getName(),isIntersects=isRuleIntersects(rule,sheetName!=null?sheetName:"");return{success:!!(success&&valid&&!isIntersects),formula1:success?valid?isIntersects?this.localeService.t("dataValidation.validFail.listIntersects"):void 0:this.localeService.t("dataValidation.validFail.listInvalid"):this.localeService.t("dataValidation.validFail.list")}}getExtraStyle(rule,value,{style:defaultStyle}){var _a12;const tb=(_a12=defaultStyle.tb!==core.WrapStrategy.OVERFLOW?defaultStyle.tb:core.WrapStrategy.CLIP)!=null?_a12:core.WrapStrategy.WRAP;if(rule.type===core.DataValidationType.LIST&&(rule.renderMode===core.DataValidationRenderMode.ARROW||rule.renderMode===core.DataValidationRenderMode.TEXT)){const colorMap=this.getListWithColorMap(rule),valueStr=`${value!=null?value:""}`,color=colorMap[valueStr];if(color)return{bg:{rgb:color},tb}}return{tb}}parseCellValue(cellValue){const cellString=cellValue.toString();return deserializeListOptions(cellString)}async parseFormula(rule,unitId,subUnitId){var _a12,_b;const{formula1=""}=rule,results=await this.formulaService.getRuleFormulaResult(unitId,subUnitId,rule.uid),formulaResult1=getFormulaResult((_a12=results==null?void 0:results[0])==null?void 0:_a12.result),isFormulaValid=isLegalFormulaResult(String(formulaResult1));return{formula1:core.isFormulaString(formula1)?getRuleFormulaResultSet((_b=results==null?void 0:results[0])==null?void 0:_b.result):deserializeListOptions(formula1),formula2:void 0,isFormulaValid}}async isValidType(cellInfo,formula,rule){const{value}=cellInfo,{formula1=[]}=formula;return this.parseCellValue(value).every(i=>formula1.includes(i))}generateRuleName(){return this.localeService.t("dataValidation.list.name")}generateRuleErrorMessage(){return this.localeService.t("dataValidation.list.error")}getList(rule,currentUnitId,currentSubUnitId){var _a12,_b,_c;const{formula1=""}=rule,univerInstanceService=this.injector.get(core.IUniverInstanceService),workbook=(_a12=currentUnitId?univerInstanceService.getUniverSheetInstance(currentUnitId):void 0)!=null?_a12:univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET);if(!workbook)return[];const worksheet=(_b=currentSubUnitId?workbook.getSheetBySheetId(currentSubUnitId):void 0)!=null?_b:workbook.getActiveSheet();if(!worksheet)return[];const unitId=workbook.getUnitId(),subUnitId=worksheet.getSheetId(),results=this.formulaService.getRuleFormulaResultSync(unitId,subUnitId,rule.uid);return core.isFormulaString(formula1)?getRuleFormulaResultSet((_c=results==null?void 0:results[0])==null?void 0:_c.result):deserializeListOptions(formula1)}async getListAsync(rule,currentUnitId,currentSubUnitId){var _a12,_b,_c;const{formula1=""}=rule,univerInstanceService=this.injector.get(core.IUniverInstanceService),workbook=(_a12=currentUnitId?univerInstanceService.getUniverSheetInstance(currentUnitId):void 0)!=null?_a12:univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET);if(!workbook)return[];const worksheet=(_b=currentSubUnitId?workbook.getSheetBySheetId(currentSubUnitId):void 0)!=null?_b:workbook.getActiveSheet();if(!worksheet)return[];const unitId=workbook.getUnitId(),subUnitId=worksheet.getSheetId(),results=await this.formulaService.getRuleFormulaResult(unitId,subUnitId,rule.uid);return core.isFormulaString(formula1)?getRuleFormulaResultSet((_c=results==null?void 0:results[0])==null?void 0:_c.result):deserializeListOptions(formula1)}getListWithColor(rule,currentUnitId,currentSubUnitId){const list=this.getList(rule,currentUnitId,currentSubUnitId),colorList=(rule.formula2||"").split(",");return list.map((label,i)=>({label,color:colorList[i]}))}getListWithColorMap(rule,currentUnitId,currentSubUnitId){const list=this.getListWithColor(rule,currentUnitId,currentSubUnitId),map={};return list.forEach(item=>{item.color&&(map[item.label]=item.color)}),map}};__name(_ListValidator,"ListValidator");let ListValidator=_ListValidator;const FORMULA1="{FORMULA1}",FORMULA2="{FORMULA2}",_TextLengthValidator=class _TextLengthValidator extends dataValidation.BaseDataValidator{constructor(){super(...arguments);__publicField(this,"id",core.DataValidationType.TEXT_LENGTH);__publicField(this,"title","dataValidation.textLength.title");__publicField(this,"operators",[core.DataValidationOperator.BETWEEN,core.DataValidationOperator.EQUAL,core.DataValidationOperator.GREATER_THAN,core.DataValidationOperator.GREATER_THAN_OR_EQUAL,core.DataValidationOperator.LESS_THAN,core.DataValidationOperator.LESS_THAN_OR_EQUAL,core.DataValidationOperator.NOT_BETWEEN,core.DataValidationOperator.NOT_EQUAL]);__publicField(this,"scopes",["sheet"]);__publicField(this,"_formulaService",this.injector.get(exports.DataValidationFormulaService))}_isFormulaOrInt(formula){return!core.Tools.isBlank(formula)&&(core.isFormulaString(formula)||!Number.isNaN(+formula)&&Number.isInteger(+formula))}validatorFormula(rule,unitId,subUnitId){const operator=rule.operator;if(!operator)return{success:!1};const formula1Success=core.Tools.isDefine(rule.formula1)&&this._isFormulaOrInt(rule.formula1),formula2Success=core.Tools.isDefine(rule.formula2)&&this._isFormulaOrInt(rule.formula2),isTwoFormula=TWO_FORMULA_OPERATOR_COUNT.includes(operator),errorMsg=this.localeService.t("dataValidation.validFail.number");return isTwoFormula?{success:formula1Success&&formula2Success,formula1:formula1Success?void 0:errorMsg,formula2:formula2Success?void 0:errorMsg}:{success:formula1Success,formula1:errorMsg}}_parseNumber(formula){return formula==null?Number.NaN:+formula}_isValidFormula(formula){return!Number.isNaN(formula)}async parseFormula(rule,unitId,subUnitId){var _a12,_b;const formulaInfo=await this._formulaService.getRuleFormulaResult(unitId,subUnitId,rule.uid),{formula1,formula2}=rule,formulaResult1=getFormulaResult((_a12=formulaInfo==null?void 0:formulaInfo[0])==null?void 0:_a12.result),formulaResult2=getFormulaResult((_b=formulaInfo==null?void 0:formulaInfo[1])==null?void 0:_b.result),isFormulaValid=isLegalFormulaResult(String(formulaResult1))&&isLegalFormulaResult(String(formulaResult2));return{formula1:this._parseNumber(core.isFormulaString(formula1)?formulaResult1:formula1),formula2:this._parseNumber(core.isFormulaString(formula2)?formulaResult2:formula2),isFormulaValid}}transform(cellInfo,_formula,_rule){return{...cellInfo,value:cellInfo.value.toString().length}}async isValidType(cellInfo,formula,rule){const{value:cellValue}=cellInfo;return typeof cellValue=="string"||typeof cellValue=="number"}async validatorIsEqual(cellInfo,formula,rule){const{formula1}=formula;return core.Tools.isDefine(formula1)?cellInfo.value===formula1:!1}async validatorIsNotEqual(cellInfo,formula,rule){const{formula1}=formula;return core.Tools.isDefine(formula1)?cellInfo.value!==formula1:!1}async validatorIsBetween(cellInfo,formula,rule){const{formula1,formula2}=formula,{value:cellValue}=cellInfo;if(!this._isValidFormula(formula1)||!this._isValidFormula(formula2))return!1;const max=Math.max(formula1,formula2),min=Math.min(formula1,formula2);return cellValue>=min&&cellValue<=max}async validatorIsNotBetween(cellInfo,formula,rule){const{formula1,formula2}=formula,{value:cellValue}=cellInfo;if(!this._isValidFormula(formula1)||!this._isValidFormula(formula2))return!1;const max=Math.max(formula1,formula2),min=Math.min(formula1,formula2);return cellValue<min||cellValue>max}async validatorIsGreaterThan(cellInfo,formula,rule){const{formula1}=formula,{value:cellValue}=cellInfo;return this._isValidFormula(formula1)?cellValue>formula1:!1}async validatorIsGreaterThanOrEqual(cellInfo,formula,rule){const{formula1}=formula,{value:cellValue}=cellInfo;return this._isValidFormula(formula1)?cellValue>=formula1:!1}async validatorIsLessThan(cellInfo,formula,rule){const{formula1}=formula,{value:cellValue}=cellInfo;return this._isValidFormula(formula1)?cellValue<formula1:!1}async validatorIsLessThanOrEqual(cellInfo,formula,rule){const{formula1}=formula,{value:cellValue}=cellInfo;return this._isValidFormula(formula1)?cellValue<=formula1:!1}generateRuleErrorMessage(rule){var _a12,_b;return rule.operator?`${this.localeService.t(dataValidation.TextLengthErrorTitleMap[rule.operator]).replace(FORMULA1,(_a12=rule.formula1)!=null?_a12:"").replace(FORMULA2,(_b=rule.formula2)!=null?_b:"")}`:this.titleStr}};__name(_TextLengthValidator,"TextLengthValidator");let TextLengthValidator=_TextLengthValidator;function isBlankCell(cellData){var _a12,_b;return cellData?cellData.p?!((_b=(_a12=cellData.p.body)==null?void 0:_a12.dataStream)!=null?_b:"").slice(0,-2).trim():core.Tools.isBlank(cellData.v):!0}__name(isBlankCell,"isBlankCell");function getDataValidationDiffMutations(unitId,subUnitId,diffs,accessor,source="command",fillDefaultValue=!0){const lexerTreeBuilder=accessor.get(engineFormula.LexerTreeBuilder),redoMutations=[],undoMutations=[],sheetDataValidationModel=accessor.get(exports.SheetDataValidationModel),univerInstanceService=accessor.get(core.IUniverInstanceService),target=sheets.getSheetCommandTarget(univerInstanceService,{unitId,subUnitId});if(!target)return{redoMutations,undoMutations};const{worksheet}=target,redoMatrix=new core.ObjectMatrix;function setRangesDefaultValue(ranges,defaultValue){fillDefaultValue&&ranges.forEach(range=>{core.Range.foreach(range,(row,column)=>{const cellData=worksheet.getCellRaw(row,column),value=getStringCellValue(cellData);(isBlankCell(cellData)||value===defaultValue)&&redoMatrix.setValue(row,column,{v:defaultValue,p:null})})})}__name(setRangesDefaultValue,"setRangesDefaultValue"),diffs.forEach(diff=>{switch(diff.type){case"delete":redoMutations.push({id:dataValidation.RemoveDataValidationMutation.id,params:{unitId,subUnitId,ruleId:diff.rule.uid,source}}),undoMutations.unshift({id:dataValidation.AddDataValidationMutation.id,params:{unitId,subUnitId,rule:diff.rule,index:diff.index,source}});break;case"update":{if(redoMutations.push({id:dataValidation.UpdateDataValidationMutation.id,params:{unitId,subUnitId,ruleId:diff.ruleId,payload:{type:dataValidation.UpdateRuleType.RANGE,payload:diff.newRanges},source}}),undoMutations.unshift({id:dataValidation.UpdateDataValidationMutation.id,params:{unitId,subUnitId,ruleId:diff.ruleId,payload:{type:dataValidation.UpdateRuleType.RANGE,payload:diff.oldRanges},source}}),diff.rule.type===core.DataValidationType.CUSTOM){const originRow=diff.oldRanges[0].startRow,originColumn=diff.oldRanges[0].startColumn,newRow=diff.newRanges[0].startRow,newColumn=diff.newRanges[0].startColumn,rowDiff=newRow-originRow,columnDiff=newColumn-originColumn,newFormula=lexerTreeBuilder.moveFormulaRefOffset(diff.rule.formula1,columnDiff,rowDiff);newFormula!==diff.rule.formula1&&(redoMutations.push({id:dataValidation.UpdateDataValidationMutation.id,params:{unitId,subUnitId,ruleId:diff.ruleId,payload:{type:dataValidation.UpdateRuleType.SETTING,payload:{...dataValidation.getRuleSetting(diff.rule),formula1:newFormula}}}}),undoMutations.unshift({id:dataValidation.UpdateDataValidationMutation.id,params:{unitId,subUnitId,ruleId:diff.ruleId,payload:{type:dataValidation.UpdateRuleType.SETTING,payload:dataValidation.getRuleSetting(diff.rule)}}}))}const rule=sheetDataValidationModel.getRuleById(unitId,subUnitId,diff.ruleId);if(rule&&rule.type===core.DataValidationType.CHECKBOX){const formula=sheetDataValidationModel.getValidator(core.DataValidationType.CHECKBOX).parseFormulaSync(rule,unitId,subUnitId);setRangesDefaultValue(diff.newRanges,formula.formula2)}break}case"add":{if(redoMutations.push({id:dataValidation.AddDataValidationMutation.id,params:{unitId,subUnitId,rule:diff.rule,source}}),undoMutations.unshift({id:dataValidation.RemoveDataValidationMutation.id,params:{unitId,subUnitId,ruleId:diff.rule.uid,source}}),diff.rule.type===core.DataValidationType.CHECKBOX){const formula=sheetDataValidationModel.getValidator(core.DataValidationType.CHECKBOX).parseFormulaSync(diff.rule,unitId,subUnitId);setRangesDefaultValue(diff.rule.ranges,formula.originFormula2)}break}}});const redoSetRangeValues={id:sheets.SetRangeValuesMutation.id,params:{unitId,subUnitId,cellValue:redoMatrix.getData()}},undoSetRangeValues={id:sheets.SetRangeValuesMutation.id,params:sheets.SetRangeValuesUndoMutationFactory(accessor,redoSetRangeValues.params)};return redoMutations.push(redoSetRangeValues),undoMutations.push(undoSetRangeValues),{redoMutations,undoMutations}}__name(getDataValidationDiffMutations,"getDataValidationDiffMutations");const UpdateSheetDataValidationRangeCommand={type:core.CommandType.COMMAND,id:"sheet.command.updateDataValidationRuleRange",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,ranges,ruleId}=params,sheetDataValidationModel=accessor.get(exports.SheetDataValidationModel),commandService=accessor.get(core.ICommandService),undoRedoService=accessor.get(core.IUndoRedoService);if(!sheetDataValidationModel.getRuleById(unitId,subUnitId,ruleId))return!1;const matrix=sheetDataValidationModel.getRuleObjectMatrix(unitId,subUnitId).clone();matrix.updateRange(ruleId,ranges);const diffs=matrix.diff(sheetDataValidationModel.getRules(unitId,subUnitId)),{redoMutations,undoMutations}=getDataValidationDiffMutations(unitId,subUnitId,diffs,accessor);return undoRedoService.pushUndoRedo({undoMutations,redoMutations,unitID:unitId}),core.sequenceExecute(redoMutations,commandService),!0}},AddSheetDataValidationCommand={type:core.CommandType.COMMAND,id:"sheet.command.addDataValidation",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,rule}=params,sheetDataValidationModel=accessor.get(exports.SheetDataValidationModel),commandService=accessor.get(core.ICommandService),undoRedoService=accessor.get(core.IUndoRedoService),matrix=sheetDataValidationModel.getRuleObjectMatrix(unitId,subUnitId).clone();matrix.addRule(rule);const diffs=matrix.diff(sheetDataValidationModel.getRules(unitId,subUnitId)),mutationParams={unitId,subUnitId,rule},{redoMutations,undoMutations}=getDataValidationDiffMutations(unitId,subUnitId,diffs,accessor);return redoMutations.push({id:dataValidation.AddDataValidationMutation.id,params:mutationParams}),undoMutations.unshift({id:dataValidation.RemoveDataValidationMutation.id,params:{unitId,subUnitId,ruleId:rule.uid}}),undoRedoService.pushUndoRedo({unitID:unitId,redoMutations,undoMutations}),core.sequenceExecute(redoMutations,commandService),!0}},UpdateSheetDataValidationSettingCommand={type:core.CommandType.COMMAND,id:"sheets.command.update-data-validation-setting",handler(accessor,params){if(!params)return!1;const commandService=accessor.get(core.ICommandService),redoUndoService=accessor.get(core.IUndoRedoService),sheetDataValidationModel=accessor.get(exports.SheetDataValidationModel),dataValidatorRegistryService=accessor.get(dataValidation.DataValidatorRegistryService),{unitId,subUnitId,ruleId,setting}=params,validator=dataValidatorRegistryService.getValidatorItem(setting.type);if(!validator)return!1;const rule=sheetDataValidationModel.getRuleById(unitId,subUnitId,ruleId);if(!rule)return!1;const newRule={...rule,...setting};if(!validator.validatorFormula(newRule,unitId,subUnitId).success)return!1;const mutationParams={unitId,subUnitId,ruleId,payload:{type:dataValidation.UpdateRuleType.SETTING,payload:{...setting,...validator.normalizeFormula(newRule,unitId,subUnitId)}}},redoMutations=[{id:dataValidation.UpdateDataValidationMutation.id,params:mutationParams}],undoMutationParams={unitId,subUnitId,ruleId,payload:{type:dataValidation.UpdateRuleType.SETTING,payload:dataValidation.getRuleSetting(rule)}},undoMutations=[{id:dataValidation.UpdateDataValidationMutation.id,params:undoMutationParams}];if(setting.type===core.DataValidationType.CHECKBOX){const ranges=rule.ranges,univerInstanceService=accessor.get(core.IUniverInstanceService),target=sheets.getSheetCommandTarget(univerInstanceService,{unitId,subUnitId});if(target){const redoMatrix=new core.ObjectMatrix,{worksheet}=target,{formula2:oldFormula2=CHECKBOX_FORMULA_2,formula1:oldFormula1=CHECKBOX_FORMULA_1}=rule,{formula2=CHECKBOX_FORMULA_2,formula1=CHECKBOX_FORMULA_1}=setting;ranges.forEach(range=>{core.Range.foreach(range,(row,column)=>{const cellData=worksheet.getCellRaw(row,column),value=getStringCellValue(cellData);isBlankCell(cellData)||value===String(oldFormula2)?redoMatrix.setValue(row,column,{v:formula2,p:null}):value===String(oldFormula1)&&redoMatrix.setValue(row,column,{v:formula1,p:null})})});const redoSetRangeValues={id:sheets.SetRangeValuesMutation.id,params:{unitId,subUnitId,cellValue:redoMatrix.getData()}},undoSetRangeValues={id:sheets.SetRangeValuesMutation.id,params:sheets.SetRangeValuesUndoMutationFactory(accessor,redoSetRangeValues.params)};redoMutations.push(redoSetRangeValues),undoMutations.push(undoSetRangeValues)}}return core.sequenceExecute(redoMutations,commandService).result?(redoUndoService.pushUndoRedo({unitID:unitId,redoMutations,undoMutations}),!0):!1}},UpdateSheetDataValidationOptionsCommand={type:core.CommandType.COMMAND,id:"sheets.command.update-data-validation-options",handler(accessor,params){if(!params)return!1;const commandService=accessor.get(core.ICommandService),redoUndoService=accessor.get(core.IUndoRedoService),sheetDataValidationModel=accessor.get(exports.SheetDataValidationModel),{unitId,subUnitId,ruleId,options}=params,rule=sheetDataValidationModel.getRuleById(unitId,subUnitId,ruleId);if(!rule)return!1;const mutationParams={unitId,subUnitId,ruleId,payload:{type:dataValidation.UpdateRuleType.OPTIONS,payload:options}},redoMutations=[{id:dataValidation.UpdateDataValidationMutation.id,params:mutationParams}],undoMutationParams={unitId,subUnitId,ruleId,payload:{type:dataValidation.UpdateRuleType.OPTIONS,payload:dataValidation.getRuleOptions(rule)}},undoMutations=[{id:dataValidation.UpdateDataValidationMutation.id,params:undoMutationParams}];return redoUndoService.pushUndoRedo({unitID:unitId,redoMutations,undoMutations}),commandService.executeCommand(dataValidation.UpdateDataValidationMutation.id,mutationParams),!0}},ClearRangeDataValidationCommand={type:core.CommandType.COMMAND,id:"sheets.command.clear-range-data-validation",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,ranges}=params,commandService=accessor.get(core.ICommandService),univerInstanceService=accessor.get(core.IUniverInstanceService),target=sheets.getSheetCommandTarget(univerInstanceService,{unitId,subUnitId}),sheetDataValidationModel=accessor.get(exports.SheetDataValidationModel);if(!target)return!1;const undoRedoService=accessor.get(core.IUndoRedoService),matrix=sheetDataValidationModel.getRuleObjectMatrix(unitId,subUnitId).clone();matrix.removeRange(ranges);const diffs=matrix.diff(sheetDataValidationModel.getRules(unitId,subUnitId)),{redoMutations,undoMutations}=getDataValidationDiffMutations(unitId,subUnitId,diffs,accessor);return undoRedoService.pushUndoRedo({unitID:unitId,redoMutations,undoMutations}),core.sequenceExecute(redoMutations,commandService).result}},RemoveSheetAllDataValidationCommand={type:core.CommandType.COMMAND,id:"sheet.command.remove-all-data-validation",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId}=params,commandService=accessor.get(core.ICommandService),sheetDataValidationModel=accessor.get(exports.SheetDataValidationModel),undoRedoService=accessor.get(core.IUndoRedoService),currentRules=[...sheetDataValidationModel.getRules(unitId,subUnitId)],redoParams={unitId,subUnitId,ruleId:currentRules.map(rule=>rule.uid)},redoMutations=[{id:dataValidation.RemoveDataValidationMutation.id,params:redoParams}],undoMutations=[{id:dataValidation.AddDataValidationMutation.id,params:{unitId,subUnitId,rule:currentRules}}];return undoRedoService.pushUndoRedo({redoMutations,undoMutations,unitID:unitId}),commandService.executeCommand(dataValidation.RemoveDataValidationMutation.id,redoParams),!0}},removeDataValidationUndoFactory=__name((accessor,redoParams)=>{const sheetDataValidationModel=accessor.get(exports.SheetDataValidationModel),{unitId,subUnitId,ruleId,source}=redoParams;if(Array.isArray(ruleId)){const rules=ruleId.map(id=>sheetDataValidationModel.getRuleById(unitId,subUnitId,id)).filter(Boolean);return[{id:dataValidation.AddDataValidationMutation.id,params:{unitId,subUnitId,rule:rules,source}}]}return[{id:dataValidation.AddDataValidationMutation.id,params:{unitId,subUnitId,rule:{...sheetDataValidationModel.getRuleById(unitId,subUnitId,ruleId)},index:sheetDataValidationModel.getRuleIndex(unitId,subUnitId,ruleId)}}]},"removeDataValidationUndoFactory"),RemoveSheetDataValidationCommand={type:core.CommandType.COMMAND,id:"sheet.command.remove-data-validation-rule",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,ruleId}=params,commandService=accessor.get(core.ICommandService),undoRedoService=accessor.get(core.IUndoRedoService),sheetDataValidationModel=accessor.get(exports.SheetDataValidationModel),redoMutations=[{id:dataValidation.RemoveDataValidationMutation.id,params}],undoMutations=[{id:dataValidation.AddDataValidationMutation.id,params:{unitId,subUnitId,rule:{...sheetDataValidationModel.getRuleById(unitId,subUnitId,ruleId)},index:sheetDataValidationModel.getRuleIndex(unitId,subUnitId,ruleId)}}];return undoRedoService.pushUndoRedo({undoMutations,redoMutations,unitID:params.unitId}),commandService.executeCommand(dataValidation.RemoveDataValidationMutation.id,params),!0}},PLUGIN_CONFIG_KEY="sheets-data-validation.config",defaultPluginConfig={},_AnyValidator=class _AnyValidator extends dataValidation.BaseDataValidator{constructor(){super(...arguments);__publicField(this,"id",core.DataValidationType.ANY);__publicField(this,"title","dataValidation.any.title");__publicField(this,"operators",[]);__publicField(this,"scopes",["sheet"])}async parseFormula(rule,unitId,subUnitId){return{formula1:rule.formula1,formula2:rule.formula2,isFormulaValid:!0}}validatorFormula(rule,unitId,subUnitId){return{success:!0}}async isValidType(cellInfo,formula,rule){return!0}generateRuleErrorMessage(rule){return this.localeService.t("dataValidation.any.error")}};__name(_AnyValidator,"AnyValidator");let AnyValidator=_AnyValidator;const _CustomFormulaValidator=class _CustomFormulaValidator extends dataValidation.BaseDataValidator{constructor(){super(...arguments);__publicField(this,"id",core.DataValidationType.CUSTOM);__publicField(this,"title","dataValidation.custom.title");__publicField(this,"operators",[]);__publicField(this,"scopes",["sheet"]);__publicField(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService))}validatorFormula(rule,unitId,subUnitId){const success=core.isFormulaString(rule.formula1);return{success,formula1:success?"":this.localeService.t("dataValidation.validFail.formula")}}async parseFormula(_rule,_unitId,_subUnitId){return{formula1:void 0,formula2:void 0,isFormulaValid:!1}}async isValidType(cellInfo,_formula,_rule){const{column,row,unitId,subUnitId}=cellInfo,result=await this._customFormulaService.getCellFormulaValue(unitId,subUnitId,row,column),cellData=getFormulaCellData(result==null?void 0:result.result),formulaResult=cellData==null?void 0:cellData.v;return isLegalFormulaResult(String(formulaResult))&&core.Tools.isDefine(formulaResult)&&formulaResult!==""?cellData.t===core.CellValueType.BOOLEAN?!!formulaResult:typeof formulaResult=="boolean"?formulaResult:typeof formulaResult=="number"?!!formulaResult:typeof formulaResult=="string"?isLegalFormulaResult(formulaResult):!!formulaResult:!1}generateRuleErrorMessage(rule){return this.localeService.t("dataValidation.custom.error")}generateRuleName(rule){var _a12;return this.localeService.t("dataValidation.custom.ruleName").replace("{FORMULA1}",(_a12=rule.formula1)!=null?_a12:"")}};__name(_CustomFormulaValidator,"CustomFormulaValidator");let CustomFormulaValidator=_CustomFormulaValidator;const _ListMultipleValidator=class _ListMultipleValidator extends ListValidator{constructor(){super(...arguments);__publicField(this,"id",core.DataValidationType.LIST_MULTIPLE);__publicField(this,"title","dataValidation.listMultiple.title");__publicField(this,"skipDefaultFontRender",__name(()=>!0,"skipDefaultFontRender"))}};__name(_ListMultipleValidator,"ListMultipleValidator");let ListMultipleValidator=_ListMultipleValidator;const _WholeValidator=class _WholeValidator extends dataValidation.BaseDataValidator{constructor(){super(...arguments);__publicField(this,"_formulaService",this.injector.get(exports.DataValidationFormulaService));__publicField(this,"id",core.DataValidationType.WHOLE);__publicField(this,"title","dataValidation.whole.title");__publicField(this,"operators",[core.DataValidationOperator.BETWEEN,core.DataValidationOperator.EQUAL,core.DataValidationOperator.GREATER_THAN,core.DataValidationOperator.GREATER_THAN_OR_EQUAL,core.DataValidationOperator.LESS_THAN,core.DataValidationOperator.LESS_THAN_OR_EQUAL,core.DataValidationOperator.NOT_BETWEEN,core.DataValidationOperator.NOT_EQUAL]);__publicField(this,"scopes",["sheet"])}_isFormulaOrInt(formula){return!core.Tools.isBlank(formula)&&(core.isFormulaString(formula)||!Number.isNaN(+formula)&&Number.isInteger(+formula))}async isValidType(cellInfo,formula,rule){const{value:cellValue}=cellInfo,num=getCellValueNumber(cellValue);return!Number.isNaN(num)&&Number.isInteger(num)}transform(cellInfo,formula,rule){const{value:cellValue}=cellInfo;return{...cellInfo,value:getCellValueNumber(cellValue)}}_parseNumber(formula){return formula==null?Number.NaN:+formula}async parseFormula(rule,unitId,subUnitId){var _a12,_b,_c,_d,_e,_f,_g,_h;const formulaInfo=await this._formulaService.getRuleFormulaResult(unitId,subUnitId,rule.uid),{formula1,formula2}=rule,formula1Result=core.isFormulaString(formula1)?(_d=(_c=(_b=(_a12=formulaInfo==null?void 0:formulaInfo[0])==null?void 0:_a12.result)==null?void 0:_b[0])==null?void 0:_c[0])==null?void 0:_d.v:formula1,formula2Result=core.isFormulaString(formula2)?(_h=(_g=(_f=(_e=formulaInfo==null?void 0:formulaInfo[1])==null?void 0:_e.result)==null?void 0:_f[0])==null?void 0:_g[0])==null?void 0:_h.v:formula2,isFormulaValid=isLegalFormulaResult(`${formula1Result}`)&&isLegalFormulaResult(`${formula2Result}`);return{formula1:this._parseNumber(formula1Result),formula2:this._parseNumber(formula2Result),isFormulaValid}}validatorFormula(rule,unitId,subUnitId){const operator=rule.operator;if(!operator)return{success:!1};const formula1Success=core.Tools.isDefine(rule.formula1)&&this._isFormulaOrInt(rule.formula1),formula2Success=core.Tools.isDefine(rule.formula2)&&this._isFormulaOrInt(rule.formula2),isTwoFormula=TWO_FORMULA_OPERATOR_COUNT.includes(operator),errorMsg=this.localeService.t("dataValidation.validFail.number");return isTwoFormula?{success:formula1Success&&formula2Success,formula1:formula1Success?void 0:errorMsg,formula2:formula2Success?void 0:errorMsg}:{success:formula1Success,formula1:errorMsg}}async validatorIsEqual(cellInfo,formula,rule){const{formula1}=formula,{value:cellValue}=cellInfo;return Number.isNaN(formula1)?!0:cellValue===formula1}async validatorIsNotEqual(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value!==formula1}async validatorIsBetween(cellInfo,formula,_rule){const{formula1,formula2}=formula;if(Number.isNaN(formula1)||Number.isNaN(formula2))return!0;const start=Math.min(formula1,formula2),end=Math.max(formula1,formula2);return cellInfo.value>=start&&cellInfo.value<=end}async validatorIsNotBetween(cellInfo,formula,_rule){const{formula1,formula2}=formula;if(Number.isNaN(formula1)||Number.isNaN(formula2))return!0;const start=Math.min(formula1,formula2),end=Math.max(formula1,formula2);return cellInfo.value<start||cellInfo.value>end}async validatorIsGreaterThan(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value>formula1}async validatorIsGreaterThanOrEqual(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value>=formula1}async validatorIsLessThan(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value<formula1}async validatorIsLessThanOrEqual(cellInfo,formula,_rule){const{formula1}=formula;return Number.isNaN(formula1)?!0:cellInfo.value<=formula1}};__name(_WholeValidator,"WholeValidator");let WholeValidator=_WholeValidator;var __defProp$5=Object.defineProperty,__getOwnPropDesc$5=Object.getOwnPropertyDescriptor,__decorateClass$5=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$5(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$5(target,key,result),result},"__decorateClass$5"),__decorateParam$5=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$5"),_a6;let DataValidationController=(_a6=class extends core.RxDisposable{constructor(_univerInstanceService,_dataValidatorRegistryService,_injector,_selectionManagerService,_sheetInterceptorService,_sheetDataValidationModel){super(),this._univerInstanceService=_univerInstanceService,this._dataValidatorRegistryService=_dataValidatorRegistryService,this._injector=_injector,this._selectionManagerService=_selectionManagerService,this._sheetInterceptorService=_sheetInterceptorService,this._sheetDataValidationModel=_sheetDataValidationModel,this._init()}_init(){this._registerValidators(),this._initCommandInterceptor()}_registerValidators(){[AnyValidator,DecimalValidator,WholeValidator,TextLengthValidator,DateValidator,CheckboxValidator,ListValidator,ListMultipleValidator,CustomFormulaValidator].forEach(Validator=>{const validator=this._injector.createInstance(Validator);this.disposeWithMe(this._dataValidatorRegistryService.register(validator)),this.disposeWithMe(core.toDisposable(()=>this._injector.delete(Validator)))})}_initCommandInterceptor(){this._sheetInterceptorService.interceptCommand({getMutations:__name(commandInfo=>{var _a12;if(commandInfo.id===sheets.ClearSelectionAllCommand.id){const workbook=this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET),unitId=workbook.getUnitId(),worksheet=workbook.getActiveSheet();if(!worksheet)throw new Error("No active sheet found");const subUnitId=worksheet.getSheetId(),selections=(_a12=this._selectionManagerService.getCurrentSelections())==null?void 0:_a12.map(s=>s.range),ruleMatrix=this._sheetDataValidationModel.getRuleObjectMatrix(unitId,subUnitId).clone();selections&&ruleMatrix.removeRange(selections);const diffs=ruleMatrix.diff(this._sheetDataValidationModel.getRules(unitId,subUnitId)),{redoMutations,undoMutations}=getDataValidationDiffMutations(unitId,subUnitId,diffs,this._injector,"patched");return{undos:undoMutations,redos:redoMutations}}return{undos:[],redos:[]}},"getMutations")})}},__name(_a6,"DataValidationController"),_a6);DataValidationController=__decorateClass$5([__decorateParam$5(0,core.IUniverInstanceService),__decorateParam$5(1,core.Inject(dataValidation.DataValidatorRegistryService)),__decorateParam$5(2,core.Inject(core.Injector)),__decorateParam$5(3,core.Inject(sheets.SheetsSelectionsService)),__decorateParam$5(4,core.Inject(sheets.SheetInterceptorService)),__decorateParam$5(5,core.Inject(exports.SheetDataValidationModel))],DataValidationController);var R=(E=>(E[E.View=0]="View",E[E.Edit=1]="Edit",E[E.ManageCollaborator=2]="ManageCollaborator",E[E.Print=3]="Print",E[E.Duplicate=4]="Duplicate",E[E.Comment=5]="Comment",E[E.Copy=6]="Copy",E[E.Share=7]="Share",E[E.Export=8]="Export",E[E.MoveWorksheet=9]="MoveWorksheet",E[E.DeleteWorksheet=10]="DeleteWorksheet",E[E.HideWorksheet=11]="HideWorksheet",E[E.RenameWorksheet=12]="RenameWorksheet",E[E.CreateWorksheet=13]="CreateWorksheet",E[E.SetWorksheetStyle=14]="SetWorksheetStyle",E[E.EditWorksheetCell=15]="EditWorksheetCell",E[E.InsertHyperlink=16]="InsertHyperlink",E[E.Sort=17]="Sort",E[E.Filter=18]="Filter",E[E.PivotTable=19]="PivotTable",E[E.FloatImg=20]="FloatImg",E[E.History=21]="History",E[E.RwHgtClWdt=22]="RwHgtClWdt",E[E.ViemRwHgtClWdt=23]="ViemRwHgtClWdt",E[E.ViewFilter=24]="ViewFilter",E[E.MoveSheet=25]="MoveSheet",E[E.DeleteSheet=26]="DeleteSheet",E[E.HideSheet=27]="HideSheet",E[E.CopySheet=28]="CopySheet",E[E.RenameSheet=29]="RenameSheet",E[E.CreateSheet=30]="CreateSheet",E[E.SelectProtectedCells=31]="SelectProtectedCells",E[E.SelectUnProtectedCells=32]="SelectUnProtectedCells",E[E.SetCellStyle=33]="SetCellStyle",E[E.SetCellValue=34]="SetCellValue",E[E.SetRowStyle=35]="SetRowStyle",E[E.SetColumnStyle=36]="SetColumnStyle",E[E.InsertRow=37]="InsertRow",E[E.InsertColumn=38]="InsertColumn",E[E.DeleteRow=39]="DeleteRow",E[E.DeleteColumn=40]="DeleteColumn",E[E.EditExtraObject=41]="EditExtraObject",E[E.Delete=42]="Delete",E[E.RecoverHistory=43]="RecoverHistory",E[E.ViewHistory=44]="ViewHistory",E[E.CreatePermissionObject=45]="CreatePermissionObject",E[E.UNRECOGNIZED=-1]="UNRECOGNIZED",E))(R||{}),__defProp$4=Object.defineProperty,__getOwnPropDesc$4=Object.getOwnPropertyDescriptor,__decorateClass$4=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$4(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$4(target,key,result),result},"__decorateClass$4"),__decorateParam$4=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$4"),_a7;exports.DataValidationFormulaController=(_a7=class extends core.Disposable{constructor(_univerInstanceService,_permissionService,_lexerTreeBuilder){super(),this._univerInstanceService=_univerInstanceService,this._permissionService=_permissionService,this._lexerTreeBuilder=_lexerTreeBuilder}getFormulaRefCheck(formulaString){var _a12,_b;const sequenceNodes=this._lexerTreeBuilder.sequenceNodesBuilder(formulaString);if(!sequenceNodes)return!0;for(let i=0;i<sequenceNodes.length;i++){const node=sequenceNodes[i];if(typeof node=="string")continue;const{token}=node,sequenceGrid=engineFormula.deserializeRangeWithSheetWithCache(token),workbook=this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET);let targetSheet=workbook.getActiveSheet();const unitId=workbook.getUnitId();if(sequenceGrid.sheetName){if(targetSheet=workbook.getSheetBySheetName(sequenceGrid.sheetName),!targetSheet)return!1;const subUnitId=targetSheet==null?void 0:targetSheet.getSheetId();if(!this._permissionService.getPermissionPoint(new sheets.WorksheetViewPermission(unitId,subUnitId).id))return!1}if(!targetSheet)return!1;const{startRow,endRow,startColumn,endColumn}=sequenceGrid.range;for(let i2=startRow;i2<=endRow;i2++)for(let j=startColumn;j<=endColumn;j++){const permission=(_b=(_a12=targetSheet.getCell(i2,j))==null?void 0:_a12.selectionProtection)==null?void 0:_b[0];if((permission==null?void 0:permission[R.View])===!1)return!1}}return!0}},__name(_a7,"DataValidationFormulaController"),_a7);exports.DataValidationFormulaController=__decorateClass$4([__decorateParam$4(0,core.IUniverInstanceService),__decorateParam$4(1,core.IPermissionService),__decorateParam$4(2,core.Inject(engineFormula.LexerTreeBuilder))],exports.DataValidationFormulaController);var __defProp$3=Object.defineProperty,__getOwnPropDesc$3=Object.getOwnPropertyDescriptor,__decorateClass$3=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$3(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$3(target,key,result),result},"__decorateClass$3"),__decorateParam$3=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$3"),_a8;let DataValidationRefRangeController=(_a8=class extends core.Disposable{constructor(_dataValidationModel,_injector,_refRangeService,_dataValidationCustomFormulaService,_dataValidationFormulaService,_formulaRefRangeService){super();__publicField(this,"_disposableMap",new Map);__publicField(this,"registerRule",__name((unitId,subUnitId,rule)=>{this.register(unitId,subUnitId,rule),this.registerFormula(unitId,subUnitId,rule)},"registerRule"));this._dataValidationModel=_dataValidationModel,this._injector=_injector,this._refRangeService=_refRangeService,this._dataValidationCustomFormulaService=_dataValidationCustomFormulaService,this._dataValidationFormulaService=_dataValidationFormulaService,this._formulaRefRangeService=_formulaRefRangeService,this._initRefRange()}_getIdWithUnitId(unitID,subUnitId,ruleId){return`${unitID}_${subUnitId}_${ruleId}`}registerFormula(unitId,subUnitId,rule){var _a12;const ruleId=rule.uid,id=this._getIdWithUnitId(unitId,subUnitId,ruleId),disposeSet=(_a12=this._disposableMap.get(id))!=null?_a12:new Set,handleFormulaChange=__name((type,formulaString)=>{const oldRule=this._dataValidationModel.getRuleById(unitId,subUnitId,ruleId);if(!oldRule)return{redos:[],undos:[]};const oldFormula=oldRule[type];if(!oldFormula||oldFormula===formulaString)return{redos:[],undos:[]};const redoParams={unitId,subUnitId,ruleId:rule.uid,payload:{type:dataValidation.UpdateRuleType.SETTING,payload:{type:oldRule.type,formula1:oldRule.formula1,formula2:oldRule.formula2,[type]:formulaString}}},undoParams={unitId,subUnitId,ruleId:rule.uid,payload:{type:dataValidation.UpdateRuleType.SETTING,payload:{type:oldRule.type,formula1:oldRule.formula1,formula2:oldRule.formula2}}},redos=[{id:dataValidation.UpdateDataValidationMutation.id,params:redoParams}],undos=[{id:dataValidation.UpdateDataValidationMutation.id,params:undoParams}];return{redos,undos}},"handleFormulaChange");if(rule.type===core.DataValidationType.CUSTOM){const currentFormula=this._dataValidationCustomFormulaService.getRuleFormulaInfo(unitId,subUnitId,ruleId);if(currentFormula){const disposable=this._formulaRefRangeService.registerFormula(unitId,subUnitId,currentFormula.formula,newFormulaString=>handleFormulaChange("formula1",newFormulaString));disposeSet.add(()=>disposable.dispose())}}else{const currentFormula=this._dataValidationFormulaService.getRuleFormulaInfo(unitId,subUnitId,ruleId);if(currentFormula){const[formula1,formula2]=currentFormula;if(formula1){const disposable=this._formulaRefRangeService.registerFormula(unitId,subUnitId,formula1.text,newFormulaString=>handleFormulaChange("formula1",newFormulaString));disposeSet.add(()=>disposable.dispose())}if(formula2){const disposable=this._formulaRefRangeService.registerFormula(unitId,subUnitId,formula2.text,newFormulaString=>handleFormulaChange("formula2",newFormulaString));disposeSet.add(()=>disposable.dispose())}}}}register(unitId,subUnitId,rule){var _a12;const handleRangeChange=__name(commandInfo=>{const oldRanges=[...rule.ranges],resultRanges=oldRanges.map(range=>sheets.handleCommonDefaultRangeChangeWithEffectRefCommands(range,commandInfo)).filter(range=>!!range).flat();if(core.isRangesEqual(resultRanges,oldRanges))return{redos:[],undos:[]};if(resultRanges.length){const redoParams={unitId,subUnitId,ruleId:rule.uid,payload:{type:dataValidation.UpdateRuleType.RANGE,payload:resultRanges},source:"patched"},redos=[{id:dataValidation.UpdateDataValidationMutation.id,params:redoParams}],undos=[{id:dataValidation.UpdateDataValidationMutation.id,params:{unitId,subUnitId,ruleId:rule.uid,payload:{type:dataValidation.UpdateRuleType.RANGE,payload:oldRanges},source:"patched"}}];return{redos,undos}}else{const redoParams={unitId,subUnitId,ruleId:rule.uid},redos=[{id:dataValidation.RemoveDataValidationMutation.id,params:redoParams}],undos=removeDataValidationUndoFactory(this._injector,redoParams);return{redos,undos}}},"handleRangeChange"),disposeList=[];rule.ranges.forEach(range=>{const disposable=this._refRangeService.registerRefRange(range,handleRangeChange,unitId,subUnitId);disposeList.push(()=>disposable.dispose())});const id=this._getIdWithUnitId(unitId,subUnitId,rule.uid),current=(_a12=this._disposableMap.get(id))!=null?_a12:new Set;current.add(()=>disposeList.forEach(dispose=>dispose())),this._disposableMap.set(id,current)}_initRefRange(){const allRules=this._dataValidationModel.getAll();for(const[unitId,subUnitMap]of allRules)for(const[subUnitId,rules]of subUnitMap)for(const rule of rules)this.registerRule(unitId,subUnitId,rule);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(option=>{const{unitId,subUnitId,rule}=option;switch(option.type){case"add":{const rule2=option.rule;this.registerRule(option.unitId,option.subUnitId,rule2);break}case"remove":{const disposeSet=this._disposableMap.get(this._getIdWithUnitId(unitId,subUnitId,rule.uid));disposeSet&&disposeSet.forEach(dispose=>dispose());break}case"update":{const rule2=option.rule,disposeSet=this._disposableMap.get(this._getIdWithUnitId(unitId,subUnitId,rule2.uid));disposeSet&&disposeSet.forEach(dispose=>dispose()),this.registerRule(option.unitId,option.subUnitId,rule2);break}}})),this.disposeWithMe(core.toDisposable(()=>{this._disposableMap.forEach(item=>{item.forEach(dispose=>dispose())}),this._disposableMap.clear()}))}},__name(_a8,"DataValidationRefRangeController"),_a8);DataValidationRefRangeController=__decorateClass$3([__decorateParam$3(0,core.Inject(exports.SheetDataValidationModel)),__decorateParam$3(1,core.Inject(core.Injector)),__decorateParam$3(2,core.Inject(sheets.RefRangeService)),__decorateParam$3(3,core.Inject(exports.DataValidationCustomFormulaService)),__decorateParam$3(4,core.Inject(exports.DataValidationFormulaService)),__decorateParam$3(5,core.Inject(sheetsFormula.FormulaRefRangeService))],DataValidationRefRangeController);var __defProp$2=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__decorateClass$2=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$2(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$2(target,key,result),result},"__decorateClass$2"),__decorateParam$2=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$2"),_a9;let SheetDataValidationSheetController=(_a9=class extends core.Disposable{constructor(_sheetInterceptorService,_univerInstanceService,_sheetDataValidationModel){super(),this._sheetInterceptorService=_sheetInterceptorService,this._univerInstanceService=_univerInstanceService,this._sheetDataValidationModel=_sheetDataValidationModel,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:__name(commandInfo=>{var _a12;if(commandInfo.id===sheets.RemoveSheetCommand.id){const params=commandInfo.params,unitId=params.unitId||this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET).getUnitId(),workbook=this._univerInstanceService.getUniverSheetInstance(unitId);if(!workbook)return{redos:[],undos:[]};const subUnitId=params.subUnitId||((_a12=workbook.getActiveSheet())==null?void 0:_a12.getSheetId());if(!subUnitId)return{redos:[],undos:[]};const rules=this._sheetDataValidationModel.getRules(unitId,subUnitId);if(rules.length===0)return{redos:[],undos:[]};const ids=rules.map(i=>i.uid),redoParams={unitId,subUnitId,ruleId:ids,source:"patched"},undoParams={unitId,subUnitId,rule:[...rules],source:"patched"};return{redos:[{id:dataValidation.RemoveDataValidationMutation.id,params:redoParams}],undos:[{id:dataValidation.AddDataValidationMutation.id,params:undoParams}]}}return{redos:[],undos:[]}},"getMutations")}))}},__name(_a9,"SheetDataValidationSheetController"),_a9);SheetDataValidationSheetController=__decorateClass$2([__decorateParam$2(0,core.Inject(sheets.SheetInterceptorService)),__decorateParam$2(1,core.Inject(core.IUniverInstanceService)),__decorateParam$2(2,core.Inject(exports.SheetDataValidationModel))],SheetDataValidationSheetController);var __defProp$1=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__decorateClass$1=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$1(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$1(target,key,result),result},"__decorateClass$1"),__decorateParam$1=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$1"),_a10;exports.SheetsDataValidationValidatorService=(_a10=class extends core.Disposable{constructor(_univerInstanceService,_sheetDataValidationModel,_dataValidationCacheService,_lifecycleService){super(),this._univerInstanceService=_univerInstanceService,this._sheetDataValidationModel=_sheetDataValidationModel,this._dataValidationCacheService=_dataValidationCacheService,this._lifecycleService=_lifecycleService,this._initRecalculate()}_initRecalculate(){const handleDirtyRanges=__name(ranges=>{if(ranges.length===0)return;const workbook=this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET),worksheet=workbook==null?void 0:workbook.getActiveSheet(),map={};ranges.flat().forEach(range=>{map[range.unitId]||(map[range.unitId]={}),map[range.unitId][range.subUnitId]||(map[range.unitId][range.subUnitId]=[]);const workbook2=this._univerInstanceService.getUnit(range.unitId,core.UniverInstanceType.UNIVER_SHEET),worksheet2=workbook2==null?void 0:workbook2.getSheetBySheetId(range.subUnitId);worksheet2&&map[range.unitId][range.subUnitId].push(...range.ranges.map(range2=>core.Range.transformRange(range2,worksheet2)))}),Object.entries(map).forEach(([unitId,subUnitMap])=>{Object.entries(subUnitMap).forEach(([subUnitId,ranges2])=>{(workbook==null?void 0:workbook.getUnitId())===unitId&&(worksheet==null?void 0:worksheet.getSheetId())===subUnitId?this.validatorRanges(unitId,subUnitId,ranges2):requestIdleCallback(()=>{this.validatorRanges(unitId,subUnitId,ranges2)})})})},"handleDirtyRanges");this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(rxjs.bufferWhen(()=>this._lifecycleService.lifecycle$.pipe(rxjs.filter(stage=>stage===core.LifecycleStages.Rendered)))).subscribe(handleDirtyRanges)),this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(rxjs.filter(()=>this._lifecycleService.stage>=core.LifecycleStages.Rendered),core.bufferDebounceTime(20)).subscribe(handleDirtyRanges))}async validatorCell(unitId,subUnitId,row,col){const workbook=this._univerInstanceService.getUnit(unitId,core.UniverInstanceType.UNIVER_SHEET);if(!workbook)throw new Error(`cannot find current workbook, unitId: ${unitId}`);const worksheet=workbook.getSheetBySheetId(subUnitId);if(!worksheet)throw new Error(`cannot find current worksheet, sheetId: ${subUnitId}`);if(!core.Tools.isDefine(row)||!core.Tools.isDefine(col))throw new Error(`row or col is not defined, row: ${row}, col: ${col}`);const rule=this._sheetDataValidationModel.getRuleByLocation(unitId,subUnitId,row,col);return rule?new Promise(resolve=>{this._sheetDataValidationModel.validator(rule,{unitId,subUnitId,row,col,worksheet,workbook},status=>{resolve(status)})}):core.DataValidationStatus.VALID}validatorRanges(unitId,subUnitId,ranges){return Promise.all(ranges.map(range=>{const promises=[];return core.Range.foreach(range,(row,col)=>{promises.push(this.validatorCell(unitId,subUnitId,row,col))}),promises}))}async validatorWorksheet(unitId,subUnitId){const rules=this._sheetDataValidationModel.getRules(unitId,subUnitId);return await Promise.all(rules.map(rule=>Promise.all(rule.ranges.map(range=>{const promises=[];return core.Range.foreach(range,(row,col)=>{promises.push(this.validatorCell(unitId,subUnitId,row,col))}),promises})))),this._dataValidationCacheService.ensureCache(unitId,subUnitId)}async validatorWorkbook(unitId){const sheetIds=this._sheetDataValidationModel.getSubUnitIds(unitId),results=await Promise.all(sheetIds.map(id=>this.validatorWorksheet(unitId,id))),map={};return results.forEach((result,i)=>{map[sheetIds[i]]=result}),map}getDataValidations(unitId,subUnitId,ranges){const ruleMatrix=this._sheetDataValidationModel.getRuleObjectMatrix(unitId,subUnitId),ruleIdSet=new Set;return ranges.forEach(range=>{core.Range.foreach(range,(row,col)=>{const ruleId=ruleMatrix.getValue(row,col);ruleId&&ruleIdSet.add(ruleId)})}),Array.from(ruleIdSet).map(id=>this._sheetDataValidationModel.getRuleById(unitId,subUnitId,id)).filter(Boolean)}getDataValidation(unitId,subUnitId,ranges){return this.getDataValidations(unitId,subUnitId,ranges)[0]}},__name(_a10,"SheetsDataValidationValidatorService"),_a10);exports.SheetsDataValidationValidatorService=__decorateClass$1([__decorateParam$1(0,core.IUniverInstanceService),__decorateParam$1(1,core.Inject(exports.SheetDataValidationModel)),__decorateParam$1(2,core.Inject(exports.DataValidationCacheService)),__decorateParam$1(3,core.Inject(core.LifecycleService))],exports.SheetsDataValidationValidatorService);var __defProp2=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__defNormalProp2=__name((obj,key,value)=>key in obj?__defProp2(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,"__defNormalProp"),__decorateClass=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp2(target,key,result),result},"__decorateClass"),__decorateParam=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam"),__publicField2=__name((obj,key,value)=>__defNormalProp2(obj,typeof key!="symbol"?key+"":key,value),"__publicField"),_a11;exports.UniverSheetsDataValidationPlugin=(_a11=class extends core.Plugin{constructor(_config=defaultPluginConfig,_injector,_commandService,_configService){super(),this._config=_config,this._injector=_injector,this._commandService=_commandService,this._configService=_configService;const{...rest}=this._config;this._configService.setConfig(PLUGIN_CONFIG_KEY,rest)}onStarting(){[[exports.DataValidationCacheService],[exports.DataValidationFormulaService],[exports.DataValidationCustomFormulaService],[exports.SheetsDataValidationValidatorService],[exports.SheetDataValidationModel],[DataValidationController],[DataValidationRefRangeController],[exports.DataValidationFormulaController],[SheetDataValidationSheetController]].forEach(dep=>{this._injector.add(dep)}),[AddSheetDataValidationCommand,UpdateSheetDataValidationRangeCommand,UpdateSheetDataValidationSettingCommand,UpdateSheetDataValidationOptionsCommand,RemoveSheetDataValidationCommand,RemoveSheetAllDataValidationCommand,ClearRangeDataValidationCommand].forEach(command=>{this._commandService.registerCommand(command)}),this._injector.get(exports.DataValidationCacheService),this._injector.get(exports.SheetsDataValidationValidatorService),this._injector.get(DataValidationRefRangeController)}onReady(){this._injector.get(SheetDataValidationSheetController)}onRendered(){this._injector.get(DataValidationController),this._injector.get(exports.DataValidationFormulaController)}},__name(_a11,"UniverSheetsDataValidationPlugin"),_a11);__publicField2(exports.UniverSheetsDataValidationPlugin,"pluginName",DATA_VALIDATION_PLUGIN_NAME);__publicField2(exports.UniverSheetsDataValidationPlugin,"type",core.UniverInstanceType.UNIVER_SHEET);exports.UniverSheetsDataValidationPlugin=__decorateClass([core.DependentOn(dataValidation.UniverDataValidationPlugin),__decorateParam(1,core.Inject(core.Injector)),__decorateParam(2,core.ICommandService),__decorateParam(3,core.IConfigService)],exports.UniverSheetsDataValidationPlugin);function createDefaultNewRule(accessor){const currentRanges=accessor.get(sheets.SheetsSelectionsService).getCurrentSelections().map(s=>s.range);return{uid:core.Tools.generateRandomId(6),type:core.DataValidationType.DECIMAL,operator:core.DataValidationOperator.EQUAL,formula1:"100",ranges:currentRanges!=null?currentRanges:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}__name(createDefaultNewRule,"createDefaultNewRule");exports.AddSheetDataValidationCommand=AddSheetDataValidationCommand;exports.CHECKBOX_FORMULA_1=CHECKBOX_FORMULA_1;exports.CHECKBOX_FORMULA_2=CHECKBOX_FORMULA_2;exports.CheckboxValidator=CheckboxValidator;exports.ClearRangeDataValidationCommand=ClearRangeDataValidationCommand;exports.DATA_VALIDATION_PLUGIN_NAME=DATA_VALIDATION_PLUGIN_NAME;exports.DateValidator=DateValidator;exports.ListMultipleValidator=ListMultipleValidator;exports.ListValidator=ListValidator;exports.RemoveSheetAllDataValidationCommand=RemoveSheetAllDataValidationCommand;exports.RemoveSheetDataValidationCommand=RemoveSheetDataValidationCommand;exports.UpdateSheetDataValidationOptionsCommand=UpdateSheetDataValidationOptionsCommand;exports.UpdateSheetDataValidationRangeCommand=UpdateSheetDataValidationRangeCommand;exports.UpdateSheetDataValidationSettingCommand=UpdateSheetDataValidationSettingCommand;exports.createDefaultNewRule=createDefaultNewRule;exports.deserializeListOptions=deserializeListOptions;exports.getCellValueOrigin=getCellValueOrigin;exports.getDataValidationCellValue=getDataValidationCellValue;exports.getDataValidationDiffMutations=getDataValidationDiffMutations;exports.getFormulaCellData=getFormulaCellData;exports.getFormulaResult=getFormulaResult;exports.isLegalFormulaResult=isLegalFormulaResult;exports.serializeListOptions=serializeListOptions;exports.transformCheckboxValue=transformCheckboxValue;
1
+ "use strict";var We=Object.defineProperty;var qe=(s,r,e)=>r in s?We(s,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[r]=e;var p=(s,r,e)=>qe(s,typeof r!="symbol"?r+"":r,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("@univerjs/core"),f=require("@univerjs/data-validation"),M=require("@univerjs/sheets"),B=require("rxjs"),oe=require("@univerjs/sheets-formula"),F=require("@univerjs/engine-formula"),ye="SHEET_DATA_VALIDATION_PLUGIN";var ke=Object.defineProperty,Ge=Object.getOwnPropertyDescriptor,Qe=(s,r,e,t)=>{for(var a=t>1?void 0:t?Ge(r,e):r,i=s.length-1,o;i>=0;i--)(o=s[i])&&(a=(t?o(r,e,a):o(a))||a);return t&&a&&ke(r,e,a),a},Ye=(s,r)=>(e,t)=>r(e,t,s);exports.DataValidationCacheService=class extends n.Disposable{constructor(e){super();p(this,"_cacheMatrix",new Map);p(this,"_dirtyRanges$",new B.Subject);p(this,"dirtyRanges$",this._dirtyRanges$.asObservable());this._commandService=e,this._initDirtyRanges()}_initDirtyRanges(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===M.SetRangeValuesMutation.id){const{cellValue:t,unitId:a,subUnitId:i}=e.params;if(t){const o=new n.ObjectMatrix(t).getDataRange();if(o.endRow===-1)return;this._dirtyRanges$.next({unitId:a,subUnitId:i,ranges:[o]})}}}))}_ensureCache(e,t){let a=this._cacheMatrix.get(e);a||(a=new Map,this._cacheMatrix.set(e,a));let i=a.get(t);return i||(i=new n.ObjectMatrix,a.set(t,i)),i}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)}updateRuleRanges(e,t,a,i,o){const l=this._ensureCache(e,t);o.forEach(u=>{n.Range.foreach(u,(d,c)=>{const h=l.getValue(d,c);h&&(h.temp=!0)})}),i.forEach(u=>{n.Range.foreach(u,(d,c)=>{const h=l.getValue(d,c);h&&h.ruleId===a?h.temp=!1:l.setValue(d,c,void 0)})}),o.forEach(u=>{n.Range.foreach(u,(d,c)=>{const h=l.getValue(d,c);h&&h.temp===!0&&l.realDeleteValue(d,c)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:[...o,...i]})}markRangeDirty(e,t,a){const i=this._ensureCache(e,t);a.forEach(o=>{n.Range.foreach(o,(l,u)=>{i.setValue(l,u,void 0)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a})}markCellDirty(e,t,a,i){this._ensureCache(e,t).setValue(a,i,void 0),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:[{startRow:a,startColumn:i,endRow:a,endColumn:i}]})}_deleteRange(e,t,a){const i=this._ensureCache(e,t);a.forEach(o=>{n.Range.foreach(o,(l,u)=>{i.realDeleteValue(l,u)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a})}getValue(e,t,a,i){return this._ensureCache(e,t).getValue(a,i)}setValue(e,t,a,i,o){return this._ensureCache(e,t).setValue(a,i,o)}};exports.DataValidationCacheService=Qe([Ye(0,n.Inject(n.ICommandService))],exports.DataValidationCacheService);function x(s){var r,e;return(e=(r=s==null?void 0:s[0])==null?void 0:r[0])==null?void 0:e.v}function P(s){var r;return(r=s==null?void 0:s[0])==null?void 0:r[0]}function N(s){return!F.ERROR_TYPE_SET.has(s)}function G(s){return s!==n.DataValidationType.LIST&&s!==n.DataValidationType.LIST_MULTIPLE&&s!==n.DataValidationType.CHECKBOX&&s!==n.DataValidationType.ANY}var Xe=Object.defineProperty,Ke=Object.getOwnPropertyDescriptor,ze=(s,r,e,t)=>{for(var a=t>1?void 0:t?Ke(r,e):r,i=s.length-1,o;i>=0;i--)(o=s[i])&&(a=(t?o(r,e,a):o(a))||a);return t&&a&&Xe(r,e,a),a},z=(s,r)=>(e,t)=>r(e,t,s);exports.DataValidationCustomFormulaService=class extends n.Disposable{constructor(e,t,a,i){super();p(this,"_ruleFormulaMap",new Map);p(this,"_ruleFormulaMap2",new Map);this._instanceSrv=e,this._registerOtherFormulaService=t,this._dataValidationModel=a,this._dataValidationCacheService=i,this._initFormulaResultHandler()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceSrv.getUnitType(t)===n.UniverInstanceType.UNIVER_SHEET)for(const o in a){const l=a[o],{ruleFormulaMap:u}=this._ensureMaps(t,o);l.forEach(d=>{var m,g;const c=u.get((m=d.extra)==null?void 0:m.ruleId),h=this._dataValidationModel.getRuleById(t,o,(g=d.extra)==null?void 0:g.ruleId);h&&c&&this._dataValidationCacheService.markRangeDirty(t,o,h.ranges)})}}}))}_ensureMaps(e,t){let a=this._ruleFormulaMap.get(e),i=this._ruleFormulaMap2.get(e);a||(a=new Map,this._ruleFormulaMap.set(e,a)),i||(i=new Map,this._ruleFormulaMap2.set(e,i));let o=a.get(t);o||(o=new Map,a.set(t,o));let l=i.get(t);return l||(l=new Map,i.set(t,l)),{ruleFormulaMap:o,ruleFormulaMap2:l}}_registerFormula(e,t,a,i,o){return this._registerOtherFormulaService.registerFormulaWithRange(e,t,i,o,{ruleId:a})}deleteByRuleId(e,t,a){const{ruleFormulaMap:i,ruleFormulaMap2:o}=this._ensureMaps(e,t),l=this._dataValidationModel.getRuleById(e,t,a),u=i.get(a);if(!l||!u)return;const d=i.get(a);d&&(i.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[d.formulaId]));const c=o.get(a);c&&(o.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[c.formulaId]))}_addFormulaByRange(e,t,a,i,o,l){const{ruleFormulaMap:u,ruleFormulaMap2:d}=this._ensureMaps(e,t),c=l[0].startRow,h=l[0].startColumn;if(i&&n.isFormulaString(i)){const m=this._registerFormula(e,t,a,i,l);u.set(a,{formula:i,originCol:h,originRow:c,formulaId:m})}if(o&&n.isFormulaString(o)){const m=this._registerFormula(e,t,a,o,l);d.set(a,{formula:o,originCol:h,originRow:c,formulaId:m})}}addRule(e,t,a){if(G(a.type)){const{ranges:i,formula1:o,formula2:l,uid:u}=a;this._addFormulaByRange(e,t,u,o,l,i)}}async getCellFormulaValue(e,t,a,i,o){var _,S;const{ruleFormulaMap:l}=this._ensureMaps(e,t),u=l.get(a);if(!u)return Promise.resolve(void 0);const d=await this._registerOtherFormulaService.getFormulaValue(e,t,u.formulaId),{originRow:c,originCol:h}=u,m=i-c,g=o-h;return P((S=(_=d==null?void 0:d.result)==null?void 0:_[m])==null?void 0:S[g])}async getCellFormula2Value(e,t,a,i,o){var _,S;const{ruleFormulaMap2:l}=this._ensureMaps(e,t),u=l.get(a);if(!u)return Promise.resolve(void 0);const d=await this._registerOtherFormulaService.getFormulaValue(e,t,u.formulaId),{originRow:c,originCol:h}=u,m=i-c,g=o-h;return P((S=(_=d==null?void 0:d.result)==null?void 0:_[m])==null?void 0:S[g])}getCellFormulaValueSync(e,t,a,i,o){var _,S;const{ruleFormulaMap:l}=this._ensureMaps(e,t),u=l.get(a);if(!u)return;const d=this._registerOtherFormulaService.getFormulaValueSync(e,t,u.formulaId),{originRow:c,originCol:h}=u,m=i-c,g=o-h;return P((S=(_=d==null?void 0:d.result)==null?void 0:_[m])==null?void 0:S[g])}getCellFormula2ValueSync(e,t,a,i,o){var _,S;const{ruleFormulaMap2:l}=this._ensureMaps(e,t),u=l.get(a);if(!u)return;const d=this._registerOtherFormulaService.getFormulaValueSync(e,t,u.formulaId),{originRow:c,originCol:h}=u,m=i-c,g=o-h;return P((S=(_=d==null?void 0:d.result)==null?void 0:_[m])==null?void 0:S[g])}getRuleFormulaInfo(e,t,a){const{ruleFormulaMap:i}=this._ensureMaps(e,t);return i.get(a)}};exports.DataValidationCustomFormulaService=ze([z(0,n.IUniverInstanceService),z(1,n.Inject(oe.RegisterOtherFormulaService)),z(2,n.Inject(f.DataValidationModel)),z(3,n.Inject(exports.DataValidationCacheService))],exports.DataValidationCustomFormulaService);var Ze=Object.defineProperty,Je=Object.getOwnPropertyDescriptor,et=(s,r,e,t)=>{for(var a=t>1?void 0:t?Je(r,e):r,i=s.length-1,o;i>=0;i--)(o=s[i])&&(a=(t?o(r,e,a):o(a))||a);return t&&a&&Ze(r,e,a),a},Z=(s,r)=>(e,t)=>r(e,t,s);exports.DataValidationFormulaService=class extends n.Disposable{constructor(e,t,a,i){super();p(this,"_formulaRuleMap",new Map);this._instanceService=e,this._registerOtherFormulaService=t,this._dataValidationCacheService=a,this._dataValidationModel=i,this._initFormulaResultHandler()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceService.getUnitType(t)===n.UniverInstanceType.UNIVER_SHEET)for(const o in a){const l=a[o],u=this._ensureRuleFormulaMap(t,o);l.forEach(d=>{var c,h;if(u.get((c=d.extra)==null?void 0:c.ruleId)){const m=this._dataValidationModel.getRuleById(t,o,(h=d.extra)==null?void 0:h.ruleId);m&&this._dataValidationCacheService.markRangeDirty(t,o,m.ranges)}})}}}))}_ensureRuleFormulaMap(e,t){let a=this._formulaRuleMap.get(e);a||(a=new Map,this._formulaRuleMap.set(e,a));let i=a.get(t);return i||(i=new Map,a.set(t,i)),i}_registerSingleFormula(e,t,a,i){const o=[{startColumn:0,endColumn:0,startRow:0,endRow:0}];return this._registerOtherFormulaService.registerFormulaWithRange(e,t,a,o,{ruleId:i})}addRule(e,t,a){if(!G(a.type)&&a.type!==n.DataValidationType.CHECKBOX){const{formula1:i,formula2:o,uid:l}=a,u=n.isFormulaString(i),d=n.isFormulaString(o);if(!u&&!d)return;const c=this._ensureRuleFormulaMap(e,t),h=[void 0,void 0];if(u){const m=this._registerSingleFormula(e,t,i,l);h[0]={id:m,text:i}}if(d){const m=this._registerSingleFormula(e,t,o,l);h[1]={id:m,text:o}}c.set(l,h)}}removeRule(e,t,a){const o=this._ensureRuleFormulaMap(e,t).get(a);if(!o)return;const[l,u]=o,d=[l==null?void 0:l.id,u==null?void 0:u.id].filter(Boolean);d.length&&this._registerOtherFormulaService.deleteFormula(e,t,d)}getRuleFormulaResult(e,t,a){const o=this._ensureRuleFormulaMap(e,t).get(a);if(!o)return Promise.resolve(null);const l=async u=>u&&this._registerOtherFormulaService.getFormulaValue(e,t,u.id);return Promise.all([l(o[0]),l(o[1])])}getRuleFormulaResultSync(e,t,a){const o=this._ensureRuleFormulaMap(e,t).get(a);if(o)return o.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=et([Z(0,n.IUniverInstanceService),Z(1,n.Inject(oe.RegisterOtherFormulaService)),Z(2,n.Inject(exports.DataValidationCacheService)),Z(3,n.Inject(f.DataValidationModel))],exports.DataValidationFormulaService);function b(s){return n.getOriginCellValue(s)}function Te(s){var r;return String((r=b(s))!=null?r:"")}const tt=class fe{constructor(r,e){this.low=r,this.high=e}clone(){return new fe(this.low,this.high)}get max(){return this.clone()}less_than(r){return this.low<r.low||this.low===r.low&&this.high<r.high}equal_to(r){return this.low===r.low&&this.high===r.high}intersect(r){return!this.not_intersect(r)}not_intersect(r){return this.high<r.low||r.high<this.low}merge(r){return new fe(this.low===void 0?r.low:this.low<r.low?this.low:r.low,this.high===void 0?r.high:this.high>r.high?this.high:r.high)}output(){return[this.low,this.high]}static comparable_max(r,e){return r.merge(e)}static comparable_less_than(r,e){return r<e}},T=0,V=1;class I{constructor(r=void 0,e=void 0,t=null,a=null,i=null,o=V){if(this.left=t,this.right=a,this.parent=i,this.color=o,this.item={key:r,value:e},r&&r instanceof Array&&r.length===2&&!Number.isNaN(r[0])&&!Number.isNaN(r[1])){let[l,u]=r;l>u&&([l,u]=[u,l]),this.item.key=new tt(l,u)}this.max=this.item.key?this.item.key.max:void 0}isNil(){return this.item.key===void 0&&this.item.value===void 0&&this.left===null&&this.right===null&&this.color===V}_value_less_than(r){return this.item.value&&r.item.value&&this.item.value.less_than?this.item.value.less_than(r.item.value):this.item.value<r.item.value}less_than(r){return this.item.value===this.item.key&&r.item.value===r.item.key?this.item.key.less_than(r.item.key):this.item.key.less_than(r.item.key)||this.item.key.equal_to(r.item.key)&&this._value_less_than(r)}_value_equal(r){return this.item.value&&r.item.value&&this.item.value.equal_to?this.item.value.equal_to(r.item.value):this.item.value===r.item.value}equal_to(r){return this.item.value===this.item.key&&r.item.value===r.item.key?this.item.key.equal_to(r.item.key):this.item.key.equal_to(r.item.key)&&this._value_equal(r)}intersect(r){return this.item.key.intersect(r.item.key)}copy_data(r){this.item.key=r.item.key,this.item.value=r.item.value}update_max(){if(this.max=this.item.key?this.item.key.max:void 0,this.right&&this.right.max){const r=this.item.key.constructor.comparable_max;this.max=r(this.max,this.right.max)}if(this.left&&this.left.max){const r=this.item.key.constructor.comparable_max;this.max=r(this.max,this.left.max)}}not_intersect_left_subtree(r){const e=this.item.key.constructor.comparable_less_than;let t=this.left.max.high!==void 0?this.left.max.high:this.left.max;return e(t,r.item.key.low)}not_intersect_right_subtree(r){const e=this.item.key.constructor.comparable_less_than;let t=this.right.max.low!==void 0?this.right.max.low:this.right.item.key.low;return e(r.item.key.high,t)}}class ge{constructor(){this.root=null,this.nil_node=new I}get size(){let r=0;return this.tree_walk(this.root,()=>r++),r}get keys(){let r=[];return this.tree_walk(this.root,e=>r.push(e.item.key.output?e.item.key.output():e.item.key)),r}get values(){let r=[];return this.tree_walk(this.root,e=>r.push(e.item.value)),r}get items(){let r=[];return this.tree_walk(this.root,e=>r.push({key:e.item.key.output?e.item.key.output():e.item.key,value:e.item.value})),r}isEmpty(){return this.root==null||this.root===this.nil_node}clear(){this.root=null}insert(r,e=r){if(r===void 0)return;let t=new I(r,e,this.nil_node,this.nil_node,null,T);return this.tree_insert(t),this.recalc_max(t),t}exist(r,e=r){let t=new I(r,e);return!!this.tree_search(this.root,t)}remove(r,e=r){let t=new I(r,e),a=this.tree_search(this.root,t);return a&&this.tree_delete(a),a}search(r,e=(t,a)=>t===a?a.output():t){let t=new I(r),a=[];return this.tree_search_interval(this.root,t,a),a.map(i=>e(i.item.value,i.item.key))}intersect_any(r){let e=new I(r);return this.tree_find_any_interval(this.root,e)}forEach(r){this.tree_walk(this.root,e=>r(e.item.key,e.item.value))}map(r){const e=new ge;return this.tree_walk(this.root,t=>e.insert(t.item.key,r(t.item.value,t.item.key))),e}*iterate(r,e=(t,a)=>t===a?a.output():t){let t;for(r?t=this.tree_search_nearest_forward(this.root,new I(r)):this.root&&(t=this.local_minimum(this.root));t;)yield e(t.item.value,t.item.key),t=this.tree_successor(t)}recalc_max(r){let e=r;for(;e.parent!=null;)e.parent.update_max(),e=e.parent}tree_insert(r){let e=this.root,t=null;if(this.root==null||this.root===this.nil_node)this.root=r;else{for(;e!==this.nil_node;)t=e,r.less_than(e)?e=e.left:e=e.right;r.parent=t,r.less_than(t)?t.left=r:t.right=r}this.insert_fixup(r)}insert_fixup(r){let e,t;for(e=r;e!==this.root&&e.parent.color===T;)e.parent===e.parent.parent.left?(t=e.parent.parent.right,t.color===T?(e.parent.color=V,t.color=V,e.parent.parent.color=T,e=e.parent.parent):(e===e.parent.right&&(e=e.parent,this.rotate_left(e)),e.parent.color=V,e.parent.parent.color=T,this.rotate_right(e.parent.parent))):(t=e.parent.parent.left,t.color===T?(e.parent.color=V,t.color=V,e.parent.parent.color=T,e=e.parent.parent):(e===e.parent.left&&(e=e.parent,this.rotate_right(e)),e.parent.color=V,e.parent.parent.color=T,this.rotate_left(e.parent.parent)));this.root.color=V}tree_delete(r){let e,t;r.left===this.nil_node||r.right===this.nil_node?e=r:e=this.tree_successor(r),e.left!==this.nil_node?t=e.left:t=e.right,t.parent=e.parent,e===this.root?this.root=t:(e===e.parent.left?e.parent.left=t:e.parent.right=t,e.parent.update_max()),this.recalc_max(t),e!==r&&(r.copy_data(e),r.update_max(),this.recalc_max(r)),e.color===V&&this.delete_fixup(t)}delete_fixup(r){let e=r,t;for(;e!==this.root&&e.parent!=null&&e.color===V;)e===e.parent.left?(t=e.parent.right,t.color===T&&(t.color=V,e.parent.color=T,this.rotate_left(e.parent),t=e.parent.right),t.left.color===V&&t.right.color===V?(t.color=T,e=e.parent):(t.right.color===V&&(t.color=T,t.left.color=V,this.rotate_right(t),t=e.parent.right),t.color=e.parent.color,e.parent.color=V,t.right.color=V,this.rotate_left(e.parent),e=this.root)):(t=e.parent.left,t.color===T&&(t.color=V,e.parent.color=T,this.rotate_right(e.parent),t=e.parent.left),t.left.color===V&&t.right.color===V?(t.color=T,e=e.parent):(t.left.color===V&&(t.color=T,t.right.color=V,this.rotate_left(t),t=e.parent.left),t.color=e.parent.color,e.parent.color=V,t.left.color=V,this.rotate_right(e.parent),e=this.root));e.color=V}tree_search(r,e){if(!(r==null||r===this.nil_node))return e.equal_to(r)?r:e.less_than(r)?this.tree_search(r.left,e):this.tree_search(r.right,e)}tree_search_nearest_forward(r,e){let t,a=r;for(;a&&a!==this.nil_node;)a.less_than(e)?a.intersect(e)?(t=a,a=a.left):a=a.right:((!t||a.less_than(t))&&(t=a),a=a.left);return t||null}tree_search_interval(r,e,t){r!=null&&r!==this.nil_node&&(r.left!==this.nil_node&&!r.not_intersect_left_subtree(e)&&this.tree_search_interval(r.left,e,t),r.intersect(e)&&t.push(r),r.right!==this.nil_node&&!r.not_intersect_right_subtree(e)&&this.tree_search_interval(r.right,e,t))}tree_find_any_interval(r,e){let t=!1;return r!=null&&r!==this.nil_node&&(r.left!==this.nil_node&&!r.not_intersect_left_subtree(e)&&(t=this.tree_find_any_interval(r.left,e)),t||(t=r.intersect(e)),!t&&r.right!==this.nil_node&&!r.not_intersect_right_subtree(e)&&(t=this.tree_find_any_interval(r.right,e))),t}local_minimum(r){let e=r;for(;e.left!=null&&e.left!==this.nil_node;)e=e.left;return e}local_maximum(r){let e=r;for(;e.right!=null&&e.right!==this.nil_node;)e=e.right;return e}tree_successor(r){let e,t,a;if(r.right!==this.nil_node)e=this.local_minimum(r.right);else{for(t=r,a=r.parent;a!=null&&a.right===t;)t=a,a=a.parent;e=a}return e}rotate_left(r){let e=r.right;r.right=e.left,e.left!==this.nil_node&&(e.left.parent=r),e.parent=r.parent,r===this.root?this.root=e:r===r.parent.left?r.parent.left=e:r.parent.right=e,e.left=r,r.parent=e,r!=null&&r!==this.nil_node&&r.update_max(),e=r.parent,e!=null&&e!==this.nil_node&&e.update_max()}rotate_right(r){let e=r.left;r.left=e.right,e.right!==this.nil_node&&(e.right.parent=r),e.parent=r.parent,r===this.root?this.root=e:r===r.parent.left?r.parent.left=e:r.parent.right=e,e.right=r,r.parent=e,r!==null&&r!==this.nil_node&&r.update_max(),e=r.parent,e!=null&&e!==this.nil_node&&e.update_max()}tree_walk(r,e){r!=null&&r!==this.nil_node&&(this.tree_walk(r.left,e),e(r),this.tree_walk(r.right,e))}testRedBlackProperty(){let r=!0;return this.tree_walk(this.root,function(e){e.color===T&&(e.left.color===V&&e.right.color===V||(r=!1))}),r}testBlackHeightProperty(r){let e=0,t=0,a=0;if(r.color===V&&e++,r.left!==this.nil_node?t=this.testBlackHeightProperty(r.left):t=1,r.right!==this.nil_node?a=this.testBlackHeightProperty(r.right):a=1,t!==a)throw new Error("Red-black height property violated");return e+=t,e}}class _e{constructor(r,e,t,a,i=!1){p(this,"_map");p(this,"_tree",new Map);p(this,"_dirty",!0);p(this,"_buildTree",()=>{if(!this._dirty||this._disableTree)return;const r=new Map;this._map.forEach((t,a)=>{t.forEach(i=>{for(let o=i.startColumn;o<=i.endColumn;o++){let l=r.get(o);l||(l=[],r.set(o,l)),l.push({startRow:i.startRow,endRow:i.endRow,ruleId:a})}})});const e=new Map;r.forEach((t,a)=>{const i=new ge;t.forEach(o=>{i.insert([o.startRow,o.endRow],o.ruleId)}),e.set(a,i)}),this._tree=e,this._dirty=!1});p(this,"_debonceBuildTree",n.debounce(this._buildTree,0));this._unitId=e,this._subUnitId=t,this._univerInstanceService=a,this._disableTree=i,this._map=r,this._buildTree()}get _worksheet(){var r;return(r=this._univerInstanceService.getUnit(this._unitId,n.UniverInstanceType.UNIVER_SHEET))==null?void 0:r.getSheetBySheetId(this._subUnitId)}addRule(r){if(!this._worksheet)return;const e=r.uid,t=r.ranges.map(a=>n.Range.transformRange(a,this._worksheet));this._map.forEach((a,i)=>{const o=n.Rectangle.subtractMulti(a,t);o.length===0?this._map.delete(i):this._map.set(i,o)}),this._dirty=!0,this._map.set(e,t),this._debonceBuildTree()}removeRange(r){if(!this._worksheet)return;const e=r.map(t=>n.Range.transformRange(t,this._worksheet));this._map.forEach((t,a)=>{const i=n.Rectangle.subtractMulti(t,e);i.length===0?this._map.delete(a):this._map.set(a,i)}),this._dirty=!0,this._debonceBuildTree()}removeRule(r){this._map.delete(r.uid),this._dirty=!0,this._debonceBuildTree()}updateRange(r,e){if(!this._worksheet)return;this._map.delete(r);const t=e.map(a=>n.Range.transformRange(a,this._worksheet));this._map.forEach((a,i)=>{const o=n.Rectangle.subtractMulti(a,t);o.length===0?this._map.delete(i):this._map.set(i,o)}),this._map.set(r,t),this._dirty=!0,this._debonceBuildTree()}addRangeRules(r){r.forEach(({id:e,ranges:t})=>{if(!t.length)return;let a=this._map.get(e);a?(this._map.set(e,n.Rectangle.mergeRanges([...a,...t])),a=this._map.get(e)):(a=t,this._map.set(e,a)),this._map.forEach((i,o)=>{if(o===e)return;const l=n.Rectangle.subtractMulti(i,t);l.length===0?this._map.delete(o):this._map.set(o,l)})}),this._dirty=!0,this._debonceBuildTree()}diff(r){const e=[];let t=0;return r.forEach((a,i)=>{var u;const o=(u=this._map.get(a.uid))!=null?u:[],l=a.ranges;o.length!==0&&(o.length!==l.length||o.some((d,c)=>!n.Rectangle.equals(d,l[c])))&&e.push({type:"update",ruleId:a.uid,oldRanges:l,newRanges:n.Rectangle.sort(o),rule:a}),o.length===0&&(e.push({type:"delete",rule:a,index:i-t}),t++)}),e}diffWithAddition(r,e){const t=[];let a=0;return r.forEach((i,o)=>{var d;const l=(d=this._map.get(i.uid))!=null?d:[],u=i.ranges;l.length!==0&&(l.length!==u.length||l.some((c,h)=>!n.Rectangle.equals(c,u[h])))&&t.push({type:"update",ruleId:i.uid,oldRanges:u,newRanges:n.Rectangle.sort(l),rule:i}),l.length===0&&(t.push({type:"delete",rule:i,index:o-a}),a++)}),Array.from(e).forEach(i=>{var l;const o=(l=this._map.get(i.uid))!=null?l:[];t.push({type:"add",rule:{...i,ranges:n.Rectangle.sort(o)}})}),t}clone(){return new _e(new Map(n.Tools.deepClone(Array.from(this._map.entries()))),this._unitId,this._subUnitId,this._univerInstanceService,!0)}getValue(r,e){this._dirty&&this._buildTree();const t=this._tree.get(e);if(!t)return;const a=t.search([r,r]);return a.length>0?a[0]:void 0}}var at=Object.defineProperty,rt=Object.getOwnPropertyDescriptor,it=(s,r,e,t)=>{for(var a=t>1?void 0:t?rt(r,e):r,i=s.length-1,o;i>=0;i--)(o=s[i])&&(a=(t?o(r,e,a):o(a))||a);return t&&a&&at(r,e,a),a},w=(s,r)=>(e,t)=>r(e,t,s);exports.SheetDataValidationModel=class extends n.Disposable{constructor(e,t,a,i,o,l,u){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=i,this._dataValidationFormulaService=o,this._dataValidationCustomFormulaService=l,this._commandService=u,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===M.RemoveSheetMutation.id){const{unitId:t,subUnitId:a}=e.params,i=this._ruleMatrixMap.get(t);i&&i.delete(a)}}))}_initRuleUpdateListener(){const e=this._dataValidationModel.getAll();for(const[t,a]of e)for(const[i,o]of a)for(const l of o)this._addRule(t,i,l),this._ruleChange$.next({type:"add",unitId:t,subUnitId:i,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 i=a.get(t);return i||(i=new _e(new Map,e,t,this._univerInstanceService),a.set(t,i)),i}_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(o=>{this._addRuleSideEffect(e,t,o)})}_updateRule(e,t,a,i,o){const l=this._ensureRuleMatrix(e,t),u={...i,...o.payload};o.type===f.UpdateRuleType.RANGE?(l.updateRange(a,o.payload),this._dataValidationCacheService.updateRuleRanges(e,t,a,o.payload,i.ranges)):o.type===f.UpdateRuleType.SETTING?this._dataValidationCacheService.markRangeDirty(e,t,i.ranges):o.type===f.UpdateRuleType.ALL&&(l.updateRange(a,o.payload.ranges),this._dataValidationCacheService.updateRuleRanges(e,t,a,o.payload.ranges,i.ranges),this._dataValidationCacheService.markRangeDirty(e,t,i.ranges)),this._dataValidationFormulaService.removeRule(e,t,i.uid),this._dataValidationFormulaService.addRule(e,t,u),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a),this._dataValidationCustomFormulaService.addRule(e,t,u)}_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,i){return this._ensureRuleMatrix(e,t).getValue(a,i)}getRuleByLocation(e,t,a,i){const o=this.getRuleIdByLocation(e,t,a,i);if(o)return this._dataValidationModel.getRuleById(e,t,o)}validator(e,t,a){const{col:i,row:o,unitId:l,subUnitId:u,worksheet:d}=t,c=e.uid,h=e.formula1,m=e.formula2,g=(O,D)=>{a&&a(O,D),D&&this._validStatusChange$.next({unitId:l,subUnitId:u,ruleId:e.uid,status:O,row:o,col:i})},_=d.getCellValueOnly(o,i),S=this.getValidator(e.type),R=d.getCellRaw(o,i),v=b(R),y=b(_);if(S){const O=this._dataValidationCacheService.ensureCache(l,u),D=O.getValue(o,i);return!D||D.value!==v||D.interceptValue!==y||D.ruleId!==c||D.formula1!==h||D.formula2!==m?(O.setValue(o,i,{value:v,interceptValue:y,status:n.DataValidationStatus.VALIDATING,ruleId:c,formula1:h||"",formula2:m||""}),S.validator({value:v,unitId:l,subUnitId:u,row:o,column:i,worksheet:t.worksheet,workbook:t.workbook,interceptValue:b(_),t:R==null?void 0:R.t},e).then(E=>{const C=E?n.DataValidationStatus.VALID:n.DataValidationStatus.INVALID;O.setValue(o,i,{value:v,status:C,ruleId:c,interceptValue:y,formula1:h||"",formula2:m||""}),g(C,!0)}),n.DataValidationStatus.VALIDATING):(g(D.status,!1),D.status)}else return g(n.DataValidationStatus.VALID,!1),n.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=it([w(0,n.Inject(f.DataValidationModel)),w(1,n.IUniverInstanceService),w(2,n.Inject(f.DataValidatorRegistryService)),w(3,n.Inject(exports.DataValidationCacheService)),w(4,n.Inject(exports.DataValidationFormulaService)),w(5,n.Inject(exports.DataValidationCustomFormulaService)),w(6,n.ICommandService)],exports.SheetDataValidationModel);const $=1,W=0;function De(s,r){return n.Tools.isBlank(s)?r.t("dataValidation.validFail.value"):n.isFormulaString(s)?r.t("dataValidation.validFail.primitive"):""}const j=s=>n.Tools.isDefine(s)&&String(s).toLowerCase()==="true"?"1":String(s).toLowerCase()==="false"?"0":s;class Ne extends f.BaseDataValidator{constructor(){super(...arguments);p(this,"id",n.DataValidationType.CHECKBOX);p(this,"title","dataValidation.checkbox.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"_formulaService",this.injector.get(exports.DataValidationFormulaService));p(this,"skipDefaultFontRender",(e,t,a)=>{const{unitId:i,subUnitId:o}=a,{formula1:l,formula2:u}=this.parseFormulaSync(e,i,o),d=`${t!=null?t:""}`;return!d||d===`${l}`||d===`${u}`})}validatorFormula(e,t,a){const{formula1:i,formula2:o}=e,l=i===o;if(n.Tools.isBlank(i)&&n.Tools.isBlank(o))return{success:!0};if(l)return{success:!1,formula1:this.localeService.t("dataValidation.validFail.checkboxEqual"),formula2:this.localeService.t("dataValidation.validFail.checkboxEqual")};const u=De(i,this.localeService),d=De(o,this.localeService);return{success:!u&&!d,formula1:u,formula2:d}}async parseFormula(e,t,a){var h,m,g,_;const{formula1:i=$,formula2:o=W}=e,l=await this._formulaService.getRuleFormulaResult(t,a,e.uid),u=n.isFormulaString(i)?x((m=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:m[0][0]):i,d=n.isFormulaString(o)?x((_=(g=l==null?void 0:l[1])==null?void 0:g.result)==null?void 0:_[0][0]):o,c=N(String(u))&&N(String(d));return{formula1:j(u),formula2:j(d),originFormula1:u,originFormula2:d,isFormulaValid:c}}getExtraStyle(e,t){return{tb:n.WrapStrategy.CLIP}}parseFormulaSync(e,t,a){var h,m,g,_;const{formula1:i=$,formula2:o=W}=e,l=this._formulaService.getRuleFormulaResultSync(t,a,e.uid),u=n.isFormulaString(i)?x((m=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:m[0][0]):i,d=n.isFormulaString(o)?x((_=(g=l==null?void 0:l[1])==null?void 0:g.result)==null?void 0:_[0][0]):o,c=N(String(u))&&N(String(d));return{formula1:j(u),formula2:j(d),originFormula1:u,originFormula2:d,isFormulaValid:c}}async isValidType(e,t,a){const{value:i,unitId:o,subUnitId:l}=e,{formula1:u,formula2:d,originFormula1:c,originFormula2:h}=await this.parseFormula(a,o,l);return!n.Tools.isDefine(u)||!n.Tools.isDefine(d)?!0:n.Tools.isDefine(i)&&(String(i)===String(u)||String(i)===String(d)||String(i)===String(c!=null?c:"")||String(i)===String(h!=null?h:""))}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.checkbox.error")}}const ot={[n.DataValidationOperator.BETWEEN]:"dataValidation.date.operators.between",[n.DataValidationOperator.EQUAL]:"dataValidation.date.operators.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.date.operators.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.operators.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.date.operators.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.operators.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.operators.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.operators.notEqual"};n.DataValidationOperator.BETWEEN+"",n.DataValidationOperator.EQUAL+"",n.DataValidationOperator.GREATER_THAN+"",n.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",n.DataValidationOperator.LESS_THAN+"",n.DataValidationOperator.LESS_THAN_OR_EQUAL+"",n.DataValidationOperator.NOT_BETWEEN+"",n.DataValidationOperator.NOT_EQUAL+"";const nt={[n.DataValidationOperator.BETWEEN]:"dataValidation.date.ruleName.between",[n.DataValidationOperator.EQUAL]:"dataValidation.date.ruleName.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.date.ruleName.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.ruleName.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.date.ruleName.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.ruleName.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.ruleName.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.ruleName.notEqual"},st={[n.DataValidationOperator.BETWEEN]:"dataValidation.date.errorMsg.between",[n.DataValidationOperator.EQUAL]:"dataValidation.date.errorMsg.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.date.errorMsg.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.date.errorMsg.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.errorMsg.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.errorMsg.notEqual"},ne=[n.DataValidationOperator.BETWEEN,n.DataValidationOperator.NOT_BETWEEN],q="{FORMULA1}",k="{FORMULA2}";function lt(s){return s.filter(Boolean).join(",")}function H(s){return s.split(",").filter(Boolean)}function ut(s){const r=b(s);return r==null?"":r.toString()}function se(s,r,e){const{formula1:t,formula2:a}=r,i=r.ranges[0].startRow,o=r.ranges[0].startColumn,l=e.row-i,u=e.col-o,d=n.isFormulaString(t)?s.moveFormulaRefOffset(t,u,l,!0):t,c=n.isFormulaString(a)?s.moveFormulaRefOffset(a,u,l,!0):a;return{transformedFormula1:d,transformedFormula2:c}}const de=s=>{var e,t;if(s==null||typeof s=="boolean")return;if(typeof s=="number"||!Number.isNaN(+s))return+s;const r=(e=n.numfmt.parseDate(s))==null?void 0:e.v;return n.Tools.isDefine(r)?r:(t=n.numfmt.parseDate(n.dayjs(s).format("YYYY-MM-DD HH:mm:ss")))==null?void 0:t.v};class Oe extends f.BaseDataValidator{constructor(){super(...arguments);p(this,"id",n.DataValidationType.DATE);p(this,"title","dataValidation.date.title");p(this,"operators",[n.DataValidationOperator.BETWEEN,n.DataValidationOperator.EQUAL,n.DataValidationOperator.GREATER_THAN,n.DataValidationOperator.GREATER_THAN_OR_EQUAL,n.DataValidationOperator.LESS_THAN,n.DataValidationOperator.LESS_THAN_OR_EQUAL,n.DataValidationOperator.NOT_BETWEEN,n.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"]);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(F.LexerTreeBuilder))}async parseFormula(e,t,a,i,o){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,o),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,o),{formula1:d,formula2:c}=e,h=N(String(l==null?void 0:l.v))&&N(String(u==null?void 0:u.v));return{formula1:de(n.isFormulaString(d)?l==null?void 0:l.v:d),formula2:de(n.isFormulaString(c)?u==null?void 0:u.v:c),isFormulaValid:h}}async isValidType(e){const{interceptValue:t,value:a}=e;return typeof a=="number"&&typeof t=="string"?!0:typeof t=="string"?!!n.numfmt.parseDate(t):!1}_validatorSingleFormula(e){return!n.Tools.isBlank(e)&&(n.isFormulaString(e)||!Number.isNaN(+e)||!!(e&&n.numfmt.parseDate(e)))}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!1};const o=this._validatorSingleFormula(e.formula1),l=this.localeService.t("dataValidation.validFail.date");if(ne.includes(i)){const d=this._validatorSingleFormula(e.formula2);return{success:o&&d,formula1:o?void 0:l,formula2:d?void 0:l}}return{success:o,formula1:o?void 0:l}}normalizeFormula(e,t,a){const{formula1:i,formula2:o,bizInfo:l}=e,u=d=>{var h;if(!d)return d;let c;if(!Number.isNaN(+d))c=n.numfmt.dateFromSerial(+d);else{const m=(h=n.numfmt.parseDate(d))==null?void 0:h.v;if(m==null)return"";c=n.numfmt.dateFromSerial(m)}return n.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:n.isFormulaString(i)?i:u(`${i}`),formula2:n.isFormulaString(o)?o:u(`${o}`)}}transform(e,t,a){const{value:i}=e;return{...e,value:de(i)}}async validatorIsEqual(e,t,a){const{formula1:i}=t,{value:o}=e;return Number.isNaN(i)?!0:o===i}async validatorIsNotEqual(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value!==i}async validatorIsBetween(e,t,a){const{formula1:i,formula2:o}=t;if(Number.isNaN(i)||Number.isNaN(o))return!0;const l=Math.min(i,o),u=Math.max(i,o);return e.value>=l&&e.value<=u}async validatorIsNotBetween(e,t,a){const{formula1:i,formula2:o}=t;if(Number.isNaN(i)||Number.isNaN(o))return!0;const l=Math.min(i,o),u=Math.max(i,o);return e.value<l||e.value>u}async validatorIsGreaterThan(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value>i}async validatorIsGreaterThanOrEqual(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value>=i}async validatorIsLessThan(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value<i}async validatorIsLessThanOrEqual(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value<=i}get operatorNames(){return this.operators.map(e=>this.localeService.t(ot[e]))}generateRuleName(e){var a,i;if(!e.operator)return this.titleStr;const t=this.localeService.t(nt[e.operator]).replace(q,(a=e.formula1)!=null?a:"").replace(k,(i=e.formula2)!=null?i:"");return`${this.titleStr} ${t}`}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:i}=se(this._lexerTreeBuilder,e,t);return`${this.localeService.t(st[e.operator]).replace(q,a!=null?a:"").replace(k,i!=null?i:"")}`}}n.DataValidationOperator.BETWEEN+"",n.DataValidationOperator.EQUAL+"",n.DataValidationOperator.GREATER_THAN+"",n.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",n.DataValidationOperator.LESS_THAN+"",n.DataValidationOperator.LESS_THAN_OR_EQUAL+"",n.DataValidationOperator.NOT_BETWEEN+"",n.DataValidationOperator.NOT_EQUAL+"";n.DataValidationOperator.BETWEEN+"",n.DataValidationOperator.EQUAL+"",n.DataValidationOperator.GREATER_THAN+"",n.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",n.DataValidationOperator.LESS_THAN+"",n.DataValidationOperator.LESS_THAN_OR_EQUAL+"",n.DataValidationOperator.NOT_BETWEEN+"",n.DataValidationOperator.NOT_EQUAL+"";const Fe={[n.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[n.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"};function ee(s){let r=s;return typeof s=="string"?((s.startsWith("¥")||s.startsWith("$"))&&(r=s.slice(1)),+r):+s}class dt extends f.BaseDataValidator{constructor(){super(...arguments);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"id",n.DataValidationType.DECIMAL);p(this,"_lexerTreeBuilder",this.injector.get(F.LexerTreeBuilder));p(this,"title","dataValidation.decimal.title");p(this,"operators",[n.DataValidationOperator.BETWEEN,n.DataValidationOperator.EQUAL,n.DataValidationOperator.GREATER_THAN,n.DataValidationOperator.GREATER_THAN_OR_EQUAL,n.DataValidationOperator.LESS_THAN,n.DataValidationOperator.LESS_THAN_OR_EQUAL,n.DataValidationOperator.NOT_BETWEEN,n.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"])}_isFormulaOrNumber(e){return!n.Tools.isBlank(e)&&(n.isFormulaString(e)||!Number.isNaN(+e))}async isValidType(e,t,a){const{value:i}=e;return!Number.isNaN(ee(i))}transform(e,t,a){const{value:i}=e;return{...e,value:ee(i)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,i,o){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,o),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,o),{formula1:d,formula2:c}=e,h=N(String(l==null?void 0:l.v))&&N(String(u==null?void 0:u.v));return{formula1:this._parseNumber(n.isFormulaString(d)?l==null?void 0:l.v:d),formula2:this._parseNumber(n.isFormulaString(c)?u==null?void 0:u.v:c),isFormulaValid:h}}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!1};const o=n.Tools.isDefine(e.formula1)&&this._isFormulaOrNumber(e.formula1),l=n.Tools.isDefine(e.formula2)&&this._isFormulaOrNumber(e.formula2),u=ne.includes(i),d=this.localeService.t("dataValidation.validFail.number");return u?{success:o&&l,formula1:o?void 0:d,formula2:l?void 0:d}:{success:o,formula1:o?"":d}}async validatorIsEqual(e,t,a){const{formula1:i}=t,{value:o}=e;return Number.isNaN(i)?!0:o===i}async validatorIsNotEqual(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value!==i}async validatorIsBetween(e,t,a){const{formula1:i,formula2:o}=t;if(Number.isNaN(i)||Number.isNaN(o))return!0;const l=Math.min(i,o),u=Math.max(i,o);return e.value>=l&&e.value<=u}async validatorIsNotBetween(e,t,a){const{formula1:i,formula2:o}=t;if(Number.isNaN(i)||Number.isNaN(o))return!0;const l=Math.min(i,o),u=Math.max(i,o);return e.value<l||e.value>u}async validatorIsGreaterThan(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value>i}async validatorIsGreaterThanOrEqual(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value>=i}async validatorIsLessThan(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value<i}async validatorIsLessThanOrEqual(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value<=i}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:i}=se(this._lexerTreeBuilder,e,t);return`${this.localeService.t(Fe[e.operator]).replace(q,a!=null?a:"").replace(k,i!=null?i:"")}`}}function ce(s){if(!s)return[];const r=new Set;return s.forEach(e=>{e.forEach(t=>{var i,o;const a=b(t);if(a!=null){if(typeof a!="string"&&typeof(t==null?void 0:t.s)=="object"&&((o=(i=t.s)==null?void 0:i.n)!=null&&o.pattern)){r.add(n.numfmt.format(t.s.n.pattern,a,{throws:!1}));return}N(a.toString())&&r.add(a.toString())}})}),[...r]}const ct=["if","indirect","choose","offset"];function ht(s,r){if(!n.isFormulaString(s)||F.isReferenceString(s.slice(1)))return!0;const t=r.sequenceNodesBuilder(s);return t&&t.some(a=>typeof a=="object"&&a.nodeType===F.sequenceNodeType.FUNCTION&&ct.indexOf(a.token.toLowerCase())>-1)}function mt(s,r){const{formula1:e="",ranges:t}=s;if(F.isReferenceString(e.slice(1))){const i=F.deserializeRangeWithSheet(e.slice(1));if((!i.sheetName||i.sheetName===r)&&t.some(o=>n.Rectangle.intersects(o,i.range)))return!0}return!1}class ve extends f.BaseDataValidator{constructor(){super(...arguments);p(this,"formulaService",this.injector.get(exports.DataValidationFormulaService));p(this,"_lexer",this.injector.get(F.LexerTreeBuilder));p(this,"_univerInstanceService",this.injector.get(n.IUniverInstanceService));p(this,"id",n.DataValidationType.LIST);p(this,"title","dataValidation.list.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"skipDefaultFontRender",e=>e.renderMode!==n.DataValidationRenderMode.TEXT)}validatorFormula(e,t,a){var d,c,h;const i=!n.Tools.isBlank(e.formula1),o=ht((d=e.formula1)!=null?d:"",this._lexer),l=(h=(c=this._univerInstanceService.getUnit(t,n.UniverInstanceType.UNIVER_SHEET))==null?void 0:c.getSheetBySheetId(a))==null?void 0:h.getName(),u=mt(e,l!=null?l:"");return{success:!!(i&&o&&!u),formula1:i?o?u?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 o;const i=(o=a.tb!==n.WrapStrategy.OVERFLOW?a.tb:n.WrapStrategy.CLIP)!=null?o:n.WrapStrategy.WRAP;if(e.type===n.DataValidationType.LIST&&(e.renderMode===n.DataValidationRenderMode.ARROW||e.renderMode===n.DataValidationRenderMode.TEXT)){const l=this.getListWithColorMap(e),u=`${t!=null?t:""}`,d=l[u];if(d)return{bg:{rgb:d},tb:i}}return{tb:i}}parseCellValue(e){const t=e.toString();return H(t)}async parseFormula(e,t,a){var d,c,h,m;const{formula1:i=""}=e,o=await this.formulaService.getRuleFormulaResult(t,a,e.uid),l=x((c=(d=o==null?void 0:o[0])==null?void 0:d.result)==null?void 0:c[0][0]),u=N(String(l));return{formula1:n.isFormulaString(i)?ce((m=(h=o==null?void 0:o[0])==null?void 0:h.result)==null?void 0:m[0][0]):H(i),formula2:void 0,isFormulaValid:u}}async isValidType(e,t,a){const{value:i}=e,{formula1:o=[]}=t;return this.parseCellValue(i).every(u=>o.includes(u))}generateRuleName(){return this.localeService.t("dataValidation.list.name")}generateRuleErrorMessage(){return this.localeService.t("dataValidation.list.error")}getList(e,t,a){var m,g,_,S;const{formula1:i=""}=e,o=this.injector.get(n.IUniverInstanceService),l=(m=t?o.getUniverSheetInstance(t):void 0)!=null?m:o.getCurrentUnitForType(n.UniverInstanceType.UNIVER_SHEET);if(!l)return[];const u=(g=a?l.getSheetBySheetId(a):void 0)!=null?g:l.getActiveSheet();if(!u)return[];const d=l.getUnitId(),c=u.getSheetId(),h=this.formulaService.getRuleFormulaResultSync(d,c,e.uid);return n.isFormulaString(i)?ce((S=(_=h==null?void 0:h[0])==null?void 0:_.result)==null?void 0:S[0][0]):H(i)}async getListAsync(e,t,a){var m,g,_,S;const{formula1:i=""}=e,o=this.injector.get(n.IUniverInstanceService),l=(m=t?o.getUniverSheetInstance(t):void 0)!=null?m:o.getCurrentUnitForType(n.UniverInstanceType.UNIVER_SHEET);if(!l)return[];const u=(g=a?l.getSheetBySheetId(a):void 0)!=null?g:l.getActiveSheet();if(!u)return[];const d=l.getUnitId(),c=u.getSheetId(),h=await this.formulaService.getRuleFormulaResult(d,c,e.uid);return n.isFormulaString(i)?ce((S=(_=h==null?void 0:h[0])==null?void 0:_.result)==null?void 0:S[0][0]):H(i)}getListWithColor(e,t,a){const i=this.getList(e,t,a),o=(e.formula2||"").split(",");return i.map((l,u)=>({label:l,color:o[u]}))}getListWithColorMap(e,t,a){const i=this.getListWithColor(e,t,a),o={};return i.forEach(l=>{l.color&&(o[l.label]=l.color)}),o}}class pt extends f.BaseDataValidator{constructor(){super(...arguments);p(this,"id",n.DataValidationType.TEXT_LENGTH);p(this,"title","dataValidation.textLength.title");p(this,"_lexerTreeBuilder",this.injector.get(F.LexerTreeBuilder));p(this,"operators",[n.DataValidationOperator.BETWEEN,n.DataValidationOperator.EQUAL,n.DataValidationOperator.GREATER_THAN,n.DataValidationOperator.GREATER_THAN_OR_EQUAL,n.DataValidationOperator.LESS_THAN,n.DataValidationOperator.LESS_THAN_OR_EQUAL,n.DataValidationOperator.NOT_BETWEEN,n.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"]);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService))}_isFormulaOrInt(e){return!n.Tools.isBlank(e)&&(n.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!1};const o=n.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=n.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),u=ne.includes(i),d=this.localeService.t("dataValidation.validFail.number");return u?{success:o&&l,formula1:o?void 0:d,formula2:l?void 0:d}:{success:o,formula1:d}}_parseNumber(e){return e==null?Number.NaN:+e}_isValidFormula(e){return!Number.isNaN(e)}async parseFormula(e,t,a,i,o){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,o),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,o),{formula1:d,formula2:c}=e,h=N(String(l==null?void 0:l.v))&&N(String(u==null?void 0:u.v));return{formula1:this._parseNumber(n.isFormulaString(d)?l==null?void 0:l.v:d),formula2:this._parseNumber(n.isFormulaString(c)?u==null?void 0:u.v:c),isFormulaValid:h}}transform(e,t,a){return{...e,value:e.value.toString().length}}async isValidType(e,t,a){const{value:i}=e;return typeof i=="string"||typeof i=="number"}async validatorIsEqual(e,t,a){const{formula1:i}=t;return n.Tools.isDefine(i)?e.value===i:!1}async validatorIsNotEqual(e,t,a){const{formula1:i}=t;return n.Tools.isDefine(i)?e.value!==i:!1}async validatorIsBetween(e,t,a){const{formula1:i,formula2:o}=t,{value:l}=e;if(!this._isValidFormula(i)||!this._isValidFormula(o))return!1;const u=Math.max(i,o),d=Math.min(i,o);return l>=d&&l<=u}async validatorIsNotBetween(e,t,a){const{formula1:i,formula2:o}=t,{value:l}=e;if(!this._isValidFormula(i)||!this._isValidFormula(o))return!1;const u=Math.max(i,o),d=Math.min(i,o);return l<d||l>u}async validatorIsGreaterThan(e,t,a){const{formula1:i}=t,{value:o}=e;return this._isValidFormula(i)?o>i:!1}async validatorIsGreaterThanOrEqual(e,t,a){const{formula1:i}=t,{value:o}=e;return this._isValidFormula(i)?o>=i:!1}async validatorIsLessThan(e,t,a){const{formula1:i}=t,{value:o}=e;return this._isValidFormula(i)?o<i:!1}async validatorIsLessThanOrEqual(e,t,a){const{formula1:i}=t,{value:o}=e;return this._isValidFormula(i)?o<=i:!1}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:i}=se(this._lexerTreeBuilder,e,t);return`${this.localeService.t(f.TextLengthErrorTitleMap[e.operator]).replace(q,a!=null?a:"").replace(k,i!=null?i:"")}`}}function Ee(s){var e,t;return s?s.p?!((t=(e=s.p.body)==null?void 0:e.dataStream)!=null?t:"").slice(0,-2).trim():n.Tools.isBlank(s.v):!0}function Q(s,r,e,t,a="command",i=!0){const o=t.get(F.LexerTreeBuilder),l=[],u=[],d=t.get(exports.SheetDataValidationModel),c=t.get(n.IUniverInstanceService),h=M.getSheetCommandTarget(c,{unitId:s,subUnitId:r});if(!h)return{redoMutations:l,undoMutations:u};const{worksheet:m}=h,g=new n.ObjectMatrix;function _(v,y){i&&v.forEach(O=>{n.Range.foreach(O,(D,E)=>{const C=m.getCellRaw(D,E),A=Te(C);(Ee(C)||A===y)&&g.setValue(D,E,{v:y,p:null})})})}e.forEach(v=>{switch(v.type){case"delete":l.push({id:f.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:r,ruleId:v.rule.uid,source:a}}),u.unshift({id:f.AddDataValidationMutation.id,params:{unitId:s,subUnitId:r,rule:v.rule,index:v.index,source:a}});break;case"update":{if(G(v.rule.type)){const O=v.oldRanges[0].startRow,D=v.oldRanges[0].startColumn,E=v.newRanges[0].startRow,C=v.newRanges[0].startColumn,A=E-O,Y=C-D,X=n.isFormulaString(v.rule.formula1)?o.moveFormulaRefOffset(v.rule.formula1,Y,A):v.rule.formula1,K=n.isFormulaString(v.rule.formula2)?o.moveFormulaRefOffset(v.rule.formula2,Y,A):v.rule.formula2;(X!==v.rule.formula1||K!==v.rule.formula2)&&(l.push({id:f.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:r,ruleId:v.ruleId,payload:{type:f.UpdateRuleType.ALL,payload:{formula1:X,formula2:K,ranges:v.newRanges}}}}),u.unshift({id:f.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:r,ruleId:v.ruleId,payload:{type:f.UpdateRuleType.ALL,payload:{formula1:v.rule.formula1,formula2:v.rule.formula2,ranges:v.oldRanges}}}}))}else l.push({id:f.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:r,ruleId:v.ruleId,payload:{type:f.UpdateRuleType.RANGE,payload:v.newRanges},source:a}}),u.unshift({id:f.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:r,ruleId:v.ruleId,payload:{type:f.UpdateRuleType.RANGE,payload:v.oldRanges},source:a}});const y=d.getRuleById(s,r,v.ruleId);if(y&&y.type===n.DataValidationType.CHECKBOX){const D=d.getValidator(n.DataValidationType.CHECKBOX).parseFormulaSync(y,s,r);_(v.newRanges,D.formula2)}break}case"add":{if(l.push({id:f.AddDataValidationMutation.id,params:{unitId:s,subUnitId:r,rule:v.rule,source:a}}),u.unshift({id:f.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:r,ruleId:v.rule.uid,source:a}}),v.rule.type===n.DataValidationType.CHECKBOX){const O=d.getValidator(n.DataValidationType.CHECKBOX).parseFormulaSync(v.rule,s,r);_(v.rule.ranges,O.originFormula2)}break}}});const S={id:M.SetRangeValuesMutation.id,params:{unitId:s,subUnitId:r,cellValue:g.getData()}},R={id:M.SetRangeValuesMutation.id,params:M.SetRangeValuesUndoMutationFactory(t,S.params)};return l.push(S),u.push(R),{redoMutations:l,undoMutations:u}}const Ce={type:n.CommandType.COMMAND,id:"sheet.command.updateDataValidationRuleRange",handler(s,r){if(!r)return!1;const{unitId:e,subUnitId:t,ranges:a,ruleId:i}=r,o=s.get(exports.SheetDataValidationModel),l=s.get(n.ICommandService),u=s.get(n.IUndoRedoService);if(!o.getRuleById(e,t,i))return!1;const c=o.getRuleObjectMatrix(e,t).clone();c.updateRange(i,a);const h=c.diff(o.getRules(e,t)),{redoMutations:m,undoMutations:g}=Q(e,t,h,s);return u.pushUndoRedo({undoMutations:g,redoMutations:m,unitID:e}),n.sequenceExecute(m,l),!0}},Ie={type:n.CommandType.COMMAND,id:"sheet.command.addDataValidation",handler(s,r){if(!r)return!1;const{unitId:e,subUnitId:t,rule:a}=r,i=s.get(exports.SheetDataValidationModel),o=s.get(n.ICommandService),l=s.get(n.IUndoRedoService),u=i.getRuleObjectMatrix(e,t).clone();u.addRule(a);const d=u.diff(i.getRules(e,t)),c=i.getValidator(a.type),h={unitId:e,subUnitId:t,rule:{...a,...c==null?void 0:c.normalizeFormula(a,e,t)}},{redoMutations:m,undoMutations:g}=Q(e,t,d,s);return m.push({id:f.AddDataValidationMutation.id,params:h}),g.unshift({id:f.RemoveDataValidationMutation.id,params:{unitId:e,subUnitId:t,ruleId:a.uid}}),l.pushUndoRedo({unitID:e,redoMutations:m,undoMutations:g}),n.sequenceExecute(m,o),!0}},we={type:n.CommandType.COMMAND,id:"sheets.command.update-data-validation-setting",handler(s,r){if(!r)return!1;const e=s.get(n.ICommandService),t=s.get(n.IUndoRedoService),a=s.get(exports.SheetDataValidationModel),i=s.get(f.DataValidatorRegistryService),{unitId:o,subUnitId:l,ruleId:u,setting:d}=r,c=i.getValidatorItem(d.type);if(!c)return!1;const h=a.getRuleById(o,l,u);if(!h)return!1;const m={...h,...d};if(!c.validatorFormula(m,o,l).success)return!1;const g={unitId:o,subUnitId:l,ruleId:u,payload:{type:f.UpdateRuleType.SETTING,payload:{...d,...c.normalizeFormula(m,o,l)}}},_=[{id:f.UpdateDataValidationMutation.id,params:g}],S={unitId:o,subUnitId:l,ruleId:u,payload:{type:f.UpdateRuleType.SETTING,payload:f.getRuleSetting(h)}},R=[{id:f.UpdateDataValidationMutation.id,params:S}];if(d.type===n.DataValidationType.CHECKBOX){const y=h.ranges,O=s.get(n.IUniverInstanceService),D=M.getSheetCommandTarget(O,{unitId:o,subUnitId:l});if(D){const E=new n.ObjectMatrix,{worksheet:C}=D,{formula2:A=W,formula1:Y=$}=h,{formula2:X=W,formula1:K=$}=d;y.forEach($e=>{n.Range.foreach($e,(le,ue)=>{const Ve=C.getCellRaw(le,ue),Re=Te(Ve);Ee(Ve)||Re===String(A)?E.setValue(le,ue,{v:X,p:null}):Re===String(Y)&&E.setValue(le,ue,{v:K,p:null})})});const Se={id:M.SetRangeValuesMutation.id,params:{unitId:o,subUnitId:l,cellValue:E.getData()}},He={id:M.SetRangeValuesMutation.id,params:M.SetRangeValuesUndoMutationFactory(s,Se.params)};_.push(Se),R.push(He)}}return n.sequenceExecute(_,e).result?(t.pushUndoRedo({unitID:o,redoMutations:_,undoMutations:R}),!0):!1}},be={type:n.CommandType.COMMAND,id:"sheets.command.update-data-validation-options",handler(s,r){if(!r)return!1;const e=s.get(n.ICommandService),t=s.get(n.IUndoRedoService),a=s.get(exports.SheetDataValidationModel),{unitId:i,subUnitId:o,ruleId:l,options:u}=r,d=a.getRuleById(i,o,l);if(!d)return!1;const c={unitId:i,subUnitId:o,ruleId:l,payload:{type:f.UpdateRuleType.OPTIONS,payload:u}},h=[{id:f.UpdateDataValidationMutation.id,params:c}],m={unitId:i,subUnitId:o,ruleId:l,payload:{type:f.UpdateRuleType.OPTIONS,payload:f.getRuleOptions(d)}},g=[{id:f.UpdateDataValidationMutation.id,params:m}];return t.pushUndoRedo({unitID:i,redoMutations:h,undoMutations:g}),e.executeCommand(f.UpdateDataValidationMutation.id,c),!0}},Ae={type:n.CommandType.COMMAND,id:"sheets.command.clear-range-data-validation",handler(s,r){if(!r)return!1;const{unitId:e,subUnitId:t,ranges:a}=r,i=s.get(n.ICommandService),o=s.get(n.IUniverInstanceService),l=M.getSheetCommandTarget(o,{unitId:e,subUnitId:t}),u=s.get(exports.SheetDataValidationModel);if(!l)return!1;const d=s.get(n.IUndoRedoService),c=u.getRuleObjectMatrix(e,t).clone();c.removeRange(a);const h=c.diff(u.getRules(e,t)),{redoMutations:m,undoMutations:g}=Q(e,t,h,s);return d.pushUndoRedo({unitID:e,redoMutations:m,undoMutations:g}),n.sequenceExecute(m,i).result}},Ue={type:n.CommandType.COMMAND,id:"sheet.command.remove-all-data-validation",handler(s,r){if(!r)return!1;const{unitId:e,subUnitId:t}=r,a=s.get(n.ICommandService),i=s.get(exports.SheetDataValidationModel),o=s.get(n.IUndoRedoService),l=[...i.getRules(e,t)],u={unitId:e,subUnitId:t,ruleId:l.map(h=>h.uid)},d=[{id:f.RemoveDataValidationMutation.id,params:u}],c=[{id:f.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:l}}];return o.pushUndoRedo({redoMutations:d,undoMutations:c,unitID:e}),a.executeCommand(f.RemoveDataValidationMutation.id,u),!0}},ft=(s,r)=>{const e=s.get(exports.SheetDataValidationModel),{unitId:t,subUnitId:a,ruleId:i,source:o}=r;if(Array.isArray(i)){const u=i.map(d=>e.getRuleById(t,a,d)).filter(Boolean);return[{id:f.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:u,source:o}}]}return[{id:f.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:{...e.getRuleById(t,a,i)},index:e.getRuleIndex(t,a,i)}}]},Le={type:n.CommandType.COMMAND,id:"sheet.command.remove-data-validation-rule",handler(s,r){if(!r)return!1;const{unitId:e,subUnitId:t,ruleId:a}=r,i=s.get(n.ICommandService),o=s.get(n.IUndoRedoService),l=s.get(exports.SheetDataValidationModel),u=[{id:f.RemoveDataValidationMutation.id,params:r}],d=[{id:f.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:{...l.getRuleById(e,t,a)},index:l.getRuleIndex(e,t,a)}}];return o.pushUndoRedo({undoMutations:d,redoMutations:u,unitID:r.unitId}),i.executeCommand(f.RemoveDataValidationMutation.id,r),!0}},gt="sheets-data-validation.config",_t={};class vt extends f.BaseDataValidator{constructor(){super(...arguments);p(this,"id",n.DataValidationType.ANY);p(this,"title","dataValidation.any.title");p(this,"operators",[]);p(this,"scopes",["sheet"])}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 St extends f.BaseDataValidator{constructor(){super(...arguments);p(this,"id",n.DataValidationType.CUSTOM);p(this,"title","dataValidation.custom.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService))}validatorFormula(e,t,a){const i=n.isFormulaString(e.formula1);return{success:i,formula1:i?"":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:i,row:o,unitId:l,subUnitId:u}=e,d=await this._customFormulaService.getCellFormulaValue(l,u,a.uid,o,i),c=d==null?void 0:d.v;return N(String(c))&&n.Tools.isDefine(c)&&c!==""?d.t===n.CellValueType.BOOLEAN?!!c:typeof c=="boolean"?c:typeof c=="number"?!!c:typeof c=="string"?N(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 xe extends ve{constructor(){super(...arguments);p(this,"id",n.DataValidationType.LIST_MULTIPLE);p(this,"title","dataValidation.listMultiple.title");p(this,"skipDefaultFontRender",()=>!0)}}class Vt extends f.BaseDataValidator{constructor(){super(...arguments);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(F.LexerTreeBuilder));p(this,"id",n.DataValidationType.WHOLE);p(this,"title","dataValidation.whole.title");p(this,"operators",[n.DataValidationOperator.BETWEEN,n.DataValidationOperator.EQUAL,n.DataValidationOperator.GREATER_THAN,n.DataValidationOperator.GREATER_THAN_OR_EQUAL,n.DataValidationOperator.LESS_THAN,n.DataValidationOperator.LESS_THAN_OR_EQUAL,n.DataValidationOperator.NOT_BETWEEN,n.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"])}_isFormulaOrInt(e){return!n.Tools.isBlank(e)&&(n.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}async isValidType(e,t,a){const{value:i}=e,o=ee(i);return!Number.isNaN(o)&&Number.isInteger(o)}transform(e,t,a){const{value:i}=e;return{...e,value:ee(i)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,i,o){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,o),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,o),{formula1:d,formula2:c}=e,h=n.isFormulaString(d)?l==null?void 0:l.v:d,m=n.isFormulaString(c)?u==null?void 0:u.v:c,g=N(`${h}`)&&N(`${m}`);return{formula1:this._parseNumber(h),formula2:this._parseNumber(m),isFormulaValid:g}}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!1};const o=n.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=n.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),u=ne.includes(i),d=this.localeService.t("dataValidation.validFail.number");return u?{success:o&&l,formula1:o?void 0:d,formula2:l?void 0:d}:{success:o,formula1:d}}async validatorIsEqual(e,t,a){const{formula1:i}=t,{value:o}=e;return Number.isNaN(i)?!0:o===i}async validatorIsNotEqual(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value!==i}async validatorIsBetween(e,t,a){const{formula1:i,formula2:o}=t;if(Number.isNaN(i)||Number.isNaN(o))return!0;const l=Math.min(i,o),u=Math.max(i,o);return e.value>=l&&e.value<=u}async validatorIsNotBetween(e,t,a){const{formula1:i,formula2:o}=t;if(Number.isNaN(i)||Number.isNaN(o))return!0;const l=Math.min(i,o),u=Math.max(i,o);return e.value<l||e.value>u}async validatorIsGreaterThan(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value>i}async validatorIsGreaterThanOrEqual(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value>=i}async validatorIsLessThan(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value<i}async validatorIsLessThanOrEqual(e,t,a){const{formula1:i}=t;return Number.isNaN(i)?!0:e.value<=i}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:i}=se(this._lexerTreeBuilder,e,t);return`${this.localeService.t(Fe[e.operator]).replace(q,a!=null?a:"").replace(k,i!=null?i:"")}`}}var Rt=Object.defineProperty,Dt=Object.getOwnPropertyDescriptor,Mt=(s,r,e,t)=>{for(var a=t>1?void 0:t?Dt(r,e):r,i=s.length-1,o;i>=0;i--)(o=s[i])&&(a=(t?o(r,e,a):o(a))||a);return t&&a&&Rt(r,e,a),a},U=(s,r)=>(e,t)=>r(e,t,s);let te=class extends n.RxDisposable{constructor(s,r,e,t,a,i){super(),this._univerInstanceService=s,this._dataValidatorRegistryService=r,this._injector=e,this._selectionManagerService=t,this._sheetInterceptorService=a,this._sheetDataValidationModel=i,this._init()}_init(){this._registerValidators(),this._initCommandInterceptor()}_registerValidators(){[vt,dt,Vt,pt,Oe,Ne,ve,xe,St].forEach(s=>{const r=this._injector.createInstance(s);this.disposeWithMe(this._dataValidatorRegistryService.register(r)),this.disposeWithMe(n.toDisposable(()=>this._injector.delete(s)))})}_initCommandInterceptor(){this._sheetInterceptorService.interceptCommand({getMutations:s=>{var r;if(s.id===M.ClearSelectionAllCommand.id){const e=this._univerInstanceService.getCurrentUnitForType(n.UniverInstanceType.UNIVER_SHEET),t=e.getUnitId(),a=e.getActiveSheet();if(!a)throw new Error("No active sheet found");const i=a.getSheetId(),o=(r=this._selectionManagerService.getCurrentSelections())==null?void 0:r.map(h=>h.range),l=this._sheetDataValidationModel.getRuleObjectMatrix(t,i).clone();o&&l.removeRange(o);const u=l.diff(this._sheetDataValidationModel.getRules(t,i)),{redoMutations:d,undoMutations:c}=Q(t,i,u,this._injector,"patched");return{undos:c,redos:d}}return{undos:[],redos:[]}}})}};te=Mt([U(0,n.IUniverInstanceService),U(1,n.Inject(f.DataValidatorRegistryService)),U(2,n.Inject(n.Injector)),U(3,n.Inject(M.SheetsSelectionsService)),U(4,n.Inject(M.SheetInterceptorService)),U(5,n.Inject(exports.SheetDataValidationModel))],te);var Be=(s=>(s[s.View=0]="View",s[s.Edit=1]="Edit",s[s.ManageCollaborator=2]="ManageCollaborator",s[s.Print=3]="Print",s[s.Duplicate=4]="Duplicate",s[s.Comment=5]="Comment",s[s.Copy=6]="Copy",s[s.Share=7]="Share",s[s.Export=8]="Export",s[s.MoveWorksheet=9]="MoveWorksheet",s[s.DeleteWorksheet=10]="DeleteWorksheet",s[s.HideWorksheet=11]="HideWorksheet",s[s.RenameWorksheet=12]="RenameWorksheet",s[s.CreateWorksheet=13]="CreateWorksheet",s[s.SetWorksheetStyle=14]="SetWorksheetStyle",s[s.EditWorksheetCell=15]="EditWorksheetCell",s[s.InsertHyperlink=16]="InsertHyperlink",s[s.Sort=17]="Sort",s[s.Filter=18]="Filter",s[s.PivotTable=19]="PivotTable",s[s.FloatImg=20]="FloatImg",s[s.History=21]="History",s[s.RwHgtClWdt=22]="RwHgtClWdt",s[s.ViemRwHgtClWdt=23]="ViemRwHgtClWdt",s[s.ViewFilter=24]="ViewFilter",s[s.MoveSheet=25]="MoveSheet",s[s.DeleteSheet=26]="DeleteSheet",s[s.HideSheet=27]="HideSheet",s[s.CopySheet=28]="CopySheet",s[s.RenameSheet=29]="RenameSheet",s[s.CreateSheet=30]="CreateSheet",s[s.SelectProtectedCells=31]="SelectProtectedCells",s[s.SelectUnProtectedCells=32]="SelectUnProtectedCells",s[s.SetCellStyle=33]="SetCellStyle",s[s.SetCellValue=34]="SetCellValue",s[s.SetRowStyle=35]="SetRowStyle",s[s.SetColumnStyle=36]="SetColumnStyle",s[s.InsertRow=37]="InsertRow",s[s.InsertColumn=38]="InsertColumn",s[s.DeleteRow=39]="DeleteRow",s[s.DeleteColumn=40]="DeleteColumn",s[s.EditExtraObject=41]="EditExtraObject",s[s.Delete=42]="Delete",s[s.RecoverHistory=43]="RecoverHistory",s[s.ViewHistory=44]="ViewHistory",s[s.CreatePermissionObject=45]="CreatePermissionObject",s[s.UNRECOGNIZED=-1]="UNRECOGNIZED",s))(Be||{}),yt=Object.defineProperty,Tt=Object.getOwnPropertyDescriptor,Nt=(s,r,e,t)=>{for(var a=t>1?void 0:t?Tt(r,e):r,i=s.length-1,o;i>=0;i--)(o=s[i])&&(a=(t?o(r,e,a):o(a))||a);return t&&a&&yt(r,e,a),a},he=(s,r)=>(e,t)=>r(e,t,s);exports.DataValidationFormulaController=class extends n.Disposable{constructor(r,e,t){super(),this._univerInstanceService=r,this._permissionService=e,this._lexerTreeBuilder=t}getFormulaRefCheck(r){var t,a;const e=this._lexerTreeBuilder.sequenceNodesBuilder(r);if(!e)return!0;for(let i=0;i<e.length;i++){const o=e[i];if(typeof o=="string")continue;const{token:l}=o,u=F.deserializeRangeWithSheetWithCache(l),d=this._univerInstanceService.getCurrentUnitForType(n.UniverInstanceType.UNIVER_SHEET);let c=d.getActiveSheet();const h=d.getUnitId();if(u.sheetName){if(c=d.getSheetBySheetName(u.sheetName),!c)return!1;const R=c==null?void 0:c.getSheetId();if(!this._permissionService.getPermissionPoint(new M.WorksheetViewPermission(h,R).id))return!1}if(!c)return!1;const{startRow:m,endRow:g,startColumn:_,endColumn:S}=u.range;for(let R=m;R<=g;R++)for(let v=_;v<=S;v++){const y=(a=(t=c.getCell(R,v))==null?void 0:t.selectionProtection)==null?void 0:a[0];if((y==null?void 0:y[Be.View])===!1)return!1}}return!0}};exports.DataValidationFormulaController=Nt([he(0,n.IUniverInstanceService),he(1,n.IPermissionService),he(2,n.Inject(F.LexerTreeBuilder))],exports.DataValidationFormulaController);var Ot=Object.defineProperty,Ft=Object.getOwnPropertyDescriptor,Et=(s,r,e,t)=>{for(var a=t>1?void 0:t?Ft(r,e):r,i=s.length-1,o;i>=0;i--)(o=s[i])&&(a=(t?o(r,e,a):o(a))||a);return t&&a&&Ot(r,e,a),a},Me=(s,r)=>(e,t)=>r(e,t,s);let ae=class extends n.Disposable{constructor(r,e){super();p(this,"_disposableMap",new Map);p(this,"registerRule",(r,e,t)=>{G(t.type)&&this.register(r,e,t)});this._dataValidationModel=r,this._formulaRefRangeService=e,this._initRefRange()}_getIdWithUnitId(r,e,t){return`${r}_${e}_${t}`}register(r,e,t){const a=t.ranges,i=t.formula1,o=t.formula2,l=this._formulaRefRangeService.registerRangeFormula(r,e,a,[i!=null?i:"",o!=null?o:""],d=>{if(d.length===0)return{undos:[{id:f.AddDataValidationMutation.id,params:{unitId:r,subUnitId:e,rule:t}}],redos:[{id:f.RemoveDataValidationMutation.id,params:{unitId:r,subUnitId:e,ruleId:t.uid}}]};const c=[],h=[],m=d[0];c.push({id:f.UpdateDataValidationMutation.id,params:{unitId:r,subUnitId:e,ruleId:t.uid,payload:{type:f.UpdateRuleType.ALL,payload:{ranges:m.ranges,formula1:m.formulas[0],formula2:m.formulas[1]}}}}),h.push({id:f.UpdateDataValidationMutation.id,params:{unitId:r,subUnitId:e,ruleId:t.uid,payload:{type:f.UpdateRuleType.ALL,payload:{ranges:a,formula1:i,formula2:o}}}});for(let g=1;g<d.length;g++){const _=d[g],S=n.generateRandomId();c.push({id:f.AddDataValidationMutation.id,params:{unitId:r,subUnitId:e,rule:{...t,uid:S,formula1:_.formulas[0],formula2:_.formulas[1],ranges:_.ranges}}}),h.push({id:f.RemoveDataValidationMutation.id,params:{unitId:r,subUnitId:e,ruleId:S}})}return{undos:h,redos:c}}),u=this._getIdWithUnitId(r,e,t.uid);this._disposableMap.set(u,l)}_initRefRange(){const r=this._dataValidationModel.getAll();for(const[e,t]of r)for(const[a,i]of t)for(const o of i)this.registerRule(e,a,o);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:i}=e;switch(e.type){case"add":{const o=e.rule;this.registerRule(e.unitId,e.subUnitId,o);break}case"remove":{const o=this._disposableMap.get(this._getIdWithUnitId(t,a,i.uid));o&&o.dispose();break}case"update":{const o=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,o.uid));l&&l.dispose(),this.registerRule(e.unitId,e.subUnitId,o);break}}})),this.disposeWithMe(n.toDisposable(()=>{this._disposableMap.forEach(e=>{e.dispose()}),this._disposableMap.clear()}))}};ae=Et([Me(0,n.Inject(exports.SheetDataValidationModel)),Me(1,n.Inject(oe.FormulaRefRangeService))],ae);var Ct=Object.defineProperty,It=Object.getOwnPropertyDescriptor,wt=(s,r,e,t)=>{for(var a=t>1?void 0:t?It(r,e):r,i=s.length-1,o;i>=0;i--)(o=s[i])&&(a=(t?o(r,e,a):o(a))||a);return t&&a&&Ct(r,e,a),a},L=(s,r)=>(e,t)=>r(e,t,s);let re=class extends n.Disposable{constructor(r,e,t,a,i,o){super();p(this,"_disposableMap",new Map);p(this,"registerRule",(r,e,t)=>{G(t.type)||(this.register(r,e,t),this.registerFormula(r,e,t))});this._dataValidationModel=r,this._injector=e,this._refRangeService=t,this._dataValidationCustomFormulaService=a,this._dataValidationFormulaService=i,this._formulaRefRangeService=o,this._initRefRange()}_getIdWithUnitId(r,e,t){return`${r}_${e}_${t}`}registerFormula(r,e,t){var d;const a=t.uid,i=this._getIdWithUnitId(r,e,a),o=(d=this._disposableMap.get(i))!=null?d:new Set,l=(c,h)=>{const m=this._dataValidationModel.getRuleById(r,e,a);if(!m)return{redos:[],undos:[]};const g=m[c];if(!g||g===h)return{redos:[],undos:[]};const _={unitId:r,subUnitId:e,ruleId:t.uid,payload:{type:f.UpdateRuleType.SETTING,payload:{type:m.type,formula1:m.formula1,formula2:m.formula2,[c]:h}}},S={unitId:r,subUnitId:e,ruleId:t.uid,payload:{type:f.UpdateRuleType.SETTING,payload:{type:m.type,formula1:m.formula1,formula2:m.formula2}}},R=[{id:f.UpdateDataValidationMutation.id,params:_}],v=[{id:f.UpdateDataValidationMutation.id,params:S}];return{redos:R,undos:v}},u=this._dataValidationFormulaService.getRuleFormulaInfo(r,e,a);if(u){const[c,h]=u;if(c){const m=this._formulaRefRangeService.registerFormula(r,e,c.text,g=>l("formula1",g));o.add(()=>m.dispose())}if(h){const m=this._formulaRefRangeService.registerFormula(r,e,h.text,g=>l("formula2",g));o.add(()=>m.dispose())}}}register(r,e,t){var u;const a=d=>{const c=[...t.ranges],m=c.map(_=>M.handleCommonDefaultRangeChangeWithEffectRefCommands(_,d)).filter(_=>!!_).flat();if(n.isRangesEqual(m,c))return{redos:[],undos:[]};if(m.length){const _={unitId:r,subUnitId:e,ruleId:t.uid,payload:{type:f.UpdateRuleType.RANGE,payload:m},source:"patched"},S=[{id:f.UpdateDataValidationMutation.id,params:_}],R=[{id:f.UpdateDataValidationMutation.id,params:{unitId:r,subUnitId:e,ruleId:t.uid,payload:{type:f.UpdateRuleType.RANGE,payload:c},source:"patched"}}];return{redos:S,undos:R}}else{const _={unitId:r,subUnitId:e,ruleId:t.uid},S=[{id:f.RemoveDataValidationMutation.id,params:_}],R=ft(this._injector,_);return{redos:S,undos:R}}},i=[];t.ranges.forEach(d=>{const c=this._refRangeService.registerRefRange(d,a,r,e);i.push(()=>c.dispose())});const o=this._getIdWithUnitId(r,e,t.uid),l=(u=this._disposableMap.get(o))!=null?u:new Set;l.add(()=>i.forEach(d=>d())),this._disposableMap.set(o,l)}_initRefRange(){const r=this._dataValidationModel.getAll();for(const[e,t]of r)for(const[a,i]of t)for(const o of i)this.registerRule(e,a,o);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:i}=e;switch(e.type){case"add":{const o=e.rule;this.registerRule(e.unitId,e.subUnitId,o);break}case"remove":{const o=this._disposableMap.get(this._getIdWithUnitId(t,a,i.uid));o&&o.forEach(l=>l());break}case"update":{const o=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,o.uid));l&&l.forEach(u=>u()),this.registerRule(e.unitId,e.subUnitId,o);break}}})),this.disposeWithMe(n.toDisposable(()=>{this._disposableMap.forEach(e=>{e.forEach(t=>t())}),this._disposableMap.clear()}))}};re=wt([L(0,n.Inject(exports.SheetDataValidationModel)),L(1,n.Inject(n.Injector)),L(2,n.Inject(M.RefRangeService)),L(3,n.Inject(exports.DataValidationCustomFormulaService)),L(4,n.Inject(exports.DataValidationFormulaService)),L(5,n.Inject(oe.FormulaRefRangeService))],re);var bt=Object.defineProperty,At=Object.getOwnPropertyDescriptor,Ut=(s,r,e,t)=>{for(var a=t>1?void 0:t?At(r,e):r,i=s.length-1,o;i>=0;i--)(o=s[i])&&(a=(t?o(r,e,a):o(a))||a);return t&&a&&bt(r,e,a),a},me=(s,r)=>(e,t)=>r(e,t,s);let ie=class extends n.Disposable{constructor(s,r,e){super(),this._sheetInterceptorService=s,this._univerInstanceService=r,this._sheetDataValidationModel=e,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:s=>{var r;if(s.id===M.RemoveSheetCommand.id){const e=s.params,t=e.unitId||this._univerInstanceService.getCurrentUnitForType(n.UniverInstanceType.UNIVER_SHEET).getUnitId(),a=this._univerInstanceService.getUniverSheetInstance(t);if(!a)return{redos:[],undos:[]};const i=e.subUnitId||((r=a.getActiveSheet())==null?void 0:r.getSheetId());if(!i)return{redos:[],undos:[]};const o=this._sheetDataValidationModel.getRules(t,i);if(o.length===0)return{redos:[],undos:[]};const l=o.map(c=>c.uid),u={unitId:t,subUnitId:i,ruleId:l,source:"patched"},d={unitId:t,subUnitId:i,rule:[...o],source:"patched"};return{redos:[{id:f.RemoveDataValidationMutation.id,params:u}],undos:[{id:f.AddDataValidationMutation.id,params:d}]}}return{redos:[],undos:[]}}}))}};ie=Ut([me(0,n.Inject(M.SheetInterceptorService)),me(1,n.Inject(n.IUniverInstanceService)),me(2,n.Inject(exports.SheetDataValidationModel))],ie);var Lt=Object.defineProperty,xt=Object.getOwnPropertyDescriptor,Bt=(s,r,e,t)=>{for(var a=t>1?void 0:t?xt(r,e):r,i=s.length-1,o;i>=0;i--)(o=s[i])&&(a=(t?o(r,e,a):o(a))||a);return t&&a&&Lt(r,e,a),a},J=(s,r)=>(e,t)=>r(e,t,s);exports.SheetsDataValidationValidatorService=class extends n.Disposable{constructor(r,e,t,a){super(),this._univerInstanceService=r,this._sheetDataValidationModel=e,this._dataValidationCacheService=t,this._lifecycleService=a,this._initRecalculate()}_initRecalculate(){const r=e=>{if(e.length===0)return;const t=this._univerInstanceService.getCurrentUnitForType(n.UniverInstanceType.UNIVER_SHEET),a=t==null?void 0:t.getActiveSheet(),i={};e.flat().forEach(o=>{i[o.unitId]||(i[o.unitId]={}),i[o.unitId][o.subUnitId]||(i[o.unitId][o.subUnitId]=[]);const l=this._univerInstanceService.getUnit(o.unitId,n.UniverInstanceType.UNIVER_SHEET),u=l==null?void 0:l.getSheetBySheetId(o.subUnitId);u&&i[o.unitId][o.subUnitId].push(...o.ranges.map(d=>n.Range.transformRange(d,u)))}),Object.entries(i).forEach(([o,l])=>{Object.entries(l).forEach(([u,d])=>{(t==null?void 0:t.getUnitId())===o&&(a==null?void 0:a.getSheetId())===u?this.validatorRanges(o,u,d):requestIdleCallback(()=>{this.validatorRanges(o,u,d)})})})};this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(B.bufferWhen(()=>this._lifecycleService.lifecycle$.pipe(B.filter(e=>e===n.LifecycleStages.Rendered)))).subscribe(r)),this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(B.filter(()=>this._lifecycleService.stage>=n.LifecycleStages.Rendered),n.bufferDebounceTime(20)).subscribe(r))}async validatorCell(r,e,t,a){const i=this._univerInstanceService.getUnit(r,n.UniverInstanceType.UNIVER_SHEET);if(!i)throw new Error(`cannot find current workbook, unitId: ${r}`);const o=i.getSheetBySheetId(e);if(!o)throw new Error(`cannot find current worksheet, sheetId: ${e}`);if(!n.Tools.isDefine(t)||!n.Tools.isDefine(a))throw new Error(`row or col is not defined, row: ${t}, col: ${a}`);const l=this._sheetDataValidationModel.getRuleByLocation(r,e,t,a);return l?new Promise(u=>{this._sheetDataValidationModel.validator(l,{unitId:r,subUnitId:e,row:t,col:a,worksheet:o,workbook:i},d=>{u(d)})}):n.DataValidationStatus.VALID}validatorRanges(r,e,t){return Promise.all(t.map(a=>{const i=[];return n.Range.foreach(a,(o,l)=>{i.push(this.validatorCell(r,e,o,l))}),i}))}async validatorWorksheet(r,e){const t=this._sheetDataValidationModel.getRules(r,e);return await Promise.all(t.map(a=>Promise.all(a.ranges.map(i=>{const o=[];return n.Range.foreach(i,(l,u)=>{o.push(this.validatorCell(r,e,l,u))}),o})))),this._dataValidationCacheService.ensureCache(r,e)}async validatorWorkbook(r){const e=this._sheetDataValidationModel.getSubUnitIds(r),t=await Promise.all(e.map(i=>this.validatorWorksheet(r,i))),a={};return t.forEach((i,o)=>{a[e[o]]=i}),a}getDataValidations(r,e,t){const a=this._sheetDataValidationModel.getRuleObjectMatrix(r,e),i=new Set;return t.forEach(l=>{n.Range.foreach(l,(u,d)=>{const c=a.getValue(u,d);c&&i.add(c)})}),Array.from(i).map(l=>this._sheetDataValidationModel.getRuleById(r,e,l)).filter(Boolean)}getDataValidation(r,e,t){return this.getDataValidations(r,e,t)[0]}};exports.SheetsDataValidationValidatorService=Bt([J(0,n.IUniverInstanceService),J(1,n.Inject(exports.SheetDataValidationModel)),J(2,n.Inject(exports.DataValidationCacheService)),J(3,n.Inject(n.LifecycleService))],exports.SheetsDataValidationValidatorService);var Pe=Object.defineProperty,Pt=Object.getOwnPropertyDescriptor,jt=(s,r,e)=>r in s?Pe(s,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[r]=e,Ht=(s,r,e,t)=>{for(var a=t>1?void 0:t?Pt(r,e):r,i=s.length-1,o;i>=0;i--)(o=s[i])&&(a=(t?o(r,e,a):o(a))||a);return t&&a&&Pe(r,e,a),a},pe=(s,r)=>(e,t)=>r(e,t,s),je=(s,r,e)=>jt(s,typeof r!="symbol"?r+"":r,e);exports.UniverSheetsDataValidationPlugin=class extends n.Plugin{constructor(r=_t,e,t,a){super(),this._config=r,this._injector=e,this._commandService=t,this._configService=a;const{...i}=this._config;this._configService.setConfig(gt,i)}onStarting(){[[exports.DataValidationCacheService],[exports.DataValidationFormulaService],[exports.DataValidationCustomFormulaService],[exports.SheetsDataValidationValidatorService],[exports.SheetDataValidationModel],[te],[exports.DataValidationFormulaController],[ie],[re],[ae]].forEach(r=>{this._injector.add(r)}),[Ie,Ce,we,be,Le,Ue,Ae].forEach(r=>{this._commandService.registerCommand(r)}),this._injector.get(exports.DataValidationCacheService),this._injector.get(exports.SheetsDataValidationValidatorService),this._injector.get(ae),this._injector.get(re)}onReady(){this._injector.get(ie)}onRendered(){this._injector.get(te),this._injector.get(exports.DataValidationFormulaController)}};je(exports.UniverSheetsDataValidationPlugin,"pluginName",ye);je(exports.UniverSheetsDataValidationPlugin,"type",n.UniverInstanceType.UNIVER_SHEET);exports.UniverSheetsDataValidationPlugin=Ht([n.DependentOn(f.UniverDataValidationPlugin),pe(1,n.Inject(n.Injector)),pe(2,n.ICommandService),pe(3,n.IConfigService)],exports.UniverSheetsDataValidationPlugin);function $t(s){const e=s.get(M.SheetsSelectionsService).getCurrentSelections().map(i=>i.range);return{uid:n.Tools.generateRandomId(6),type:n.DataValidationType.DECIMAL,operator:n.DataValidationOperator.EQUAL,formula1:"100",ranges:e!=null?e:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}exports.AddSheetDataValidationCommand=Ie;exports.CHECKBOX_FORMULA_1=$;exports.CHECKBOX_FORMULA_2=W;exports.CheckboxValidator=Ne;exports.ClearRangeDataValidationCommand=Ae;exports.DATA_VALIDATION_PLUGIN_NAME=ye;exports.DateValidator=Oe;exports.ListMultipleValidator=xe;exports.ListValidator=ve;exports.RemoveSheetAllDataValidationCommand=Ue;exports.RemoveSheetDataValidationCommand=Le;exports.UpdateSheetDataValidationOptionsCommand=be;exports.UpdateSheetDataValidationRangeCommand=Ce;exports.UpdateSheetDataValidationSettingCommand=we;exports.createDefaultNewRule=$t;exports.deserializeListOptions=H;exports.getCellValueOrigin=b;exports.getDataValidationCellValue=ut;exports.getDataValidationDiffMutations=Q;exports.getFormulaCellData=P;exports.getFormulaResult=x;exports.isLegalFormulaResult=N;exports.serializeListOptions=lt;exports.transformCheckboxValue=j;