@univerjs/data-validation 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var w=Object.defineProperty;var P=(i,a,e)=>a in i?w(i,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[a]=e;var p=(i,a,e)=>P(i,typeof a!="symbol"?a+"":a,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),D=require("rxjs");function N(i){return{type:i.type,operator:i.operator,formula1:i.formula1,formula2:i.formula2,allowBlank:i.allowBlank}}function M(i){return{error:i.error,errorStyle:i.errorStyle,errorTitle:i.errorTitle,imeMode:i.imeMode,prompt:i.prompt,promptTitle:i.promptTitle,showDropDown:i.showDropDown,showErrorMessage:i.showErrorMessage,showInputMessage:i.showInputMessage,renderMode:i.renderMode,bizInfo:i.bizInfo}}var m=(i=>(i[i.SETTING=0]="SETTING",i[i.RANGE=1]="RANGE",i[i.OPTIONS=2]="OPTIONS",i[i.ALL=3]="ALL",i))(m||{}),B=Object.defineProperty,x=Object.getOwnPropertyDescriptor,$=(i,a,e,r)=>{for(var t=r>1?void 0:r?x(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&B(a,e,t),t},j=(i,a)=>(e,r)=>a(e,r,i);exports.DataValidationModel=class extends o.Disposable{constructor(e){super();p(this,"_model",new Map);p(this,"_ruleChange$",new D.Subject);p(this,"ruleChange$",this._ruleChange$.asObservable());p(this,"ruleChangeDebounce$",this.ruleChange$.pipe(D.debounceTime(20)));this._logService=e,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,r){this._model.has(e)||this._model.set(e,new Map);const t=this._model.get(e);if(t.has(r))return t.get(r);const n={map:new Map,list:[]};return t.set(r,n),n}_addSubUnitRule(e,r,t){const{map:n,list:d}=e,u=(Array.isArray(r)?r:[r]).filter(l=>!n.has(l.uid));typeof t=="number"&&t<d.length?d.splice(t,0,...u):d.push(...u),u.forEach(l=>{n.set(l.uid,l)})}_removeSubUnitRule(e,r){const{map:t,list:n}=e,d=n.findIndex(s=>s.uid===r);d>-1&&(n.splice(d,1),t.delete(r))}_updateSubUnitRule(e,r,t){const{map:n,list:d}=e,s=n.get(r),u=d.findIndex(c=>r===c.uid);if(!s)throw new Error(`Data validation rule is not found, ruleId: ${r}.`);const l={...s};switch(t.type){case m.RANGE:{l.ranges=t.payload;break}case m.SETTING:{Object.assign(l,N(t.payload));break}case m.OPTIONS:{Object.assign(l,M(t.payload));break}case m.ALL:{Object.assign(l,t.payload);break}}return d[u]=l,n.set(r,l),l}_addRuleSideEffect(e,r,t,n){if(!this._ensureMap(e,r).map.get(t.uid))return{rule:t,type:"add",unitId:e,subUnitId:r,source:n}}addRule(e,r,t,n,d){try{const s=this._ensureMap(e,r),l=(Array.isArray(t)?t:[t]).map(c=>this._addRuleSideEffect(e,r,c,n));this._addSubUnitRule(s,t,d),l.forEach(c=>{c&&this._ruleChange$.next(c)})}catch(s){this._logService.error(s)}}updateRule(e,r,t,n,d){try{const s=this._ensureMap(e,r),u=o.Tools.deepClone(s.map.get(t));if(!u)throw new Error(`Data validation rule is not found, ruleId: ${t}.`);const l=this._updateSubUnitRule(s,t,n);this._ruleChange$.next({rule:l,type:"update",unitId:e,subUnitId:r,source:d,updatePayload:n,oldRule:u})}catch(s){this._logService.error(s)}}removeRule(e,r,t,n){try{const d=this._ensureMap(e,r),s=d.map.get(t);s&&(this._removeSubUnitRule(d,t),this._ruleChange$.next({rule:s,type:"remove",unitId:e,subUnitId:r,source:n}))}catch(d){this._logService.error(d)}}getRuleById(e,r,t){return this._ensureMap(e,r).map.get(t)}getRuleIndex(e,r,t){return this._ensureMap(e,r).list.findIndex(d=>d.uid===t)}getRules(e,r){return[...this._ensureMap(e,r).list]}getUnitRules(e){const r=this._model.get(e);if(!r)return[];const t=[];return r.forEach((n,d)=>{t.push([d,n.list])}),t}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var r,t;return Array.from((t=(r=this._model.get(e))==null?void 0:r.keys())!=null?t:[])}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};exports.DataValidationModel=$([j(0,o.ILogService)],exports.DataValidationModel);var q=Object.defineProperty,G=Object.getOwnPropertyDescriptor,H=(i,a,e,r)=>{for(var t=r>1?void 0:r?G(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&q(a,e,t),t},T=(i,a)=>(e,r)=>a(e,r,i);const Q="SHEET_DATA_VALIDATION_PLUGIN";exports.DataValidationResourceController=class extends o.Disposable{constructor(a,e,r){super(),this._resourceManagerService=a,this._univerInstanceService=e,this._dataValidationModel=r,this._initSnapshot()}_initSnapshot(){const a=r=>{const t=this._dataValidationModel.getUnitRules(r),n={};return t?(t.forEach(([d,s])=>{n[d]=s}),JSON.stringify(n)):""},e=r=>{if(!r)return{};try{return JSON.parse(r)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:Q,businesses:[o.UniverInstanceType.UNIVER_SHEET],toJson:r=>a(r),parseJson:r=>e(r),onUnLoad:r=>{this._dataValidationModel.deleteUnitRules(r)},onLoad:(r,t)=>{Object.keys(t).forEach(n=>{t[n].forEach(s=>{this._dataValidationModel.addRule(r,n,s,"patched")})})}}))}};exports.DataValidationResourceController=H([T(0,o.IResourceManagerService),T(1,o.IUniverInstanceService),T(2,o.Inject(exports.DataValidationModel))],exports.DataValidationResourceController);var U=(i=>(i.SHEET="sheet",i))(U||{});class R{constructor(){p(this,"_validatorByScopes",new Map);p(this,"_validatorMap",new Map);p(this,"_validatorsChange$",new D.BehaviorSubject(void 0));p(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(a,e){this._validatorByScopes.has(e)||this._validatorByScopes.set(e,[]);const r=this._validatorByScopes.get(e);if(r.findIndex(t=>t.id===a.id)>-1)throw new Error(`Validator item with the same id ${a.id} has already been added!`);r.push(a)}_removeValidatorFromScope(a,e){const r=this._validatorByScopes.get(e);if(!r)return;const t=r.findIndex(n=>n.id===a.id);t>-1&&r.splice(t,1)}register(a){return this._validatorMap.set(a.id,a),Array.isArray(a.scopes)?a.scopes.forEach(e=>{this._addValidatorToScope(a,e)}):this._addValidatorToScope(a,a.scopes),this._validatorsChange$.next(),o.toDisposable(()=>{this._validatorMap.delete(a.id),Array.isArray(a.scopes)?a.scopes.forEach(e=>{this._removeValidatorFromScope(a,e)}):this._removeValidatorFromScope(a,a.scopes),this._validatorsChange$.next()})}getValidatorItem(a){return this._validatorMap.get(a)}getValidatorsByScope(a){return this._validatorByScopes.get(a)}}const v={type:o.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:r,rule:t,index:n,source:d="command"}=a;return i.get(exports.DataValidationModel).addRule(e,r,t,d,n),!0}},V={type:o.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:r,ruleId:t,source:n="command"}=a,d=i.get(exports.DataValidationModel);return Array.isArray(t)?t.forEach(s=>{d.removeRule(e,r,s,n)}):d.removeRule(e,r,t,n),!0}},_={type:o.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:r,ruleId:t,payload:n,source:d="command"}=a;return i.get(exports.DataValidationModel).updateRule(e,r,t,n,d),!0}},F={type:o.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{rule:r,unitId:t,subUnitId:n}=a,d=i.get(o.ICommandService),s=i.get(o.IUndoRedoService),u={...a,rule:{...a.rule,ranges:[a.rule.range]}},l=[{id:v.id,params:u}],c=[{id:V.id,params:{unitId:t,subUnitId:n,ruleId:r.uid}}];return s.pushUndoRedo({unitID:t,redoMutations:l,undoMutations:c}),await d.executeCommand(v.id,u),!0}},W={type:o.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:r,subUnitId:t,ruleId:n}=a,d=i.get(o.ICommandService),s=i.get(o.IUndoRedoService),u=i.get(exports.DataValidationModel),l=[{id:V.id,params:a}],c=[{id:v.id,params:{unitId:r,subUnitId:t,rule:{...u.getRuleById(r,t,n)},index:u.getRuleIndex(r,t,n)}}];return s.pushUndoRedo({undoMutations:c,redoMutations:l,unitID:a.unitId}),d.executeCommand(V.id,a),!0}},J={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(i,a){if(i.get(o.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const r=i.get(o.ICommandService),t=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),{unitId:d,subUnitId:s,ruleId:u,options:l}=a,c=n.getRuleById(d,s,u);if(!c)return!1;const h={unitId:d,subUnitId:s,ruleId:u,payload:{type:m.OPTIONS,payload:l}},g=[{id:_.id,params:h}],E={unitId:d,subUnitId:s,ruleId:u,payload:{type:m.OPTIONS,payload:M(c)}},O=[{id:_.id,params:E}];return t.pushUndoRedo({unitID:d,redoMutations:g,undoMutations:O}),r.executeCommand(_.id,h),!0}},z={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const r=i.get(o.ICommandService),t=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),d=i.get(R),{unitId:s,subUnitId:u,ruleId:l,setting:c}=a,h=d.getValidatorItem(c.type);if(!h)return!1;const g=n.getRuleById(s,u,l);if(!g)return!1;const E={...g,...c};if(!h.validatorFormula(E,s,u).success)return!1;const O={unitId:s,subUnitId:u,ruleId:l,payload:{type:m.SETTING,payload:{...c,...h.normalizeFormula(E,s,u)}}},L=[{id:_.id,params:O}],C={unitId:s,subUnitId:u,ruleId:l,payload:{type:m.SETTING,payload:N(g)}},b=[{id:_.id,params:C}];return t.pushUndoRedo({unitID:s,redoMutations:L,undoMutations:b}),r.executeCommand(_.id,O),!0}},K={type:o.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:r,subUnitId:t}=a,n=i.get(o.ICommandService),d=i.get(exports.DataValidationModel),s=i.get(o.IUndoRedoService),u=[...d.getRules(r,t)],l={unitId:r,subUnitId:t,ruleId:u.map(g=>g.uid)},c=[{id:V.id,params:l}],h=[{id:v.id,params:{unitId:r,subUnitId:t,rule:u}}];return s.pushUndoRedo({redoMutations:c,undoMutations:h,unitID:r}),n.executeCommand(V.id,l),!0}},Y="data-validation.config",X={};var Z=Object.defineProperty,k=Object.getOwnPropertyDescriptor,aa=(i,a,e,r)=>{for(var t=r>1?void 0:r?k(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&Z(a,e,t),t},S=(i,a)=>(e,r)=>a(e,r,i);const ta="UNIVER_DATA_VALIDATION_PLUGIN";var f;exports.UniverDataValidationPlugin=(f=class extends o.Plugin{constructor(a=X,e,r,t){super(),this._config=a,this._injector=e,this._commandService=r,this._configService=t;const{...n}=this._config;this._configService.setConfig(Y,n)}onStarting(){[[exports.DataValidationModel],[R],[exports.DataValidationResourceController]].forEach(a=>this._injector.add(a)),[F,K,J,z,W,v,_,V].forEach(a=>{this._commandService.registerCommand(a)})}onReady(){this._injector.get(exports.DataValidationResourceController)}},p(f,"pluginName",ta),p(f,"type",o.UniverInstanceType.UNIVER_SHEET),f);exports.UniverDataValidationPlugin=aa([S(1,o.Inject(o.Injector)),S(2,o.ICommandService),S(3,o.IConfigService)],exports.UniverDataValidationPlugin);o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const ea={[o.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[o.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},ra={[o.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},oa={[o.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"},ia=[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.NOT_BETWEEN];var na=Object.defineProperty,da=Object.getOwnPropertyDescriptor,sa=(i,a,e,r)=>{for(var t=r>1?void 0:r?da(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&na(a,e,t),t},A=(i,a)=>(e,r)=>a(e,r,i);const I="{FORMULA1}",y="{FORMULA2}",la={[o.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[o.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};exports.BaseDataValidator=class{constructor(a,e){p(this,"offsetFormulaByRange",!0);p(this,"formulaInput");p(this,"canvasRender",null);p(this,"dropdown");p(this,"optionsInput");p(this,"skipDefaultFontRender");this.localeService=a,this.injector=e}get operatorNames(){return this.operators.map(a=>this.localeService.t(la[a]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(a){var r,t;if(!a.operator)return this.titleStr;const e=this.localeService.t(ea[a.operator]).replace(I,(r=a.formula1)!=null?r:"").replace(y,(t=a.formula2)!=null?t:"");return`${this.titleStr} ${e}`}generateRuleErrorMessage(a,e){var t,n;return a.operator?`${this.localeService.t(ra[a.operator]).replace(I,(t=a.formula1)!=null?t:"").replace(y,(n=a.formula2)!=null?n:"")}`:this.titleStr}getExtraStyle(a,e,r,t,n){}getRuleFinalError(a,e){return a.showErrorMessage&&a.error?a.error:this.generateRuleErrorMessage(a,e)}isEmptyCellValue(a){return a===""||a===void 0||a===null}normalizeFormula(a,e,r){return{formula1:a.formula1,formula2:a.formula2}}async isValidType(a,e,r){return!0}transform(a,e,r){return a}async validatorIsEqual(a,e,r){const{formula1:t}=e,{value:n}=a;return Number.isNaN(t)?!0:n===t}async validatorIsNotEqual(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value!==t}async validatorIsBetween(a,e,r){const{formula1:t,formula2:n}=e;if(Number.isNaN(t)||Number.isNaN(n))return!0;const d=Math.min(t,n),s=Math.max(t,n);return a.value>=d&&a.value<=s}async validatorIsNotBetween(a,e,r){const{formula1:t,formula2:n}=e;if(Number.isNaN(t)||Number.isNaN(n))return!0;const d=Math.min(t,n),s=Math.max(t,n);return a.value<d||a.value>s}async validatorIsGreaterThan(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value>t}async validatorIsGreaterThanOrEqual(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value>=t}async validatorIsLessThan(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value<t}async validatorIsLessThanOrEqual(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value<=t}async validator(a,e){const{value:r,unitId:t,subUnitId:n}=a,d=this.isEmptyCellValue(r),{allowBlank:s=!0,operator:u}=e;if(d)return s;const l=await this.parseFormula(e,t,n,a.row,a.column);if(!l.isFormulaValid||!await this.isValidType(a,l,e))return!1;if(!o.Tools.isDefine(u))return!0;const c=this.transform(a,l,e);switch(u){case o.DataValidationOperator.BETWEEN:return this.validatorIsBetween(c,l,e);case o.DataValidationOperator.EQUAL:return this.validatorIsEqual(c,l,e);case o.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(c,l,e);case o.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(c,l,e);case o.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(c,l,e);case o.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(c,l,e);case o.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(c,l,e);case o.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(c,l,e);default:throw new Error("Unknown operator.")}}};exports.BaseDataValidator=sa([A(0,o.Inject(o.LocaleService)),A(1,o.Inject(o.Injector))],exports.BaseDataValidator);exports.AddDataValidationMutation=v;exports.DataValidatorRegistryScope=U;exports.DataValidatorRegistryService=R;exports.RemoveDataValidationMutation=V;exports.TWO_FORMULA_OPERATOR_COUNT=ia;exports.TextLengthErrorTitleMap=oa;exports.UpdateDataValidationMutation=_;exports.UpdateRuleType=m;exports.getRuleOptions=M;exports.getRuleSetting=N;
1
+ "use strict";var P=Object.defineProperty;var B=(i,a,e)=>a in i?P(i,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[a]=e;var p=(i,a,e)=>B(i,typeof a!="symbol"?a+"":a,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),D=require("rxjs");function N(i){return{type:i.type,operator:i.operator,formula1:i.formula1,formula2:i.formula2,allowBlank:i.allowBlank}}function M(i){return{error:i.error,errorStyle:i.errorStyle,errorTitle:i.errorTitle,imeMode:i.imeMode,prompt:i.prompt,promptTitle:i.promptTitle,showDropDown:i.showDropDown,showErrorMessage:i.showErrorMessage,showInputMessage:i.showInputMessage,renderMode:i.renderMode,bizInfo:i.bizInfo}}var m=(i=>(i[i.SETTING=0]="SETTING",i[i.RANGE=1]="RANGE",i[i.OPTIONS=2]="OPTIONS",i[i.ALL=3]="ALL",i))(m||{}),x=Object.defineProperty,$=Object.getOwnPropertyDescriptor,j=(i,a,e,r)=>{for(var t=r>1?void 0:r?$(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&x(a,e,t),t},q=(i,a)=>(e,r)=>a(e,r,i);exports.DataValidationModel=class extends o.Disposable{constructor(e){super();p(this,"_model",new Map);p(this,"_ruleChange$",new D.Subject);p(this,"ruleChange$",this._ruleChange$.asObservable());p(this,"ruleChangeDebounce$",this.ruleChange$.pipe(D.debounceTime(20)));this._logService=e,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,r){this._model.has(e)||this._model.set(e,new Map);const t=this._model.get(e);if(t.has(r))return t.get(r);const n={map:new Map,list:[]};return t.set(r,n),n}_addSubUnitRule(e,r,t){const{map:n,list:d}=e,u=(Array.isArray(r)?r:[r]).filter(l=>!n.has(l.uid));typeof t=="number"&&t<d.length?d.splice(t,0,...u):d.push(...u),u.forEach(l=>{n.set(l.uid,l)})}_removeSubUnitRule(e,r){const{map:t,list:n}=e,d=n.findIndex(s=>s.uid===r);d>-1&&(n.splice(d,1),t.delete(r))}_updateSubUnitRule(e,r,t){const{map:n,list:d}=e,s=n.get(r),u=d.findIndex(c=>r===c.uid);if(!s)throw new Error(`Data validation rule is not found, ruleId: ${r}.`);const l={...s};switch(t.type){case m.RANGE:{l.ranges=t.payload;break}case m.SETTING:{Object.assign(l,N(t.payload));break}case m.OPTIONS:{Object.assign(l,M(t.payload));break}case m.ALL:{Object.assign(l,t.payload);break}}return d[u]=l,n.set(r,l),l}_addRuleSideEffect(e,r,t,n){if(!this._ensureMap(e,r).map.get(t.uid))return{rule:t,type:"add",unitId:e,subUnitId:r,source:n}}addRule(e,r,t,n,d){try{const s=this._ensureMap(e,r),l=(Array.isArray(t)?t:[t]).map(c=>this._addRuleSideEffect(e,r,c,n));this._addSubUnitRule(s,t,d),l.forEach(c=>{c&&this._ruleChange$.next(c)})}catch(s){this._logService.error(s)}}updateRule(e,r,t,n,d){try{const s=this._ensureMap(e,r),u=o.Tools.deepClone(s.map.get(t));if(!u)throw new Error(`Data validation rule is not found, ruleId: ${t}.`);const l=this._updateSubUnitRule(s,t,n);this._ruleChange$.next({rule:l,type:"update",unitId:e,subUnitId:r,source:d,updatePayload:n,oldRule:u})}catch(s){this._logService.error(s)}}removeRule(e,r,t,n){try{const d=this._ensureMap(e,r),s=d.map.get(t);s&&(this._removeSubUnitRule(d,t),this._ruleChange$.next({rule:s,type:"remove",unitId:e,subUnitId:r,source:n}))}catch(d){this._logService.error(d)}}getRuleById(e,r,t){return this._ensureMap(e,r).map.get(t)}getRuleIndex(e,r,t){return this._ensureMap(e,r).list.findIndex(d=>d.uid===t)}getRules(e,r){return[...this._ensureMap(e,r).list]}getUnitRules(e){const r=this._model.get(e);if(!r)return[];const t=[];return r.forEach((n,d)=>{t.push([d,n.list])}),t}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var r,t;return Array.from((t=(r=this._model.get(e))==null?void 0:r.keys())!=null?t:[])}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};exports.DataValidationModel=j([q(0,o.ILogService)],exports.DataValidationModel);var G=Object.defineProperty,H=Object.getOwnPropertyDescriptor,Q=(i,a,e,r)=>{for(var t=r>1?void 0:r?H(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&G(a,e,t),t},T=(i,a)=>(e,r)=>a(e,r,i);const F="SHEET_DATA_VALIDATION_PLUGIN";exports.DataValidationResourceController=class extends o.Disposable{constructor(a,e,r){super(),this._resourceManagerService=a,this._univerInstanceService=e,this._dataValidationModel=r,this._initSnapshot()}_initSnapshot(){const a=r=>{const t=this._dataValidationModel.getUnitRules(r),n={};return t?(t.forEach(([d,s])=>{n[d]=s}),JSON.stringify(n)):""},e=r=>{if(!r)return{};try{return JSON.parse(r)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:F,businesses:[o.UniverInstanceType.UNIVER_SHEET],toJson:r=>a(r),parseJson:r=>e(r),onUnLoad:r=>{this._dataValidationModel.deleteUnitRules(r)},onLoad:(r,t)=>{Object.keys(t).forEach(n=>{t[n].forEach(s=>{this._dataValidationModel.addRule(r,n,s,"patched")})})}}))}};exports.DataValidationResourceController=Q([T(0,o.IResourceManagerService),T(1,o.IUniverInstanceService),T(2,o.Inject(exports.DataValidationModel))],exports.DataValidationResourceController);var L=(i=>(i.SHEET="sheet",i))(L||{});class R{constructor(){p(this,"_validatorByScopes",new Map);p(this,"_validatorMap",new Map);p(this,"_validatorsChange$",new D.BehaviorSubject(void 0));p(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(a,e){this._validatorByScopes.has(e)||this._validatorByScopes.set(e,[]);const r=this._validatorByScopes.get(e);if(r.findIndex(t=>t.id===a.id)>-1)throw new Error(`Validator item with the same id ${a.id} has already been added!`);r.push(a)}_removeValidatorFromScope(a,e){const r=this._validatorByScopes.get(e);if(!r)return;const t=r.findIndex(n=>n.id===a.id);t>-1&&r.splice(t,1)}register(a){return this._validatorMap.set(a.id,a),Array.isArray(a.scopes)?a.scopes.forEach(e=>{this._addValidatorToScope(a,e)}):this._addValidatorToScope(a,a.scopes),this._validatorsChange$.next(),o.toDisposable(()=>{this._validatorMap.delete(a.id),Array.isArray(a.scopes)?a.scopes.forEach(e=>{this._removeValidatorFromScope(a,e)}):this._removeValidatorFromScope(a,a.scopes),this._validatorsChange$.next()})}getValidatorItem(a){return this._validatorMap.get(a)}getValidatorsByScope(a){return this._validatorByScopes.get(a)}}const v={type:o.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:r,rule:t,index:n,source:d="command"}=a;return i.get(exports.DataValidationModel).addRule(e,r,t,d,n),!0}},V={type:o.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:r,ruleId:t,source:n="command"}=a,d=i.get(exports.DataValidationModel);return Array.isArray(t)?t.forEach(s=>{d.removeRule(e,r,s,n)}):d.removeRule(e,r,t,n),!0}},_={type:o.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:r,ruleId:t,payload:n,source:d="command"}=a;return i.get(exports.DataValidationModel).updateRule(e,r,t,n,d),!0}},W={type:o.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{rule:r,unitId:t,subUnitId:n}=a,d=i.get(o.ICommandService),s=i.get(o.IUndoRedoService),u={...a,rule:{...a.rule,ranges:[a.rule.range]}},l=[{id:v.id,params:u}],c=[{id:V.id,params:{unitId:t,subUnitId:n,ruleId:r.uid}}];return s.pushUndoRedo({unitID:t,redoMutations:l,undoMutations:c}),await d.executeCommand(v.id,u),!0}},J={type:o.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:r,subUnitId:t,ruleId:n}=a,d=i.get(o.ICommandService),s=i.get(o.IUndoRedoService),u=i.get(exports.DataValidationModel),l=[{id:V.id,params:a}],c=[{id:v.id,params:{unitId:r,subUnitId:t,rule:{...u.getRuleById(r,t,n)},index:u.getRuleIndex(r,t,n)}}];return s.pushUndoRedo({undoMutations:c,redoMutations:l,unitID:a.unitId}),d.executeCommand(V.id,a),!0}},z={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(i,a){if(i.get(o.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const r=i.get(o.ICommandService),t=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),{unitId:d,subUnitId:s,ruleId:u,options:l}=a,c=n.getRuleById(d,s,u);if(!c)return!1;const h={unitId:d,subUnitId:s,ruleId:u,payload:{type:m.OPTIONS,payload:l}},g=[{id:_.id,params:h}],E={unitId:d,subUnitId:s,ruleId:u,payload:{type:m.OPTIONS,payload:M(c)}},O=[{id:_.id,params:E}];return t.pushUndoRedo({unitID:d,redoMutations:g,undoMutations:O}),r.executeCommand(_.id,h),!0}},K={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const r=i.get(o.ICommandService),t=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),d=i.get(R),{unitId:s,subUnitId:u,ruleId:l,setting:c}=a,h=d.getValidatorItem(c.type);if(!h)return!1;const g=n.getRuleById(s,u,l);if(!g)return!1;const E={...g,...c};if(!h.validatorFormula(E,s,u).success)return!1;const O={unitId:s,subUnitId:u,ruleId:l,payload:{type:m.SETTING,payload:{...c,...h.normalizeFormula(E,s,u)}}},C=[{id:_.id,params:O}],b={unitId:s,subUnitId:u,ruleId:l,payload:{type:m.SETTING,payload:N(g)}},w=[{id:_.id,params:b}];return t.pushUndoRedo({unitID:s,redoMutations:C,undoMutations:w}),r.executeCommand(_.id,O),!0}},Y={type:o.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:r,subUnitId:t}=a,n=i.get(o.ICommandService),d=i.get(exports.DataValidationModel),s=i.get(o.IUndoRedoService),u=[...d.getRules(r,t)],l={unitId:r,subUnitId:t,ruleId:u.map(g=>g.uid)},c=[{id:V.id,params:l}],h=[{id:v.id,params:{unitId:r,subUnitId:t,rule:u}}];return s.pushUndoRedo({redoMutations:c,undoMutations:h,unitID:r}),n.executeCommand(V.id,l),!0}},X="data-validation.config",A={};var Z=Object.defineProperty,k=Object.getOwnPropertyDescriptor,aa=(i,a,e,r)=>{for(var t=r>1?void 0:r?k(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&Z(a,e,t),t},S=(i,a)=>(e,r)=>a(e,r,i);const ta="UNIVER_DATA_VALIDATION_PLUGIN";var f;exports.UniverDataValidationPlugin=(f=class extends o.Plugin{constructor(a=A,e,r,t){super(),this._config=a,this._injector=e,this._commandService=r,this._configService=t;const{...n}=o.merge({},A,this._config);this._configService.setConfig(X,n)}onStarting(){[[exports.DataValidationModel],[R],[exports.DataValidationResourceController]].forEach(a=>this._injector.add(a)),[W,Y,z,K,J,v,_,V].forEach(a=>{this._commandService.registerCommand(a)})}onReady(){this._injector.get(exports.DataValidationResourceController)}},p(f,"pluginName",ta),p(f,"type",o.UniverInstanceType.UNIVER_SHEET),f);exports.UniverDataValidationPlugin=aa([S(1,o.Inject(o.Injector)),S(2,o.ICommandService),S(3,o.IConfigService)],exports.UniverDataValidationPlugin);o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const ea={[o.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[o.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},ra={[o.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},oa={[o.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"},ia=[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.NOT_BETWEEN];var na=Object.defineProperty,da=Object.getOwnPropertyDescriptor,sa=(i,a,e,r)=>{for(var t=r>1?void 0:r?da(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&na(a,e,t),t},I=(i,a)=>(e,r)=>a(e,r,i);const y="{FORMULA1}",U="{FORMULA2}",la={[o.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[o.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};exports.BaseDataValidator=class{constructor(a,e){p(this,"offsetFormulaByRange",!0);p(this,"formulaInput");p(this,"canvasRender",null);p(this,"dropdown");p(this,"optionsInput");p(this,"skipDefaultFontRender");this.localeService=a,this.injector=e}get operatorNames(){return this.operators.map(a=>this.localeService.t(la[a]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(a){var r,t;if(!a.operator)return this.titleStr;const e=this.localeService.t(ea[a.operator]).replace(y,(r=a.formula1)!=null?r:"").replace(U,(t=a.formula2)!=null?t:"");return`${this.titleStr} ${e}`}generateRuleErrorMessage(a,e){var t,n;return a.operator?`${this.localeService.t(ra[a.operator]).replace(y,(t=a.formula1)!=null?t:"").replace(U,(n=a.formula2)!=null?n:"")}`:this.titleStr}getExtraStyle(a,e,r,t,n){}getRuleFinalError(a,e){return a.showErrorMessage&&a.error?a.error:this.generateRuleErrorMessage(a,e)}isEmptyCellValue(a){return a===""||a===void 0||a===null}normalizeFormula(a,e,r){return{formula1:a.formula1,formula2:a.formula2}}async isValidType(a,e,r){return!0}transform(a,e,r){return a}async validatorIsEqual(a,e,r){const{formula1:t}=e,{value:n}=a;return Number.isNaN(t)?!0:n===t}async validatorIsNotEqual(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value!==t}async validatorIsBetween(a,e,r){const{formula1:t,formula2:n}=e;if(Number.isNaN(t)||Number.isNaN(n))return!0;const d=Math.min(t,n),s=Math.max(t,n);return a.value>=d&&a.value<=s}async validatorIsNotBetween(a,e,r){const{formula1:t,formula2:n}=e;if(Number.isNaN(t)||Number.isNaN(n))return!0;const d=Math.min(t,n),s=Math.max(t,n);return a.value<d||a.value>s}async validatorIsGreaterThan(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value>t}async validatorIsGreaterThanOrEqual(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value>=t}async validatorIsLessThan(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value<t}async validatorIsLessThanOrEqual(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value<=t}async validator(a,e){const{value:r,unitId:t,subUnitId:n}=a,d=this.isEmptyCellValue(r),{allowBlank:s=!0,operator:u}=e;if(d)return s;const l=await this.parseFormula(e,t,n,a.row,a.column);if(!l.isFormulaValid||!await this.isValidType(a,l,e))return!1;if(!o.Tools.isDefine(u))return!0;const c=this.transform(a,l,e);switch(u){case o.DataValidationOperator.BETWEEN:return this.validatorIsBetween(c,l,e);case o.DataValidationOperator.EQUAL:return this.validatorIsEqual(c,l,e);case o.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(c,l,e);case o.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(c,l,e);case o.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(c,l,e);case o.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(c,l,e);case o.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(c,l,e);case o.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(c,l,e);default:throw new Error("Unknown operator.")}}};exports.BaseDataValidator=sa([I(0,o.Inject(o.LocaleService)),I(1,o.Inject(o.Injector))],exports.BaseDataValidator);exports.AddDataValidationMutation=v;exports.DataValidatorRegistryScope=L;exports.DataValidatorRegistryService=R;exports.RemoveDataValidationMutation=V;exports.TWO_FORMULA_OPERATOR_COUNT=ia;exports.TextLengthErrorTitleMap=oa;exports.UpdateDataValidationMutation=_;exports.UpdateRuleType=m;exports.getRuleOptions=M;exports.getRuleSetting=N;
package/lib/es/index.js CHANGED
@@ -1,9 +1,9 @@
1
- var W = Object.defineProperty;
2
- var J = (t, e, r) => e in t ? W(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
- var c = (t, e, r) => J(t, typeof e != "symbol" ? e + "" : e, r);
4
- import { Disposable as P, Tools as B, ILogService as N, Inject as O, UniverInstanceType as x, IResourceManagerService as z, IUniverInstanceService as K, toDisposable as Y, CommandType as E, ICommandService as T, IUndoRedoService as A, Plugin as X, Injector as $, IConfigService as Z, DataValidationOperator as s, LocaleService as k } from "@univerjs/core";
5
- import { Subject as ee, debounceTime as te, BehaviorSubject as ae } from "rxjs";
6
- function G(t) {
1
+ var J = Object.defineProperty;
2
+ var z = (t, e, r) => e in t ? J(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
+ var c = (t, e, r) => z(t, typeof e != "symbol" ? e + "" : e, r);
4
+ import { Disposable as B, Tools as x, ILogService as N, Inject as O, UniverInstanceType as $, IResourceManagerService as K, IUniverInstanceService as Y, toDisposable as X, CommandType as E, ICommandService as T, IUndoRedoService as A, Plugin as Z, merge as k, Injector as G, IConfigService as ee, DataValidationOperator as s, LocaleService as te } from "@univerjs/core";
5
+ import { Subject as ae, debounceTime as re, BehaviorSubject as oe } from "rxjs";
6
+ function q(t) {
7
7
  return {
8
8
  type: t.type,
9
9
  operator: t.operator,
@@ -12,7 +12,7 @@ function G(t) {
12
12
  allowBlank: t.allowBlank
13
13
  };
14
14
  }
15
- function q(t) {
15
+ function H(t) {
16
16
  return {
17
17
  error: t.error,
18
18
  errorStyle: t.errorStyle,
@@ -27,18 +27,18 @@ function q(t) {
27
27
  bizInfo: t.bizInfo
28
28
  };
29
29
  }
30
- var h = /* @__PURE__ */ ((t) => (t[t.SETTING = 0] = "SETTING", t[t.RANGE = 1] = "RANGE", t[t.OPTIONS = 2] = "OPTIONS", t[t.ALL = 3] = "ALL", t))(h || {}), re = Object.defineProperty, oe = Object.getOwnPropertyDescriptor, ne = (t, e, r, a) => {
31
- for (var o = a > 1 ? void 0 : a ? oe(e, r) : e, n = t.length - 1, i; n >= 0; n--)
30
+ var h = /* @__PURE__ */ ((t) => (t[t.SETTING = 0] = "SETTING", t[t.RANGE = 1] = "RANGE", t[t.OPTIONS = 2] = "OPTIONS", t[t.ALL = 3] = "ALL", t))(h || {}), ne = Object.defineProperty, ie = Object.getOwnPropertyDescriptor, se = (t, e, r, a) => {
31
+ for (var o = a > 1 ? void 0 : a ? ie(e, r) : e, n = t.length - 1, i; n >= 0; n--)
32
32
  (i = t[n]) && (o = (a ? i(e, r, o) : i(o)) || o);
33
- return a && o && re(e, r, o), o;
34
- }, ie = (t, e) => (r, a) => e(r, a, t);
35
- let m = class extends P {
33
+ return a && o && ne(e, r, o), o;
34
+ }, de = (t, e) => (r, a) => e(r, a, t);
35
+ let m = class extends B {
36
36
  constructor(e) {
37
37
  super();
38
38
  c(this, "_model", /* @__PURE__ */ new Map());
39
- c(this, "_ruleChange$", new ee());
39
+ c(this, "_ruleChange$", new ae());
40
40
  c(this, "ruleChange$", this._ruleChange$.asObservable());
41
- c(this, "ruleChangeDebounce$", this.ruleChange$.pipe(te(20)));
41
+ c(this, "ruleChangeDebounce$", this.ruleChange$.pipe(re(20)));
42
42
  this._logService = e, this.disposeWithMe({
43
43
  dispose: () => {
44
44
  this._ruleChange$.complete();
@@ -74,11 +74,11 @@ let m = class extends P {
74
74
  break;
75
75
  }
76
76
  case h.SETTING: {
77
- Object.assign(d, G(a.payload));
77
+ Object.assign(d, q(a.payload));
78
78
  break;
79
79
  }
80
80
  case h.OPTIONS: {
81
- Object.assign(d, q(a.payload));
81
+ Object.assign(d, H(a.payload));
82
82
  break;
83
83
  }
84
84
  case h.ALL: {
@@ -110,7 +110,7 @@ let m = class extends P {
110
110
  }
111
111
  updateRule(e, r, a, o, n) {
112
112
  try {
113
- const i = this._ensureMap(e, r), l = B.deepClone(i.map.get(a));
113
+ const i = this._ensureMap(e, r), l = x.deepClone(i.map.get(a));
114
114
  if (!l)
115
115
  throw new Error(`Data validation rule is not found, ruleId: ${a}.`);
116
116
  const d = this._updateSubUnitRule(i, a, o);
@@ -170,16 +170,16 @@ let m = class extends P {
170
170
  return Array.from(this._model.keys()).map((e) => [e, this.getUnitRules(e)]);
171
171
  }
172
172
  };
173
- m = ne([
174
- ie(0, N)
173
+ m = se([
174
+ de(0, N)
175
175
  ], m);
176
- var se = Object.defineProperty, de = Object.getOwnPropertyDescriptor, le = (t, e, r, a) => {
177
- for (var o = a > 1 ? void 0 : a ? de(e, r) : e, n = t.length - 1, i; n >= 0; n--)
176
+ var le = Object.defineProperty, ue = Object.getOwnPropertyDescriptor, ce = (t, e, r, a) => {
177
+ for (var o = a > 1 ? void 0 : a ? ue(e, r) : e, n = t.length - 1, i; n >= 0; n--)
178
178
  (i = t[n]) && (o = (a ? i(e, r, o) : i(o)) || o);
179
- return a && o && se(e, r, o), o;
179
+ return a && o && le(e, r, o), o;
180
180
  }, y = (t, e) => (r, a) => e(r, a, t);
181
- const ue = "SHEET_DATA_VALIDATION_PLUGIN";
182
- let I = class extends P {
181
+ const pe = "SHEET_DATA_VALIDATION_PLUGIN";
182
+ let I = class extends B {
183
183
  constructor(t, e, r) {
184
184
  super(), this._resourceManagerService = t, this._univerInstanceService = e, this._dataValidationModel = r, this._initSnapshot();
185
185
  }
@@ -200,8 +200,8 @@ let I = class extends P {
200
200
  };
201
201
  this.disposeWithMe(
202
202
  this._resourceManagerService.registerPluginResource({
203
- pluginName: ue,
204
- businesses: [x.UNIVER_SHEET],
203
+ pluginName: pe,
204
+ businesses: [$.UNIVER_SHEET],
205
205
  toJson: (r) => t(r),
206
206
  parseJson: (r) => e(r),
207
207
  onUnLoad: (r) => {
@@ -218,17 +218,17 @@ let I = class extends P {
218
218
  );
219
219
  }
220
220
  };
221
- I = le([
222
- y(0, z),
223
- y(1, K),
221
+ I = ce([
222
+ y(0, K),
223
+ y(1, Y),
224
224
  y(2, O(m))
225
225
  ], I);
226
- var ce = /* @__PURE__ */ ((t) => (t.SHEET = "sheet", t))(ce || {});
227
- class H {
226
+ var me = /* @__PURE__ */ ((t) => (t.SHEET = "sheet", t))(me || {});
227
+ class j {
228
228
  constructor() {
229
229
  c(this, "_validatorByScopes", /* @__PURE__ */ new Map());
230
230
  c(this, "_validatorMap", /* @__PURE__ */ new Map());
231
- c(this, "_validatorsChange$", new ae(void 0));
231
+ c(this, "_validatorsChange$", new oe(void 0));
232
232
  c(this, "validatorsChange$", this._validatorsChange$.asObservable());
233
233
  }
234
234
  _addValidatorToScope(e, r) {
@@ -248,7 +248,7 @@ class H {
248
248
  register(e) {
249
249
  return this._validatorMap.set(e.id, e), Array.isArray(e.scopes) ? e.scopes.forEach((r) => {
250
250
  this._addValidatorToScope(e, r);
251
- }) : this._addValidatorToScope(e, e.scopes), this._validatorsChange$.next(), Y(() => {
251
+ }) : this._addValidatorToScope(e, e.scopes), this._validatorsChange$.next(), X(() => {
252
252
  this._validatorMap.delete(e.id), Array.isArray(e.scopes) ? e.scopes.forEach((r) => {
253
253
  this._removeValidatorFromScope(e, r);
254
254
  }) : this._removeValidatorFromScope(e, e.scopes), this._validatorsChange$.next();
@@ -290,7 +290,7 @@ const S = {
290
290
  const { unitId: r, subUnitId: a, ruleId: o, payload: n, source: i = "command" } = e;
291
291
  return t.get(m).updateRule(r, a, o, n, i), !0;
292
292
  }
293
- }, pe = {
293
+ }, he = {
294
294
  type: E.COMMAND,
295
295
  id: "data-validation.command.addRule",
296
296
  async handler(t, e) {
@@ -319,7 +319,7 @@ const S = {
319
319
  undoMutations: p
320
320
  }), await i.executeCommand(S.id, d), !0;
321
321
  }
322
- }, me = {
322
+ }, _e = {
323
323
  type: E.COMMAND,
324
324
  id: "data-validation.command.removeRule",
325
325
  handler(t, e) {
@@ -345,7 +345,7 @@ const S = {
345
345
  unitID: e.unitId
346
346
  }), i.executeCommand(f.id, e), !0;
347
347
  }
348
- }, he = {
348
+ }, Ee = {
349
349
  type: E.COMMAND,
350
350
  id: "data-validation.command.updateDataValidationSetting",
351
351
  handler(t, e) {
@@ -371,7 +371,7 @@ const S = {
371
371
  ruleId: d,
372
372
  payload: {
373
373
  type: h.OPTIONS,
374
- payload: q(p)
374
+ payload: H(p)
375
375
  }
376
376
  }, R = [{
377
377
  id: v.id,
@@ -383,13 +383,13 @@ const S = {
383
383
  undoMutations: R
384
384
  }), a.executeCommand(v.id, _), !0;
385
385
  }
386
- }, _e = {
386
+ }, ge = {
387
387
  type: E.COMMAND,
388
388
  id: "data-validation.command.updateDataValidationOptions",
389
389
  handler(t, e) {
390
390
  if (t.get(N).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"), !e)
391
391
  return !1;
392
- const a = t.get(T), o = t.get(A), n = t.get(m), i = t.get(H), { unitId: l, subUnitId: d, ruleId: u, setting: p } = e, _ = i.getValidatorItem(p.type);
392
+ const a = t.get(T), o = t.get(A), n = t.get(m), i = t.get(j), { unitId: l, subUnitId: d, ruleId: u, setting: p } = e, _ = i.getValidatorItem(p.type);
393
393
  if (!_)
394
394
  return !1;
395
395
  const g = n.getRuleById(l, d, u);
@@ -409,28 +409,28 @@ const S = {
409
409
  ..._.normalizeFormula(M, l, d)
410
410
  }
411
411
  }
412
- }, j = [{
412
+ }, Q = [{
413
413
  id: v.id,
414
414
  params: R
415
- }], Q = {
415
+ }], F = {
416
416
  unitId: l,
417
417
  subUnitId: d,
418
418
  ruleId: u,
419
419
  payload: {
420
420
  type: h.SETTING,
421
- payload: G(g)
421
+ payload: q(g)
422
422
  }
423
- }, F = [{
423
+ }, W = [{
424
424
  id: v.id,
425
- params: Q
425
+ params: F
426
426
  }];
427
427
  return o.pushUndoRedo({
428
428
  unitID: l,
429
- redoMutations: j,
430
- undoMutations: F
429
+ redoMutations: Q,
430
+ undoMutations: W
431
431
  }), a.executeCommand(v.id, R), !0;
432
432
  }
433
- }, Ee = {
433
+ }, ve = {
434
434
  type: E.COMMAND,
435
435
  id: "data-validation.command.removeAll",
436
436
  handler(t, e) {
@@ -457,32 +457,36 @@ const S = {
457
457
  unitID: a
458
458
  }), n.executeCommand(f.id, u), !0;
459
459
  }
460
- }, ge = "data-validation.config", ve = {};
461
- var fe = Object.defineProperty, Ne = Object.getOwnPropertyDescriptor, Te = (t, e, r, a) => {
462
- for (var o = a > 1 ? void 0 : a ? Ne(e, r) : e, n = t.length - 1, i; n >= 0; n--)
460
+ }, fe = "data-validation.config", U = {};
461
+ var Ne = Object.defineProperty, Te = Object.getOwnPropertyDescriptor, Se = (t, e, r, a) => {
462
+ for (var o = a > 1 ? void 0 : a ? Te(e, r) : e, n = t.length - 1, i; n >= 0; n--)
463
463
  (i = t[n]) && (o = (a ? i(e, r, o) : i(o)) || o);
464
- return a && o && fe(e, r, o), o;
464
+ return a && o && Ne(e, r, o), o;
465
465
  }, L = (t, e) => (r, a) => e(r, a, t);
466
- const Se = "UNIVER_DATA_VALIDATION_PLUGIN";
466
+ const Ae = "UNIVER_DATA_VALIDATION_PLUGIN";
467
467
  var V;
468
- let U = (V = class extends X {
469
- constructor(t = ve, e, r, a) {
468
+ let D = (V = class extends Z {
469
+ constructor(t = U, e, r, a) {
470
470
  super(), this._config = t, this._injector = e, this._commandService = r, this._configService = a;
471
- const { ...o } = this._config;
472
- this._configService.setConfig(ge, o);
471
+ const { ...o } = k(
472
+ {},
473
+ U,
474
+ this._config
475
+ );
476
+ this._configService.setConfig(fe, o);
473
477
  }
474
478
  onStarting() {
475
479
  [
476
480
  [m],
477
- [H],
481
+ [j],
478
482
  [I]
479
483
  ].forEach((t) => this._injector.add(t)), [
480
484
  // command
481
- pe,
482
- Ee,
483
485
  he,
486
+ ve,
487
+ Ee,
488
+ ge,
484
489
  _e,
485
- me,
486
490
  // mutation
487
491
  S,
488
492
  v,
@@ -494,14 +498,14 @@ let U = (V = class extends X {
494
498
  onReady() {
495
499
  this._injector.get(I);
496
500
  }
497
- }, c(V, "pluginName", Se), c(V, "type", x.UNIVER_SHEET), V);
498
- U = Te([
499
- L(1, O($)),
501
+ }, c(V, "pluginName", Ae), c(V, "type", $.UNIVER_SHEET), V);
502
+ D = Se([
503
+ L(1, O(G)),
500
504
  L(2, T),
501
- L(3, Z)
502
- ], U);
505
+ L(3, ee)
506
+ ], D);
503
507
  s.BETWEEN + "", s.EQUAL + "", s.GREATER_THAN + "", s.GREATER_THAN_OR_EQUAL + "", s.LESS_THAN + "", s.LESS_THAN_OR_EQUAL + "", s.NOT_BETWEEN + "", s.NOT_EQUAL + "";
504
- const Ae = {
508
+ const Me = {
505
509
  [s.BETWEEN]: "dataValidation.ruleName.between",
506
510
  [s.EQUAL]: "dataValidation.ruleName.equal",
507
511
  [s.GREATER_THAN]: "dataValidation.ruleName.greaterThan",
@@ -510,7 +514,7 @@ const Ae = {
510
514
  [s.LESS_THAN_OR_EQUAL]: "dataValidation.ruleName.lessThanOrEqual",
511
515
  [s.NOT_BETWEEN]: "dataValidation.ruleName.notBetween",
512
516
  [s.NOT_EQUAL]: "dataValidation.ruleName.notEqual"
513
- }, Me = {
517
+ }, Re = {
514
518
  [s.BETWEEN]: "dataValidation.errorMsg.between",
515
519
  [s.EQUAL]: "dataValidation.errorMsg.equal",
516
520
  [s.GREATER_THAN]: "dataValidation.errorMsg.greaterThan",
@@ -519,7 +523,7 @@ const Ae = {
519
523
  [s.LESS_THAN_OR_EQUAL]: "dataValidation.errorMsg.lessThanOrEqual",
520
524
  [s.NOT_BETWEEN]: "dataValidation.errorMsg.notBetween",
521
525
  [s.NOT_EQUAL]: "dataValidation.errorMsg.notEqual"
522
- }, De = {
526
+ }, we = {
523
527
  [s.BETWEEN]: "dataValidation.textLength.errorMsg.between",
524
528
  [s.EQUAL]: "dataValidation.textLength.errorMsg.equal",
525
529
  [s.GREATER_THAN]: "dataValidation.textLength.errorMsg.greaterThan",
@@ -528,16 +532,16 @@ const Ae = {
528
532
  [s.LESS_THAN_OR_EQUAL]: "dataValidation.textLength.errorMsg.lessThanOrEqual",
529
533
  [s.NOT_BETWEEN]: "dataValidation.textLength.errorMsg.notBetween",
530
534
  [s.NOT_EQUAL]: "dataValidation.textLength.errorMsg.notEqual"
531
- }, we = [
535
+ }, be = [
532
536
  s.BETWEEN,
533
537
  s.NOT_BETWEEN
534
538
  ];
535
- var Re = Object.defineProperty, Ve = Object.getOwnPropertyDescriptor, Oe = (t, e, r, a) => {
536
- for (var o = a > 1 ? void 0 : a ? Ve(e, r) : e, n = t.length - 1, i; n >= 0; n--)
539
+ var Ve = Object.defineProperty, Oe = Object.getOwnPropertyDescriptor, Ie = (t, e, r, a) => {
540
+ for (var o = a > 1 ? void 0 : a ? Oe(e, r) : e, n = t.length - 1, i; n >= 0; n--)
537
541
  (i = t[n]) && (o = (a ? i(e, r, o) : i(o)) || o);
538
- return a && o && Re(e, r, o), o;
539
- }, D = (t, e) => (r, a) => e(r, a, t);
540
- const w = "{FORMULA1}", b = "{FORMULA2}", Ie = {
542
+ return a && o && Ve(e, r, o), o;
543
+ }, w = (t, e) => (r, a) => e(r, a, t);
544
+ const b = "{FORMULA1}", C = "{FORMULA2}", ye = {
541
545
  [s.BETWEEN]: "dataValidation.operators.between",
542
546
  [s.EQUAL]: "dataValidation.operators.equal",
543
547
  [s.GREATER_THAN]: "dataValidation.operators.greaterThan",
@@ -547,7 +551,7 @@ const w = "{FORMULA1}", b = "{FORMULA2}", Ie = {
547
551
  [s.NOT_BETWEEN]: "dataValidation.operators.notBetween",
548
552
  [s.NOT_EQUAL]: "dataValidation.operators.notEqual"
549
553
  };
550
- let C = class {
554
+ let P = class {
551
555
  // #endregion
552
556
  constructor(t, e) {
553
557
  c(this, "offsetFormulaByRange", !0);
@@ -560,7 +564,7 @@ let C = class {
560
564
  this.localeService = t, this.injector = e;
561
565
  }
562
566
  get operatorNames() {
563
- return this.operators.map((t) => this.localeService.t(Ie[t]));
567
+ return this.operators.map((t) => this.localeService.t(ye[t]));
564
568
  }
565
569
  get titleStr() {
566
570
  return this.localeService.t(this.title);
@@ -569,12 +573,12 @@ let C = class {
569
573
  var r, a;
570
574
  if (!t.operator)
571
575
  return this.titleStr;
572
- const e = this.localeService.t(Ae[t.operator]).replace(w, (r = t.formula1) != null ? r : "").replace(b, (a = t.formula2) != null ? a : "");
576
+ const e = this.localeService.t(Me[t.operator]).replace(b, (r = t.formula1) != null ? r : "").replace(C, (a = t.formula2) != null ? a : "");
573
577
  return `${this.titleStr} ${e}`;
574
578
  }
575
579
  generateRuleErrorMessage(t, e) {
576
580
  var a, o;
577
- return t.operator ? `${this.localeService.t(Me[t.operator]).replace(w, (a = t.formula1) != null ? a : "").replace(b, (o = t.formula2) != null ? o : "")}` : this.titleStr;
581
+ return t.operator ? `${this.localeService.t(Re[t.operator]).replace(b, (a = t.formula1) != null ? a : "").replace(C, (o = t.formula2) != null ? o : "")}` : this.titleStr;
578
582
  }
579
583
  getExtraStyle(t, e, r, a, o) {
580
584
  }
@@ -641,7 +645,7 @@ let C = class {
641
645
  const d = await this.parseFormula(e, a, o, t.row, t.column);
642
646
  if (!d.isFormulaValid || !await this.isValidType(t, d, e))
643
647
  return !1;
644
- if (!B.isDefine(l))
648
+ if (!x.isDefine(l))
645
649
  return !0;
646
650
  const u = this.transform(t, d, e);
647
651
  switch (l) {
@@ -666,23 +670,23 @@ let C = class {
666
670
  }
667
671
  }
668
672
  };
669
- C = Oe([
670
- D(0, O(k)),
671
- D(1, O($))
672
- ], C);
673
+ P = Ie([
674
+ w(0, O(te)),
675
+ w(1, O(G))
676
+ ], P);
673
677
  export {
674
678
  S as AddDataValidationMutation,
675
- C as BaseDataValidator,
679
+ P as BaseDataValidator,
676
680
  m as DataValidationModel,
677
681
  I as DataValidationResourceController,
678
- ce as DataValidatorRegistryScope,
679
- H as DataValidatorRegistryService,
682
+ me as DataValidatorRegistryScope,
683
+ j as DataValidatorRegistryService,
680
684
  f as RemoveDataValidationMutation,
681
- we as TWO_FORMULA_OPERATOR_COUNT,
682
- De as TextLengthErrorTitleMap,
683
- U as UniverDataValidationPlugin,
685
+ be as TWO_FORMULA_OPERATOR_COUNT,
686
+ we as TextLengthErrorTitleMap,
687
+ D as UniverDataValidationPlugin,
684
688
  v as UpdateDataValidationMutation,
685
689
  h as UpdateRuleType,
686
- q as getRuleOptions,
687
- G as getRuleSetting
690
+ H as getRuleOptions,
691
+ q as getRuleSetting
688
692
  };
package/lib/umd/index.js CHANGED
@@ -1 +1 @@
1
- (function(l,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@univerjs/core"),require("rxjs")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs"],r):(l=typeof globalThis<"u"?globalThis:l||self,r(l.UniverDataValidation={},l.UniverCore,l.rxjs))})(this,function(l,r,_){"use strict";var la=Object.defineProperty;var ua=(l,r,_)=>r in l?la(l,r,{enumerable:!0,configurable:!0,writable:!0,value:_}):l[r]=_;var m=(l,r,_)=>ua(l,typeof r!="symbol"?r+"":r,_);var O;function D(n){return{type:n.type,operator:n.operator,formula1:n.formula1,formula2:n.formula2,allowBlank:n.allowBlank}}function N(n){return{error:n.error,errorStyle:n.errorStyle,errorTitle:n.errorTitle,imeMode:n.imeMode,prompt:n.prompt,promptTitle:n.promptTitle,showDropDown:n.showDropDown,showErrorMessage:n.showErrorMessage,showInputMessage:n.showInputMessage,renderMode:n.renderMode,bizInfo:n.bizInfo}}var h=(n=>(n[n.SETTING=0]="SETTING",n[n.RANGE=1]="RANGE",n[n.OPTIONS=2]="OPTIONS",n[n.ALL=3]="ALL",n))(h||{}),C=Object.defineProperty,b=Object.getOwnPropertyDescriptor,w=(n,a,i,e)=>{for(var t=e>1?void 0:e?b(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&C(a,i,t),t},P=(n,a)=>(i,e)=>a(i,e,n);l.DataValidationModel=class extends r.Disposable{constructor(i){super();m(this,"_model",new Map);m(this,"_ruleChange$",new _.Subject);m(this,"ruleChange$",this._ruleChange$.asObservable());m(this,"ruleChangeDebounce$",this.ruleChange$.pipe(_.debounceTime(20)));this._logService=i,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(i,e){this._model.has(i)||this._model.set(i,new Map);const t=this._model.get(i);if(t.has(e))return t.get(e);const o={map:new Map,list:[]};return t.set(e,o),o}_addSubUnitRule(i,e,t){const{map:o,list:d}=i,p=(Array.isArray(e)?e:[e]).filter(u=>!o.has(u.uid));typeof t=="number"&&t<d.length?d.splice(t,0,...p):d.push(...p),p.forEach(u=>{o.set(u.uid,u)})}_removeSubUnitRule(i,e){const{map:t,list:o}=i,d=o.findIndex(s=>s.uid===e);d>-1&&(o.splice(d,1),t.delete(e))}_updateSubUnitRule(i,e,t){const{map:o,list:d}=i,s=o.get(e),p=d.findIndex(c=>e===c.uid);if(!s)throw new Error(`Data validation rule is not found, ruleId: ${e}.`);const u={...s};switch(t.type){case h.RANGE:{u.ranges=t.payload;break}case h.SETTING:{Object.assign(u,D(t.payload));break}case h.OPTIONS:{Object.assign(u,N(t.payload));break}case h.ALL:{Object.assign(u,t.payload);break}}return d[p]=u,o.set(e,u),u}_addRuleSideEffect(i,e,t,o){if(!this._ensureMap(i,e).map.get(t.uid))return{rule:t,type:"add",unitId:i,subUnitId:e,source:o}}addRule(i,e,t,o,d){try{const s=this._ensureMap(i,e),u=(Array.isArray(t)?t:[t]).map(c=>this._addRuleSideEffect(i,e,c,o));this._addSubUnitRule(s,t,d),u.forEach(c=>{c&&this._ruleChange$.next(c)})}catch(s){this._logService.error(s)}}updateRule(i,e,t,o,d){try{const s=this._ensureMap(i,e),p=r.Tools.deepClone(s.map.get(t));if(!p)throw new Error(`Data validation rule is not found, ruleId: ${t}.`);const u=this._updateSubUnitRule(s,t,o);this._ruleChange$.next({rule:u,type:"update",unitId:i,subUnitId:e,source:d,updatePayload:o,oldRule:p})}catch(s){this._logService.error(s)}}removeRule(i,e,t,o){try{const d=this._ensureMap(i,e),s=d.map.get(t);s&&(this._removeSubUnitRule(d,t),this._ruleChange$.next({rule:s,type:"remove",unitId:i,subUnitId:e,source:o}))}catch(d){this._logService.error(d)}}getRuleById(i,e,t){return this._ensureMap(i,e).map.get(t)}getRuleIndex(i,e,t){return this._ensureMap(i,e).list.findIndex(d=>d.uid===t)}getRules(i,e){return[...this._ensureMap(i,e).list]}getUnitRules(i){const e=this._model.get(i);if(!e)return[];const t=[];return e.forEach((o,d)=>{t.push([d,o.list])}),t}deleteUnitRules(i){this._model.delete(i)}getSubUnitIds(i){var e,t;return Array.from((t=(e=this._model.get(i))==null?void 0:e.keys())!=null?t:[])}getAll(){return Array.from(this._model.keys()).map(i=>[i,this.getUnitRules(i)])}},l.DataValidationModel=w([P(0,r.ILogService)],l.DataValidationModel);var B=Object.defineProperty,j=Object.getOwnPropertyDescriptor,$=(n,a,i,e)=>{for(var t=e>1?void 0:e?j(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&B(a,i,t),t},M=(n,a)=>(i,e)=>a(i,e,n);const q="SHEET_DATA_VALIDATION_PLUGIN";l.DataValidationResourceController=class extends r.Disposable{constructor(a,i,e){super(),this._resourceManagerService=a,this._univerInstanceService=i,this._dataValidationModel=e,this._initSnapshot()}_initSnapshot(){const a=e=>{const t=this._dataValidationModel.getUnitRules(e),o={};return t?(t.forEach(([d,s])=>{o[d]=s}),JSON.stringify(o)):""},i=e=>{if(!e)return{};try{return JSON.parse(e)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:q,businesses:[r.UniverInstanceType.UNIVER_SHEET],toJson:e=>a(e),parseJson:e=>i(e),onUnLoad:e=>{this._dataValidationModel.deleteUnitRules(e)},onLoad:(e,t)=>{Object.keys(t).forEach(o=>{t[o].forEach(s=>{this._dataValidationModel.addRule(e,o,s,"patched")})})}}))}},l.DataValidationResourceController=$([M(0,r.IResourceManagerService),M(1,r.IUniverInstanceService),M(2,r.Inject(l.DataValidationModel))],l.DataValidationResourceController);var I=(n=>(n.SHEET="sheet",n))(I||{});class R{constructor(){m(this,"_validatorByScopes",new Map);m(this,"_validatorMap",new Map);m(this,"_validatorsChange$",new _.BehaviorSubject(void 0));m(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(a,i){this._validatorByScopes.has(i)||this._validatorByScopes.set(i,[]);const e=this._validatorByScopes.get(i);if(e.findIndex(t=>t.id===a.id)>-1)throw new Error(`Validator item with the same id ${a.id} has already been added!`);e.push(a)}_removeValidatorFromScope(a,i){const e=this._validatorByScopes.get(i);if(!e)return;const t=e.findIndex(o=>o.id===a.id);t>-1&&e.splice(t,1)}register(a){return this._validatorMap.set(a.id,a),Array.isArray(a.scopes)?a.scopes.forEach(i=>{this._addValidatorToScope(a,i)}):this._addValidatorToScope(a,a.scopes),this._validatorsChange$.next(),r.toDisposable(()=>{this._validatorMap.delete(a.id),Array.isArray(a.scopes)?a.scopes.forEach(i=>{this._removeValidatorFromScope(a,i)}):this._removeValidatorFromScope(a,a.scopes),this._validatorsChange$.next()})}getValidatorItem(a){return this._validatorMap.get(a)}getValidatorsByScope(a){return this._validatorByScopes.get(a)}}const f={type:r.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(n,a){if(!a)return!1;const{unitId:i,subUnitId:e,rule:t,index:o,source:d="command"}=a;return n.get(l.DataValidationModel).addRule(i,e,t,d,o),!0}},V={type:r.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(n,a){if(!a)return!1;const{unitId:i,subUnitId:e,ruleId:t,source:o="command"}=a,d=n.get(l.DataValidationModel);return Array.isArray(t)?t.forEach(s=>{d.removeRule(i,e,s,o)}):d.removeRule(i,e,t,o),!0}},g={type:r.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(n,a){if(!a)return!1;const{unitId:i,subUnitId:e,ruleId:t,payload:o,source:d="command"}=a;return n.get(l.DataValidationModel).updateRule(i,e,t,o,d),!0}},G={type:r.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{rule:e,unitId:t,subUnitId:o}=a,d=n.get(r.ICommandService),s=n.get(r.IUndoRedoService),p={...a,rule:{...a.rule,ranges:[a.rule.range]}},u=[{id:f.id,params:p}],c=[{id:V.id,params:{unitId:t,subUnitId:o,ruleId:e.uid}}];return s.pushUndoRedo({unitID:t,redoMutations:u,undoMutations:c}),await d.executeCommand(f.id,p),!0}},H={type:r.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:e,subUnitId:t,ruleId:o}=a,d=n.get(r.ICommandService),s=n.get(r.IUndoRedoService),p=n.get(l.DataValidationModel),u=[{id:V.id,params:a}],c=[{id:f.id,params:{unitId:e,subUnitId:t,rule:{...p.getRuleById(e,t,o)},index:p.getRuleIndex(e,t,o)}}];return s.pushUndoRedo({undoMutations:c,redoMutations:u,unitID:a.unitId}),d.executeCommand(V.id,a),!0}},Q={type:r.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(n,a){if(n.get(r.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const e=n.get(r.ICommandService),t=n.get(r.IUndoRedoService),o=n.get(l.DataValidationModel),{unitId:d,subUnitId:s,ruleId:p,options:u}=a,c=o.getRuleById(d,s,p);if(!c)return!1;const v={unitId:d,subUnitId:s,ruleId:p,payload:{type:h.OPTIONS,payload:u}},E=[{id:g.id,params:v}],T={unitId:d,subUnitId:s,ruleId:p,payload:{type:h.OPTIONS,payload:N(c)}},S=[{id:g.id,params:T}];return t.pushUndoRedo({unitID:d,redoMutations:E,undoMutations:S}),e.executeCommand(g.id,v),!0}},F={type:r.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const e=n.get(r.ICommandService),t=n.get(r.IUndoRedoService),o=n.get(l.DataValidationModel),d=n.get(R),{unitId:s,subUnitId:p,ruleId:u,setting:c}=a,v=d.getValidatorItem(c.type);if(!v)return!1;const E=o.getRuleById(s,p,u);if(!E)return!1;const T={...E,...c};if(!v.validatorFormula(T,s,p).success)return!1;const S={unitId:s,subUnitId:p,ruleId:u,payload:{type:h.SETTING,payload:{...c,...v.normalizeFormula(T,s,p)}}},oa=[{id:g.id,params:S}],da={unitId:s,subUnitId:p,ruleId:u,payload:{type:h.SETTING,payload:D(E)}},sa=[{id:g.id,params:da}];return t.pushUndoRedo({unitID:s,redoMutations:oa,undoMutations:sa}),e.executeCommand(g.id,S),!0}},W={type:r.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:e,subUnitId:t}=a,o=n.get(r.ICommandService),d=n.get(l.DataValidationModel),s=n.get(r.IUndoRedoService),p=[...d.getRules(e,t)],u={unitId:e,subUnitId:t,ruleId:p.map(E=>E.uid)},c=[{id:V.id,params:u}],v=[{id:f.id,params:{unitId:e,subUnitId:t,rule:p}}];return s.pushUndoRedo({redoMutations:c,undoMutations:v,unitID:e}),o.executeCommand(V.id,u),!0}},x="data-validation.config",J={};var z=Object.defineProperty,K=Object.getOwnPropertyDescriptor,Y=(n,a,i,e)=>{for(var t=e>1?void 0:e?K(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&z(a,i,t),t},A=(n,a)=>(i,e)=>a(i,e,n);const X="UNIVER_DATA_VALIDATION_PLUGIN";l.UniverDataValidationPlugin=(O=class extends r.Plugin{constructor(a=J,i,e,t){super(),this._config=a,this._injector=i,this._commandService=e,this._configService=t;const{...o}=this._config;this._configService.setConfig(x,o)}onStarting(){[[l.DataValidationModel],[R],[l.DataValidationResourceController]].forEach(a=>this._injector.add(a)),[G,W,Q,F,H,f,g,V].forEach(a=>{this._commandService.registerCommand(a)})}onReady(){this._injector.get(l.DataValidationResourceController)}},m(O,"pluginName",X),m(O,"type",r.UniverInstanceType.UNIVER_SHEET),O),l.UniverDataValidationPlugin=Y([A(1,r.Inject(r.Injector)),A(2,r.ICommandService),A(3,r.IConfigService)],l.UniverDataValidationPlugin),r.DataValidationOperator.BETWEEN+"",r.DataValidationOperator.EQUAL+"",r.DataValidationOperator.GREATER_THAN+"",r.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",r.DataValidationOperator.LESS_THAN+"",r.DataValidationOperator.LESS_THAN_OR_EQUAL+"",r.DataValidationOperator.NOT_BETWEEN+"",r.DataValidationOperator.NOT_EQUAL+"";const Z={[r.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[r.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},k={[r.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[r.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},aa={[r.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[r.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"},ta=[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.NOT_BETWEEN];var ea=Object.defineProperty,ia=Object.getOwnPropertyDescriptor,ra=(n,a,i,e)=>{for(var t=e>1?void 0:e?ia(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&ea(a,i,t),t},y=(n,a)=>(i,e)=>a(i,e,n);const U="{FORMULA1}",L="{FORMULA2}",na={[r.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[r.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};l.BaseDataValidator=class{constructor(a,i){m(this,"offsetFormulaByRange",!0);m(this,"formulaInput");m(this,"canvasRender",null);m(this,"dropdown");m(this,"optionsInput");m(this,"skipDefaultFontRender");this.localeService=a,this.injector=i}get operatorNames(){return this.operators.map(a=>this.localeService.t(na[a]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(a){var e,t;if(!a.operator)return this.titleStr;const i=this.localeService.t(Z[a.operator]).replace(U,(e=a.formula1)!=null?e:"").replace(L,(t=a.formula2)!=null?t:"");return`${this.titleStr} ${i}`}generateRuleErrorMessage(a,i){var t,o;return a.operator?`${this.localeService.t(k[a.operator]).replace(U,(t=a.formula1)!=null?t:"").replace(L,(o=a.formula2)!=null?o:"")}`:this.titleStr}getExtraStyle(a,i,e,t,o){}getRuleFinalError(a,i){return a.showErrorMessage&&a.error?a.error:this.generateRuleErrorMessage(a,i)}isEmptyCellValue(a){return a===""||a===void 0||a===null}normalizeFormula(a,i,e){return{formula1:a.formula1,formula2:a.formula2}}async isValidType(a,i,e){return!0}transform(a,i,e){return a}async validatorIsEqual(a,i,e){const{formula1:t}=i,{value:o}=a;return Number.isNaN(t)?!0:o===t}async validatorIsNotEqual(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value!==t}async validatorIsBetween(a,i,e){const{formula1:t,formula2:o}=i;if(Number.isNaN(t)||Number.isNaN(o))return!0;const d=Math.min(t,o),s=Math.max(t,o);return a.value>=d&&a.value<=s}async validatorIsNotBetween(a,i,e){const{formula1:t,formula2:o}=i;if(Number.isNaN(t)||Number.isNaN(o))return!0;const d=Math.min(t,o),s=Math.max(t,o);return a.value<d||a.value>s}async validatorIsGreaterThan(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value>t}async validatorIsGreaterThanOrEqual(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value>=t}async validatorIsLessThan(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value<t}async validatorIsLessThanOrEqual(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value<=t}async validator(a,i){const{value:e,unitId:t,subUnitId:o}=a,d=this.isEmptyCellValue(e),{allowBlank:s=!0,operator:p}=i;if(d)return s;const u=await this.parseFormula(i,t,o,a.row,a.column);if(!u.isFormulaValid||!await this.isValidType(a,u,i))return!1;if(!r.Tools.isDefine(p))return!0;const c=this.transform(a,u,i);switch(p){case r.DataValidationOperator.BETWEEN:return this.validatorIsBetween(c,u,i);case r.DataValidationOperator.EQUAL:return this.validatorIsEqual(c,u,i);case r.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(c,u,i);case r.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(c,u,i);case r.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(c,u,i);case r.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(c,u,i);case r.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(c,u,i);case r.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(c,u,i);default:throw new Error("Unknown operator.")}}},l.BaseDataValidator=ra([y(0,r.Inject(r.LocaleService)),y(1,r.Inject(r.Injector))],l.BaseDataValidator),l.AddDataValidationMutation=f,l.DataValidatorRegistryScope=I,l.DataValidatorRegistryService=R,l.RemoveDataValidationMutation=V,l.TWO_FORMULA_OPERATOR_COUNT=ta,l.TextLengthErrorTitleMap=aa,l.UpdateDataValidationMutation=g,l.UpdateRuleType=h,l.getRuleOptions=N,l.getRuleSetting=D,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
1
+ (function(l,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@univerjs/core"),require("rxjs")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs"],r):(l=typeof globalThis<"u"?globalThis:l||self,r(l.UniverDataValidation={},l.UniverCore,l.rxjs))})(this,function(l,r,_){"use strict";var la=Object.defineProperty;var ua=(l,r,_)=>r in l?la(l,r,{enumerable:!0,configurable:!0,writable:!0,value:_}):l[r]=_;var c=(l,r,_)=>ua(l,typeof r!="symbol"?r+"":r,_);var O;function D(n){return{type:n.type,operator:n.operator,formula1:n.formula1,formula2:n.formula2,allowBlank:n.allowBlank}}function N(n){return{error:n.error,errorStyle:n.errorStyle,errorTitle:n.errorTitle,imeMode:n.imeMode,prompt:n.prompt,promptTitle:n.promptTitle,showDropDown:n.showDropDown,showErrorMessage:n.showErrorMessage,showInputMessage:n.showInputMessage,renderMode:n.renderMode,bizInfo:n.bizInfo}}var h=(n=>(n[n.SETTING=0]="SETTING",n[n.RANGE=1]="RANGE",n[n.OPTIONS=2]="OPTIONS",n[n.ALL=3]="ALL",n))(h||{}),b=Object.defineProperty,w=Object.getOwnPropertyDescriptor,P=(n,a,i,e)=>{for(var t=e>1?void 0:e?w(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&b(a,i,t),t},B=(n,a)=>(i,e)=>a(i,e,n);l.DataValidationModel=class extends r.Disposable{constructor(i){super();c(this,"_model",new Map);c(this,"_ruleChange$",new _.Subject);c(this,"ruleChange$",this._ruleChange$.asObservable());c(this,"ruleChangeDebounce$",this.ruleChange$.pipe(_.debounceTime(20)));this._logService=i,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(i,e){this._model.has(i)||this._model.set(i,new Map);const t=this._model.get(i);if(t.has(e))return t.get(e);const o={map:new Map,list:[]};return t.set(e,o),o}_addSubUnitRule(i,e,t){const{map:o,list:d}=i,p=(Array.isArray(e)?e:[e]).filter(u=>!o.has(u.uid));typeof t=="number"&&t<d.length?d.splice(t,0,...p):d.push(...p),p.forEach(u=>{o.set(u.uid,u)})}_removeSubUnitRule(i,e){const{map:t,list:o}=i,d=o.findIndex(s=>s.uid===e);d>-1&&(o.splice(d,1),t.delete(e))}_updateSubUnitRule(i,e,t){const{map:o,list:d}=i,s=o.get(e),p=d.findIndex(m=>e===m.uid);if(!s)throw new Error(`Data validation rule is not found, ruleId: ${e}.`);const u={...s};switch(t.type){case h.RANGE:{u.ranges=t.payload;break}case h.SETTING:{Object.assign(u,D(t.payload));break}case h.OPTIONS:{Object.assign(u,N(t.payload));break}case h.ALL:{Object.assign(u,t.payload);break}}return d[p]=u,o.set(e,u),u}_addRuleSideEffect(i,e,t,o){if(!this._ensureMap(i,e).map.get(t.uid))return{rule:t,type:"add",unitId:i,subUnitId:e,source:o}}addRule(i,e,t,o,d){try{const s=this._ensureMap(i,e),u=(Array.isArray(t)?t:[t]).map(m=>this._addRuleSideEffect(i,e,m,o));this._addSubUnitRule(s,t,d),u.forEach(m=>{m&&this._ruleChange$.next(m)})}catch(s){this._logService.error(s)}}updateRule(i,e,t,o,d){try{const s=this._ensureMap(i,e),p=r.Tools.deepClone(s.map.get(t));if(!p)throw new Error(`Data validation rule is not found, ruleId: ${t}.`);const u=this._updateSubUnitRule(s,t,o);this._ruleChange$.next({rule:u,type:"update",unitId:i,subUnitId:e,source:d,updatePayload:o,oldRule:p})}catch(s){this._logService.error(s)}}removeRule(i,e,t,o){try{const d=this._ensureMap(i,e),s=d.map.get(t);s&&(this._removeSubUnitRule(d,t),this._ruleChange$.next({rule:s,type:"remove",unitId:i,subUnitId:e,source:o}))}catch(d){this._logService.error(d)}}getRuleById(i,e,t){return this._ensureMap(i,e).map.get(t)}getRuleIndex(i,e,t){return this._ensureMap(i,e).list.findIndex(d=>d.uid===t)}getRules(i,e){return[...this._ensureMap(i,e).list]}getUnitRules(i){const e=this._model.get(i);if(!e)return[];const t=[];return e.forEach((o,d)=>{t.push([d,o.list])}),t}deleteUnitRules(i){this._model.delete(i)}getSubUnitIds(i){var e,t;return Array.from((t=(e=this._model.get(i))==null?void 0:e.keys())!=null?t:[])}getAll(){return Array.from(this._model.keys()).map(i=>[i,this.getUnitRules(i)])}},l.DataValidationModel=P([B(0,r.ILogService)],l.DataValidationModel);var j=Object.defineProperty,$=Object.getOwnPropertyDescriptor,q=(n,a,i,e)=>{for(var t=e>1?void 0:e?$(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&j(a,i,t),t},M=(n,a)=>(i,e)=>a(i,e,n);const G="SHEET_DATA_VALIDATION_PLUGIN";l.DataValidationResourceController=class extends r.Disposable{constructor(a,i,e){super(),this._resourceManagerService=a,this._univerInstanceService=i,this._dataValidationModel=e,this._initSnapshot()}_initSnapshot(){const a=e=>{const t=this._dataValidationModel.getUnitRules(e),o={};return t?(t.forEach(([d,s])=>{o[d]=s}),JSON.stringify(o)):""},i=e=>{if(!e)return{};try{return JSON.parse(e)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:G,businesses:[r.UniverInstanceType.UNIVER_SHEET],toJson:e=>a(e),parseJson:e=>i(e),onUnLoad:e=>{this._dataValidationModel.deleteUnitRules(e)},onLoad:(e,t)=>{Object.keys(t).forEach(o=>{t[o].forEach(s=>{this._dataValidationModel.addRule(e,o,s,"patched")})})}}))}},l.DataValidationResourceController=q([M(0,r.IResourceManagerService),M(1,r.IUniverInstanceService),M(2,r.Inject(l.DataValidationModel))],l.DataValidationResourceController);var I=(n=>(n.SHEET="sheet",n))(I||{});class R{constructor(){c(this,"_validatorByScopes",new Map);c(this,"_validatorMap",new Map);c(this,"_validatorsChange$",new _.BehaviorSubject(void 0));c(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(a,i){this._validatorByScopes.has(i)||this._validatorByScopes.set(i,[]);const e=this._validatorByScopes.get(i);if(e.findIndex(t=>t.id===a.id)>-1)throw new Error(`Validator item with the same id ${a.id} has already been added!`);e.push(a)}_removeValidatorFromScope(a,i){const e=this._validatorByScopes.get(i);if(!e)return;const t=e.findIndex(o=>o.id===a.id);t>-1&&e.splice(t,1)}register(a){return this._validatorMap.set(a.id,a),Array.isArray(a.scopes)?a.scopes.forEach(i=>{this._addValidatorToScope(a,i)}):this._addValidatorToScope(a,a.scopes),this._validatorsChange$.next(),r.toDisposable(()=>{this._validatorMap.delete(a.id),Array.isArray(a.scopes)?a.scopes.forEach(i=>{this._removeValidatorFromScope(a,i)}):this._removeValidatorFromScope(a,a.scopes),this._validatorsChange$.next()})}getValidatorItem(a){return this._validatorMap.get(a)}getValidatorsByScope(a){return this._validatorByScopes.get(a)}}const f={type:r.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(n,a){if(!a)return!1;const{unitId:i,subUnitId:e,rule:t,index:o,source:d="command"}=a;return n.get(l.DataValidationModel).addRule(i,e,t,d,o),!0}},V={type:r.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(n,a){if(!a)return!1;const{unitId:i,subUnitId:e,ruleId:t,source:o="command"}=a,d=n.get(l.DataValidationModel);return Array.isArray(t)?t.forEach(s=>{d.removeRule(i,e,s,o)}):d.removeRule(i,e,t,o),!0}},g={type:r.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(n,a){if(!a)return!1;const{unitId:i,subUnitId:e,ruleId:t,payload:o,source:d="command"}=a;return n.get(l.DataValidationModel).updateRule(i,e,t,o,d),!0}},H={type:r.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{rule:e,unitId:t,subUnitId:o}=a,d=n.get(r.ICommandService),s=n.get(r.IUndoRedoService),p={...a,rule:{...a.rule,ranges:[a.rule.range]}},u=[{id:f.id,params:p}],m=[{id:V.id,params:{unitId:t,subUnitId:o,ruleId:e.uid}}];return s.pushUndoRedo({unitID:t,redoMutations:u,undoMutations:m}),await d.executeCommand(f.id,p),!0}},Q={type:r.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:e,subUnitId:t,ruleId:o}=a,d=n.get(r.ICommandService),s=n.get(r.IUndoRedoService),p=n.get(l.DataValidationModel),u=[{id:V.id,params:a}],m=[{id:f.id,params:{unitId:e,subUnitId:t,rule:{...p.getRuleById(e,t,o)},index:p.getRuleIndex(e,t,o)}}];return s.pushUndoRedo({undoMutations:m,redoMutations:u,unitID:a.unitId}),d.executeCommand(V.id,a),!0}},F={type:r.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(n,a){if(n.get(r.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const e=n.get(r.ICommandService),t=n.get(r.IUndoRedoService),o=n.get(l.DataValidationModel),{unitId:d,subUnitId:s,ruleId:p,options:u}=a,m=o.getRuleById(d,s,p);if(!m)return!1;const v={unitId:d,subUnitId:s,ruleId:p,payload:{type:h.OPTIONS,payload:u}},E=[{id:g.id,params:v}],T={unitId:d,subUnitId:s,ruleId:p,payload:{type:h.OPTIONS,payload:N(m)}},S=[{id:g.id,params:T}];return t.pushUndoRedo({unitID:d,redoMutations:E,undoMutations:S}),e.executeCommand(g.id,v),!0}},W={type:r.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const e=n.get(r.ICommandService),t=n.get(r.IUndoRedoService),o=n.get(l.DataValidationModel),d=n.get(R),{unitId:s,subUnitId:p,ruleId:u,setting:m}=a,v=d.getValidatorItem(m.type);if(!v)return!1;const E=o.getRuleById(s,p,u);if(!E)return!1;const T={...E,...m};if(!v.validatorFormula(T,s,p).success)return!1;const S={unitId:s,subUnitId:p,ruleId:u,payload:{type:h.SETTING,payload:{...m,...v.normalizeFormula(T,s,p)}}},oa=[{id:g.id,params:S}],da={unitId:s,subUnitId:p,ruleId:u,payload:{type:h.SETTING,payload:D(E)}},sa=[{id:g.id,params:da}];return t.pushUndoRedo({unitID:s,redoMutations:oa,undoMutations:sa}),e.executeCommand(g.id,S),!0}},x={type:r.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:e,subUnitId:t}=a,o=n.get(r.ICommandService),d=n.get(l.DataValidationModel),s=n.get(r.IUndoRedoService),p=[...d.getRules(e,t)],u={unitId:e,subUnitId:t,ruleId:p.map(E=>E.uid)},m=[{id:V.id,params:u}],v=[{id:f.id,params:{unitId:e,subUnitId:t,rule:p}}];return s.pushUndoRedo({redoMutations:m,undoMutations:v,unitID:e}),o.executeCommand(V.id,u),!0}},J="data-validation.config",y={};var z=Object.defineProperty,K=Object.getOwnPropertyDescriptor,Y=(n,a,i,e)=>{for(var t=e>1?void 0:e?K(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&z(a,i,t),t},A=(n,a)=>(i,e)=>a(i,e,n);const X="UNIVER_DATA_VALIDATION_PLUGIN";l.UniverDataValidationPlugin=(O=class extends r.Plugin{constructor(a=y,i,e,t){super(),this._config=a,this._injector=i,this._commandService=e,this._configService=t;const{...o}=r.merge({},y,this._config);this._configService.setConfig(J,o)}onStarting(){[[l.DataValidationModel],[R],[l.DataValidationResourceController]].forEach(a=>this._injector.add(a)),[H,x,F,W,Q,f,g,V].forEach(a=>{this._commandService.registerCommand(a)})}onReady(){this._injector.get(l.DataValidationResourceController)}},c(O,"pluginName",X),c(O,"type",r.UniverInstanceType.UNIVER_SHEET),O),l.UniverDataValidationPlugin=Y([A(1,r.Inject(r.Injector)),A(2,r.ICommandService),A(3,r.IConfigService)],l.UniverDataValidationPlugin),r.DataValidationOperator.BETWEEN+"",r.DataValidationOperator.EQUAL+"",r.DataValidationOperator.GREATER_THAN+"",r.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",r.DataValidationOperator.LESS_THAN+"",r.DataValidationOperator.LESS_THAN_OR_EQUAL+"",r.DataValidationOperator.NOT_BETWEEN+"",r.DataValidationOperator.NOT_EQUAL+"";const Z={[r.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[r.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},k={[r.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[r.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},aa={[r.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[r.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"},ta=[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.NOT_BETWEEN];var ea=Object.defineProperty,ia=Object.getOwnPropertyDescriptor,ra=(n,a,i,e)=>{for(var t=e>1?void 0:e?ia(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&ea(a,i,t),t},U=(n,a)=>(i,e)=>a(i,e,n);const L="{FORMULA1}",C="{FORMULA2}",na={[r.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[r.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};l.BaseDataValidator=class{constructor(a,i){c(this,"offsetFormulaByRange",!0);c(this,"formulaInput");c(this,"canvasRender",null);c(this,"dropdown");c(this,"optionsInput");c(this,"skipDefaultFontRender");this.localeService=a,this.injector=i}get operatorNames(){return this.operators.map(a=>this.localeService.t(na[a]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(a){var e,t;if(!a.operator)return this.titleStr;const i=this.localeService.t(Z[a.operator]).replace(L,(e=a.formula1)!=null?e:"").replace(C,(t=a.formula2)!=null?t:"");return`${this.titleStr} ${i}`}generateRuleErrorMessage(a,i){var t,o;return a.operator?`${this.localeService.t(k[a.operator]).replace(L,(t=a.formula1)!=null?t:"").replace(C,(o=a.formula2)!=null?o:"")}`:this.titleStr}getExtraStyle(a,i,e,t,o){}getRuleFinalError(a,i){return a.showErrorMessage&&a.error?a.error:this.generateRuleErrorMessage(a,i)}isEmptyCellValue(a){return a===""||a===void 0||a===null}normalizeFormula(a,i,e){return{formula1:a.formula1,formula2:a.formula2}}async isValidType(a,i,e){return!0}transform(a,i,e){return a}async validatorIsEqual(a,i,e){const{formula1:t}=i,{value:o}=a;return Number.isNaN(t)?!0:o===t}async validatorIsNotEqual(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value!==t}async validatorIsBetween(a,i,e){const{formula1:t,formula2:o}=i;if(Number.isNaN(t)||Number.isNaN(o))return!0;const d=Math.min(t,o),s=Math.max(t,o);return a.value>=d&&a.value<=s}async validatorIsNotBetween(a,i,e){const{formula1:t,formula2:o}=i;if(Number.isNaN(t)||Number.isNaN(o))return!0;const d=Math.min(t,o),s=Math.max(t,o);return a.value<d||a.value>s}async validatorIsGreaterThan(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value>t}async validatorIsGreaterThanOrEqual(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value>=t}async validatorIsLessThan(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value<t}async validatorIsLessThanOrEqual(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value<=t}async validator(a,i){const{value:e,unitId:t,subUnitId:o}=a,d=this.isEmptyCellValue(e),{allowBlank:s=!0,operator:p}=i;if(d)return s;const u=await this.parseFormula(i,t,o,a.row,a.column);if(!u.isFormulaValid||!await this.isValidType(a,u,i))return!1;if(!r.Tools.isDefine(p))return!0;const m=this.transform(a,u,i);switch(p){case r.DataValidationOperator.BETWEEN:return this.validatorIsBetween(m,u,i);case r.DataValidationOperator.EQUAL:return this.validatorIsEqual(m,u,i);case r.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(m,u,i);case r.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(m,u,i);case r.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(m,u,i);case r.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(m,u,i);case r.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(m,u,i);case r.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(m,u,i);default:throw new Error("Unknown operator.")}}},l.BaseDataValidator=ra([U(0,r.Inject(r.LocaleService)),U(1,r.Inject(r.Injector))],l.BaseDataValidator),l.AddDataValidationMutation=f,l.DataValidatorRegistryScope=I,l.DataValidatorRegistryService=R,l.RemoveDataValidationMutation=V,l.TWO_FORMULA_OPERATOR_COUNT=ta,l.TextLengthErrorTitleMap=aa,l.UpdateDataValidationMutation=g,l.UpdateRuleType=h,l.getRuleOptions=N,l.getRuleSetting=D,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/data-validation",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "private": false,
5
5
  "description": "Data validation library for Univer",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -48,17 +48,17 @@
48
48
  "rxjs": ">=7.0.0"
49
49
  },
50
50
  "dependencies": {
51
- "@univerjs/core": "0.5.1"
51
+ "@univerjs/core": "0.5.2"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@univerjs/protocol": "0.1.39",
55
55
  "rxjs": "^7.8.1",
56
56
  "typescript": "^5.7.2",
57
- "vite": "^6.0.1",
58
- "vitest": "^2.1.6",
59
- "@univerjs/core": "0.5.1",
60
- "@univerjs-infra/shared": "0.5.1",
61
- "@univerjs/sheets": "0.5.1"
57
+ "vite": "^6.0.3",
58
+ "vitest": "^2.1.8",
59
+ "@univerjs-infra/shared": "0.5.2",
60
+ "@univerjs/sheets": "0.5.2",
61
+ "@univerjs/core": "0.5.2"
62
62
  },
63
63
  "space": {
64
64
  ".": {