@univerjs/sheets-data-validation 0.5.0 → 0.5.1-nightly.202411301606

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