@univerjs/sheets-data-validation 0.16.1-insiders.20260311-074e8ca → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,176 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
package/lib/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var Pe=Object.defineProperty;var He=(n,s,e)=>s in n?Pe(n,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[s]=e;var p=(n,s,e)=>He(n,typeof s!="symbol"?s+"":s,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),g=require("@univerjs/data-validation"),M=require("@univerjs/engine-formula"),R=require("@univerjs/sheets"),B=require("rxjs"),fe=require("@univerjs/sheets-formula");var We=Object.getOwnPropertyDescriptor,$e=(n,s,e,t)=>{for(var a=t>1?void 0:t?We(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},ce=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationCacheService=class extends o.Disposable{constructor(e,t,a){super();p(this,"_cacheMatrix",new Map);p(this,"_dirtyRanges$",new B.Subject);p(this,"dirtyRanges$",this._dirtyRanges$.asObservable());this._commandService=e,this._univerInstanceService=t,this._sheetDataValidationModel=a,this._initDirtyRanges(),this._initSheetRemove()}_initDirtyRanges(){this.disposeWithMe(this._commandService.onCommandExecuted((e,t)=>{if(e.id===R.SetRangeValuesMutation.id&&!(t!=null&&t.onlyLocal)){const{cellValue:a,unitId:r,subUnitId:i}=e.params;if(a){const l=new o.ObjectMatrix(a).getDataRange();if(l.endRow===-1)return;const c=this._sheetDataValidationModel.getRules(r,i).map(h=>h.ranges).flat().map(h=>o.getIntersectRange(h,l)).filter(Boolean);c.length&&this.markRangeDirty(r,i,c,!0)}}}))}_initSheetRemove(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{var t;if(e.id===R.RemoveSheetMutation.id){const{unitId:a,subUnitId:r}=e.params;(t=this._cacheMatrix.get(a))==null||t.delete(r)}})),this.disposeWithMe(this._univerInstanceService.unitDisposed$.subscribe(e=>{e.type===o.UniverInstanceType.UNIVER_SHEET&&this._cacheMatrix.delete(e.getUnitId())}))}_ensureCache(e,t){let a=this._cacheMatrix.get(e);a||(a=new Map,this._cacheMatrix.set(e,a));let r=a.get(t);return r||(r=new o.ObjectMatrix,a.set(t,r)),r}ensureCache(e,t){return this._ensureCache(e,t)}addRule(e,t,a){this.markRangeDirty(e,t,a.ranges)}removeRule(e,t,a){this._deleteRange(e,t,a.ranges)}markRangeDirty(e,t,a,r){const i=this._ensureCache(e,t);a.forEach(l=>{o.Range.foreach(l,(d,u)=>{i.getValue(d,u)!==void 0&&i.setValue(d,u,void 0)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a,isSetRange:r})}_deleteRange(e,t,a){const r=this._ensureCache(e,t);a.forEach(i=>{o.Range.foreach(i,(l,d)=>{r.realDeleteValue(l,d)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a})}getValue(e,t,a,r){return this._ensureCache(e,t).getValue(a,r)}};exports.DataValidationCacheService=$e([ce(0,o.Inject(o.ICommandService)),ce(1,o.Inject(o.IUniverInstanceService)),ce(2,o.Inject(g.DataValidationModel))],exports.DataValidationCacheService);function L(n){var s,e;return(e=(s=n==null?void 0:n[0])==null?void 0:s[0])==null?void 0:e.v}function P(n){var s;return(s=n==null?void 0:n[0])==null?void 0:s[0]}function E(n){return!M.ERROR_TYPE_SET.has(n)}function Y(n,s){var t;const e=s.getValidatorItem(n);return(t=e==null?void 0:e.offsetFormulaByRange)!=null?t:!1}var ke=Object.getOwnPropertyDescriptor,qe=(n,s,e,t)=>{for(var a=t>1?void 0:t?ke(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},j=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationCustomFormulaService=class extends o.Disposable{constructor(e,t,a,r,i){super();p(this,"_ruleFormulaMap",new Map);p(this,"_ruleFormulaMap2",new Map);this._instanceSrv=e,this._registerOtherFormulaService=t,this._dataValidationModel=a,this._dataValidationCacheService=r,this._validatorRegistryService=i,this._initFormulaResultHandler(),this._initDirtyRanges()}dispose(){super.dispose(),this._ruleFormulaMap.clear(),this._ruleFormulaMap2.clear()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceSrv.getUnitType(t)===o.UniverInstanceType.UNIVER_SHEET)for(const i in a){const l=a[i],{ruleFormulaMap:d}=this._ensureMaps(t,i);l.forEach(u=>{var m,S;const c=d.get((m=u.extra)==null?void 0:m.ruleId),h=this._dataValidationModel.getRuleById(t,i,(S=u.extra)==null?void 0:S.ruleId);h&&c&&this._dataValidationCacheService.markRangeDirty(t,i,h.ranges)})}}}))}_ensureMaps(e,t){let a=this._ruleFormulaMap.get(e),r=this._ruleFormulaMap2.get(e);a||(a=new Map,this._ruleFormulaMap.set(e,a)),r||(r=new Map,this._ruleFormulaMap2.set(e,r));let i=a.get(t);i||(i=new Map,a.set(t,i));let l=r.get(t);return l||(l=new Map,r.set(t,l)),{ruleFormulaMap:i,ruleFormulaMap2:l}}_registerFormula(e,t,a,r,i){return this._registerOtherFormulaService.registerFormulaWithRange(e,t,r,i,{ruleId:a},M.OtherFormulaBizType.DATA_VALIDATION_CUSTOM,a)}_handleDirtyRanges(e,t,a){this._dataValidationModel.getRules(e,t).forEach(i=>{const l=i.ranges;o.Rectangle.doAnyRangesIntersect(l,a)&&this.makeRuleDirty(e,t,i.uid)})}_initDirtyRanges(){this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.subscribe(e=>{e.isSetRange&&this._handleDirtyRanges(e.unitId,e.subUnitId,e.ranges)}))}deleteByRuleId(e,t,a){const{ruleFormulaMap:r,ruleFormulaMap2:i}=this._ensureMaps(e,t),l=this._dataValidationModel.getRuleById(e,t,a),d=r.get(a);if(!l||!d)return;const u=r.get(a);u&&(r.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[u.formulaId]));const c=i.get(a);c&&(i.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[c.formulaId]))}_addFormulaByRange(e,t,a,r,i,l){const{ruleFormulaMap:d,ruleFormulaMap2:u}=this._ensureMaps(e,t),c=l[0].startRow,h=l[0].startColumn;if(r&&o.isFormulaString(r)){const m=this._registerFormula(e,t,a,r,l);d.set(a,{formula:r,originCol:h,originRow:c,formulaId:m})}if(i&&o.isFormulaString(i)){const m=this._registerFormula(e,t,a,i,l);u.set(a,{formula:i,originCol:h,originRow:c,formulaId:m})}}addRule(e,t,a){if(Y(a.type,this._validatorRegistryService)){const{ranges:r,formula1:i,formula2:l,uid:d}=a;this._addFormulaByRange(e,t,d,i,l,r)}}async getCellFormulaValue(e,t,a,r,i){var v,_;const{ruleFormulaMap:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return Promise.resolve(void 0);const u=await this._registerOtherFormulaService.getFormulaValue(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}async getCellFormula2Value(e,t,a,r,i){var v,_;const{ruleFormulaMap2:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return Promise.resolve(void 0);const u=await this._registerOtherFormulaService.getFormulaValue(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}getCellFormulaValueSync(e,t,a,r,i){var v,_;const{ruleFormulaMap:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return;const u=this._registerOtherFormulaService.getFormulaValueSync(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}getCellFormula2ValueSync(e,t,a,r,i){var v,_;const{ruleFormulaMap2:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return;const u=this._registerOtherFormulaService.getFormulaValueSync(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}getRuleFormulaInfo(e,t,a){const{ruleFormulaMap:r}=this._ensureMaps(e,t);return r.get(a)}makeRuleDirty(e,t,a){var l,d,u,c;const r=(d=(l=this._ruleFormulaMap.get(e))==null?void 0:l.get(t))==null?void 0:d.get(a),i=(c=(u=this._ruleFormulaMap2.get(e))==null?void 0:u.get(t))==null?void 0:c.get(a);r&&this._registerOtherFormulaService.markFormulaDirty(e,t,r.formulaId),i&&this._registerOtherFormulaService.markFormulaDirty(e,t,i.formulaId)}};exports.DataValidationCustomFormulaService=qe([j(0,o.IUniverInstanceService),j(1,o.Inject(M.RegisterOtherFormulaService)),j(2,o.Inject(g.DataValidationModel)),j(3,o.Inject(exports.DataValidationCacheService)),j(4,o.Inject(g.DataValidatorRegistryService))],exports.DataValidationCustomFormulaService);function N(n){return o.getOriginCellValue(n)}function ye(n){var s;return String((s=N(n))!=null?s:"")}function Qe(n){return n.filter(Boolean).join(",")}function W(n){return n.split(",").filter(Boolean)}function Ge(n){const s=N(n);return s==null?"":s.toString()}function X(n,s,e){const{formula1:t,formula2:a}=s,r=s.ranges[0].startRow,i=s.ranges[0].startColumn,l=e.row-r,d=e.col-i,u=o.isFormulaString(t)?n.moveFormulaRefOffset(t,d,l,!0):t,c=o.isFormulaString(a)?n.moveFormulaRefOffset(a,d,l,!0):a;return{transformedFormula1:u,transformedFormula2:c}}var Ye=Object.getOwnPropertyDescriptor,Xe=(n,s,e,t)=>{for(var a=t>1?void 0:t?Ye(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},Re=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationListCacheService=class extends o.Disposable{constructor(e,t){super();p(this,"_cache",new Map);this._injector=e,this._dataValidationModel=t,this._initRuleChangeListener()}_initRuleChangeListener(){this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{(e.type==="remove"||e.type==="update")&&this.markRuleDirty(e.unitId,e.subUnitId,e.rule.uid)}))}getOrCompute(e,t,a){const r=this.getCache(e,t,a.uid);if(r)return r;const l=this._injector.get(exports.DataValidationFormulaService).getRuleFormulaResultSync(e,t,a.uid);return this.computeAndCache(e,t,a,l)}_ensureCache(e,t){let a=this._cache.get(e);a||(a=new Map,this._cache.set(e,a));let r=a.get(t);return r||(r=new Map,a.set(t,r)),r}getCache(e,t,a){var r,i;return(i=(r=this._cache.get(e))==null?void 0:r.get(t))==null?void 0:i.get(a)}setCache(e,t,a,r){this._ensureCache(e,t).set(a,r)}markRuleDirty(e,t,a){var r,i;(i=(r=this._cache.get(e))==null?void 0:r.get(t))==null||i.delete(a)}clear(){this._cache.clear()}computeAndCache(e,t,a,r){var v,_,V;const{formula1:i="",formula2:l=""}=a,d=o.isFormulaString(i)?this._getRuleFormulaResultSet((V=(_=(v=r==null?void 0:r[0])==null?void 0:v.result)==null?void 0:_[0])==null?void 0:V[0]):W(i),u=l.split(","),c=d.map((f,D)=>({label:f,color:u[D]||""})),h={};for(const f of c)f.color&&(h[f.label]=f.color);const m=new Set(d),S={list:d,listWithColor:c,colorMap:h,set:m};return this.setCache(e,t,a.uid,S),S}_getRuleFormulaResultSet(e){var a,r;if(!e)return[];const t=new Set;for(let i=0,l=e.length;i<l;i++){const d=e[i];if(d)for(let u=0,c=d.length;u<c;u++){const h=d[u],m=N(h);if(m!=null){if(typeof m!="string"&&typeof(h==null?void 0:h.s)=="object"&&((r=(a=h.s)==null?void 0:a.n)!=null&&r.pattern)){t.add(o.numfmt.format(h.s.n.pattern,m,{throws:!1}));continue}const S=typeof m=="string"?m:String(m);E(S)&&t.add(S)}}}return[...t]}};exports.DataValidationListCacheService=Xe([Re(0,o.Inject(o.Injector)),Re(1,o.Inject(g.DataValidationModel))],exports.DataValidationListCacheService);var Ke=Object.getOwnPropertyDescriptor,ze=(n,s,e,t)=>{for(var a=t>1?void 0:t?Ke(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},U=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationFormulaService=class extends o.Disposable{constructor(e,t,a,r,i,l){super();p(this,"_formulaRuleMap",new Map);this._instanceService=e,this._registerOtherFormulaService=t,this._dataValidationCacheService=a,this._dataValidationModel=r,this._validatorRegistryService=i,this._listCacheService=l,this._initFormulaResultHandler()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceService.getUnitType(t)===o.UniverInstanceType.UNIVER_SHEET)for(const i in a){const l=a[i],d=this._ensureRuleFormulaMap(t,i);l.forEach(u=>{var h;const c=(h=u.extra)==null?void 0:h.ruleId;if(c&&d.get(c)){const m=this._dataValidationModel.getRuleById(t,i,c);m&&(this._listCacheService.markRuleDirty(t,i,c),this._dataValidationCacheService.markRangeDirty(t,i,m.ranges))}})}}}))}_ensureRuleFormulaMap(e,t){let a=this._formulaRuleMap.get(e);a||(a=new Map,this._formulaRuleMap.set(e,a));let r=a.get(t);return r||(r=new Map,a.set(t,r)),r}_registerSingleFormula(e,t,a,r){const i=[{startColumn:0,endColumn:0,startRow:0,endRow:0}];return this._registerOtherFormulaService.registerFormulaWithRange(e,t,a,i,{ruleId:r},M.OtherFormulaBizType.DATA_VALIDATION,r)}addRule(e,t,a){if(!Y(a.type,this._validatorRegistryService)&&a.type!==o.DataValidationType.CHECKBOX){const{formula1:r,formula2:i,uid:l}=a,d=o.isFormulaString(r),u=o.isFormulaString(i);if(!d&&!u)return;const c=this._ensureRuleFormulaMap(e,t),h=[void 0,void 0];if(d){const m=this._registerSingleFormula(e,t,r,l);h[0]={id:m,text:r}}if(u){const m=this._registerSingleFormula(e,t,i,l);h[1]={id:m,text:i}}c.set(l,h)}}removeRule(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(!i)return;const[l,d]=i,u=[l==null?void 0:l.id,d==null?void 0:d.id].filter(Boolean);u.length&&this._registerOtherFormulaService.deleteFormula(e,t,u)}getRuleFormulaResult(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(!i)return Promise.resolve(null);const l=async d=>d&&this._registerOtherFormulaService.getFormulaValue(e,t,d.id);return Promise.all([l(i[0]),l(i[1])])}getRuleFormulaResultSync(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(i)return i.map(l=>{if(l)return this._registerOtherFormulaService.getFormulaValueSync(e,t,l.id)})}getRuleFormulaInfo(e,t,a){return this._ensureRuleFormulaMap(e,t).get(a)}};exports.DataValidationFormulaService=ze([U(0,o.IUniverInstanceService),U(1,o.Inject(M.RegisterOtherFormulaService)),U(2,o.Inject(exports.DataValidationCacheService)),U(3,o.Inject(g.DataValidationModel)),U(4,o.Inject(g.DataValidatorRegistryService)),U(5,o.Inject(exports.DataValidationListCacheService))],exports.DataValidationFormulaService);class ve{constructor(s,e,t,a,r=!1){p(this,"_map");p(this,"_tree",new o.RBush);p(this,"_dirty",!0);p(this,"_buildTree",()=>{if(!this._dirty||this._disableTree)return;this._tree.clear();const s=[];this._map.forEach((e,t)=>{e.forEach(a=>{s.push({minX:a.startRow,maxX:a.endRow,minY:a.startColumn,maxY:a.endColumn,ruleId:t})})}),this._tree.load(s),this._dirty=!1});p(this,"_debonceBuildTree",o.debounce(this._buildTree,0));this._unitId=e,this._subUnitId=t,this._univerInstanceService=a,this._disableTree=r,this._map=s,this._buildTree()}get _worksheet(){var s;return(s=this._univerInstanceService.getUnit(this._unitId,o.UniverInstanceType.UNIVER_SHEET))==null?void 0:s.getSheetBySheetId(this._subUnitId)}_addRule(s,e){if(!this._worksheet)return;const t=o.Rectangle.mergeRanges(e.map(a=>o.Range.transformRange(a,this._worksheet)));this._map.forEach((a,r)=>{const i=o.Rectangle.subtractMulti(a,t);i.length===0?this._map.delete(r):this._map.set(r,i)}),this._dirty=!0,this._map.set(s,t),this._debonceBuildTree()}addRule(s){this._addRule(s.uid,s.ranges)}removeRange(s){if(!this._worksheet)return;const e=s.map(t=>o.Range.transformRange(t,this._worksheet));this._map.forEach((t,a)=>{const r=o.Rectangle.subtractMulti(t,e);r.length===0?this._map.delete(a):this._map.set(a,r)}),this._dirty=!0,this._debonceBuildTree()}_removeRule(s){this._map.delete(s),this._dirty=!0,this._debonceBuildTree()}removeRule(s){this._removeRule(s.uid)}updateRange(s,e){this._removeRule(s),this._addRule(s,e)}addRangeRules(s){s.forEach(({id:e,ranges:t})=>{if(!t.length)return;let a=this._map.get(e);a?(this._map.set(e,o.Rectangle.mergeRanges([...a,...t])),a=this._map.get(e)):(a=t,this._map.set(e,a)),this._map.forEach((r,i)=>{if(i===e)return;const l=o.Rectangle.subtractMulti(r,t);l.length===0?this._map.delete(i):this._map.set(i,l)})}),this._dirty=!0,this._debonceBuildTree()}diff(s){const e=[];let t=0;return s.forEach((a,r)=>{var d;const i=(d=this._map.get(a.uid))!=null?d:[],l=a.ranges;i.length!==0&&(i.length!==l.length||i.some((u,c)=>!o.Rectangle.equals(u,l[c])))&&e.push({type:"update",ruleId:a.uid,oldRanges:l,newRanges:o.Rectangle.sort(i),rule:a}),i.length===0&&(e.push({type:"delete",rule:a,index:r-t}),t++)}),e}diffWithAddition(s,e){const t=[];let a=0;return s.forEach((r,i)=>{var u;const l=(u=this._map.get(r.uid))!=null?u:[],d=r.ranges;l.length!==0&&(l.length!==d.length||l.some((c,h)=>!o.Rectangle.equals(c,d[h])))&&t.push({type:"update",ruleId:r.uid,oldRanges:d,newRanges:o.Rectangle.sort(l),rule:r}),l.length===0&&(t.push({type:"delete",rule:r,index:i-a}),a++)}),Array.from(e).forEach(r=>{var l;const i=(l=this._map.get(r.uid))!=null?l:[];t.push({type:"add",rule:{...r,ranges:o.Rectangle.sort(i)}})}),t}clone(){return new ve(new Map(o.Tools.deepClone(Array.from(this._map.entries()))),this._unitId,this._subUnitId,this._univerInstanceService,!0)}getValue(s,e){this._dirty&&this._buildTree();const t=this._tree.search({minX:s,maxX:s,minY:e,maxY:e});return t.length>0?t[0].ruleId:void 0}}var Ze=Object.getOwnPropertyDescriptor,Je=(n,s,e,t)=>{for(var a=t>1?void 0:t?Ze(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},I=(n,s)=>(e,t)=>s(e,t,n);exports.SheetDataValidationModel=class extends o.Disposable{constructor(e,t,a,r,i,l,d){super();p(this,"_ruleMatrixMap",new Map);p(this,"_validStatusChange$",new B.Subject);p(this,"_ruleChange$",new B.Subject);p(this,"ruleChange$",this._ruleChange$.asObservable());p(this,"validStatusChange$",this._validStatusChange$.asObservable());this._dataValidationModel=e,this._univerInstanceService=t,this._dataValidatorRegistryService=a,this._dataValidationCacheService=r,this._dataValidationFormulaService=i,this._dataValidationCustomFormulaService=l,this._commandService=d,this._initRuleUpdateListener(),this.disposeWithMe(()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()}),this._initUniverInstanceListener()}_initUniverInstanceListener(){this.disposeWithMe(this._univerInstanceService.unitDisposed$.subscribe(e=>{this._ruleMatrixMap.delete(e.getUnitId())})),this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===R.RemoveSheetMutation.id){const{unitId:t,subUnitId:a}=e.params,r=this._ruleMatrixMap.get(t);r&&r.delete(a)}}))}_initRuleUpdateListener(){const e=this._dataValidationModel.getAll();for(const[t,a]of e)for(const[r,i]of a)for(const l of i)this._addRule(t,r,l),this._ruleChange$.next({type:"add",unitId:t,subUnitId:r,rule:l,source:"patched"});this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(t=>{switch(t.type){case"add":this._addRule(t.unitId,t.subUnitId,t.rule);break;case"update":this._updateRule(t.unitId,t.subUnitId,t.rule.uid,t.oldRule,t.updatePayload);break;case"remove":this._removeRule(t.unitId,t.subUnitId,t.rule);break}this._ruleChange$.next(t)}))}_ensureRuleMatrix(e,t){let a=this._ruleMatrixMap.get(e);a||(a=new Map,this._ruleMatrixMap.set(e,a));let r=a.get(t);return r||(r=new ve(new Map,e,t,this._univerInstanceService),a.set(t,r)),r}_addRuleSideEffect(e,t,a){this._ensureRuleMatrix(e,t).addRule(a),this._dataValidationCacheService.addRule(e,t,a),this._dataValidationFormulaService.addRule(e,t,a),this._dataValidationCustomFormulaService.addRule(e,t,a)}_addRule(e,t,a){(Array.isArray(a)?a:[a]).forEach(i=>{this._addRuleSideEffect(e,t,i)})}_updateRule(e,t,a,r,i){const l=this._ensureRuleMatrix(e,t),d={...r,...i.payload};i.type===g.UpdateRuleType.RANGE?l.updateRange(a,i.payload):i.type===g.UpdateRuleType.ALL&&l.updateRange(a,i.payload.ranges),this._dataValidationCacheService.removeRule(e,t,r),this._dataValidationCacheService.addRule(e,t,d),this._dataValidationFormulaService.removeRule(e,t,r.uid),this._dataValidationFormulaService.addRule(e,t,d),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a),this._dataValidationCustomFormulaService.addRule(e,t,d)}_removeRule(e,t,a){this._ensureRuleMatrix(e,t).removeRule(a),this._dataValidationCacheService.removeRule(e,t,a),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a.uid)}getValidator(e){return this._dataValidatorRegistryService.getValidatorItem(e)}getRuleIdByLocation(e,t,a,r){return this._ensureRuleMatrix(e,t).getValue(a,r)}getRuleByLocation(e,t,a,r){const i=this.getRuleIdByLocation(e,t,a,r);if(i)return this._dataValidationModel.getRuleById(e,t,i)}validator(e,t,a){const{col:r,row:i,unitId:l,subUnitId:d,worksheet:u}=t,c=(_,V)=>{a&&a(_,V),V&&this._validStatusChange$.next({unitId:l,subUnitId:d,ruleId:e.uid,status:_,row:i,col:r})},h=u.getCellValueOnly(i,r),m=this.getValidator(e.type),S=u.getCellRaw(i,r),v=N(S);if(m){const _=this._dataValidationCacheService.ensureCache(l,d),V=_.getValue(i,r);return V==null?(_.setValue(i,r,o.DataValidationStatus.VALIDATING),m.validator({value:v,unitId:l,subUnitId:d,row:i,column:r,worksheet:t.worksheet,workbook:t.workbook,interceptValue:N(h),t:S==null?void 0:S.t},e).then(f=>{const D=f?o.DataValidationStatus.VALID:o.DataValidationStatus.INVALID,y=_.getValue(i,r);D===o.DataValidationStatus.VALID?_.realDeleteValue(i,r):_.setValue(i,r,D),c(D,V!==y)}),o.DataValidationStatus.VALIDATING):(c(V!=null?V:o.DataValidationStatus.VALID,!1),V!=null?V:o.DataValidationStatus.VALID)}else return c(o.DataValidationStatus.VALID,!1),o.DataValidationStatus.VALID}getRuleObjectMatrix(e,t){return this._ensureRuleMatrix(e,t)}getRuleById(e,t,a){return this._dataValidationModel.getRuleById(e,t,a)}getRuleIndex(e,t,a){return this._dataValidationModel.getRuleIndex(e,t,a)}getRules(e,t){return[...this._dataValidationModel.getRules(e,t)]}getUnitRules(e){return this._dataValidationModel.getUnitRules(e)}deleteUnitRules(e){return this._dataValidationModel.deleteUnitRules(e)}getSubUnitIds(e){return this._dataValidationModel.getSubUnitIds(e)}getAll(){return this._dataValidationModel.getAll()}};exports.SheetDataValidationModel=Je([I(0,o.Inject(g.DataValidationModel)),I(1,o.IUniverInstanceService),I(2,o.Inject(g.DataValidatorRegistryService)),I(3,o.Inject(exports.DataValidationCacheService)),I(4,o.Inject(exports.DataValidationFormulaService)),I(5,o.Inject(exports.DataValidationCustomFormulaService)),I(6,o.ICommandService)],exports.SheetDataValidationModel);const $=1,k=0;function De(n,s){return o.Tools.isBlank(n)?s.t("dataValidation.validFail.value"):o.isFormulaString(n)?s.t("dataValidation.validFail.primitive"):""}const H=n=>o.Tools.isDefine(n)&&String(n).toLowerCase()==="true"?"1":String(n).toLowerCase()==="false"?"0":n;class Te extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.CHECKBOX);p(this,"title","dataValidation.checkbox.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",41);p(this,"offsetFormulaByRange",!1);p(this,"_formulaService",this.injector.get(exports.DataValidationFormulaService));p(this,"skipDefaultFontRender",(e,t,a)=>{const{unitId:r,subUnitId:i}=a,{formula1:l,formula2:d}=this.parseFormulaSync(e,r,i),u=`${t!=null?t:""}`;return!u||u===`${l}`||u===`${d}`})}validatorFormula(e,t,a){const{formula1:r,formula2:i}=e,l=r===i;if(o.Tools.isBlank(r)&&o.Tools.isBlank(i))return{success:!0};if(l)return{success:!1,formula1:this.localeService.t("dataValidation.validFail.checkboxEqual"),formula2:this.localeService.t("dataValidation.validFail.checkboxEqual")};const d=De(r,this.localeService),u=De(i,this.localeService);return{success:!d&&!u,formula1:d,formula2:u}}async parseFormula(e,t,a){var h,m,S,v;const{formula1:r=$,formula2:i=k}=e,l=await this._formulaService.getRuleFormulaResult(t,a,e.uid),d=o.isFormulaString(r)?L((m=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:m[0][0]):r,u=o.isFormulaString(i)?L((v=(S=l==null?void 0:l[1])==null?void 0:S.result)==null?void 0:v[0][0]):i,c=E(String(d))&&E(String(u));return{formula1:H(d),formula2:H(u),originFormula1:d,originFormula2:u,isFormulaValid:c}}getExtraStyle(e,t){return{tb:o.WrapStrategy.CLIP}}parseFormulaSync(e,t,a){var h,m,S,v;const{formula1:r=$,formula2:i=k}=e,l=this._formulaService.getRuleFormulaResultSync(t,a,e.uid),d=o.isFormulaString(r)?L((m=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:m[0][0]):r,u=o.isFormulaString(i)?L((v=(S=l==null?void 0:l[1])==null?void 0:S.result)==null?void 0:v[0][0]):i,c=E(String(d))&&E(String(u));return{formula1:H(d),formula2:H(u),originFormula1:d,originFormula2:u,isFormulaValid:c}}async isValidType(e,t,a){const{value:r,unitId:i,subUnitId:l}=e,{formula1:d,formula2:u,originFormula1:c,originFormula2:h}=await this.parseFormula(a,i,l);return!o.Tools.isDefine(d)||!o.Tools.isDefine(u)?!0:o.Tools.isDefine(r)&&(String(r)===String(d)||String(r)===String(u)||String(r)===String(c!=null?c:"")||String(r)===String(h!=null?h:""))}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.checkbox.error")}generateRuleName(e){return this.titleStr}}const et={[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 Me={[o.DataValidationOperator.BETWEEN]:"dataValidation.date.ruleName.between",[o.DataValidationOperator.EQUAL]:"dataValidation.date.ruleName.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.date.ruleName.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.ruleName.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.date.ruleName.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.ruleName.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.ruleName.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.ruleName.notEqual",NONE:"dataValidation.date.ruleName.legal"},tt={[o.DataValidationOperator.BETWEEN]:"dataValidation.date.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.date.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.date.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.date.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.errorMsg.notEqual",NONE:"dataValidation.date.errorMsg.legal"},se=[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.NOT_BETWEEN],q="{FORMULA1}",Q="{FORMULA2}",he=n=>{var e,t;if(n==null||typeof n=="boolean")return;if(typeof n=="number"||!Number.isNaN(+n))return+n;const s=(e=o.numfmt.parseDate(n))==null?void 0:e.v;return o.Tools.isDefine(s)?s:(t=o.numfmt.parseDate(o.dayjs(n).format("YYYY-MM-DD HH:mm:ss")))==null?void 0:t.v};class Ce extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.DATE);p(this,"title","dataValidation.date.title");p(this,"order",40);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"]);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(M.LexerTreeBuilder))}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=E(String(l==null?void 0:l.v))&&E(String(d==null?void 0:d.v));return{formula1:he(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:he(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}async isValidType(e){const{interceptValue:t,value:a}=e;return typeof a=="number"&&typeof t=="string"||typeof t=="string"?!!o.numfmt.parseDate(t):!1}_validatorSingleFormula(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)||!!(e&&o.numfmt.parseDate(e)))}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=this._validatorSingleFormula(e.formula1),l=this.localeService.t("dataValidation.validFail.date");if(se.includes(r)){const u=this._validatorSingleFormula(e.formula2);return{success:i&&u,formula1:i?void 0:l,formula2:u?void 0:l}}return{success:i,formula1:i?void 0:l}}normalizeFormula(e,t,a){const{formula1:r,formula2:i,bizInfo:l}=e,d=u=>{var h;if(!u)return u;let c;if(!Number.isNaN(+u))c=o.numfmt.dateFromSerial(+u);else{const m=(h=o.numfmt.parseDate(u))==null?void 0:h.v;if(m==null)return"";c=o.numfmt.dateFromSerial(m)}return o.dayjs(`${c[0]}/${c[1]}/${c[2]} ${c[3]}:${c[4]}:${c[5]}`).format(l!=null&&l.showTime?"YYYY-MM-DD HH:mm:ss":"YYYY-MM-DD")};return{formula1:o.isFormulaString(r)?r:d(`${r}`),formula2:o.isFormulaString(i)?i:d(`${i}`)}}transform(e,t,a){const{value:r}=e;return{...e,value:he(r)}}get operatorNames(){return this.operators.map(e=>this.localeService.t(et[e]))}generateRuleName(e){var a,r;if(!e.operator)return this.localeService.t(Me.NONE);const t=this.localeService.t(Me[e.operator]).replace(q,(a=e.formula1)!=null?a:"").replace(Q,(r=e.formula2)!=null?r:"");return`${this.titleStr} ${t}`}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(tt[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const ae={[o.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual",NONE:"dataValidation.errorMsg.legal"};function G(n){return+n}class at extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"id",o.DataValidationType.DECIMAL);p(this,"_lexerTreeBuilder",this.injector.get(M.LexerTreeBuilder));p(this,"title","dataValidation.decimal.title");p(this,"order",20);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"])}_isFormulaOrNumber(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e))}async isValidType(e,t,a){const{value:r}=e;return!Number.isNaN(G(r))}transform(e,t,a){const{value:r}=e;return{...e,value:G(r)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=E(String(l==null?void 0:l.v))&&E(String(d==null?void 0:d.v));return{formula1:this._parseNumber(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:this._parseNumber(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrNumber(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrNumber(e.formula2),d=se.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:i?"":u}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(ae.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(ae[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}function rt(n){var e,t;if(!n)return[];const s=new Set;for(let a=0,r=n.length;a<r;a++){const i=n[a];if(i)for(let l=0,d=i.length;l<d;l++){const u=i[l],c=N(u);if(c!=null){if(typeof c!="string"&&typeof(u==null?void 0:u.s)=="object"&&((t=(e=u.s)==null?void 0:e.n)!=null&&t.pattern)){s.add(o.numfmt.format(u.s.n.pattern,c,{throws:!1}));continue}const h=typeof c=="string"?c:String(c);E(h)&&s.add(h)}}}return[...s]}const it=["if","indirect","choose","offset"];function ot(n,s){if(!o.isFormulaString(n)||M.isReferenceString(n.slice(1)))return!0;const t=s.sequenceNodesBuilder(n);return t&&t.some(a=>typeof a=="object"&&a.nodeType===M.sequenceNodeType.FUNCTION&&it.indexOf(a.token.toLowerCase())>-1)}function nt(n,s){const{formula1:e="",ranges:t}=n;if(M.isReferenceString(e.slice(1))){const r=M.deserializeRangeWithSheet(e.slice(1));if((!r.sheetName||r.sheetName===s)&&t.some(i=>o.Rectangle.intersects(i,r.range)))return!0}return!1}class _e extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"formulaService",this.injector.get(exports.DataValidationFormulaService));p(this,"_lexer",this.injector.get(M.LexerTreeBuilder));p(this,"_univerInstanceService",this.injector.get(o.IUniverInstanceService));p(this,"_listCacheService",this.injector.get(exports.DataValidationListCacheService));p(this,"order",50);p(this,"offsetFormulaByRange",!1);p(this,"id",o.DataValidationType.LIST);p(this,"title","dataValidation.list.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"skipDefaultFontRender",e=>e.renderMode!==o.DataValidationRenderMode.TEXT)}validatorFormula(e,t,a){var u,c,h;const r=!o.Tools.isBlank(e.formula1),i=ot((u=e.formula1)!=null?u:"",this._lexer),l=(h=(c=this._univerInstanceService.getUnit(t,o.UniverInstanceType.UNIVER_SHEET))==null?void 0:c.getSheetBySheetId(a))==null?void 0:h.getName(),d=nt(e,l!=null?l:"");return{success:!!(r&&i&&!d),formula1:r?i?d?this.localeService.t("dataValidation.validFail.listIntersects"):void 0:this.localeService.t("dataValidation.validFail.listInvalid"):this.localeService.t("dataValidation.validFail.list")}}getExtraStyle(e,t,{style:a}){var i;const r=(i=a.tb!==o.WrapStrategy.OVERFLOW?a.tb:o.WrapStrategy.CLIP)!=null?i:o.WrapStrategy.WRAP;if(e.type===o.DataValidationType.LIST&&(e.renderMode===o.DataValidationRenderMode.ARROW||e.renderMode===o.DataValidationRenderMode.TEXT)){const l=this.getListWithColorMap(e),d=`${t!=null?t:""}`,u=l[d];if(u)return{bg:{rgb:u},tb:r}}return{tb:r}}parseCellValue(e){const t=e.toString();return W(t)}async parseFormula(e,t,a){var d,u;const r=await this.formulaService.getRuleFormulaResult(t,a,e.uid),i=L((u=(d=r==null?void 0:r[0])==null?void 0:d.result)==null?void 0:u[0][0]);return{formula1:void 0,formula2:void 0,isFormulaValid:E(String(i))}}async isValidType(e,t,a){const{value:r,unitId:i,subUnitId:l}=e,{formula1:d=""}=a,u=o.isFormulaString(d)?this._listCacheService.getOrCompute(i,l,a).list:W(d);return this.parseCellValue(r).every(h=>u.includes(h))}generateRuleName(){return this.localeService.t("dataValidation.list.name")}generateRuleErrorMessage(){return this.localeService.t("dataValidation.list.error")}_getUnitAndSubUnit(e,t){var i,l;const a=(i=e?this._univerInstanceService.getUniverSheetInstance(e):void 0)!=null?i:this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET);if(!a)return null;const r=(l=t?a.getSheetBySheetId(t):void 0)!=null?l:a.getActiveSheet();return r?{unitId:a.getUnitId(),subUnitId:r.getSheetId()}:null}getList(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return[];const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).list}async getListAsync(e,t,a){var c,h;const{formula1:r=""}=e,i=this._getUnitAndSubUnit(t,a);if(!i)return[];const{unitId:l,subUnitId:d}=i,u=await this.formulaService.getRuleFormulaResult(l,d,e.uid);return o.isFormulaString(r)?rt((h=(c=u==null?void 0:u[0])==null?void 0:c.result)==null?void 0:h[0][0]):W(r)}getListWithColor(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return[];const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).listWithColor}getListWithColorMap(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return{};const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).colorMap}}class st extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.TEXT_LENGTH);p(this,"title","dataValidation.textLength.title");p(this,"_lexerTreeBuilder",this.injector.get(M.LexerTreeBuilder));p(this,"order",30);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"]);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService))}_isFormulaOrInt(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!1};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),d=se.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:u}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=E(String(l==null?void 0:l.v))&&E(String(d==null?void 0:d.v));return{formula1:this._parseNumber(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:this._parseNumber(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}transform(e,t,a){return{...e,value:e.value.toString().length}}async isValidType(e,t,a){const{value:r}=e;return typeof r=="string"||typeof r=="number"}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(g.TextLengthErrorTitleMap[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}function Oe(n){var e,t;return n?n.p?!((t=(e=n.p.body)==null?void 0:e.dataStream)!=null?t:"").slice(0,-2).trim():o.Tools.isBlank(n.v):!0}function K(n,s,e,t,a="command",r=!0){const i=t.get(M.LexerTreeBuilder),l=t.get(g.DataValidatorRegistryService),d=[],u=[],c=t.get(exports.SheetDataValidationModel),h=t.get(o.IUniverInstanceService),m=R.getSheetCommandTarget(h,{unitId:n,subUnitId:s});if(!m)return{redoMutations:d,undoMutations:u};const{worksheet:S}=m,v=new o.ObjectMatrix;let _=!1;function V(f,D){r&&f.forEach(y=>{o.Range.foreach(y,(T,O)=>{const C=S.getCellRaw(T,O),A=ye(C);(Oe(C)||A===D)&&!(C!=null&&C.p)&&(_=!0,v.setValue(T,O,{v:D,p:null}))})})}if(e.forEach(f=>{switch(f.type){case"delete":d.push({id:g.RemoveDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.rule.uid,source:a}}),u.unshift({id:g.AddDataValidationMutation.id,params:{unitId:n,subUnitId:s,rule:f.rule,index:f.index,source:a}});break;case"update":{if(Y(f.rule.type,l)){const y=f.oldRanges[0].startRow,T=f.oldRanges[0].startColumn,O=f.newRanges[0].startRow,C=f.newRanges[0].startColumn,A=O-y,z=C-T,Z=o.isFormulaString(f.rule.formula1)?i.moveFormulaRefOffset(f.rule.formula1,z,A):f.rule.formula1,J=o.isFormulaString(f.rule.formula2)?i.moveFormulaRefOffset(f.rule.formula2,z,A):f.rule.formula2;Z!==f.rule.formula1||J!==f.rule.formula2||!o.isRangesEqual(f.newRanges,f.oldRanges)?(d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.ALL,payload:{formula1:Z,formula2:J,ranges:f.newRanges}}}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.ALL,payload:{formula1:f.rule.formula1,formula2:f.rule.formula2,ranges:f.oldRanges}}}})):(d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.newRanges},source:a}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.oldRanges},source:a}}))}else d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.newRanges},source:a}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.oldRanges},source:a}});const D=c.getRuleById(n,s,f.ruleId);if(D&&D.type===o.DataValidationType.CHECKBOX){const T=c.getValidator(o.DataValidationType.CHECKBOX).parseFormulaSync(D,n,s);V(f.newRanges,T.formula2)}break}case"add":{if(d.push({id:g.AddDataValidationMutation.id,params:{unitId:n,subUnitId:s,rule:f.rule,source:a}}),u.unshift({id:g.RemoveDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.rule.uid,source:a}}),f.rule.type===o.DataValidationType.CHECKBOX){const y=c.getValidator(o.DataValidationType.CHECKBOX).parseFormulaSync(f.rule,n,s);V(f.rule.ranges,y.originFormula2)}break}}}),_){const f={id:R.SetRangeValuesMutation.id,params:{unitId:n,subUnitId:s,cellValue:v.getData()}},D={id:R.SetRangeValuesMutation.id,params:R.SetRangeValuesUndoMutationFactory(t,f.params)};d.push(f),u.push(D)}return{redoMutations:d,undoMutations:u}}const Fe={type:o.CommandType.COMMAND,id:"sheet.command.updateDataValidationRuleRange",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a,ruleId:r}=s,i=n.get(exports.SheetDataValidationModel),l=n.get(o.ICommandService),d=n.get(o.IUndoRedoService);if(!i.getRuleById(e,t,r))return!1;const c=i.getRuleObjectMatrix(e,t).clone();c.updateRange(r,a);const h=c.diff(i.getRules(e,t)),{redoMutations:m,undoMutations:S}=K(e,t,h,n);return d.pushUndoRedo({undoMutations:S,redoMutations:m,unitID:e}),o.sequenceExecute(m,l),!0}},Ie={type:o.CommandType.COMMAND,id:"sheet.command.addDataValidation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,rule:a}=s,r=n.get(exports.SheetDataValidationModel),i=n.get(o.ICommandService),l=n.get(o.IUndoRedoService),d=r.getRuleObjectMatrix(e,t).clone();d.addRule(a);const u=d.diff(r.getRules(e,t)),c=r.getValidator(a.type),h={unitId:e,subUnitId:t,rule:{...a,...c==null?void 0:c.normalizeFormula(a,e,t)}},{redoMutations:m,undoMutations:S}=K(e,t,u,n);return m.push({id:g.AddDataValidationMutation.id,params:h}),S.unshift({id:g.RemoveDataValidationMutation.id,params:{unitId:e,subUnitId:t,ruleId:a.uid}}),l.pushUndoRedo({unitID:e,redoMutations:m,undoMutations:S}),o.sequenceExecute(m,i),!0}},Ne={type:o.CommandType.COMMAND,id:"sheets.command.update-data-validation-setting",handler(n,s){if(!s)return!1;const e=n.get(o.ICommandService),t=n.get(o.IUndoRedoService),a=n.get(exports.SheetDataValidationModel),r=n.get(g.DataValidatorRegistryService),{unitId:i,subUnitId:l,ruleId:d,setting:u}=s,c=r.getValidatorItem(u.type);if(!c)return!1;const h=a.getRuleById(i,l,d);if(!h)return!1;const m={...h,...u};if(!c.validatorFormula(m,i,l).success)return!1;const S={unitId:i,subUnitId:l,ruleId:d,payload:{type:g.UpdateRuleType.SETTING,payload:{...u,...c.normalizeFormula(m,i,l)}}},v=[{id:g.UpdateDataValidationMutation.id,params:S}],_={unitId:i,subUnitId:l,ruleId:d,payload:{type:g.UpdateRuleType.SETTING,payload:g.getRuleSetting(h)}},V=[{id:g.UpdateDataValidationMutation.id,params:_}];if(u.type===o.DataValidationType.CHECKBOX){const D=h.ranges,y=n.get(o.IUniverInstanceService),T=R.getSheetCommandTarget(y,{unitId:i,subUnitId:l});if(T){const O=new o.ObjectMatrix,{worksheet:C}=T,{formula2:A=k,formula1:z=$}=h,{formula2:Z=k,formula1:J=$}=u;let de=!1;if(D.forEach(ee=>{o.Range.foreach(ee,(x,ue)=>{const F=C.getCellRaw(x,ue),Ve=ye(F);(Oe(F)||Ve===String(A))&&!(F!=null&&F.p)?(O.setValue(x,ue,{v:Z,p:null}),de=!0):Ve===String(z)&&!(F!=null&&F.p)&&(O.setValue(x,ue,{v:J,p:null}),de=!0)})}),de){const ee={id:R.SetRangeValuesMutation.id,params:{unitId:i,subUnitId:l,cellValue:O.getData()}},x={id:R.SetRangeValuesMutation.id,params:R.SetRangeValuesUndoMutationFactory(n,ee.params)};v.push(ee),V.push(x)}}}return o.sequenceExecute(v,e).result?(t.pushUndoRedo({unitID:i,redoMutations:v,undoMutations:V}),!0):!1}},Ae={type:o.CommandType.COMMAND,id:"sheets.command.update-data-validation-options",handler(n,s){if(!s)return!1;const e=n.get(o.ICommandService),t=n.get(o.IUndoRedoService),a=n.get(exports.SheetDataValidationModel),{unitId:r,subUnitId:i,ruleId:l,options:d}=s,u=a.getRuleById(r,i,l);if(!u)return!1;const c={unitId:r,subUnitId:i,ruleId:l,payload:{type:g.UpdateRuleType.OPTIONS,payload:d}},h=[{id:g.UpdateDataValidationMutation.id,params:c}],m={unitId:r,subUnitId:i,ruleId:l,payload:{type:g.UpdateRuleType.OPTIONS,payload:g.getRuleOptions(u)}},S=[{id:g.UpdateDataValidationMutation.id,params:m}];return t.pushUndoRedo({unitID:r,redoMutations:h,undoMutations:S}),e.executeCommand(g.UpdateDataValidationMutation.id,c),!0}},Ue={type:o.CommandType.COMMAND,id:"sheets.command.clear-range-data-validation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a}=s,r=n.get(o.ICommandService),i=n.get(o.IUniverInstanceService),l=R.getSheetCommandTarget(i,{unitId:e,subUnitId:t}),d=n.get(exports.SheetDataValidationModel);if(!l)return!1;const u=n.get(o.IUndoRedoService),c=d.getRuleObjectMatrix(e,t).clone();c.removeRange(a);const h=c.diff(d.getRules(e,t)),{redoMutations:m,undoMutations:S}=K(e,t,h,n);return u.pushUndoRedo({unitID:e,redoMutations:m,undoMutations:S}),o.sequenceExecute(m,r).result}},we={type:o.CommandType.COMMAND,id:"sheet.command.remove-all-data-validation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t}=s,a=n.get(o.ICommandService),r=n.get(exports.SheetDataValidationModel),i=n.get(o.IUndoRedoService),l=[...r.getRules(e,t)],d={unitId:e,subUnitId:t,ruleId:l.map(h=>h.uid)},u=[{id:g.RemoveDataValidationMutation.id,params:d}],c=[{id:g.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:l}}];return i.pushUndoRedo({redoMutations:u,undoMutations:c,unitID:e}),a.executeCommand(g.RemoveDataValidationMutation.id,d),!0}},lt=(n,s)=>{const e=n.get(exports.SheetDataValidationModel),{unitId:t,subUnitId:a,ruleId:r,source:i}=s;if(Array.isArray(r)){const d=r.map(u=>e.getRuleById(t,a,u)).filter(Boolean);return[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:d,source:i}}]}return[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:{...e.getRuleById(t,a,r)},index:e.getRuleIndex(t,a,r)}}]},be={type:o.CommandType.COMMAND,id:"sheet.command.remove-data-validation-rule",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ruleId:a}=s,r=n.get(o.ICommandService),i=n.get(o.IUndoRedoService),l=n.get(exports.SheetDataValidationModel),d=[{id:g.RemoveDataValidationMutation.id,params:s}],u=[{id:g.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:{...l.getRuleById(e,t,a)},index:l.getRuleIndex(e,t,a)}}];return i.pushUndoRedo({undoMutations:u,redoMutations:d,unitID:s.unitId}),r.executeCommand(g.RemoveDataValidationMutation.id,s),!0}},Le="SHEET_DATA_VALIDATION_PLUGIN";var Be=(n=>(n[n.View=0]="View",n[n.Edit=1]="Edit",n[n.ManageCollaborator=2]="ManageCollaborator",n[n.Print=3]="Print",n[n.Duplicate=4]="Duplicate",n[n.Comment=5]="Comment",n[n.Copy=6]="Copy",n[n.Share=7]="Share",n[n.Export=8]="Export",n[n.MoveWorksheet=9]="MoveWorksheet",n[n.DeleteWorksheet=10]="DeleteWorksheet",n[n.HideWorksheet=11]="HideWorksheet",n[n.RenameWorksheet=12]="RenameWorksheet",n[n.CreateWorksheet=13]="CreateWorksheet",n[n.SetWorksheetStyle=14]="SetWorksheetStyle",n[n.EditWorksheetCell=15]="EditWorksheetCell",n[n.InsertHyperlink=16]="InsertHyperlink",n[n.Sort=17]="Sort",n[n.Filter=18]="Filter",n[n.PivotTable=19]="PivotTable",n[n.FloatImg=20]="FloatImg",n[n.History=21]="History",n[n.RwHgtClWdt=22]="RwHgtClWdt",n[n.ViemRwHgtClWdt=23]="ViemRwHgtClWdt",n[n.ViewFilter=24]="ViewFilter",n[n.MoveSheet=25]="MoveSheet",n[n.DeleteSheet=26]="DeleteSheet",n[n.HideSheet=27]="HideSheet",n[n.CopySheet=28]="CopySheet",n[n.RenameSheet=29]="RenameSheet",n[n.CreateSheet=30]="CreateSheet",n[n.SelectProtectedCells=31]="SelectProtectedCells",n[n.SelectUnProtectedCells=32]="SelectUnProtectedCells",n[n.SetCellStyle=33]="SetCellStyle",n[n.SetCellValue=34]="SetCellValue",n[n.SetRowStyle=35]="SetRowStyle",n[n.SetColumnStyle=36]="SetColumnStyle",n[n.InsertRow=37]="InsertRow",n[n.InsertColumn=38]="InsertColumn",n[n.DeleteRow=39]="DeleteRow",n[n.DeleteColumn=40]="DeleteColumn",n[n.EditExtraObject=41]="EditExtraObject",n[n.Delete=42]="Delete",n[n.RecoverHistory=43]="RecoverHistory",n[n.ViewHistory=44]="ViewHistory",n[n.CreatePermissionObject=45]="CreatePermissionObject",n[n.UNRECOGNIZED=-1]="UNRECOGNIZED",n))(Be||{}),dt=Object.getOwnPropertyDescriptor,ut=(n,s,e,t)=>{for(var a=t>1?void 0:t?dt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},me=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationFormulaController=class extends o.Disposable{constructor(s,e,t){super(),this._univerInstanceService=s,this._permissionService=e,this._lexerTreeBuilder=t}getFormulaRefCheck(s){var t,a;const e=this._lexerTreeBuilder.sequenceNodesBuilder(s);if(!e)return!0;for(let r=0;r<e.length;r++){const i=e[r];if(typeof i=="string")continue;const{token:l}=i,d=M.deserializeRangeWithSheetWithCache(l),u=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET);let c=u.getActiveSheet();const h=u.getUnitId();if(d.sheetName){if(c=u.getSheetBySheetName(d.sheetName),!c)return!1;const V=c==null?void 0:c.getSheetId();if(!this._permissionService.getPermissionPoint(new R.WorksheetViewPermission(h,V).id))return!1}if(!c)return!1;const{startRow:m,endRow:S,startColumn:v,endColumn:_}=d.range;for(let V=m;V<=S;V++)for(let f=v;f<=_;f++){const D=(a=(t=c.getCell(V,f))==null?void 0:t.selectionProtection)==null?void 0:a[0];if((D==null?void 0:D[Be.View])===!1)return!1}}return!0}};exports.DataValidationFormulaController=ut([me(0,o.IUniverInstanceService),me(1,o.IPermissionService),me(2,o.Inject(M.LexerTreeBuilder))],exports.DataValidationFormulaController);const ct="@univerjs/sheets-data-validation",ht="0.16.1-insiders.20260311-074e8ca",xe={name:ct,version:ht},mt="sheets-data-validation.config",Ee={};var pt=Object.getOwnPropertyDescriptor,gt=(n,s,e,t)=>{for(var a=t>1?void 0:t?pt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},pe=(n,s)=>(e,t)=>s(e,t,n);let re=class extends o.Disposable{constructor(s,e,t){super();p(this,"_disposableMap",new Map);p(this,"registerRule",(s,e,t)=>{Y(t.type,this._validatorRegistryService)&&this.register(s,e,t)});this._dataValidationModel=s,this._formulaRefRangeService=e,this._validatorRegistryService=t,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}register(s,e,t){const a=t.ranges,r=t.formula1,i=t.formula2,l=this._formulaRefRangeService.registerRangeFormula(s,e,a,[r!=null?r:"",i!=null?i:""],u=>{if(u.length===0)return{undos:[{id:g.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:t,source:"patched"}}],redos:[{id:g.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,source:"patched"}}]};const c=[],h=[],m=u[0];c.push({id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.ALL,payload:{ranges:m.ranges,formula1:m.formulas[0],formula2:m.formulas[1]}},source:"patched"}}),h.push({id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.ALL,payload:{ranges:a,formula1:r,formula2:i}},source:"patched"}});for(let S=1;S<u.length;S++){const v=u[S],_=o.generateRandomId();c.push({id:g.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:{...t,uid:_,formula1:v.formulas[0],formula2:v.formulas[1],ranges:v.ranges},source:"patched"}}),h.push({id:g.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:_,source:"patched"}})}return{undos:h,redos:c}}),d=this._getIdWithUnitId(s,e,t.uid);this._disposableMap.set(d,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,r]of t)for(const i of r)this.registerRule(e,a,i);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:r}=e;switch(e.type){case"add":{const i=e.rule;this.registerRule(e.unitId,e.subUnitId,i);break}case"remove":{const i=this._disposableMap.get(this._getIdWithUnitId(t,a,r.uid));i&&i.dispose();break}case"update":{const i=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,i.uid));l&&l.dispose(),this.registerRule(e.unitId,e.subUnitId,i);break}}})),this.disposeWithMe(o.toDisposable(()=>{this._disposableMap.forEach(e=>{e.dispose()}),this._disposableMap.clear()}))}};re=gt([pe(0,o.Inject(exports.SheetDataValidationModel)),pe(1,o.Inject(fe.FormulaRefRangeService)),pe(2,o.Inject(g.DataValidatorRegistryService))],re);var St=Object.getOwnPropertyDescriptor,ft=(n,s,e,t)=>{for(var a=t>1?void 0:t?St(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},w=(n,s)=>(e,t)=>s(e,t,n);let ie=class extends o.Disposable{constructor(s,e,t,a,r,i){super();p(this,"_disposableMap",new Map);p(this,"registerRule",(s,e,t)=>{Y(t.type,this._validatorRegistryService)||(this.register(s,e,t),this.registerFormula(s,e,t))});this._dataValidationModel=s,this._injector=e,this._refRangeService=t,this._dataValidationFormulaService=a,this._formulaRefRangeService=r,this._validatorRegistryService=i,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}registerFormula(s,e,t){var u;const a=t.uid,r=this._getIdWithUnitId(s,e,a),i=(u=this._disposableMap.get(r))!=null?u:new Set,l=(c,h)=>{const m=this._dataValidationModel.getRuleById(s,e,a);if(!m)return{redos:[],undos:[]};const S=m[c];if(!S||S===h)return{redos:[],undos:[]};const v={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.SETTING,payload:{type:m.type,formula1:m.formula1,formula2:m.formula2,[c]:h}},source:"patched"},_={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.SETTING,payload:{type:m.type,formula1:m.formula1,formula2:m.formula2}},source:"patched"},V=[{id:g.UpdateDataValidationMutation.id,params:v}],f=[{id:g.UpdateDataValidationMutation.id,params:_}];return{redos:V,undos:f}},d=this._dataValidationFormulaService.getRuleFormulaInfo(s,e,a);if(d){const[c,h]=d;if(c){const m=this._formulaRefRangeService.registerFormula(s,e,c.text,S=>l("formula1",S));i.add(()=>m.dispose())}if(h){const m=this._formulaRefRangeService.registerFormula(s,e,h.text,S=>l("formula2",S));i.add(()=>m.dispose())}}}register(s,e,t){var d;const a=u=>{const c=[...t.ranges],m=c.map(v=>R.handleCommonDefaultRangeChangeWithEffectRefCommands(v,u)).filter(v=>!!v).flat();if(o.isRangesEqual(m,c))return{redos:[],undos:[]};if(m.length){const v={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.RANGE,payload:m},source:"patched"},_=[{id:g.UpdateDataValidationMutation.id,params:v}],V=[{id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.RANGE,payload:c},source:"patched"}}];return{redos:_,undos:V}}else{const v={unitId:s,subUnitId:e,ruleId:t.uid},_=[{id:g.RemoveDataValidationMutation.id,params:v}],V=lt(this._injector,v);return{redos:_,undos:V}}},r=[];t.ranges.forEach(u=>{const c=this._refRangeService.registerRefRange(u,a,s,e);r.push(()=>c.dispose())});const i=this._getIdWithUnitId(s,e,t.uid),l=(d=this._disposableMap.get(i))!=null?d:new Set;l.add(()=>r.forEach(u=>u())),this._disposableMap.set(i,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,r]of t)for(const i of r)this.registerRule(e,a,i);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:r}=e;switch(e.type){case"add":{const i=e.rule;this.registerRule(e.unitId,e.subUnitId,i);break}case"remove":{const i=this._disposableMap.get(this._getIdWithUnitId(t,a,r.uid));i&&i.forEach(l=>l());break}case"update":{const i=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,i.uid));l&&l.forEach(d=>d()),this.registerRule(e.unitId,e.subUnitId,i);break}}})),this.disposeWithMe(o.toDisposable(()=>{this._disposableMap.forEach(e=>{e.forEach(t=>t())}),this._disposableMap.clear()}))}};ie=ft([w(0,o.Inject(exports.SheetDataValidationModel)),w(1,o.Inject(o.Injector)),w(2,o.Inject(R.RefRangeService)),w(3,o.Inject(exports.DataValidationFormulaService)),w(4,o.Inject(fe.FormulaRefRangeService)),w(5,o.Inject(g.DataValidatorRegistryService))],ie);var vt=Object.getOwnPropertyDescriptor,_t=(n,s,e,t)=>{for(var a=t>1?void 0:t?vt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},ge=(n,s)=>(e,t)=>s(e,t,n);let oe=class extends o.Disposable{constructor(n,s,e){super(),this._sheetInterceptorService=n,this._univerInstanceService=s,this._sheetDataValidationModel=e,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:n=>{var s;if(n.id===R.RemoveSheetCommand.id){const e=n.params,t=e.unitId||this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET).getUnitId(),a=this._univerInstanceService.getUniverSheetInstance(t);if(!a)return{redos:[],undos:[]};const r=e.subUnitId||((s=a.getActiveSheet())==null?void 0:s.getSheetId());if(!r)return{redos:[],undos:[]};const i=this._sheetDataValidationModel.getRules(t,r);if(i.length===0)return{redos:[],undos:[]};const l=i.map(c=>c.uid),d={unitId:t,subUnitId:r,ruleId:l,source:"patched"},u={unitId:t,subUnitId:r,rule:[...i],source:"patched"};return{redos:[{id:g.RemoveDataValidationMutation.id,params:d}],undos:[{id:g.AddDataValidationMutation.id,params:u}]}}else if(n.id===R.CopySheetCommand.id){const e=n.params,{unitId:t,subUnitId:a,targetSubUnitId:r}=e;if(!t||!a||!r)return{redos:[],undos:[]};const i=this._sheetDataValidationModel.getRules(t,a);if(i.length===0)return{redos:[],undos:[]};const l=i.map(d=>({...d,uid:o.generateRandomId(6)}));return{redos:[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:r,rule:l,source:"patched"}}],undos:[{id:g.RemoveDataValidationMutation.id,params:{unitId:t,subUnitId:r,ruleId:l.map(d=>d.uid),source:"patched"}}]}}return{redos:[],undos:[]}}}))}};oe=_t([ge(0,o.Inject(R.SheetInterceptorService)),ge(1,o.Inject(o.IUniverInstanceService)),ge(2,o.Inject(exports.SheetDataValidationModel))],oe);class Vt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.ANY);p(this,"title","dataValidation.any.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",0);p(this,"offsetFormulaByRange",!1)}async parseFormula(e,t,a){return{formula1:e.formula1,formula2:e.formula2,isFormulaValid:!0}}validatorFormula(e,t,a){return{success:!0}}async isValidType(e,t,a){return!0}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.any.error")}}class Rt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.CUSTOM);p(this,"title","dataValidation.custom.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",60);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(M.LexerTreeBuilder))}validatorFormula(e,t,a){var u;const r=o.isFormulaString(e.formula1),i=(u=e.formula1)!=null?u:"",d=this._lexerTreeBuilder.checkIfAddBracket(i)===0&&i.startsWith(M.operatorToken.EQUALS);return{success:r&&d,formula1:r&&d?"":this.localeService.t("dataValidation.validFail.formula")}}async parseFormula(e,t,a){return{formula1:void 0,formula2:void 0,isFormulaValid:!0}}async isValidType(e,t,a){const{column:r,row:i,unitId:l,subUnitId:d}=e,u=await this._customFormulaService.getCellFormulaValue(l,d,a.uid,i,r),c=u==null?void 0:u.v;return E(String(c))&&o.Tools.isDefine(c)&&c!==""?u.t===o.CellValueType.BOOLEAN?!!c:typeof c=="boolean"?c:typeof c=="number"?!!c:typeof c=="string"?E(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 je extends _e{constructor(){super(...arguments);p(this,"id",o.DataValidationType.LIST_MULTIPLE);p(this,"title","dataValidation.listMultiple.title");p(this,"offsetFormulaByRange",!1);p(this,"skipDefaultFontRender",()=>!0)}}class Dt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(M.LexerTreeBuilder));p(this,"id",o.DataValidationType.WHOLE);p(this,"title","dataValidation.whole.title");p(this,"order",10);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"])}_isFormulaOrInt(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}async isValidType(e,t,a){const{value:r}=e,i=G(r);return!Number.isNaN(i)&&Number.isInteger(i)}transform(e,t,a){const{value:r}=e;return{...e,value:G(r)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=o.isFormulaString(u)?l==null?void 0:l.v:u,m=o.isFormulaString(c)?d==null?void 0:d.v:c,S=E(`${h}`)&&E(`${m}`);return{formula1:this._parseNumber(h),formula2:this._parseNumber(m),isFormulaValid:S}}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),d=se.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:u}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(ae.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(ae[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}var Mt=Object.getOwnPropertyDescriptor,Et=(n,s,e,t)=>{for(var a=t>1?void 0:t?Mt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},b=(n,s)=>(e,t)=>s(e,t,n);let ne=class extends o.RxDisposable{constructor(n,s,e,t,a,r){super(),this._univerInstanceService=n,this._dataValidatorRegistryService=s,this._injector=e,this._selectionManagerService=t,this._sheetInterceptorService=a,this._sheetDataValidationModel=r,this._init()}_init(){this._registerValidators(),this._initCommandInterceptor()}_registerValidators(){[Vt,at,Dt,st,Ce,Te,_e,je,Rt].forEach(n=>{const s=this._injector.createInstance(n);this.disposeWithMe(this._dataValidatorRegistryService.register(s)),this.disposeWithMe(o.toDisposable(()=>this._injector.delete(n)))})}_initCommandInterceptor(){this._sheetInterceptorService.interceptCommand({getMutations:n=>{var s;if(n.id===R.ClearSelectionAllCommand.id){const e=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET),t=e.getUnitId(),a=e.getActiveSheet();if(!a)throw new Error("No active sheet found");const r=a.getSheetId(),i=(s=this._selectionManagerService.getCurrentSelections())==null?void 0:s.map(h=>h.range),l=this._sheetDataValidationModel.getRuleObjectMatrix(t,r).clone();i&&l.removeRange(i);const d=l.diff(this._sheetDataValidationModel.getRules(t,r)),{redoMutations:u,undoMutations:c}=K(t,r,d,this._injector,"patched");return{undos:c,redos:u}}return{undos:[],redos:[]}}})}};ne=Et([b(0,o.IUniverInstanceService),b(1,o.Inject(g.DataValidatorRegistryService)),b(2,o.Inject(o.Injector)),b(3,o.Inject(R.SheetsSelectionsService)),b(4,o.Inject(R.SheetInterceptorService)),b(5,o.Inject(exports.SheetDataValidationModel))],ne);var yt=Object.getOwnPropertyDescriptor,Tt=(n,s,e,t)=>{for(var a=t>1?void 0:t?yt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},te=(n,s)=>(e,t)=>s(e,t,n);exports.SheetsDataValidationValidatorService=class extends o.Disposable{constructor(s,e,t,a){super(),this._univerInstanceService=s,this._sheetDataValidationModel=e,this._dataValidationCacheService=t,this._lifecycleService=a,this._initRecalculate()}_initRecalculate(){const s=e=>{if(e.length===0)return;const t=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET),a=t==null?void 0:t.getActiveSheet(),r={};e.flat().forEach(i=>{r[i.unitId]||(r[i.unitId]={}),r[i.unitId][i.subUnitId]||(r[i.unitId][i.subUnitId]=[]);const l=this._univerInstanceService.getUnit(i.unitId,o.UniverInstanceType.UNIVER_SHEET),d=l==null?void 0:l.getSheetBySheetId(i.subUnitId);d&&r[i.unitId][i.subUnitId].push(...i.ranges.map(u=>o.Range.transformRange(u,d)))}),Object.entries(r).forEach(([i,l])=>{Object.entries(l).forEach(([d,u])=>{(t==null?void 0:t.getUnitId())===i&&(a==null?void 0:a.getSheetId())===d?this.validatorRanges(i,d,u):requestIdleCallback(()=>{this.validatorRanges(i,d,u)})})})};this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(B.bufferWhen(()=>this._lifecycleService.lifecycle$.pipe(B.filter(e=>e===o.LifecycleStages.Rendered)))).subscribe(s)),this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(B.filter(()=>this._lifecycleService.stage>=o.LifecycleStages.Rendered),o.bufferDebounceTime(20)).subscribe(s))}async _validatorByCell(s,e,t,a){const r=s.getUnitId(),i=e.getSheetId();if(!o.Tools.isDefine(t)||!o.Tools.isDefine(a))throw new Error(`row or col is not defined, row: ${t}, col: ${a}`);let l=t,d=a;const u=e.getMergedCell(t,a);u&&(l=u.startRow,d=u.startColumn);const c=this._sheetDataValidationModel.getRuleByLocation(r,i,l,d);return c?new Promise(h=>{this._sheetDataValidationModel.validator(c,{unitId:r,subUnitId:i,row:l,col:d,worksheet:e,workbook:s},m=>{h(m)})}):o.DataValidationStatus.VALID}async validatorCell(s,e,t,a){const r=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!r)throw new Error(`cannot find current workbook, unitId: ${s}`);const i=r.getSheetBySheetId(e);if(!i)throw new Error(`cannot find current worksheet, sheetId: ${e}`);return this._validatorByCell(r,i,t,a)}async validatorRanges(s,e,t){if(!t.length)return Promise.resolve([]);const a=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!a)throw new Error(`cannot find current workbook, unitId: ${s}`);const r=a.getSheetBySheetId(e);if(!r)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const l=this._sheetDataValidationModel.getRules(s,e).map(h=>h.ranges).flat(),d=t.map(h=>l.map(m=>o.getIntersectRange(h,m))).flat().filter(Boolean),u=[],c=await Promise.all(d.map((h,m)=>{const S=[];for(let v=h.startRow;v<=h.endRow;v++)for(let _=h.startColumn;_<=h.endColumn;_++){S.push(this._validatorByCell(a,r,v,_));const V=r.getMergedCell(v,_);V&&u.push({resultRowIndex:m,resultColIndex:S.length-1,row:V.startRow,col:V.startColumn})}return Promise.all(S)}));return u.length&&u.forEach(({resultRowIndex:h,resultColIndex:m,row:S,col:v})=>{var _;c[h][m]===o.DataValidationStatus.VALIDATING&&(c[h][m]=(_=this._dataValidationCacheService.getValue(s,e,S,v))!=null?_:o.DataValidationStatus.VALID)}),c}async validatorWorksheet(s,e){const t=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!t)throw new Error(`cannot find current workbook, unitId: ${s}`);const a=t.getSheetBySheetId(e);if(!a)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const r=this._sheetDataValidationModel.getRules(s,e);return await Promise.all(r.map(i=>Promise.all(i.ranges.map(l=>{const d=[];return o.Range.foreach(l,(u,c)=>{d.push(this._validatorByCell(t,a,u,c))}),Promise.all(d)})))),this._dataValidationCacheService.ensureCache(s,e)}async validatorWorkbook(s){const e=this._sheetDataValidationModel.getSubUnitIds(s),t=await Promise.all(e.map(r=>this.validatorWorksheet(s,r))),a={};return t.forEach((r,i)=>{a[e[i]]=r}),a}getDataValidations(s,e,t){const a=this._sheetDataValidationModel.getRuleObjectMatrix(s,e),r=new Set;return t.forEach(l=>{o.Range.foreach(l,(d,u)=>{const c=a.getValue(d,u);c&&r.add(c)})}),Array.from(r).map(l=>this._sheetDataValidationModel.getRuleById(s,e,l)).filter(Boolean)}getDataValidation(s,e,t){return this.getDataValidations(s,e,t)[0]}};exports.SheetsDataValidationValidatorService=Tt([te(0,o.IUniverInstanceService),te(1,o.Inject(exports.SheetDataValidationModel)),te(2,o.Inject(exports.DataValidationCacheService)),te(3,o.Inject(o.LifecycleService))],exports.SheetsDataValidationValidatorService);var Ct=Object.defineProperty,Ot=Object.getOwnPropertyDescriptor,Ft=(n,s,e)=>s in n?Ct(n,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[s]=e,It=(n,s,e,t)=>{for(var a=t>1?void 0:t?Ot(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},Se=(n,s)=>(e,t)=>s(e,t,n),le=(n,s,e)=>Ft(n,typeof s!="symbol"?s+"":s,e);exports.UniverSheetsDataValidationPlugin=class extends o.Plugin{constructor(s=Ee,e,t,a){super(),this._config=s,this._injector=e,this._commandService=t,this._configService=a;const{...r}=o.merge({},Ee,this._config);this._configService.setConfig(mt,r)}onStarting(){[[exports.DataValidationCacheService],[exports.DataValidationListCacheService],[exports.DataValidationFormulaService],[exports.DataValidationCustomFormulaService],[exports.SheetsDataValidationValidatorService],[exports.SheetDataValidationModel],[ne],[exports.DataValidationFormulaController],[oe],[ie],[re]].forEach(s=>{this._injector.add(s)}),[Ie,Fe,Ne,Ae,be,we,Ue].forEach(s=>{this._commandService.registerCommand(s)}),this._injector.get(exports.DataValidationCacheService),this._injector.get(exports.SheetsDataValidationValidatorService),this._injector.get(ne),this._injector.get(re),this._injector.get(ie)}onReady(){this._injector.get(oe)}onRendered(){this._injector.get(exports.DataValidationFormulaController)}};le(exports.UniverSheetsDataValidationPlugin,"pluginName",Le);le(exports.UniverSheetsDataValidationPlugin,"packageName",xe.name);le(exports.UniverSheetsDataValidationPlugin,"version",xe.version);le(exports.UniverSheetsDataValidationPlugin,"type",o.UniverInstanceType.UNIVER_SHEET);exports.UniverSheetsDataValidationPlugin=It([o.DependentOn(fe.UniverSheetsFormulaPlugin,g.UniverDataValidationPlugin),Se(1,o.Inject(o.Injector)),Se(2,o.ICommandService),Se(3,o.IConfigService)],exports.UniverSheetsDataValidationPlugin);function Nt(n){const e=n.get(R.SheetsSelectionsService).getCurrentSelections().map(r=>r.range);return{uid:o.generateRandomId(6),type:o.DataValidationType.DECIMAL,operator:o.DataValidationOperator.EQUAL,formula1:"100",ranges:e!=null?e:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}const At="data-validation.custom-formula-input",Ut="data-validation.formula-input",wt="data-validation.list-formula-input",bt="data-validation.checkbox-formula-input";exports.AddSheetDataValidationCommand=Ie;exports.BASE_FORMULA_INPUT_NAME=Ut;exports.CHECKBOX_FORMULA_1=$;exports.CHECKBOX_FORMULA_2=k;exports.CHECKBOX_FORMULA_INPUT_NAME=bt;exports.CUSTOM_FORMULA_INPUT_NAME=At;exports.CheckboxValidator=Te;exports.ClearRangeDataValidationCommand=Ue;exports.DATA_VALIDATION_PLUGIN_NAME=Le;exports.DateValidator=Ce;exports.LIST_FORMULA_INPUT_NAME=wt;exports.ListMultipleValidator=je;exports.ListValidator=_e;exports.RemoveSheetAllDataValidationCommand=we;exports.RemoveSheetDataValidationCommand=be;exports.UpdateSheetDataValidationOptionsCommand=Ae;exports.UpdateSheetDataValidationRangeCommand=Fe;exports.UpdateSheetDataValidationSettingCommand=Ne;exports.createDefaultNewRule=Nt;exports.deserializeListOptions=W;exports.getCellValueNumber=G;exports.getCellValueOrigin=N;exports.getDataValidationCellValue=Ge;exports.getDataValidationDiffMutations=K;exports.getFormulaCellData=P;exports.getFormulaResult=L;exports.getTransformedFormula=X;exports.isLegalFormulaResult=E;exports.serializeListOptions=Qe;exports.transformCheckboxValue=H;
1
+ "use strict";var Pe=Object.defineProperty;var He=(n,s,e)=>s in n?Pe(n,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[s]=e;var p=(n,s,e)=>He(n,typeof s!="symbol"?s+"":s,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),g=require("@univerjs/data-validation"),M=require("@univerjs/engine-formula"),R=require("@univerjs/sheets"),B=require("rxjs"),fe=require("@univerjs/sheets-formula");var We=Object.getOwnPropertyDescriptor,$e=(n,s,e,t)=>{for(var a=t>1?void 0:t?We(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},ce=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationCacheService=class extends o.Disposable{constructor(e,t,a){super();p(this,"_cacheMatrix",new Map);p(this,"_dirtyRanges$",new B.Subject);p(this,"dirtyRanges$",this._dirtyRanges$.asObservable());this._commandService=e,this._univerInstanceService=t,this._sheetDataValidationModel=a,this._initDirtyRanges(),this._initSheetRemove()}_initDirtyRanges(){this.disposeWithMe(this._commandService.onCommandExecuted((e,t)=>{if(e.id===R.SetRangeValuesMutation.id&&!(t!=null&&t.onlyLocal)){const{cellValue:a,unitId:r,subUnitId:i}=e.params;if(a){const l=new o.ObjectMatrix(a).getDataRange();if(l.endRow===-1)return;const c=this._sheetDataValidationModel.getRules(r,i).map(h=>h.ranges).flat().map(h=>o.getIntersectRange(h,l)).filter(Boolean);c.length&&this.markRangeDirty(r,i,c,!0)}}}))}_initSheetRemove(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{var t;if(e.id===R.RemoveSheetMutation.id){const{unitId:a,subUnitId:r}=e.params;(t=this._cacheMatrix.get(a))==null||t.delete(r)}})),this.disposeWithMe(this._univerInstanceService.unitDisposed$.subscribe(e=>{e.type===o.UniverInstanceType.UNIVER_SHEET&&this._cacheMatrix.delete(e.getUnitId())}))}_ensureCache(e,t){let a=this._cacheMatrix.get(e);a||(a=new Map,this._cacheMatrix.set(e,a));let r=a.get(t);return r||(r=new o.ObjectMatrix,a.set(t,r)),r}ensureCache(e,t){return this._ensureCache(e,t)}addRule(e,t,a){this.markRangeDirty(e,t,a.ranges)}removeRule(e,t,a){this._deleteRange(e,t,a.ranges)}markRangeDirty(e,t,a,r){const i=this._ensureCache(e,t);a.forEach(l=>{o.Range.foreach(l,(d,u)=>{i.getValue(d,u)!==void 0&&i.setValue(d,u,void 0)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a,isSetRange:r})}_deleteRange(e,t,a){const r=this._ensureCache(e,t);a.forEach(i=>{o.Range.foreach(i,(l,d)=>{r.realDeleteValue(l,d)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a})}getValue(e,t,a,r){return this._ensureCache(e,t).getValue(a,r)}};exports.DataValidationCacheService=$e([ce(0,o.Inject(o.ICommandService)),ce(1,o.Inject(o.IUniverInstanceService)),ce(2,o.Inject(g.DataValidationModel))],exports.DataValidationCacheService);function L(n){var s,e;return(e=(s=n==null?void 0:n[0])==null?void 0:s[0])==null?void 0:e.v}function P(n){var s;return(s=n==null?void 0:n[0])==null?void 0:s[0]}function E(n){return!M.ERROR_TYPE_SET.has(n)}function Y(n,s){var t;const e=s.getValidatorItem(n);return(t=e==null?void 0:e.offsetFormulaByRange)!=null?t:!1}var ke=Object.getOwnPropertyDescriptor,qe=(n,s,e,t)=>{for(var a=t>1?void 0:t?ke(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},j=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationCustomFormulaService=class extends o.Disposable{constructor(e,t,a,r,i){super();p(this,"_ruleFormulaMap",new Map);p(this,"_ruleFormulaMap2",new Map);this._instanceSrv=e,this._registerOtherFormulaService=t,this._dataValidationModel=a,this._dataValidationCacheService=r,this._validatorRegistryService=i,this._initFormulaResultHandler(),this._initDirtyRanges()}dispose(){super.dispose(),this._ruleFormulaMap.clear(),this._ruleFormulaMap2.clear()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceSrv.getUnitType(t)===o.UniverInstanceType.UNIVER_SHEET)for(const i in a){const l=a[i],{ruleFormulaMap:d}=this._ensureMaps(t,i);l.forEach(u=>{var m,S;const c=d.get((m=u.extra)==null?void 0:m.ruleId),h=this._dataValidationModel.getRuleById(t,i,(S=u.extra)==null?void 0:S.ruleId);h&&c&&this._dataValidationCacheService.markRangeDirty(t,i,h.ranges)})}}}))}_ensureMaps(e,t){let a=this._ruleFormulaMap.get(e),r=this._ruleFormulaMap2.get(e);a||(a=new Map,this._ruleFormulaMap.set(e,a)),r||(r=new Map,this._ruleFormulaMap2.set(e,r));let i=a.get(t);i||(i=new Map,a.set(t,i));let l=r.get(t);return l||(l=new Map,r.set(t,l)),{ruleFormulaMap:i,ruleFormulaMap2:l}}_registerFormula(e,t,a,r,i){return this._registerOtherFormulaService.registerFormulaWithRange(e,t,r,i,{ruleId:a},M.OtherFormulaBizType.DATA_VALIDATION_CUSTOM,a)}_handleDirtyRanges(e,t,a){this._dataValidationModel.getRules(e,t).forEach(i=>{const l=i.ranges;o.Rectangle.doAnyRangesIntersect(l,a)&&this.makeRuleDirty(e,t,i.uid)})}_initDirtyRanges(){this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.subscribe(e=>{e.isSetRange&&this._handleDirtyRanges(e.unitId,e.subUnitId,e.ranges)}))}deleteByRuleId(e,t,a){const{ruleFormulaMap:r,ruleFormulaMap2:i}=this._ensureMaps(e,t),l=this._dataValidationModel.getRuleById(e,t,a),d=r.get(a);if(!l||!d)return;const u=r.get(a);u&&(r.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[u.formulaId]));const c=i.get(a);c&&(i.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[c.formulaId]))}_addFormulaByRange(e,t,a,r,i,l){const{ruleFormulaMap:d,ruleFormulaMap2:u}=this._ensureMaps(e,t),c=l[0].startRow,h=l[0].startColumn;if(r&&o.isFormulaString(r)){const m=this._registerFormula(e,t,a,r,l);d.set(a,{formula:r,originCol:h,originRow:c,formulaId:m})}if(i&&o.isFormulaString(i)){const m=this._registerFormula(e,t,a,i,l);u.set(a,{formula:i,originCol:h,originRow:c,formulaId:m})}}addRule(e,t,a){if(Y(a.type,this._validatorRegistryService)){const{ranges:r,formula1:i,formula2:l,uid:d}=a;this._addFormulaByRange(e,t,d,i,l,r)}}async getCellFormulaValue(e,t,a,r,i){var v,_;const{ruleFormulaMap:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return Promise.resolve(void 0);const u=await this._registerOtherFormulaService.getFormulaValue(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}async getCellFormula2Value(e,t,a,r,i){var v,_;const{ruleFormulaMap2:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return Promise.resolve(void 0);const u=await this._registerOtherFormulaService.getFormulaValue(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}getCellFormulaValueSync(e,t,a,r,i){var v,_;const{ruleFormulaMap:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return;const u=this._registerOtherFormulaService.getFormulaValueSync(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}getCellFormula2ValueSync(e,t,a,r,i){var v,_;const{ruleFormulaMap2:l}=this._ensureMaps(e,t),d=l.get(a);if(!d)return;const u=this._registerOtherFormulaService.getFormulaValueSync(e,t,d.formulaId),{originRow:c,originCol:h}=d,m=r-c,S=i-h;return P((_=(v=u==null?void 0:u.result)==null?void 0:v[m])==null?void 0:_[S])}getRuleFormulaInfo(e,t,a){const{ruleFormulaMap:r}=this._ensureMaps(e,t);return r.get(a)}makeRuleDirty(e,t,a){var l,d,u,c;const r=(d=(l=this._ruleFormulaMap.get(e))==null?void 0:l.get(t))==null?void 0:d.get(a),i=(c=(u=this._ruleFormulaMap2.get(e))==null?void 0:u.get(t))==null?void 0:c.get(a);r&&this._registerOtherFormulaService.markFormulaDirty(e,t,r.formulaId),i&&this._registerOtherFormulaService.markFormulaDirty(e,t,i.formulaId)}};exports.DataValidationCustomFormulaService=qe([j(0,o.IUniverInstanceService),j(1,o.Inject(M.RegisterOtherFormulaService)),j(2,o.Inject(g.DataValidationModel)),j(3,o.Inject(exports.DataValidationCacheService)),j(4,o.Inject(g.DataValidatorRegistryService))],exports.DataValidationCustomFormulaService);function N(n){return o.getOriginCellValue(n)}function ye(n){var s;return String((s=N(n))!=null?s:"")}function Qe(n){return n.filter(Boolean).join(",")}function W(n){return n.split(",").filter(Boolean)}function Ge(n){const s=N(n);return s==null?"":s.toString()}function X(n,s,e){const{formula1:t,formula2:a}=s,r=s.ranges[0].startRow,i=s.ranges[0].startColumn,l=e.row-r,d=e.col-i,u=o.isFormulaString(t)?n.moveFormulaRefOffset(t,d,l,!0):t,c=o.isFormulaString(a)?n.moveFormulaRefOffset(a,d,l,!0):a;return{transformedFormula1:u,transformedFormula2:c}}var Ye=Object.getOwnPropertyDescriptor,Xe=(n,s,e,t)=>{for(var a=t>1?void 0:t?Ye(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},Re=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationListCacheService=class extends o.Disposable{constructor(e,t){super();p(this,"_cache",new Map);this._injector=e,this._dataValidationModel=t,this._initRuleChangeListener()}_initRuleChangeListener(){this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{(e.type==="remove"||e.type==="update")&&this.markRuleDirty(e.unitId,e.subUnitId,e.rule.uid)}))}getOrCompute(e,t,a){const r=this.getCache(e,t,a.uid);if(r)return r;const l=this._injector.get(exports.DataValidationFormulaService).getRuleFormulaResultSync(e,t,a.uid);return this.computeAndCache(e,t,a,l)}_ensureCache(e,t){let a=this._cache.get(e);a||(a=new Map,this._cache.set(e,a));let r=a.get(t);return r||(r=new Map,a.set(t,r)),r}getCache(e,t,a){var r,i;return(i=(r=this._cache.get(e))==null?void 0:r.get(t))==null?void 0:i.get(a)}setCache(e,t,a,r){this._ensureCache(e,t).set(a,r)}markRuleDirty(e,t,a){var r,i;(i=(r=this._cache.get(e))==null?void 0:r.get(t))==null||i.delete(a)}clear(){this._cache.clear()}computeAndCache(e,t,a,r){var v,_,V;const{formula1:i="",formula2:l=""}=a,d=o.isFormulaString(i)?this._getRuleFormulaResultSet((V=(_=(v=r==null?void 0:r[0])==null?void 0:v.result)==null?void 0:_[0])==null?void 0:V[0]):W(i),u=l.split(","),c=d.map((f,D)=>({label:f,color:u[D]||""})),h={};for(const f of c)f.color&&(h[f.label]=f.color);const m=new Set(d),S={list:d,listWithColor:c,colorMap:h,set:m};return this.setCache(e,t,a.uid,S),S}_getRuleFormulaResultSet(e){var a,r;if(!e)return[];const t=new Set;for(let i=0,l=e.length;i<l;i++){const d=e[i];if(d)for(let u=0,c=d.length;u<c;u++){const h=d[u],m=N(h);if(m!=null){if(typeof m!="string"&&typeof(h==null?void 0:h.s)=="object"&&((r=(a=h.s)==null?void 0:a.n)!=null&&r.pattern)){t.add(o.numfmt.format(h.s.n.pattern,m,{throws:!1}));continue}const S=typeof m=="string"?m:String(m);E(S)&&t.add(S)}}}return[...t]}};exports.DataValidationListCacheService=Xe([Re(0,o.Inject(o.Injector)),Re(1,o.Inject(g.DataValidationModel))],exports.DataValidationListCacheService);var Ke=Object.getOwnPropertyDescriptor,ze=(n,s,e,t)=>{for(var a=t>1?void 0:t?Ke(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},U=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationFormulaService=class extends o.Disposable{constructor(e,t,a,r,i,l){super();p(this,"_formulaRuleMap",new Map);this._instanceService=e,this._registerOtherFormulaService=t,this._dataValidationCacheService=a,this._dataValidationModel=r,this._validatorRegistryService=i,this._listCacheService=l,this._initFormulaResultHandler()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceService.getUnitType(t)===o.UniverInstanceType.UNIVER_SHEET)for(const i in a){const l=a[i],d=this._ensureRuleFormulaMap(t,i);l.forEach(u=>{var h;const c=(h=u.extra)==null?void 0:h.ruleId;if(c&&d.get(c)){const m=this._dataValidationModel.getRuleById(t,i,c);m&&(this._listCacheService.markRuleDirty(t,i,c),this._dataValidationCacheService.markRangeDirty(t,i,m.ranges))}})}}}))}_ensureRuleFormulaMap(e,t){let a=this._formulaRuleMap.get(e);a||(a=new Map,this._formulaRuleMap.set(e,a));let r=a.get(t);return r||(r=new Map,a.set(t,r)),r}_registerSingleFormula(e,t,a,r){const i=[{startColumn:0,endColumn:0,startRow:0,endRow:0}];return this._registerOtherFormulaService.registerFormulaWithRange(e,t,a,i,{ruleId:r},M.OtherFormulaBizType.DATA_VALIDATION,r)}addRule(e,t,a){if(!Y(a.type,this._validatorRegistryService)&&a.type!==o.DataValidationType.CHECKBOX){const{formula1:r,formula2:i,uid:l}=a,d=o.isFormulaString(r),u=o.isFormulaString(i);if(!d&&!u)return;const c=this._ensureRuleFormulaMap(e,t),h=[void 0,void 0];if(d){const m=this._registerSingleFormula(e,t,r,l);h[0]={id:m,text:r}}if(u){const m=this._registerSingleFormula(e,t,i,l);h[1]={id:m,text:i}}c.set(l,h)}}removeRule(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(!i)return;const[l,d]=i,u=[l==null?void 0:l.id,d==null?void 0:d.id].filter(Boolean);u.length&&this._registerOtherFormulaService.deleteFormula(e,t,u)}getRuleFormulaResult(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(!i)return Promise.resolve(null);const l=async d=>d&&this._registerOtherFormulaService.getFormulaValue(e,t,d.id);return Promise.all([l(i[0]),l(i[1])])}getRuleFormulaResultSync(e,t,a){const i=this._ensureRuleFormulaMap(e,t).get(a);if(i)return i.map(l=>{if(l)return this._registerOtherFormulaService.getFormulaValueSync(e,t,l.id)})}getRuleFormulaInfo(e,t,a){return this._ensureRuleFormulaMap(e,t).get(a)}};exports.DataValidationFormulaService=ze([U(0,o.IUniverInstanceService),U(1,o.Inject(M.RegisterOtherFormulaService)),U(2,o.Inject(exports.DataValidationCacheService)),U(3,o.Inject(g.DataValidationModel)),U(4,o.Inject(g.DataValidatorRegistryService)),U(5,o.Inject(exports.DataValidationListCacheService))],exports.DataValidationFormulaService);class ve{constructor(s,e,t,a,r=!1){p(this,"_map");p(this,"_tree",new o.RBush);p(this,"_dirty",!0);p(this,"_buildTree",()=>{if(!this._dirty||this._disableTree)return;this._tree.clear();const s=[];this._map.forEach((e,t)=>{e.forEach(a=>{s.push({minX:a.startRow,maxX:a.endRow,minY:a.startColumn,maxY:a.endColumn,ruleId:t})})}),this._tree.load(s),this._dirty=!1});p(this,"_debonceBuildTree",o.debounce(this._buildTree,0));this._unitId=e,this._subUnitId=t,this._univerInstanceService=a,this._disableTree=r,this._map=s,this._buildTree()}get _worksheet(){var s;return(s=this._univerInstanceService.getUnit(this._unitId,o.UniverInstanceType.UNIVER_SHEET))==null?void 0:s.getSheetBySheetId(this._subUnitId)}_addRule(s,e){if(!this._worksheet)return;const t=o.Rectangle.mergeRanges(e.map(a=>o.Range.transformRange(a,this._worksheet)));this._map.forEach((a,r)=>{const i=o.Rectangle.subtractMulti(a,t);i.length===0?this._map.delete(r):this._map.set(r,i)}),this._dirty=!0,this._map.set(s,t),this._debonceBuildTree()}addRule(s){this._addRule(s.uid,s.ranges)}removeRange(s){if(!this._worksheet)return;const e=s.map(t=>o.Range.transformRange(t,this._worksheet));this._map.forEach((t,a)=>{const r=o.Rectangle.subtractMulti(t,e);r.length===0?this._map.delete(a):this._map.set(a,r)}),this._dirty=!0,this._debonceBuildTree()}_removeRule(s){this._map.delete(s),this._dirty=!0,this._debonceBuildTree()}removeRule(s){this._removeRule(s.uid)}updateRange(s,e){this._removeRule(s),this._addRule(s,e)}addRangeRules(s){s.forEach(({id:e,ranges:t})=>{if(!t.length)return;let a=this._map.get(e);a?(this._map.set(e,o.Rectangle.mergeRanges([...a,...t])),a=this._map.get(e)):(a=t,this._map.set(e,a)),this._map.forEach((r,i)=>{if(i===e)return;const l=o.Rectangle.subtractMulti(r,t);l.length===0?this._map.delete(i):this._map.set(i,l)})}),this._dirty=!0,this._debonceBuildTree()}diff(s){const e=[];let t=0;return s.forEach((a,r)=>{var d;const i=(d=this._map.get(a.uid))!=null?d:[],l=a.ranges;i.length!==0&&(i.length!==l.length||i.some((u,c)=>!o.Rectangle.equals(u,l[c])))&&e.push({type:"update",ruleId:a.uid,oldRanges:l,newRanges:o.Rectangle.sort(i),rule:a}),i.length===0&&(e.push({type:"delete",rule:a,index:r-t}),t++)}),e}diffWithAddition(s,e){const t=[];let a=0;return s.forEach((r,i)=>{var u;const l=(u=this._map.get(r.uid))!=null?u:[],d=r.ranges;l.length!==0&&(l.length!==d.length||l.some((c,h)=>!o.Rectangle.equals(c,d[h])))&&t.push({type:"update",ruleId:r.uid,oldRanges:d,newRanges:o.Rectangle.sort(l),rule:r}),l.length===0&&(t.push({type:"delete",rule:r,index:i-a}),a++)}),Array.from(e).forEach(r=>{var l;const i=(l=this._map.get(r.uid))!=null?l:[];t.push({type:"add",rule:{...r,ranges:o.Rectangle.sort(i)}})}),t}clone(){return new ve(new Map(o.Tools.deepClone(Array.from(this._map.entries()))),this._unitId,this._subUnitId,this._univerInstanceService,!0)}getValue(s,e){this._dirty&&this._buildTree();const t=this._tree.search({minX:s,maxX:s,minY:e,maxY:e});return t.length>0?t[0].ruleId:void 0}}var Ze=Object.getOwnPropertyDescriptor,Je=(n,s,e,t)=>{for(var a=t>1?void 0:t?Ze(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},I=(n,s)=>(e,t)=>s(e,t,n);exports.SheetDataValidationModel=class extends o.Disposable{constructor(e,t,a,r,i,l,d){super();p(this,"_ruleMatrixMap",new Map);p(this,"_validStatusChange$",new B.Subject);p(this,"_ruleChange$",new B.Subject);p(this,"ruleChange$",this._ruleChange$.asObservable());p(this,"validStatusChange$",this._validStatusChange$.asObservable());this._dataValidationModel=e,this._univerInstanceService=t,this._dataValidatorRegistryService=a,this._dataValidationCacheService=r,this._dataValidationFormulaService=i,this._dataValidationCustomFormulaService=l,this._commandService=d,this._initRuleUpdateListener(),this.disposeWithMe(()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()}),this._initUniverInstanceListener()}_initUniverInstanceListener(){this.disposeWithMe(this._univerInstanceService.unitDisposed$.subscribe(e=>{this._ruleMatrixMap.delete(e.getUnitId())})),this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===R.RemoveSheetMutation.id){const{unitId:t,subUnitId:a}=e.params,r=this._ruleMatrixMap.get(t);r&&r.delete(a)}}))}_initRuleUpdateListener(){const e=this._dataValidationModel.getAll();for(const[t,a]of e)for(const[r,i]of a)for(const l of i)this._addRule(t,r,l),this._ruleChange$.next({type:"add",unitId:t,subUnitId:r,rule:l,source:"patched"});this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(t=>{switch(t.type){case"add":this._addRule(t.unitId,t.subUnitId,t.rule);break;case"update":this._updateRule(t.unitId,t.subUnitId,t.rule.uid,t.oldRule,t.updatePayload);break;case"remove":this._removeRule(t.unitId,t.subUnitId,t.rule);break}this._ruleChange$.next(t)}))}_ensureRuleMatrix(e,t){let a=this._ruleMatrixMap.get(e);a||(a=new Map,this._ruleMatrixMap.set(e,a));let r=a.get(t);return r||(r=new ve(new Map,e,t,this._univerInstanceService),a.set(t,r)),r}_addRuleSideEffect(e,t,a){this._ensureRuleMatrix(e,t).addRule(a),this._dataValidationCacheService.addRule(e,t,a),this._dataValidationFormulaService.addRule(e,t,a),this._dataValidationCustomFormulaService.addRule(e,t,a)}_addRule(e,t,a){(Array.isArray(a)?a:[a]).forEach(i=>{this._addRuleSideEffect(e,t,i)})}_updateRule(e,t,a,r,i){const l=this._ensureRuleMatrix(e,t),d={...r,...i.payload};i.type===g.UpdateRuleType.RANGE?l.updateRange(a,i.payload):i.type===g.UpdateRuleType.ALL&&l.updateRange(a,i.payload.ranges),this._dataValidationCacheService.removeRule(e,t,r),this._dataValidationCacheService.addRule(e,t,d),this._dataValidationFormulaService.removeRule(e,t,r.uid),this._dataValidationFormulaService.addRule(e,t,d),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a),this._dataValidationCustomFormulaService.addRule(e,t,d)}_removeRule(e,t,a){this._ensureRuleMatrix(e,t).removeRule(a),this._dataValidationCacheService.removeRule(e,t,a),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a.uid)}getValidator(e){return this._dataValidatorRegistryService.getValidatorItem(e)}getRuleIdByLocation(e,t,a,r){return this._ensureRuleMatrix(e,t).getValue(a,r)}getRuleByLocation(e,t,a,r){const i=this.getRuleIdByLocation(e,t,a,r);if(i)return this._dataValidationModel.getRuleById(e,t,i)}validator(e,t,a){const{col:r,row:i,unitId:l,subUnitId:d,worksheet:u}=t,c=(_,V)=>{a&&a(_,V),V&&this._validStatusChange$.next({unitId:l,subUnitId:d,ruleId:e.uid,status:_,row:i,col:r})},h=u.getCellValueOnly(i,r),m=this.getValidator(e.type),S=u.getCellRaw(i,r),v=N(S);if(m){const _=this._dataValidationCacheService.ensureCache(l,d),V=_.getValue(i,r);return V==null?(_.setValue(i,r,o.DataValidationStatus.VALIDATING),m.validator({value:v,unitId:l,subUnitId:d,row:i,column:r,worksheet:t.worksheet,workbook:t.workbook,interceptValue:N(h),t:S==null?void 0:S.t},e).then(f=>{const D=f?o.DataValidationStatus.VALID:o.DataValidationStatus.INVALID,y=_.getValue(i,r);D===o.DataValidationStatus.VALID?_.realDeleteValue(i,r):_.setValue(i,r,D),c(D,V!==y)}),o.DataValidationStatus.VALIDATING):(c(V!=null?V:o.DataValidationStatus.VALID,!1),V!=null?V:o.DataValidationStatus.VALID)}else return c(o.DataValidationStatus.VALID,!1),o.DataValidationStatus.VALID}getRuleObjectMatrix(e,t){return this._ensureRuleMatrix(e,t)}getRuleById(e,t,a){return this._dataValidationModel.getRuleById(e,t,a)}getRuleIndex(e,t,a){return this._dataValidationModel.getRuleIndex(e,t,a)}getRules(e,t){return[...this._dataValidationModel.getRules(e,t)]}getUnitRules(e){return this._dataValidationModel.getUnitRules(e)}deleteUnitRules(e){return this._dataValidationModel.deleteUnitRules(e)}getSubUnitIds(e){return this._dataValidationModel.getSubUnitIds(e)}getAll(){return this._dataValidationModel.getAll()}};exports.SheetDataValidationModel=Je([I(0,o.Inject(g.DataValidationModel)),I(1,o.IUniverInstanceService),I(2,o.Inject(g.DataValidatorRegistryService)),I(3,o.Inject(exports.DataValidationCacheService)),I(4,o.Inject(exports.DataValidationFormulaService)),I(5,o.Inject(exports.DataValidationCustomFormulaService)),I(6,o.ICommandService)],exports.SheetDataValidationModel);const $=1,k=0;function De(n,s){return o.Tools.isBlank(n)?s.t("dataValidation.validFail.value"):o.isFormulaString(n)?s.t("dataValidation.validFail.primitive"):""}const H=n=>o.Tools.isDefine(n)&&String(n).toLowerCase()==="true"?"1":String(n).toLowerCase()==="false"?"0":n;class Te extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.CHECKBOX);p(this,"title","dataValidation.checkbox.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",41);p(this,"offsetFormulaByRange",!1);p(this,"_formulaService",this.injector.get(exports.DataValidationFormulaService));p(this,"skipDefaultFontRender",(e,t,a)=>{const{unitId:r,subUnitId:i}=a,{formula1:l,formula2:d}=this.parseFormulaSync(e,r,i),u=`${t!=null?t:""}`;return!u||u===`${l}`||u===`${d}`})}validatorFormula(e,t,a){const{formula1:r,formula2:i}=e,l=r===i;if(o.Tools.isBlank(r)&&o.Tools.isBlank(i))return{success:!0};if(l)return{success:!1,formula1:this.localeService.t("dataValidation.validFail.checkboxEqual"),formula2:this.localeService.t("dataValidation.validFail.checkboxEqual")};const d=De(r,this.localeService),u=De(i,this.localeService);return{success:!d&&!u,formula1:d,formula2:u}}async parseFormula(e,t,a){var h,m,S,v;const{formula1:r=$,formula2:i=k}=e,l=await this._formulaService.getRuleFormulaResult(t,a,e.uid),d=o.isFormulaString(r)?L((m=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:m[0][0]):r,u=o.isFormulaString(i)?L((v=(S=l==null?void 0:l[1])==null?void 0:S.result)==null?void 0:v[0][0]):i,c=E(String(d))&&E(String(u));return{formula1:H(d),formula2:H(u),originFormula1:d,originFormula2:u,isFormulaValid:c}}getExtraStyle(e,t){return{tb:o.WrapStrategy.CLIP}}parseFormulaSync(e,t,a){var h,m,S,v;const{formula1:r=$,formula2:i=k}=e,l=this._formulaService.getRuleFormulaResultSync(t,a,e.uid),d=o.isFormulaString(r)?L((m=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:m[0][0]):r,u=o.isFormulaString(i)?L((v=(S=l==null?void 0:l[1])==null?void 0:S.result)==null?void 0:v[0][0]):i,c=E(String(d))&&E(String(u));return{formula1:H(d),formula2:H(u),originFormula1:d,originFormula2:u,isFormulaValid:c}}async isValidType(e,t,a){const{value:r,unitId:i,subUnitId:l}=e,{formula1:d,formula2:u,originFormula1:c,originFormula2:h}=await this.parseFormula(a,i,l);return!o.Tools.isDefine(d)||!o.Tools.isDefine(u)?!0:o.Tools.isDefine(r)&&(String(r)===String(d)||String(r)===String(u)||String(r)===String(c!=null?c:"")||String(r)===String(h!=null?h:""))}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.checkbox.error")}generateRuleName(e){return this.titleStr}}const et={[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 Me={[o.DataValidationOperator.BETWEEN]:"dataValidation.date.ruleName.between",[o.DataValidationOperator.EQUAL]:"dataValidation.date.ruleName.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.date.ruleName.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.ruleName.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.date.ruleName.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.ruleName.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.ruleName.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.ruleName.notEqual",NONE:"dataValidation.date.ruleName.legal"},tt={[o.DataValidationOperator.BETWEEN]:"dataValidation.date.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.date.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.date.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.date.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.errorMsg.notEqual",NONE:"dataValidation.date.errorMsg.legal"},se=[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.NOT_BETWEEN],q="{FORMULA1}",Q="{FORMULA2}",he=n=>{var e,t;if(n==null||typeof n=="boolean")return;if(typeof n=="number"||!Number.isNaN(+n))return+n;const s=(e=o.numfmt.parseDate(n))==null?void 0:e.v;return o.Tools.isDefine(s)?s:(t=o.numfmt.parseDate(o.dayjs(n).format("YYYY-MM-DD HH:mm:ss")))==null?void 0:t.v};class Ce extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.DATE);p(this,"title","dataValidation.date.title");p(this,"order",40);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"]);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(M.LexerTreeBuilder))}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=E(String(l==null?void 0:l.v))&&E(String(d==null?void 0:d.v));return{formula1:he(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:he(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}async isValidType(e){const{interceptValue:t,value:a}=e;return typeof a=="number"&&typeof t=="string"||typeof t=="string"?!!o.numfmt.parseDate(t):!1}_validatorSingleFormula(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)||!!(e&&o.numfmt.parseDate(e)))}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=this._validatorSingleFormula(e.formula1),l=this.localeService.t("dataValidation.validFail.date");if(se.includes(r)){const u=this._validatorSingleFormula(e.formula2);return{success:i&&u,formula1:i?void 0:l,formula2:u?void 0:l}}return{success:i,formula1:i?void 0:l}}normalizeFormula(e,t,a){const{formula1:r,formula2:i,bizInfo:l}=e,d=u=>{var h;if(!u)return u;let c;if(!Number.isNaN(+u))c=o.numfmt.dateFromSerial(+u);else{const m=(h=o.numfmt.parseDate(u))==null?void 0:h.v;if(m==null)return"";c=o.numfmt.dateFromSerial(m)}return o.dayjs(`${c[0]}/${c[1]}/${c[2]} ${c[3]}:${c[4]}:${c[5]}`).format(l!=null&&l.showTime?"YYYY-MM-DD HH:mm:ss":"YYYY-MM-DD")};return{formula1:o.isFormulaString(r)?r:d(`${r}`),formula2:o.isFormulaString(i)?i:d(`${i}`)}}transform(e,t,a){const{value:r}=e;return{...e,value:he(r)}}get operatorNames(){return this.operators.map(e=>this.localeService.t(et[e]))}generateRuleName(e){var a,r;if(!e.operator)return this.localeService.t(Me.NONE);const t=this.localeService.t(Me[e.operator]).replace(q,(a=e.formula1)!=null?a:"").replace(Q,(r=e.formula2)!=null?r:"");return`${this.titleStr} ${t}`}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(tt[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const ae={[o.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual",NONE:"dataValidation.errorMsg.legal"};function G(n){return+n}class at extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"id",o.DataValidationType.DECIMAL);p(this,"_lexerTreeBuilder",this.injector.get(M.LexerTreeBuilder));p(this,"title","dataValidation.decimal.title");p(this,"order",20);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"])}_isFormulaOrNumber(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e))}async isValidType(e,t,a){const{value:r}=e;return!Number.isNaN(G(r))}transform(e,t,a){const{value:r}=e;return{...e,value:G(r)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=E(String(l==null?void 0:l.v))&&E(String(d==null?void 0:d.v));return{formula1:this._parseNumber(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:this._parseNumber(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrNumber(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrNumber(e.formula2),d=se.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:i?"":u}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(ae.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(ae[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}function rt(n){var e,t;if(!n)return[];const s=new Set;for(let a=0,r=n.length;a<r;a++){const i=n[a];if(i)for(let l=0,d=i.length;l<d;l++){const u=i[l],c=N(u);if(c!=null){if(typeof c!="string"&&typeof(u==null?void 0:u.s)=="object"&&((t=(e=u.s)==null?void 0:e.n)!=null&&t.pattern)){s.add(o.numfmt.format(u.s.n.pattern,c,{throws:!1}));continue}const h=typeof c=="string"?c:String(c);E(h)&&s.add(h)}}}return[...s]}const it=["if","indirect","choose","offset"];function ot(n,s){if(!o.isFormulaString(n)||M.isReferenceString(n.slice(1)))return!0;const t=s.sequenceNodesBuilder(n);return t&&t.some(a=>typeof a=="object"&&a.nodeType===M.sequenceNodeType.FUNCTION&&it.indexOf(a.token.toLowerCase())>-1)}function nt(n,s){const{formula1:e="",ranges:t}=n;if(M.isReferenceString(e.slice(1))){const r=M.deserializeRangeWithSheet(e.slice(1));if((!r.sheetName||r.sheetName===s)&&t.some(i=>o.Rectangle.intersects(i,r.range)))return!0}return!1}class _e extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"formulaService",this.injector.get(exports.DataValidationFormulaService));p(this,"_lexer",this.injector.get(M.LexerTreeBuilder));p(this,"_univerInstanceService",this.injector.get(o.IUniverInstanceService));p(this,"_listCacheService",this.injector.get(exports.DataValidationListCacheService));p(this,"order",50);p(this,"offsetFormulaByRange",!1);p(this,"id",o.DataValidationType.LIST);p(this,"title","dataValidation.list.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"skipDefaultFontRender",e=>e.renderMode!==o.DataValidationRenderMode.TEXT)}validatorFormula(e,t,a){var u,c,h;const r=!o.Tools.isBlank(e.formula1),i=ot((u=e.formula1)!=null?u:"",this._lexer),l=(h=(c=this._univerInstanceService.getUnit(t,o.UniverInstanceType.UNIVER_SHEET))==null?void 0:c.getSheetBySheetId(a))==null?void 0:h.getName(),d=nt(e,l!=null?l:"");return{success:!!(r&&i&&!d),formula1:r?i?d?this.localeService.t("dataValidation.validFail.listIntersects"):void 0:this.localeService.t("dataValidation.validFail.listInvalid"):this.localeService.t("dataValidation.validFail.list")}}getExtraStyle(e,t,{style:a}){var i;const r=(i=a.tb!==o.WrapStrategy.OVERFLOW?a.tb:o.WrapStrategy.CLIP)!=null?i:o.WrapStrategy.WRAP;if(e.type===o.DataValidationType.LIST&&(e.renderMode===o.DataValidationRenderMode.ARROW||e.renderMode===o.DataValidationRenderMode.TEXT)){const l=this.getListWithColorMap(e),d=`${t!=null?t:""}`,u=l[d];if(u)return{bg:{rgb:u},tb:r}}return{tb:r}}parseCellValue(e){const t=e.toString();return W(t)}async parseFormula(e,t,a){var d,u;const r=await this.formulaService.getRuleFormulaResult(t,a,e.uid),i=L((u=(d=r==null?void 0:r[0])==null?void 0:d.result)==null?void 0:u[0][0]);return{formula1:void 0,formula2:void 0,isFormulaValid:E(String(i))}}async isValidType(e,t,a){const{value:r,unitId:i,subUnitId:l}=e,{formula1:d=""}=a,u=o.isFormulaString(d)?this._listCacheService.getOrCompute(i,l,a).list:W(d);return this.parseCellValue(r).every(h=>u.includes(h))}generateRuleName(){return this.localeService.t("dataValidation.list.name")}generateRuleErrorMessage(){return this.localeService.t("dataValidation.list.error")}_getUnitAndSubUnit(e,t){var i,l;const a=(i=e?this._univerInstanceService.getUniverSheetInstance(e):void 0)!=null?i:this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET);if(!a)return null;const r=(l=t?a.getSheetBySheetId(t):void 0)!=null?l:a.getActiveSheet();return r?{unitId:a.getUnitId(),subUnitId:r.getSheetId()}:null}getList(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return[];const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).list}async getListAsync(e,t,a){var c,h;const{formula1:r=""}=e,i=this._getUnitAndSubUnit(t,a);if(!i)return[];const{unitId:l,subUnitId:d}=i,u=await this.formulaService.getRuleFormulaResult(l,d,e.uid);return o.isFormulaString(r)?rt((h=(c=u==null?void 0:u[0])==null?void 0:c.result)==null?void 0:h[0][0]):W(r)}getListWithColor(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return[];const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).listWithColor}getListWithColorMap(e,t,a){const r=this._getUnitAndSubUnit(t,a);if(!r)return{};const{unitId:i,subUnitId:l}=r;return this._listCacheService.getOrCompute(i,l,e).colorMap}}class st extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.TEXT_LENGTH);p(this,"title","dataValidation.textLength.title");p(this,"_lexerTreeBuilder",this.injector.get(M.LexerTreeBuilder));p(this,"order",30);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"]);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService))}_isFormulaOrInt(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!1};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),d=se.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:u}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=E(String(l==null?void 0:l.v))&&E(String(d==null?void 0:d.v));return{formula1:this._parseNumber(o.isFormulaString(u)?l==null?void 0:l.v:u),formula2:this._parseNumber(o.isFormulaString(c)?d==null?void 0:d.v:c),isFormulaValid:h}}transform(e,t,a){return{...e,value:e.value.toString().length}}async isValidType(e,t,a){const{value:r}=e;return typeof r=="string"||typeof r=="number"}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(g.TextLengthErrorTitleMap[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}function Oe(n){var e,t;return n?n.p?!((t=(e=n.p.body)==null?void 0:e.dataStream)!=null?t:"").slice(0,-2).trim():o.Tools.isBlank(n.v):!0}function K(n,s,e,t,a="command",r=!0){const i=t.get(M.LexerTreeBuilder),l=t.get(g.DataValidatorRegistryService),d=[],u=[],c=t.get(exports.SheetDataValidationModel),h=t.get(o.IUniverInstanceService),m=R.getSheetCommandTarget(h,{unitId:n,subUnitId:s});if(!m)return{redoMutations:d,undoMutations:u};const{worksheet:S}=m,v=new o.ObjectMatrix;let _=!1;function V(f,D){r&&f.forEach(y=>{o.Range.foreach(y,(T,O)=>{const C=S.getCellRaw(T,O),A=ye(C);(Oe(C)||A===D)&&!(C!=null&&C.p)&&(_=!0,v.setValue(T,O,{v:D,p:null}))})})}if(e.forEach(f=>{switch(f.type){case"delete":d.push({id:g.RemoveDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.rule.uid,source:a}}),u.unshift({id:g.AddDataValidationMutation.id,params:{unitId:n,subUnitId:s,rule:f.rule,index:f.index,source:a}});break;case"update":{if(Y(f.rule.type,l)){const y=f.oldRanges[0].startRow,T=f.oldRanges[0].startColumn,O=f.newRanges[0].startRow,C=f.newRanges[0].startColumn,A=O-y,z=C-T,Z=o.isFormulaString(f.rule.formula1)?i.moveFormulaRefOffset(f.rule.formula1,z,A):f.rule.formula1,J=o.isFormulaString(f.rule.formula2)?i.moveFormulaRefOffset(f.rule.formula2,z,A):f.rule.formula2;Z!==f.rule.formula1||J!==f.rule.formula2||!o.isRangesEqual(f.newRanges,f.oldRanges)?(d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.ALL,payload:{formula1:Z,formula2:J,ranges:f.newRanges}}}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.ALL,payload:{formula1:f.rule.formula1,formula2:f.rule.formula2,ranges:f.oldRanges}}}})):(d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.newRanges},source:a}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.oldRanges},source:a}}))}else d.push({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.newRanges},source:a}}),u.unshift({id:g.UpdateDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.ruleId,payload:{type:g.UpdateRuleType.RANGE,payload:f.oldRanges},source:a}});const D=c.getRuleById(n,s,f.ruleId);if(D&&D.type===o.DataValidationType.CHECKBOX){const T=c.getValidator(o.DataValidationType.CHECKBOX).parseFormulaSync(D,n,s);V(f.newRanges,T.formula2)}break}case"add":{if(d.push({id:g.AddDataValidationMutation.id,params:{unitId:n,subUnitId:s,rule:f.rule,source:a}}),u.unshift({id:g.RemoveDataValidationMutation.id,params:{unitId:n,subUnitId:s,ruleId:f.rule.uid,source:a}}),f.rule.type===o.DataValidationType.CHECKBOX){const y=c.getValidator(o.DataValidationType.CHECKBOX).parseFormulaSync(f.rule,n,s);V(f.rule.ranges,y.originFormula2)}break}}}),_){const f={id:R.SetRangeValuesMutation.id,params:{unitId:n,subUnitId:s,cellValue:v.getData()}},D={id:R.SetRangeValuesMutation.id,params:R.SetRangeValuesUndoMutationFactory(t,f.params)};d.push(f),u.push(D)}return{redoMutations:d,undoMutations:u}}const Fe={type:o.CommandType.COMMAND,id:"sheet.command.updateDataValidationRuleRange",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a,ruleId:r}=s,i=n.get(exports.SheetDataValidationModel),l=n.get(o.ICommandService),d=n.get(o.IUndoRedoService);if(!i.getRuleById(e,t,r))return!1;const c=i.getRuleObjectMatrix(e,t).clone();c.updateRange(r,a);const h=c.diff(i.getRules(e,t)),{redoMutations:m,undoMutations:S}=K(e,t,h,n);return d.pushUndoRedo({undoMutations:S,redoMutations:m,unitID:e}),o.sequenceExecute(m,l),!0}},Ie={type:o.CommandType.COMMAND,id:"sheet.command.addDataValidation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,rule:a}=s,r=n.get(exports.SheetDataValidationModel),i=n.get(o.ICommandService),l=n.get(o.IUndoRedoService),d=r.getRuleObjectMatrix(e,t).clone();d.addRule(a);const u=d.diff(r.getRules(e,t)),c=r.getValidator(a.type),h={unitId:e,subUnitId:t,rule:{...a,...c==null?void 0:c.normalizeFormula(a,e,t)}},{redoMutations:m,undoMutations:S}=K(e,t,u,n);return m.push({id:g.AddDataValidationMutation.id,params:h}),S.unshift({id:g.RemoveDataValidationMutation.id,params:{unitId:e,subUnitId:t,ruleId:a.uid}}),l.pushUndoRedo({unitID:e,redoMutations:m,undoMutations:S}),o.sequenceExecute(m,i),!0}},Ne={type:o.CommandType.COMMAND,id:"sheets.command.update-data-validation-setting",handler(n,s){if(!s)return!1;const e=n.get(o.ICommandService),t=n.get(o.IUndoRedoService),a=n.get(exports.SheetDataValidationModel),r=n.get(g.DataValidatorRegistryService),{unitId:i,subUnitId:l,ruleId:d,setting:u}=s,c=r.getValidatorItem(u.type);if(!c)return!1;const h=a.getRuleById(i,l,d);if(!h)return!1;const m={...h,...u};if(!c.validatorFormula(m,i,l).success)return!1;const S={unitId:i,subUnitId:l,ruleId:d,payload:{type:g.UpdateRuleType.SETTING,payload:{...u,...c.normalizeFormula(m,i,l)}}},v=[{id:g.UpdateDataValidationMutation.id,params:S}],_={unitId:i,subUnitId:l,ruleId:d,payload:{type:g.UpdateRuleType.SETTING,payload:g.getRuleSetting(h)}},V=[{id:g.UpdateDataValidationMutation.id,params:_}];if(u.type===o.DataValidationType.CHECKBOX){const D=h.ranges,y=n.get(o.IUniverInstanceService),T=R.getSheetCommandTarget(y,{unitId:i,subUnitId:l});if(T){const O=new o.ObjectMatrix,{worksheet:C}=T,{formula2:A=k,formula1:z=$}=h,{formula2:Z=k,formula1:J=$}=u;let de=!1;if(D.forEach(ee=>{o.Range.foreach(ee,(x,ue)=>{const F=C.getCellRaw(x,ue),Ve=ye(F);(Oe(F)||Ve===String(A))&&!(F!=null&&F.p)?(O.setValue(x,ue,{v:Z,p:null}),de=!0):Ve===String(z)&&!(F!=null&&F.p)&&(O.setValue(x,ue,{v:J,p:null}),de=!0)})}),de){const ee={id:R.SetRangeValuesMutation.id,params:{unitId:i,subUnitId:l,cellValue:O.getData()}},x={id:R.SetRangeValuesMutation.id,params:R.SetRangeValuesUndoMutationFactory(n,ee.params)};v.push(ee),V.push(x)}}}return o.sequenceExecute(v,e).result?(t.pushUndoRedo({unitID:i,redoMutations:v,undoMutations:V}),!0):!1}},Ae={type:o.CommandType.COMMAND,id:"sheets.command.update-data-validation-options",handler(n,s){if(!s)return!1;const e=n.get(o.ICommandService),t=n.get(o.IUndoRedoService),a=n.get(exports.SheetDataValidationModel),{unitId:r,subUnitId:i,ruleId:l,options:d}=s,u=a.getRuleById(r,i,l);if(!u)return!1;const c={unitId:r,subUnitId:i,ruleId:l,payload:{type:g.UpdateRuleType.OPTIONS,payload:d}},h=[{id:g.UpdateDataValidationMutation.id,params:c}],m={unitId:r,subUnitId:i,ruleId:l,payload:{type:g.UpdateRuleType.OPTIONS,payload:g.getRuleOptions(u)}},S=[{id:g.UpdateDataValidationMutation.id,params:m}];return t.pushUndoRedo({unitID:r,redoMutations:h,undoMutations:S}),e.executeCommand(g.UpdateDataValidationMutation.id,c),!0}},Ue={type:o.CommandType.COMMAND,id:"sheets.command.clear-range-data-validation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a}=s,r=n.get(o.ICommandService),i=n.get(o.IUniverInstanceService),l=R.getSheetCommandTarget(i,{unitId:e,subUnitId:t}),d=n.get(exports.SheetDataValidationModel);if(!l)return!1;const u=n.get(o.IUndoRedoService),c=d.getRuleObjectMatrix(e,t).clone();c.removeRange(a);const h=c.diff(d.getRules(e,t)),{redoMutations:m,undoMutations:S}=K(e,t,h,n);return u.pushUndoRedo({unitID:e,redoMutations:m,undoMutations:S}),o.sequenceExecute(m,r).result}},we={type:o.CommandType.COMMAND,id:"sheet.command.remove-all-data-validation",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t}=s,a=n.get(o.ICommandService),r=n.get(exports.SheetDataValidationModel),i=n.get(o.IUndoRedoService),l=[...r.getRules(e,t)],d={unitId:e,subUnitId:t,ruleId:l.map(h=>h.uid)},u=[{id:g.RemoveDataValidationMutation.id,params:d}],c=[{id:g.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:l}}];return i.pushUndoRedo({redoMutations:u,undoMutations:c,unitID:e}),a.executeCommand(g.RemoveDataValidationMutation.id,d),!0}},lt=(n,s)=>{const e=n.get(exports.SheetDataValidationModel),{unitId:t,subUnitId:a,ruleId:r,source:i}=s;if(Array.isArray(r)){const d=r.map(u=>e.getRuleById(t,a,u)).filter(Boolean);return[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:d,source:i}}]}return[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:{...e.getRuleById(t,a,r)},index:e.getRuleIndex(t,a,r)}}]},be={type:o.CommandType.COMMAND,id:"sheet.command.remove-data-validation-rule",handler(n,s){if(!s)return!1;const{unitId:e,subUnitId:t,ruleId:a}=s,r=n.get(o.ICommandService),i=n.get(o.IUndoRedoService),l=n.get(exports.SheetDataValidationModel),d=[{id:g.RemoveDataValidationMutation.id,params:s}],u=[{id:g.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:{...l.getRuleById(e,t,a)},index:l.getRuleIndex(e,t,a)}}];return i.pushUndoRedo({undoMutations:u,redoMutations:d,unitID:s.unitId}),r.executeCommand(g.RemoveDataValidationMutation.id,s),!0}},Le="SHEET_DATA_VALIDATION_PLUGIN";var Be=(n=>(n[n.View=0]="View",n[n.Edit=1]="Edit",n[n.ManageCollaborator=2]="ManageCollaborator",n[n.Print=3]="Print",n[n.Duplicate=4]="Duplicate",n[n.Comment=5]="Comment",n[n.Copy=6]="Copy",n[n.Share=7]="Share",n[n.Export=8]="Export",n[n.MoveWorksheet=9]="MoveWorksheet",n[n.DeleteWorksheet=10]="DeleteWorksheet",n[n.HideWorksheet=11]="HideWorksheet",n[n.RenameWorksheet=12]="RenameWorksheet",n[n.CreateWorksheet=13]="CreateWorksheet",n[n.SetWorksheetStyle=14]="SetWorksheetStyle",n[n.EditWorksheetCell=15]="EditWorksheetCell",n[n.InsertHyperlink=16]="InsertHyperlink",n[n.Sort=17]="Sort",n[n.Filter=18]="Filter",n[n.PivotTable=19]="PivotTable",n[n.FloatImg=20]="FloatImg",n[n.History=21]="History",n[n.RwHgtClWdt=22]="RwHgtClWdt",n[n.ViemRwHgtClWdt=23]="ViemRwHgtClWdt",n[n.ViewFilter=24]="ViewFilter",n[n.MoveSheet=25]="MoveSheet",n[n.DeleteSheet=26]="DeleteSheet",n[n.HideSheet=27]="HideSheet",n[n.CopySheet=28]="CopySheet",n[n.RenameSheet=29]="RenameSheet",n[n.CreateSheet=30]="CreateSheet",n[n.SelectProtectedCells=31]="SelectProtectedCells",n[n.SelectUnProtectedCells=32]="SelectUnProtectedCells",n[n.SetCellStyle=33]="SetCellStyle",n[n.SetCellValue=34]="SetCellValue",n[n.SetRowStyle=35]="SetRowStyle",n[n.SetColumnStyle=36]="SetColumnStyle",n[n.InsertRow=37]="InsertRow",n[n.InsertColumn=38]="InsertColumn",n[n.DeleteRow=39]="DeleteRow",n[n.DeleteColumn=40]="DeleteColumn",n[n.EditExtraObject=41]="EditExtraObject",n[n.Delete=42]="Delete",n[n.RecoverHistory=43]="RecoverHistory",n[n.ViewHistory=44]="ViewHistory",n[n.CreatePermissionObject=45]="CreatePermissionObject",n[n.UNRECOGNIZED=-1]="UNRECOGNIZED",n))(Be||{}),dt=Object.getOwnPropertyDescriptor,ut=(n,s,e,t)=>{for(var a=t>1?void 0:t?dt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},me=(n,s)=>(e,t)=>s(e,t,n);exports.DataValidationFormulaController=class extends o.Disposable{constructor(s,e,t){super(),this._univerInstanceService=s,this._permissionService=e,this._lexerTreeBuilder=t}getFormulaRefCheck(s){var t,a;const e=this._lexerTreeBuilder.sequenceNodesBuilder(s);if(!e)return!0;for(let r=0;r<e.length;r++){const i=e[r];if(typeof i=="string")continue;const{token:l}=i,d=M.deserializeRangeWithSheetWithCache(l),u=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET);let c=u.getActiveSheet();const h=u.getUnitId();if(d.sheetName){if(c=u.getSheetBySheetName(d.sheetName),!c)return!1;const V=c==null?void 0:c.getSheetId();if(!this._permissionService.getPermissionPoint(new R.WorksheetViewPermission(h,V).id))return!1}if(!c)return!1;const{startRow:m,endRow:S,startColumn:v,endColumn:_}=d.range;for(let V=m;V<=S;V++)for(let f=v;f<=_;f++){const D=(a=(t=c.getCell(V,f))==null?void 0:t.selectionProtection)==null?void 0:a[0];if((D==null?void 0:D[Be.View])===!1)return!1}}return!0}};exports.DataValidationFormulaController=ut([me(0,o.IUniverInstanceService),me(1,o.IPermissionService),me(2,o.Inject(M.LexerTreeBuilder))],exports.DataValidationFormulaController);const ct="@univerjs/sheets-data-validation",ht="0.17.0",xe={name:ct,version:ht},mt="sheets-data-validation.config",Ee={};var pt=Object.getOwnPropertyDescriptor,gt=(n,s,e,t)=>{for(var a=t>1?void 0:t?pt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},pe=(n,s)=>(e,t)=>s(e,t,n);let re=class extends o.Disposable{constructor(s,e,t){super();p(this,"_disposableMap",new Map);p(this,"registerRule",(s,e,t)=>{Y(t.type,this._validatorRegistryService)&&this.register(s,e,t)});this._dataValidationModel=s,this._formulaRefRangeService=e,this._validatorRegistryService=t,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}register(s,e,t){const a=t.ranges,r=t.formula1,i=t.formula2,l=this._formulaRefRangeService.registerRangeFormula(s,e,a,[r!=null?r:"",i!=null?i:""],u=>{if(u.length===0)return{undos:[{id:g.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:t,source:"patched"}}],redos:[{id:g.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,source:"patched"}}]};const c=[],h=[],m=u[0];c.push({id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.ALL,payload:{ranges:m.ranges,formula1:m.formulas[0],formula2:m.formulas[1]}},source:"patched"}}),h.push({id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.ALL,payload:{ranges:a,formula1:r,formula2:i}},source:"patched"}});for(let S=1;S<u.length;S++){const v=u[S],_=o.generateRandomId();c.push({id:g.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:{...t,uid:_,formula1:v.formulas[0],formula2:v.formulas[1],ranges:v.ranges},source:"patched"}}),h.push({id:g.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:_,source:"patched"}})}return{undos:h,redos:c}}),d=this._getIdWithUnitId(s,e,t.uid);this._disposableMap.set(d,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,r]of t)for(const i of r)this.registerRule(e,a,i);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:r}=e;switch(e.type){case"add":{const i=e.rule;this.registerRule(e.unitId,e.subUnitId,i);break}case"remove":{const i=this._disposableMap.get(this._getIdWithUnitId(t,a,r.uid));i&&i.dispose();break}case"update":{const i=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,i.uid));l&&l.dispose(),this.registerRule(e.unitId,e.subUnitId,i);break}}})),this.disposeWithMe(o.toDisposable(()=>{this._disposableMap.forEach(e=>{e.dispose()}),this._disposableMap.clear()}))}};re=gt([pe(0,o.Inject(exports.SheetDataValidationModel)),pe(1,o.Inject(fe.FormulaRefRangeService)),pe(2,o.Inject(g.DataValidatorRegistryService))],re);var St=Object.getOwnPropertyDescriptor,ft=(n,s,e,t)=>{for(var a=t>1?void 0:t?St(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},w=(n,s)=>(e,t)=>s(e,t,n);let ie=class extends o.Disposable{constructor(s,e,t,a,r,i){super();p(this,"_disposableMap",new Map);p(this,"registerRule",(s,e,t)=>{Y(t.type,this._validatorRegistryService)||(this.register(s,e,t),this.registerFormula(s,e,t))});this._dataValidationModel=s,this._injector=e,this._refRangeService=t,this._dataValidationFormulaService=a,this._formulaRefRangeService=r,this._validatorRegistryService=i,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}registerFormula(s,e,t){var u;const a=t.uid,r=this._getIdWithUnitId(s,e,a),i=(u=this._disposableMap.get(r))!=null?u:new Set,l=(c,h)=>{const m=this._dataValidationModel.getRuleById(s,e,a);if(!m)return{redos:[],undos:[]};const S=m[c];if(!S||S===h)return{redos:[],undos:[]};const v={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.SETTING,payload:{type:m.type,formula1:m.formula1,formula2:m.formula2,[c]:h}},source:"patched"},_={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.SETTING,payload:{type:m.type,formula1:m.formula1,formula2:m.formula2}},source:"patched"},V=[{id:g.UpdateDataValidationMutation.id,params:v}],f=[{id:g.UpdateDataValidationMutation.id,params:_}];return{redos:V,undos:f}},d=this._dataValidationFormulaService.getRuleFormulaInfo(s,e,a);if(d){const[c,h]=d;if(c){const m=this._formulaRefRangeService.registerFormula(s,e,c.text,S=>l("formula1",S));i.add(()=>m.dispose())}if(h){const m=this._formulaRefRangeService.registerFormula(s,e,h.text,S=>l("formula2",S));i.add(()=>m.dispose())}}}register(s,e,t){var d;const a=u=>{const c=[...t.ranges],m=c.map(v=>R.handleCommonDefaultRangeChangeWithEffectRefCommands(v,u)).filter(v=>!!v).flat();if(o.isRangesEqual(m,c))return{redos:[],undos:[]};if(m.length){const v={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.RANGE,payload:m},source:"patched"},_=[{id:g.UpdateDataValidationMutation.id,params:v}],V=[{id:g.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:g.UpdateRuleType.RANGE,payload:c},source:"patched"}}];return{redos:_,undos:V}}else{const v={unitId:s,subUnitId:e,ruleId:t.uid},_=[{id:g.RemoveDataValidationMutation.id,params:v}],V=lt(this._injector,v);return{redos:_,undos:V}}},r=[];t.ranges.forEach(u=>{const c=this._refRangeService.registerRefRange(u,a,s,e);r.push(()=>c.dispose())});const i=this._getIdWithUnitId(s,e,t.uid),l=(d=this._disposableMap.get(i))!=null?d:new Set;l.add(()=>r.forEach(u=>u())),this._disposableMap.set(i,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,r]of t)for(const i of r)this.registerRule(e,a,i);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:r}=e;switch(e.type){case"add":{const i=e.rule;this.registerRule(e.unitId,e.subUnitId,i);break}case"remove":{const i=this._disposableMap.get(this._getIdWithUnitId(t,a,r.uid));i&&i.forEach(l=>l());break}case"update":{const i=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,i.uid));l&&l.forEach(d=>d()),this.registerRule(e.unitId,e.subUnitId,i);break}}})),this.disposeWithMe(o.toDisposable(()=>{this._disposableMap.forEach(e=>{e.forEach(t=>t())}),this._disposableMap.clear()}))}};ie=ft([w(0,o.Inject(exports.SheetDataValidationModel)),w(1,o.Inject(o.Injector)),w(2,o.Inject(R.RefRangeService)),w(3,o.Inject(exports.DataValidationFormulaService)),w(4,o.Inject(fe.FormulaRefRangeService)),w(5,o.Inject(g.DataValidatorRegistryService))],ie);var vt=Object.getOwnPropertyDescriptor,_t=(n,s,e,t)=>{for(var a=t>1?void 0:t?vt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},ge=(n,s)=>(e,t)=>s(e,t,n);let oe=class extends o.Disposable{constructor(n,s,e){super(),this._sheetInterceptorService=n,this._univerInstanceService=s,this._sheetDataValidationModel=e,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:n=>{var s;if(n.id===R.RemoveSheetCommand.id){const e=n.params,t=e.unitId||this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET).getUnitId(),a=this._univerInstanceService.getUniverSheetInstance(t);if(!a)return{redos:[],undos:[]};const r=e.subUnitId||((s=a.getActiveSheet())==null?void 0:s.getSheetId());if(!r)return{redos:[],undos:[]};const i=this._sheetDataValidationModel.getRules(t,r);if(i.length===0)return{redos:[],undos:[]};const l=i.map(c=>c.uid),d={unitId:t,subUnitId:r,ruleId:l,source:"patched"},u={unitId:t,subUnitId:r,rule:[...i],source:"patched"};return{redos:[{id:g.RemoveDataValidationMutation.id,params:d}],undos:[{id:g.AddDataValidationMutation.id,params:u}]}}else if(n.id===R.CopySheetCommand.id){const e=n.params,{unitId:t,subUnitId:a,targetSubUnitId:r}=e;if(!t||!a||!r)return{redos:[],undos:[]};const i=this._sheetDataValidationModel.getRules(t,a);if(i.length===0)return{redos:[],undos:[]};const l=i.map(d=>({...d,uid:o.generateRandomId(6)}));return{redos:[{id:g.AddDataValidationMutation.id,params:{unitId:t,subUnitId:r,rule:l,source:"patched"}}],undos:[{id:g.RemoveDataValidationMutation.id,params:{unitId:t,subUnitId:r,ruleId:l.map(d=>d.uid),source:"patched"}}]}}return{redos:[],undos:[]}}}))}};oe=_t([ge(0,o.Inject(R.SheetInterceptorService)),ge(1,o.Inject(o.IUniverInstanceService)),ge(2,o.Inject(exports.SheetDataValidationModel))],oe);class Vt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.ANY);p(this,"title","dataValidation.any.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",0);p(this,"offsetFormulaByRange",!1)}async parseFormula(e,t,a){return{formula1:e.formula1,formula2:e.formula2,isFormulaValid:!0}}validatorFormula(e,t,a){return{success:!0}}async isValidType(e,t,a){return!0}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.any.error")}}class Rt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"id",o.DataValidationType.CUSTOM);p(this,"title","dataValidation.custom.title");p(this,"operators",[]);p(this,"scopes",["sheet"]);p(this,"order",60);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(M.LexerTreeBuilder))}validatorFormula(e,t,a){var u;const r=o.isFormulaString(e.formula1),i=(u=e.formula1)!=null?u:"",d=this._lexerTreeBuilder.checkIfAddBracket(i)===0&&i.startsWith(M.operatorToken.EQUALS);return{success:r&&d,formula1:r&&d?"":this.localeService.t("dataValidation.validFail.formula")}}async parseFormula(e,t,a){return{formula1:void 0,formula2:void 0,isFormulaValid:!0}}async isValidType(e,t,a){const{column:r,row:i,unitId:l,subUnitId:d}=e,u=await this._customFormulaService.getCellFormulaValue(l,d,a.uid,i,r),c=u==null?void 0:u.v;return E(String(c))&&o.Tools.isDefine(c)&&c!==""?u.t===o.CellValueType.BOOLEAN?!!c:typeof c=="boolean"?c:typeof c=="number"?!!c:typeof c=="string"?E(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 je extends _e{constructor(){super(...arguments);p(this,"id",o.DataValidationType.LIST_MULTIPLE);p(this,"title","dataValidation.listMultiple.title");p(this,"offsetFormulaByRange",!1);p(this,"skipDefaultFontRender",()=>!0)}}class Dt extends g.BaseDataValidator{constructor(){super(...arguments);p(this,"_customFormulaService",this.injector.get(exports.DataValidationCustomFormulaService));p(this,"_lexerTreeBuilder",this.injector.get(M.LexerTreeBuilder));p(this,"id",o.DataValidationType.WHOLE);p(this,"title","dataValidation.whole.title");p(this,"order",10);p(this,"operators",[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.EQUAL,o.DataValidationOperator.GREATER_THAN,o.DataValidationOperator.GREATER_THAN_OR_EQUAL,o.DataValidationOperator.LESS_THAN,o.DataValidationOperator.LESS_THAN_OR_EQUAL,o.DataValidationOperator.NOT_BETWEEN,o.DataValidationOperator.NOT_EQUAL]);p(this,"scopes",["sheet"])}_isFormulaOrInt(e){return!o.Tools.isBlank(e)&&(o.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}async isValidType(e,t,a){const{value:r}=e,i=G(r);return!Number.isNaN(i)&&Number.isInteger(i)}transform(e,t,a){const{value:r}=e;return{...e,value:G(r)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,r,i){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,r,i),d=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,r,i),{formula1:u,formula2:c}=e,h=o.isFormulaString(u)?l==null?void 0:l.v:u,m=o.isFormulaString(c)?d==null?void 0:d.v:c,S=E(`${h}`)&&E(`${m}`);return{formula1:this._parseNumber(h),formula2:this._parseNumber(m),isFormulaValid:S}}validatorFormula(e,t,a){const r=e.operator;if(!r)return{success:!0};const i=o.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=o.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),d=se.includes(r),u=this.localeService.t("dataValidation.validFail.number");return d?{success:i&&l,formula1:i?void 0:u,formula2:l?void 0:u}:{success:i,formula1:u}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(ae.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:r}=X(this._lexerTreeBuilder,e,t);return`${this.localeService.t(ae[e.operator]).replace(q,a!=null?a:"").replace(Q,r!=null?r:"")}`}}var Mt=Object.getOwnPropertyDescriptor,Et=(n,s,e,t)=>{for(var a=t>1?void 0:t?Mt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},b=(n,s)=>(e,t)=>s(e,t,n);let ne=class extends o.RxDisposable{constructor(n,s,e,t,a,r){super(),this._univerInstanceService=n,this._dataValidatorRegistryService=s,this._injector=e,this._selectionManagerService=t,this._sheetInterceptorService=a,this._sheetDataValidationModel=r,this._init()}_init(){this._registerValidators(),this._initCommandInterceptor()}_registerValidators(){[Vt,at,Dt,st,Ce,Te,_e,je,Rt].forEach(n=>{const s=this._injector.createInstance(n);this.disposeWithMe(this._dataValidatorRegistryService.register(s)),this.disposeWithMe(o.toDisposable(()=>this._injector.delete(n)))})}_initCommandInterceptor(){this._sheetInterceptorService.interceptCommand({getMutations:n=>{var s;if(n.id===R.ClearSelectionAllCommand.id){const e=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET),t=e.getUnitId(),a=e.getActiveSheet();if(!a)throw new Error("No active sheet found");const r=a.getSheetId(),i=(s=this._selectionManagerService.getCurrentSelections())==null?void 0:s.map(h=>h.range),l=this._sheetDataValidationModel.getRuleObjectMatrix(t,r).clone();i&&l.removeRange(i);const d=l.diff(this._sheetDataValidationModel.getRules(t,r)),{redoMutations:u,undoMutations:c}=K(t,r,d,this._injector,"patched");return{undos:c,redos:u}}return{undos:[],redos:[]}}})}};ne=Et([b(0,o.IUniverInstanceService),b(1,o.Inject(g.DataValidatorRegistryService)),b(2,o.Inject(o.Injector)),b(3,o.Inject(R.SheetsSelectionsService)),b(4,o.Inject(R.SheetInterceptorService)),b(5,o.Inject(exports.SheetDataValidationModel))],ne);var yt=Object.getOwnPropertyDescriptor,Tt=(n,s,e,t)=>{for(var a=t>1?void 0:t?yt(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},te=(n,s)=>(e,t)=>s(e,t,n);exports.SheetsDataValidationValidatorService=class extends o.Disposable{constructor(s,e,t,a){super(),this._univerInstanceService=s,this._sheetDataValidationModel=e,this._dataValidationCacheService=t,this._lifecycleService=a,this._initRecalculate()}_initRecalculate(){const s=e=>{if(e.length===0)return;const t=this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET),a=t==null?void 0:t.getActiveSheet(),r={};e.flat().forEach(i=>{r[i.unitId]||(r[i.unitId]={}),r[i.unitId][i.subUnitId]||(r[i.unitId][i.subUnitId]=[]);const l=this._univerInstanceService.getUnit(i.unitId,o.UniverInstanceType.UNIVER_SHEET),d=l==null?void 0:l.getSheetBySheetId(i.subUnitId);d&&r[i.unitId][i.subUnitId].push(...i.ranges.map(u=>o.Range.transformRange(u,d)))}),Object.entries(r).forEach(([i,l])=>{Object.entries(l).forEach(([d,u])=>{(t==null?void 0:t.getUnitId())===i&&(a==null?void 0:a.getSheetId())===d?this.validatorRanges(i,d,u):requestIdleCallback(()=>{this.validatorRanges(i,d,u)})})})};this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(B.bufferWhen(()=>this._lifecycleService.lifecycle$.pipe(B.filter(e=>e===o.LifecycleStages.Rendered)))).subscribe(s)),this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(B.filter(()=>this._lifecycleService.stage>=o.LifecycleStages.Rendered),o.bufferDebounceTime(20)).subscribe(s))}async _validatorByCell(s,e,t,a){const r=s.getUnitId(),i=e.getSheetId();if(!o.Tools.isDefine(t)||!o.Tools.isDefine(a))throw new Error(`row or col is not defined, row: ${t}, col: ${a}`);let l=t,d=a;const u=e.getMergedCell(t,a);u&&(l=u.startRow,d=u.startColumn);const c=this._sheetDataValidationModel.getRuleByLocation(r,i,l,d);return c?new Promise(h=>{this._sheetDataValidationModel.validator(c,{unitId:r,subUnitId:i,row:l,col:d,worksheet:e,workbook:s},m=>{h(m)})}):o.DataValidationStatus.VALID}async validatorCell(s,e,t,a){const r=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!r)throw new Error(`cannot find current workbook, unitId: ${s}`);const i=r.getSheetBySheetId(e);if(!i)throw new Error(`cannot find current worksheet, sheetId: ${e}`);return this._validatorByCell(r,i,t,a)}async validatorRanges(s,e,t){if(!t.length)return Promise.resolve([]);const a=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!a)throw new Error(`cannot find current workbook, unitId: ${s}`);const r=a.getSheetBySheetId(e);if(!r)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const l=this._sheetDataValidationModel.getRules(s,e).map(h=>h.ranges).flat(),d=t.map(h=>l.map(m=>o.getIntersectRange(h,m))).flat().filter(Boolean),u=[],c=await Promise.all(d.map((h,m)=>{const S=[];for(let v=h.startRow;v<=h.endRow;v++)for(let _=h.startColumn;_<=h.endColumn;_++){S.push(this._validatorByCell(a,r,v,_));const V=r.getMergedCell(v,_);V&&u.push({resultRowIndex:m,resultColIndex:S.length-1,row:V.startRow,col:V.startColumn})}return Promise.all(S)}));return u.length&&u.forEach(({resultRowIndex:h,resultColIndex:m,row:S,col:v})=>{var _;c[h][m]===o.DataValidationStatus.VALIDATING&&(c[h][m]=(_=this._dataValidationCacheService.getValue(s,e,S,v))!=null?_:o.DataValidationStatus.VALID)}),c}async validatorWorksheet(s,e){const t=this._univerInstanceService.getUnit(s,o.UniverInstanceType.UNIVER_SHEET);if(!t)throw new Error(`cannot find current workbook, unitId: ${s}`);const a=t.getSheetBySheetId(e);if(!a)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const r=this._sheetDataValidationModel.getRules(s,e);return await Promise.all(r.map(i=>Promise.all(i.ranges.map(l=>{const d=[];return o.Range.foreach(l,(u,c)=>{d.push(this._validatorByCell(t,a,u,c))}),Promise.all(d)})))),this._dataValidationCacheService.ensureCache(s,e)}async validatorWorkbook(s){const e=this._sheetDataValidationModel.getSubUnitIds(s),t=await Promise.all(e.map(r=>this.validatorWorksheet(s,r))),a={};return t.forEach((r,i)=>{a[e[i]]=r}),a}getDataValidations(s,e,t){const a=this._sheetDataValidationModel.getRuleObjectMatrix(s,e),r=new Set;return t.forEach(l=>{o.Range.foreach(l,(d,u)=>{const c=a.getValue(d,u);c&&r.add(c)})}),Array.from(r).map(l=>this._sheetDataValidationModel.getRuleById(s,e,l)).filter(Boolean)}getDataValidation(s,e,t){return this.getDataValidations(s,e,t)[0]}};exports.SheetsDataValidationValidatorService=Tt([te(0,o.IUniverInstanceService),te(1,o.Inject(exports.SheetDataValidationModel)),te(2,o.Inject(exports.DataValidationCacheService)),te(3,o.Inject(o.LifecycleService))],exports.SheetsDataValidationValidatorService);var Ct=Object.defineProperty,Ot=Object.getOwnPropertyDescriptor,Ft=(n,s,e)=>s in n?Ct(n,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[s]=e,It=(n,s,e,t)=>{for(var a=t>1?void 0:t?Ot(s,e):s,r=n.length-1,i;r>=0;r--)(i=n[r])&&(a=i(a)||a);return a},Se=(n,s)=>(e,t)=>s(e,t,n),le=(n,s,e)=>Ft(n,typeof s!="symbol"?s+"":s,e);exports.UniverSheetsDataValidationPlugin=class extends o.Plugin{constructor(s=Ee,e,t,a){super(),this._config=s,this._injector=e,this._commandService=t,this._configService=a;const{...r}=o.merge({},Ee,this._config);this._configService.setConfig(mt,r)}onStarting(){[[exports.DataValidationCacheService],[exports.DataValidationListCacheService],[exports.DataValidationFormulaService],[exports.DataValidationCustomFormulaService],[exports.SheetsDataValidationValidatorService],[exports.SheetDataValidationModel],[ne],[exports.DataValidationFormulaController],[oe],[ie],[re]].forEach(s=>{this._injector.add(s)}),[Ie,Fe,Ne,Ae,be,we,Ue].forEach(s=>{this._commandService.registerCommand(s)}),this._injector.get(exports.DataValidationCacheService),this._injector.get(exports.SheetsDataValidationValidatorService),this._injector.get(ne),this._injector.get(re),this._injector.get(ie)}onReady(){this._injector.get(oe)}onRendered(){this._injector.get(exports.DataValidationFormulaController)}};le(exports.UniverSheetsDataValidationPlugin,"pluginName",Le);le(exports.UniverSheetsDataValidationPlugin,"packageName",xe.name);le(exports.UniverSheetsDataValidationPlugin,"version",xe.version);le(exports.UniverSheetsDataValidationPlugin,"type",o.UniverInstanceType.UNIVER_SHEET);exports.UniverSheetsDataValidationPlugin=It([o.DependentOn(fe.UniverSheetsFormulaPlugin,g.UniverDataValidationPlugin),Se(1,o.Inject(o.Injector)),Se(2,o.ICommandService),Se(3,o.IConfigService)],exports.UniverSheetsDataValidationPlugin);function Nt(n){const e=n.get(R.SheetsSelectionsService).getCurrentSelections().map(r=>r.range);return{uid:o.generateRandomId(6),type:o.DataValidationType.DECIMAL,operator:o.DataValidationOperator.EQUAL,formula1:"100",ranges:e!=null?e:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}const At="data-validation.custom-formula-input",Ut="data-validation.formula-input",wt="data-validation.list-formula-input",bt="data-validation.checkbox-formula-input";exports.AddSheetDataValidationCommand=Ie;exports.BASE_FORMULA_INPUT_NAME=Ut;exports.CHECKBOX_FORMULA_1=$;exports.CHECKBOX_FORMULA_2=k;exports.CHECKBOX_FORMULA_INPUT_NAME=bt;exports.CUSTOM_FORMULA_INPUT_NAME=At;exports.CheckboxValidator=Te;exports.ClearRangeDataValidationCommand=Ue;exports.DATA_VALIDATION_PLUGIN_NAME=Le;exports.DateValidator=Ce;exports.LIST_FORMULA_INPUT_NAME=wt;exports.ListMultipleValidator=je;exports.ListValidator=_e;exports.RemoveSheetAllDataValidationCommand=we;exports.RemoveSheetDataValidationCommand=be;exports.UpdateSheetDataValidationOptionsCommand=Ae;exports.UpdateSheetDataValidationRangeCommand=Fe;exports.UpdateSheetDataValidationSettingCommand=Ne;exports.createDefaultNewRule=Nt;exports.deserializeListOptions=W;exports.getCellValueNumber=G;exports.getCellValueOrigin=N;exports.getDataValidationCellValue=Ge;exports.getDataValidationDiffMutations=K;exports.getFormulaCellData=P;exports.getFormulaResult=L;exports.getTransformedFormula=X;exports.isLegalFormulaResult=E;exports.serializeListOptions=Qe;exports.transformCheckboxValue=H;
package/lib/es/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  var Vt = Object.defineProperty;
2
2
  var yt = (s, a, e) => a in s ? Vt(s, a, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[a] = e;
3
3
  var m = (s, a, e) => yt(s, typeof a != "symbol" ? a + "" : a, e);
4
- import { Inject as v, ICommandService as U, IUniverInstanceService as D, Disposable as B, ObjectMatrix as Ve, getIntersectRange as nt, UniverInstanceType as N, Range as H, Rectangle as w, isFormulaString as S, getOriginCellValue as Tt, Injector as be, numfmt as L, DataValidationType as T, RBush as Ct, debounce as Ft, Tools as M, DataValidationStatus as A, WrapStrategy as Ee, DataValidationOperator as h, dayjs as lt, DataValidationRenderMode as $e, CommandType as z, IUndoRedoService as Z, sequenceExecute as Le, isRangesEqual as ut, IPermissionService as Nt, generateRandomId as Ke, toDisposable as ze, CellValueType as Ot, RxDisposable as wt, LifecycleService as At, LifecycleStages as tt, bufferDebounceTime as It, DependentOn as Dt, Plugin as bt, merge as Lt, IConfigService as Ut } from "@univerjs/core";
4
+ import { Inject as v, ICommandService as U, IUniverInstanceService as D, Disposable as B, ObjectMatrix as Ve, getIntersectRange as nt, UniverInstanceType as N, Range as H, Rectangle as w, isFormulaString as S, getOriginCellValue as Tt, Injector as be, numfmt as L, DataValidationType as T, RBush as Ct, debounce as Ft, Tools as M, DataValidationStatus as A, WrapStrategy as Ee, DataValidationOperator as h, dayjs as lt, DataValidationRenderMode as $e, CommandType as z, IUndoRedoService as Z, sequenceExecute as Le, isRangesEqual as ut, IPermissionService as Nt, generateRandomId as Ke, toDisposable as ze, CellValueType as Ot, RxDisposable as wt, LifecycleService as At, LifecycleStages as tt, bufferDebounceTime as It, DependentOn as Dt, IConfigService as bt, Plugin as Lt, merge as Ut } from "@univerjs/core";
5
5
  import { DataValidationModel as he, DataValidatorRegistryService as q, UpdateRuleType as V, BaseDataValidator as Y, TextLengthErrorTitleMap as Bt, AddDataValidationMutation as b, RemoveDataValidationMutation as I, UpdateDataValidationMutation as y, getRuleSetting as xt, getRuleOptions as Pt, UniverDataValidationPlugin as Ht } from "@univerjs/data-validation";
6
6
  import { ERROR_TYPE_SET as Wt, RegisterOtherFormulaService as ct, OtherFormulaBizType as dt, LexerTreeBuilder as X, isReferenceString as ht, sequenceNodeType as $t, deserializeRangeWithSheet as kt, deserializeRangeWithSheetWithCache as jt, operatorToken as Qt } from "@univerjs/engine-formula";
7
7
  import { SetRangeValuesMutation as le, RemoveSheetMutation as mt, getSheetCommandTarget as Ze, SetRangeValuesUndoMutationFactory as gt, WorksheetViewPermission as Gt, RefRangeService as qt, handleCommonDefaultRangeChangeWithEffectRefCommands as Yt, SheetInterceptorService as pt, RemoveSheetCommand as Xt, CopySheetCommand as Kt, SheetsSelectionsService as ft, ClearSelectionAllCommand as zt } from "@univerjs/sheets";
@@ -1783,7 +1783,7 @@ Ne = wa([
1783
1783
  Qe(1, Nt),
1784
1784
  Qe(2, v(X))
1785
1785
  ], Ne);
1786
- const Aa = "@univerjs/sheets-data-validation", Ia = "0.16.1-insiders.20260311-074e8ca", Mt = {
1786
+ const Aa = "@univerjs/sheets-data-validation", Ia = "0.17.0", Mt = {
1787
1787
  name: Aa,
1788
1788
  version: Ia
1789
1789
  }, Da = "sheets-data-validation.config", ot = {};
@@ -2533,10 +2533,10 @@ var Ya = Object.defineProperty, Xa = Object.getOwnPropertyDescriptor, Ka = (s, a
2533
2533
  (o = s[i]) && (r = o(r) || r);
2534
2534
  return r;
2535
2535
  }, Ye = (s, a) => (e, t) => a(e, t, s), Pe = (s, a, e) => Ka(s, typeof a != "symbol" ? a + "" : a, e);
2536
- let ie = class extends bt {
2536
+ let ie = class extends Lt {
2537
2537
  constructor(s = ot, a, e, t) {
2538
2538
  super(), this._config = s, this._injector = a, this._commandService = e, this._configService = t;
2539
- const { ...r } = Lt(
2539
+ const { ...r } = Ut(
2540
2540
  {},
2541
2541
  ot,
2542
2542
  this._config
@@ -2585,7 +2585,7 @@ ie = za([
2585
2585
  Dt(Jt, Ht),
2586
2586
  Ye(1, v(be)),
2587
2587
  Ye(2, U),
2588
- Ye(3, Ut)
2588
+ Ye(3, bt)
2589
2589
  ], ie);
2590
2590
  function nr(s) {
2591
2591
  const e = s.get(ft).getCurrentSelections().map((i) => i.range);
package/lib/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  var Vt = Object.defineProperty;
2
2
  var yt = (s, a, e) => a in s ? Vt(s, a, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[a] = e;
3
3
  var m = (s, a, e) => yt(s, typeof a != "symbol" ? a + "" : a, e);
4
- import { Inject as v, ICommandService as U, IUniverInstanceService as D, Disposable as B, ObjectMatrix as Ve, getIntersectRange as nt, UniverInstanceType as N, Range as H, Rectangle as w, isFormulaString as S, getOriginCellValue as Tt, Injector as be, numfmt as L, DataValidationType as T, RBush as Ct, debounce as Ft, Tools as M, DataValidationStatus as A, WrapStrategy as Ee, DataValidationOperator as h, dayjs as lt, DataValidationRenderMode as $e, CommandType as z, IUndoRedoService as Z, sequenceExecute as Le, isRangesEqual as ut, IPermissionService as Nt, generateRandomId as Ke, toDisposable as ze, CellValueType as Ot, RxDisposable as wt, LifecycleService as At, LifecycleStages as tt, bufferDebounceTime as It, DependentOn as Dt, Plugin as bt, merge as Lt, IConfigService as Ut } from "@univerjs/core";
4
+ import { Inject as v, ICommandService as U, IUniverInstanceService as D, Disposable as B, ObjectMatrix as Ve, getIntersectRange as nt, UniverInstanceType as N, Range as H, Rectangle as w, isFormulaString as S, getOriginCellValue as Tt, Injector as be, numfmt as L, DataValidationType as T, RBush as Ct, debounce as Ft, Tools as M, DataValidationStatus as A, WrapStrategy as Ee, DataValidationOperator as h, dayjs as lt, DataValidationRenderMode as $e, CommandType as z, IUndoRedoService as Z, sequenceExecute as Le, isRangesEqual as ut, IPermissionService as Nt, generateRandomId as Ke, toDisposable as ze, CellValueType as Ot, RxDisposable as wt, LifecycleService as At, LifecycleStages as tt, bufferDebounceTime as It, DependentOn as Dt, IConfigService as bt, Plugin as Lt, merge as Ut } from "@univerjs/core";
5
5
  import { DataValidationModel as he, DataValidatorRegistryService as q, UpdateRuleType as V, BaseDataValidator as Y, TextLengthErrorTitleMap as Bt, AddDataValidationMutation as b, RemoveDataValidationMutation as I, UpdateDataValidationMutation as y, getRuleSetting as xt, getRuleOptions as Pt, UniverDataValidationPlugin as Ht } from "@univerjs/data-validation";
6
6
  import { ERROR_TYPE_SET as Wt, RegisterOtherFormulaService as ct, OtherFormulaBizType as dt, LexerTreeBuilder as X, isReferenceString as ht, sequenceNodeType as $t, deserializeRangeWithSheet as kt, deserializeRangeWithSheetWithCache as jt, operatorToken as Qt } from "@univerjs/engine-formula";
7
7
  import { SetRangeValuesMutation as le, RemoveSheetMutation as mt, getSheetCommandTarget as Ze, SetRangeValuesUndoMutationFactory as gt, WorksheetViewPermission as Gt, RefRangeService as qt, handleCommonDefaultRangeChangeWithEffectRefCommands as Yt, SheetInterceptorService as pt, RemoveSheetCommand as Xt, CopySheetCommand as Kt, SheetsSelectionsService as ft, ClearSelectionAllCommand as zt } from "@univerjs/sheets";
@@ -1783,7 +1783,7 @@ Ne = wa([
1783
1783
  Qe(1, Nt),
1784
1784
  Qe(2, v(X))
1785
1785
  ], Ne);
1786
- const Aa = "@univerjs/sheets-data-validation", Ia = "0.16.1-insiders.20260311-074e8ca", Mt = {
1786
+ const Aa = "@univerjs/sheets-data-validation", Ia = "0.17.0", Mt = {
1787
1787
  name: Aa,
1788
1788
  version: Ia
1789
1789
  }, Da = "sheets-data-validation.config", ot = {};
@@ -2533,10 +2533,10 @@ var Ya = Object.defineProperty, Xa = Object.getOwnPropertyDescriptor, Ka = (s, a
2533
2533
  (o = s[i]) && (r = o(r) || r);
2534
2534
  return r;
2535
2535
  }, Ye = (s, a) => (e, t) => a(e, t, s), Pe = (s, a, e) => Ka(s, typeof a != "symbol" ? a + "" : a, e);
2536
- let ie = class extends bt {
2536
+ let ie = class extends Lt {
2537
2537
  constructor(s = ot, a, e, t) {
2538
2538
  super(), this._config = s, this._injector = a, this._commandService = e, this._configService = t;
2539
- const { ...r } = Lt(
2539
+ const { ...r } = Ut(
2540
2540
  {},
2541
2541
  ot,
2542
2542
  this._config
@@ -2585,7 +2585,7 @@ ie = za([
2585
2585
  Dt(Jt, Ht),
2586
2586
  Ye(1, v(be)),
2587
2587
  Ye(2, U),
2588
- Ye(3, Ut)
2588
+ Ye(3, bt)
2589
2589
  ], ie);
2590
2590
  function nr(s) {
2591
2591
  const e = s.get(ft).getCurrentSelections().map((i) => i.range);
package/lib/umd/index.js CHANGED
@@ -1 +1 @@
1
- (function(m,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@univerjs/core"),require("@univerjs/data-validation"),require("@univerjs/engine-formula"),require("@univerjs/sheets"),require("rxjs"),require("@univerjs/sheets-formula")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@univerjs/data-validation","@univerjs/engine-formula","@univerjs/sheets","rxjs","@univerjs/sheets-formula"],r):(m=typeof globalThis<"u"?globalThis:m||self,r(m.UniverSheetsDataValidation={},m.UniverCore,m.UniverDataValidation,m.UniverEngineFormula,m.UniverSheets,m.rxjs,m.UniverSheetsFormula))})(this,(function(m,r,p,E,D,U,de){"use strict";var Ut=Object.defineProperty;var wt=(m,r,p)=>r in m?Ut(m,r,{enumerable:!0,configurable:!0,writable:!0,value:p}):m[r]=p;var S=(m,r,p)=>wt(m,typeof r!="symbol"?r+"":r,p);var We=Object.getOwnPropertyDescriptor,$e=(o,s,e,t)=>{for(var a=t>1?void 0:t?We(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},ce=(o,s)=>(e,t)=>s(e,t,o);m.DataValidationCacheService=class extends r.Disposable{constructor(e,t,a){super();S(this,"_cacheMatrix",new Map);S(this,"_dirtyRanges$",new U.Subject);S(this,"dirtyRanges$",this._dirtyRanges$.asObservable());this._commandService=e,this._univerInstanceService=t,this._sheetDataValidationModel=a,this._initDirtyRanges(),this._initSheetRemove()}_initDirtyRanges(){this.disposeWithMe(this._commandService.onCommandExecuted((e,t)=>{if(e.id===D.SetRangeValuesMutation.id&&!(t!=null&&t.onlyLocal)){const{cellValue:a,unitId:i,subUnitId:n}=e.params;if(a){const l=new r.ObjectMatrix(a).getDataRange();if(l.endRow===-1)return;const c=this._sheetDataValidationModel.getRules(i,n).map(h=>h.ranges).flat().map(h=>r.getIntersectRange(h,l)).filter(Boolean);c.length&&this.markRangeDirty(i,n,c,!0)}}}))}_initSheetRemove(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{var t;if(e.id===D.RemoveSheetMutation.id){const{unitId:a,subUnitId:i}=e.params;(t=this._cacheMatrix.get(a))==null||t.delete(i)}})),this.disposeWithMe(this._univerInstanceService.unitDisposed$.subscribe(e=>{e.type===r.UniverInstanceType.UNIVER_SHEET&&this._cacheMatrix.delete(e.getUnitId())}))}_ensureCache(e,t){let a=this._cacheMatrix.get(e);a||(a=new Map,this._cacheMatrix.set(e,a));let i=a.get(t);return i||(i=new r.ObjectMatrix,a.set(t,i)),i}ensureCache(e,t){return this._ensureCache(e,t)}addRule(e,t,a){this.markRangeDirty(e,t,a.ranges)}removeRule(e,t,a){this._deleteRange(e,t,a.ranges)}markRangeDirty(e,t,a,i){const n=this._ensureCache(e,t);a.forEach(l=>{r.Range.foreach(l,(u,d)=>{n.getValue(u,d)!==void 0&&n.setValue(u,d,void 0)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a,isSetRange:i})}_deleteRange(e,t,a){const i=this._ensureCache(e,t);a.forEach(n=>{r.Range.foreach(n,(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)}},m.DataValidationCacheService=$e([ce(0,r.Inject(r.ICommandService)),ce(1,r.Inject(r.IUniverInstanceService)),ce(2,r.Inject(p.DataValidationModel))],m.DataValidationCacheService);function w(o){var s,e;return(e=(s=o==null?void 0:o[0])==null?void 0:s[0])==null?void 0:e.v}function P(o){var s;return(s=o==null?void 0:o[0])==null?void 0:s[0]}function y(o){return!E.ERROR_TYPE_SET.has(o)}function H(o,s){var t;const e=s.getValidatorItem(o);return(t=e==null?void 0:e.offsetFormulaByRange)!=null?t:!1}var ke=Object.getOwnPropertyDescriptor,qe=(o,s,e,t)=>{for(var a=t>1?void 0:t?ke(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},W=(o,s)=>(e,t)=>s(e,t,o);m.DataValidationCustomFormulaService=class extends r.Disposable{constructor(e,t,a,i,n){super();S(this,"_ruleFormulaMap",new Map);S(this,"_ruleFormulaMap2",new Map);this._instanceSrv=e,this._registerOtherFormulaService=t,this._dataValidationModel=a,this._dataValidationCacheService=i,this._validatorRegistryService=n,this._initFormulaResultHandler(),this._initDirtyRanges()}dispose(){super.dispose(),this._ruleFormulaMap.clear(),this._ruleFormulaMap2.clear()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceSrv.getUnitType(t)===r.UniverInstanceType.UNIVER_SHEET)for(const n in a){const l=a[n],{ruleFormulaMap:u}=this._ensureMaps(t,n);l.forEach(d=>{var g,f;const c=u.get((g=d.extra)==null?void 0:g.ruleId),h=this._dataValidationModel.getRuleById(t,n,(f=d.extra)==null?void 0:f.ruleId);h&&c&&this._dataValidationCacheService.markRangeDirty(t,n,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 n=a.get(t);n||(n=new Map,a.set(t,n));let l=i.get(t);return l||(l=new Map,i.set(t,l)),{ruleFormulaMap:n,ruleFormulaMap2:l}}_registerFormula(e,t,a,i,n){return this._registerOtherFormulaService.registerFormulaWithRange(e,t,i,n,{ruleId:a},E.OtherFormulaBizType.DATA_VALIDATION_CUSTOM,a)}_handleDirtyRanges(e,t,a){this._dataValidationModel.getRules(e,t).forEach(n=>{const l=n.ranges;r.Rectangle.doAnyRangesIntersect(l,a)&&this.makeRuleDirty(e,t,n.uid)})}_initDirtyRanges(){this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.subscribe(e=>{e.isSetRange&&this._handleDirtyRanges(e.unitId,e.subUnitId,e.ranges)}))}deleteByRuleId(e,t,a){const{ruleFormulaMap:i,ruleFormulaMap2:n}=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=n.get(a);c&&(n.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[c.formulaId]))}_addFormulaByRange(e,t,a,i,n,l){const{ruleFormulaMap:u,ruleFormulaMap2:d}=this._ensureMaps(e,t),c=l[0].startRow,h=l[0].startColumn;if(i&&r.isFormulaString(i)){const g=this._registerFormula(e,t,a,i,l);u.set(a,{formula:i,originCol:h,originRow:c,formulaId:g})}if(n&&r.isFormulaString(n)){const g=this._registerFormula(e,t,a,n,l);d.set(a,{formula:n,originCol:h,originRow:c,formulaId:g})}}addRule(e,t,a){if(H(a.type,this._validatorRegistryService)){const{ranges:i,formula1:n,formula2:l,uid:u}=a;this._addFormulaByRange(e,t,u,n,l,i)}}async getCellFormulaValue(e,t,a,i,n){var _,R;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,g=i-c,f=n-h;return P((R=(_=d==null?void 0:d.result)==null?void 0:_[g])==null?void 0:R[f])}async getCellFormula2Value(e,t,a,i,n){var _,R;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,g=i-c,f=n-h;return P((R=(_=d==null?void 0:d.result)==null?void 0:_[g])==null?void 0:R[f])}getCellFormulaValueSync(e,t,a,i,n){var _,R;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,g=i-c,f=n-h;return P((R=(_=d==null?void 0:d.result)==null?void 0:_[g])==null?void 0:R[f])}getCellFormula2ValueSync(e,t,a,i,n){var _,R;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,g=i-c,f=n-h;return P((R=(_=d==null?void 0:d.result)==null?void 0:_[g])==null?void 0:R[f])}getRuleFormulaInfo(e,t,a){const{ruleFormulaMap:i}=this._ensureMaps(e,t);return i.get(a)}makeRuleDirty(e,t,a){var l,u,d,c;const i=(u=(l=this._ruleFormulaMap.get(e))==null?void 0:l.get(t))==null?void 0:u.get(a),n=(c=(d=this._ruleFormulaMap2.get(e))==null?void 0:d.get(t))==null?void 0:c.get(a);i&&this._registerOtherFormulaService.markFormulaDirty(e,t,i.formulaId),n&&this._registerOtherFormulaService.markFormulaDirty(e,t,n.formulaId)}},m.DataValidationCustomFormulaService=qe([W(0,r.IUniverInstanceService),W(1,r.Inject(E.RegisterOtherFormulaService)),W(2,r.Inject(p.DataValidationModel)),W(3,r.Inject(m.DataValidationCacheService)),W(4,r.Inject(p.DataValidatorRegistryService))],m.DataValidationCustomFormulaService);function N(o){return r.getOriginCellValue(o)}function Ve(o){var s;return String((s=N(o))!=null?s:"")}function Qe(o){return o.filter(Boolean).join(",")}function $(o){return o.split(",").filter(Boolean)}function xe(o){const s=N(o);return s==null?"":s.toString()}function k(o,s,e){const{formula1:t,formula2:a}=s,i=s.ranges[0].startRow,n=s.ranges[0].startColumn,l=e.row-i,u=e.col-n,d=r.isFormulaString(t)?o.moveFormulaRefOffset(t,u,l,!0):t,c=r.isFormulaString(a)?o.moveFormulaRefOffset(a,u,l,!0):a;return{transformedFormula1:d,transformedFormula2:c}}var Ge=Object.getOwnPropertyDescriptor,Ye=(o,s,e,t)=>{for(var a=t>1?void 0:t?Ge(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},De=(o,s)=>(e,t)=>s(e,t,o);m.DataValidationListCacheService=class extends r.Disposable{constructor(e,t){super();S(this,"_cache",new Map);this._injector=e,this._dataValidationModel=t,this._initRuleChangeListener()}_initRuleChangeListener(){this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{(e.type==="remove"||e.type==="update")&&this.markRuleDirty(e.unitId,e.subUnitId,e.rule.uid)}))}getOrCompute(e,t,a){const i=this.getCache(e,t,a.uid);if(i)return i;const l=this._injector.get(m.DataValidationFormulaService).getRuleFormulaResultSync(e,t,a.uid);return this.computeAndCache(e,t,a,l)}_ensureCache(e,t){let a=this._cache.get(e);a||(a=new Map,this._cache.set(e,a));let i=a.get(t);return i||(i=new Map,a.set(t,i)),i}getCache(e,t,a){var i,n;return(n=(i=this._cache.get(e))==null?void 0:i.get(t))==null?void 0:n.get(a)}setCache(e,t,a,i){this._ensureCache(e,t).set(a,i)}markRuleDirty(e,t,a){var i,n;(n=(i=this._cache.get(e))==null?void 0:i.get(t))==null||n.delete(a)}clear(){this._cache.clear()}computeAndCache(e,t,a,i){var _,R,V;const{formula1:n="",formula2:l=""}=a,u=r.isFormulaString(n)?this._getRuleFormulaResultSet((V=(R=(_=i==null?void 0:i[0])==null?void 0:_.result)==null?void 0:R[0])==null?void 0:V[0]):$(n),d=l.split(","),c=u.map((v,M)=>({label:v,color:d[M]||""})),h={};for(const v of c)v.color&&(h[v.label]=v.color);const g=new Set(u),f={list:u,listWithColor:c,colorMap:h,set:g};return this.setCache(e,t,a.uid,f),f}_getRuleFormulaResultSet(e){var a,i;if(!e)return[];const t=new Set;for(let n=0,l=e.length;n<l;n++){const u=e[n];if(u)for(let d=0,c=u.length;d<c;d++){const h=u[d],g=N(h);if(g!=null){if(typeof g!="string"&&typeof(h==null?void 0:h.s)=="object"&&((i=(a=h.s)==null?void 0:a.n)!=null&&i.pattern)){t.add(r.numfmt.format(h.s.n.pattern,g,{throws:!1}));continue}const f=typeof g=="string"?g:String(g);y(f)&&t.add(f)}}}return[...t]}},m.DataValidationListCacheService=Ye([De(0,r.Inject(r.Injector)),De(1,r.Inject(p.DataValidationModel))],m.DataValidationListCacheService);var Xe=Object.getOwnPropertyDescriptor,Ke=(o,s,e,t)=>{for(var a=t>1?void 0:t?Xe(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},L=(o,s)=>(e,t)=>s(e,t,o);m.DataValidationFormulaService=class extends r.Disposable{constructor(e,t,a,i,n,l){super();S(this,"_formulaRuleMap",new Map);this._instanceService=e,this._registerOtherFormulaService=t,this._dataValidationCacheService=a,this._dataValidationModel=i,this._validatorRegistryService=n,this._listCacheService=l,this._initFormulaResultHandler()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceService.getUnitType(t)===r.UniverInstanceType.UNIVER_SHEET)for(const n in a){const l=a[n],u=this._ensureRuleFormulaMap(t,n);l.forEach(d=>{var h;const c=(h=d.extra)==null?void 0:h.ruleId;if(c&&u.get(c)){const g=this._dataValidationModel.getRuleById(t,n,c);g&&(this._listCacheService.markRuleDirty(t,n,c),this._dataValidationCacheService.markRangeDirty(t,n,g.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 n=[{startColumn:0,endColumn:0,startRow:0,endRow:0}];return this._registerOtherFormulaService.registerFormulaWithRange(e,t,a,n,{ruleId:i},E.OtherFormulaBizType.DATA_VALIDATION,i)}addRule(e,t,a){if(!H(a.type,this._validatorRegistryService)&&a.type!==r.DataValidationType.CHECKBOX){const{formula1:i,formula2:n,uid:l}=a,u=r.isFormulaString(i),d=r.isFormulaString(n);if(!u&&!d)return;const c=this._ensureRuleFormulaMap(e,t),h=[void 0,void 0];if(u){const g=this._registerSingleFormula(e,t,i,l);h[0]={id:g,text:i}}if(d){const g=this._registerSingleFormula(e,t,n,l);h[1]={id:g,text:n}}c.set(l,h)}}removeRule(e,t,a){const n=this._ensureRuleFormulaMap(e,t).get(a);if(!n)return;const[l,u]=n,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 n=this._ensureRuleFormulaMap(e,t).get(a);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,a){const n=this._ensureRuleFormulaMap(e,t).get(a);if(n)return n.map(l=>{if(l)return this._registerOtherFormulaService.getFormulaValueSync(e,t,l.id)})}getRuleFormulaInfo(e,t,a){return this._ensureRuleFormulaMap(e,t).get(a)}},m.DataValidationFormulaService=Ke([L(0,r.IUniverInstanceService),L(1,r.Inject(E.RegisterOtherFormulaService)),L(2,r.Inject(m.DataValidationCacheService)),L(3,r.Inject(p.DataValidationModel)),L(4,r.Inject(p.DataValidatorRegistryService)),L(5,r.Inject(m.DataValidationListCacheService))],m.DataValidationFormulaService);class he{constructor(s,e,t,a,i=!1){S(this,"_map");S(this,"_tree",new r.RBush);S(this,"_dirty",!0);S(this,"_buildTree",()=>{if(!this._dirty||this._disableTree)return;this._tree.clear();const s=[];this._map.forEach((e,t)=>{e.forEach(a=>{s.push({minX:a.startRow,maxX:a.endRow,minY:a.startColumn,maxY:a.endColumn,ruleId:t})})}),this._tree.load(s),this._dirty=!1});S(this,"_debonceBuildTree",r.debounce(this._buildTree,0));this._unitId=e,this._subUnitId=t,this._univerInstanceService=a,this._disableTree=i,this._map=s,this._buildTree()}get _worksheet(){var s;return(s=this._univerInstanceService.getUnit(this._unitId,r.UniverInstanceType.UNIVER_SHEET))==null?void 0:s.getSheetBySheetId(this._subUnitId)}_addRule(s,e){if(!this._worksheet)return;const t=r.Rectangle.mergeRanges(e.map(a=>r.Range.transformRange(a,this._worksheet)));this._map.forEach((a,i)=>{const n=r.Rectangle.subtractMulti(a,t);n.length===0?this._map.delete(i):this._map.set(i,n)}),this._dirty=!0,this._map.set(s,t),this._debonceBuildTree()}addRule(s){this._addRule(s.uid,s.ranges)}removeRange(s){if(!this._worksheet)return;const e=s.map(t=>r.Range.transformRange(t,this._worksheet));this._map.forEach((t,a)=>{const i=r.Rectangle.subtractMulti(t,e);i.length===0?this._map.delete(a):this._map.set(a,i)}),this._dirty=!0,this._debonceBuildTree()}_removeRule(s){this._map.delete(s),this._dirty=!0,this._debonceBuildTree()}removeRule(s){this._removeRule(s.uid)}updateRange(s,e){this._removeRule(s),this._addRule(s,e)}addRangeRules(s){s.forEach(({id:e,ranges:t})=>{if(!t.length)return;let a=this._map.get(e);a?(this._map.set(e,r.Rectangle.mergeRanges([...a,...t])),a=this._map.get(e)):(a=t,this._map.set(e,a)),this._map.forEach((i,n)=>{if(n===e)return;const l=r.Rectangle.subtractMulti(i,t);l.length===0?this._map.delete(n):this._map.set(n,l)})}),this._dirty=!0,this._debonceBuildTree()}diff(s){const e=[];let t=0;return s.forEach((a,i)=>{var u;const n=(u=this._map.get(a.uid))!=null?u:[],l=a.ranges;n.length!==0&&(n.length!==l.length||n.some((d,c)=>!r.Rectangle.equals(d,l[c])))&&e.push({type:"update",ruleId:a.uid,oldRanges:l,newRanges:r.Rectangle.sort(n),rule:a}),n.length===0&&(e.push({type:"delete",rule:a,index:i-t}),t++)}),e}diffWithAddition(s,e){const t=[];let a=0;return s.forEach((i,n)=>{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)=>!r.Rectangle.equals(c,u[h])))&&t.push({type:"update",ruleId:i.uid,oldRanges:u,newRanges:r.Rectangle.sort(l),rule:i}),l.length===0&&(t.push({type:"delete",rule:i,index:n-a}),a++)}),Array.from(e).forEach(i=>{var l;const n=(l=this._map.get(i.uid))!=null?l:[];t.push({type:"add",rule:{...i,ranges:r.Rectangle.sort(n)}})}),t}clone(){return new he(new Map(r.Tools.deepClone(Array.from(this._map.entries()))),this._unitId,this._subUnitId,this._univerInstanceService,!0)}getValue(s,e){this._dirty&&this._buildTree();const t=this._tree.search({minX:s,maxX:s,minY:e,maxY:e});return t.length>0?t[0].ruleId:void 0}}var ze=Object.getOwnPropertyDescriptor,Ze=(o,s,e,t)=>{for(var a=t>1?void 0:t?ze(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},A=(o,s)=>(e,t)=>s(e,t,o);m.SheetDataValidationModel=class extends r.Disposable{constructor(e,t,a,i,n,l,u){super();S(this,"_ruleMatrixMap",new Map);S(this,"_validStatusChange$",new U.Subject);S(this,"_ruleChange$",new U.Subject);S(this,"ruleChange$",this._ruleChange$.asObservable());S(this,"validStatusChange$",this._validStatusChange$.asObservable());this._dataValidationModel=e,this._univerInstanceService=t,this._dataValidatorRegistryService=a,this._dataValidationCacheService=i,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===D.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,n]of a)for(const l of n)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 he(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(n=>{this._addRuleSideEffect(e,t,n)})}_updateRule(e,t,a,i,n){const l=this._ensureRuleMatrix(e,t),u={...i,...n.payload};n.type===p.UpdateRuleType.RANGE?l.updateRange(a,n.payload):n.type===p.UpdateRuleType.ALL&&l.updateRange(a,n.payload.ranges),this._dataValidationCacheService.removeRule(e,t,i),this._dataValidationCacheService.addRule(e,t,u),this._dataValidationFormulaService.removeRule(e,t,i.uid),this._dataValidationFormulaService.addRule(e,t,u),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a),this._dataValidationCustomFormulaService.addRule(e,t,u)}_removeRule(e,t,a){this._ensureRuleMatrix(e,t).removeRule(a),this._dataValidationCacheService.removeRule(e,t,a),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a.uid)}getValidator(e){return this._dataValidatorRegistryService.getValidatorItem(e)}getRuleIdByLocation(e,t,a,i){return this._ensureRuleMatrix(e,t).getValue(a,i)}getRuleByLocation(e,t,a,i){const n=this.getRuleIdByLocation(e,t,a,i);if(n)return this._dataValidationModel.getRuleById(e,t,n)}validator(e,t,a){const{col:i,row:n,unitId:l,subUnitId:u,worksheet:d}=t,c=(R,V)=>{a&&a(R,V),V&&this._validStatusChange$.next({unitId:l,subUnitId:u,ruleId:e.uid,status:R,row:n,col:i})},h=d.getCellValueOnly(n,i),g=this.getValidator(e.type),f=d.getCellRaw(n,i),_=N(f);if(g){const R=this._dataValidationCacheService.ensureCache(l,u),V=R.getValue(n,i);return V==null?(R.setValue(n,i,r.DataValidationStatus.VALIDATING),g.validator({value:_,unitId:l,subUnitId:u,row:n,column:i,worksheet:t.worksheet,workbook:t.workbook,interceptValue:N(h),t:f==null?void 0:f.t},e).then(v=>{const M=v?r.DataValidationStatus.VALID:r.DataValidationStatus.INVALID,T=R.getValue(n,i);M===r.DataValidationStatus.VALID?R.realDeleteValue(n,i):R.setValue(n,i,M),c(M,V!==T)}),r.DataValidationStatus.VALIDATING):(c(V!=null?V:r.DataValidationStatus.VALID,!1),V!=null?V:r.DataValidationStatus.VALID)}else return c(r.DataValidationStatus.VALID,!1),r.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()}},m.SheetDataValidationModel=Ze([A(0,r.Inject(p.DataValidationModel)),A(1,r.IUniverInstanceService),A(2,r.Inject(p.DataValidatorRegistryService)),A(3,r.Inject(m.DataValidationCacheService)),A(4,r.Inject(m.DataValidationFormulaService)),A(5,r.Inject(m.DataValidationCustomFormulaService)),A(6,r.ICommandService)],m.SheetDataValidationModel);const q=1,Q=0;function Me(o,s){return r.Tools.isBlank(o)?s.t("dataValidation.validFail.value"):r.isFormulaString(o)?s.t("dataValidation.validFail.primitive"):""}const x=o=>r.Tools.isDefine(o)&&String(o).toLowerCase()==="true"?"1":String(o).toLowerCase()==="false"?"0":o;class Ee extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"id",r.DataValidationType.CHECKBOX);S(this,"title","dataValidation.checkbox.title");S(this,"operators",[]);S(this,"scopes",["sheet"]);S(this,"order",41);S(this,"offsetFormulaByRange",!1);S(this,"_formulaService",this.injector.get(m.DataValidationFormulaService));S(this,"skipDefaultFontRender",(e,t,a)=>{const{unitId:i,subUnitId:n}=a,{formula1:l,formula2:u}=this.parseFormulaSync(e,i,n),d=`${t!=null?t:""}`;return!d||d===`${l}`||d===`${u}`})}validatorFormula(e,t,a){const{formula1:i,formula2:n}=e,l=i===n;if(r.Tools.isBlank(i)&&r.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=Me(i,this.localeService),d=Me(n,this.localeService);return{success:!u&&!d,formula1:u,formula2:d}}async parseFormula(e,t,a){var h,g,f,_;const{formula1:i=q,formula2:n=Q}=e,l=await this._formulaService.getRuleFormulaResult(t,a,e.uid),u=r.isFormulaString(i)?w((g=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:g[0][0]):i,d=r.isFormulaString(n)?w((_=(f=l==null?void 0:l[1])==null?void 0:f.result)==null?void 0:_[0][0]):n,c=y(String(u))&&y(String(d));return{formula1:x(u),formula2:x(d),originFormula1:u,originFormula2:d,isFormulaValid:c}}getExtraStyle(e,t){return{tb:r.WrapStrategy.CLIP}}parseFormulaSync(e,t,a){var h,g,f,_;const{formula1:i=q,formula2:n=Q}=e,l=this._formulaService.getRuleFormulaResultSync(t,a,e.uid),u=r.isFormulaString(i)?w((g=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:g[0][0]):i,d=r.isFormulaString(n)?w((_=(f=l==null?void 0:l[1])==null?void 0:f.result)==null?void 0:_[0][0]):n,c=y(String(u))&&y(String(d));return{formula1:x(u),formula2:x(d),originFormula1:u,originFormula2:d,isFormulaValid:c}}async isValidType(e,t,a){const{value:i,unitId:n,subUnitId:l}=e,{formula1:u,formula2:d,originFormula1:c,originFormula2:h}=await this.parseFormula(a,n,l);return!r.Tools.isDefine(u)||!r.Tools.isDefine(d)?!0:r.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")}generateRuleName(e){return this.titleStr}}const Je={[r.DataValidationOperator.BETWEEN]:"dataValidation.date.operators.between",[r.DataValidationOperator.EQUAL]:"dataValidation.date.operators.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.date.operators.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.operators.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.date.operators.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.operators.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.operators.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.operators.notEqual"};r.DataValidationOperator.BETWEEN+"",r.DataValidationOperator.EQUAL+"",r.DataValidationOperator.GREATER_THAN+"",r.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",r.DataValidationOperator.LESS_THAN+"",r.DataValidationOperator.LESS_THAN_OR_EQUAL+"",r.DataValidationOperator.NOT_BETWEEN+"",r.DataValidationOperator.NOT_EQUAL+"";const ye={[r.DataValidationOperator.BETWEEN]:"dataValidation.date.ruleName.between",[r.DataValidationOperator.EQUAL]:"dataValidation.date.ruleName.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.date.ruleName.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.ruleName.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.date.ruleName.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.ruleName.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.ruleName.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.ruleName.notEqual",NONE:"dataValidation.date.ruleName.legal"},et={[r.DataValidationOperator.BETWEEN]:"dataValidation.date.errorMsg.between",[r.DataValidationOperator.EQUAL]:"dataValidation.date.errorMsg.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.date.errorMsg.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.date.errorMsg.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.errorMsg.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.errorMsg.notEqual",NONE:"dataValidation.date.errorMsg.legal"},Z=[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.NOT_BETWEEN],G="{FORMULA1}",Y="{FORMULA2}",me=o=>{var e,t;if(o==null||typeof o=="boolean")return;if(typeof o=="number"||!Number.isNaN(+o))return+o;const s=(e=r.numfmt.parseDate(o))==null?void 0:e.v;return r.Tools.isDefine(s)?s:(t=r.numfmt.parseDate(r.dayjs(o).format("YYYY-MM-DD HH:mm:ss")))==null?void 0:t.v};class Te extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"id",r.DataValidationType.DATE);S(this,"title","dataValidation.date.title");S(this,"order",40);S(this,"operators",[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.EQUAL,r.DataValidationOperator.GREATER_THAN,r.DataValidationOperator.GREATER_THAN_OR_EQUAL,r.DataValidationOperator.LESS_THAN,r.DataValidationOperator.LESS_THAN_OR_EQUAL,r.DataValidationOperator.NOT_BETWEEN,r.DataValidationOperator.NOT_EQUAL]);S(this,"scopes",["sheet"]);S(this,"_customFormulaService",this.injector.get(m.DataValidationCustomFormulaService));S(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder))}async parseFormula(e,t,a,i,n){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,n),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,n),{formula1:d,formula2:c}=e,h=y(String(l==null?void 0:l.v))&&y(String(u==null?void 0:u.v));return{formula1:me(r.isFormulaString(d)?l==null?void 0:l.v:d),formula2:me(r.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"||typeof t=="string"?!!r.numfmt.parseDate(t):!1}_validatorSingleFormula(e){return!r.Tools.isBlank(e)&&(r.isFormulaString(e)||!Number.isNaN(+e)||!!(e&&r.numfmt.parseDate(e)))}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!0};const n=this._validatorSingleFormula(e.formula1),l=this.localeService.t("dataValidation.validFail.date");if(Z.includes(i)){const d=this._validatorSingleFormula(e.formula2);return{success:n&&d,formula1:n?void 0:l,formula2:d?void 0:l}}return{success:n,formula1:n?void 0:l}}normalizeFormula(e,t,a){const{formula1:i,formula2:n,bizInfo:l}=e,u=d=>{var h;if(!d)return d;let c;if(!Number.isNaN(+d))c=r.numfmt.dateFromSerial(+d);else{const g=(h=r.numfmt.parseDate(d))==null?void 0:h.v;if(g==null)return"";c=r.numfmt.dateFromSerial(g)}return r.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:r.isFormulaString(i)?i:u(`${i}`),formula2:r.isFormulaString(n)?n:u(`${n}`)}}transform(e,t,a){const{value:i}=e;return{...e,value:me(i)}}get operatorNames(){return this.operators.map(e=>this.localeService.t(Je[e]))}generateRuleName(e){var a,i;if(!e.operator)return this.localeService.t(ye.NONE);const t=this.localeService.t(ye[e.operator]).replace(G,(a=e.formula1)!=null?a:"").replace(Y,(i=e.formula2)!=null?i:"");return`${this.titleStr} ${t}`}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:i}=k(this._lexerTreeBuilder,e,t);return`${this.localeService.t(et[e.operator]).replace(G,a!=null?a:"").replace(Y,i!=null?i:"")}`}}r.DataValidationOperator.BETWEEN+"",r.DataValidationOperator.EQUAL+"",r.DataValidationOperator.GREATER_THAN+"",r.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",r.DataValidationOperator.LESS_THAN+"",r.DataValidationOperator.LESS_THAN_OR_EQUAL+"",r.DataValidationOperator.NOT_BETWEEN+"",r.DataValidationOperator.NOT_EQUAL+"",r.DataValidationOperator.BETWEEN+"",r.DataValidationOperator.EQUAL+"",r.DataValidationOperator.GREATER_THAN+"",r.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",r.DataValidationOperator.LESS_THAN+"",r.DataValidationOperator.LESS_THAN_OR_EQUAL+"",r.DataValidationOperator.NOT_BETWEEN+"",r.DataValidationOperator.NOT_EQUAL+"";const J={[r.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[r.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual",NONE:"dataValidation.errorMsg.legal"};function X(o){return+o}class tt extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"_customFormulaService",this.injector.get(m.DataValidationCustomFormulaService));S(this,"id",r.DataValidationType.DECIMAL);S(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));S(this,"title","dataValidation.decimal.title");S(this,"order",20);S(this,"operators",[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.EQUAL,r.DataValidationOperator.GREATER_THAN,r.DataValidationOperator.GREATER_THAN_OR_EQUAL,r.DataValidationOperator.LESS_THAN,r.DataValidationOperator.LESS_THAN_OR_EQUAL,r.DataValidationOperator.NOT_BETWEEN,r.DataValidationOperator.NOT_EQUAL]);S(this,"scopes",["sheet"])}_isFormulaOrNumber(e){return!r.Tools.isBlank(e)&&(r.isFormulaString(e)||!Number.isNaN(+e))}async isValidType(e,t,a){const{value:i}=e;return!Number.isNaN(X(i))}transform(e,t,a){const{value:i}=e;return{...e,value:X(i)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,i,n){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,n),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,n),{formula1:d,formula2:c}=e,h=y(String(l==null?void 0:l.v))&&y(String(u==null?void 0:u.v));return{formula1:this._parseNumber(r.isFormulaString(d)?l==null?void 0:l.v:d),formula2:this._parseNumber(r.isFormulaString(c)?u==null?void 0:u.v:c),isFormulaValid:h}}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!0};const n=r.Tools.isDefine(e.formula1)&&this._isFormulaOrNumber(e.formula1),l=r.Tools.isDefine(e.formula2)&&this._isFormulaOrNumber(e.formula2),u=Z.includes(i),d=this.localeService.t("dataValidation.validFail.number");return u?{success:n&&l,formula1:n?void 0:d,formula2:l?void 0:d}:{success:n,formula1:n?"":d}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(J.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:i}=k(this._lexerTreeBuilder,e,t);return`${this.localeService.t(J[e.operator]).replace(G,a!=null?a:"").replace(Y,i!=null?i:"")}`}}function at(o){var e,t;if(!o)return[];const s=new Set;for(let a=0,i=o.length;a<i;a++){const n=o[a];if(n)for(let l=0,u=n.length;l<u;l++){const d=n[l],c=N(d);if(c!=null){if(typeof c!="string"&&typeof(d==null?void 0:d.s)=="object"&&((t=(e=d.s)==null?void 0:e.n)!=null&&t.pattern)){s.add(r.numfmt.format(d.s.n.pattern,c,{throws:!1}));continue}const h=typeof c=="string"?c:String(c);y(h)&&s.add(h)}}}return[...s]}const it=["if","indirect","choose","offset"];function rt(o,s){if(!r.isFormulaString(o)||E.isReferenceString(o.slice(1)))return!0;const t=s.sequenceNodesBuilder(o);return t&&t.some(a=>typeof a=="object"&&a.nodeType===E.sequenceNodeType.FUNCTION&&it.indexOf(a.token.toLowerCase())>-1)}function nt(o,s){const{formula1:e="",ranges:t}=o;if(E.isReferenceString(e.slice(1))){const i=E.deserializeRangeWithSheet(e.slice(1));if((!i.sheetName||i.sheetName===s)&&t.some(n=>r.Rectangle.intersects(n,i.range)))return!0}return!1}class ge extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"formulaService",this.injector.get(m.DataValidationFormulaService));S(this,"_lexer",this.injector.get(E.LexerTreeBuilder));S(this,"_univerInstanceService",this.injector.get(r.IUniverInstanceService));S(this,"_listCacheService",this.injector.get(m.DataValidationListCacheService));S(this,"order",50);S(this,"offsetFormulaByRange",!1);S(this,"id",r.DataValidationType.LIST);S(this,"title","dataValidation.list.title");S(this,"operators",[]);S(this,"scopes",["sheet"]);S(this,"skipDefaultFontRender",e=>e.renderMode!==r.DataValidationRenderMode.TEXT)}validatorFormula(e,t,a){var d,c,h;const i=!r.Tools.isBlank(e.formula1),n=rt((d=e.formula1)!=null?d:"",this._lexer),l=(h=(c=this._univerInstanceService.getUnit(t,r.UniverInstanceType.UNIVER_SHEET))==null?void 0:c.getSheetBySheetId(a))==null?void 0:h.getName(),u=nt(e,l!=null?l:"");return{success:!!(i&&n&&!u),formula1:i?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:a}){var n;const i=(n=a.tb!==r.WrapStrategy.OVERFLOW?a.tb:r.WrapStrategy.CLIP)!=null?n:r.WrapStrategy.WRAP;if(e.type===r.DataValidationType.LIST&&(e.renderMode===r.DataValidationRenderMode.ARROW||e.renderMode===r.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 $(t)}async parseFormula(e,t,a){var u,d;const i=await this.formulaService.getRuleFormulaResult(t,a,e.uid),n=w((d=(u=i==null?void 0:i[0])==null?void 0:u.result)==null?void 0:d[0][0]);return{formula1:void 0,formula2:void 0,isFormulaValid:y(String(n))}}async isValidType(e,t,a){const{value:i,unitId:n,subUnitId:l}=e,{formula1:u=""}=a,d=r.isFormulaString(u)?this._listCacheService.getOrCompute(n,l,a).list:$(u);return this.parseCellValue(i).every(h=>d.includes(h))}generateRuleName(){return this.localeService.t("dataValidation.list.name")}generateRuleErrorMessage(){return this.localeService.t("dataValidation.list.error")}_getUnitAndSubUnit(e,t){var n,l;const a=(n=e?this._univerInstanceService.getUniverSheetInstance(e):void 0)!=null?n:this._univerInstanceService.getCurrentUnitForType(r.UniverInstanceType.UNIVER_SHEET);if(!a)return null;const i=(l=t?a.getSheetBySheetId(t):void 0)!=null?l:a.getActiveSheet();return i?{unitId:a.getUnitId(),subUnitId:i.getSheetId()}:null}getList(e,t,a){const i=this._getUnitAndSubUnit(t,a);if(!i)return[];const{unitId:n,subUnitId:l}=i;return this._listCacheService.getOrCompute(n,l,e).list}async getListAsync(e,t,a){var c,h;const{formula1:i=""}=e,n=this._getUnitAndSubUnit(t,a);if(!n)return[];const{unitId:l,subUnitId:u}=n,d=await this.formulaService.getRuleFormulaResult(l,u,e.uid);return r.isFormulaString(i)?at((h=(c=d==null?void 0:d[0])==null?void 0:c.result)==null?void 0:h[0][0]):$(i)}getListWithColor(e,t,a){const i=this._getUnitAndSubUnit(t,a);if(!i)return[];const{unitId:n,subUnitId:l}=i;return this._listCacheService.getOrCompute(n,l,e).listWithColor}getListWithColorMap(e,t,a){const i=this._getUnitAndSubUnit(t,a);if(!i)return{};const{unitId:n,subUnitId:l}=i;return this._listCacheService.getOrCompute(n,l,e).colorMap}}class ot extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"id",r.DataValidationType.TEXT_LENGTH);S(this,"title","dataValidation.textLength.title");S(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));S(this,"order",30);S(this,"operators",[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.EQUAL,r.DataValidationOperator.GREATER_THAN,r.DataValidationOperator.GREATER_THAN_OR_EQUAL,r.DataValidationOperator.LESS_THAN,r.DataValidationOperator.LESS_THAN_OR_EQUAL,r.DataValidationOperator.NOT_BETWEEN,r.DataValidationOperator.NOT_EQUAL]);S(this,"scopes",["sheet"]);S(this,"_customFormulaService",this.injector.get(m.DataValidationCustomFormulaService))}_isFormulaOrInt(e){return!r.Tools.isBlank(e)&&(r.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!1};const n=r.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=r.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),u=Z.includes(i),d=this.localeService.t("dataValidation.validFail.number");return u?{success:n&&l,formula1:n?void 0:d,formula2:l?void 0:d}:{success:n,formula1:d}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,i,n){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,n),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,n),{formula1:d,formula2:c}=e,h=y(String(l==null?void 0:l.v))&&y(String(u==null?void 0:u.v));return{formula1:this._parseNumber(r.isFormulaString(d)?l==null?void 0:l.v:d),formula2:this._parseNumber(r.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"}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:i}=k(this._lexerTreeBuilder,e,t);return`${this.localeService.t(p.TextLengthErrorTitleMap[e.operator]).replace(G,a!=null?a:"").replace(Y,i!=null?i:"")}`}}function Ce(o){var e,t;return o?o.p?!((t=(e=o.p.body)==null?void 0:e.dataStream)!=null?t:"").slice(0,-2).trim():r.Tools.isBlank(o.v):!0}function K(o,s,e,t,a="command",i=!0){const n=t.get(E.LexerTreeBuilder),l=t.get(p.DataValidatorRegistryService),u=[],d=[],c=t.get(m.SheetDataValidationModel),h=t.get(r.IUniverInstanceService),g=D.getSheetCommandTarget(h,{unitId:o,subUnitId:s});if(!g)return{redoMutations:u,undoMutations:d};const{worksheet:f}=g,_=new r.ObjectMatrix;let R=!1;function V(v,M){i&&v.forEach(T=>{r.Range.foreach(T,(C,F)=>{const O=f.getCellRaw(C,F),j=Ve(O);(Ce(O)||j===M)&&!(O!=null&&O.p)&&(R=!0,_.setValue(C,F,{v:M,p:null}))})})}if(e.forEach(v=>{switch(v.type){case"delete":u.push({id:p.RemoveDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.rule.uid,source:a}}),d.unshift({id:p.AddDataValidationMutation.id,params:{unitId:o,subUnitId:s,rule:v.rule,index:v.index,source:a}});break;case"update":{if(H(v.rule.type,l)){const T=v.oldRanges[0].startRow,C=v.oldRanges[0].startColumn,F=v.newRanges[0].startRow,O=v.newRanges[0].startColumn,j=F-T,oe=O-C,se=r.isFormulaString(v.rule.formula1)?n.moveFormulaRefOffset(v.rule.formula1,oe,j):v.rule.formula1,le=r.isFormulaString(v.rule.formula2)?n.moveFormulaRefOffset(v.rule.formula2,oe,j):v.rule.formula2;se!==v.rule.formula1||le!==v.rule.formula2||!r.isRangesEqual(v.newRanges,v.oldRanges)?(u.push({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.ALL,payload:{formula1:se,formula2:le,ranges:v.newRanges}}}}),d.unshift({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.ALL,payload:{formula1:v.rule.formula1,formula2:v.rule.formula2,ranges:v.oldRanges}}}})):(u.push({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.RANGE,payload:v.newRanges},source:a}}),d.unshift({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.RANGE,payload:v.oldRanges},source:a}}))}else u.push({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.RANGE,payload:v.newRanges},source:a}}),d.unshift({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.RANGE,payload:v.oldRanges},source:a}});const M=c.getRuleById(o,s,v.ruleId);if(M&&M.type===r.DataValidationType.CHECKBOX){const C=c.getValidator(r.DataValidationType.CHECKBOX).parseFormulaSync(M,o,s);V(v.newRanges,C.formula2)}break}case"add":{if(u.push({id:p.AddDataValidationMutation.id,params:{unitId:o,subUnitId:s,rule:v.rule,source:a}}),d.unshift({id:p.RemoveDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.rule.uid,source:a}}),v.rule.type===r.DataValidationType.CHECKBOX){const T=c.getValidator(r.DataValidationType.CHECKBOX).parseFormulaSync(v.rule,o,s);V(v.rule.ranges,T.originFormula2)}break}}}),R){const v={id:D.SetRangeValuesMutation.id,params:{unitId:o,subUnitId:s,cellValue:_.getData()}},M={id:D.SetRangeValuesMutation.id,params:D.SetRangeValuesUndoMutationFactory(t,v.params)};u.push(v),d.push(M)}return{redoMutations:u,undoMutations:d}}const Oe={type:r.CommandType.COMMAND,id:"sheet.command.updateDataValidationRuleRange",handler(o,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a,ruleId:i}=s,n=o.get(m.SheetDataValidationModel),l=o.get(r.ICommandService),u=o.get(r.IUndoRedoService);if(!n.getRuleById(e,t,i))return!1;const c=n.getRuleObjectMatrix(e,t).clone();c.updateRange(i,a);const h=c.diff(n.getRules(e,t)),{redoMutations:g,undoMutations:f}=K(e,t,h,o);return u.pushUndoRedo({undoMutations:f,redoMutations:g,unitID:e}),r.sequenceExecute(g,l),!0}},Fe={type:r.CommandType.COMMAND,id:"sheet.command.addDataValidation",handler(o,s){if(!s)return!1;const{unitId:e,subUnitId:t,rule:a}=s,i=o.get(m.SheetDataValidationModel),n=o.get(r.ICommandService),l=o.get(r.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:g,undoMutations:f}=K(e,t,d,o);return g.push({id:p.AddDataValidationMutation.id,params:h}),f.unshift({id:p.RemoveDataValidationMutation.id,params:{unitId:e,subUnitId:t,ruleId:a.uid}}),l.pushUndoRedo({unitID:e,redoMutations:g,undoMutations:f}),r.sequenceExecute(g,n),!0}},Ie={type:r.CommandType.COMMAND,id:"sheets.command.update-data-validation-setting",handler(o,s){if(!s)return!1;const e=o.get(r.ICommandService),t=o.get(r.IUndoRedoService),a=o.get(m.SheetDataValidationModel),i=o.get(p.DataValidatorRegistryService),{unitId:n,subUnitId:l,ruleId:u,setting:d}=s,c=i.getValidatorItem(d.type);if(!c)return!1;const h=a.getRuleById(n,l,u);if(!h)return!1;const g={...h,...d};if(!c.validatorFormula(g,n,l).success)return!1;const f={unitId:n,subUnitId:l,ruleId:u,payload:{type:p.UpdateRuleType.SETTING,payload:{...d,...c.normalizeFormula(g,n,l)}}},_=[{id:p.UpdateDataValidationMutation.id,params:f}],R={unitId:n,subUnitId:l,ruleId:u,payload:{type:p.UpdateRuleType.SETTING,payload:p.getRuleSetting(h)}},V=[{id:p.UpdateDataValidationMutation.id,params:R}];if(d.type===r.DataValidationType.CHECKBOX){const M=h.ranges,T=o.get(r.IUniverInstanceService),C=D.getSheetCommandTarget(T,{unitId:n,subUnitId:l});if(C){const F=new r.ObjectMatrix,{worksheet:O}=C,{formula2:j=Q,formula1:oe=q}=h,{formula2:se=Q,formula1:le=q}=d;let _e=!1;if(M.forEach(ue=>{r.Range.foreach(ue,(z,Re)=>{const I=O.getCellRaw(z,Re),He=Ve(I);(Ce(I)||He===String(j))&&!(I!=null&&I.p)?(F.setValue(z,Re,{v:se,p:null}),_e=!0):He===String(oe)&&!(I!=null&&I.p)&&(F.setValue(z,Re,{v:le,p:null}),_e=!0)})}),_e){const ue={id:D.SetRangeValuesMutation.id,params:{unitId:n,subUnitId:l,cellValue:F.getData()}},z={id:D.SetRangeValuesMutation.id,params:D.SetRangeValuesUndoMutationFactory(o,ue.params)};_.push(ue),V.push(z)}}}return r.sequenceExecute(_,e).result?(t.pushUndoRedo({unitID:n,redoMutations:_,undoMutations:V}),!0):!1}},Ne={type:r.CommandType.COMMAND,id:"sheets.command.update-data-validation-options",handler(o,s){if(!s)return!1;const e=o.get(r.ICommandService),t=o.get(r.IUndoRedoService),a=o.get(m.SheetDataValidationModel),{unitId:i,subUnitId:n,ruleId:l,options:u}=s,d=a.getRuleById(i,n,l);if(!d)return!1;const c={unitId:i,subUnitId:n,ruleId:l,payload:{type:p.UpdateRuleType.OPTIONS,payload:u}},h=[{id:p.UpdateDataValidationMutation.id,params:c}],g={unitId:i,subUnitId:n,ruleId:l,payload:{type:p.UpdateRuleType.OPTIONS,payload:p.getRuleOptions(d)}},f=[{id:p.UpdateDataValidationMutation.id,params:g}];return t.pushUndoRedo({unitID:i,redoMutations:h,undoMutations:f}),e.executeCommand(p.UpdateDataValidationMutation.id,c),!0}},Ae={type:r.CommandType.COMMAND,id:"sheets.command.clear-range-data-validation",handler(o,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a}=s,i=o.get(r.ICommandService),n=o.get(r.IUniverInstanceService),l=D.getSheetCommandTarget(n,{unitId:e,subUnitId:t}),u=o.get(m.SheetDataValidationModel);if(!l)return!1;const d=o.get(r.IUndoRedoService),c=u.getRuleObjectMatrix(e,t).clone();c.removeRange(a);const h=c.diff(u.getRules(e,t)),{redoMutations:g,undoMutations:f}=K(e,t,h,o);return d.pushUndoRedo({unitID:e,redoMutations:g,undoMutations:f}),r.sequenceExecute(g,i).result}},Ue={type:r.CommandType.COMMAND,id:"sheet.command.remove-all-data-validation",handler(o,s){if(!s)return!1;const{unitId:e,subUnitId:t}=s,a=o.get(r.ICommandService),i=o.get(m.SheetDataValidationModel),n=o.get(r.IUndoRedoService),l=[...i.getRules(e,t)],u={unitId:e,subUnitId:t,ruleId:l.map(h=>h.uid)},d=[{id:p.RemoveDataValidationMutation.id,params:u}],c=[{id:p.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:l}}];return n.pushUndoRedo({redoMutations:d,undoMutations:c,unitID:e}),a.executeCommand(p.RemoveDataValidationMutation.id,u),!0}},st=(o,s)=>{const e=o.get(m.SheetDataValidationModel),{unitId:t,subUnitId:a,ruleId:i,source:n}=s;if(Array.isArray(i)){const u=i.map(d=>e.getRuleById(t,a,d)).filter(Boolean);return[{id:p.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:u,source:n}}]}return[{id:p.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:{...e.getRuleById(t,a,i)},index:e.getRuleIndex(t,a,i)}}]},we={type:r.CommandType.COMMAND,id:"sheet.command.remove-data-validation-rule",handler(o,s){if(!s)return!1;const{unitId:e,subUnitId:t,ruleId:a}=s,i=o.get(r.ICommandService),n=o.get(r.IUndoRedoService),l=o.get(m.SheetDataValidationModel),u=[{id:p.RemoveDataValidationMutation.id,params:s}],d=[{id:p.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:{...l.getRuleById(e,t,a)},index:l.getRuleIndex(e,t,a)}}];return n.pushUndoRedo({undoMutations:d,redoMutations:u,unitID:s.unitId}),i.executeCommand(p.RemoveDataValidationMutation.id,s),!0}},Le="SHEET_DATA_VALIDATION_PLUGIN";var be=(o=>(o[o.View=0]="View",o[o.Edit=1]="Edit",o[o.ManageCollaborator=2]="ManageCollaborator",o[o.Print=3]="Print",o[o.Duplicate=4]="Duplicate",o[o.Comment=5]="Comment",o[o.Copy=6]="Copy",o[o.Share=7]="Share",o[o.Export=8]="Export",o[o.MoveWorksheet=9]="MoveWorksheet",o[o.DeleteWorksheet=10]="DeleteWorksheet",o[o.HideWorksheet=11]="HideWorksheet",o[o.RenameWorksheet=12]="RenameWorksheet",o[o.CreateWorksheet=13]="CreateWorksheet",o[o.SetWorksheetStyle=14]="SetWorksheetStyle",o[o.EditWorksheetCell=15]="EditWorksheetCell",o[o.InsertHyperlink=16]="InsertHyperlink",o[o.Sort=17]="Sort",o[o.Filter=18]="Filter",o[o.PivotTable=19]="PivotTable",o[o.FloatImg=20]="FloatImg",o[o.History=21]="History",o[o.RwHgtClWdt=22]="RwHgtClWdt",o[o.ViemRwHgtClWdt=23]="ViemRwHgtClWdt",o[o.ViewFilter=24]="ViewFilter",o[o.MoveSheet=25]="MoveSheet",o[o.DeleteSheet=26]="DeleteSheet",o[o.HideSheet=27]="HideSheet",o[o.CopySheet=28]="CopySheet",o[o.RenameSheet=29]="RenameSheet",o[o.CreateSheet=30]="CreateSheet",o[o.SelectProtectedCells=31]="SelectProtectedCells",o[o.SelectUnProtectedCells=32]="SelectUnProtectedCells",o[o.SetCellStyle=33]="SetCellStyle",o[o.SetCellValue=34]="SetCellValue",o[o.SetRowStyle=35]="SetRowStyle",o[o.SetColumnStyle=36]="SetColumnStyle",o[o.InsertRow=37]="InsertRow",o[o.InsertColumn=38]="InsertColumn",o[o.DeleteRow=39]="DeleteRow",o[o.DeleteColumn=40]="DeleteColumn",o[o.EditExtraObject=41]="EditExtraObject",o[o.Delete=42]="Delete",o[o.RecoverHistory=43]="RecoverHistory",o[o.ViewHistory=44]="ViewHistory",o[o.CreatePermissionObject=45]="CreatePermissionObject",o[o.UNRECOGNIZED=-1]="UNRECOGNIZED",o))(be||{}),lt=Object.getOwnPropertyDescriptor,ut=(o,s,e,t)=>{for(var a=t>1?void 0:t?lt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},pe=(o,s)=>(e,t)=>s(e,t,o);m.DataValidationFormulaController=class extends r.Disposable{constructor(s,e,t){super(),this._univerInstanceService=s,this._permissionService=e,this._lexerTreeBuilder=t}getFormulaRefCheck(s){var t,a;const e=this._lexerTreeBuilder.sequenceNodesBuilder(s);if(!e)return!0;for(let i=0;i<e.length;i++){const n=e[i];if(typeof n=="string")continue;const{token:l}=n,u=E.deserializeRangeWithSheetWithCache(l),d=this._univerInstanceService.getCurrentUnitForType(r.UniverInstanceType.UNIVER_SHEET);let c=d.getActiveSheet();const h=d.getUnitId();if(u.sheetName){if(c=d.getSheetBySheetName(u.sheetName),!c)return!1;const V=c==null?void 0:c.getSheetId();if(!this._permissionService.getPermissionPoint(new D.WorksheetViewPermission(h,V).id))return!1}if(!c)return!1;const{startRow:g,endRow:f,startColumn:_,endColumn:R}=u.range;for(let V=g;V<=f;V++)for(let v=_;v<=R;v++){const M=(a=(t=c.getCell(V,v))==null?void 0:t.selectionProtection)==null?void 0:a[0];if((M==null?void 0:M[be.View])===!1)return!1}}return!0}},m.DataValidationFormulaController=ut([pe(0,r.IUniverInstanceService),pe(1,r.IPermissionService),pe(2,r.Inject(E.LexerTreeBuilder))],m.DataValidationFormulaController);const Be={name:"@univerjs/sheets-data-validation",version:"0.16.1-insiders.20260311-074e8ca"},dt="sheets-data-validation.config",je={};var ct=Object.getOwnPropertyDescriptor,ht=(o,s,e,t)=>{for(var a=t>1?void 0:t?ct(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},Se=(o,s)=>(e,t)=>s(e,t,o);let ee=class extends r.Disposable{constructor(s,e,t){super();S(this,"_disposableMap",new Map);S(this,"registerRule",(s,e,t)=>{H(t.type,this._validatorRegistryService)&&this.register(s,e,t)});this._dataValidationModel=s,this._formulaRefRangeService=e,this._validatorRegistryService=t,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}register(s,e,t){const a=t.ranges,i=t.formula1,n=t.formula2,l=this._formulaRefRangeService.registerRangeFormula(s,e,a,[i!=null?i:"",n!=null?n:""],d=>{if(d.length===0)return{undos:[{id:p.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:t,source:"patched"}}],redos:[{id:p.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,source:"patched"}}]};const c=[],h=[],g=d[0];c.push({id:p.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.ALL,payload:{ranges:g.ranges,formula1:g.formulas[0],formula2:g.formulas[1]}},source:"patched"}}),h.push({id:p.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.ALL,payload:{ranges:a,formula1:i,formula2:n}},source:"patched"}});for(let f=1;f<d.length;f++){const _=d[f],R=r.generateRandomId();c.push({id:p.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:{...t,uid:R,formula1:_.formulas[0],formula2:_.formulas[1],ranges:_.ranges},source:"patched"}}),h.push({id:p.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:R,source:"patched"}})}return{undos:h,redos:c}}),u=this._getIdWithUnitId(s,e,t.uid);this._disposableMap.set(u,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,i]of t)for(const n of i)this.registerRule(e,a,n);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:i}=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,a,i.uid));n&&n.dispose();break}case"update":{const n=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,n.uid));l&&l.dispose(),this.registerRule(e.unitId,e.subUnitId,n);break}}})),this.disposeWithMe(r.toDisposable(()=>{this._disposableMap.forEach(e=>{e.dispose()}),this._disposableMap.clear()}))}};ee=ht([Se(0,r.Inject(m.SheetDataValidationModel)),Se(1,r.Inject(de.FormulaRefRangeService)),Se(2,r.Inject(p.DataValidatorRegistryService))],ee);var mt=Object.getOwnPropertyDescriptor,gt=(o,s,e,t)=>{for(var a=t>1?void 0:t?mt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},b=(o,s)=>(e,t)=>s(e,t,o);let te=class extends r.Disposable{constructor(s,e,t,a,i,n){super();S(this,"_disposableMap",new Map);S(this,"registerRule",(s,e,t)=>{H(t.type,this._validatorRegistryService)||(this.register(s,e,t),this.registerFormula(s,e,t))});this._dataValidationModel=s,this._injector=e,this._refRangeService=t,this._dataValidationFormulaService=a,this._formulaRefRangeService=i,this._validatorRegistryService=n,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}registerFormula(s,e,t){var d;const a=t.uid,i=this._getIdWithUnitId(s,e,a),n=(d=this._disposableMap.get(i))!=null?d:new Set,l=(c,h)=>{const g=this._dataValidationModel.getRuleById(s,e,a);if(!g)return{redos:[],undos:[]};const f=g[c];if(!f||f===h)return{redos:[],undos:[]};const _={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.SETTING,payload:{type:g.type,formula1:g.formula1,formula2:g.formula2,[c]:h}},source:"patched"},R={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.SETTING,payload:{type:g.type,formula1:g.formula1,formula2:g.formula2}},source:"patched"},V=[{id:p.UpdateDataValidationMutation.id,params:_}],v=[{id:p.UpdateDataValidationMutation.id,params:R}];return{redos:V,undos:v}},u=this._dataValidationFormulaService.getRuleFormulaInfo(s,e,a);if(u){const[c,h]=u;if(c){const g=this._formulaRefRangeService.registerFormula(s,e,c.text,f=>l("formula1",f));n.add(()=>g.dispose())}if(h){const g=this._formulaRefRangeService.registerFormula(s,e,h.text,f=>l("formula2",f));n.add(()=>g.dispose())}}}register(s,e,t){var u;const a=d=>{const c=[...t.ranges],g=c.map(_=>D.handleCommonDefaultRangeChangeWithEffectRefCommands(_,d)).filter(_=>!!_).flat();if(r.isRangesEqual(g,c))return{redos:[],undos:[]};if(g.length){const _={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.RANGE,payload:g},source:"patched"},R=[{id:p.UpdateDataValidationMutation.id,params:_}],V=[{id:p.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.RANGE,payload:c},source:"patched"}}];return{redos:R,undos:V}}else{const _={unitId:s,subUnitId:e,ruleId:t.uid},R=[{id:p.RemoveDataValidationMutation.id,params:_}],V=st(this._injector,_);return{redos:R,undos:V}}},i=[];t.ranges.forEach(d=>{const c=this._refRangeService.registerRefRange(d,a,s,e);i.push(()=>c.dispose())});const n=this._getIdWithUnitId(s,e,t.uid),l=(u=this._disposableMap.get(n))!=null?u:new Set;l.add(()=>i.forEach(d=>d())),this._disposableMap.set(n,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,i]of t)for(const n of i)this.registerRule(e,a,n);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:i}=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,a,i.uid));n&&n.forEach(l=>l());break}case"update":{const n=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,n.uid));l&&l.forEach(u=>u()),this.registerRule(e.unitId,e.subUnitId,n);break}}})),this.disposeWithMe(r.toDisposable(()=>{this._disposableMap.forEach(e=>{e.forEach(t=>t())}),this._disposableMap.clear()}))}};te=gt([b(0,r.Inject(m.SheetDataValidationModel)),b(1,r.Inject(r.Injector)),b(2,r.Inject(D.RefRangeService)),b(3,r.Inject(m.DataValidationFormulaService)),b(4,r.Inject(de.FormulaRefRangeService)),b(5,r.Inject(p.DataValidatorRegistryService))],te);var pt=Object.getOwnPropertyDescriptor,St=(o,s,e,t)=>{for(var a=t>1?void 0:t?pt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},fe=(o,s)=>(e,t)=>s(e,t,o);let ae=class extends r.Disposable{constructor(o,s,e){super(),this._sheetInterceptorService=o,this._univerInstanceService=s,this._sheetDataValidationModel=e,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:o=>{var s;if(o.id===D.RemoveSheetCommand.id){const e=o.params,t=e.unitId||this._univerInstanceService.getCurrentUnitForType(r.UniverInstanceType.UNIVER_SHEET).getUnitId(),a=this._univerInstanceService.getUniverSheetInstance(t);if(!a)return{redos:[],undos:[]};const i=e.subUnitId||((s=a.getActiveSheet())==null?void 0:s.getSheetId());if(!i)return{redos:[],undos:[]};const n=this._sheetDataValidationModel.getRules(t,i);if(n.length===0)return{redos:[],undos:[]};const l=n.map(c=>c.uid),u={unitId:t,subUnitId:i,ruleId:l,source:"patched"},d={unitId:t,subUnitId:i,rule:[...n],source:"patched"};return{redos:[{id:p.RemoveDataValidationMutation.id,params:u}],undos:[{id:p.AddDataValidationMutation.id,params:d}]}}else if(o.id===D.CopySheetCommand.id){const e=o.params,{unitId:t,subUnitId:a,targetSubUnitId:i}=e;if(!t||!a||!i)return{redos:[],undos:[]};const n=this._sheetDataValidationModel.getRules(t,a);if(n.length===0)return{redos:[],undos:[]};const l=n.map(u=>({...u,uid:r.generateRandomId(6)}));return{redos:[{id:p.AddDataValidationMutation.id,params:{unitId:t,subUnitId:i,rule:l,source:"patched"}}],undos:[{id:p.RemoveDataValidationMutation.id,params:{unitId:t,subUnitId:i,ruleId:l.map(u=>u.uid),source:"patched"}}]}}return{redos:[],undos:[]}}}))}};ae=St([fe(0,r.Inject(D.SheetInterceptorService)),fe(1,r.Inject(r.IUniverInstanceService)),fe(2,r.Inject(m.SheetDataValidationModel))],ae);class ft extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"id",r.DataValidationType.ANY);S(this,"title","dataValidation.any.title");S(this,"operators",[]);S(this,"scopes",["sheet"]);S(this,"order",0);S(this,"offsetFormulaByRange",!1)}async parseFormula(e,t,a){return{formula1:e.formula1,formula2:e.formula2,isFormulaValid:!0}}validatorFormula(e,t,a){return{success:!0}}async isValidType(e,t,a){return!0}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.any.error")}}class vt extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"id",r.DataValidationType.CUSTOM);S(this,"title","dataValidation.custom.title");S(this,"operators",[]);S(this,"scopes",["sheet"]);S(this,"order",60);S(this,"_customFormulaService",this.injector.get(m.DataValidationCustomFormulaService));S(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder))}validatorFormula(e,t,a){var d;const i=r.isFormulaString(e.formula1),n=(d=e.formula1)!=null?d:"",u=this._lexerTreeBuilder.checkIfAddBracket(n)===0&&n.startsWith(E.operatorToken.EQUALS);return{success:i&&u,formula1:i&&u?"":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:n,unitId:l,subUnitId:u}=e,d=await this._customFormulaService.getCellFormulaValue(l,u,a.uid,n,i),c=d==null?void 0:d.v;return y(String(c))&&r.Tools.isDefine(c)&&c!==""?d.t===r.CellValueType.BOOLEAN?!!c:typeof c=="boolean"?c:typeof c=="number"?!!c:typeof c=="string"?y(c):!!c:!1}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.custom.error")}generateRuleName(e){var t;return this.localeService.t("dataValidation.custom.ruleName").replace("{FORMULA1}",(t=e.formula1)!=null?t:"")}}class Pe extends ge{constructor(){super(...arguments);S(this,"id",r.DataValidationType.LIST_MULTIPLE);S(this,"title","dataValidation.listMultiple.title");S(this,"offsetFormulaByRange",!1);S(this,"skipDefaultFontRender",()=>!0)}}class _t extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"_customFormulaService",this.injector.get(m.DataValidationCustomFormulaService));S(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));S(this,"id",r.DataValidationType.WHOLE);S(this,"title","dataValidation.whole.title");S(this,"order",10);S(this,"operators",[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.EQUAL,r.DataValidationOperator.GREATER_THAN,r.DataValidationOperator.GREATER_THAN_OR_EQUAL,r.DataValidationOperator.LESS_THAN,r.DataValidationOperator.LESS_THAN_OR_EQUAL,r.DataValidationOperator.NOT_BETWEEN,r.DataValidationOperator.NOT_EQUAL]);S(this,"scopes",["sheet"])}_isFormulaOrInt(e){return!r.Tools.isBlank(e)&&(r.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}async isValidType(e,t,a){const{value:i}=e,n=X(i);return!Number.isNaN(n)&&Number.isInteger(n)}transform(e,t,a){const{value:i}=e;return{...e,value:X(i)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,i,n){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,n),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,n),{formula1:d,formula2:c}=e,h=r.isFormulaString(d)?l==null?void 0:l.v:d,g=r.isFormulaString(c)?u==null?void 0:u.v:c,f=y(`${h}`)&&y(`${g}`);return{formula1:this._parseNumber(h),formula2:this._parseNumber(g),isFormulaValid:f}}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!0};const n=r.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=r.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),u=Z.includes(i),d=this.localeService.t("dataValidation.validFail.number");return u?{success:n&&l,formula1:n?void 0:d,formula2:l?void 0:d}:{success:n,formula1:d}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(J.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:i}=k(this._lexerTreeBuilder,e,t);return`${this.localeService.t(J[e.operator]).replace(G,a!=null?a:"").replace(Y,i!=null?i:"")}`}}var Rt=Object.getOwnPropertyDescriptor,Vt=(o,s,e,t)=>{for(var a=t>1?void 0:t?Rt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},B=(o,s)=>(e,t)=>s(e,t,o);let ie=class extends r.RxDisposable{constructor(o,s,e,t,a,i){super(),this._univerInstanceService=o,this._dataValidatorRegistryService=s,this._injector=e,this._selectionManagerService=t,this._sheetInterceptorService=a,this._sheetDataValidationModel=i,this._init()}_init(){this._registerValidators(),this._initCommandInterceptor()}_registerValidators(){[ft,tt,_t,ot,Te,Ee,ge,Pe,vt].forEach(o=>{const s=this._injector.createInstance(o);this.disposeWithMe(this._dataValidatorRegistryService.register(s)),this.disposeWithMe(r.toDisposable(()=>this._injector.delete(o)))})}_initCommandInterceptor(){this._sheetInterceptorService.interceptCommand({getMutations:o=>{var s;if(o.id===D.ClearSelectionAllCommand.id){const e=this._univerInstanceService.getCurrentUnitForType(r.UniverInstanceType.UNIVER_SHEET),t=e.getUnitId(),a=e.getActiveSheet();if(!a)throw new Error("No active sheet found");const i=a.getSheetId(),n=(s=this._selectionManagerService.getCurrentSelections())==null?void 0:s.map(h=>h.range),l=this._sheetDataValidationModel.getRuleObjectMatrix(t,i).clone();n&&l.removeRange(n);const u=l.diff(this._sheetDataValidationModel.getRules(t,i)),{redoMutations:d,undoMutations:c}=K(t,i,u,this._injector,"patched");return{undos:c,redos:d}}return{undos:[],redos:[]}}})}};ie=Vt([B(0,r.IUniverInstanceService),B(1,r.Inject(p.DataValidatorRegistryService)),B(2,r.Inject(r.Injector)),B(3,r.Inject(D.SheetsSelectionsService)),B(4,r.Inject(D.SheetInterceptorService)),B(5,r.Inject(m.SheetDataValidationModel))],ie);var Dt=Object.getOwnPropertyDescriptor,Mt=(o,s,e,t)=>{for(var a=t>1?void 0:t?Dt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},re=(o,s)=>(e,t)=>s(e,t,o);m.SheetsDataValidationValidatorService=class extends r.Disposable{constructor(s,e,t,a){super(),this._univerInstanceService=s,this._sheetDataValidationModel=e,this._dataValidationCacheService=t,this._lifecycleService=a,this._initRecalculate()}_initRecalculate(){const s=e=>{if(e.length===0)return;const t=this._univerInstanceService.getCurrentUnitForType(r.UniverInstanceType.UNIVER_SHEET),a=t==null?void 0:t.getActiveSheet(),i={};e.flat().forEach(n=>{i[n.unitId]||(i[n.unitId]={}),i[n.unitId][n.subUnitId]||(i[n.unitId][n.subUnitId]=[]);const l=this._univerInstanceService.getUnit(n.unitId,r.UniverInstanceType.UNIVER_SHEET),u=l==null?void 0:l.getSheetBySheetId(n.subUnitId);u&&i[n.unitId][n.subUnitId].push(...n.ranges.map(d=>r.Range.transformRange(d,u)))}),Object.entries(i).forEach(([n,l])=>{Object.entries(l).forEach(([u,d])=>{(t==null?void 0:t.getUnitId())===n&&(a==null?void 0:a.getSheetId())===u?this.validatorRanges(n,u,d):requestIdleCallback(()=>{this.validatorRanges(n,u,d)})})})};this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(U.bufferWhen(()=>this._lifecycleService.lifecycle$.pipe(U.filter(e=>e===r.LifecycleStages.Rendered)))).subscribe(s)),this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(U.filter(()=>this._lifecycleService.stage>=r.LifecycleStages.Rendered),r.bufferDebounceTime(20)).subscribe(s))}async _validatorByCell(s,e,t,a){const i=s.getUnitId(),n=e.getSheetId();if(!r.Tools.isDefine(t)||!r.Tools.isDefine(a))throw new Error(`row or col is not defined, row: ${t}, col: ${a}`);let l=t,u=a;const d=e.getMergedCell(t,a);d&&(l=d.startRow,u=d.startColumn);const c=this._sheetDataValidationModel.getRuleByLocation(i,n,l,u);return c?new Promise(h=>{this._sheetDataValidationModel.validator(c,{unitId:i,subUnitId:n,row:l,col:u,worksheet:e,workbook:s},g=>{h(g)})}):r.DataValidationStatus.VALID}async validatorCell(s,e,t,a){const i=this._univerInstanceService.getUnit(s,r.UniverInstanceType.UNIVER_SHEET);if(!i)throw new Error(`cannot find current workbook, unitId: ${s}`);const n=i.getSheetBySheetId(e);if(!n)throw new Error(`cannot find current worksheet, sheetId: ${e}`);return this._validatorByCell(i,n,t,a)}async validatorRanges(s,e,t){if(!t.length)return Promise.resolve([]);const a=this._univerInstanceService.getUnit(s,r.UniverInstanceType.UNIVER_SHEET);if(!a)throw new Error(`cannot find current workbook, unitId: ${s}`);const i=a.getSheetBySheetId(e);if(!i)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const l=this._sheetDataValidationModel.getRules(s,e).map(h=>h.ranges).flat(),u=t.map(h=>l.map(g=>r.getIntersectRange(h,g))).flat().filter(Boolean),d=[],c=await Promise.all(u.map((h,g)=>{const f=[];for(let _=h.startRow;_<=h.endRow;_++)for(let R=h.startColumn;R<=h.endColumn;R++){f.push(this._validatorByCell(a,i,_,R));const V=i.getMergedCell(_,R);V&&d.push({resultRowIndex:g,resultColIndex:f.length-1,row:V.startRow,col:V.startColumn})}return Promise.all(f)}));return d.length&&d.forEach(({resultRowIndex:h,resultColIndex:g,row:f,col:_})=>{var R;c[h][g]===r.DataValidationStatus.VALIDATING&&(c[h][g]=(R=this._dataValidationCacheService.getValue(s,e,f,_))!=null?R:r.DataValidationStatus.VALID)}),c}async validatorWorksheet(s,e){const t=this._univerInstanceService.getUnit(s,r.UniverInstanceType.UNIVER_SHEET);if(!t)throw new Error(`cannot find current workbook, unitId: ${s}`);const a=t.getSheetBySheetId(e);if(!a)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const i=this._sheetDataValidationModel.getRules(s,e);return await Promise.all(i.map(n=>Promise.all(n.ranges.map(l=>{const u=[];return r.Range.foreach(l,(d,c)=>{u.push(this._validatorByCell(t,a,d,c))}),Promise.all(u)})))),this._dataValidationCacheService.ensureCache(s,e)}async validatorWorkbook(s){const e=this._sheetDataValidationModel.getSubUnitIds(s),t=await Promise.all(e.map(i=>this.validatorWorksheet(s,i))),a={};return t.forEach((i,n)=>{a[e[n]]=i}),a}getDataValidations(s,e,t){const a=this._sheetDataValidationModel.getRuleObjectMatrix(s,e),i=new Set;return t.forEach(l=>{r.Range.foreach(l,(u,d)=>{const c=a.getValue(u,d);c&&i.add(c)})}),Array.from(i).map(l=>this._sheetDataValidationModel.getRuleById(s,e,l)).filter(Boolean)}getDataValidation(s,e,t){return this.getDataValidations(s,e,t)[0]}},m.SheetsDataValidationValidatorService=Mt([re(0,r.IUniverInstanceService),re(1,r.Inject(m.SheetDataValidationModel)),re(2,r.Inject(m.DataValidationCacheService)),re(3,r.Inject(r.LifecycleService))],m.SheetsDataValidationValidatorService);var Et=Object.defineProperty,yt=Object.getOwnPropertyDescriptor,Tt=(o,s,e)=>s in o?Et(o,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[s]=e,Ct=(o,s,e,t)=>{for(var a=t>1?void 0:t?yt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},ve=(o,s)=>(e,t)=>s(e,t,o),ne=(o,s,e)=>Tt(o,typeof s!="symbol"?s+"":s,e);m.UniverSheetsDataValidationPlugin=class extends r.Plugin{constructor(s=je,e,t,a){super(),this._config=s,this._injector=e,this._commandService=t,this._configService=a;const{...i}=r.merge({},je,this._config);this._configService.setConfig(dt,i)}onStarting(){[[m.DataValidationCacheService],[m.DataValidationListCacheService],[m.DataValidationFormulaService],[m.DataValidationCustomFormulaService],[m.SheetsDataValidationValidatorService],[m.SheetDataValidationModel],[ie],[m.DataValidationFormulaController],[ae],[te],[ee]].forEach(s=>{this._injector.add(s)}),[Fe,Oe,Ie,Ne,we,Ue,Ae].forEach(s=>{this._commandService.registerCommand(s)}),this._injector.get(m.DataValidationCacheService),this._injector.get(m.SheetsDataValidationValidatorService),this._injector.get(ie),this._injector.get(ee),this._injector.get(te)}onReady(){this._injector.get(ae)}onRendered(){this._injector.get(m.DataValidationFormulaController)}},ne(m.UniverSheetsDataValidationPlugin,"pluginName",Le),ne(m.UniverSheetsDataValidationPlugin,"packageName",Be.name),ne(m.UniverSheetsDataValidationPlugin,"version",Be.version),ne(m.UniverSheetsDataValidationPlugin,"type",r.UniverInstanceType.UNIVER_SHEET),m.UniverSheetsDataValidationPlugin=Ct([r.DependentOn(de.UniverSheetsFormulaPlugin,p.UniverDataValidationPlugin),ve(1,r.Inject(r.Injector)),ve(2,r.ICommandService),ve(3,r.IConfigService)],m.UniverSheetsDataValidationPlugin);function Ot(o){const e=o.get(D.SheetsSelectionsService).getCurrentSelections().map(i=>i.range);return{uid:r.generateRandomId(6),type:r.DataValidationType.DECIMAL,operator:r.DataValidationOperator.EQUAL,formula1:"100",ranges:e!=null?e:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}const Ft="data-validation.custom-formula-input",It="data-validation.formula-input",Nt="data-validation.list-formula-input",At="data-validation.checkbox-formula-input";m.AddSheetDataValidationCommand=Fe,m.BASE_FORMULA_INPUT_NAME=It,m.CHECKBOX_FORMULA_1=q,m.CHECKBOX_FORMULA_2=Q,m.CHECKBOX_FORMULA_INPUT_NAME=At,m.CUSTOM_FORMULA_INPUT_NAME=Ft,m.CheckboxValidator=Ee,m.ClearRangeDataValidationCommand=Ae,m.DATA_VALIDATION_PLUGIN_NAME=Le,m.DateValidator=Te,m.LIST_FORMULA_INPUT_NAME=Nt,m.ListMultipleValidator=Pe,m.ListValidator=ge,m.RemoveSheetAllDataValidationCommand=Ue,m.RemoveSheetDataValidationCommand=we,m.UpdateSheetDataValidationOptionsCommand=Ne,m.UpdateSheetDataValidationRangeCommand=Oe,m.UpdateSheetDataValidationSettingCommand=Ie,m.createDefaultNewRule=Ot,m.deserializeListOptions=$,m.getCellValueNumber=X,m.getCellValueOrigin=N,m.getDataValidationCellValue=xe,m.getDataValidationDiffMutations=K,m.getFormulaCellData=P,m.getFormulaResult=w,m.getTransformedFormula=k,m.isLegalFormulaResult=y,m.serializeListOptions=Qe,m.transformCheckboxValue=x,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(m,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@univerjs/core"),require("@univerjs/data-validation"),require("@univerjs/engine-formula"),require("@univerjs/sheets"),require("rxjs"),require("@univerjs/sheets-formula")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@univerjs/data-validation","@univerjs/engine-formula","@univerjs/sheets","rxjs","@univerjs/sheets-formula"],r):(m=typeof globalThis<"u"?globalThis:m||self,r(m.UniverSheetsDataValidation={},m.UniverCore,m.UniverDataValidation,m.UniverEngineFormula,m.UniverSheets,m.rxjs,m.UniverSheetsFormula))})(this,(function(m,r,p,E,D,U,de){"use strict";var Ut=Object.defineProperty;var wt=(m,r,p)=>r in m?Ut(m,r,{enumerable:!0,configurable:!0,writable:!0,value:p}):m[r]=p;var S=(m,r,p)=>wt(m,typeof r!="symbol"?r+"":r,p);var We=Object.getOwnPropertyDescriptor,$e=(o,s,e,t)=>{for(var a=t>1?void 0:t?We(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},ce=(o,s)=>(e,t)=>s(e,t,o);m.DataValidationCacheService=class extends r.Disposable{constructor(e,t,a){super();S(this,"_cacheMatrix",new Map);S(this,"_dirtyRanges$",new U.Subject);S(this,"dirtyRanges$",this._dirtyRanges$.asObservable());this._commandService=e,this._univerInstanceService=t,this._sheetDataValidationModel=a,this._initDirtyRanges(),this._initSheetRemove()}_initDirtyRanges(){this.disposeWithMe(this._commandService.onCommandExecuted((e,t)=>{if(e.id===D.SetRangeValuesMutation.id&&!(t!=null&&t.onlyLocal)){const{cellValue:a,unitId:i,subUnitId:n}=e.params;if(a){const l=new r.ObjectMatrix(a).getDataRange();if(l.endRow===-1)return;const c=this._sheetDataValidationModel.getRules(i,n).map(h=>h.ranges).flat().map(h=>r.getIntersectRange(h,l)).filter(Boolean);c.length&&this.markRangeDirty(i,n,c,!0)}}}))}_initSheetRemove(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{var t;if(e.id===D.RemoveSheetMutation.id){const{unitId:a,subUnitId:i}=e.params;(t=this._cacheMatrix.get(a))==null||t.delete(i)}})),this.disposeWithMe(this._univerInstanceService.unitDisposed$.subscribe(e=>{e.type===r.UniverInstanceType.UNIVER_SHEET&&this._cacheMatrix.delete(e.getUnitId())}))}_ensureCache(e,t){let a=this._cacheMatrix.get(e);a||(a=new Map,this._cacheMatrix.set(e,a));let i=a.get(t);return i||(i=new r.ObjectMatrix,a.set(t,i)),i}ensureCache(e,t){return this._ensureCache(e,t)}addRule(e,t,a){this.markRangeDirty(e,t,a.ranges)}removeRule(e,t,a){this._deleteRange(e,t,a.ranges)}markRangeDirty(e,t,a,i){const n=this._ensureCache(e,t);a.forEach(l=>{r.Range.foreach(l,(u,d)=>{n.getValue(u,d)!==void 0&&n.setValue(u,d,void 0)})}),this._dirtyRanges$.next({unitId:e,subUnitId:t,ranges:a,isSetRange:i})}_deleteRange(e,t,a){const i=this._ensureCache(e,t);a.forEach(n=>{r.Range.foreach(n,(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)}},m.DataValidationCacheService=$e([ce(0,r.Inject(r.ICommandService)),ce(1,r.Inject(r.IUniverInstanceService)),ce(2,r.Inject(p.DataValidationModel))],m.DataValidationCacheService);function w(o){var s,e;return(e=(s=o==null?void 0:o[0])==null?void 0:s[0])==null?void 0:e.v}function P(o){var s;return(s=o==null?void 0:o[0])==null?void 0:s[0]}function y(o){return!E.ERROR_TYPE_SET.has(o)}function H(o,s){var t;const e=s.getValidatorItem(o);return(t=e==null?void 0:e.offsetFormulaByRange)!=null?t:!1}var ke=Object.getOwnPropertyDescriptor,qe=(o,s,e,t)=>{for(var a=t>1?void 0:t?ke(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},W=(o,s)=>(e,t)=>s(e,t,o);m.DataValidationCustomFormulaService=class extends r.Disposable{constructor(e,t,a,i,n){super();S(this,"_ruleFormulaMap",new Map);S(this,"_ruleFormulaMap2",new Map);this._instanceSrv=e,this._registerOtherFormulaService=t,this._dataValidationModel=a,this._dataValidationCacheService=i,this._validatorRegistryService=n,this._initFormulaResultHandler(),this._initDirtyRanges()}dispose(){super.dispose(),this._ruleFormulaMap.clear(),this._ruleFormulaMap2.clear()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceSrv.getUnitType(t)===r.UniverInstanceType.UNIVER_SHEET)for(const n in a){const l=a[n],{ruleFormulaMap:u}=this._ensureMaps(t,n);l.forEach(d=>{var g,f;const c=u.get((g=d.extra)==null?void 0:g.ruleId),h=this._dataValidationModel.getRuleById(t,n,(f=d.extra)==null?void 0:f.ruleId);h&&c&&this._dataValidationCacheService.markRangeDirty(t,n,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 n=a.get(t);n||(n=new Map,a.set(t,n));let l=i.get(t);return l||(l=new Map,i.set(t,l)),{ruleFormulaMap:n,ruleFormulaMap2:l}}_registerFormula(e,t,a,i,n){return this._registerOtherFormulaService.registerFormulaWithRange(e,t,i,n,{ruleId:a},E.OtherFormulaBizType.DATA_VALIDATION_CUSTOM,a)}_handleDirtyRanges(e,t,a){this._dataValidationModel.getRules(e,t).forEach(n=>{const l=n.ranges;r.Rectangle.doAnyRangesIntersect(l,a)&&this.makeRuleDirty(e,t,n.uid)})}_initDirtyRanges(){this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.subscribe(e=>{e.isSetRange&&this._handleDirtyRanges(e.unitId,e.subUnitId,e.ranges)}))}deleteByRuleId(e,t,a){const{ruleFormulaMap:i,ruleFormulaMap2:n}=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=n.get(a);c&&(n.delete(a),this._registerOtherFormulaService.deleteFormula(e,t,[c.formulaId]))}_addFormulaByRange(e,t,a,i,n,l){const{ruleFormulaMap:u,ruleFormulaMap2:d}=this._ensureMaps(e,t),c=l[0].startRow,h=l[0].startColumn;if(i&&r.isFormulaString(i)){const g=this._registerFormula(e,t,a,i,l);u.set(a,{formula:i,originCol:h,originRow:c,formulaId:g})}if(n&&r.isFormulaString(n)){const g=this._registerFormula(e,t,a,n,l);d.set(a,{formula:n,originCol:h,originRow:c,formulaId:g})}}addRule(e,t,a){if(H(a.type,this._validatorRegistryService)){const{ranges:i,formula1:n,formula2:l,uid:u}=a;this._addFormulaByRange(e,t,u,n,l,i)}}async getCellFormulaValue(e,t,a,i,n){var _,R;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,g=i-c,f=n-h;return P((R=(_=d==null?void 0:d.result)==null?void 0:_[g])==null?void 0:R[f])}async getCellFormula2Value(e,t,a,i,n){var _,R;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,g=i-c,f=n-h;return P((R=(_=d==null?void 0:d.result)==null?void 0:_[g])==null?void 0:R[f])}getCellFormulaValueSync(e,t,a,i,n){var _,R;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,g=i-c,f=n-h;return P((R=(_=d==null?void 0:d.result)==null?void 0:_[g])==null?void 0:R[f])}getCellFormula2ValueSync(e,t,a,i,n){var _,R;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,g=i-c,f=n-h;return P((R=(_=d==null?void 0:d.result)==null?void 0:_[g])==null?void 0:R[f])}getRuleFormulaInfo(e,t,a){const{ruleFormulaMap:i}=this._ensureMaps(e,t);return i.get(a)}makeRuleDirty(e,t,a){var l,u,d,c;const i=(u=(l=this._ruleFormulaMap.get(e))==null?void 0:l.get(t))==null?void 0:u.get(a),n=(c=(d=this._ruleFormulaMap2.get(e))==null?void 0:d.get(t))==null?void 0:c.get(a);i&&this._registerOtherFormulaService.markFormulaDirty(e,t,i.formulaId),n&&this._registerOtherFormulaService.markFormulaDirty(e,t,n.formulaId)}},m.DataValidationCustomFormulaService=qe([W(0,r.IUniverInstanceService),W(1,r.Inject(E.RegisterOtherFormulaService)),W(2,r.Inject(p.DataValidationModel)),W(3,r.Inject(m.DataValidationCacheService)),W(4,r.Inject(p.DataValidatorRegistryService))],m.DataValidationCustomFormulaService);function N(o){return r.getOriginCellValue(o)}function Ve(o){var s;return String((s=N(o))!=null?s:"")}function Qe(o){return o.filter(Boolean).join(",")}function $(o){return o.split(",").filter(Boolean)}function xe(o){const s=N(o);return s==null?"":s.toString()}function k(o,s,e){const{formula1:t,formula2:a}=s,i=s.ranges[0].startRow,n=s.ranges[0].startColumn,l=e.row-i,u=e.col-n,d=r.isFormulaString(t)?o.moveFormulaRefOffset(t,u,l,!0):t,c=r.isFormulaString(a)?o.moveFormulaRefOffset(a,u,l,!0):a;return{transformedFormula1:d,transformedFormula2:c}}var Ge=Object.getOwnPropertyDescriptor,Ye=(o,s,e,t)=>{for(var a=t>1?void 0:t?Ge(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},De=(o,s)=>(e,t)=>s(e,t,o);m.DataValidationListCacheService=class extends r.Disposable{constructor(e,t){super();S(this,"_cache",new Map);this._injector=e,this._dataValidationModel=t,this._initRuleChangeListener()}_initRuleChangeListener(){this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{(e.type==="remove"||e.type==="update")&&this.markRuleDirty(e.unitId,e.subUnitId,e.rule.uid)}))}getOrCompute(e,t,a){const i=this.getCache(e,t,a.uid);if(i)return i;const l=this._injector.get(m.DataValidationFormulaService).getRuleFormulaResultSync(e,t,a.uid);return this.computeAndCache(e,t,a,l)}_ensureCache(e,t){let a=this._cache.get(e);a||(a=new Map,this._cache.set(e,a));let i=a.get(t);return i||(i=new Map,a.set(t,i)),i}getCache(e,t,a){var i,n;return(n=(i=this._cache.get(e))==null?void 0:i.get(t))==null?void 0:n.get(a)}setCache(e,t,a,i){this._ensureCache(e,t).set(a,i)}markRuleDirty(e,t,a){var i,n;(n=(i=this._cache.get(e))==null?void 0:i.get(t))==null||n.delete(a)}clear(){this._cache.clear()}computeAndCache(e,t,a,i){var _,R,V;const{formula1:n="",formula2:l=""}=a,u=r.isFormulaString(n)?this._getRuleFormulaResultSet((V=(R=(_=i==null?void 0:i[0])==null?void 0:_.result)==null?void 0:R[0])==null?void 0:V[0]):$(n),d=l.split(","),c=u.map((v,M)=>({label:v,color:d[M]||""})),h={};for(const v of c)v.color&&(h[v.label]=v.color);const g=new Set(u),f={list:u,listWithColor:c,colorMap:h,set:g};return this.setCache(e,t,a.uid,f),f}_getRuleFormulaResultSet(e){var a,i;if(!e)return[];const t=new Set;for(let n=0,l=e.length;n<l;n++){const u=e[n];if(u)for(let d=0,c=u.length;d<c;d++){const h=u[d],g=N(h);if(g!=null){if(typeof g!="string"&&typeof(h==null?void 0:h.s)=="object"&&((i=(a=h.s)==null?void 0:a.n)!=null&&i.pattern)){t.add(r.numfmt.format(h.s.n.pattern,g,{throws:!1}));continue}const f=typeof g=="string"?g:String(g);y(f)&&t.add(f)}}}return[...t]}},m.DataValidationListCacheService=Ye([De(0,r.Inject(r.Injector)),De(1,r.Inject(p.DataValidationModel))],m.DataValidationListCacheService);var Xe=Object.getOwnPropertyDescriptor,Ke=(o,s,e,t)=>{for(var a=t>1?void 0:t?Xe(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},L=(o,s)=>(e,t)=>s(e,t,o);m.DataValidationFormulaService=class extends r.Disposable{constructor(e,t,a,i,n,l){super();S(this,"_formulaRuleMap",new Map);this._instanceService=e,this._registerOtherFormulaService=t,this._dataValidationCacheService=a,this._dataValidationModel=i,this._validatorRegistryService=n,this._listCacheService=l,this._initFormulaResultHandler()}_initFormulaResultHandler(){this.disposeWithMe(this._registerOtherFormulaService.formulaResult$.subscribe(e=>{for(const t in e){const a=e[t];if(this._instanceService.getUnitType(t)===r.UniverInstanceType.UNIVER_SHEET)for(const n in a){const l=a[n],u=this._ensureRuleFormulaMap(t,n);l.forEach(d=>{var h;const c=(h=d.extra)==null?void 0:h.ruleId;if(c&&u.get(c)){const g=this._dataValidationModel.getRuleById(t,n,c);g&&(this._listCacheService.markRuleDirty(t,n,c),this._dataValidationCacheService.markRangeDirty(t,n,g.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 n=[{startColumn:0,endColumn:0,startRow:0,endRow:0}];return this._registerOtherFormulaService.registerFormulaWithRange(e,t,a,n,{ruleId:i},E.OtherFormulaBizType.DATA_VALIDATION,i)}addRule(e,t,a){if(!H(a.type,this._validatorRegistryService)&&a.type!==r.DataValidationType.CHECKBOX){const{formula1:i,formula2:n,uid:l}=a,u=r.isFormulaString(i),d=r.isFormulaString(n);if(!u&&!d)return;const c=this._ensureRuleFormulaMap(e,t),h=[void 0,void 0];if(u){const g=this._registerSingleFormula(e,t,i,l);h[0]={id:g,text:i}}if(d){const g=this._registerSingleFormula(e,t,n,l);h[1]={id:g,text:n}}c.set(l,h)}}removeRule(e,t,a){const n=this._ensureRuleFormulaMap(e,t).get(a);if(!n)return;const[l,u]=n,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 n=this._ensureRuleFormulaMap(e,t).get(a);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,a){const n=this._ensureRuleFormulaMap(e,t).get(a);if(n)return n.map(l=>{if(l)return this._registerOtherFormulaService.getFormulaValueSync(e,t,l.id)})}getRuleFormulaInfo(e,t,a){return this._ensureRuleFormulaMap(e,t).get(a)}},m.DataValidationFormulaService=Ke([L(0,r.IUniverInstanceService),L(1,r.Inject(E.RegisterOtherFormulaService)),L(2,r.Inject(m.DataValidationCacheService)),L(3,r.Inject(p.DataValidationModel)),L(4,r.Inject(p.DataValidatorRegistryService)),L(5,r.Inject(m.DataValidationListCacheService))],m.DataValidationFormulaService);class he{constructor(s,e,t,a,i=!1){S(this,"_map");S(this,"_tree",new r.RBush);S(this,"_dirty",!0);S(this,"_buildTree",()=>{if(!this._dirty||this._disableTree)return;this._tree.clear();const s=[];this._map.forEach((e,t)=>{e.forEach(a=>{s.push({minX:a.startRow,maxX:a.endRow,minY:a.startColumn,maxY:a.endColumn,ruleId:t})})}),this._tree.load(s),this._dirty=!1});S(this,"_debonceBuildTree",r.debounce(this._buildTree,0));this._unitId=e,this._subUnitId=t,this._univerInstanceService=a,this._disableTree=i,this._map=s,this._buildTree()}get _worksheet(){var s;return(s=this._univerInstanceService.getUnit(this._unitId,r.UniverInstanceType.UNIVER_SHEET))==null?void 0:s.getSheetBySheetId(this._subUnitId)}_addRule(s,e){if(!this._worksheet)return;const t=r.Rectangle.mergeRanges(e.map(a=>r.Range.transformRange(a,this._worksheet)));this._map.forEach((a,i)=>{const n=r.Rectangle.subtractMulti(a,t);n.length===0?this._map.delete(i):this._map.set(i,n)}),this._dirty=!0,this._map.set(s,t),this._debonceBuildTree()}addRule(s){this._addRule(s.uid,s.ranges)}removeRange(s){if(!this._worksheet)return;const e=s.map(t=>r.Range.transformRange(t,this._worksheet));this._map.forEach((t,a)=>{const i=r.Rectangle.subtractMulti(t,e);i.length===0?this._map.delete(a):this._map.set(a,i)}),this._dirty=!0,this._debonceBuildTree()}_removeRule(s){this._map.delete(s),this._dirty=!0,this._debonceBuildTree()}removeRule(s){this._removeRule(s.uid)}updateRange(s,e){this._removeRule(s),this._addRule(s,e)}addRangeRules(s){s.forEach(({id:e,ranges:t})=>{if(!t.length)return;let a=this._map.get(e);a?(this._map.set(e,r.Rectangle.mergeRanges([...a,...t])),a=this._map.get(e)):(a=t,this._map.set(e,a)),this._map.forEach((i,n)=>{if(n===e)return;const l=r.Rectangle.subtractMulti(i,t);l.length===0?this._map.delete(n):this._map.set(n,l)})}),this._dirty=!0,this._debonceBuildTree()}diff(s){const e=[];let t=0;return s.forEach((a,i)=>{var u;const n=(u=this._map.get(a.uid))!=null?u:[],l=a.ranges;n.length!==0&&(n.length!==l.length||n.some((d,c)=>!r.Rectangle.equals(d,l[c])))&&e.push({type:"update",ruleId:a.uid,oldRanges:l,newRanges:r.Rectangle.sort(n),rule:a}),n.length===0&&(e.push({type:"delete",rule:a,index:i-t}),t++)}),e}diffWithAddition(s,e){const t=[];let a=0;return s.forEach((i,n)=>{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)=>!r.Rectangle.equals(c,u[h])))&&t.push({type:"update",ruleId:i.uid,oldRanges:u,newRanges:r.Rectangle.sort(l),rule:i}),l.length===0&&(t.push({type:"delete",rule:i,index:n-a}),a++)}),Array.from(e).forEach(i=>{var l;const n=(l=this._map.get(i.uid))!=null?l:[];t.push({type:"add",rule:{...i,ranges:r.Rectangle.sort(n)}})}),t}clone(){return new he(new Map(r.Tools.deepClone(Array.from(this._map.entries()))),this._unitId,this._subUnitId,this._univerInstanceService,!0)}getValue(s,e){this._dirty&&this._buildTree();const t=this._tree.search({minX:s,maxX:s,minY:e,maxY:e});return t.length>0?t[0].ruleId:void 0}}var ze=Object.getOwnPropertyDescriptor,Ze=(o,s,e,t)=>{for(var a=t>1?void 0:t?ze(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},A=(o,s)=>(e,t)=>s(e,t,o);m.SheetDataValidationModel=class extends r.Disposable{constructor(e,t,a,i,n,l,u){super();S(this,"_ruleMatrixMap",new Map);S(this,"_validStatusChange$",new U.Subject);S(this,"_ruleChange$",new U.Subject);S(this,"ruleChange$",this._ruleChange$.asObservable());S(this,"validStatusChange$",this._validStatusChange$.asObservable());this._dataValidationModel=e,this._univerInstanceService=t,this._dataValidatorRegistryService=a,this._dataValidationCacheService=i,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===D.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,n]of a)for(const l of n)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 he(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(n=>{this._addRuleSideEffect(e,t,n)})}_updateRule(e,t,a,i,n){const l=this._ensureRuleMatrix(e,t),u={...i,...n.payload};n.type===p.UpdateRuleType.RANGE?l.updateRange(a,n.payload):n.type===p.UpdateRuleType.ALL&&l.updateRange(a,n.payload.ranges),this._dataValidationCacheService.removeRule(e,t,i),this._dataValidationCacheService.addRule(e,t,u),this._dataValidationFormulaService.removeRule(e,t,i.uid),this._dataValidationFormulaService.addRule(e,t,u),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a),this._dataValidationCustomFormulaService.addRule(e,t,u)}_removeRule(e,t,a){this._ensureRuleMatrix(e,t).removeRule(a),this._dataValidationCacheService.removeRule(e,t,a),this._dataValidationCustomFormulaService.deleteByRuleId(e,t,a.uid)}getValidator(e){return this._dataValidatorRegistryService.getValidatorItem(e)}getRuleIdByLocation(e,t,a,i){return this._ensureRuleMatrix(e,t).getValue(a,i)}getRuleByLocation(e,t,a,i){const n=this.getRuleIdByLocation(e,t,a,i);if(n)return this._dataValidationModel.getRuleById(e,t,n)}validator(e,t,a){const{col:i,row:n,unitId:l,subUnitId:u,worksheet:d}=t,c=(R,V)=>{a&&a(R,V),V&&this._validStatusChange$.next({unitId:l,subUnitId:u,ruleId:e.uid,status:R,row:n,col:i})},h=d.getCellValueOnly(n,i),g=this.getValidator(e.type),f=d.getCellRaw(n,i),_=N(f);if(g){const R=this._dataValidationCacheService.ensureCache(l,u),V=R.getValue(n,i);return V==null?(R.setValue(n,i,r.DataValidationStatus.VALIDATING),g.validator({value:_,unitId:l,subUnitId:u,row:n,column:i,worksheet:t.worksheet,workbook:t.workbook,interceptValue:N(h),t:f==null?void 0:f.t},e).then(v=>{const M=v?r.DataValidationStatus.VALID:r.DataValidationStatus.INVALID,T=R.getValue(n,i);M===r.DataValidationStatus.VALID?R.realDeleteValue(n,i):R.setValue(n,i,M),c(M,V!==T)}),r.DataValidationStatus.VALIDATING):(c(V!=null?V:r.DataValidationStatus.VALID,!1),V!=null?V:r.DataValidationStatus.VALID)}else return c(r.DataValidationStatus.VALID,!1),r.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()}},m.SheetDataValidationModel=Ze([A(0,r.Inject(p.DataValidationModel)),A(1,r.IUniverInstanceService),A(2,r.Inject(p.DataValidatorRegistryService)),A(3,r.Inject(m.DataValidationCacheService)),A(4,r.Inject(m.DataValidationFormulaService)),A(5,r.Inject(m.DataValidationCustomFormulaService)),A(6,r.ICommandService)],m.SheetDataValidationModel);const q=1,Q=0;function Me(o,s){return r.Tools.isBlank(o)?s.t("dataValidation.validFail.value"):r.isFormulaString(o)?s.t("dataValidation.validFail.primitive"):""}const x=o=>r.Tools.isDefine(o)&&String(o).toLowerCase()==="true"?"1":String(o).toLowerCase()==="false"?"0":o;class Ee extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"id",r.DataValidationType.CHECKBOX);S(this,"title","dataValidation.checkbox.title");S(this,"operators",[]);S(this,"scopes",["sheet"]);S(this,"order",41);S(this,"offsetFormulaByRange",!1);S(this,"_formulaService",this.injector.get(m.DataValidationFormulaService));S(this,"skipDefaultFontRender",(e,t,a)=>{const{unitId:i,subUnitId:n}=a,{formula1:l,formula2:u}=this.parseFormulaSync(e,i,n),d=`${t!=null?t:""}`;return!d||d===`${l}`||d===`${u}`})}validatorFormula(e,t,a){const{formula1:i,formula2:n}=e,l=i===n;if(r.Tools.isBlank(i)&&r.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=Me(i,this.localeService),d=Me(n,this.localeService);return{success:!u&&!d,formula1:u,formula2:d}}async parseFormula(e,t,a){var h,g,f,_;const{formula1:i=q,formula2:n=Q}=e,l=await this._formulaService.getRuleFormulaResult(t,a,e.uid),u=r.isFormulaString(i)?w((g=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:g[0][0]):i,d=r.isFormulaString(n)?w((_=(f=l==null?void 0:l[1])==null?void 0:f.result)==null?void 0:_[0][0]):n,c=y(String(u))&&y(String(d));return{formula1:x(u),formula2:x(d),originFormula1:u,originFormula2:d,isFormulaValid:c}}getExtraStyle(e,t){return{tb:r.WrapStrategy.CLIP}}parseFormulaSync(e,t,a){var h,g,f,_;const{formula1:i=q,formula2:n=Q}=e,l=this._formulaService.getRuleFormulaResultSync(t,a,e.uid),u=r.isFormulaString(i)?w((g=(h=l==null?void 0:l[0])==null?void 0:h.result)==null?void 0:g[0][0]):i,d=r.isFormulaString(n)?w((_=(f=l==null?void 0:l[1])==null?void 0:f.result)==null?void 0:_[0][0]):n,c=y(String(u))&&y(String(d));return{formula1:x(u),formula2:x(d),originFormula1:u,originFormula2:d,isFormulaValid:c}}async isValidType(e,t,a){const{value:i,unitId:n,subUnitId:l}=e,{formula1:u,formula2:d,originFormula1:c,originFormula2:h}=await this.parseFormula(a,n,l);return!r.Tools.isDefine(u)||!r.Tools.isDefine(d)?!0:r.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")}generateRuleName(e){return this.titleStr}}const Je={[r.DataValidationOperator.BETWEEN]:"dataValidation.date.operators.between",[r.DataValidationOperator.EQUAL]:"dataValidation.date.operators.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.date.operators.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.operators.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.date.operators.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.operators.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.operators.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.operators.notEqual"};r.DataValidationOperator.BETWEEN+"",r.DataValidationOperator.EQUAL+"",r.DataValidationOperator.GREATER_THAN+"",r.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",r.DataValidationOperator.LESS_THAN+"",r.DataValidationOperator.LESS_THAN_OR_EQUAL+"",r.DataValidationOperator.NOT_BETWEEN+"",r.DataValidationOperator.NOT_EQUAL+"";const ye={[r.DataValidationOperator.BETWEEN]:"dataValidation.date.ruleName.between",[r.DataValidationOperator.EQUAL]:"dataValidation.date.ruleName.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.date.ruleName.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.ruleName.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.date.ruleName.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.ruleName.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.ruleName.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.ruleName.notEqual",NONE:"dataValidation.date.ruleName.legal"},et={[r.DataValidationOperator.BETWEEN]:"dataValidation.date.errorMsg.between",[r.DataValidationOperator.EQUAL]:"dataValidation.date.errorMsg.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.date.errorMsg.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.date.errorMsg.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.date.errorMsg.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.date.errorMsg.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.date.errorMsg.notEqual",NONE:"dataValidation.date.errorMsg.legal"},Z=[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.NOT_BETWEEN],G="{FORMULA1}",Y="{FORMULA2}",me=o=>{var e,t;if(o==null||typeof o=="boolean")return;if(typeof o=="number"||!Number.isNaN(+o))return+o;const s=(e=r.numfmt.parseDate(o))==null?void 0:e.v;return r.Tools.isDefine(s)?s:(t=r.numfmt.parseDate(r.dayjs(o).format("YYYY-MM-DD HH:mm:ss")))==null?void 0:t.v};class Te extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"id",r.DataValidationType.DATE);S(this,"title","dataValidation.date.title");S(this,"order",40);S(this,"operators",[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.EQUAL,r.DataValidationOperator.GREATER_THAN,r.DataValidationOperator.GREATER_THAN_OR_EQUAL,r.DataValidationOperator.LESS_THAN,r.DataValidationOperator.LESS_THAN_OR_EQUAL,r.DataValidationOperator.NOT_BETWEEN,r.DataValidationOperator.NOT_EQUAL]);S(this,"scopes",["sheet"]);S(this,"_customFormulaService",this.injector.get(m.DataValidationCustomFormulaService));S(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder))}async parseFormula(e,t,a,i,n){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,n),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,n),{formula1:d,formula2:c}=e,h=y(String(l==null?void 0:l.v))&&y(String(u==null?void 0:u.v));return{formula1:me(r.isFormulaString(d)?l==null?void 0:l.v:d),formula2:me(r.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"||typeof t=="string"?!!r.numfmt.parseDate(t):!1}_validatorSingleFormula(e){return!r.Tools.isBlank(e)&&(r.isFormulaString(e)||!Number.isNaN(+e)||!!(e&&r.numfmt.parseDate(e)))}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!0};const n=this._validatorSingleFormula(e.formula1),l=this.localeService.t("dataValidation.validFail.date");if(Z.includes(i)){const d=this._validatorSingleFormula(e.formula2);return{success:n&&d,formula1:n?void 0:l,formula2:d?void 0:l}}return{success:n,formula1:n?void 0:l}}normalizeFormula(e,t,a){const{formula1:i,formula2:n,bizInfo:l}=e,u=d=>{var h;if(!d)return d;let c;if(!Number.isNaN(+d))c=r.numfmt.dateFromSerial(+d);else{const g=(h=r.numfmt.parseDate(d))==null?void 0:h.v;if(g==null)return"";c=r.numfmt.dateFromSerial(g)}return r.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:r.isFormulaString(i)?i:u(`${i}`),formula2:r.isFormulaString(n)?n:u(`${n}`)}}transform(e,t,a){const{value:i}=e;return{...e,value:me(i)}}get operatorNames(){return this.operators.map(e=>this.localeService.t(Je[e]))}generateRuleName(e){var a,i;if(!e.operator)return this.localeService.t(ye.NONE);const t=this.localeService.t(ye[e.operator]).replace(G,(a=e.formula1)!=null?a:"").replace(Y,(i=e.formula2)!=null?i:"");return`${this.titleStr} ${t}`}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:i}=k(this._lexerTreeBuilder,e,t);return`${this.localeService.t(et[e.operator]).replace(G,a!=null?a:"").replace(Y,i!=null?i:"")}`}}r.DataValidationOperator.BETWEEN+"",r.DataValidationOperator.EQUAL+"",r.DataValidationOperator.GREATER_THAN+"",r.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",r.DataValidationOperator.LESS_THAN+"",r.DataValidationOperator.LESS_THAN_OR_EQUAL+"",r.DataValidationOperator.NOT_BETWEEN+"",r.DataValidationOperator.NOT_EQUAL+"",r.DataValidationOperator.BETWEEN+"",r.DataValidationOperator.EQUAL+"",r.DataValidationOperator.GREATER_THAN+"",r.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",r.DataValidationOperator.LESS_THAN+"",r.DataValidationOperator.LESS_THAN_OR_EQUAL+"",r.DataValidationOperator.NOT_BETWEEN+"",r.DataValidationOperator.NOT_EQUAL+"";const J={[r.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[r.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual",NONE:"dataValidation.errorMsg.legal"};function X(o){return+o}class tt extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"_customFormulaService",this.injector.get(m.DataValidationCustomFormulaService));S(this,"id",r.DataValidationType.DECIMAL);S(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));S(this,"title","dataValidation.decimal.title");S(this,"order",20);S(this,"operators",[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.EQUAL,r.DataValidationOperator.GREATER_THAN,r.DataValidationOperator.GREATER_THAN_OR_EQUAL,r.DataValidationOperator.LESS_THAN,r.DataValidationOperator.LESS_THAN_OR_EQUAL,r.DataValidationOperator.NOT_BETWEEN,r.DataValidationOperator.NOT_EQUAL]);S(this,"scopes",["sheet"])}_isFormulaOrNumber(e){return!r.Tools.isBlank(e)&&(r.isFormulaString(e)||!Number.isNaN(+e))}async isValidType(e,t,a){const{value:i}=e;return!Number.isNaN(X(i))}transform(e,t,a){const{value:i}=e;return{...e,value:X(i)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,i,n){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,n),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,n),{formula1:d,formula2:c}=e,h=y(String(l==null?void 0:l.v))&&y(String(u==null?void 0:u.v));return{formula1:this._parseNumber(r.isFormulaString(d)?l==null?void 0:l.v:d),formula2:this._parseNumber(r.isFormulaString(c)?u==null?void 0:u.v:c),isFormulaValid:h}}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!0};const n=r.Tools.isDefine(e.formula1)&&this._isFormulaOrNumber(e.formula1),l=r.Tools.isDefine(e.formula2)&&this._isFormulaOrNumber(e.formula2),u=Z.includes(i),d=this.localeService.t("dataValidation.validFail.number");return u?{success:n&&l,formula1:n?void 0:d,formula2:l?void 0:d}:{success:n,formula1:n?"":d}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(J.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:i}=k(this._lexerTreeBuilder,e,t);return`${this.localeService.t(J[e.operator]).replace(G,a!=null?a:"").replace(Y,i!=null?i:"")}`}}function at(o){var e,t;if(!o)return[];const s=new Set;for(let a=0,i=o.length;a<i;a++){const n=o[a];if(n)for(let l=0,u=n.length;l<u;l++){const d=n[l],c=N(d);if(c!=null){if(typeof c!="string"&&typeof(d==null?void 0:d.s)=="object"&&((t=(e=d.s)==null?void 0:e.n)!=null&&t.pattern)){s.add(r.numfmt.format(d.s.n.pattern,c,{throws:!1}));continue}const h=typeof c=="string"?c:String(c);y(h)&&s.add(h)}}}return[...s]}const it=["if","indirect","choose","offset"];function rt(o,s){if(!r.isFormulaString(o)||E.isReferenceString(o.slice(1)))return!0;const t=s.sequenceNodesBuilder(o);return t&&t.some(a=>typeof a=="object"&&a.nodeType===E.sequenceNodeType.FUNCTION&&it.indexOf(a.token.toLowerCase())>-1)}function nt(o,s){const{formula1:e="",ranges:t}=o;if(E.isReferenceString(e.slice(1))){const i=E.deserializeRangeWithSheet(e.slice(1));if((!i.sheetName||i.sheetName===s)&&t.some(n=>r.Rectangle.intersects(n,i.range)))return!0}return!1}class ge extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"formulaService",this.injector.get(m.DataValidationFormulaService));S(this,"_lexer",this.injector.get(E.LexerTreeBuilder));S(this,"_univerInstanceService",this.injector.get(r.IUniverInstanceService));S(this,"_listCacheService",this.injector.get(m.DataValidationListCacheService));S(this,"order",50);S(this,"offsetFormulaByRange",!1);S(this,"id",r.DataValidationType.LIST);S(this,"title","dataValidation.list.title");S(this,"operators",[]);S(this,"scopes",["sheet"]);S(this,"skipDefaultFontRender",e=>e.renderMode!==r.DataValidationRenderMode.TEXT)}validatorFormula(e,t,a){var d,c,h;const i=!r.Tools.isBlank(e.formula1),n=rt((d=e.formula1)!=null?d:"",this._lexer),l=(h=(c=this._univerInstanceService.getUnit(t,r.UniverInstanceType.UNIVER_SHEET))==null?void 0:c.getSheetBySheetId(a))==null?void 0:h.getName(),u=nt(e,l!=null?l:"");return{success:!!(i&&n&&!u),formula1:i?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:a}){var n;const i=(n=a.tb!==r.WrapStrategy.OVERFLOW?a.tb:r.WrapStrategy.CLIP)!=null?n:r.WrapStrategy.WRAP;if(e.type===r.DataValidationType.LIST&&(e.renderMode===r.DataValidationRenderMode.ARROW||e.renderMode===r.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 $(t)}async parseFormula(e,t,a){var u,d;const i=await this.formulaService.getRuleFormulaResult(t,a,e.uid),n=w((d=(u=i==null?void 0:i[0])==null?void 0:u.result)==null?void 0:d[0][0]);return{formula1:void 0,formula2:void 0,isFormulaValid:y(String(n))}}async isValidType(e,t,a){const{value:i,unitId:n,subUnitId:l}=e,{formula1:u=""}=a,d=r.isFormulaString(u)?this._listCacheService.getOrCompute(n,l,a).list:$(u);return this.parseCellValue(i).every(h=>d.includes(h))}generateRuleName(){return this.localeService.t("dataValidation.list.name")}generateRuleErrorMessage(){return this.localeService.t("dataValidation.list.error")}_getUnitAndSubUnit(e,t){var n,l;const a=(n=e?this._univerInstanceService.getUniverSheetInstance(e):void 0)!=null?n:this._univerInstanceService.getCurrentUnitForType(r.UniverInstanceType.UNIVER_SHEET);if(!a)return null;const i=(l=t?a.getSheetBySheetId(t):void 0)!=null?l:a.getActiveSheet();return i?{unitId:a.getUnitId(),subUnitId:i.getSheetId()}:null}getList(e,t,a){const i=this._getUnitAndSubUnit(t,a);if(!i)return[];const{unitId:n,subUnitId:l}=i;return this._listCacheService.getOrCompute(n,l,e).list}async getListAsync(e,t,a){var c,h;const{formula1:i=""}=e,n=this._getUnitAndSubUnit(t,a);if(!n)return[];const{unitId:l,subUnitId:u}=n,d=await this.formulaService.getRuleFormulaResult(l,u,e.uid);return r.isFormulaString(i)?at((h=(c=d==null?void 0:d[0])==null?void 0:c.result)==null?void 0:h[0][0]):$(i)}getListWithColor(e,t,a){const i=this._getUnitAndSubUnit(t,a);if(!i)return[];const{unitId:n,subUnitId:l}=i;return this._listCacheService.getOrCompute(n,l,e).listWithColor}getListWithColorMap(e,t,a){const i=this._getUnitAndSubUnit(t,a);if(!i)return{};const{unitId:n,subUnitId:l}=i;return this._listCacheService.getOrCompute(n,l,e).colorMap}}class ot extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"id",r.DataValidationType.TEXT_LENGTH);S(this,"title","dataValidation.textLength.title");S(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));S(this,"order",30);S(this,"operators",[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.EQUAL,r.DataValidationOperator.GREATER_THAN,r.DataValidationOperator.GREATER_THAN_OR_EQUAL,r.DataValidationOperator.LESS_THAN,r.DataValidationOperator.LESS_THAN_OR_EQUAL,r.DataValidationOperator.NOT_BETWEEN,r.DataValidationOperator.NOT_EQUAL]);S(this,"scopes",["sheet"]);S(this,"_customFormulaService",this.injector.get(m.DataValidationCustomFormulaService))}_isFormulaOrInt(e){return!r.Tools.isBlank(e)&&(r.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!1};const n=r.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=r.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),u=Z.includes(i),d=this.localeService.t("dataValidation.validFail.number");return u?{success:n&&l,formula1:n?void 0:d,formula2:l?void 0:d}:{success:n,formula1:d}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,i,n){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,n),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,n),{formula1:d,formula2:c}=e,h=y(String(l==null?void 0:l.v))&&y(String(u==null?void 0:u.v));return{formula1:this._parseNumber(r.isFormulaString(d)?l==null?void 0:l.v:d),formula2:this._parseNumber(r.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"}generateRuleErrorMessage(e,t){if(!e.operator)return this.titleStr;const{transformedFormula1:a,transformedFormula2:i}=k(this._lexerTreeBuilder,e,t);return`${this.localeService.t(p.TextLengthErrorTitleMap[e.operator]).replace(G,a!=null?a:"").replace(Y,i!=null?i:"")}`}}function Ce(o){var e,t;return o?o.p?!((t=(e=o.p.body)==null?void 0:e.dataStream)!=null?t:"").slice(0,-2).trim():r.Tools.isBlank(o.v):!0}function K(o,s,e,t,a="command",i=!0){const n=t.get(E.LexerTreeBuilder),l=t.get(p.DataValidatorRegistryService),u=[],d=[],c=t.get(m.SheetDataValidationModel),h=t.get(r.IUniverInstanceService),g=D.getSheetCommandTarget(h,{unitId:o,subUnitId:s});if(!g)return{redoMutations:u,undoMutations:d};const{worksheet:f}=g,_=new r.ObjectMatrix;let R=!1;function V(v,M){i&&v.forEach(T=>{r.Range.foreach(T,(C,F)=>{const O=f.getCellRaw(C,F),j=Ve(O);(Ce(O)||j===M)&&!(O!=null&&O.p)&&(R=!0,_.setValue(C,F,{v:M,p:null}))})})}if(e.forEach(v=>{switch(v.type){case"delete":u.push({id:p.RemoveDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.rule.uid,source:a}}),d.unshift({id:p.AddDataValidationMutation.id,params:{unitId:o,subUnitId:s,rule:v.rule,index:v.index,source:a}});break;case"update":{if(H(v.rule.type,l)){const T=v.oldRanges[0].startRow,C=v.oldRanges[0].startColumn,F=v.newRanges[0].startRow,O=v.newRanges[0].startColumn,j=F-T,oe=O-C,se=r.isFormulaString(v.rule.formula1)?n.moveFormulaRefOffset(v.rule.formula1,oe,j):v.rule.formula1,le=r.isFormulaString(v.rule.formula2)?n.moveFormulaRefOffset(v.rule.formula2,oe,j):v.rule.formula2;se!==v.rule.formula1||le!==v.rule.formula2||!r.isRangesEqual(v.newRanges,v.oldRanges)?(u.push({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.ALL,payload:{formula1:se,formula2:le,ranges:v.newRanges}}}}),d.unshift({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.ALL,payload:{formula1:v.rule.formula1,formula2:v.rule.formula2,ranges:v.oldRanges}}}})):(u.push({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.RANGE,payload:v.newRanges},source:a}}),d.unshift({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.RANGE,payload:v.oldRanges},source:a}}))}else u.push({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.RANGE,payload:v.newRanges},source:a}}),d.unshift({id:p.UpdateDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.ruleId,payload:{type:p.UpdateRuleType.RANGE,payload:v.oldRanges},source:a}});const M=c.getRuleById(o,s,v.ruleId);if(M&&M.type===r.DataValidationType.CHECKBOX){const C=c.getValidator(r.DataValidationType.CHECKBOX).parseFormulaSync(M,o,s);V(v.newRanges,C.formula2)}break}case"add":{if(u.push({id:p.AddDataValidationMutation.id,params:{unitId:o,subUnitId:s,rule:v.rule,source:a}}),d.unshift({id:p.RemoveDataValidationMutation.id,params:{unitId:o,subUnitId:s,ruleId:v.rule.uid,source:a}}),v.rule.type===r.DataValidationType.CHECKBOX){const T=c.getValidator(r.DataValidationType.CHECKBOX).parseFormulaSync(v.rule,o,s);V(v.rule.ranges,T.originFormula2)}break}}}),R){const v={id:D.SetRangeValuesMutation.id,params:{unitId:o,subUnitId:s,cellValue:_.getData()}},M={id:D.SetRangeValuesMutation.id,params:D.SetRangeValuesUndoMutationFactory(t,v.params)};u.push(v),d.push(M)}return{redoMutations:u,undoMutations:d}}const Oe={type:r.CommandType.COMMAND,id:"sheet.command.updateDataValidationRuleRange",handler(o,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a,ruleId:i}=s,n=o.get(m.SheetDataValidationModel),l=o.get(r.ICommandService),u=o.get(r.IUndoRedoService);if(!n.getRuleById(e,t,i))return!1;const c=n.getRuleObjectMatrix(e,t).clone();c.updateRange(i,a);const h=c.diff(n.getRules(e,t)),{redoMutations:g,undoMutations:f}=K(e,t,h,o);return u.pushUndoRedo({undoMutations:f,redoMutations:g,unitID:e}),r.sequenceExecute(g,l),!0}},Fe={type:r.CommandType.COMMAND,id:"sheet.command.addDataValidation",handler(o,s){if(!s)return!1;const{unitId:e,subUnitId:t,rule:a}=s,i=o.get(m.SheetDataValidationModel),n=o.get(r.ICommandService),l=o.get(r.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:g,undoMutations:f}=K(e,t,d,o);return g.push({id:p.AddDataValidationMutation.id,params:h}),f.unshift({id:p.RemoveDataValidationMutation.id,params:{unitId:e,subUnitId:t,ruleId:a.uid}}),l.pushUndoRedo({unitID:e,redoMutations:g,undoMutations:f}),r.sequenceExecute(g,n),!0}},Ie={type:r.CommandType.COMMAND,id:"sheets.command.update-data-validation-setting",handler(o,s){if(!s)return!1;const e=o.get(r.ICommandService),t=o.get(r.IUndoRedoService),a=o.get(m.SheetDataValidationModel),i=o.get(p.DataValidatorRegistryService),{unitId:n,subUnitId:l,ruleId:u,setting:d}=s,c=i.getValidatorItem(d.type);if(!c)return!1;const h=a.getRuleById(n,l,u);if(!h)return!1;const g={...h,...d};if(!c.validatorFormula(g,n,l).success)return!1;const f={unitId:n,subUnitId:l,ruleId:u,payload:{type:p.UpdateRuleType.SETTING,payload:{...d,...c.normalizeFormula(g,n,l)}}},_=[{id:p.UpdateDataValidationMutation.id,params:f}],R={unitId:n,subUnitId:l,ruleId:u,payload:{type:p.UpdateRuleType.SETTING,payload:p.getRuleSetting(h)}},V=[{id:p.UpdateDataValidationMutation.id,params:R}];if(d.type===r.DataValidationType.CHECKBOX){const M=h.ranges,T=o.get(r.IUniverInstanceService),C=D.getSheetCommandTarget(T,{unitId:n,subUnitId:l});if(C){const F=new r.ObjectMatrix,{worksheet:O}=C,{formula2:j=Q,formula1:oe=q}=h,{formula2:se=Q,formula1:le=q}=d;let _e=!1;if(M.forEach(ue=>{r.Range.foreach(ue,(z,Re)=>{const I=O.getCellRaw(z,Re),He=Ve(I);(Ce(I)||He===String(j))&&!(I!=null&&I.p)?(F.setValue(z,Re,{v:se,p:null}),_e=!0):He===String(oe)&&!(I!=null&&I.p)&&(F.setValue(z,Re,{v:le,p:null}),_e=!0)})}),_e){const ue={id:D.SetRangeValuesMutation.id,params:{unitId:n,subUnitId:l,cellValue:F.getData()}},z={id:D.SetRangeValuesMutation.id,params:D.SetRangeValuesUndoMutationFactory(o,ue.params)};_.push(ue),V.push(z)}}}return r.sequenceExecute(_,e).result?(t.pushUndoRedo({unitID:n,redoMutations:_,undoMutations:V}),!0):!1}},Ne={type:r.CommandType.COMMAND,id:"sheets.command.update-data-validation-options",handler(o,s){if(!s)return!1;const e=o.get(r.ICommandService),t=o.get(r.IUndoRedoService),a=o.get(m.SheetDataValidationModel),{unitId:i,subUnitId:n,ruleId:l,options:u}=s,d=a.getRuleById(i,n,l);if(!d)return!1;const c={unitId:i,subUnitId:n,ruleId:l,payload:{type:p.UpdateRuleType.OPTIONS,payload:u}},h=[{id:p.UpdateDataValidationMutation.id,params:c}],g={unitId:i,subUnitId:n,ruleId:l,payload:{type:p.UpdateRuleType.OPTIONS,payload:p.getRuleOptions(d)}},f=[{id:p.UpdateDataValidationMutation.id,params:g}];return t.pushUndoRedo({unitID:i,redoMutations:h,undoMutations:f}),e.executeCommand(p.UpdateDataValidationMutation.id,c),!0}},Ae={type:r.CommandType.COMMAND,id:"sheets.command.clear-range-data-validation",handler(o,s){if(!s)return!1;const{unitId:e,subUnitId:t,ranges:a}=s,i=o.get(r.ICommandService),n=o.get(r.IUniverInstanceService),l=D.getSheetCommandTarget(n,{unitId:e,subUnitId:t}),u=o.get(m.SheetDataValidationModel);if(!l)return!1;const d=o.get(r.IUndoRedoService),c=u.getRuleObjectMatrix(e,t).clone();c.removeRange(a);const h=c.diff(u.getRules(e,t)),{redoMutations:g,undoMutations:f}=K(e,t,h,o);return d.pushUndoRedo({unitID:e,redoMutations:g,undoMutations:f}),r.sequenceExecute(g,i).result}},Ue={type:r.CommandType.COMMAND,id:"sheet.command.remove-all-data-validation",handler(o,s){if(!s)return!1;const{unitId:e,subUnitId:t}=s,a=o.get(r.ICommandService),i=o.get(m.SheetDataValidationModel),n=o.get(r.IUndoRedoService),l=[...i.getRules(e,t)],u={unitId:e,subUnitId:t,ruleId:l.map(h=>h.uid)},d=[{id:p.RemoveDataValidationMutation.id,params:u}],c=[{id:p.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:l}}];return n.pushUndoRedo({redoMutations:d,undoMutations:c,unitID:e}),a.executeCommand(p.RemoveDataValidationMutation.id,u),!0}},st=(o,s)=>{const e=o.get(m.SheetDataValidationModel),{unitId:t,subUnitId:a,ruleId:i,source:n}=s;if(Array.isArray(i)){const u=i.map(d=>e.getRuleById(t,a,d)).filter(Boolean);return[{id:p.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:u,source:n}}]}return[{id:p.AddDataValidationMutation.id,params:{unitId:t,subUnitId:a,rule:{...e.getRuleById(t,a,i)},index:e.getRuleIndex(t,a,i)}}]},we={type:r.CommandType.COMMAND,id:"sheet.command.remove-data-validation-rule",handler(o,s){if(!s)return!1;const{unitId:e,subUnitId:t,ruleId:a}=s,i=o.get(r.ICommandService),n=o.get(r.IUndoRedoService),l=o.get(m.SheetDataValidationModel),u=[{id:p.RemoveDataValidationMutation.id,params:s}],d=[{id:p.AddDataValidationMutation.id,params:{unitId:e,subUnitId:t,rule:{...l.getRuleById(e,t,a)},index:l.getRuleIndex(e,t,a)}}];return n.pushUndoRedo({undoMutations:d,redoMutations:u,unitID:s.unitId}),i.executeCommand(p.RemoveDataValidationMutation.id,s),!0}},Le="SHEET_DATA_VALIDATION_PLUGIN";var be=(o=>(o[o.View=0]="View",o[o.Edit=1]="Edit",o[o.ManageCollaborator=2]="ManageCollaborator",o[o.Print=3]="Print",o[o.Duplicate=4]="Duplicate",o[o.Comment=5]="Comment",o[o.Copy=6]="Copy",o[o.Share=7]="Share",o[o.Export=8]="Export",o[o.MoveWorksheet=9]="MoveWorksheet",o[o.DeleteWorksheet=10]="DeleteWorksheet",o[o.HideWorksheet=11]="HideWorksheet",o[o.RenameWorksheet=12]="RenameWorksheet",o[o.CreateWorksheet=13]="CreateWorksheet",o[o.SetWorksheetStyle=14]="SetWorksheetStyle",o[o.EditWorksheetCell=15]="EditWorksheetCell",o[o.InsertHyperlink=16]="InsertHyperlink",o[o.Sort=17]="Sort",o[o.Filter=18]="Filter",o[o.PivotTable=19]="PivotTable",o[o.FloatImg=20]="FloatImg",o[o.History=21]="History",o[o.RwHgtClWdt=22]="RwHgtClWdt",o[o.ViemRwHgtClWdt=23]="ViemRwHgtClWdt",o[o.ViewFilter=24]="ViewFilter",o[o.MoveSheet=25]="MoveSheet",o[o.DeleteSheet=26]="DeleteSheet",o[o.HideSheet=27]="HideSheet",o[o.CopySheet=28]="CopySheet",o[o.RenameSheet=29]="RenameSheet",o[o.CreateSheet=30]="CreateSheet",o[o.SelectProtectedCells=31]="SelectProtectedCells",o[o.SelectUnProtectedCells=32]="SelectUnProtectedCells",o[o.SetCellStyle=33]="SetCellStyle",o[o.SetCellValue=34]="SetCellValue",o[o.SetRowStyle=35]="SetRowStyle",o[o.SetColumnStyle=36]="SetColumnStyle",o[o.InsertRow=37]="InsertRow",o[o.InsertColumn=38]="InsertColumn",o[o.DeleteRow=39]="DeleteRow",o[o.DeleteColumn=40]="DeleteColumn",o[o.EditExtraObject=41]="EditExtraObject",o[o.Delete=42]="Delete",o[o.RecoverHistory=43]="RecoverHistory",o[o.ViewHistory=44]="ViewHistory",o[o.CreatePermissionObject=45]="CreatePermissionObject",o[o.UNRECOGNIZED=-1]="UNRECOGNIZED",o))(be||{}),lt=Object.getOwnPropertyDescriptor,ut=(o,s,e,t)=>{for(var a=t>1?void 0:t?lt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},pe=(o,s)=>(e,t)=>s(e,t,o);m.DataValidationFormulaController=class extends r.Disposable{constructor(s,e,t){super(),this._univerInstanceService=s,this._permissionService=e,this._lexerTreeBuilder=t}getFormulaRefCheck(s){var t,a;const e=this._lexerTreeBuilder.sequenceNodesBuilder(s);if(!e)return!0;for(let i=0;i<e.length;i++){const n=e[i];if(typeof n=="string")continue;const{token:l}=n,u=E.deserializeRangeWithSheetWithCache(l),d=this._univerInstanceService.getCurrentUnitForType(r.UniverInstanceType.UNIVER_SHEET);let c=d.getActiveSheet();const h=d.getUnitId();if(u.sheetName){if(c=d.getSheetBySheetName(u.sheetName),!c)return!1;const V=c==null?void 0:c.getSheetId();if(!this._permissionService.getPermissionPoint(new D.WorksheetViewPermission(h,V).id))return!1}if(!c)return!1;const{startRow:g,endRow:f,startColumn:_,endColumn:R}=u.range;for(let V=g;V<=f;V++)for(let v=_;v<=R;v++){const M=(a=(t=c.getCell(V,v))==null?void 0:t.selectionProtection)==null?void 0:a[0];if((M==null?void 0:M[be.View])===!1)return!1}}return!0}},m.DataValidationFormulaController=ut([pe(0,r.IUniverInstanceService),pe(1,r.IPermissionService),pe(2,r.Inject(E.LexerTreeBuilder))],m.DataValidationFormulaController);const Be={name:"@univerjs/sheets-data-validation",version:"0.17.0"},dt="sheets-data-validation.config",je={};var ct=Object.getOwnPropertyDescriptor,ht=(o,s,e,t)=>{for(var a=t>1?void 0:t?ct(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},Se=(o,s)=>(e,t)=>s(e,t,o);let ee=class extends r.Disposable{constructor(s,e,t){super();S(this,"_disposableMap",new Map);S(this,"registerRule",(s,e,t)=>{H(t.type,this._validatorRegistryService)&&this.register(s,e,t)});this._dataValidationModel=s,this._formulaRefRangeService=e,this._validatorRegistryService=t,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}register(s,e,t){const a=t.ranges,i=t.formula1,n=t.formula2,l=this._formulaRefRangeService.registerRangeFormula(s,e,a,[i!=null?i:"",n!=null?n:""],d=>{if(d.length===0)return{undos:[{id:p.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:t,source:"patched"}}],redos:[{id:p.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,source:"patched"}}]};const c=[],h=[],g=d[0];c.push({id:p.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.ALL,payload:{ranges:g.ranges,formula1:g.formulas[0],formula2:g.formulas[1]}},source:"patched"}}),h.push({id:p.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.ALL,payload:{ranges:a,formula1:i,formula2:n}},source:"patched"}});for(let f=1;f<d.length;f++){const _=d[f],R=r.generateRandomId();c.push({id:p.AddDataValidationMutation.id,params:{unitId:s,subUnitId:e,rule:{...t,uid:R,formula1:_.formulas[0],formula2:_.formulas[1],ranges:_.ranges},source:"patched"}}),h.push({id:p.RemoveDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:R,source:"patched"}})}return{undos:h,redos:c}}),u=this._getIdWithUnitId(s,e,t.uid);this._disposableMap.set(u,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,i]of t)for(const n of i)this.registerRule(e,a,n);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:i}=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,a,i.uid));n&&n.dispose();break}case"update":{const n=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,n.uid));l&&l.dispose(),this.registerRule(e.unitId,e.subUnitId,n);break}}})),this.disposeWithMe(r.toDisposable(()=>{this._disposableMap.forEach(e=>{e.dispose()}),this._disposableMap.clear()}))}};ee=ht([Se(0,r.Inject(m.SheetDataValidationModel)),Se(1,r.Inject(de.FormulaRefRangeService)),Se(2,r.Inject(p.DataValidatorRegistryService))],ee);var mt=Object.getOwnPropertyDescriptor,gt=(o,s,e,t)=>{for(var a=t>1?void 0:t?mt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},b=(o,s)=>(e,t)=>s(e,t,o);let te=class extends r.Disposable{constructor(s,e,t,a,i,n){super();S(this,"_disposableMap",new Map);S(this,"registerRule",(s,e,t)=>{H(t.type,this._validatorRegistryService)||(this.register(s,e,t),this.registerFormula(s,e,t))});this._dataValidationModel=s,this._injector=e,this._refRangeService=t,this._dataValidationFormulaService=a,this._formulaRefRangeService=i,this._validatorRegistryService=n,this._initRefRange()}_getIdWithUnitId(s,e,t){return`${s}_${e}_${t}`}registerFormula(s,e,t){var d;const a=t.uid,i=this._getIdWithUnitId(s,e,a),n=(d=this._disposableMap.get(i))!=null?d:new Set,l=(c,h)=>{const g=this._dataValidationModel.getRuleById(s,e,a);if(!g)return{redos:[],undos:[]};const f=g[c];if(!f||f===h)return{redos:[],undos:[]};const _={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.SETTING,payload:{type:g.type,formula1:g.formula1,formula2:g.formula2,[c]:h}},source:"patched"},R={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.SETTING,payload:{type:g.type,formula1:g.formula1,formula2:g.formula2}},source:"patched"},V=[{id:p.UpdateDataValidationMutation.id,params:_}],v=[{id:p.UpdateDataValidationMutation.id,params:R}];return{redos:V,undos:v}},u=this._dataValidationFormulaService.getRuleFormulaInfo(s,e,a);if(u){const[c,h]=u;if(c){const g=this._formulaRefRangeService.registerFormula(s,e,c.text,f=>l("formula1",f));n.add(()=>g.dispose())}if(h){const g=this._formulaRefRangeService.registerFormula(s,e,h.text,f=>l("formula2",f));n.add(()=>g.dispose())}}}register(s,e,t){var u;const a=d=>{const c=[...t.ranges],g=c.map(_=>D.handleCommonDefaultRangeChangeWithEffectRefCommands(_,d)).filter(_=>!!_).flat();if(r.isRangesEqual(g,c))return{redos:[],undos:[]};if(g.length){const _={unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.RANGE,payload:g},source:"patched"},R=[{id:p.UpdateDataValidationMutation.id,params:_}],V=[{id:p.UpdateDataValidationMutation.id,params:{unitId:s,subUnitId:e,ruleId:t.uid,payload:{type:p.UpdateRuleType.RANGE,payload:c},source:"patched"}}];return{redos:R,undos:V}}else{const _={unitId:s,subUnitId:e,ruleId:t.uid},R=[{id:p.RemoveDataValidationMutation.id,params:_}],V=st(this._injector,_);return{redos:R,undos:V}}},i=[];t.ranges.forEach(d=>{const c=this._refRangeService.registerRefRange(d,a,s,e);i.push(()=>c.dispose())});const n=this._getIdWithUnitId(s,e,t.uid),l=(u=this._disposableMap.get(n))!=null?u:new Set;l.add(()=>i.forEach(d=>d())),this._disposableMap.set(n,l)}_initRefRange(){const s=this._dataValidationModel.getAll();for(const[e,t]of s)for(const[a,i]of t)for(const n of i)this.registerRule(e,a,n);this.disposeWithMe(this._dataValidationModel.ruleChange$.subscribe(e=>{const{unitId:t,subUnitId:a,rule:i}=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,a,i.uid));n&&n.forEach(l=>l());break}case"update":{const n=e.rule,l=this._disposableMap.get(this._getIdWithUnitId(t,a,n.uid));l&&l.forEach(u=>u()),this.registerRule(e.unitId,e.subUnitId,n);break}}})),this.disposeWithMe(r.toDisposable(()=>{this._disposableMap.forEach(e=>{e.forEach(t=>t())}),this._disposableMap.clear()}))}};te=gt([b(0,r.Inject(m.SheetDataValidationModel)),b(1,r.Inject(r.Injector)),b(2,r.Inject(D.RefRangeService)),b(3,r.Inject(m.DataValidationFormulaService)),b(4,r.Inject(de.FormulaRefRangeService)),b(5,r.Inject(p.DataValidatorRegistryService))],te);var pt=Object.getOwnPropertyDescriptor,St=(o,s,e,t)=>{for(var a=t>1?void 0:t?pt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},fe=(o,s)=>(e,t)=>s(e,t,o);let ae=class extends r.Disposable{constructor(o,s,e){super(),this._sheetInterceptorService=o,this._univerInstanceService=s,this._sheetDataValidationModel=e,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:o=>{var s;if(o.id===D.RemoveSheetCommand.id){const e=o.params,t=e.unitId||this._univerInstanceService.getCurrentUnitForType(r.UniverInstanceType.UNIVER_SHEET).getUnitId(),a=this._univerInstanceService.getUniverSheetInstance(t);if(!a)return{redos:[],undos:[]};const i=e.subUnitId||((s=a.getActiveSheet())==null?void 0:s.getSheetId());if(!i)return{redos:[],undos:[]};const n=this._sheetDataValidationModel.getRules(t,i);if(n.length===0)return{redos:[],undos:[]};const l=n.map(c=>c.uid),u={unitId:t,subUnitId:i,ruleId:l,source:"patched"},d={unitId:t,subUnitId:i,rule:[...n],source:"patched"};return{redos:[{id:p.RemoveDataValidationMutation.id,params:u}],undos:[{id:p.AddDataValidationMutation.id,params:d}]}}else if(o.id===D.CopySheetCommand.id){const e=o.params,{unitId:t,subUnitId:a,targetSubUnitId:i}=e;if(!t||!a||!i)return{redos:[],undos:[]};const n=this._sheetDataValidationModel.getRules(t,a);if(n.length===0)return{redos:[],undos:[]};const l=n.map(u=>({...u,uid:r.generateRandomId(6)}));return{redos:[{id:p.AddDataValidationMutation.id,params:{unitId:t,subUnitId:i,rule:l,source:"patched"}}],undos:[{id:p.RemoveDataValidationMutation.id,params:{unitId:t,subUnitId:i,ruleId:l.map(u=>u.uid),source:"patched"}}]}}return{redos:[],undos:[]}}}))}};ae=St([fe(0,r.Inject(D.SheetInterceptorService)),fe(1,r.Inject(r.IUniverInstanceService)),fe(2,r.Inject(m.SheetDataValidationModel))],ae);class ft extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"id",r.DataValidationType.ANY);S(this,"title","dataValidation.any.title");S(this,"operators",[]);S(this,"scopes",["sheet"]);S(this,"order",0);S(this,"offsetFormulaByRange",!1)}async parseFormula(e,t,a){return{formula1:e.formula1,formula2:e.formula2,isFormulaValid:!0}}validatorFormula(e,t,a){return{success:!0}}async isValidType(e,t,a){return!0}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.any.error")}}class vt extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"id",r.DataValidationType.CUSTOM);S(this,"title","dataValidation.custom.title");S(this,"operators",[]);S(this,"scopes",["sheet"]);S(this,"order",60);S(this,"_customFormulaService",this.injector.get(m.DataValidationCustomFormulaService));S(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder))}validatorFormula(e,t,a){var d;const i=r.isFormulaString(e.formula1),n=(d=e.formula1)!=null?d:"",u=this._lexerTreeBuilder.checkIfAddBracket(n)===0&&n.startsWith(E.operatorToken.EQUALS);return{success:i&&u,formula1:i&&u?"":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:n,unitId:l,subUnitId:u}=e,d=await this._customFormulaService.getCellFormulaValue(l,u,a.uid,n,i),c=d==null?void 0:d.v;return y(String(c))&&r.Tools.isDefine(c)&&c!==""?d.t===r.CellValueType.BOOLEAN?!!c:typeof c=="boolean"?c:typeof c=="number"?!!c:typeof c=="string"?y(c):!!c:!1}generateRuleErrorMessage(e){return this.localeService.t("dataValidation.custom.error")}generateRuleName(e){var t;return this.localeService.t("dataValidation.custom.ruleName").replace("{FORMULA1}",(t=e.formula1)!=null?t:"")}}class Pe extends ge{constructor(){super(...arguments);S(this,"id",r.DataValidationType.LIST_MULTIPLE);S(this,"title","dataValidation.listMultiple.title");S(this,"offsetFormulaByRange",!1);S(this,"skipDefaultFontRender",()=>!0)}}class _t extends p.BaseDataValidator{constructor(){super(...arguments);S(this,"_customFormulaService",this.injector.get(m.DataValidationCustomFormulaService));S(this,"_lexerTreeBuilder",this.injector.get(E.LexerTreeBuilder));S(this,"id",r.DataValidationType.WHOLE);S(this,"title","dataValidation.whole.title");S(this,"order",10);S(this,"operators",[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.EQUAL,r.DataValidationOperator.GREATER_THAN,r.DataValidationOperator.GREATER_THAN_OR_EQUAL,r.DataValidationOperator.LESS_THAN,r.DataValidationOperator.LESS_THAN_OR_EQUAL,r.DataValidationOperator.NOT_BETWEEN,r.DataValidationOperator.NOT_EQUAL]);S(this,"scopes",["sheet"])}_isFormulaOrInt(e){return!r.Tools.isBlank(e)&&(r.isFormulaString(e)||!Number.isNaN(+e)&&Number.isInteger(+e))}async isValidType(e,t,a){const{value:i}=e,n=X(i);return!Number.isNaN(n)&&Number.isInteger(n)}transform(e,t,a){const{value:i}=e;return{...e,value:X(i)}}_parseNumber(e){return e==null?Number.NaN:+e}async parseFormula(e,t,a,i,n){const l=await this._customFormulaService.getCellFormulaValue(t,a,e.uid,i,n),u=await this._customFormulaService.getCellFormula2Value(t,a,e.uid,i,n),{formula1:d,formula2:c}=e,h=r.isFormulaString(d)?l==null?void 0:l.v:d,g=r.isFormulaString(c)?u==null?void 0:u.v:c,f=y(`${h}`)&&y(`${g}`);return{formula1:this._parseNumber(h),formula2:this._parseNumber(g),isFormulaValid:f}}validatorFormula(e,t,a){const i=e.operator;if(!i)return{success:!0};const n=r.Tools.isDefine(e.formula1)&&this._isFormulaOrInt(e.formula1),l=r.Tools.isDefine(e.formula2)&&this._isFormulaOrInt(e.formula2),u=Z.includes(i),d=this.localeService.t("dataValidation.validFail.number");return u?{success:n&&l,formula1:n?void 0:d,formula2:l?void 0:d}:{success:n,formula1:d}}generateRuleErrorMessage(e,t){if(!e.operator)return this.localeService.t(J.NONE).replace("{TYPE}",this.titleStr);const{transformedFormula1:a,transformedFormula2:i}=k(this._lexerTreeBuilder,e,t);return`${this.localeService.t(J[e.operator]).replace(G,a!=null?a:"").replace(Y,i!=null?i:"")}`}}var Rt=Object.getOwnPropertyDescriptor,Vt=(o,s,e,t)=>{for(var a=t>1?void 0:t?Rt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},B=(o,s)=>(e,t)=>s(e,t,o);let ie=class extends r.RxDisposable{constructor(o,s,e,t,a,i){super(),this._univerInstanceService=o,this._dataValidatorRegistryService=s,this._injector=e,this._selectionManagerService=t,this._sheetInterceptorService=a,this._sheetDataValidationModel=i,this._init()}_init(){this._registerValidators(),this._initCommandInterceptor()}_registerValidators(){[ft,tt,_t,ot,Te,Ee,ge,Pe,vt].forEach(o=>{const s=this._injector.createInstance(o);this.disposeWithMe(this._dataValidatorRegistryService.register(s)),this.disposeWithMe(r.toDisposable(()=>this._injector.delete(o)))})}_initCommandInterceptor(){this._sheetInterceptorService.interceptCommand({getMutations:o=>{var s;if(o.id===D.ClearSelectionAllCommand.id){const e=this._univerInstanceService.getCurrentUnitForType(r.UniverInstanceType.UNIVER_SHEET),t=e.getUnitId(),a=e.getActiveSheet();if(!a)throw new Error("No active sheet found");const i=a.getSheetId(),n=(s=this._selectionManagerService.getCurrentSelections())==null?void 0:s.map(h=>h.range),l=this._sheetDataValidationModel.getRuleObjectMatrix(t,i).clone();n&&l.removeRange(n);const u=l.diff(this._sheetDataValidationModel.getRules(t,i)),{redoMutations:d,undoMutations:c}=K(t,i,u,this._injector,"patched");return{undos:c,redos:d}}return{undos:[],redos:[]}}})}};ie=Vt([B(0,r.IUniverInstanceService),B(1,r.Inject(p.DataValidatorRegistryService)),B(2,r.Inject(r.Injector)),B(3,r.Inject(D.SheetsSelectionsService)),B(4,r.Inject(D.SheetInterceptorService)),B(5,r.Inject(m.SheetDataValidationModel))],ie);var Dt=Object.getOwnPropertyDescriptor,Mt=(o,s,e,t)=>{for(var a=t>1?void 0:t?Dt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},re=(o,s)=>(e,t)=>s(e,t,o);m.SheetsDataValidationValidatorService=class extends r.Disposable{constructor(s,e,t,a){super(),this._univerInstanceService=s,this._sheetDataValidationModel=e,this._dataValidationCacheService=t,this._lifecycleService=a,this._initRecalculate()}_initRecalculate(){const s=e=>{if(e.length===0)return;const t=this._univerInstanceService.getCurrentUnitForType(r.UniverInstanceType.UNIVER_SHEET),a=t==null?void 0:t.getActiveSheet(),i={};e.flat().forEach(n=>{i[n.unitId]||(i[n.unitId]={}),i[n.unitId][n.subUnitId]||(i[n.unitId][n.subUnitId]=[]);const l=this._univerInstanceService.getUnit(n.unitId,r.UniverInstanceType.UNIVER_SHEET),u=l==null?void 0:l.getSheetBySheetId(n.subUnitId);u&&i[n.unitId][n.subUnitId].push(...n.ranges.map(d=>r.Range.transformRange(d,u)))}),Object.entries(i).forEach(([n,l])=>{Object.entries(l).forEach(([u,d])=>{(t==null?void 0:t.getUnitId())===n&&(a==null?void 0:a.getSheetId())===u?this.validatorRanges(n,u,d):requestIdleCallback(()=>{this.validatorRanges(n,u,d)})})})};this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(U.bufferWhen(()=>this._lifecycleService.lifecycle$.pipe(U.filter(e=>e===r.LifecycleStages.Rendered)))).subscribe(s)),this.disposeWithMe(this._dataValidationCacheService.dirtyRanges$.pipe(U.filter(()=>this._lifecycleService.stage>=r.LifecycleStages.Rendered),r.bufferDebounceTime(20)).subscribe(s))}async _validatorByCell(s,e,t,a){const i=s.getUnitId(),n=e.getSheetId();if(!r.Tools.isDefine(t)||!r.Tools.isDefine(a))throw new Error(`row or col is not defined, row: ${t}, col: ${a}`);let l=t,u=a;const d=e.getMergedCell(t,a);d&&(l=d.startRow,u=d.startColumn);const c=this._sheetDataValidationModel.getRuleByLocation(i,n,l,u);return c?new Promise(h=>{this._sheetDataValidationModel.validator(c,{unitId:i,subUnitId:n,row:l,col:u,worksheet:e,workbook:s},g=>{h(g)})}):r.DataValidationStatus.VALID}async validatorCell(s,e,t,a){const i=this._univerInstanceService.getUnit(s,r.UniverInstanceType.UNIVER_SHEET);if(!i)throw new Error(`cannot find current workbook, unitId: ${s}`);const n=i.getSheetBySheetId(e);if(!n)throw new Error(`cannot find current worksheet, sheetId: ${e}`);return this._validatorByCell(i,n,t,a)}async validatorRanges(s,e,t){if(!t.length)return Promise.resolve([]);const a=this._univerInstanceService.getUnit(s,r.UniverInstanceType.UNIVER_SHEET);if(!a)throw new Error(`cannot find current workbook, unitId: ${s}`);const i=a.getSheetBySheetId(e);if(!i)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const l=this._sheetDataValidationModel.getRules(s,e).map(h=>h.ranges).flat(),u=t.map(h=>l.map(g=>r.getIntersectRange(h,g))).flat().filter(Boolean),d=[],c=await Promise.all(u.map((h,g)=>{const f=[];for(let _=h.startRow;_<=h.endRow;_++)for(let R=h.startColumn;R<=h.endColumn;R++){f.push(this._validatorByCell(a,i,_,R));const V=i.getMergedCell(_,R);V&&d.push({resultRowIndex:g,resultColIndex:f.length-1,row:V.startRow,col:V.startColumn})}return Promise.all(f)}));return d.length&&d.forEach(({resultRowIndex:h,resultColIndex:g,row:f,col:_})=>{var R;c[h][g]===r.DataValidationStatus.VALIDATING&&(c[h][g]=(R=this._dataValidationCacheService.getValue(s,e,f,_))!=null?R:r.DataValidationStatus.VALID)}),c}async validatorWorksheet(s,e){const t=this._univerInstanceService.getUnit(s,r.UniverInstanceType.UNIVER_SHEET);if(!t)throw new Error(`cannot find current workbook, unitId: ${s}`);const a=t.getSheetBySheetId(e);if(!a)throw new Error(`cannot find current worksheet, sheetId: ${e}`);const i=this._sheetDataValidationModel.getRules(s,e);return await Promise.all(i.map(n=>Promise.all(n.ranges.map(l=>{const u=[];return r.Range.foreach(l,(d,c)=>{u.push(this._validatorByCell(t,a,d,c))}),Promise.all(u)})))),this._dataValidationCacheService.ensureCache(s,e)}async validatorWorkbook(s){const e=this._sheetDataValidationModel.getSubUnitIds(s),t=await Promise.all(e.map(i=>this.validatorWorksheet(s,i))),a={};return t.forEach((i,n)=>{a[e[n]]=i}),a}getDataValidations(s,e,t){const a=this._sheetDataValidationModel.getRuleObjectMatrix(s,e),i=new Set;return t.forEach(l=>{r.Range.foreach(l,(u,d)=>{const c=a.getValue(u,d);c&&i.add(c)})}),Array.from(i).map(l=>this._sheetDataValidationModel.getRuleById(s,e,l)).filter(Boolean)}getDataValidation(s,e,t){return this.getDataValidations(s,e,t)[0]}},m.SheetsDataValidationValidatorService=Mt([re(0,r.IUniverInstanceService),re(1,r.Inject(m.SheetDataValidationModel)),re(2,r.Inject(m.DataValidationCacheService)),re(3,r.Inject(r.LifecycleService))],m.SheetsDataValidationValidatorService);var Et=Object.defineProperty,yt=Object.getOwnPropertyDescriptor,Tt=(o,s,e)=>s in o?Et(o,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[s]=e,Ct=(o,s,e,t)=>{for(var a=t>1?void 0:t?yt(s,e):s,i=o.length-1,n;i>=0;i--)(n=o[i])&&(a=n(a)||a);return a},ve=(o,s)=>(e,t)=>s(e,t,o),ne=(o,s,e)=>Tt(o,typeof s!="symbol"?s+"":s,e);m.UniverSheetsDataValidationPlugin=class extends r.Plugin{constructor(s=je,e,t,a){super(),this._config=s,this._injector=e,this._commandService=t,this._configService=a;const{...i}=r.merge({},je,this._config);this._configService.setConfig(dt,i)}onStarting(){[[m.DataValidationCacheService],[m.DataValidationListCacheService],[m.DataValidationFormulaService],[m.DataValidationCustomFormulaService],[m.SheetsDataValidationValidatorService],[m.SheetDataValidationModel],[ie],[m.DataValidationFormulaController],[ae],[te],[ee]].forEach(s=>{this._injector.add(s)}),[Fe,Oe,Ie,Ne,we,Ue,Ae].forEach(s=>{this._commandService.registerCommand(s)}),this._injector.get(m.DataValidationCacheService),this._injector.get(m.SheetsDataValidationValidatorService),this._injector.get(ie),this._injector.get(ee),this._injector.get(te)}onReady(){this._injector.get(ae)}onRendered(){this._injector.get(m.DataValidationFormulaController)}},ne(m.UniverSheetsDataValidationPlugin,"pluginName",Le),ne(m.UniverSheetsDataValidationPlugin,"packageName",Be.name),ne(m.UniverSheetsDataValidationPlugin,"version",Be.version),ne(m.UniverSheetsDataValidationPlugin,"type",r.UniverInstanceType.UNIVER_SHEET),m.UniverSheetsDataValidationPlugin=Ct([r.DependentOn(de.UniverSheetsFormulaPlugin,p.UniverDataValidationPlugin),ve(1,r.Inject(r.Injector)),ve(2,r.ICommandService),ve(3,r.IConfigService)],m.UniverSheetsDataValidationPlugin);function Ot(o){const e=o.get(D.SheetsSelectionsService).getCurrentSelections().map(i=>i.range);return{uid:r.generateRandomId(6),type:r.DataValidationType.DECIMAL,operator:r.DataValidationOperator.EQUAL,formula1:"100",ranges:e!=null?e:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}const Ft="data-validation.custom-formula-input",It="data-validation.formula-input",Nt="data-validation.list-formula-input",At="data-validation.checkbox-formula-input";m.AddSheetDataValidationCommand=Fe,m.BASE_FORMULA_INPUT_NAME=It,m.CHECKBOX_FORMULA_1=q,m.CHECKBOX_FORMULA_2=Q,m.CHECKBOX_FORMULA_INPUT_NAME=At,m.CUSTOM_FORMULA_INPUT_NAME=Ft,m.CheckboxValidator=Ee,m.ClearRangeDataValidationCommand=Ae,m.DATA_VALIDATION_PLUGIN_NAME=Le,m.DateValidator=Te,m.LIST_FORMULA_INPUT_NAME=Nt,m.ListMultipleValidator=Pe,m.ListValidator=ge,m.RemoveSheetAllDataValidationCommand=Ue,m.RemoveSheetDataValidationCommand=we,m.UpdateSheetDataValidationOptionsCommand=Ne,m.UpdateSheetDataValidationRangeCommand=Oe,m.UpdateSheetDataValidationSettingCommand=Ie,m.createDefaultNewRule=Ot,m.deserializeListOptions=$,m.getCellValueNumber=X,m.getCellValueOrigin=N,m.getDataValidationCellValue=xe,m.getDataValidationDiffMutations=K,m.getFormulaCellData=P,m.getFormulaResult=w,m.getTransformedFormula=k,m.isLegalFormulaResult=y,m.serializeListOptions=Qe,m.transformCheckboxValue=x,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/sheets-data-validation",
3
- "version": "0.16.1-insiders.20260311-074e8ca",
3
+ "version": "0.17.0",
4
4
  "private": false,
5
5
  "description": "Data validation for Univer Sheets",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -59,18 +59,18 @@
59
59
  },
60
60
  "dependencies": {
61
61
  "@univerjs/protocol": "0.1.48",
62
- "@univerjs/core": "0.16.1-insiders.20260311-074e8ca",
63
- "@univerjs/sheets": "0.16.1-insiders.20260311-074e8ca",
64
- "@univerjs/engine-formula": "0.16.1-insiders.20260311-074e8ca",
65
- "@univerjs/sheets-formula": "0.16.1-insiders.20260311-074e8ca",
66
- "@univerjs/data-validation": "0.16.1-insiders.20260311-074e8ca"
62
+ "@univerjs/sheets": "0.17.0",
63
+ "@univerjs/engine-formula": "0.17.0",
64
+ "@univerjs/data-validation": "0.17.0",
65
+ "@univerjs/sheets-formula": "0.17.0",
66
+ "@univerjs/core": "0.17.0"
67
67
  },
68
68
  "devDependencies": {
69
69
  "rxjs": "^7.8.2",
70
70
  "typescript": "^5.9.3",
71
71
  "vite": "^7.3.1",
72
72
  "vitest": "^4.0.18",
73
- "@univerjs-infra/shared": "0.16.1"
73
+ "@univerjs-infra/shared": "0.17.0"
74
74
  },
75
75
  "scripts": {
76
76
  "dev": "vite",