@univerjs/sheets-data-validation 0.5.0-alpha.0 → 0.5.0-beta.1

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