From 3c818dcce5246f29f1db160d7d07995abd5fec05 Mon Sep 17 00:00:00 2001 From: Andrii Kamaldinov <129040945+andriikamaldinov1@users.noreply.github.com> Date: Wed, 30 Oct 2024 16:44:19 +0200 Subject: [PATCH] Feat/188 (#1437) * feat(ref: #188): add strict eslint rules * feat(ref: #188): add strict eslint rules * feat(ref: #188): fix 1410 * feat(ref: #188): change type imports * fix(ref: #188): rename types, remove zone js --- .github/workflows/publish.yml | 5 +- CHANGELOG.md | 19 + README.md | 22 +- angular.json | 3 +- bun.lockb | Bin 1062768 -> 1048790 bytes cypress.config.ts | 2 + eslint.config.js | 92 +++- package.json | 89 ++-- projects/ngx-mask-lib/package.json | 2 +- .../src/lib/custom-keyboard-event.ts | 2 +- .../src/lib/ngx-mask-applier.service.ts | 417 ++++++++++-------- .../ngx-mask-lib/src/lib/ngx-mask.config.ts | 19 +- .../src/lib/ngx-mask.directive.ts | 170 ++++--- .../ngx-mask-lib/src/lib/ngx-mask.pipe.ts | 68 ++- .../src/lib/ngx-mask.providers.ts | 22 +- .../ngx-mask-lib/src/lib/ngx-mask.service.ts | 71 +-- .../ngx-mask-lib/src/test/add-prefix.spec.ts | 3 +- .../ngx-mask-lib/src/test/add-suffix.spec.ts | 3 +- .../src/test/allow-negative-numbers.spec.ts | 3 +- .../ngx-mask-lib/src/test/basic-logic.spec.ts | 13 +- .../test/clear-if-not-match-the-mask.spec.ts | 3 +- .../src/test/complete-mask.spec.ts | 3 +- .../ngx-mask-lib/src/test/copy-paste.spec.ts | 3 +- .../ngx-mask-lib/src/test/cursor.cy-spec.ts | 32 +- .../ngx-mask-lib/src/test/custom-date.spec.ts | 3 +- .../src/test/custom-patterns.spec.ts | 14 +- .../src/test/custom-symbol-regexp.spec.ts | 3 +- .../src/test/default-config.spec.ts | 7 +- .../ngx-mask-lib/src/test/delete.cy-spec.ts | 43 +- projects/ngx-mask-lib/src/test/delete.spec.ts | 21 +- .../src/test/drop-special-charaters.spec.ts | 3 +- .../ngx-mask-lib/src/test/dynamic.spec.ts | 5 +- .../ngx-mask-lib/src/test/export-as.spec.ts | 3 +- .../src/test/inputTransformFn.spec.ts | 3 +- .../ngx-mask-lib/src/test/mask.pipe.spec.ts | 7 +- .../ngx-mask-lib/src/test/percent.spec.ts | 3 +- .../src/test/place-holder-character.spec.ts | 3 +- .../ngx-mask-lib/src/test/repeat-mask.spec.ts | 3 +- .../ngx-mask-lib/src/test/secure-mask.spec.ts | 5 +- .../src/test/separator-non-en-locale.spec.ts | 6 +- .../ngx-mask-lib/src/test/separator.spec.ts | 8 +- .../src/test/show-mask-typed.spec.ts | 5 +- .../ngx-mask-lib/src/test/test-sufix.spec.ts | 5 +- .../ngx-mask-lib/src/test/time-mask.spec.ts | 3 +- .../src/test/trigger-on-mask-change.spec.ts | 5 +- .../ngx-mask-lib/src/test/type-number.spec.ts | 3 +- .../utils/cypress-test-component.component.ts | 7 +- ...s-test-trigger-on-mask-change.component.ts | 3 +- .../test/utils/test-component.component.ts | 47 +- .../test/utils/test-functions.component.ts | 2 - .../ngx-mask-lib/src/test/validation.spec.ts | 3 +- src/app/app.component.ts | 13 +- src/app/options/options.component.html | 2 +- src/app/options/options.component.ts | 6 +- src/assets/content/common-cases.ts | 6 +- src/assets/content/lists.ts | 4 +- src/assets/content/optional.ts | 6 +- src/assets/content/other.ts | 6 +- src/assets/content/parser-and-formatter.ts | 6 +- src/assets/content/separators.ts | 6 +- src/libraries | 2 +- src/main.ts | 3 + tsconfig.eslint.json | 4 + tsconfig.json | 3 +- 64 files changed, 807 insertions(+), 549 deletions(-) create mode 100644 tsconfig.eslint.json diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b802e2cc..be668fdf 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,8 +23,11 @@ jobs: run: | bun i bun run build:lib + - name: Setup npm token + run: | + echo "//registry.npmjs.org/:_authToken=${{ secrets.npm_token }}" > dist/ngx-mask-lib/.npmrc - name: Publish library - run: bun run publish:lib + run: bun publish:lib env: NODE_AUTH_TOKEN: ${{secrets.npm_token}} diff --git a/CHANGELOG.md b/CHANGELOG.md index 55662a37..8fb3311c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +# 18.0.1(2024-10-29) + +### Breaking Changes + +- rename "IConfig" to "NgxMaskConfig" +- rename "optionsConfig" to "NgxMaskOptions" +- change interface to type + +### Fix + +- Fix ([#1410](https://github.com/JsDaddy/ngx-mask/issues/1410)) + +# 17.1.8(2024-07-16) + +### Fix + +- Fix ([#1344](https://github.com/JsDaddy/ngx-mask/issues/1344)) +- Fix ([#1356](https://github.com/JsDaddy/ngx-mask/issues/1356)) + # 17.1.8(2024-07-16) ### Fix diff --git a/README.md b/README.md index 156cd1de..2727163a 100644 --- a/README.md +++ b/README.md @@ -72,9 +72,9 @@ bootstrapApplication(AppComponent, { ### Passing your own mask config options ```typescript -import { IConfig } from 'ngx-mask' +import { NgxMaskConfig } from 'ngx-mask' -const maskConfig: Partial = { +const maskConfig: Partial = { validation: false, }; @@ -90,7 +90,7 @@ bootstrapApplication(AppComponent, { ### Using a function to configure: ```typescript -const maskConfigFunction: () => Partial = () => { +const maskConfigFunction: () => Partial = () => { return { validation: false, }; @@ -144,9 +144,9 @@ Import **ngx-mask** module in Angular app. ### With default mask config options ```typescript -import { NgxMaskModule, IConfig } from 'ngx-mask' +import { NgxMaskModule, NgxMaskConfig } from 'ngx-mask' -export const options: Partial | (() => Partial) = null; +export const options: Partial | (() => Partial) = null; @NgModule({ imports: [ @@ -158,9 +158,9 @@ export const options: Partial | (() => Partial) = null; ### Passing in your own mask config options ```typescript -import { NgxMaskModule, IConfig } from 'ngx-mask' +import { NgxMaskModule, NgxMaskConfig } from 'ngx-mask' -const maskConfig: Partial = { +const maskConfig: Partial = { validation: false, }; @@ -174,7 +174,7 @@ const maskConfig: Partial = { Or using a function to get the config: ```typescript -const maskConfigFunction: () => Partial = () => { +const maskConfigFunction: () => Partial = () => { return { validation: false, }; @@ -193,12 +193,6 @@ Then, just define masks in inputs. Text [documentation](https://github.com/JsDaddy/ngx-mask/blob/develop/USAGE.md) -## Setup hooks - -```bash -$ npm run init:hooks -``` - ## Contributing We would love some contributions! Check out this [document](https://github.com/JsDaddy/ngx-mask/blob/develop/CONTRIBUTING.md) to get started. diff --git a/angular.json b/angular.json index 077401fd..19f82bd1 100644 --- a/angular.json +++ b/angular.json @@ -26,8 +26,7 @@ "extractLicenses": false, "sourceMap": true, "optimization": false, - "namedChunks": true, - "polyfills": ["zone.js"] + "namedChunks": true }, "configurations": { "production": { diff --git a/bun.lockb b/bun.lockb index b1a2112e0e13f8c1f5a8a8a92f483fff690adc8a..de39f5a7b81329e801c8580d2e778135393398b0 100755 GIT binary patch delta 234697 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

)YYWb4?iBIqu@p6ub zvBB%I4(vF}`S+^(_rN`jkGsLBSK}^PY6(M2N71{}kgh3dg18~U^wk!zStt|Uj9ux@ zoEl%v;H)l1ue<)9iMlnF4-c_cK4ZJh#VPc~{9c{)Q`=`VPCXnEx?IQ_q?-AqWT{JO zT@mZLq$6FHWwIHwG^5Vk!z-eYnesOnwkP3#i(!vu(_zzhJe?pV6jE~l()hv@uctcP z2(Y>b;5ZHNA$4H@MlK+if*+}C0u)e?p2TWr0P$-EIObt`f<7#aF-C+m>y0kf^jr({~$OYz|UN^6-4O)JKi! zI0<6Tf%T;Ox6u8uFWgQ}qzb;5sB5rZU)r=LN874;a%)m?$Gu2XN&md&Q({MZ5653H zxU;;pdHT@GmgdV(mzIWIKOUyiOZf7U1h->I_i21GKZYGpnNLUH1_{L{b2o@b0Ttwh z^(-zkcw~sk7D8&@qD(kGnIA`)Mk;FVkVt$ocZY=Bhjdbj!Y6YNh{glRumU8SgRG?s z@Lg0=6d^H~XkqlLj)xG-r4WMEj&S-_M-hYr3-GLQm?BEpYLv><3jAdbl5_%+`iPb} zi8Aq6=Q#j74S=wX&x1<43TnWBFOo>etu>cA`hci=IeQK1K3$-e`yfC@eE@GSs$D4okS09Q1{ zQcemfh}Htc&tRJhjNvB^)=DahIH2);fG0gdJe~ul8hZAxA=wv@@Ng8VB~9Td(nvu& z0`P)_MgT%y0(vOa5zR<|Mjgitay62}1YZbrQ|PKg3G;I((LmzP0b=U`;}qT!<0yd9 zD?mmRpo#pVFiOGZJm4KkI}b>G4d9Cgw2Q`ZAnB&iMZx?sV3@>R2E?`i#wm;t<0}B8 z4}gp-fM4VnfaN#Y7>_VU(rEZYSgs4V=bF_9ozaJQhxJACVNa zp(?j)NCO)uDWy+BIevmjCqg(l$&o~eXgj2V3Ku6?lmw}y5|jkt<|Or0JUSrZ*CD)| zr1?5TwiBYA4B_J>XOba}RC=h)DiGw;%;nYN<$ak~y~_jy(|X+Yo6^QcXp)7owN}k>Mm>8IVdU z-rsPlkwckpIQ4n-LF|8`j6BMGhsgebw0uVyMNYD$2hvC-ya%F$98wAChiLaglu_mm zYStK_W$vIJRg|I9MTL(AWz>-8Oi1h?B)1tay;4V>??Q}*An|vxl_v5`WpqlGV=FDx zLl5`VVU(fMpH&-q&PExlpOB1fhz{~hg)suL$${u1&pD6+Dtz}KddTxVh~p^kFEStU z*`)D$%5$#Q9cEd-^21PG$(=*&p9);4gJlxi;!v znUitpw4k3kYfdloBajA|vAL*M^cPwx&qYgyoJ1fGQc1-v4`PhDOU2_iL^>a0in*H) zksX6HP%+2cEr2vq2`YfB$K0h7@&}?;2-(O<{0ku(mTf)bAy!#N3BiVx07n z6FUJhe+b!znfef7Gzl4}vK<*Lf{aq(utS!2U_QNI-x`z3iCsg%2Hkmp>#r3Hl}FfU zHz#2&#zqWQh-DGP7HQv$X;47L4X;jQwL{wNAdYO1^2aD+kH(jw9#M8$rUc@E4*rKS zl~kllAx=m}DQfoMfHY8X!9b_Jy5@v*mO)%G&~lV%q!LpOImk&qQ3>IK7(9g><|OBz zLNpkVVJb&C$=V7?7nPI>h#Myvpc2asv8;r+bCRS=h!GEjqYC25Nj6nMMycddIf1cP zLsEGm_SFz?PLfT$@;TeR%2PvoGhlx-FDWKw30|~&P9Zd5x10r1u3BuTG zQATtoq=Cw5Wd1p%l1k8XNGK)(6^~gEwHJ`H$j=LiEI*`^N;vZK64FQ|<|QN&`Joab z05Pb8L?J(Q5Dh`dFqLTJrykNpC8Zt`gZxm56{1_=%}lHW`FRB~5{7WRMwvL|=QU)M zN-hL16_x0~i9dBVfKQQ=zErf1f|UqB7&pGG2{^D{V;(R>A)UC=vnHa)?@&tt6~zwJ za-Fa!a^l)A2514Wrl7;`QABjk|Ejt9ubN6KDJ>|Ih7Pyjijj^v{Q>b7x=Z72Oimgz z(AkfOcQ7?+%*3v2MZAk?NMjauBqE-A;BLcpD2Lc0u-?O2@FUw+Jodo<37R)GK0Nk7 zJBY^~=-}|!gIp)Ved0&M1ETyH8$Lv}cq9(bJ+$GU#A*@xY48PuD<)B201Qchc^9CB z#C2i2QqqsW`UD3c-nWOx9}>Hvi;(J>TeUTr<%acO&e|S4bdDxcuS%X zh><)xJ3N5SHWA%Hz$k^3LBKoGPa#zSU^xV6A&El(D@6duFyJHEI1FGc1>{m_BP>4w z1r+F|29G*qQE*fO2#)|diR}nLbQz$W!WY6n3aF&uHVWt_B@{fA0n)z!-^k%#09h44 z1BD(U@f*-cA?P=tkJM2JQ3cqG<0Dr;@f!nZEC-AWVX_VqV)LGc@tf zT%2F=YD5)!F)RR(m`qG$HZGFQLeC8=A;PRE!@))NvO+|)AmvoJxQGB7q>_po8-$yS zlv43n1(9Zl@N$tO>=0RPNCOo63+YLtpL9oJm0 zznA^gwUCCHC?n2AOn6X_l^!I62eJTLQDNvqYRP5YzBMXISZQsJQEQuM?}r#;Mu|Z@HbLCPAf}j6RAe_pq~}1)F{9={ z8mTl;S&tbt7r%Gjz(u@h+=%%^<0dY$WFF#X%qAMQAV)M>Vz!GTZpAog+=iJ%qZRTq zA8|VuIZvZCvP0tzF0yt3;!fm-MjI|NK;tfCW+CEkE|Ns!9?S_EZMn!M3Bm?6?CxwqJxE+vDh>BDxbIED3SI(Ittpj>rj(PRN85qB9q9rqKm?pm9Iui!`Du zvOwbj%oZ9CA_t2R4ZA zM;@p&Qc+ZfL?RQ)kPv4`3zaD3LItAX0tr`vL?atix~OQYLSm2)RY>f9NDl-rG4Ef4 zbET0hpp!m%8i$lDN0Ct~QysjFq^Lns4^UA6J>>X1ZC z4|PZZ6+R8fbsRJr5XZxiA_z+g;nqasqDKI(nt+?c?+l=lg7`{olZJug=WE2{D5Mrb zUuCX^BC^K--dX@WXi1@wg5oLwp0!*B2yp|nP{<-}y8#-<0pZ$!91^t$&_zLeH2_as zt_H-q19~Xnp-UZrkq01N2OTN=*O5^w=Gbqz3E60cBB`DLnkV}Br7pnA3y`4;z!R7h z7$*QWYXNu&b1k5N0-qiL&td8T98Us@DBw{{eSoMpz*QfBr!gs1QV=%);DJm7fX697 zErn-9Y#l(>2jIO9P)n*PG*VDB1iT=ghJX-XKnsOBB4-59@B@S!0bY?N3SAVmjR6fL z)EE%!59p!rmS~y)i~<1hCV(c=O<|ORxhdcsi8BSH1_H(@v=C!6fK?D6!wm3|{Gz}J z2H2Pb+DMu?pnw9O1)!a5w*WYv1{6`~B;4x(q9Fj+^?)y=kV54Y&;)f8rwss)P?V_M z0Qg44=+$5L48VIMpodgZXr!RH3D8IUjsZf>0$Kp9{WvV*a3R$QgG^mo2XP1*(+e^c z?JX!Xj0r#`HXPCe!HtThC8{xs0K{9O$S)i^3iNtR#e6G@;F-ZN6iJN)j8hmVy5Rt; zbAXI(fJxF%fe{7BRl>at3rWlb6j0#Xj#}9m#CkhDY|cZ9sBka{5Bt;*?1D5>3Ezc!W->@Km5_@N z?cET52Ei+M|r{8LrL?F!ukj72^tI>hr4v#%>QOpyFze znk6xIDvt3G@qG|!265g85xokjr6R*1a~vR*RJxc1j|7OKBSfA-yc{92*B~ua z6p)#DzVog;!Zfp zsx!zy2)&m}hNRGY15L<&lo_RB=?c+ekR(?~Y6^to07RQXHXVRi-GEH3dFwC;KAR&y zH>n&%8C?e1s|hKfGPSy|hmq3NeaBQtLng9nz#syLQARWkGWEIB5VM6!B^Bu-sK*#N zG{Ri=NT*v-F=dcNM^Q%h7NjR1bJv{c7GkP4QcydFBI_~qm1rvDHl&lvMg~!F!$ukz zkQg_}W(N60rHhKeafl_7dJGbK2Qo}$8-uKMhZto-Qrsciksd0eR4hFpJCGg^Na|e( zhbP1a>G6bEWkGVO>_&RLAdGB?y%)rmL9(e7P!T=>u|vX6Kpb-*7qivlwx&5&Gb(b#TG*7w^FR`$d5nD7~O}^m({R( zB0p3{saOU;P9Q%4kkkjXoT?DrYf$LLssxkf2aV z_`iwSNM&kbMxre`RYOW4oo7%c3i&yUtu&rMGBP32$Pbk+Dh6SY803e3?G#%E8Ky#z z`K1t}a!5)zBn~GVDx*{^BOsTNp9s{G`V_(u35iF3A|X~4RO}!L7%5ij2%{1*wN#h* zZ>|hl&fRtE3A?c?uO2IM?@PH)70aEJ#9G3t^WaA}(RXre=LNQ^v3}Czh*k1;e zkSq!X6ojt;o)FtB0LRyWath^yKOP|30C0;3RFD!1l@z3}0;coC^S+~y9Rhc{H_5)8UdXY>WFe8K%)r|lL&Z4+9-5UFh~M4kfx3L+8gNVadWKjBbE^77ii& z6^iUE98?8VgtH-R++=Sy#PKVnoC*gw5y*jveuKE>K)AR`DV0hp()S?T+~mkTh{tzG z0~KCwvM3iK+XD&8h468cdMb@n)bb!Rxru)sB%~M8^9#byO;qwB8hwx$T*X)gxe3o3 zoEo~Q&_9a8D$GsJ7obe+56IMtstEVr6;-2tNJ=5L68pE+C>6Su`CM*13ij_m_SoF^ z9ARNaKhA&^{Rc&_h>k9t@%`co!=D`|j(-RfS?H6q&G}%%rvo+F`T16Cc2Q|xuhwO^Y+vn|I~PSi$}M{Y964`W>jh;KkTobs@md`OZT1 z8vh%L=7n*?k(M>adEtHfwq?tm!+u@QIVh%d>yY}Dk&_Xxo^b6U_(}5LADOZ);3nx0 zFiOS{C!fz!&e>YL0fu)sna{LPj6Z%k%O_pXYP5Mx<&QnrgZWg}unHEgD>Uw1n{ni9 zQlOQG_#)0icV48n3!T463KsH?j^i5a0ne1E<(yB zF>#8}VaH)kyazM2KIp@phU=Uw)+9TfnlsnxxmeSf&r_rR$+pVX>{)4!Iv z!}iR zOD~*1N%nERmk{ibY~2~%SvzLHiT5wG6kdXsl(|WB30l(ljh3`aF(y^!mKwFcwGLcQitw%x zS>gOuJY(UdO^41;yPNeTEYqXy(BsKZ&4y(xJOcr2DIS)$AKyPyw{}vbdFXq|-p+47 zljeoBk(S?_c+vYi@sx1qD#vMBqY?6JfBQ*XHOvY+-09H9=Kd-M>kiG~XlPW9Xhm zwaLK--LKC&h~Qe;+sc7!zx1ZM+F6&2RPF!r_`Pro$4GA1T#NquZ0+H>4olO*qC}hc z?p8h)$QaJI(Hv;jVd|bbbN3#ZZN1*PVe=J^V9D`~#hWsEIBa{=hOQW#F?piQF@{_(;ve9AQD<&a&CQF2+ETS0q%Ia8^e>5#jb0FG((7mH?RejR7j5Txo`D_1Qts}_ep`69(5HEqx1#GX55c41*QcPGZDQ{==iL`QJ~lbrKFj&rl6(`h(#UwG-Wf3WPITKMUj<{cYo}WhS!+s{wp#5`h`Bj? zP~`b}4Tev|w*C;Xc5K;xTn!yiC7f&RLCUmlq{!UA6OH z1WkW4;(6HX^FoO?qfFg1pRn|WHlkkAfDy2+$6ZYg zB!r!d&nNVPxvS4Sf-XXGG|8L`p3txEuAU$%lMk47GIU!Zxt~&KQg4C zt0!1xUzEPXS`>eF)n2t+3>;Zy{p6FEmp_N1Nz4H`u*COZTKl=Tk7-zQ|A3- z$=to1AfIDO!5$X-M;??p2uX)kku)sac^a=`1Ex5tx+3lKCcM0ylL0@B1_j_!eGPab;=7e z{RQVv8sscu4REhLaWwMrK*k;m@wBA+A1-%}*8h+VFLE_Wq{^6%K_BGCq(iY4v@1%c5A$<^yV9oOL298|dRRaV7k^{)XF zmn{7htM(H+_GeoEaZXU4sV|awi}Cb7jiCAuJJ{Ozm@3}RT=CaqLMCmSbROL75WDeh zP)^q?Kf+U-KV*fnUf=f%8QE#C8iG|fJ#LRO9h+aV=#|i7&o!#sw0pf~s9qfnO`N{< zIIWj^+TRD4t+`3kOMLIM1E=r~#GUx}JG|S_hS+vTmzC?!%ek4T?GZ+syIrX86NgQ?)yDla)>Q z-!AyrLF4{^o4fwqoHWj$2R>f4z0*rIyoaQF1 zU64uO zQY(hjc*Ab2zef`OuNY;>94%=3C@3O{>&Z#%bl>*H(UZZ^B6 zm%Noaymm>^YB_L~|8FGKr!gg>=(!gXn4_+$3={q>_FF^EBqPUhfL(%g=w1x2ct9 zTEXS!n>q%U&DB=7{@iw?yQ?Fxb?dCCzAMJxMf2Q~e<^N+PX_BiMhpi025>Dl3Kk*FqtKboT)oDVYBN;4cu5(!@&x!bbsFq=|yYVt_V2 zyW?xS&|iQq3iQLgc`kEjecw76Gye&8nIGU#mlZ#0xoB)+2|BU#$FF+d@S z8v~3|7^m=n82dRtg&{>Qz8E(ytdqr*;GdQFCy{2szp+fl0`OQ0XrO>)GFE`B5}vYzQw&6Af4(V@IebZ8TtYjE2`llLG-uV>G-W-85ibj1$!wsiN8xPE?C^ zF#t<5G3G+Rq8JVD$uAnPBE~@YK+dhubSNG1gcwL&(!G51hS10k*_3x+3o^1VWBfHP9^i<0k zpB<+6ZeR749|>}@Q|#nCWC`Vm-% zakuJ#x3&IcZnYuUJnKbvcUhnHhKkTvSYLCo@8<{?ko_}z?fRCLt16CaN%t7tYfW`< zNqH7MU3$RXX3gcx=QcdhlX#pEufEEgX*46u_1-^z&M)E9y1tTUxAuoUJ(|+GJxtc> zWS;!9#KqtEk9NH{a^s|p!WJPlQd6xwLs@_Co2`|-4;RSjj@Ih@cz;sQKO5hjz7HP!oGbX6EV9d= zq->oV^Lf*Q_j`XTMO}Q9FO_lT&@J z5l$V`?fMIFlByJwMKS4GMB48170d~eT9`bcA7oLyjA=M&?tUP3qC?XpV@uHEPht$)^!9$ja zA#(DN^!bQfJcM-#B7=trNFZ|a5N8^B;6jMJJmkzA#OXX_Kn9VIhumL?I0NNoBhKU@ zD$i#EQZ*G%0oBM4`y0%B3^#eQ&E5VYb;q*(h1cgDWK>yk$$h^4?ZAv8V`6AD z@mM*0nyam|P|s|$4Zd$y*)CI%b(^PT@MTrBzL0C2mH{47K)tRs|8hL!6ZR?bSWic= z03wgPNMZa6JY)`?J&M@d^AML}^mLXeA&>aC^)luj71gl1KH{40lW46pGp+l_)m4u+ z$w_PZXS^Bto>C?{TfpW<wZ^zU&2!N_sXN~3xhg8e@fb2Ejp~TTlA6j%X6>JXYwj~c&?tc zC10Z?A+XZPK4aQg?JmKrf;CF{45mXy6|+_t<5~A91?D+X8=?J~Qr$LN%vP=s2*?-NPMYC#qX}$-s#ha~^7a z=-Y!{KSYc3A@tJ3O|_={)qYo!YOB``8~I1%3f(`<`I5Wjxdo*nHmxndu9<}jD#&3( zVIdA9SqTes7*SY+!-&G797eKHfguqKlJ>)i6~ou=*nRHNwt<_w_IWZQtV63^wcdVx zc4$$)NryWO2w3}daONhDhMfAEpmotpzZbo?IpjmLJfYKv-8(e7_0HE3f9{2{!{(*} zi$$FN<0=L7#oj-yM~;zm>KB|ou=!6DNuln#3X zUlzW7A^prdM>4Lz^GU9~0J$hLALiz#ayG%ac za_YjvGmq_>v}SUX7Gv@@dNkqnWKW$Y&)dxRPr345(vpWNM9-4vYgu=nU0;ePNHgG5 zwY+t${0oKM~~NQW%ZqPKayU*6pE8Yn^QPhJ$nTQi!@ud6ED9x`;zWQikf}LmDow?PmTZ(}pLr)D& z9Z=|6>tAoo=v%I)-?dnIGABG#)_-h*Z2JqQ+5PkS2KS~eD>%8^{ZYRDJv8025vRK+ z;N_{ykxJd{x2^4}Qp5W1ncMjJ`f=$FX1N=jWXkxn@jI{a%bGfVoGDcrMSnT1X^J9E z3OSMfC}jvLd1fl8?0Kc2 zil=N@f~uZ{3aWYjR#4qjwH!eW&q@U~J$~g0YI*7^sO^bb!Bx9%orp!x_NryRH_;Q^ zEb@5qzK-`^r0vx%|B#jMGrJ2_h_iZltqUtsHXn1RcE!AX-`9y5H1XT{;2i$BTuUk} zyxpbppwe5f7swx>>;Pwa{W^*wDAH1OYnBF;K+VQ}eAn*!(O zXcRZ!(o&e*&F)vtEZP57Rs2r&cdXz z8ZE26HuIPUAL2%sb>oQBO;WPKoFnnB9NCt4OY2;D7Yu2>_QyO~j`ZCW+T_RBHJgmA znXYr%hhyHADHL)tYsx7rrypoiIZye7D~=o*w=by9=hWBE_lPjzCZ3d)DSlH=AA*X_ zBF?5&$|b`>%H({0@<8$C4F|VYOh_|jn)Rp6-kGenaRJ?&HJ|rpgu50RK zsk)!>)LC0BXRhh(4n|F#e^Te<{_UoOEKWFO;NpO=d{taiQ+h(iyB28F6RVpmO5n3T zjuS2H{B+kRzp(FmxGn{REqLhq!{3v=t}7tyVL#XE0B+2}Y?mExN>MTno~)WUOTv@1p6jh&7Y+rxL&H6GyUJjRtiFxFm&>qBJe z@L8nV=QuGmo;K(7+bqH79z&E>97te;fI(Zf>cg1t*>-ZlXPvxbq{DIX!Sw*c1uc(`!9Vcd34&FWw z^cF69q$p8h4vgmK@INi|-(j3R(fmA}{G%lDgtTx)@lLB*n~t6ZH(g~^%yHhSct*By z^$wg8(=WV!4~ExCPX4uCVy04&FuE4?C#~%ezbRD~$J4x`)#R+g#yN0FLO;)onXWdT z6ti80^i9I2JStNGnzwJ0wQV=YA)zxRsh_9v0@uv&+R-)@c#mFG;(JnVbae|no7&Hb z>hT-l8sWbwZP=|jt~~yMn`o>UQ!_s4>HN}F!}GEamHBX~uWp|%aAgmCn8ym8+~2$W zpO?6@`(F$3WL@g|-oId|r_xeav%r|e{HW2UM_sA?`xgtlzSPw-dTyZNKMN6IdT5A;)6T4Y0s)2j(0!t#7-P#x#!eSwi)kU5xzVVH@f0Q)#~Y8lS=l^C2ak1SAcg%ITpU{ zG+7tE?Huz~c5FIVkHh>^xA61COdMsUXWI!^8V@VvrFXe^9bt?WT1DGTdJogu?9og- zHxIjRYK?_Yv%99*c^$jm+YPQXVPt6SH+_Tat!L(i6 zcq@311{DG{ld;}eYMT#id)o=GCGUO^RBW1`6Pr?2pXQmj%XQ!L`PcAexEW!s_uzR~ z49}~ZuEv3v=Cfk7^|lL8k$Zb+` z`h~r0>53PgjGD;zuSy7Crtno5$iIw9q{$Z#2(Mi&NF9GwQ59tfE_-i( zyT4HT$HHgYh<_syArg~C|!nBF1=wQt$2TXQC4yHH@kP~WcOoq2dk!}ljLeezVf$07Y+ z3vGwjMBa+0UL%&syV^CU%H9Fy10`2B|1FX--$~lL_DBoZ|B`1 z7PvZj=kPQt#SP!LnCoKinu;=Rg1>hY^-R3!O6on}gwK+ys~#o1M&d__lE{}#$LZ6% z{GEi%>JP$1T7bo#^@*a?2tKjj-%0W>Kj@olN`z%lx}P+?;6;ChA5*;>mUL0?Yz8Lb z1j*XwcwAsg(j{pk9#Z~){QuX$|C2SqF?fn!&;t8KUB=^y93!X*zla&WehVKI4~gvk zk*pJ=ckqpCZ{w8i9YQUQ{wHF5bH#8P*LjCM&pVVfrw)#ink!?Dz)9wK_QVK^>@IK4 zh5O#pRl@1VgnI8wWv&iR)7P!wbmki1R5qo}ZLSec^W+l9$!D%PP6u(W^qlc^TFj|!p%nh=<$#Ij-4L0Xaft+e`h{=?=>E?!- z({?b=+%R*gasFEQ48w8SKGHxWbE9!8Oj_t|8}L}mn-2HDWp6@^Gx-BDt0f$7EzkVvnf0$yXMxL#FwC?GW+i^b+$?k1 zaA(cUwh3m(`EEVUHJ1bDyK6Mx^8SeP-I!T`ex<$-9HZWT_uU0(3La=6~oX*Vonk8n1a({A{g{oAdrd85e!#J_5%XV_$}phhh7 zW^;v5am{VPsZfO>p}83eg#%oWG&!)fVvn=3(lzopw_t|ab^j&clp&6U#jcNWRGvyTt$!=>ShCA?w@%iyk= zyK1g1u81-+Tr*dWcnEPNy>6~N@e-Eq2B8+R0_X_s()zz`2`dsWWeM+?tAs19goJkq zwc%C<9kw+*wRBa8S2Xv`TveP7<;wfqTs7j=%)KCVtNN=$O-3}lB-Hw>0k>7B46n`A zB!0)-Tb%ONf|fYd_Fv{|6Yp#8ow+)=pDpiub9Ht6?{D&h$$BJwYrELrI2EQocvmpN zCrj6W_#c+;v$=-2huWeUzL;x7JUdQ1%2ynJPGiX7O-KC)P(NCdCXm|_2I4gBrjXy8 zke$HNHN%xL7i6wEuB^Fe=33y&n~QF)C9bl$U^%V-R?rnR#IS@v5$Dc;cZi8oCAEeg z;mV1J({$QEPjd-zs;##0Gw5`i2&W}(2mQ%Sg+xF zz+5NB$C*ow(~LWVjsqIfTDmU8m$7jK6Q;9tTG(0IV6^_zo9xEeoN(!6w9Kl3qVc#T zN0`Z+YM?YuLuPZTfwJbZnCpdmM_fZzLe*Ap_-rnR*HQm{kUZ2dV6LpWF}Q=~%HgO5w|B!jW3qxJ)P{A@Tt#!^ao5dNGB*Kt(_Ce96LGi9 zRWUaSmoOF|3{}ldCjQ2E{a4N86y#gG%BgN{D(=0x8s?_qKA5X%ZaVI7bG6KQa9_>U z#%aCJ0LKbg*KG-B;`~h3vxKv7LAa!Z4RG3mXG3&L*Vxj{!HvTuBW!AJF7XNGnp@s^ zxY3rk6;2zvdp;kDkSPd%vV;qW_s69qY-?^I@#>bjgJoWX8_&5sHDO0{i-}J%*U9oO z!A-_#=!#PDJv&Epo-_d4p|h13LZ!yy%wA*v<3LtJmZPo4fw@P- zbJ*UL(A;C(QQ{iDGxvnJdp}EDoJb;*Pl*q;go({P!wn~1k}!$6=fp=_x}@e_;KrCs zX6_}f4)HRC-?kiNm6)~r`le8+Ug1e~6Kx8eONeE8ckDk2LF;^0&n$eTt zrnu_FOIu#OpO#2pGL*4&dWP_)ZG`1)dfM{uo2wk2*X{5K+L>yyie-+D8)B|nctS@F zQXa6F4Va0x6GojFd_2~oGt@B0!)fQ4x7zqoYtxH`yM}8-y4sd5Hf~2G)_)VEwot~M zIDG6Rp`5l*qK;nW*k!JPrQ-pRvr1nwG{kA)MO>0^|o|+TPU@;zLt(h_Rc40OP-(2 zrD2@frv4fFndCXXx4Px}n^Rk_+Y$@|aH^yqaJn$*2!kwLdfXz$JHcQ}mjSof+%QX* z5w`@VVR#hg&$yF`k0e(8BP^l*_i{15>kK2!Wx*9^T*D}HS#j%$cfsk1$f%Qzj}7K@ zM3mD@duxen7;7$v&cDkzRrWxRGpSdvXW%r9H{@<6P34 zbdzveCfmgFtVBi7YIq?)Zycyxr>&tF7A=J%a*Pl?k@2)gpH7eZ416(t}*T@d&D}v|IIQt!M!wh%Uo03D|5HaHN)k%>D@8c z9G4ikf$6F6-s?YJ*m06rLX}<{TuaKIB&9Go&^y-W70mrk#eZZA&5UpURA18xUy8}av+ zt|M*>ZaeN1PTNN(+%|Jxaf~{h`B;qO5bk!qS>`Utc}V@ZjKoH!%w2H{%|*s3b2mQ5 z;&u^tS-S4H@#caoT@RdYwdqG_G;=+19Z9zj7v1Yv|Gkjyk^7OsNG)A&Tn(Itn3lN@ zt}yN(E|#V1iyO|qeH0hR(*2AZVNOp;7JC6NVxunpDpxnQ_B# zlg-t)%)@ch%{9WQ&?9gjoQ7sN6>ubOrlo6v(}Ik`%`(?Me0pwYG;+4dPT|rSgPU)z zD~?fTEFTMS8oJ@MmyE+LwsgI5D$ID?a&!GG?*!ZmbN$Ut#H|cw{cGI~K&omcAy-+# zK{zeRWZXJ)LoD+Y+b zbr(x+CT_2}u{fRhX5sdkn{Mf5t~Ut(?{?yH@8mzrCI`{p|xn_GMZBu2;o^+ZRu9vme{qyT1&SQw-l$lBkQ8F z{+0O`K9*U+^_FlIZjHGOHo?`nb>=o%x;41<<~EyKiz{q}R%=;CoppTV#9b!7)!cfW ze{)&FFq0c_iE+P@a2rlbyb+hg+zv~(38y92t(BdYZZmG06=pY18}%041l)Dv`z-HP z+(evPa=*ziPaa<%h=I`9J%qNg~{HozMb0=|n{Ho!Wxl=ej0nyEe+c+)gXCWJ?;dJxiPjhE+dXlC=*O1!&oO666M}8yzz!ILvr8M^trzN?7yF_992p?Oz zi^Nr1kqDodyF^^CU<49AwY-;!>lF+Q&n?}ry8fGL313*kDE^|*6Hy6d+Gu%FAkeo28x#z^SnoS)86Qfn|PATvx?%YSByJeBfg#VMfC5%>7M#8BRkYoC^36rl(J%WUo^Tp%tVE{nPLmY2pCPIhx0a5`J7 zDO3(~-EfRL1^MWKb2E<~L9BntLVSEj2?rv3S;E4&0Nfy4ADoVkMR4;tat+4y!x4DT zY75NixuMd9kS;cP^-Fi4r3=NyH8;r874v8P$1^$95*8<6d~?IhmB5{d75*!EIF3=L zBp+wYjWkyZcMhjvw7Jr_^XA5yD}%cr$NZh~NG(ZOvg$uxJ%}Ay)IWCciG$| za}{vEnwxA+_y4b$n_^D)|F4>xiqrYWsf@g4a)u?Wg1c^RCXP|3Djzq@%{EsJcM~_1 zlFc<&9rv51n{Q6f7+zYsg*a^=JY#S>uS_mSYUyf`@Qt|@=JepA}N0bHA9Y zi+gWwmAQJjkLFgJtB?ESb=3bFB;!s4K0aH*bvSKE4RK%0ZM4jda9_=BGS^rWU?Ws5 zY&O>f7unnvb4_v4%x#s^`fr8|HW`N0w3_n~!`yarEpRc-?X(HD#KkhV%Umm5Wp=S) z6lS-%pKw*p?Xl^##<@4MB*RI#&l0vlZZ)^xTw7e2xdWD&rcur`oQ6X<)mD3)2RDN0 z9W~bhH^b7Mu)G~{6=Qm{x}8%<(mS1y)sZ6^Ic=^puAaFw=DOe-nmcQ*D{dq+8AaZ6 zI7Xdre2g}C0jC0X$92bzCf#LkI_kd%vWLklmboXcIBqNnui*%sUbqtGu3Ng^xT@xE zTDm^C929UInSQf$eQ`O>-NvafKjR9y$vmEfznkob3?<U#ta|3aw%{?|Z2$vQ&jp@0cm>i7!z>GCKH8%wJ5$7S{Gjl_6PjNGF z&&>_P&BD#Zy}&W*4CiCExmP&t?;~(?%)Q5PE^#{}k&8`!wh4~Htupt;CO8`R2W}QK z`G!*!j=>GY&Bpn2@k-!~#f>)?$=o>H1akrA#^WZ&Wc@3%9u{eWw1V@VqvznFSi*_8 zeq5l=#YHtY3D@6Tkh#gY40a(K&D<1RTHJi{>gt-nnTiXxbirUj8gWG*(L3OxgNoNzhm;+dO?drd8A&?`Hd@hse1b9!Y*&OICXt4Y1HBRL1B zJz*6ix)CKe7pH^HYDRP;icx1CA3Er0NM`Bg<8l*UPrC2TEx=_Uz5$oq+(KN&Xsmz9 z6ebrTwIrKxDREl5#kg6_WHT;}rCWm2S#Aq1t+}PRQ)JkNOJ{Bw?kH|M?gw+raqY>w z1D8G;>z~kBfz(xtq)IBc5|Qo37rqVk#Cg48?wCvf@AZN){_&dX2$$EXv=hu(xeMY=+kZW~T- zy~^p%CsAiRPH(-+=|waGX9rI2{+?!}q}IRWPNZJ5*4?R6mT(tNrPgo#(&l#KQj_jH zu8g@oxU}ZVn%j$ui@QL&a_08oR9hEu<<0Ha^`F}DTtZebd4Pm-aF=mcaRuw|}k36JAO zu`S#rT`hAba0^I(2UpwNNu0KR-C(L??i5a2zwR%o6%>JU8n+Mk2P5@xn!j@fISZ+q zNopD;cNTY$@EIcw%$>u%1`Q3(ooD=wxklzLFrEu^pQka7Njn!A*GykRGjo@8{ipZ2 zbg!nRWxh;8Jyg_fnO5e0#jVAC!2N_{)VackZrkWKN*hae6{p)aa&66B!^P%~itenm zGj|=Qn)#~hul6QyAlq|V^dszG?k4fvTwZDDXzn*$A)G&9Cmexui;r6zzM~R$!D)$a z6Ib_$L4@5c?;YX`_%1qO4>{)V+-2koIf4m$TEgGu$Q+xnm$`eyb<n3Cz z!anByB(9s9aS8jHyHETD$A$QWKbw0%++E6k)Auv^5c!^8KM4u@n|nlDyG|m)0p=bP z*Y25^(03AhLR<%_q=W-4-BaSqo1Acvxo4IxrPlvoliHQEPSOw#G55k;I>MpmUYbi! zILzEDa~TMSo70A>>184uVNM&WTxPqxX7*Fv5*83Q?hgmrNjZGyTR-V;|3cL~SQ*olSfimQ*ihGPSFV&gjE8sL627YElC z*AREt^2WveglmMmuU&`GiHB^6Y|O|*9HUNrK0(xKAdK< z2$$WQT2pEsayj(;UnMMHnU^4cw1fq5XJIKWr@2CmpMYh!T;>Wh-igBKx<0qLA~-#; zSc%JHt|%@!?iXBMb0K>FH-sHpm)!YGhLW%$r^=1E{N{?`bQar$D`2iTPHly@;R@nZ z3ng#^%@wtDC2>Q{g_tXa8!G1}bEwJENHw?8P|Tbfnrg~<;Cy}mH%i&nVF0;hT;)_)^y01Q!L%qV6>@pB7WAKZox2Jr!(%HIUPBbt_$wGxq;@o;x3vSOg zgDqiqoMx;mn<3_U5Z8?5hT=5ip2Rg{x#5>gkzohFw$x$Zz z64xb{E}ur5` z$$^Zhgp!lZ4I-|Zk(**}FmcU9muOSX4I!=v%DP0GW^O3)QY=Ui;dGn|GmLl{oG!;^ zgr{>m!!4mMy=Gd%5yZ6x>xxBhtPwaP`6$V0PZuonEZr#L>o`U0;$%Vi1f9{u^$1rN zCkxGuAzq&u>*8dQxv|6>#$f$RE=Fo297nv7C0vf<)ZmQAH8Zywr=#ZtTyt|9aay{G zxH%LiIpJoUHo{57b$U-hxW(LL;{9hB0D03B?ld=pxMrM%aF;pvOh$BW&PKS~`dg3}C=%0iRlD)-P}gv-s`^>L~fYeL|i45 zyJ>DSaqY9M2!AuT#hlIox6ExNt^=2j_qWZ3nbYz9j=62-bhy9kyZ+nG$W;y?9SMIY zp*FZ3#B~7aMEHlfoy1F1QM_h%`IpC$a{lrxmodaH*J3w58k$Y?IAaNB&=Y@CX4iQ&jbYA#i?l5r`rnlDr zN0Ud0t1vn-d^UHKxC*1={a16xh^sI<-m6~?)z)$1DvX@Jxf8@ym;r! zI9-2wZyc&L1CdcI;c4P3jLrc;=FSk;jCBr(Ztg5`-3=Q;7{lB-;@W105~|gVj)dol z>-taUfY_Gqg3kX+I2;+*5?&;(EmP-!c;+q<*M=#lCO4YkW#XkcALzW0z}&CIH*nO` zc_E>>E5tQpoddqZX@Rd2*Typ!t2yoS`_aS~w?bJvLv#7!nlYVL+P9ZuEOM}@gb zya%gCN6zof{YJc}x#Z?<;dEuBqiG5`=I`8QL>G1i^x*nL* zexK3YL*iO>+D-LNmkRyJoc5M1<{q2VMw`{#6LV}&9RE!|MQX;{c(UU(<7dQm)YHcE zBaXm%&WF;m@i@6H-3#Jc5N$hoZF(<>mtp(Rc9PHBE8?1-wu$`S=~4f$8PPh{`Y&V& z-w^Lc^=rKrHusizXPnky5p#bLU&|`dswryj9dQ*#t0BbPd*Yh0YBv-|;CztN`d9Uq zF!?ueEuE@Yug|F#KAKbYmNoauoT|6HxzFZQy%o)UA+8y#b}QouoUeRn`%vw=^)8>* z-8V+Gfk;+2=TIxktSYZznf-9etg5VS>HKlZD_6%{B%EqcwN}?$faO(f)C+fR@2j-R zELqi7lO~ zt+%-(mQJpZxunFkbgId|=JW=&oNDN2bKi%%>W-GEpULEwP^Is0E`>Q2bbz^(=2R$O z4fghMQOD5xw5QRWpj4isF@gd;Ra*wV$gkcd)th8X_zBdDWE*G;?La+9c7Tr13DkR} zdW-Dp>CrAIxw|jXpF#aS_J;xBhJi2$2Ez~-3hMuHIE(=G`>1{%M}xX{R9BAbx=~#< zs%yrHFbUKp;}lRYjMG3pFM41G%#6zsau$)x?!9T3t%BE0)G}>?|Qe0%5p+$ zs0!7fEp&h`&`2TIhh3o?bcdeM8~Q+B_!;^^e;5>pJw%;{Jc7sY1k^=iHc+>WIY3=8 zs_VrJpa+e5u&C#VdTyv^eR?2ykyUjG)XSoJRlEw<;Rc)m^{RLt^s=g6PSv}pdiS)9 zn~$<60ny1l&?UZL96p^Q3^xdFeyEw~N2BXib+{7?|o zDPbt6TUd2GSPInjYgs4<>N~IkRD{Y<6>30DxW$hkb^CV*?n0eF)_+|h^`Jg9fQHZr znm|)%0j;1lw1M`}0Xjk_=mK4#JM@5_&4(`_cm3|T$<+XlsT=OvmS3P3?91cjj}ghB}@ z1*M@3l!bCo9x6aZs05Xv3RHz^P#tPOS4!0lx3B8~%^k-}GHk#L2e;^EoAutq% z!3Y=$qhKtIgU(P03WM6WtC{*r_yyL0TJ);{zXxW(Oi)ApIglwH%MMu}D@;~@2UGas zISuQxBw!DQHjGcA0&|fdH{^l5kPiw#At($*AOu38IFx{rPzux`Ul~v*eC6RX)BhE& zz*V>oTe+6muHPG}nQ2-`2R}f1c)@n8ZiZfix)xGbLVv+K_yFoMNIe9_BW-+00O}`0 z{bIBPb<8&uhJiZdI|wIXJ*X3w9PlH!XHvRZpx*fAz+9LI^I-uj1a-it4)>OTI@wze zD_|w4gS}O-8rFb1*INhcVFPRgb*`tr^tQlO2!m~~Js#_S2N89ur%v?tz+Tt~>OfB& z=Bb0cLvR?5z)?5`$KeE=gi~-D)NkH7I1d* z?nq<_gvbyDqJes@3x*gF3ns$P93Dpzs%N@*kPyCu!7v1>LN!q5bG^Bqzrif7z%f`4 z8(<@Bg3Yi6w(7JQMr0dohaIpJcEN7g1AAc~?1uwz5Dvj%I0BO?*i`VqT$l$7L9Jhx zf*P%^05wYe1y+F?o~og#w_&Lol5T*FpvIz`VGF47XBcdQ?V$FYL!lw4`E+xb$lg8) zCc{){NP!xII;m?4%|IQ|or4Q-5iY@H_!X|W`M3(|aZVk~sY5w+Aa@($v$rRJgm8xO zp`Z@p)FGVue^Y;N>fcTMxvBrQ6EGOmZ(CCM9@Jf%x@S{&Yz?6Vl!Q`H4&3GWs0g_s zAE=wPVD|nP5EJwkOB{#`8Tn3ktS7)A&~13V38Ob(^j1p@uES#y76ZLV#*1T)-u2SE zUF9JGB!urE9?;kzykjw17&twl7xaeyp!fXsUVjT{39Uda8`Mri?J^E>A~^)dK#fN9 z)I(1+Vi1oBrCB{?pa>L&5D0~7r1wB;XcNGJHY%mg#21G+ZXE_a!&5(BO-axUT7fzg z3BU(J8q%hN-Nf~5@2aYr@m!D_@<3i#gjW;&Y=r9P>qp25$;qQWJ=BHAK{p>mVFZi< z^-QClXw-Sk0H_Uhp*oa-a!?-fKwiiP`Jn(5ghEglia=2aflw$0#i0b0gl8`gN-t2)bdQU$FX_ zt)I|WKsTBfgKi?|=F&D;2dhB0T;{_Rs0;O=J~V)ay0O%VNMmRMO`#byhnCO^euCD} z2HHX$s0nc(F2sZQFqNgA2Gc>$@aKabpDzZzHB$}rR*c?)(HkzcppH(oSs*o}fgsRp zc6v4L8$1WSpBEEiL2QTvaUmWA!*A5!ZMX~SmSZ<8fg}{FF<}#E3eBK76oH};0`5>g zio;emiZD=DI!i!(`OJqL9M6A*?9i6+cA!^e4#N>R33`9$4CtL5y`r-R_JQ6BIsn}$ z$Wp@PFaz#$wtoPR;)Ja_z0ii zGkk%s@D0@Q|1u6%RoH&2gL*t#h@T1S=}0{rsnep=@mc@VSh5tHG?PLy7|6AW-dy*i zqeAcT075RChyl_fvN}b$2rn z=;mco{VdkqN!?J?4Mg2AOar)TVOE-PePugkPPm!P^YK~-NL!Vf$1`&J;#T78&Ky0>P%oasGas<_FwhAa{>x@ z_IKc#yeN5}Q>*GN=Mg#yVKVrP`vUi2E60>ySpn*YW|zic0;vCjG^~ln#G61K{HKxk}KSEB34+)_d^-)}HP)iVTQNkHaK&|VKu(axpHwrEV z?1#N@jU~Mf>f9hdoMan51?qW8JuL;1N1f^{qQk&{hKwStt05$y|M>rAG8ejk2 zp{4pDYynA`K@P$nAtyNSl$kt-7cc?>C|qRFEgdz2*F7iQTU-JYVH|Xa9-xOHU7ODd49g%Hg=tM#2FmJGQJzQzP`|-B*`SZIE|0?@(2cAa+9ufb z{a^(f)kfG1f3lG#Vs}pr`fn^jN)M4iH@|eVOE*q+U$YeGcCcKUXS z%cW$-sUZ!lq=f3s;xMS4@gJaj!bnvH-~6znHx4Q-%2 zPHhs^22pJe)x=Ou3NM423|`SQX0-`a6F@cjy8&vxr{-O1x}~OCRiPjhf)J>HFA6_G zPRIp|cpR`8mcUY22Fqautb|`+6|9AIupTymdm|s4U^8ritq=y=U_0!9ov;gb!yecR z`(QsDfP-)d4#N>R3di6$oPd*X3e*@Xh{CF^(>yq>{r?Q>y2zrq!` z3fJH|+<=?#8{C51a0fE5DuY4qCF)I1wZeG=YI*Y)yoV3)0#3piwLw;+HMPRI3Tkhr z_GM~Mrq(rT3Q!C3KpVzW!FS-#7JifsHWlml01RV8jm$3Vf;#w_gnCCw|AnO$w1zco zCqaa2W)KTLuuK2#=Hny0f;aFITufZ|q(`tJj)YOr3;IA`=m-5_0JuR-h14`?4XlOE zxKhl#G+c!9aEO_|BGh|MZxoVF?Hb&-__z(3Aq!-K?C>2VhNSR>%*mN(8^Qo~!$61( zE{FnA;YXfB=7e0JxAyZuUeN7jJ>y=XLb2y$f^$sgJlxd&KbF$0W}|4q29bv_A7p^2 zpvU|%K`*mDrP|fnPA&7)V(%E$+#1?|-rQ>k`rkwyK>vG4Z`yT+uFws-Lk~y^sUSWi zh+Lh0oGRB1?&K_KYN$rZ(B9X&Y7y3kI-qVG3PDi_flw#`>W!fklm_*#P{kA4FX#vU zzipd-K}ia?z_fy&K)qM2W=d@#A9a%-%2FSf8NUFN*gq!23#uXui(TH6XlPIpcP*lN zQLYZ?Z49+9Y|qlFD|mJD-VFw^G<{(J^n%`?cN_FBLm0DF%Ph6nngwd%-yRxsVCz8G z5jsI7rW+YP<705(OAK@u=yuK{)b-ys*bV#OEHk|bHz5x*$p?j?D1<;s&_7SnKS8Mm z)u9X^Sj zTywLA#v>sE7d;$)Np<{i~{#)KI%dPs0p>hy}4B4wRx$C1E-f4q}~VB%TsdL2}rD z&q;WT+Pg-Ls{iW!xI>H&hxX6`IzlJt9EJBcyAbIL-8`YKxx3VdXkYjl`ayrtPu_tr z2nNFtXbN@UAZy_OT%oqF!%g@NG~WxX=1s)6z*Y!@?XUxO!Yqb9s&aZP79! zB`N$O!rIUjGDBAQoduc+6W~wM3?fVq86gJG4Ns z7>dDqYHkB8ghen9wzG*WQ?ms%CrOC-9+HE)omDq~exR;p^|F>;&eF?RQ{g=ue@RW8 zP`$@KVViyivx!fJT^xz_!D=`HhhQtLhXb$~)Jbd;aPMJcBdmpOumh5_Hx1@cKL`RS zoSqiyDWaZ}>KSNrhy~w6#KOIzaBpBewX_)`ey7)AB92?!?Om!G?3(x4knh6pa1U<6 zZ!m`?)tdlUiC+M9Yjy%O{)!rU4G%yad8*^iJ8&0%ha+r5N8t&3vU(qV2I_HCJ&Zoa zC)U3$`O1iT2>k>8ga@ErKh?{p)~7o5+zslaa|>((b-JlOHWz~W&>RoyBQqTvWoqci zcso#cnDwAA6of*M1^lR;;nc_oPsu((2|Z2v1jTbtWqcY;hnX-7X2Tqq3-e$;EQH0d z1eU>aP@jw|L0vAchBdGj*1-nY1e;+CY=tn`3435K?9;{Dej=w}Hmh(HB!;Ar48Dit zkP^~BB1i}h1b}w`BaANPu(b*{z$Q>14qHI&H6yOwf{d%hYd**UKdJ$7P9ljR2_%E> zK@*KlIF*S^fQfLB&EYT{frt}r$9L+}rJ2%D!}$q|KzhgkX&^1cg?JE+J+>8VO~==i zy3eDf$iwP8&bD)acuc-j+q`F>9_pIl>p@j;_|6|9!6&|Z4}XI4U8G=_U<`3m2_kMI298S!c00rlOcg?<`9m+pGwKyMSQrQ~y&NW^O1gIf)2U;%hw z26TklaEO^52H&o)#wIcGvA_X;&)wmiZGwn?;48f-zmISBLrHkd_)|y=+Ba^nX3oJ2 zzIz34EZt_pEwB|f!BY61X=)lJH=&%lwu-zxoXP?zjI8z2emjPe&Yz0l`uOb;J6uui3WoUda}>70=@gv2K2s*-fz+S zELETy)P!2W))SH)j@6rnT$dZ2o zZE`1Z;w}6I??L_z3;GuB!Jj&@KZhrv&Wm+k)fWoSuxXrxQ&5Set_*)sBdXfhgz6Y8 zA1)Q7fpnn$uGGJkHp@q(IYrttpgeaOp90fhI?M+5KSdqRGM%Wef^s`WiS%XNrXx%Vi6Ai~g=CC*eSwX!qsrRKkpdOcc z!gr*N1OYIQZDKyC^CWea6bIr$Jctho;5Z9;A{OiaB#~2a8r130O?V2=;RUE`ANAz( z8q|BwTlfpqL(hBo0Dpse;`s!hK^^O;Bb{%c&U5_0A0j~j1cExyajB6+6o?8zpdNIh zLomdEm=Fu%fI7aZ0_yB$GZWqd>dz(&rh*45@Y|*`R0DN6Qv=k^Onp$-G9yT%?qt+` zOm}ei;G-ur0(A?cZeU75IZ*d6>h9%7P!}(`pb$>IxZH;a@DTFj3V?cYSxw;*5ULlJ zXoTuyik5VolJ!3 zpbe@YyI_Av4{6~$hyl?dGU#CQ03LyMzhmS%4u5mHd8Hc^FNs`%TcB=0wm}Gq|6qU3 zO_%{PLTd13o=F<@+%X#_!z9pNaSDz?d&WCJTgVN$AUk9Pb+S<)kgE?Uq#G24p$HTO zm9QkG(<$IN`|wjxrxy)C`}8lM&Mp2Td;{vMLVZ)HFN(U*0QAOwPEfZK%9EN<-AKd* zO?MV z#G_6S;()4N1)IzM-G&XYE$C(F4xl%=W3UQ4a42sEO`wvF|3!%CReyD8pq^S6FoQ2l zz9!Uy+E53oK|ydA;zLdPi$GB* z4!+avKf^^-;bK?7UIU5(h)X1xNaow~0k{<(CjZr^umYF-|8a@5-ezkr&Rs~NePjW2_hFbie_ zO~jq1ZZfD9RU^W2$jK1#M_GNw8$dr$6L4)OK39$L{NyVDxgihag^2mJ+h!(R7D&u@ zH&|`wARR=(rByRz^JPtV1{0bGYPzhr+SIlqRGMRO9MUj8n!+q3 z?pu%r#AoYX^bsQO$n+NSLVhR!4>)i>g2(WMH2OCc>tH?j4x&0-s8)2LT_D0XtyW2D zh4d%9;@GAce)Vn3jdyz++a@JpLWme@f~Rq3Kn*z0fm(rH05$x)1ef8zNfYsuQR#ol z!}|ZfnQ&GnmL0U@O$eKUTA7rEh~NG1j@Dl1CSh&R;rpM7{yDBRzKJ$wM!p&PoNCX9 zZ?&ie>OPJJYIV9E^xH)(OB+B#aI5ubV`vI$HL6ykEub~bA%ph+{!o*6L(s!FUtFOY zZN6kCuiy|IhAVItuEADN{()?WnISuqxN+9h!liEPy~uXDA3r_+qSYCVMPc6 zwV@QgtzQQb9Y6NMK2Qgc2S6LHFOA~o*oaR;XTHkLE@7ZRO zLBs|1{y$xQnC5iZ@ z3ecUIsQ~M2h7rGy823%+--Qv=`U?HOIOgyDF{By#68OT13ICh8FW*0FNaGQmFP*|{ z`X%NQzJ&h_SDa?EW@w)-ny2xcpp+`KGm-srD4V)|@#<~PLZDZCisS22g?d*g1*mz6 z9%_~XJ>V<>dXq+P)GQrnQ()aYJ_~1nqoB9r z%#*}VzyUZ2>Spv88&~I@>ecfo9D*Zo7_|GGCcFx|C#@HwuG{!ELfuBV47#PD{xC1W z1-Fez>Pux7zW8s%^`?ei*^uYW2}e#{PHIU`0XHkWm)I`|^@iyz(&z!BUiEkfZ{aWS zJ&c^m_qy?+)#dg*mHf%H1^ z;7k7l@${fau2~=(WQCldch+))evqipg+WX1P@qDD!CLO?G^(0A&mGLLS4unkz zixD;=)I{n-J!pVyKv-ViDGm)8Zw$)cim-*ghi1?enp@bCP^(z!R3jY;H6OP!6=Njg ze!hi-I=IMvW6-$oxS&wu?fE`pntzvH=}(dNBSTK;dYP%;4fWFX2T~T!< zqK&HyVQ=UKO4I|oLpO{2#(!qKKlFn^Fbp)4QG_F5G>n0Y2DImM5G&KpMvsWrFv zX`oIL2N7}k;xM6RaumETE8$d_CZIh;6VXh36N@+#O$?&2-+63 z-f|Gn1{pzHZ3e>h;5)$lKs+6!h0LVa`c;i-^{ATD;8THCr&djMycRG8t_Sn?zG3+t zBMCuAELE2tR40Q(;H!#ItiSewE1u}y_h0IPk zgY@p{eB@+A8w9^paYbKzQp@LZ_szO`Q=j!ba`Ksutos;e)g!A4jQ>mUaC`Vr29xiAxE zX#e*R$;Fr3S%T@rr@=rN0Ge1;=ucd$Y7h*8QKTJAsP88cpGtf(OoDMR21dhUz8^t2 z42Hu{i;p5431c$oSI9(_cnZvcVthXYH;cFmGnjPx(Nc(THsgxthqc7l zz-m|pi{KYn3iDwJ$Sr_{;Euw_ViU^V;2}y~GBXz0#(0 z@Dn%+j)N0Gk^cf!B7X*_z>k#TY3Lbn9!!`1S6~;hT#$on{}VICV;8j&bsbyWyH!*8Hs1mph?f}K1Qn(B3pQ7}NNRASG2>t=8XPE=24%q{t znoKC*mcWNyesp6>C8l>t%B`wXRj98AiArAI(~W0 zdJ-TH5}ZP$-dtTD-bsOd0?_q0O;QJd0+^ozxq+_4^ux%BUnHo4f%=WB1xuIm|DD zcy*_;7)pUSkUSDE0(CJpxRUTyQi?<+RRS6d)bNs*RB7B)Qe~hjB_%{*Xa)2VW|g$6 zrIJ_wYFw%_MJ^qnMx)5o?L6Ts*k1?LKrK)c)CP4xT~Lw0PeJzsZ9MFS>bCtC;B)XC zVQDJ99JA&dSurnB{V&F05ts>Pfa%~pFb#|Y+H2Qnrun|+{*ADUdUF5;+61@8;BAnR zh$PzuXjGIoY=-*)&sQB_L zvyh%#W&rQFb_M>Vn`igJ7_0jK7{M`MH24UN0wci)FdTdchJg>jP%s1x1}eEh;0lSD z0-X#dfeBzd(CSB3HxUq#{gr^JP`OE7bgb%M0ep&O0r&*W0&~D@Fc-`N^T9%(+0ioS zQlR4h40y%A1oH~83akV>!49w;Yy&@ltzZk-3^sv{%Ebnd0KNz7!FOOC_!fKv)`G9W zS6~hJ608QvHRK-b(vZ8MUbj`3O+H45ug1DhGSHLI_!In5u8u(~(TI*he*}lY0gwm| zfrCJ!*H6$R;5hghTmrv=bOd-7`YZSoxf?*sv0t#C24}$U;2by)E`W=we@&sa6;cof z_04-g3rsDqvV*(W?|^GS$UR>H|@jAHvi0=@B#!RNp|7c9MCDjF?lnc272? zE0Y@PCk##3(qUE@3M)vr?EK&*Ec()i6pjAr5TP7yOY!gy&?baZt*?iuWM<$t9n>J8 zR@ieu!{H_0%+i!?I5JYtVeke)wG*Z_<9k3~B#GCS+iOG=f<+%_$OIyYC>XjCA#KZP zlOl_FZbV9y%u0+tX`%#$$?o!19ih0-hAP~7(3wD=F_GrXfmxq3p=#p;@?p?-P4a-; zKwB@xp^-p!t1n382l|>sL7-<7fw=2kPhp@pKKjChKFXm-P1=grk&cdXbgZM}93Abb zM5UIy1HI(d-TjjK&{k|R<|dd=+DpL~bTcwJ&&yTGC)^c=?(e8nv_`CqSta6~G3i33 zE>@nR%2viBv{ibaAP|>4`bHCQPmc`@ri3dV{{;9Z*^Q|2wvA=sYkN%mFjOL@*A-kKoV8Ko`5lQ7qaZ z9Eo`pNIs_8=WIam&s0qr#` zRsAo<-^RK|`^M7ELphmu{ z(BHuYpe5K9=w)yTTm;vEmnhklD6M>NK+_R%8ju>K0zRNH3v2$T+~~bi0C0OkJCdy7LXa}lDi&_s%UlhCL55u+;k5o2M7n*f&9o_Prt)lv+UwW0J$p+xp|1s z=Q>Ep?k=QEv^4foAQ}_~#etsMs@PtD76D#0^~cY9AQHD?uFO3m>4RHiKyU$3xYxw2 zF~&#rHNsq1`#-fYC^dRZ-UZ1RXe=lJN&@L{B}lEd9QGGM8KA|6dP!N#>OrqS)&JF7 z%0rX)dG!{p4b)TAGt?{8?Z>J9+B;-Srfio7OtAQ($x`#|3X zUBDdVIzzP(=>+WvEYKdb19dqEap##`IHgk}_@H{+p zz+8#cE1`;5Iqwa6fgYe6=nA@no}e!f?;RjHxy#S{K<)!Te_fq^4}*%YACN$D!Tv5! z?oURPJTS=(0;&>08B(Rwz!29>tD+Av4+9^lUWbC=z;hJ!%;Jp%qrn(pdxC!C zx*6ycFd0k&mig_Ba@BerLb8+ZLPtg2tHs+Z?!k<8AfjMA5 z(3~(c*oS!uSOh)=^FamN6S&FPCI0LF<*FDc{m~~$`JM<0c>)yz6P|%a0Pl5Xs#f)>p*TNvCHi*%*UXALT>== z%*y;X&=s(|(EC72?jAH=4(Wg%cLxH^A^yRxTxhNkAUEs}f#wZ9?5RO2AT5{%iXlkcdd79*8hH9eYg)6_33kN@I1|5iJkEuu%VHnI% zpv&fpP!VLaJtR%jWY;t;2UPP%y=u?(gp3j)nF3HR4le_GI`~sOOuc5&yLe4jDUyIF z%-*yv60;_+@>C4-5vX#d$*dxkoHuXO`+7wd4UGi>l!zv;WiV?3%YYS78na%}=nZ2T z+~P}N(7iFWfr^+bfbu|(pvwUj-OEtj4OGj01@o(*GN=MnuY&402k`9b%2Iaf&I^zW zO-HeV%wPoec_33d>fgfQd|Da~R3EF>2OlTFTmYR9(t}UHXrQ@)-n9=0`fQ6n=c3QL z+(G_bsJ=^m8*>NfHE4TiJD|@!w*hx?i-l_Qq7}4>9v@uAQBOe|g6}amfa+s-)xk3C z)u4Kmq)(n|u22E`GSKHvdr~5$pwe>sP-F=Z3Z&4oLG`G~(+{F;liAx~t{Kmt)}R$= z30i>Wpc!Zi^zO7VcpK;)>RX^8XaMR1y;H3V>VVon-(AQ`#2G;bpwjb7O&X9-1K2As zUG=_)Y`ltYF~y-`Q<14?R3a*gufQ6htMt;@DvgCexl)dmgLYs5&=alx;62a}ybIm| zeL)}48}tG_fu3`82i^2zu3a&70i8i7&=KeZS?z%uic+nE39T20WB(ASI)(rxqA)Fd z5N0Jtc9p285C*pGFiZwxfEwOtFbXJAspSDsZM}@d?IX|} zHyuJKkcrqQfN@|f_!uZ0`IldvJ;*GKcd7h&GNY7QZ}Rz$8>q+hJSc*>U=ElKlz^$w zey;p1%+o>gjL5H-k!j-N$IFPp{t1`~;?+2sgBe(q%H)ahQtr|D@Ri6+l!mtMWY-LP zDO3?GhAsl1g5*<|6!AWoe z90$k1QScKu0)7OC!69%E8~}-6KiCKMf<0h2*a>!k?IwC3UoPE*aU<9O62Lj~qx37? zqQZ}^+2hGAxp^D@JQR5hPdh#Oi@^T`*TEm)2G9Vk zcC8JWThNG500ny=_rJkE-~o6D;vexxTZsDRl^?u_S;yEG z<~#7>um@pI3(^7aJS_P!wx*?N;BCQQDrjmj6gT;io)Z;bA}s03SK(=wv64F6G7Onu z1_Ny?BtLRogRnYa2t0lKSRX-_o8(3H@h)%TT^)Nh;7z*Uz#IqvHE1Ou#r*ATRFv!dN@x>wrqsh`u`3CLW9C zw%R$+XPuj4uM28}T0pb)2;6f3Q5Bt5{y8zL0HdQZ6NV}1%(J>hCRe-xNLZlzPd5YQDg!Y-xp8#n_LcuU-x0liyaL8L99CEzuO zj-muwyHqPZg{k(Vh_1PDs8kCh-v>8s3iO7?_u!9q0<@Oxj#(3~ZcxovyhXT9iM$V- zdv0Bj=?Z!QDWsmz0?^LTzTh3u52$MF(H`?v5~4354FUtf`}#1Ha;c(FiU$DYRPgk* z++>!V$5Rf50OfilP{7woq_?s20lcB$BT8Tx^h2oJL?4^6H`kMuk1&h?YE&w^hCqoK z1-cNZ8lCn=T7Z$bX(>4qIth#i6TlePJP!IX7z?~cmb@W~=QTvlnZ~I86^J%uCqid{ zDPS^ajGOK^8_ZL|G%y`VUEjmsJj~MTv%m=KO0@LF9O!Hy>gkKQn58e0H%`r)<26r} z#|A*NFwNYQyO~gZzEr;*r8Q9y(2q*#$EEZmQ>j5JkP@T-J`f1>!&Hy(e-9*pyWkGE z4Q_#(;4knexS{&Lj^Ph*4O|6Rz-4d=oCoK?Z{Q3#4SoTuz$tJNoB+qcF>n<81df0o z!C`O+90dEoUa$x30NcSfEx5K~*a9|#O<*I~09Jxgl)~rGE~kmkoB>SgR_)xXDhRxY)6QNU;M zsKAsHFF@t)SD=NJWZYam4$}*JEaZ_lpojye86l+GVGs*id?(hZ*Z zMl!RMhvzP3;+dsfJhPOI%w9sIfRfuCIqF|^A}!^4R7%sM#gf~Tr(Et{eJ0lp!T3>W zDfbx&LmRBOG3%H1v;@6O*ABs~ttb8Bp0sYL>OVUc?L+CO_w=>soIpRnSBil~UmMmh z=xBzdpXt%B=)3^(0?Fy(RbhI?^U3V`O0mw|pMzG0z5?=NE(i*MhR7F!76$S9w6Q*A zte@!7Px2_xNTA0X#h~?}y6aR_ZVbyxhnJy0#ri&6}amrIfd=T(}OnWnd3FjQ?aPnL{&5@N)=&x+;p2*_NLg|LsR3n1-HFm z7iQgq6mJM<2XxPVFjTjV6^4rc9nc-L0?k21{I!6#RQ=17?#8!)K7_U)lGd0>hy6RC z^3V-*0v$m~JbPD}+hgwlyo7efEPq{~DUg#{3GRx$FVKDY9#AD(ckH+6$%0a;9P|Xr z(Kr~oA?^uzD_&hQkenh{?i&$UAMAP|)En9h$W3#ArY>LRLAbvQuWT8euDF1@JjMtp)ZVTNb;f=oJaD6fJu%ZY^8uOn(y+wPT3vj=Iy&d!$=ymW1 zI1D=ACWVs-z5>~>FN3ZG9r3%u!tfcG0L+BHg0h&oe+8wCe6)zby+x--8{t8hE|(y? z7%T#xf`#UXD?u*=PB&Mt@MFK9WIJt4f^Vv zDvcw!SDqby`yoyqhs?OCWdVui+qGhi- zwk|+xU9F>99nof>)G`8f?BN977@B;2u5fMw?bT=#NP9KXy$VMSS8cC7R3BxfVaMCQ zUa1z`4o7{ZRli{s1N56#`eJKS+%=O_3onjczXG8dq(0xI?}O>Pf?Ad88-x0~tG;Tk zubZovX?a@^a{-{Qoa<}n&w+d(FSu?W>mj6%jOpWqxqzmln(pSrtWU+}0O24Ego5lK z8@Nw`vO@LQbWLwpVAp5V^-~qWK=bH~&D~05F zQo=m5Ci?O#fstV66DoyHzE1KMYQ(cTxgHnAb_as5J1Lg2Zch9aRkZ0~mBppCg zTD{z4Rv2BOp3Kw2^2I+9LGrbB@>HwEdjUO*CeN8Cqv}u(^6XF2c+Wv~<(bvpJhK<5 zb`+8)NICRmlAAp@QEy4CwxL9*?!5s`@zE~g?FG8$$!o=m$TKStE!?#KqIMw#qp?~KDW#^F$^^psT=k!Pnz9#1B}UVeB?>@V z5I4;7fg6?Lsg`<`+v2c+XA zna#pW~XHB~XdQ`6tGvAOA+$!06JE(Wb)9psSj=OCt;Tm$%x3xa?=xj{o&j$M9M^#Fu}Ki!cxRU#+ahFf?CH%MMlR)M#pHo zI}fru_UyY9UaMJT+Q3qg(WR8eL2$z0v^)0l>iWe>pG)ExIKgmYQny>OcJDu((grpo zw9=6=0gK^ef%E*ybq$8~pS&||U`!+|(xV4de4ue~^qjZOq#fVumdS8CD0R5Y)H*%b>&LSDhC3@u}do8h8c1@C~GQG z9FW4yyd4ylLx&tHydEJReL6R1^*_=EmW(7F2;?{W5$I4B0cv&d?TPu{+yD8k^+YL& zQnXY!cGgNRh{~5X(xeTHij1}6sSk%HIC$8l*7c4xEH=|EcS7v|Clj2?r!xF8t!XR# zG{=QzI@r{@6ZBf1n8@f7l)+fnG0oN5cTWD^J|h9d*_ktI?*t7Aj5cNN21S-}OFtW} zPlfVp-n)r2zs;N3XSXetWMMd}+#Xl^?_Aj>c(TVabMFRar|}^21|sPZX}I8K-Q!uJ z3VI?mXgI2cV(p91c(>c+TOP+;d+d22B6$%hdj04N11~O|=8167;KqD@(eBuhGdouH zIHugapd8^bTHC7BFRy>O%J31ZB7K3)qNAw&Ql{s#I{yuENfR)vzqvPQTTjAL;j7l)B>ZZHnz1#k@VNSjtCoUI?Nj|5G;i%4cluzAf!WUh{ ziH%>%`s`hDh=gnBjV(bI4~|;%xaqHT_%p}S;&9x&{RBtNX>Q30pRd{P9|R|wT*q;gGthLX zP3V6PG;^<6SyM%q33xEjB-XZyrJzGitz$*_tU)GM9TJj#kSSfqnh|k^&zmTk*>SCF zezCQEA2JyoSu(N&y*A!llVpi_)8YU%ou{sqJuudku1hGHhMI)BxOJ;*MWvvs&Ahr+ z4%fB1Z{|?ruScdA4>c8_5vzte73ue_KH97CqE&VrcHtv2RuVH^iF@hueU-Js-0OBF z*b2an$%|282iK?BWWt9UR)KuKF5I~2rD1dnr#=I&4|5u0?619-rh4aYTXCpsD&_t# z)2u$}@>0LFz7_7fKFn;xF>W=bsvchR-6C^J9$5L%O(doICmglz;(?P)v)wIkx`~U9 z35XqTA{$WN*+#7$(7=id^v(LntZ7JKIY&D=PS?HMwoA2Vd`A_b>f$0}17^9L^*ax@ zJ<~qwWxK+uSk?`rO~hLSwsVZ>^p-W)*J`Y}@|M-kH)y=6*9e+wf?40ln&I0$(M09( zXEWX2rXmhcG-KYTl1@!Di{7@11YMfwL>xEC9Dkd@223(7npiRB?Z#x)?Xy0Z;~QK1 zT;@LCn5k={np&L#efy@HjVGzrHO-LzdAdn#M$k8=n-=47^fkwE(oEB%g%y%owRd)= z8PFO=t>#v2#KKP;b)0*a?{sYDHNR6xQIRpFB1;FnFw4wsPB^i%OhOAfO~qM`{&guE)A%1;1N1M<#RJ@bqep1DHUF?t_GMeA_`6-|f}t z%wjbQvc!AgVQ|!gv!!a3vqsJjc1ll|v}ZVD7n$|=^?kO;)Y?n4xYnB%uzisU>SL|( zomylz_JMh6kvZOnig3G!@1I4cNnh;g7n`kpX{Xs1n=51R9Q+QR(fCE*!7=Y*(?Yb$ zV)Jk}fz(-Su62PnUTm6lfOcAJUf&JB&tg-qE1tV`#q;gO=A*7Sre0zaaEuFH;v~HE z)MAtKZplo-=~Wt=0>a@)Z*R=-`)99x*+#_?O>ywiQrE8+hA()DsnCrGQ!F(-`a>Hn zHMM#{+b=bPj}dXLtp0G5VSp8GVm`Don^j$CNZ)s}I{U7CZo2J5aNr8l=3Nw0!Ifs! zQFID9d3cmW#;i2gvihGL@VLGiJH<3?DrM#O=$RQ&pTwR1R0Jt!9A>ypaQF%-n4$TY0;IK38Kq;q|l*j z+zMjcV;|~Ev+5BnwAiX1B)a}rCSQL>nmUV}a?9=ewOQ?J*Lv6yM5)}KRX*$cTVH#% zXU4owEj>%}aY;TqAu(!9d3sw#y5w2w%pIQEuI(xwf`7%lUWgZ;$ zmkB4{2wZ)j#fT)%w{V_^^I6WHcl@~e)!WH>QfaRzJ=^z-e3m*lzI`W$512NpL^s!W z)FLaF89F9;3rWR*r4~J$29)njE34Tsz)BVJHvTnZ+n4qAiVJUcx}ZjB2EXDDHK&VM zDN}1TK-sMtNWFNiu<^Gh+XQPy{Ie7Fj3z+>p6%!98Bs$U^7KM|6V|hXdwQuVxTi;C z>=KJPWMvNW3LPaio^BuijQ9yE<~w_FJ9xs{En7O~iyoO&sZUpr&yHT4^lm%f+9>Ky z(3r2s+4>%!Sdv!b>jx=7)dt1I*pR&~qIP`v1(1HZB%2?Ss&<68>*_aPziw_usu5B_+-a{4oHk)_e^H(>K!>sU#8k?PAT*MD1{6p;Iq{fFd;6XxdaCir`j>goyK?(L@8_g1!C z(E&%cJEakpIdhkK&t*JJ7&J-6a(=rhH^S-{^wSPU)3@Gf5=Ib4kDcb|2rDKe%Pz;~ z-TUu%*!@lYwVu}rTWv>~K#0&N1-EUTXM5`IL-#o-UZoz)1(iGv z-U+tLma&a(8aR20b=kQM--M3qSK8(<87mQRV!x?An)vSRH?^iiQJaHD6J}VV**BW% ze<9K2nSnb~l3GkbeB~2O@KpHK6HT+J)PXxS@zqZ>*Cp2m`H!Lf63ywU)*Gp45^f_l zb3e9XeIpai#+h0Rodi8?LK-s+*T^=ODTFE`fu#J4Wd44wwxoBjC5G2Fj)z*$8t z`1*qrIYNKe#z8FOH!E^y(GhAIjJ1lH&r?`w%#v}8rOpDyn_Jlt|L4ME#^Wac!C|v{ z0_}_WNQ+sFJJlyLpQk@;Z05K9k=k2~}8sB#b6eYN|@U2?+KojPXElC zE?H?lr4-9fwpu*j{G>Bv4kJMtdOtp2seHj1Z=AK8fV~m0V82P2OlF?ZNXl?S6Ti9e z8+!B6-iev6zk**)vPb~U#y^ER`p;(bhWUPql{0zU$)%a;|E}#gYd@#`RQEKX8c%l9 z)DUX2JSS^GD6&xLs(&{hYO`{8t9rzf1z^{R)^yaB*{6o)QnPwAD(>e~PIn(0R`mX= zld0J-i*a}SE}t@qKlwv)={rH`esR=U#y57fNPlwU5?|m${Au4{D$^Msdr&Fo(n~h} zVoHnd{>5~eYrPQ|V`^<8KYQm|Wqh?yo3!)bH9l?1i3Xi9J?5eF8=rQx%EYnZ6)S%+ zd!=1rwx-N_#w=Mg&CaT+Pp7j zWvY!NGiyz3m!37t7tmg>{ATViV9Uok=QO!BYrB^{75eQmH%#=Q8oOShsyoH1xK+S`{T{V=l&_m zG}PYJGG}I6;h`kysr6!_kNUG~!o*56D!{sEYRn<{tQXDc3oLLyJn9egwY_NO9`zSv z0#jOnm_#J9jkx5Dphs2~C^Bwx_(i)kqfPl;R`%5FWD%CR7-Z#$f6At&y;T|=FoO^@ zZ(VXIvCiF3a$h0@mQvDM?K*aAQ><@~fDGq5W(fbPc5fe>+IA%eEW(c#V5^^>_Qnl= zr$_jqUbNa=>2it>@1CaA%VE>ukfBIZ@syQ=4YV_9**|e+2j)fvDCDV`TOSH>lM-XX=UNd}@4;1HS~4~4#QwCQ^WeJMA1N<8{+j&p+2zT>X$Qbj zF6qo6a5Ca&!kqS%>V5ZawByG_b@XR9SAX}X(P|=lO-k`O1XU-K^S|2sL0C#VGfw#y zhoiaR)ZoDtOEg{aDnZcBBV(ciD!P91zC8N9-s!jYgrnI@jHxh+?i|0}N)?fzk2~G^ z{J^_ce+tu7O*Kk~a(A{P-*i(Leq?I@ThmIbW3&ID#?Y#JzqZ|I-8s*mxfryk*H}2E zOrFpEIdrVUvjIF>q$}H^vUjr=U%}kO_DH|#(6V>2_gePq)@Wd=RxiKZz6l(+pgwo~ zT;o4_2LSHasZ_-w=_eN39EtIC#C)X_dR{XPe7ua<1W(cN)B(1CCS- zN$AnHM@v!=aJ}loW$))$!ik2aY3BNCwBu5yh0ltJKkTNz;-M1(p)I<7j)>E=1Kzyi zl*Z^e{Y#Yi;>YfA+?*YUqnZtwx$@lUc?nhFxbw00-Kib^jcM}E^~0eXTEmIf7EV;a zohDATt?Cf*Xnn(j$Lx5bBC}H*1+F^59jQ>EK=vNvzJL{Hu5b6}^py%QUqo41;<8BZhws2X&&Deu9$)PWql>UkN`u<~hwB)PyL~ORlFDnMdSbF|j|} z*0fO4XXaM1!s5xz-w33~Z}p-DzFbfsZ;UGt9TkxFnp1;6g!lOAR{1avg1knQ4UP)5 z<&iT7Qx7;(JBgFe<&?N{smaQ~C25j4PYbP!lg8LT9A#1aZ0-2U>Aty-C)Fv5dkKzR zbKU$gCFW^s-QIK}UyZLjiTm!svP>_>E^Kc{WRG?C;OLCxgIekG^_%^!MjN#QC&#G? zG~`BrnX}cOJ+gD#_uf(MKfI9d=AAxSr8i@pqll-39&7qVS$V2HJA?E8bSf??#m9Xn zbZKb_O}c;x+jQ?!tVgfzJ-&-;emU!~_FLglJEqnHjxgc^%!?JQ9C7Osoytw0e?z&- z2Z}4F?v(1OE#3~-od}1ViC8KfB&I@}2`lO9^p#<$MOmZtiS|f#3|DIEf^Dp;* zp-+>)*i*CD%q6)iao@@L$!``Hoe|hlYj;hJ_R6;5V2mk&MqKL7JS>0~R;B<}HtXLHoZ5;yS6SIy+kce?n@pf>)To!m*rmoPP0 zmMc1R_3iNDcA8Kl)W&8w>WSChe^__Yp%y^|>#C)Fa5BL;FnnO&ROPp8gHy8)`sgok zl$2vbZ?2z|E#n+G(Xl4e78Z1WZ1<;0af94+|G}TV`a?H}S6kHDvOK(`+NZ0&GXBk_ zIf7W#w*HL7Qi+^vc{-?f$M(JZbnn%6X3Cd8O!L*sj0#+HFLQLSKf)YbN7a=5&I(UK ze%ChqjsYb8xqqAv`hDQgz3*3fS<7-wR!C?GIHANc>f=Qjr>=Y?ttG_@ry3lMVsCwu zBWsuAaT@yZAxU4iL|D@K6i@MlS- z%7`&7GFo9_)O;Smj`jp&FLurK7`#HU?R8r%bK!-{58U^@*P_xtVP+sQ_q~$ zM=LIAYpzxIoKK&wKFD9r*UM)TzqLYD%jWX8R%N>w%+>W)nw-o5?eaVST&YtF*6&|H zysA3F_*bcz+3Q%@kMWsn>sV-=!J`yUy+!?33FCfFy{M#eQ*9|#}s46H?YEL*=^<7?W<4UcEvhTm^0_s8alh}^*XlKXlA9YB8@Gpe{UG$`w1M_6Ta$Xf{91PJ zySnqCGKn^)H~S-kpVWG0-!^|vTSXbgZ&GaJzzU6(H$~}mfo8}SQa${Fl_iy(7SoR) z%=3Hcf)~HD@}_t-D9{A%qJw#P$ogdPiag3}*yPXcoMim6-k&PsY>?B2+V@y_vGJ6R zMG?yvJE-Aj+$)M!*Y5{rcZB_U;M-JOm0Jxto$qw^9q#oW9O)8iQT%8?^*8$@&-tPaa>H@wS1p+~r5jPS=@Csu zu%7f=VW#U?_WiX<8XAUp5aQ{Z-Y(Rq%>m~E6>~+&g#O zK8o#GZi@<;p9Wins4@>l;qjdHbG`(u3}nauFk{&sO=h)Yww zrp>Ba#kLRp$jv%M{FL#}ZRg(RezJr49WDGZI-gE{#%hkBQOtaD>dTPD9Bt!|F&Q@b zvpnyH@_mTYAjfnnmVMHUIlmCI%kfm^W8E3@H05IkU$DY*lwt#dVeo0QPcwHT`*)gR z<_zKeNHDp)yCm$dd9zyGATC?+GfQ_SpP}Z~Mt{*Z@uC=-ne{+c#qS?y$w9 zBh7{_R!)2TadrOS;~dsx-)GhL?kt#I_kyyS8jG!KK2D{|FR@~Brkdc);@5sw;KIiT zHt!)UcT4I@_CPc5Z`9D-C05E5cd?Bt&w!CKG|+5XVr4HC%m>;v>5K}m@Ky7plj_?A zWZyE(1xML=qr;dqQ}#ByNYMm7twqw{y0S#MRF%g8#N zE1(S`O+T|mQ!+vADAoi!^Bb1M0>yQfw~(h|Deu+7|d?o}ctli5wiWmYw- zaJZw>;=;-PY09AzhA(b2p3Xh(Pnn`7wt?g)MNb3D_c}sa` zqS!9N(a|L)w(h@a*4%-(s;jYBm&>v1FCO*_; zPQnw)IrHZUwAWk}LzZ<6U)kV&H+ou# zC!fMAJ(KGfe|Q8%XxHN9PVWy-S2j+IG`oUJ2e^qzSt_7+UeoOte`u+(c>{GFesI}u zN7ws1Yn#=cY^i{9xdZJx@EMmqT;6xa^BIyjk83mW7iv?92&59tm0$dEkF$_uNLI;@ z)B89C+C#1+Q7@=mWdfdYL|l@SD*LcB)U3%WQNt|}2%nJGKkA&uXvvWkPJ9M%2+es4R z;AnV>sx+hd+SD0oQC_I?OPL2s**9*yn**-BR^XzqLXyOuQYPvfLO4rZ4vq7D%rOkgZiIa-mKl#m3+Nst9^MZ43Ep)MFl0*y~>EPbZ&biX&6Z}Tpb^XRw z-}CjniEH{NNj$O9(e`N*KYN^c%GC8gwl}oq%VO`4n0!mD%y0Ft;IyBSPz^yPYFzmI ztpY{M+wI7nuOHgr>~y{G&q>~PoAnYiLY z_g)>j2hWsBdkL3cb!Ipz>ZBP}>VEv&&XFsOfDx~njhn5IoGjU%a-um%i{01&b7QlW zBl~Rvv5W8axUcH&nApdDBM}p6UaDwCnYvr77k#U$nDJYz(Cpt;aaz#UA+J8FvvmBM zI;xJ2EMsoG&m8k4d&a(ZUo&^NkkKKpnW9^*>ZZWw{>(vkhA0Im)5T5A>Q>fVgS691 zO8``P1~ z^_qR>wU%Yz*b8-Yr4b9vM=7+x+{QM1*&SAmh|=^B%_^_7dAt74SA!jc_TdTm42-H(f#QqVHI(T+sJDCGp9eF@aCk&H%XlWLYaHF zx}DqJp^vYId$+s$EHY7@D7Ha+$Sjw$bipR)Q*N@lCD*8CpxM8Nih8vI&4+s#7IpECcul@O)ZLN(+`F34)9U`% zS$CPu&|XC3-oB1_b^@Qgas5#pGjg9*J!iJM&h%(W;lFcLJ$i7lU4Qm^TFa*!`>gD7 z;}FS5AxIUKX^FrDQ_2Wlp^5i5YhR&En{ z(8}ETRX&EG<@&c!Z4tcwX}1+ebEoF0!ntw6b`cz{8YAuww$^M|KE%fa&eq=n2jFNB z|Ea^F%7=Ho^?Onx&ci7L=jzPgFYSv+;DDOs{b%&WpS)HZ9GKzlK>PmL|H60tvwgQ| z+p}-WEDioT^bd;jscB*5{#OSUoL*7-o@iCY|NknP63@+v|N4ecp4(*KXj{E$w1~3@Cr&!0orh4>IqBK~8=5$E8o&IrQg1Iz)T=^X@=AKv zVJnKJqefA}-u^m)sOC0>%3Q3nu+_9v!GSw*L75Kz0~!u}cVBis(UFEQ~n69 z-piE#ygI32gOR|!s~TQ1psmg}_!m^QYu+(^=fpc5j<=%ws?p4&GjI}Uzav`RlUiah zHF@4-i?&>_KfLX~ZxE?SXdMB5z9AwdS)@mU(^KkS;!KXxvM*1)pUF|5FSSo>Ghjrg z=Q%ObJ}gOkvOv zj%N4I-+ZoR^@XogRYk-*#hRgo6H(S_zkE_=!1;+OAJ<-PIGOSE-q5mdeRy^2nIuj$ zoGfr!9~+s__k+ztk~o#&s2_KlHet`pM;|s!;=Bb%iF-ZE#a|Eqz9U7-_{R}-by*dz z$6w%@;>9FSL*Xdh?QixQ|6;3E8Im~D;Ar*RW!MjE-np_YbrNT#%UM_9hd)j&KD8i; zvki_^$=ai3zo@>x{M1@Wtkba6hCghwqs5TwL6<^Q++2<<8E_GfO5x=?{|x%@`7Fb2 zj=IdC5Pz+znc6yi_SB;ZKex}nzerLw<%Fa5&~d^14BuqVOmFrouqYh0hgX8TmOFjn z1D%jWF;7l>g=33Yn?%rZ`N|J+D$9=_{Z{nc%PnKnqL`7IdCUDeS#(6r=unhR{ZRiX zvnq?fhRMgZjWjxLU>Dik2udQcxj&YVf1p^mW>Hk&vKkbCs`fX=N z6C2{M?rnRU)#?3NQlNrNo*?&O$K(+Z-Sro7MMF^&wdM> zr?YAH8&j63&ZggQOi7^2v76N!Y+YJn>KX3TP(1D<-2ZW56`JkoFXJ_x<~7zv=5D_> zu!e^Id$e-YnAvRkJ9%@xXFXYa%9|N){h&hxzkh~GGjm>d0Q@gQWAq_ZvNy0tBy@H5 z#=c#6I7_aCEvy>9!bL6hL=$t8@hjrV@ln<3Oww6V1^;BVi+jp-T^3Hr1XS$iw9zVY zCkhKi#>rn>n8z=wa%ezzaD&BAR@}?tPLp zd4sikG3oI`>j}M04?d|7H@~;jb-Nzb$C1#cWakSR`xZW94%-rpQFP1RX8g~Dp0~P(6n=9S$FG!1=MNXZw5-aAf=K9Y3I*>SbC@Ehn2uEJV_KY|FI4Me`k&&} zOnhGx^$UeIs;@H)ZTh-WzrW^ZYGlW4r{DB7ZGPd^Mc6xzlCf5_?;XFfuFhKADT5n^ zkF@MjSkFicsV)4@)YAl2nxHf_?{&3&x#^RAn$WseQwgfZX@bb`uA>EGmj05peUB`G zNT?kVMEJXAsKSUR!3rZHs&e1%aYdcysCI_u_cMv7x%E!5&OL)P`dNQ-?F@!??8>35d?QwN)GL_ZyDQeQxEd@#Vasn3+`0=~O-lAQ;rWXQkn1kR0s>b|_g%maM*iVQQ^uJ9nn$ zjb}kUM>{HG*{oZiy+1Ra8;3jsYZOZ*Y7}H&eU)O%Sr*Hm`qLU;Rk2XD!@O?Yl zoV*U*J=#q% zpj^nwh=UeIGKtNXqyF5m$+seALB@;2-lY6~GUf{EHsaYsyQ{q8{vaML9S;2V zd8N2ryR+LRY`+8iABSgO@jhncEqa%8{uZNQ_&WBS)fl$b%OduT*!}yO@~B&Tu2Le# zzIyQTZI0U9=)IBKd~}<#s5i}QyiIsBr{r@3&9!z69XIb;`PKB(<*N-neX zL95+3$DI6!L}i(4iaexDnTt1jhz|SrldD1YldGuz`K;f!X|B0XSShN`3p5kDa966y zyeWgppfe4&U+(_r$2wxngGW}4|ATz;eZ;sx9>E9y!A*+2)VehD?b!*hj;VaPoxQVR zpD>MGXuA0*^3NBV@+qja#Dz|uyIJJBZ`-B&Ca*1NZ(^TcXj-H~;%_9RsRK3+oEaWg ziVJWQmn|{zQ*)iL;zAd>doNL8J@3ETS@*ZxIb6fV&Ml2^-YWCspNM0W2Y2y-S*L~(%>!)$ie=>5BVmtT0E-@KW zlHz+v*az_oe=oFn#Y5&0p2QtWP8$xr*G#k;g=Y69ae_ZHP4N3)((%7fsh5st$M)3dA<3ZC6W8+m2sm2BoHOH!pKk zZpNPqM8sb<2{Z?7xG|6414o;5`Ij`Eer?Dsy_nN>7ybFzGP5T&gHyic=HU>kGHSVr zP2;Z~v2?jJ^o-c~)`RDsEBBY(wCte=$;32NM-&oL@Q;oZuj{)oU0q$54hYkgNFHYB zP%Z$*rS;cP1g{UFCl*~{1`we+n3kckIA8TiOPFQ&jJWj9f`5v?m(Xu(8N$?)A(jIu zg?#D!F%gxJP^_zVFF#)7mjJERw0vR`TYaVJkH>h<0dhP6qie zn3UDIV%a3Uznr~|-F+FGoNP11`VOo%7t;GL_$Gd74rU;RiC;Qtc=>LFQQMEb#u@`v z%11SMFVx)RVf(b!KS*fl)cyLqm9u?RF9lo7P7?mhPUOEgHvMZHg}Ax78JUq1fA(f> z&dO`qwv7n16VC3eeaKcRlb>Urr|eZaTa`>UPGzE)KWc6=XNHEZF;y}X%Tu@L?1SFZ zEzF9{w4y?!OPi0Q8aEu=a&PxAHvZiFzXV4LDb<$QVF`1BnkI2-tuYVq8_@*`J)&un z)x7=XFWXKhNeo+KqOuVBEF?75X!Cl&nK69}MI=dl2}i1-Yn5i7J__FPRT5{{8Z!vL zVP{>5ow-lenU?nzF2cAeGd-*Ej``)kgYrIW&&mGaRPv3OZo|~}_zD%PqqTfdDz(q( zt(K1~HK(;T7aV8qhx*s}x~wy+!mtlsw{};UKQ1t0@^{XhVEU}s+t!_4`g96!HPq}^ zerFND>Ane4;hX6HIm=?KFK`l0z6}kPDgWf?h6OzdmyiB{j8wmEQIPxO)6C2FnJ5V2d`|ZdrC|*Q*yvgS$K9ZjYJjc~MaX zHIP1QNm4r<>3}n;Ca-Gf2)(g%qwHoE!tgXB3?MfkOFJ7)%1}>FC;<;^ihg- z(?4B*i>dx7MVXjb+nho@`P|i- ziDl+6+>-};2_CV{L>3^oC%2ha1*itI-K;7=;9Yi@eRue>N$CI%!hb73w3R+K)eHKo z$GyMPDUV?_({?NO!E`RmkT}ic0!G47c@*9ClD@+ zYp3Z}7@zxgnvr7CCe|0G0oc%t=|?R4BrtMJbzP!Ft<3G3LHXK6ba$Mc%)8q)hy>9&AXtLvKLI z4JN7>*?)@PP_wHT+569Qp(5P8$3*%+af{O42uikN9uOADH+o_y(4L9rzQiskn#dB2-789vm1plvu5*cK6J?JBlx(qhXVtO&=A_iHcnF}u<~M8f>V|M zr?)Q;jPd&Zo=g_OJkOIzB0)kzXp51BY}Qa)ZAB@qHOnNzWRXe4R)SL05?W3vN>Qz? z(PB_bP+KWlTWc$&RBLOk?N@m}=RVJ5Cds7j@B9AV*B>(XIp=QYo_p@O=bn3RBp~d3 z(RJg2k1k0CLj?rc!*xAQQeYICmIw?!z^wYTcDr4lp1?7ws2B2?U6gx7p=nt_;l;9A zgttpXtr0l3=Pe5A*G&e51ySU$H`8AG;rkZgK&@Yhsk#Kk$IJr;^XTw8%YS;SPms(3 zB1JGo-7>Az*^7cNJjstL(7UkLK2I>-``wCy2C(@g1xG_z90Dqf)ty^!FaK!cd7Myj zq-jPyags8k4JpOij{b*}beFR{LKdE+?_P}Dd@SiA>J=dbu!8ANQOg(*EdVcXaLe+p zCboM%dkz#Fc9R2wE))=6q?fgq%_P zpbRGKhXJpB{6@j%ueix#lb|!5qW-av(|N#PMZ>WA`0=K0i-s^&5m+09pMHu8Vo}SY zQ*<%b5E--zn7mdj{L}KOWyzJ7?2#U^dn98VD7EDj4UPk94#JTzrFwsVxj~g$ok!c} z;l5KY^l6--Gp|5T;!yv+9qKM_)u_Mb9*^mEo84%{)?0_QJG?2&n^V-ODNm16G>+3x zPSJZvyY!~RO%XE2=QOQ8i7RdP%N6>d)6}q;Ay}Vqnz}UujV-5D&S~TE{kRPk#`v(C zCn(f7RyP$8?o&>ez>W#;RQ}u!S#X*bA#dP1VDK(;%HW2pYizIiqa9<{X*$lOp9BVT z-^w+i6M9-&+_Ga_)gaY!J(hbktr2O5+&@h1mt6^ye(8l53C@&>*L44x0YA50x}_Al4jc8tDfXepOI3>e(IS%=^18bg=X+cCxh z!o8}~;-%V^TSk9uhs-)dw>j?;4dXMz#);3|VhijTg&M@1>#h4~#73OI+o-wc3^i|o z$?W7RjK+`2IG-5a0-T}-I}Wg42KlyyA(qV%hL-4>lY2L)gE<;AEgl%+0I*+6+(apH zornF=sHi3M3b40VD=^EO7pZHt-k&fna5xo6Cm ze4GabfQ2S5Pth%uqHlGLf?ot990em7I8>x&g#7A7L$qe0grhbh($0qIJbrhrBx2FCY0+qYj29qTRTPq;^33&@La@ztC45aBawWA;tOs`BD(y zK58P0S!}Bh1S`JLX0K1LUbzZz)oy?JHH_AU)Kd4Hnd9DR_x-B+UyBhC1S);!ih|o4 zLhbj%w3~1dLC#6c@%y!_aX!sB;gnBsPoy#PiCDBd{Ag}hf46n3tqI|F`gZRG`fBv! z$c@Y$!#mlD%ioGmD7JSpG;{@n(65~gajp)R@}kA1yw;tOPcwA;P)27%tf2Mf!pc4f z)Dm5u1sH}R?PP?0>ud-r9-nf4Fw1%{%O2ZLm%3n2QP2fSH^ObMMZzK6rUusAPF>z<($C$n@o4oMb$=N`3uZwve_IaJZ$Ej* z^9NRMphlyqxY0B)#n4tC`a6B~G6V=Twczf^SzbixlifjtcK7LScgRuGef3h`Q@7z= z{P$1miE-BsS>6VOuamWKuV`*~<`kbgXpm3tQ_CL6y9XF7kMjP?tD14PizhJHP=-Oe z0tjp6-@cq#y{oT|3PTy$Z;Sa<%*`j3vhrj{=DtNkBP5invV1A{Lj zR&-geOPCnk$zH~XfUx@d&{&w?{n~{*hVa2)v{0Y<)@@VXV5|okF9f^I!3P&CSq2Nd zFePH=u@ey1P@8S8``XkiVb5z2?9q=rp#D9vbYFcy1wGM4kB2JNmsYHBb=tx2%)r#N z3LikY^A(@#@sZK;i$OqyDYMB#y2yDu1A}k*g>+ooZ~p49CIUnA-bew2EdUD(UoKkJ z?evR)sBTKS(GRKNDN{J#6tFZwV2JI- zR6y9U`rVi{smH6u`Pl2FM>LM}uF){A#NwzQ%gHy^sA5(WQD1}9 zPNhC0qjIl^CX1uS4v(oD@^YBb!q*MBrP#;dW{WdU4;SHz_?_{HKykD;<`lxQa%|=K zuNnfiu%w9j`6>Wvj8c*Co!-M}Xi0yyT0}RE6y#YUC<-TK?f z;*55JhJQo!a`V`_SBhvfeIN!&4HFy?_^+SR5+}8Wv!&Mi9UWeFPe3FmD%y8X*W2gT| z`+R`@Ul`}R3;{L%wQ*h#`{K_-u+aal2_DiDap;5zKAbkDK{Tm$cq2VSc+_HJyym_T zT~^J&ZU#252sksS;9b_|h9mC;}z`I-d+b6$o`~$bi z)x!WR|5KJwe>2)UTlIDLFPs9RYiv-BO~YEeJ9YSp^9R(fF{#TZ6VBb&^8+I|XC9XU z@|1JVj56RMurv!8<(xAEb?zV_F#dHzZOtgZvhv5zMz?<)xAOc0K-uz3FG)#u4`6zg z@=X(mWLd*8$8aQ6?jczv+aX!0>jTs`8><%VU9++c^+N~ws7q`4Za8q&I-d<|$ge(n zdX$Yd7d~6{Ef6@i=>DrMhKc-mTB978Z2yN|@RXd3#$cDTFc;lX?~Vu9BJa~*xrQL; z7s(rqF!b^pT2(KOCEeCmuJ+>FJQj?C5p;^)!B}AtI=(b=-F7_Yf$*<-sIl!=+b88V0+b z3eZzRfKxI(1;wS$b?pga)XKc}o7S;9i!zkEix&no_ zJB^ciWnS~U{U=(=+A9QJ`SBrqYv{>18n^yt%%}FF4P9LO2kL3wXpEHY%=FS|C`OQT zPevQsx?T#>+R3(a(-;`UwRN7Pt!b$Ly_HEpaR%0*LN z#68)QZ{Xw?jPol_2to@ech!$Gm{Ko5=s!lL-Vg74~n z=JGV$-nXBE$uJ&luIgC<)N(wS0tM%c2S?cyMQEdlCJHq>@GTU?HvZU2FM3@)+2b1& z#2Xh>0bH+qwV?X>V9`BmXfFTFA5DMeqpVVHDgO`rU-E6!!bW^O9N&(@FNW`n=qDLA zM%NEjx!{fMujDt|{T5$Z<_#fQ-xd(wDz3`%JNHn2!vzp+zdR_EZcc*i8x9O+WY-%p zU03LCjM93JE!)&k3Wl?TUc;oGZ(_({17Ht`@@xR*P1c~Yk)YTX$nQ?Dg>2?z@S0W+ zJFyl`MzA8dkkW(6;JNK}>G>&!qk-jwwu1D-RIBn9j%u9v3i2^ilzJwJ$VU;jHQARw zc?(;SzxD15p9;>`X5;`qhq*Wv#`U~Y^QVC+VR;gp!u^3hPZ!@%0tC&4&9r=LYJE_2 z4)P*;l(2yOy2i9}$+sVDR`ar9wBhr5U0008Z-+J|wQcm}K|5sB^Rx){27ZT=OAKuO zZyhq{EeP$bjx~&`u{!JXbevmu5oNppjBQd_PWw%XID}(T$6%jc;RU^Le0{QJ&$x>- z@8NigA)?+FsOEI!?F$SJ0#tY|$~UX-?JzsW7(k%nJKs)*SjRsV}>FN#X{73lPsUgkczgZ0_yb|!KA;r%?Pxmy` zi-1)>MBTsphj-{5QDZD0J^$R0x-CZzeSV6;LT(Lm1Iv60$`Rj(c@{B_lsyY{>pfUpJa`X5i)R8MIEFAW=)EXLjk zc>})y2Dfb9$JLi^4X)k5j&Z3GUEilR<}~i`{~o1s;_#dv1v>z^|TGz^Dfd_ZJU`Px#<#Hh^jMp9Z8MAa`~gxspC4v92AWkDxBI(X!wOy$F$YMylX< zZNbNn?HFzG>Krhl(}BTM-8tvPs6oA!&aq?61%$aMsP|^;7o88WT~e!eEAICrZ_q_x z@Ip8>cY9rZ#|r7dVCxnH9|saEHdo(^pe3u(7_UfGCn#E6>)Ei*+q9y{4=bT6XBj`RJSiBXQ>7qY@oG%H z=D_8n^wJ<6Zi8Xb7+$$CZHK%J>W1dBS#@~fpi@OI!TnGj{0gv;30DtMU3ua-Mu$Q| z=Q{Kxu>95XLVcPs7xjgLzd4-Q_^FjIPjbt$Fkxb3qa}5zr8m*5~m)f@wXnP(g zh;A+=?Z}UtsNZ&i`oF_~Xd3a3LomL;5z%_FB{jFpKl@o^CpSS&aZhD(G+pE@v!kid zOY#loF0TbPdtn?s5ZUs;xi;$9;cYp*h!Raty(BCVz+iUi(DKke{h`lVqdd4t@aX=4 zs9x`)yh^b&`dugxTKUDN9D#446D(1t?r4#9K5apJ(Q{m5jn+mDQGn**u!cQsM4!s- zY?BShoGn$SLx2K*|dXz(l3n z6jWYVMR6uqA`i(6`9M-@v50Z$SY%N7hlS5Ha>9UQ)K#f zv4fB)Zb1w>y@ogUouOKD!IuUE;v`#Uey&P>@GgRpzW2Y|Wi{@YFav zWwi4CrrH*sG+^+>o9oq=BfBqnfk6%`*_%iwaB^vVi z@w*(wBj~IR<@cxpq+{dq^KLsaA1Yno%3gYL^e9)n^h(X!Ukp%b&0-a`d9A{5Y095{ zgl!VPH2;(m65t;UfWlQEUllH{Qr4C(A47Tt=G0G z#WiZ8!X^lVuJ=GJH<*uNA~dWY9(-J@q8zZzh83aHYDFZb#q19Fcrk$HoCFa%k?*21=M+2E+EmK=3?s<&-UTdnb!bs((4}i<-PzRw9PoD|q17Q= zII8EVE*wYp{^^pH$;{A5YiQ~vG@V<5?{r*RoH0gfk!T0+h}Nv zM=oY=gd>tIa@x?c4}q`?DZ4538>Z5G(fClq1uH*h#HLGjB`+J_3LW8wI*EMGv_mI# z=3&%mlObT}8z|KW^c^~?-L;il3gC``ZGfPI6UTcEQZ|qd%8U(1uCf7iY^4rK<|MIIqw zB6Pz5@dBjfp;n(RPWh{{9Wq9PtlRd(5SIhTn88G#u80WT+ZxFK^Z%@WeawqZL?(XV zOZPq?%+-gRoNLtYTaOWd2)CFB-C7Ou`t6%9zjDY+wpX+R5a#5?8Pjf^c$mm`BEANN z(vE46xU*Dw#>bso=<61@J2YLT!s_1nbyjx>n~Y36HrUF`W-8cb@Iy?$r<)Cd!jk^m z7N~ev(`o$|U^@-Y&mliZr|nw|^#dwosOK48_{+pdnKI{>8V`2lQult9LxRCPP9x^V zFE~?pD~*IVwS5`He5tNUalkE%)DK zbm*0a9OI-Gz5xN7b@?o$bti(}Tn9gtR+B2bQ;9C)F3P*j%jy4%uK4r?U zq%@fYldw$EUB##}`wZ>=ZVNr~eSMjv-ozhR**@q0T)=@3ImskASnZ0&A973~;5TD)2 zgL#_69p0~_Wyl>f$)YY)9Y5PMq8c^yO~D5IeQn@4+F@vRq2sgS`iyQljBUK-RT*rpnd! zAQt@y9FhOo9-PknnM*s50NM63rmOa}TtsmO*K*&(iLlXjf%Y=AAJy7#I1yO>gHn?$ zBp<+Lf=Thh0gys_1*)^Xu|)?ATmBbXHU1ES>zDJg79@?62LZJ!uBY>;`4Kb`Pn*$V zJmwYTL}xHtE&SRo#;ko`kFH4i(~Q(U3=k$xD&!8>rY zjDKh&>F)Da?O|axs zn{_8dPsQ?=n~|KBl!m}fM^ajOMtZgsSLpzuyD_kgjIAblQfOa;mnUDo>W(%=LD*H+fE*3pS-eFE|-f7n&7oAe` zCZ2oY{*9IEnn6wDUDY08!f~+diIb{_RfrVUVD*x$$-Z+zG#6OnmX_dY18F#QFCW?2@x4^63vb!D>wahHD&qThRh?Xwto~%$&d#}fA83RO^=y^5k$SP zh!vf{WN>zeRvn-Dm>ri=_4@$(mjS6)WCI7ZJ zmaHFfz}_o7=Q0==(e1T+j^@E1K07^UYim1((}!L}>9CgNyJ2)y+iX=lRAuuPfYp8N zIR|@XV0l*d7+fQ#hChN;v_kOo7F$n+DNURd@{44}KZpVY>#TGwqjqUE1 zKb!tbG=lQiBFIP?G}z~6xqwDa4|Ms010U#)yW-HB7^i2q*vpk&hrC=SP1cJjptieS z9`L4topJtESccT&+sNqBtCu}jIW=MK;&ge@RUEXIpI2P$x(Yo7$G5+rI$vj~6#kPT zxO(|khxsF*yN>?}{#~UnX5);Rr8_#UI%Nk$k3t+2_DgtwXLR++4?A@c%0m?IDa!^g zV2cpsZ3JSe-2MsDtZZmRZ0>MrHA+`rbQKZG6VX+wx`jIiSIN2t!u~^W6}`_cioXt? z`P)z`VuOKDDzmPue%v=7BS+_5H1Bbn-DjBiuOdlq? z`t$iaM|HzMItiuXMOpQwO8SRyQQ-|(%M4TXLe9?Ykvsc~SH5Mx9bRfc`JkzE^#)pZ zbt-lF<`O{M%_aAyvYMgo6D`|nMo=wA(y(VM5M`_$QXe5 zAz-knspGb&e!epr)d7aKT`MO{F?K*EzlmFxovn$_-`iMG34njv+3*|LrUnu*{XTZ zY_eFO59k&)|MusvB-guMF1TJN{+*jm$#)HF|F7;G){miXzhQznTYg}zMG#77uZXD- zEKG}#H_+Jvp<>LAq2pY-vjsxMaQ2Fr3c)L4HGfB5XRnB<7|xbk6@q2QjJ$!)78eyG zGM1Kd>CP4=6~oz*sY0MC+~&N_o)J?q)?m3~)Au{gZq^w(bKz88?o`OGSZaO`EpxWq zsu*}IEQ>LmJr<^7*gSl<-!nu7mf4wr<#DYy&USg%KX4HIN2{PQ$FB`o^LY3+p5JH< z?V~ z4|o8X|1eZ{5}x^Mohma3&({0V;yApXgBz`|NOU&1J9j}6&#Kt2AP4iire*!GbPLoa z)TVD}D|S$MD|QpxHDnkt6hEJsiFm5|uD}a^mSl0d@$S z1H=Equ^Bg~+5+kihsK~wC?^=$bw>W!+Itrz*|D{i-4FVY%?nb~7@YgkiOSUzU9}4B zxU{=dzdnKO)N4;bX2NTZ*WB3s9eQ?LeK^71EX{vX4{ybBe?h3lEud~s@fTivOP}Fy zaKyZwP~L1Ro95s-)Tzs)sLH8Bq<}beW)u*o4tW9sx4U?#UC{$Dxa<(v=hmF5uCIK& zz}|sL8f2(vi?rpxxFbjq&m0~T&8alH{PS6-u9+h5CkyBZlcO+vUKYBqojYs(snuK- z(BLPK98R51MgE6q6?=xQzxUcZ=Uc8)T{{J2ZUh<7BYn_9dV(_aaK=3T)KIl%jLxY$ zrpVK7A(=54f#sb~$LNy7=QW3R+7`^po|QXCrEL6s^^1ITsS(5Gfs4J}dQ{szW1;F~ z@kPJZb9Wak|BoH>Jq@z%;#N1^ARQl!YGv%vAkjnWEc|2tx2(Bo5Y1oLxu2})f>Xau z0lB$wJ{YchA{=QOq3I!4EB<_~Ns{W2EfA``uR=z@-TbwbJWn>+Y1MYnAeUkqOz&h( znr??^9wLEGU2H|En!`h2S$F4Ll**Gu^Lz*_yA8J0uM49^-1hg71A12e>5s4Puzp=I z+TM<@0D*+gPi|Me-@dbfsdmU;fI#QXf7D|@z_@dsKiVO1v8{>G9u~1k^~SngIHyM! zH}8FRj5I)6An&kdUQ4#8$MDg+Mv+m^>vb&w`El!*Z4VMZ;%I*w#Hqu(pak!vgsYxy z)59NxOOy8DZ}?7ib>XLwITL$GRN%wi;;oqN4PV|+#h(ScYZ>soVfoXtbc3Ai`fMAt zzXQR?uh3Ot>^h-rf1MQatpfv+Xg3cZg&6ZQkl7+(yKf z)|u0c0BGCQay(jCI5~4+a@^tC-*aY9$GaYo7^RUmwKRRtA z3P83zsw0$boW#Ca3;yAUhmU!<;4o?X$?tpH2wdFh;vY6hP|;~ zI5>{XSH}OzR$ZC;oq89Ey}gZpY_52`<~s6riTWHH;yCIyr$o-|xD0E~R%Mz~=7Vj~ z2y*Vv#!R5inX<$#zth^HR;IRc-BV*YWQ=%Yow{9g@Ei(s9!ZAZT(`|t?NRfxb^U#h z9Lf8?lJ|e&EL~yjAzTMb`lD*XvY0%GXKJ?< zI@s;R`k@NHfNEu}*V;lyHx?Uel&BJ2w+YKqly?pZD*xVsSl4hX!5@7ragyZaB5oyc z41ypk^p~o5+Kkv#I2FfO7yYGPVdXqQfW;^)(~^?}`#}GMqhH1}UC1d=?-@=p$n3ZimWMgK-^= zZ9wH8vvsS6;f1BP_`K~^+euoPyBD?t0G&=dFS8j}RKG~=fGRHBi4TwF!lNtySg828 zru-w5@(qyMQ3?BP^RY)@S@zJ>Al;+|WT+tx47D9olz%)?@>n8(ifWV@*4s6tV7{p8 z6$s_qNkDcj;0CU)J`KVOj!^Cc1Et8oy=U>36o!5H<<%!cdUbMg9#MUw-wH)2fW z*dHi44f3v)sbM+`^3DcVhq4^XU^vx-fodH)>L_L@jMrtaGqtvGz1>ORnW$?5RlcexSG@lx|7QN=O=(U1#?j*{*$B;DDD6 z3~c#D!0zL9v4?B4L){zyIlp5w?=L@s2bmT*Ue^r}zIJqX)x*UH_s%{k@(QzO{~c7b zo)j>2C@}c)Y@Ord3f()8tmh^U>R{H=O#p{&l=`Ek;jU^}E}2Q959`Ng5&lUnu$@vq0Z911yTN4j66S}=$FF*e_= z)h6~!lG33&wFP3dlOT}pE`tPCU&w-7m0fTS2g+vrg z+pq715T0y_VT?_CC<_=dS2T>iJ#)U^|Hg5I|FmH!d)2(v3Vqjo`PtKnb_hRxC$Y!0 zW_1!068d_C{?dNRd0xsdp2{Jtz?Y5VbMwHzisQ5T1*v+E@&#SlYyYta)m@GyLA8(e zyxwNI_naXkwKpqqhUyp(K(%@Q-D563Y!wfzgq!lh4^O?~9u|i%>vM4RoWlu6z3|zf z7pITZVc1wIp@wqqz2mU@crZP!kNN22mb)JfY9P7)V^iGS@VrVmwSHQ;hV9*ymgNU* z@L8%J!Ho*vdN(X2gF~ia?0NKmPQ~*O_%}73Dm9eaQul^Ze$T*(Y7mpR$MtRXPMww6 z^^oR?^lZ`5Mt2IT{nkW-?=lsJcpScZx1|QZaw%cf)|M$7x**Nd`O2AI+q6#p6Bb=dfcltsWjYV$x6sZ1CF$5x$Qq4`W5~BlS+v5d!D@3 z_R0O_50U1u16Oh;rg>cQTiF?@#*t|eu^D}jZrIgw&72_@0B0|D|9j6q zJzTWW*DG3$m{;fY^xex=jLl0-%V@;!J~!BK_FTO)F7s*v&Jy;+Gn>4|Z#WS+E(#y` zLcyGKTNef{n&umiv=7p^)_7JKp8nH+UO}2)EV~>cypaWYE<=oN2qS| zyj9IIMjDgMnYqcguMWO2q*hvJL%{izXXWD9tc`xBhU2vxQGV$8ZS+N$)NcHlbQR&% zTgo?An{8fs4QXcXkE-{YFgm<#^ZQ6M1p+(n{dx8kW5dQ472oL6v-f*H_TSS6Y3{(h z%|V4#-zuz|my<1q2#03Z+>%;9Edx&mIq>h|FJBE?^NXp@g3<_6No~N^N>b+Me$TIH zW1$bjFW<`EymwlSTty7ywpSa*rUc7$p zA_r3UXvvFH)}(0ZhQ-=+t@M{mH5Q#YsiPCknTf{SoHTP%W_o%;MzSf}`r3La(bXlw zx_yIm3$7}3`AsRrdU&JsstdH!Xlv+Z={whXZRAjE@HS~}MQTt%u4)bZQkq_w-1bVr zlyzV7pd-g5AD2k$rDM``Pl{|V)uy5baz*OCLayr)OA*bbI>jHnDD!*ixnd-5I`qAy z6elZ^>siU$A=&DzR6``^FPGdX|EyHo4ent$q&hEEqg`hucN%wO~?wfY3Yl9{tJOf>X@6jm`cJ0WX`DczJ! z3oc0Ql#B#mB$$n$4@8v7dhvoZ*Nxu3Ev=)wchG|O7f4mDJAafmxKRH)QboKHEVZz{ zcSlNav3`G58t&pA2L(QYx?hueQlHg!S>ees)w z<1m9<$y)ViDcFVX|0WHf=P!U7e!oa9=&u_nzUyttU>)$g6yP$yzwAbXKa%QE;jdEY z{Cg;H=Pju+<=>M0Xwf}TIP(@Lcj%VXkH^G^!X8Sp1Ffb#kR%2KQ1kO>R+T9rj!2%q zCxtlRh25779yu0cLRK2>{zeL+&G)4uweML`ibTB>IbEyZz7*&ZL$x+3q5L7l;kOT= zx|$_ER5~wtmH5!tBG)XgH;6LMfsYP+qqfRlP2PAQ$yy%U@Ox0uEm@|~52e0vl|S)N z8t5k&J34sm*x(rcFP8s{vvzqT^>(qIe=H5FYTc*E8$GG>Rmn&T+o6X1J0QcRs~|&| zuUv^{_{cG|EkIsZ!JL*DX0oKylOVZcdrTp1)@0>oWtnnJrfjf9wkf_i8J3uxnP)L& zTj0!xL)*Bx@R;yq(}c{RoXbjWX?*-HJh@tGqd@#IV}T3N*HD`rkHY) zh8Tw=fIJy0ZfaW2kX(qEY;#t2Kg=O;64u)6Bv39RB`wux&P;&N$wsX?CL@rIISHv2 z$5vS~fo(FTCuA8dAbVzZ4s?Y)G{tO!%95LvoPdlOnUp_O4oNLe=A@;hnX5q<%-pBMlo>0-;*)3O{r-Re4{WT%!xs?e!1jX z1;c|J4lpx)Gg7KMJ~fk@h5wE4*97-)3GtTE=?U3MqZ5XO4av#LGUlW~SSBST4KXDo znoStc%wf4%_H?#scrJ*TY+?zT4KE5K{>#eDu$WRZv(t?jz67HwBPkPHz{N!x^B{n; zOxfnlJW~kDwU~^6gLhiB^qmFFJnQS;kju^!;I!^EGw2w^9YkM z!JI|I-&F$1I7RaGK`KLSqz#xst&huf{fhGeTKt>x2S|16mZ1|+%6y~l_oTY5oKP9a zPQHqH5YEGyo|c}Lq>Tw({z(d|<@m+IBrW-YmW`I{MHi2^HoibBGv-FNAFxisTqEQS zU7n@*QPwQQm#VxX2iA0`+gVNCu~J<@dAc@B=}PgNmCAH|mhu9%IU?5%vDc^aT!|*| zC%T-YJlD)AzXI3JyhgUTh|xO4%1)nmq(p4CK(1hve?4`+4g(@tF_`6*!5mUlvNP;Sz0JHs6 znKOTd!|rO+0MnIlci(Bd!T5xcCRl7tLP8aO{KH6tk@-DKujoMcWj zGL|JTEt!QX77d=ffi>)D<~4_uu?a03FNgZrGIHOv-(u2I_%mokohHf>bOP^>q49K2 zk=?6^YJqES1BD!u>e}_CA0w2|8jgzykR6jWXFNtC{y8vP#ZTn7Y4!%tlz8Pj3K zr1*4TZoeaWQG->`dY};+XjX5zUT~=e4f#rb5gn*odKqN2QY#~f;2o$yUA_!ub4Rq? z=mqEzwq+Ff4k-)|>m4A!1tJ~_Y<^oQxT^TcwBWWEC#Y)|sjk;BvniJcTl_UP(MH$n z4atL-Vr|{#N_cbb@W}|Xi@J)kf|Qs>%NoeF$Ze|P?aMYn(S~^NG=?h-1<~xOV4BfW zm7ww2xfw=FQg&KaPKw2to|ci81-lV2p;?F(%$Sg!YD=2YTJf7DDmEu+Dc~FaP`pkF zb%QC8hUR6Pu&ia95|WF{;+3!D2M<q@RBF}-({id@ zoj&d(H=*^tf=!DlEHfiX zOfc&Bf-F@=il-O*G4$0-w8*MVCQ;()lIkGOuZoVRIK`uMgB9=lb znyXZzqwgq{pwKT1lIzfucN8xS2ws6C?{}3K@e`r)>9u#2e)MBLy7FwU(tzr8;$0@P zR>o+uNa8Y48-K8nv6E zZcU1`-5o3x3QQS;VbQf-%L`ppZ!%`=q2Rry(f zC?-)c)wx7!9RejDmAX--x0G7$yf}qZqqmf~VjOCVwnK?CCGhf5A}e%t{!GJ};Y0~{ zCM&fA_`-(h3QwQ33=1=f5gHpMybp#Kcsr*k-RYw_V13pqo6xQ~$`I;0UGb#C*-Aj| zV!hcmuQQ;r8B<4P@%+gfl9n_?oje1)WZ9i57ePSW1h*FGX(mcaTGQd&>1tKVB&91cBYwonwG(P zg&ZTS7)isB5cZDh4j)i#2{?0p$JB(}RGtgsFSr!FuqjE8mplgtSA1Vkhb<%-LVi!BaH83mR#a2c>GM1Y%sbT-m^XULKBWHySs*$+X-#z{ zo*LJHOccxR1b5)gc2%mRSgMt8IRf}bQt7uRA~g?Hm0ui<#rf@aO=GK@+&U* z6+yo?kgrm$_mv9P(+y=`7gxBN&@H3(KkFq`rAOiN>vX9RnBhn}+1G$= zTUsubXLDMPi3W$uzSKBO&Ze;TvOBE~L#CJ8%V+8CBN%a%NElx-8p$5?dLxLXQ~R*) zR$8RINy9%-LTJ`wptO35|3aR~H9X=I6B13>rY=%~DVz6K$9uq__5C6xfQ~J~D%xYQ zQiJjy$s1_E5~UG^J&`5)ad|rpwR|cY>Cqxo9~Xt9S}s$mpJQx2FRCO=5cm z9%$J0MEL;4Cu5m^b2@5RpCkv+(PVip`7FkSc+(^YtG`}Klqb=rN%9<;ohp0M3#p)R z%~W|dwH?M}VH4*MY0yzFq#|TO(RsKoH zze_UhyCGGf$wTCBbpNI_n#+5Yy8SA}Vz7MZ`mfS!^y+n~2N}}j$5S z4VN2(NG*rU=876lW9T3&Ac6p|NN0x2Q8dY&dt02RWj44&d>ft(fN!i+TSJKWM0a|a$hHd`-B(Rp(WQa3Sp^F6owLr~6>`xm5pgh~lN1G&i2BSC{CS;x+w8kRW z@YZ@7pD_}(jTi>)`)i9lMa!UOB|pmBUgcAi-)7@=h%VuG8u2#ySAB_LxY4y4o{>PeAM2>PQPSldUIDI+H# zGbI~KIW+qmY*vzC|H~L*gq8riV~z!D99svo5^{!Egr<=Wg9D_nF)dl_a*WwYjhaBo z+9e0qi)V{n*05CAb&`gqq?t|e88B8Gvn^qH2^Q=Ya-npjL)F1|RAFymDn=n(@Xh*+&fN?^#K#O#VBkwtK z9anC~y&}1xV;YtC(v#hCfaAv&d*u3#=?{zK=N;1>cb7~r*e%y{gg4nMhid71Wr?Pa zu>%z`-u4Fmx%v9#EAg+HY-8VO2^TrHwOe z*uu76v(!hPccNf6a%16Mx>2c9BfexgK+#IX0^OsRR43eqzykp&|H0B|+uLfnQEVC% zRNg;OLO&^}cG>T&HaMVJRLy+Lo7fVp+6S@U{Gi;1qyvzF;`9v3iqz|X{4+0$?!k7h zM=_=50k70Fd;^5TmwV;5wMtANV3$avS0Te7yjSj*y>VdBgnD$rNsd?@ZtRn52RY6} z8sANf4tVfA{UOx0*kc?r)c=SlR`uvT)!Cxe*Q|XO57+ zcSo4HNJ<+k&$YU}A+PtKt}#kQ>$W%LRqmeZ8k}db4xTPAa<#h8k}tSg1Lw;7T&Vg= zsfM-9yK->F%Dj^!cdK=|T-}|1x`efRpr>4gKKewyUqw4+ zQFm*Yup;p9*PbgE83YT;cUR>Ps?f|H;K56Ofp&uzLt}gXvD}U_8p|E2-edU% zDqN&=pw}{?UIV29y$xk-^Ph5vUd`t9zT$1od?LpMQN_LJBNY8Ng&EHp7pScCq_6i% zan=i=$`1zes;1PUwm+jcMO73xy7^4;wJwTOwzS0IStRutuG|xG!R|Tqm(fM9gl#((9Id?yU~gd z1Fg45D<3#k@Woi@ei1K#c%q$dZ=kB*CxNG+4^*H(B5``#^9_ZaJ0r;ahSD;Cx0KAf zX&E>n$cC9#Gyc()H!zjF#wnxF@#*7~&J_^WPPDGpco;4!j#q*`EGA*hxjhbbzCK>@ zrfcJrDxPe8%gfA8rU~P*I}4qpRP{n7BCo9$nvjMWFgqUw-FXvCwICeq_3kzZlUezo zlGg-9?yeazY+16yuy*qSh{pZtxj3Rz4HE++dFtR*XAQ)MJveE!q>ai<;?q&=RxQRP zn&X0vnPDuBvtP+qno;eEN>l3APp%0mvHM3zE-`)9O@I|m%)hh=FifF|6=}spYzh~@ zi7^Se4N8h{S0^gIf`}2D{1&Q8+k(M-DC`u&1zJKI?q6@BDrb? z2vz$Vh;Hn^TN8!K{%QeDXDdY0-2vd$1_A9c$bTF{OFk@6lGVH)&VhpZz8AUzv*>ef zybfCD%~kSUsNWjoYk>ntS~LP#X1=RTCeK7@9^bx?UVWb;hpXG#;CV_9LA=~~N+A{f z4k2K8NtUf~*Od7lbhj%uZ0p`rI#Gi&5FWt`lyVrw}%T~;Zf-QxQ1>JcO1&!H` zTz9sBe1%6L52d5XHli8uE^P&%XdnKowjX&faZ%m5IWKig)H}^Cof}6%-xkH^mdVg zuq^w~f}(U(G&TcFgB@}s&QY00pM`ibomE=U%3Ua>=)96h^A0MXt7E)%yE2jFZ6N6Q zB;-|&fb~SH{z^o$XgB^t@-?Pjb^2nkQpvhzkAg>=qFW<M54NGJ6%U}LpT2?`TkTW&Q`lAjR-VGQ(Jun}pc|M7Eo(}(UcrC( z70W}LgXcvtc()GWzfpZKmaBFFAiiDcgYf{>V!0>}<_fb~xmPz(ZNN?d>>PCROC^DB z4Fb!3KL}&A_zZ-C=>4GG7{S3kFnFS5!Gd2WqmiE;QwCG3Z5B2q+=1E_bVG7-HzW^n<%7RQvdh<4D3lLS<vjXFN6NKxD;?~1$z1lsIhB5l9($7sVu%GC8c*s=vRKuLG< z8~{EQjr?I3j*;_U!SJm48V&mR3uP7!j8ker_`@jQfM#A$`qBdyHDV1`E~1MpxUFq3 zD#KieK9RiK;0B?sLPbA8BWz5|?g diff --git a/cypress.config.ts b/cypress.config.ts index 3a6c1093..03eb55c7 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -2,6 +2,7 @@ import { defineConfig } from 'cypress'; export default defineConfig({ projectId: 'qhyo66', + component: { devServer: { framework: 'angular', @@ -9,5 +10,6 @@ export default defineConfig({ }, specPattern: 'projects/ngx-mask-lib/src/test/**/*.cy-spec.ts', }, + defaultCommandTimeout: 10000, }); diff --git a/eslint.config.js b/eslint.config.js index 29499b84..03e0fa85 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -51,6 +51,11 @@ module.exports = tseslint.config( // and treated as if they are HTML files (and therefore have the .html config below applied to them) processor: angular.processInlineTemplates, // Override specific rules for TypeScript files (these will take priority over the extended configs above) + languageOptions: { + parserOptions: { + project: ['./tsconfig.eslint.json'], + }, + }, rules: { '@angular-eslint/component-selector': [ 'error', @@ -68,25 +73,90 @@ module.exports = tseslint.config( type: 'attribute', }, ], - '@typescript-eslint/prefer-for-of': 'off', - '@typescript-eslint/no-unused-vars': [ - 'error', - { - argsIgnorePattern: '^_', - }, - ], - '@typescript-eslint/no-empty-function': [ + '@typescript-eslint/consistent-type-definitions': ['error', 'type'], + '@typescript-eslint/ban-ts-comment': ['error', { minimumDescriptionLength: 10 }], + '@typescript-eslint/no-array-constructor': 'error', + '@typescript-eslint/no-duplicate-enum-values': 'error', + '@typescript-eslint/no-empty-object-type': 'error', + '@typescript-eslint/no-extra-non-null-assertion': 'error', + '@typescript-eslint/no-misused-new': 'error', + '@typescript-eslint/no-namespace': 'error', + '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', + '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', + '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/no-this-alias': 'error', + '@typescript-eslint/no-unnecessary-type-constraint': 'error', + '@typescript-eslint/no-unsafe-declaration-merging': 'error', + '@typescript-eslint/no-useless-constructor': 'error', + '@typescript-eslint/no-wrapper-object-types': 'error', + '@typescript-eslint/prefer-as-const': 'error', + '@typescript-eslint/prefer-namespace-keyword': 'error', + '@typescript-eslint/triple-slash-reference': 'error', + 'no-array-constructor': 'off', + 'no-useless-constructor': 'off', + 'no-return-await': 'error', + 'no-useless-catch': 'error', + 'no-unused-labels': 'error', + 'no-unneeded-ternary': 'error', + 'no-undef-init': 'error', + 'no-regex-spaces': 'error', + 'no-proto': 'error', + 'no-new-wrappers': 'error', + 'no-unused-private-class-members': 'error', + 'no-invalid-regexp': 'error', + curly: ['error', 'all'], + '@typescript-eslint/restrict-template-expressions': 'error', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/adjacent-overload-signatures': 'error', + 'no-console': ['warn'], + '@typescript-eslint/explicit-member-accessibility': 'error', + '@typescript-eslint/no-inferrable-types': ['error', { ignoreParameters: true }], + 'no-unused-vars': 'off', + 'no-duplicate-imports': 'off', + '@typescript-eslint/no-invalid-void-type': 'off', + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], + '@typescript-eslint/no-require-imports': 'error', + '@typescript-eslint/indent': 0, + '@typescript-eslint/member-delimiter-style': 0, + '@typescript-eslint/no-var-requires': 0, + '@typescript-eslint/no-use-before-define': 0, + 'prefer-const': 1, + 'prefer-spread': 1, + '@typescript-eslint/naming-convention': [ 'error', { - allow: ['arrowFunctions', 'functions', 'methods'], + selector: 'interface', + format: ['PascalCase'], + custom: { + regex: '^I[A-Z]', + match: true, + }, }, ], - '@typescript-eslint/no-explicit-any': [ + 'import/no-unresolved': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/prefer-default-export': 'off', + 'no-underscore-dangle': 'off', + 'class-methods-use-this': 'off', + 'lines-between-class-members': 'off', + 'no-return-assign': 'off', + 'no-unused-expressions': ['error', { allowShortCircuit: true, allowTernary: true }], + 'no-param-reassign': 'error', + 'no-undefined': 'error', + '@typescript-eslint/no-unused-expressions': 'error', + '@typescript-eslint/array-type': 'error', + '@typescript-eslint/consistent-type-assertions': [ 'error', { - ignoreRestArgs: true, + assertionStyle: 'as', }, ], + 'no-plusplus': ['off'], + '@typescript-eslint/unbound-method': 'off', + 'import/no-cycle': 'off', + 'import/extensions': 'off', + '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/consistent-type-exports': 'error', }, }, { diff --git a/package.json b/package.json index 759ef289..3cde2316 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ngx-mask", - "version": "18.0.0", + "version": "18.0.1", "description": "Awesome ngx mask", "license": "MIT", "engines": { @@ -34,7 +34,7 @@ "pack:lib": "cd dist/ngx-mask-lib && npm pack", "precommit-msg": "echo 'Please wait while we do our pre-commit checks...' && exit 0", "prettier": "prettier './src/**/*.ts' './projects/**/*.ts' --write", - "publish:lib": "cd dist/ngx-mask-lib && npm publish", + "publish:lib": "cd dist/ngx-mask-lib && bun publish", "release:major": "bun run version:major && bun run build:lib && bun run pack:lib && bun run publish:lib", "release:minor": "bun run version:minor && bun run build:lib && bun run pack:lib && bun run publish:lib", "release:patch": "bun run version:patch && bun run build:lib && bun run pack:lib && bun run publish:lib", @@ -60,68 +60,69 @@ "url": "https://github.com/JsDaddy/ngx-mask.git" }, "dependencies": { - "@angular/animations": "18.1.1", - "@angular/common": "18.1.1", - "@angular/compiler": "18.1.1", - "@angular/core": "18.1.1", - "@angular/forms": "18.1.1", - "@angular/platform-browser": "18.1.1", - "@angular/platform-browser-dynamic": "18.1.1", - "@angular/router": "18.1.1", - "@types/jest": "^29.5.12", - "@types/mocha": "^10.0.7", + "@angular/animations": "18.2.9", + "@angular/common": "18.2.9", + "@angular/compiler": "18.2.9", + "@angular/core": "18.2.9", + "@angular/forms": "18.2.9", + "@angular/platform-browser": "18.2.9", + "@angular/platform-browser-dynamic": "18.2.9", + "@angular/router": "18.2.9", + "@types/jest": "^29.5.14", + "@types/mocha": "^10.0.9", "ajv": "^8.17.1", - "cypress": "^13.13.1", + "cypress": "^13.15.1", "highlight.js": "11.10.0", "ngx-highlightjs": "12.0.0", "rxjs": "7.8.1", - "semantic-release": "24.0.0", + "semantic-release": "24.2.0", "semantic-release-export-data": "^1.1.0", - "snyk": "^1.1292.1" + "snyk": "^1.1294.0" }, "devDependencies": { - "@angular-devkit/build-angular": "18.1.1", - "@angular-eslint/builder": "18.1.0", - "@angular-eslint/eslint-plugin": "18.1.0", - "@angular-eslint/eslint-plugin-template": "18.1.0", - "@angular-eslint/schematics": "18.1.0", - "@angular-eslint/template-parser": "18.1.0", - "@angular/cli": "18.1.1", - "@angular/compiler-cli": "18.1.1", - "@angular/language-service": "18.1.1", - "@commitlint/cli": "19.3.0", - "@commitlint/config-conventional": "19.2.2", + "@angular-devkit/build-angular": "18.2.10", + "@angular-eslint/builder": "18.4.0", + "@angular-eslint/eslint-plugin": "18.4.0", + "@angular-eslint/eslint-plugin-template": "18.4.0", + "@angular-eslint/schematics": "18.4.0", + "@angular-eslint/template-parser": "18.4.0", + "@angular/cli": "18.2.10", + "@angular/compiler-cli": "18.2.9", + "@angular/language-service": "18.2.9", + "@commitlint/cli": "19.5.0", + "@commitlint/config-conventional": "19.5.0", "@jscutlery/cypress-angular": "^0.9.22", "@types/highlight.js": "9.12.4", "@types/jasmine": "5.1.4", - "@types/node": "20.14.12", - "@typescript-eslint/eslint-plugin": "7.17.0", - "@typescript-eslint/parser": "7.17.0", - "@web/test-runner": "^0.18.2", - "angular-cli-ghpages": "2.0.1", + "@types/node": "22.8.1", + "@typescript-eslint/eslint-plugin": "8.11.0", + "@typescript-eslint/parser": "8.11.0", + "@web/test-runner": "^0.19.0", + "angular-cli-ghpages": "2.0.3", "angular-http-server": "1.12.0", - "eslint": "9.7.0", + "eslint": "9.13.0", "eslint-config-prettier": "9.1.0", - "eslint-plugin-json": "4.0.0", + "eslint-plugin-json": "4.0.1", "eslint-plugin-prettier": "5.2.1", - "jasmine-core": "5.2.0", + "jasmine-core": "5.4.0", "jasmine-spec-reporter": "7.0.0", - "lint-staged": "15.2.7", - "markdownlint-cli": "0.41.0", - "ng-packagr": "18.1.0", - "npm-check-updates": "^16.14.20", + "lint-staged": "15.2.10", + "markdownlint-cli": "0.42.0", + "ng-packagr": "18.2.1", + "npm-check-updates": "^17.1.8", "postcss-scss": "4.0.9", "prettier": "3.3.3", - "puppeteer": "22.13.1", - "stylelint": "16.7.0", + "puppeteer": "23.6.0", + "stylelint": "16.10.0", "stylelint-config-prettier": "9.0.5", "stylelint-config-recommended-scss": "14.1.0", "stylelint-prettier": "5.0.2", - "type-coverage": "^2.29.1", + "type-coverage": "^2.29.7", "typescript": "5.5.4", - "angular-eslint": "^18.1.0", - "typescript-eslint": "^7.17.0", - "tailwindcss": "^3.4.14" + "angular-eslint": "^18.4.0", + "typescript-eslint": "^8.11.0", + "tailwindcss": "^3.4.14", + "bun-types": "^1.1.33" }, "typeCoverage": { "atLeast": 92, diff --git a/projects/ngx-mask-lib/package.json b/projects/ngx-mask-lib/package.json index 4f80a05a..e61e1c4a 100644 --- a/projects/ngx-mask-lib/package.json +++ b/projects/ngx-mask-lib/package.json @@ -1,6 +1,6 @@ { "name": "ngx-mask", - "version": "18.0.0", + "version": "18.0.1", "description": "awesome ngx mask", "keywords": [ "ng2-mask", diff --git a/projects/ngx-mask-lib/src/lib/custom-keyboard-event.ts b/projects/ngx-mask-lib/src/lib/custom-keyboard-event.ts index 7c46a7e5..4b8c7e9d 100644 --- a/projects/ngx-mask-lib/src/lib/custom-keyboard-event.ts +++ b/projects/ngx-mask-lib/src/lib/custom-keyboard-event.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ declare let global: any; const commonjsGlobal = @@ -14,6 +13,7 @@ const commonjsGlobal = (function () { if (!commonjsGlobal.KeyboardEvent) { + // eslint-disable-next-line @typescript-eslint/no-empty-function commonjsGlobal.KeyboardEvent = function (_eventType: any, _init: any) {}; } })(); diff --git a/projects/ngx-mask-lib/src/lib/ngx-mask-applier.service.ts b/projects/ngx-mask-lib/src/lib/ngx-mask-applier.service.ts index b466292f..7daf3429 100644 --- a/projects/ngx-mask-lib/src/lib/ngx-mask-applier.service.ts +++ b/projects/ngx-mask-lib/src/lib/ngx-mask-applier.service.ts @@ -1,57 +1,58 @@ import { inject, Injectable } from '@angular/core'; -import { NGX_MASK_CONFIG, IConfig } from './ngx-mask.config'; +import type { NgxMaskConfig } from './ngx-mask.config'; +import { NGX_MASK_CONFIG } from './ngx-mask.config'; import { MaskExpression } from './ngx-mask-expression.enum'; @Injectable() export class NgxMaskApplierService { - protected _config = inject(NGX_MASK_CONFIG); + protected _config = inject(NGX_MASK_CONFIG); - public dropSpecialCharacters: IConfig['dropSpecialCharacters'] = + public dropSpecialCharacters: NgxMaskConfig['dropSpecialCharacters'] = this._config.dropSpecialCharacters; - public hiddenInput: IConfig['hiddenInput'] = this._config.hiddenInput; + public hiddenInput: NgxMaskConfig['hiddenInput'] = this._config.hiddenInput; - public showTemplate!: IConfig['showTemplate']; + public showTemplate!: NgxMaskConfig['showTemplate']; - public clearIfNotMatch: IConfig['clearIfNotMatch'] = this._config.clearIfNotMatch; + public clearIfNotMatch: NgxMaskConfig['clearIfNotMatch'] = this._config.clearIfNotMatch; - public specialCharacters: IConfig['specialCharacters'] = this._config.specialCharacters; + public specialCharacters: NgxMaskConfig['specialCharacters'] = this._config.specialCharacters; - public patterns: IConfig['patterns'] = this._config.patterns; + public patterns: NgxMaskConfig['patterns'] = this._config.patterns; - public prefix: IConfig['prefix'] = this._config.prefix; + public prefix: NgxMaskConfig['prefix'] = this._config.prefix; - public suffix: IConfig['suffix'] = this._config.suffix; + public suffix: NgxMaskConfig['suffix'] = this._config.suffix; - public thousandSeparator: IConfig['thousandSeparator'] = this._config.thousandSeparator; + public thousandSeparator: NgxMaskConfig['thousandSeparator'] = this._config.thousandSeparator; - public decimalMarker: IConfig['decimalMarker'] = this._config.decimalMarker; + public decimalMarker: NgxMaskConfig['decimalMarker'] = this._config.decimalMarker; - public customPattern!: IConfig['patterns']; + public customPattern!: NgxMaskConfig['patterns']; - public showMaskTyped: IConfig['showMaskTyped'] = this._config.showMaskTyped; + public showMaskTyped: NgxMaskConfig['showMaskTyped'] = this._config.showMaskTyped; - public placeHolderCharacter: IConfig['placeHolderCharacter'] = + public placeHolderCharacter: NgxMaskConfig['placeHolderCharacter'] = this._config.placeHolderCharacter; - public validation: IConfig['validation'] = this._config.validation; + public validation: NgxMaskConfig['validation'] = this._config.validation; - public separatorLimit: IConfig['separatorLimit'] = this._config.separatorLimit; + public separatorLimit: NgxMaskConfig['separatorLimit'] = this._config.separatorLimit; - public allowNegativeNumbers: IConfig['allowNegativeNumbers'] = + public allowNegativeNumbers: NgxMaskConfig['allowNegativeNumbers'] = this._config.allowNegativeNumbers; - public leadZeroDateTime: IConfig['leadZeroDateTime'] = this._config.leadZeroDateTime; + public leadZeroDateTime: NgxMaskConfig['leadZeroDateTime'] = this._config.leadZeroDateTime; - public leadZero: IConfig['leadZero'] = this._config.leadZero; + public leadZero: NgxMaskConfig['leadZero'] = this._config.leadZero; - public apm: IConfig['apm'] = this._config.apm; + public apm: NgxMaskConfig['apm'] = this._config.apm; - public inputTransformFn: IConfig['inputTransformFn'] = this._config.inputTransformFn; + public inputTransformFn: NgxMaskConfig['inputTransformFn'] = this._config.inputTransformFn; - public outputTransformFn: IConfig['outputTransformFn'] = this._config.outputTransformFn; + public outputTransformFn: NgxMaskConfig['outputTransformFn'] = this._config.outputTransformFn; - public keepCharacterPositions: IConfig['keepCharacterPositions'] = + public keepCharacterPositions: NgxMaskConfig['keepCharacterPositions'] = this._config.keepCharacterPositions; private _shift = new Set(); @@ -74,7 +75,7 @@ export class NgxMaskApplierService { public applyMaskWithPattern( inputValue: string, - maskAndPattern: [string, IConfig['patterns']] + maskAndPattern: [string, NgxMaskConfig['patterns']] ): string { const [mask, customPattern] = maskAndPattern; this.customPattern = customPattern; @@ -87,7 +88,7 @@ export class NgxMaskApplierService { position = 0, justPasted = false, backspaced = false, - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-empty-function cb: (...args: any[]) => any = () => {} ): string { if (!maskExpression || typeof inputValue !== 'string') { @@ -99,203 +100,223 @@ export class NgxMaskApplierService { let backspaceShift = false; let shift = 1; let stepBack = false; - if (inputValue.slice(0, this.prefix.length) === this.prefix) { - inputValue = inputValue.slice(this.prefix.length, inputValue.length); + let processedValue = inputValue; + let processedPosition = position; + + if (processedValue.slice(0, this.prefix.length) === this.prefix) { + processedValue = processedValue.slice(this.prefix.length, processedValue.length); } - if (!!this.suffix && inputValue?.length > 0) { - inputValue = this.checkAndRemoveSuffix(inputValue); + if (!!this.suffix && processedValue.length > 0) { + processedValue = this.checkAndRemoveSuffix(processedValue); } - if (inputValue === '(' && this.prefix) { - inputValue = ''; + if (processedValue === '(' && this.prefix) { + processedValue = ''; } - const inputArray: string[] = inputValue.toString().split(MaskExpression.EMPTY_STRING); + const inputArray: string[] = processedValue.toString().split(MaskExpression.EMPTY_STRING); if ( this.allowNegativeNumbers && - inputValue.slice(cursor, cursor + 1) === MaskExpression.MINUS + processedValue.slice(cursor, cursor + 1) === MaskExpression.MINUS ) { - result += inputValue.slice(cursor, cursor + 1); + result += processedValue.slice(cursor, cursor + 1); } if (maskExpression === MaskExpression.IP) { - const valuesIP = inputValue.split(MaskExpression.DOT); + const valuesIP = processedValue.split(MaskExpression.DOT); this.ipError = this._validIP(valuesIP); + // eslint-disable-next-line no-param-reassign maskExpression = '099.099.099.099'; } const arr: string[] = []; - for (let i = 0; i < inputValue.length; i++) { - if (inputValue[i]?.match('\\d')) { - arr.push(inputValue[i] ?? MaskExpression.EMPTY_STRING); + // eslint-disable-next-line @typescript-eslint/prefer-for-of + for (let i = 0; i < processedValue.length; i++) { + if (processedValue[i]?.match('\\d')) { + arr.push(processedValue[i] ?? MaskExpression.EMPTY_STRING); } } if (maskExpression === MaskExpression.CPF_CNPJ) { this.cpfCnpjError = arr.length !== 11 && arr.length !== 14; if (arr.length > 11) { + // eslint-disable-next-line no-param-reassign maskExpression = '00.000.000/0000-00'; } else { + // eslint-disable-next-line no-param-reassign maskExpression = '000.000.000-00'; } } if (maskExpression.startsWith(MaskExpression.PERCENT)) { if ( - inputValue.match('[a-z]|[A-Z]') || + processedValue.match('[a-z]|[A-Z]') || // eslint-disable-next-line no-useless-escape - (inputValue.match(/[-!$%^&*()_+|~=`{}\[\]:";'<>?,\/.]/) && !backspaced) + (processedValue.match(/[-!$%^&*()_+|~=`{}\[\]:";'<>?,\/.]/) && !backspaced) ) { - inputValue = this._stripToDecimal(inputValue); + processedValue = this._stripToDecimal(processedValue); const precision: number = this.getPrecision(maskExpression); - inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker); + processedValue = this.checkInputPrecision( + processedValue, + precision, + this.decimalMarker + ); } const decimalMarker = typeof this.decimalMarker === 'string' ? this.decimalMarker : MaskExpression.DOT; if ( - inputValue.indexOf(decimalMarker) > 0 && - !this.percentage(inputValue.substring(0, inputValue.indexOf(decimalMarker))) + processedValue.indexOf(decimalMarker) > 0 && + !this.percentage(processedValue.substring(0, processedValue.indexOf(decimalMarker))) ) { - let base: string = inputValue.substring(0, inputValue.indexOf(decimalMarker) - 1); + let base: string = processedValue.substring( + 0, + processedValue.indexOf(decimalMarker) - 1 + ); if ( this.allowNegativeNumbers && - inputValue.slice(cursor, cursor + 1) === MaskExpression.MINUS && + processedValue.slice(cursor, cursor + 1) === MaskExpression.MINUS && !backspaced ) { - base = inputValue.substring(0, inputValue.indexOf(decimalMarker)); + base = processedValue.substring(0, processedValue.indexOf(decimalMarker)); } - inputValue = `${base}${inputValue.substring( - inputValue.indexOf(decimalMarker), - inputValue.length + processedValue = `${base}${processedValue.substring( + processedValue.indexOf(decimalMarker), + processedValue.length )}`; } let value = ''; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions this.allowNegativeNumbers && - inputValue.slice(cursor, cursor + 1) === MaskExpression.MINUS - ? (value = `${MaskExpression.MINUS}${inputValue.slice(cursor + 1, cursor + inputValue.length)}`) - : (value = inputValue); + processedValue.slice(cursor, cursor + 1) === MaskExpression.MINUS + ? (value = `${MaskExpression.MINUS}${processedValue.slice(cursor + 1, cursor + processedValue.length)}`) + : (value = processedValue); if (this.percentage(value)) { - result = this._splitPercentZero(inputValue); + result = this._splitPercentZero(processedValue); } else { - result = this._splitPercentZero(inputValue.substring(0, inputValue.length - 1)); + result = this._splitPercentZero( + processedValue.substring(0, processedValue.length - 1) + ); } } else if (maskExpression.startsWith(MaskExpression.SEPARATOR)) { if ( - inputValue.match('[wа-яА-Я]') || - inputValue.match('[ЁёА-я]') || - inputValue.match('[a-z]|[A-Z]') || - inputValue.match(/[-@#!$%\\^&*()_£¬'+|~=`{}\]:";<>.?/]/) || - inputValue.match('[^A-Za-z0-9,]') + processedValue.match('[wа-яА-Я]') || + processedValue.match('[ЁёА-я]') || + processedValue.match('[a-z]|[A-Z]') || + processedValue.match(/[-@#!$%\\^&*()_£¬'+|~=`{}\]:";<>.?/]/) || + processedValue.match('[^A-Za-z0-9,]') ) { - inputValue = this._stripToDecimal(inputValue); + processedValue = this._stripToDecimal(processedValue); } + const precision: number = this.getPrecision(maskExpression); const decimalMarker = Array.isArray(this.decimalMarker) ? MaskExpression.DOT : this.decimalMarker; + if (precision === 0) { - inputValue = this.allowNegativeNumbers - ? inputValue.length > 2 && - inputValue[0] === MaskExpression.MINUS && - inputValue[1] === MaskExpression.NUMBER_ZERO && - inputValue[2] !== this.thousandSeparator && - inputValue[2] !== MaskExpression.COMMA && - inputValue[2] !== MaskExpression.DOT - ? '-' + inputValue.slice(2, inputValue.length) - : inputValue[0] === MaskExpression.NUMBER_ZERO && - inputValue.length > 1 && - inputValue[1] !== this.thousandSeparator && - inputValue[1] !== MaskExpression.COMMA && - inputValue[1] !== MaskExpression.DOT - ? inputValue.slice(1, inputValue.length) - : inputValue - : inputValue.length > 1 && - inputValue[0] === MaskExpression.NUMBER_ZERO && - inputValue[1] !== this.thousandSeparator && - inputValue[1] !== MaskExpression.COMMA && - inputValue[1] !== MaskExpression.DOT - ? inputValue.slice(1, inputValue.length) - : inputValue; + processedValue = this.allowNegativeNumbers + ? processedValue.length > 2 && + processedValue[0] === MaskExpression.MINUS && + processedValue[1] === MaskExpression.NUMBER_ZERO && + processedValue[2] !== this.thousandSeparator && + processedValue[2] !== MaskExpression.COMMA && + processedValue[2] !== MaskExpression.DOT + ? '-' + processedValue.slice(2, processedValue.length) + : processedValue[0] === MaskExpression.NUMBER_ZERO && + processedValue.length > 1 && + processedValue[1] !== this.thousandSeparator && + processedValue[1] !== MaskExpression.COMMA && + processedValue[1] !== MaskExpression.DOT + ? processedValue.slice(1, processedValue.length) + : processedValue + : processedValue.length > 1 && + processedValue[0] === MaskExpression.NUMBER_ZERO && + processedValue[1] !== this.thousandSeparator && + processedValue[1] !== MaskExpression.COMMA && + processedValue[1] !== MaskExpression.DOT + ? processedValue.slice(1, processedValue.length) + : processedValue; } else { - if (inputValue[0] === decimalMarker && inputValue.length > 1) { - inputValue = - MaskExpression.NUMBER_ZERO + inputValue.slice(0, inputValue.length + 1); + if (processedValue[0] === decimalMarker && processedValue.length > 1) { + processedValue = + MaskExpression.NUMBER_ZERO + + processedValue.slice(0, processedValue.length + 1); this.plusOnePosition = true; } if ( - inputValue[0] === MaskExpression.NUMBER_ZERO && - inputValue[1] !== decimalMarker && - inputValue[1] !== this.thousandSeparator + processedValue[0] === MaskExpression.NUMBER_ZERO && + processedValue[1] !== decimalMarker && + processedValue[1] !== this.thousandSeparator ) { - inputValue = - inputValue.length > 1 - ? inputValue.slice(0, 1) + + processedValue = + processedValue.length > 1 + ? processedValue.slice(0, 1) + decimalMarker + - inputValue.slice(1, inputValue.length + 1) - : inputValue; + processedValue.slice(1, processedValue.length + 1) + : processedValue; this.plusOnePosition = true; } if ( this.allowNegativeNumbers && - inputValue[0] === MaskExpression.MINUS && - (inputValue[1] === decimalMarker || - inputValue[1] === MaskExpression.NUMBER_ZERO) + processedValue[0] === MaskExpression.MINUS && + (processedValue[1] === decimalMarker || + processedValue[1] === MaskExpression.NUMBER_ZERO) ) { - inputValue = - inputValue[1] === decimalMarker && inputValue.length > 2 - ? inputValue.slice(0, 1) + + processedValue = + processedValue[1] === decimalMarker && processedValue.length > 2 + ? processedValue.slice(0, 1) + MaskExpression.NUMBER_ZERO + - inputValue.slice(1, inputValue.length) - : inputValue[1] === MaskExpression.NUMBER_ZERO && - inputValue.length > 2 && - inputValue[2] !== decimalMarker - ? inputValue.slice(0, 2) + + processedValue.slice(1, processedValue.length) + : processedValue[1] === MaskExpression.NUMBER_ZERO && + processedValue.length > 2 && + processedValue[2] !== decimalMarker + ? processedValue.slice(0, 2) + decimalMarker + - inputValue.slice(2, inputValue.length) - : inputValue; + processedValue.slice(2, processedValue.length) + : processedValue; this.plusOnePosition = true; } } if (backspaced) { - const inputValueAfterZero = inputValue.slice( - this._findFirstNonZeroDigitIndex(inputValue), - inputValue.length + const inputValueAfterZero = processedValue.slice( + this._findFirstNonZeroDigitIndex(processedValue), + processedValue.length ); const positionOfZeroOrDecimalMarker = - inputValue[position] === MaskExpression.NUMBER_ZERO || - inputValue[position] === decimalMarker; - const zeroIndexNumberZero = inputValue[0] === MaskExpression.NUMBER_ZERO; - const zeroIndexMinus = inputValue[0] === MaskExpression.MINUS; - const zeroIndexThousand = inputValue[0] === this.thousandSeparator; - const firstIndexDecimalMarker = inputValue[1] === decimalMarker; - const firstIndexNumberZero = inputValue[1] === MaskExpression.NUMBER_ZERO; - const secondIndexDecimalMarker = inputValue[2] === decimalMarker; + processedValue[processedPosition] === MaskExpression.NUMBER_ZERO || + processedValue[processedPosition] === decimalMarker; + const zeroIndexNumberZero = processedValue[0] === MaskExpression.NUMBER_ZERO; + const zeroIndexMinus = processedValue[0] === MaskExpression.MINUS; + const zeroIndexThousand = processedValue[0] === this.thousandSeparator; + const firstIndexDecimalMarker = processedValue[1] === decimalMarker; + const firstIndexNumberZero = processedValue[1] === MaskExpression.NUMBER_ZERO; + const secondIndexDecimalMarker = processedValue[2] === decimalMarker; if ( zeroIndexNumberZero && firstIndexDecimalMarker && positionOfZeroOrDecimalMarker && - position < 2 + processedPosition < 2 ) { - inputValue = inputValueAfterZero; + processedValue = inputValueAfterZero; } if ( zeroIndexMinus && firstIndexNumberZero && secondIndexDecimalMarker && positionOfZeroOrDecimalMarker && - position < 3 + processedPosition < 3 ) { - inputValue = MaskExpression.MINUS + inputValueAfterZero; + processedValue = MaskExpression.MINUS + inputValueAfterZero; } if ( inputValueAfterZero !== MaskExpression.MINUS && - ((position === 0 && (zeroIndexNumberZero || zeroIndexThousand)) || + ((processedPosition === 0 && (zeroIndexNumberZero || zeroIndexThousand)) || (this.allowNegativeNumbers && - position === 1 && + processedPosition === 1 && zeroIndexMinus && !firstIndexNumberZero)) ) { - inputValue = zeroIndexMinus + processedValue = zeroIndexMinus ? MaskExpression.MINUS + inputValueAfterZero : inputValueAfterZero; } @@ -326,12 +347,16 @@ export class NgxMaskApplierService { } const invalidCharRegexp = new RegExp('[' + invalidChars + ']'); - if (inputValue.match(invalidCharRegexp)) { - inputValue = inputValue.substring(0, inputValue.length - 1); + if (processedValue.match(invalidCharRegexp)) { + processedValue = processedValue.substring(0, processedValue.length - 1); } - inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker); - const strForSep: string = inputValue.replace( + processedValue = this.checkInputPrecision( + processedValue, + precision, + this.decimalMarker + ); + const strForSep: string = processedValue.replace( new RegExp(thousandSeparatorCharEscaped, 'g'), '' ); @@ -344,44 +369,55 @@ export class NgxMaskApplierService { ); const commaShift: number = - result.indexOf(MaskExpression.COMMA) - inputValue.indexOf(MaskExpression.COMMA); - const shiftStep: number = result.length - inputValue.length; + result.indexOf(MaskExpression.COMMA) - processedValue.indexOf(MaskExpression.COMMA); + const shiftStep: number = result.length - processedValue.length; - if (result[position - 1] === this.thousandSeparator && this.prefix && backspaced) { - position = position - 1; - } else if (shiftStep > 0 && result[position] !== this.thousandSeparator) { + if ( + (result[processedPosition - 1] === this.thousandSeparator || + result[processedPosition - this.prefix.length]) && + this.prefix && + backspaced + ) { + processedPosition = processedPosition - 1; + } else if (shiftStep > 0 && result[processedPosition] !== this.thousandSeparator) { backspaceShift = true; let _shift = 0; do { - this._shift.add(position + _shift); + this._shift.add(processedPosition + _shift); _shift++; } while (_shift < shiftStep); } else if ( - result[position - 1] === this.decimalMarker || + result[processedPosition - 1] === this.decimalMarker || shiftStep === -4 || shiftStep === -3 || - result[position] === this.thousandSeparator + result[processedPosition] === this.thousandSeparator ) { this._shift.clear(); - this._shift.add(position - 1); + this._shift.add(processedPosition - 1); } else if ( (commaShift !== 0 && - position > 0 && - !(result.indexOf(MaskExpression.COMMA) >= position && position > 3)) || - (!(result.indexOf(MaskExpression.DOT) >= position && position > 3) && + processedPosition > 0 && + !( + result.indexOf(MaskExpression.COMMA) >= processedPosition && + processedPosition > 3 + )) || + (!( + result.indexOf(MaskExpression.DOT) >= processedPosition && processedPosition > 3 + ) && shiftStep <= 0) ) { this._shift.clear(); backspaceShift = true; shift = shiftStep; - position += shiftStep; - this._shift.add(position); + processedPosition += shiftStep; + this._shift.add(processedPosition); } else { this._shift.clear(); } } else { for ( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion let i = 0, inputSymbol: string = inputArray[0]!; i < inputArray.length; i++, inputSymbol = inputArray[i] ?? MaskExpression.EMPTY_STRING @@ -438,7 +474,9 @@ export class NgxMaskApplierService { ) { if (maskExpression[cursor] === MaskExpression.HOURS) { if (this.apm ? Number(inputSymbol) > 9 : Number(inputSymbol) > 2) { - position = !this.leadZeroDateTime ? position + 1 : position; + processedPosition = !this.leadZeroDateTime + ? processedPosition + 1 + : processedPosition; cursor += 1; this._shiftStep(maskExpression, cursor, inputArray.length); i--; @@ -453,9 +491,9 @@ export class NgxMaskApplierService { this.apm ? (result.length === 1 && Number(result) > 1) || (result === '1' && Number(inputSymbol) > 2) || - (inputValue.slice(cursor - 1, cursor).length === 1 && - Number(inputValue.slice(cursor - 1, cursor)) > 2) || - (inputValue.slice(cursor - 1, cursor) === '1' && + (processedValue.slice(cursor - 1, cursor).length === 1 && + Number(processedValue.slice(cursor - 1, cursor)) > 2) || + (processedValue.slice(cursor - 1, cursor) === '1' && Number(inputSymbol) > 2) : (result === '2' && Number(inputSymbol) > 3) || ((result.slice(cursor - 2, cursor) === '2' || @@ -465,7 +503,7 @@ export class NgxMaskApplierService { Number(inputSymbol) > 3 && cursor > 10) ) { - position = position + 1; + processedPosition = processedPosition + 1; cursor += 1; i--; continue; @@ -476,7 +514,9 @@ export class NgxMaskApplierService { maskExpression[cursor] === MaskExpression.SECOND ) { if (Number(inputSymbol) > 5) { - position = !this.leadZeroDateTime ? position + 1 : position; + processedPosition = !this.leadZeroDateTime + ? processedPosition + 1 + : processedPosition; cursor += 1; this._shiftStep(maskExpression, cursor, inputArray.length); i--; @@ -487,18 +527,21 @@ export class NgxMaskApplierService { } } const daysCount = 31; - const inputValueCursor = inputValue[cursor] as string; - const inputValueCursorPlusOne = inputValue[cursor + 1] as string; - const inputValueCursorPlusTwo = inputValue[cursor + 2] as string; - const inputValueCursorMinusOne = inputValue[cursor - 1] as string; - const inputValueCursorMinusTwo = inputValue[cursor - 2] as string; - const inputValueSliceMinusThreeMinusOne = inputValue.slice( + const inputValueCursor = processedValue[cursor] as string; + const inputValueCursorPlusOne = processedValue[cursor + 1] as string; + const inputValueCursorPlusTwo = processedValue[cursor + 2] as string; + const inputValueCursorMinusOne = processedValue[cursor - 1] as string; + const inputValueCursorMinusTwo = processedValue[cursor - 2] as string; + const inputValueSliceMinusThreeMinusOne = processedValue.slice( cursor - 3, cursor - 1 ); - const inputValueSliceMinusOnePlusOne = inputValue.slice(cursor - 1, cursor + 1); - const inputValueSliceCursorPlusTwo = inputValue.slice(cursor, cursor + 2); - const inputValueSliceMinusTwoCursor = inputValue.slice(cursor - 2, cursor); + const inputValueSliceMinusOnePlusOne = processedValue.slice( + cursor - 1, + cursor + 1 + ); + const inputValueSliceCursorPlusTwo = processedValue.slice(cursor, cursor + 2); + const inputValueSliceMinusTwoCursor = processedValue.slice(cursor - 2, cursor); if (maskExpression[cursor] === MaskExpression.DAY) { const maskStartWithMonth = maskExpression.slice(0, 2) === MaskExpression.MONTHS; @@ -517,12 +560,16 @@ export class NgxMaskApplierService { this.specialCharacters.includes(inputValueCursorPlusTwo)) || this.specialCharacters.includes(inputValueCursor) : Number(inputValueSliceCursorPlusTwo) > daysCount || - this.specialCharacters.includes(inputValueCursorPlusOne)) + (this.specialCharacters.includes(inputValueCursorPlusOne) && + !backspaced)) ) { - position = !this.leadZeroDateTime ? position + 1 : position; + processedPosition = !this.leadZeroDateTime + ? processedPosition + 1 + : processedPosition; cursor += 1; this._shiftStep(maskExpression, cursor, inputArray.length); i--; + if (this.leadZeroDateTime) { result += '0'; } @@ -589,7 +636,9 @@ export class NgxMaskApplierService { day2monthInput || (day2monthInputDot && !this.leadZeroDateTime) ) { - position = !this.leadZeroDateTime ? position + 1 : position; + processedPosition = !this.leadZeroDateTime + ? processedPosition + 1 + : processedPosition; cursor += 1; this._shiftStep(maskExpression, cursor, inputArray.length); i--; @@ -687,7 +736,7 @@ export class NgxMaskApplierService { ) { result += maskExpression[maskExpression.length - 1]; } - let newPosition: number = position + 1; + let newPosition: number = processedPosition + 1; while (this._shift.has(newPosition)) { shift++; @@ -697,7 +746,7 @@ export class NgxMaskApplierService { let actualShift: number = justPasted && !maskExpression.startsWith(MaskExpression.SEPARATOR) ? cursor - : this._shift.has(position) + : this._shift.has(processedPosition) ? shift : 0; if (stepBack) { @@ -722,12 +771,12 @@ export class NgxMaskApplierService { } const isSpecialCharacterMaskFirstSymbol = - inputValue.length === 1 && + processedValue.length === 1 && this.specialCharacters.includes(maskExpression[0] as string) && - inputValue !== maskExpression[0]; + processedValue !== maskExpression[0]; if ( - !this._checkSymbolMask(inputValue, maskExpression[1] as string) && + !this._checkSymbolMask(processedValue, maskExpression[1] as string) && isSpecialCharacterMaskFirstSymbol ) { return ''; @@ -802,7 +851,7 @@ export class NgxMaskApplierService { res = res.replace(rgx, '$1' + thousandSeparatorChar + '$2'); } - if (precision === undefined) { + if (typeof precision === 'undefined') { return res + decimals; } else if (precision === 0) { return res; @@ -848,37 +897,47 @@ export class NgxMaskApplierService { private checkInputPrecision = ( inputValue: string, precision: number, - decimalMarker: IConfig['decimalMarker'] + decimalMarker: NgxMaskConfig['decimalMarker'] ): string => { + let processedInputValue = inputValue; + let processedDecimalMarker = decimalMarker; + if (precision < Infinity) { // TODO need think about decimalMarker - if (Array.isArray(decimalMarker)) { - const marker = decimalMarker.find((dm) => dm !== this.thousandSeparator); + if (Array.isArray(processedDecimalMarker)) { + const marker = processedDecimalMarker.find((dm) => dm !== this.thousandSeparator); - decimalMarker = marker ? marker : decimalMarker[0]; + processedDecimalMarker = marker ? marker : processedDecimalMarker[0]; } const precisionRegEx = new RegExp( - this._charToRegExpExpression(decimalMarker) + `\\d{${precision}}.*$` + this._charToRegExpExpression(processedDecimalMarker) + `\\d{${precision}}.*$` ); - const precisionMatch: RegExpMatchArray | null = inputValue.match(precisionRegEx); + const precisionMatch: RegExpMatchArray | null = + processedInputValue.match(precisionRegEx); const precisionMatchLength: number = (precisionMatch && precisionMatch[0]?.length) ?? 0; if (precisionMatchLength - 1 > precision) { const diff = precisionMatchLength - 1 - precision; - inputValue = inputValue.substring(0, inputValue.length - diff); + processedInputValue = processedInputValue.substring( + 0, + processedInputValue.length - diff + ); } if ( precision === 0 && this._compareOrIncludes( - inputValue[inputValue.length - 1], - decimalMarker, + processedInputValue[processedInputValue.length - 1], + processedDecimalMarker, this.thousandSeparator ) ) { - inputValue = inputValue.substring(0, inputValue.length - 1); + processedInputValue = processedInputValue.substring( + 0, + processedInputValue.length - 1 + ); } } - return inputValue; + return processedInputValue; }; private _stripToDecimal(str: string): string { diff --git a/projects/ngx-mask-lib/src/lib/ngx-mask.config.ts b/projects/ngx-mask-lib/src/lib/ngx-mask.config.ts index 5bf14e3f..1732356b 100644 --- a/projects/ngx-mask-lib/src/lib/ngx-mask.config.ts +++ b/projects/ngx-mask-lib/src/lib/ngx-mask.config.ts @@ -5,7 +5,7 @@ export type InputTransformFn = (value: unknown) => string | number; export type OutputTransformFn = (value: string | number | undefined | null) => unknown; -export interface IConfig { +export type NgxMaskConfig = { suffix: string; prefix: string; thousandSeparator: string; @@ -17,7 +17,7 @@ export interface IConfig { shownMaskExpression: string; specialCharacters: string[] | readonly string[]; dropSpecialCharacters: boolean | string[] | readonly string[]; - hiddenInput: boolean | undefined; + hiddenInput: boolean; validation: boolean; separatorLimit: string; apm: boolean; @@ -37,14 +37,14 @@ export interface IConfig { symbol?: string; } >; -} +}; -export type optionsConfig = Partial; -export const NGX_MASK_CONFIG = new InjectionToken('ngx-mask config'); -export const NEW_CONFIG = new InjectionToken('new ngx-mask config'); -export const INITIAL_CONFIG = new InjectionToken('initial ngx-mask config'); +export type NgxMaskOptions = Partial; +export const NGX_MASK_CONFIG = new InjectionToken('ngx-mask config'); +export const NEW_CONFIG = new InjectionToken('new ngx-mask config'); +export const INITIAL_CONFIG = new InjectionToken('initial ngx-mask config'); -export const initialConfig: IConfig = { +export const initialConfig: NgxMaskConfig = { suffix: '', prefix: '', thousandSeparator: ' ', @@ -54,12 +54,11 @@ export const initialConfig: IConfig = { showMaskTyped: false, placeHolderCharacter: '_', dropSpecialCharacters: true, - hiddenInput: undefined, + hiddenInput: false, shownMaskExpression: '', separatorLimit: '', allowNegativeNumbers: false, validation: true, - specialCharacters: ['-', '/', '(', ')', '.', ':', ' ', '+', ',', '@', '[', ']', '"', "'"], leadZeroDateTime: false, apm: false, diff --git a/projects/ngx-mask-lib/src/lib/ngx-mask.directive.ts b/projects/ngx-mask-lib/src/lib/ngx-mask.directive.ts index 2c1c6fac..67071323 100644 --- a/projects/ngx-mask-lib/src/lib/ngx-mask.directive.ts +++ b/projects/ngx-mask-lib/src/lib/ngx-mask.directive.ts @@ -1,25 +1,17 @@ import { DOCUMENT } from '@angular/common'; -import { - Directive, - EventEmitter, - HostListener, - Input, - OnChanges, - Output, - SimpleChanges, - inject, -} from '@angular/core'; -import { +import type { OnChanges, SimpleChanges } from '@angular/core'; +import { Directive, EventEmitter, HostListener, Input, Output, inject } from '@angular/core'; +import type { ControlValueAccessor, FormControl, - NG_VALIDATORS, - NG_VALUE_ACCESSOR, ValidationErrors, Validator, } from '@angular/forms'; +import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms'; -import { CustomKeyboardEvent } from './custom-keyboard-event'; -import { IConfig, NGX_MASK_CONFIG, timeMasks, withoutValidation } from './ngx-mask.config'; +import type { CustomKeyboardEvent } from './custom-keyboard-event'; +import type { NgxMaskConfig } from './ngx-mask.config'; +import { NGX_MASK_CONFIG, timeMasks, withoutValidation } from './ngx-mask.config'; import { NgxMaskService } from './ngx-mask.service'; import { MaskExpression } from './ngx-mask-expression.enum'; @@ -44,53 +36,53 @@ import { MaskExpression } from './ngx-mask-expression.enum'; export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Validator { @Input('mask') public maskExpression: string | undefined | null = ''; - @Input() public specialCharacters: IConfig['specialCharacters'] = []; + @Input() public specialCharacters: NgxMaskConfig['specialCharacters'] = []; - @Input() public patterns: IConfig['patterns'] = {}; + @Input() public patterns: NgxMaskConfig['patterns'] = {}; - @Input() public prefix: IConfig['prefix'] = ''; + @Input() public prefix: NgxMaskConfig['prefix'] = ''; - @Input() public suffix: IConfig['suffix'] = ''; + @Input() public suffix: NgxMaskConfig['suffix'] = ''; - @Input() public thousandSeparator: IConfig['thousandSeparator'] = ' '; + @Input() public thousandSeparator: NgxMaskConfig['thousandSeparator'] = ' '; - @Input() public decimalMarker: IConfig['decimalMarker'] = '.'; + @Input() public decimalMarker: NgxMaskConfig['decimalMarker'] = '.'; - @Input() public dropSpecialCharacters: IConfig['dropSpecialCharacters'] | null = null; + @Input() public dropSpecialCharacters: NgxMaskConfig['dropSpecialCharacters'] | null = null; - @Input() public hiddenInput: IConfig['hiddenInput'] | null = null; + @Input() public hiddenInput: NgxMaskConfig['hiddenInput'] | null = null; - @Input() public showMaskTyped: IConfig['showMaskTyped'] | null = null; + @Input() public showMaskTyped: NgxMaskConfig['showMaskTyped'] | null = null; - @Input() public placeHolderCharacter: IConfig['placeHolderCharacter'] | null = null; + @Input() public placeHolderCharacter: NgxMaskConfig['placeHolderCharacter'] | null = null; - @Input() public shownMaskExpression: IConfig['shownMaskExpression'] | null = null; + @Input() public shownMaskExpression: NgxMaskConfig['shownMaskExpression'] | null = null; - @Input() public showTemplate: IConfig['showTemplate'] | null = null; + @Input() public showTemplate: NgxMaskConfig['showTemplate'] | null = null; - @Input() public clearIfNotMatch: IConfig['clearIfNotMatch'] | null = null; + @Input() public clearIfNotMatch: NgxMaskConfig['clearIfNotMatch'] | null = null; - @Input() public validation: IConfig['validation'] | null = null; + @Input() public validation: NgxMaskConfig['validation'] | null = null; - @Input() public separatorLimit: IConfig['separatorLimit'] | null = null; + @Input() public separatorLimit: NgxMaskConfig['separatorLimit'] | null = null; - @Input() public allowNegativeNumbers: IConfig['allowNegativeNumbers'] | null = null; + @Input() public allowNegativeNumbers: NgxMaskConfig['allowNegativeNumbers'] | null = null; - @Input() public leadZeroDateTime: IConfig['leadZeroDateTime'] | null = null; + @Input() public leadZeroDateTime: NgxMaskConfig['leadZeroDateTime'] | null = null; - @Input() public leadZero: IConfig['leadZero'] | null = null; + @Input() public leadZero: NgxMaskConfig['leadZero'] | null = null; - @Input() public triggerOnMaskChange: IConfig['triggerOnMaskChange'] | null = null; + @Input() public triggerOnMaskChange: NgxMaskConfig['triggerOnMaskChange'] | null = null; - @Input() public apm: IConfig['apm'] | null = null; + @Input() public apm: NgxMaskConfig['apm'] | null = null; - @Input() public inputTransformFn: IConfig['inputTransformFn'] | null = null; + @Input() public inputTransformFn: NgxMaskConfig['inputTransformFn'] | null = null; - @Input() public outputTransformFn: IConfig['outputTransformFn'] | null = null; + @Input() public outputTransformFn: NgxMaskConfig['outputTransformFn'] | null = null; - @Input() public keepCharacterPositions: IConfig['keepCharacterPositions'] | null = null; + @Input() public keepCharacterPositions: NgxMaskConfig['keepCharacterPositions'] | null = null; - @Output() public maskFilled: IConfig['maskFilled'] = new EventEmitter(); + @Output() public maskFilled: NgxMaskConfig['maskFilled'] = new EventEmitter(); private _maskValue = ''; @@ -115,11 +107,12 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida public _maskService = inject(NgxMaskService, { self: true }); - protected _config = inject(NGX_MASK_CONFIG); + protected _config = inject(NGX_MASK_CONFIG); - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-empty-function public onChange = (_: any) => {}; + // eslint-disable-next-line @typescript-eslint/no-empty-function public onTouch = () => {}; public ngOnChanges(changes: SimpleChanges): void { @@ -264,14 +257,16 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida } public validate({ value }: FormControl): ValidationErrors | null { + const processedValue: string = typeof value === 'number' ? String(value) : value; + if (!this._maskService.validation || !this._maskValue) { return null; } if (this._maskService.ipError) { - return this._createValidationError(value); + return this._createValidationError(processedValue); } if (this._maskService.cpfCnpjError) { - return this._createValidationError(value); + return this._createValidationError(processedValue); } if (this._maskValue.startsWith(MaskExpression.SEPARATOR)) { return null; @@ -283,10 +278,10 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida return null; } if (timeMasks.includes(this._maskValue)) { - return this._validateTime(value); + return this._validateTime(processedValue); } - if (value && value.toString().length >= 1) { + if (processedValue && processedValue.length >= 1) { let counterOfOpt = 0; if ( @@ -298,9 +293,9 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida this._maskValue.indexOf(MaskExpression.CURLY_BRACKETS_RIGHT) ); - return lengthInsideCurlyBrackets === String(value.length) + return lengthInsideCurlyBrackets === String(processedValue.length) ? null - : this._createValidationError(value); + : this._createValidationError(processedValue); } if (this._maskValue.startsWith(MaskExpression.PERCENT)) { return null; @@ -318,7 +313,7 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida } if ( this._maskValue.indexOf(key) !== -1 && - value.toString().length >= this._maskValue.indexOf(key) + processedValue.length >= this._maskValue.indexOf(key) ) { return null; } @@ -329,19 +324,16 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida } if ( (this._maskValue.indexOf(MaskExpression.SYMBOL_STAR) > 1 && - value.toString().length < - this._maskValue.indexOf(MaskExpression.SYMBOL_STAR)) || + processedValue.length < this._maskValue.indexOf(MaskExpression.SYMBOL_STAR)) || (this._maskValue.indexOf(MaskExpression.SYMBOL_QUESTION) > 1 && - value.toString().length < - this._maskValue.indexOf(MaskExpression.SYMBOL_QUESTION)) + processedValue.length < this._maskValue.indexOf(MaskExpression.SYMBOL_QUESTION)) ) { - return this._createValidationError(value); + return this._createValidationError(processedValue); } if ( this._maskValue.indexOf(MaskExpression.SYMBOL_STAR) === -1 || this._maskValue.indexOf(MaskExpression.SYMBOL_QUESTION) === -1 ) { - value = typeof value === 'number' ? String(value) : value; const array = this._maskValue.split('*'); const length: number = this._maskService.dropSpecialCharacters ? this._maskValue.length - @@ -352,8 +344,8 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida : this._maskValue.length - counterOfOpt; if (array.length === 1) { - if (value.toString().length < length) { - return this._createValidationError(value); + if (processedValue.length < length) { + return this._createValidationError(processedValue); } } if (array.length > 1) { @@ -361,13 +353,13 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida if ( lastIndexArray && this._maskService.specialCharacters.includes(lastIndexArray[0] as string) && - String(value).includes(lastIndexArray[0] ?? '') && + String(processedValue).includes(lastIndexArray[0] ?? '') && !this.dropSpecialCharacters ) { const special = value.split(lastIndexArray[0]); return special[special.length - 1].length === lastIndexArray.length - 1 ? null - : this._createValidationError(value); + : this._createValidationError(processedValue); } else if ( ((lastIndexArray && !this._maskService.specialCharacters.includes( @@ -375,11 +367,11 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida )) || !lastIndexArray || this._maskService.dropSpecialCharacters) && - value.length >= length - 1 + processedValue.length >= length - 1 ) { return null; } else { - return this._createValidationError(value); + return this._createValidationError(processedValue); } } } @@ -410,7 +402,9 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida public onModelChange(value: string | undefined | null | number): void { // on form reset we need to update the actualValue if ( - (value === MaskExpression.EMPTY_STRING || value === null || value === undefined) && + (value === MaskExpression.EMPTY_STRING || + value === null || + typeof value === 'undefined') && this._maskService.actualValue ) { this._maskService.actualValue = this._maskService.getActualValue( @@ -422,7 +416,9 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida @HostListener('input', ['$event']) public onInput(e: CustomKeyboardEvent): void { // If IME is composing text, we wait for the composed text. - if (this._isComposing) return; + if (this._isComposing) { + return; + } const el: HTMLInputElement = e.target as HTMLInputElement; const transformedValue = this._maskService.inputTransformFn(el.value); if (el.type !== 'number') { @@ -654,6 +650,7 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida el.setSelectionRange(positionToApply, positionToApply); this._position = null; } else { + // eslint-disable-next-line no-console console.warn( 'Ngx-mask writeValue work with string | number, your current value:', typeof transformedValue @@ -733,7 +730,6 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida el.selectionStart !== null && el.selectionStart === el.selectionEnd && el.selectionStart > this._maskService.prefix.length && - // eslint-disable-next-line (e as any).keyCode !== 38 ) { if (this._maskService.showMaskTyped && !this.keepCharacterPositions) { @@ -792,7 +788,9 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida if (this._isComposing) { // User finalize their choice from IME composition, so trigger onInput() for the composed text. - if (e.key === 'Enter') this.onCompositionEnd(e); + if (e.key === 'Enter') { + this.onCompositionEnd(e); + } return; } @@ -894,31 +892,30 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida /** It writes the value in the input */ public async writeValue(controlValue: unknown): Promise { - if (typeof controlValue === 'object' && controlValue !== null && 'value' in controlValue) { - if ('disable' in controlValue) { - this.setDisabledState(Boolean(controlValue.disable)); + let value = controlValue; + if (typeof value === 'object' && value !== null && 'value' in value) { + if ('disable' in value) { + this.setDisabledState(Boolean(value.disable)); } - controlValue = controlValue.value; + value = value.value; } - if (controlValue !== null) { - controlValue = this.inputTransformFn - ? this.inputTransformFn(controlValue) - : controlValue; + if (value !== null) { + value = this.inputTransformFn ? this.inputTransformFn(value) : value; } if ( - typeof controlValue === 'string' || - typeof controlValue === 'number' || - controlValue === null || - controlValue === undefined + typeof value === 'string' || + typeof value === 'number' || + value === null || + typeof value === 'undefined' ) { - if (controlValue === null || controlValue === undefined || controlValue === '') { + if (value === null || typeof value === 'undefined' || value === '') { this._maskService._currentValue = ''; this._maskService._previousValue = ''; } - let inputValue: string | number | null | undefined = controlValue; + let inputValue: string | number | null | undefined = value; if ( typeof inputValue === 'number' || this._maskValue.startsWith(MaskExpression.SEPARATOR) @@ -979,26 +976,26 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida (this._maskService.prefix || this._maskService.showMaskTyped)) ) { // Let the service we know we are writing value so that triggering onChange function won't happen during applyMask - typeof this.inputTransformFn !== 'function' - ? (this._maskService.writingValue = true) - : ''; - + if (typeof this.inputTransformFn !== 'function') { + this._maskService.writingValue = true; + } this._maskService.formElementProperty = [ 'value', this._maskService.applyMask(inputValue, this._maskService.maskExpression), ]; // Let the service know we've finished writing value - typeof this.inputTransformFn !== 'function' - ? (this._maskService.writingValue = false) - : ''; + if (typeof this.inputTransformFn !== 'function') { + this._maskService.writingValue = false; + } } else { this._maskService.formElementProperty = ['value', inputValue]; } this._inputValue = inputValue; } else { + // eslint-disable-next-line no-console console.warn( 'Ngx-mask writeValue work with string | number, your current value:', - typeof controlValue + typeof value ); } } @@ -1036,7 +1033,6 @@ export class NgxMaskDirective implements ControlValueAccessor, OnChanges, Valida this._maskService.formElementProperty = ['disabled', isDisabled]; } - // eslint-disable-next-line @typescript-eslint/no-explicit-any private _applyMask(): any { this._maskService.maskExpression = this._maskService._repeatPatternSymbols( this._maskValue || '' diff --git a/projects/ngx-mask-lib/src/lib/ngx-mask.pipe.ts b/projects/ngx-mask-lib/src/lib/ngx-mask.pipe.ts index 3f75e487..0e141dc5 100644 --- a/projects/ngx-mask-lib/src/lib/ngx-mask.pipe.ts +++ b/projects/ngx-mask-lib/src/lib/ngx-mask.pipe.ts @@ -1,6 +1,8 @@ -import { inject, Pipe, PipeTransform } from '@angular/core'; +import type { PipeTransform } from '@angular/core'; +import { inject, Pipe } from '@angular/core'; -import { IConfig, NGX_MASK_CONFIG } from './ngx-mask.config'; +import type { NgxMaskConfig } from './ngx-mask.config'; +import { NGX_MASK_CONFIG } from './ngx-mask.config'; import { NgxMaskService } from './ngx-mask.service'; import { MaskExpression } from './ngx-mask-expression.enum'; @@ -10,7 +12,7 @@ import { MaskExpression } from './ngx-mask-expression.enum'; standalone: true, }) export class NgxMaskPipe implements PipeTransform { - private readonly defaultOptions = inject(NGX_MASK_CONFIG); + private readonly defaultOptions = inject(NGX_MASK_CONFIG); private readonly _maskService = inject(NgxMaskService); @@ -21,8 +23,10 @@ export class NgxMaskPipe implements PipeTransform { public transform( value: string | number, mask: string, - { patterns, ...config }: Partial = {} as Partial + { patterns, ...config }: Partial = {} as Partial ): string { + let processedValue: string | number = value; + const currentConfig = { maskExpression: mask, ...this.defaultOptions, @@ -32,28 +36,32 @@ export class NgxMaskPipe implements PipeTransform { ...patterns, }, }; - Object.entries(currentConfig).forEach(([key, value]) => { - //eslint-disable-next-line @typescript-eslint/no-explicit-any - (this._maskService as any)[key] = value; + + Object.entries(currentConfig).forEach(([key, val]) => { + (this._maskService as any)[key] = val; }); + if (mask.includes('||')) { - if (mask.split('||').length > 1) { - this._maskExpressionArray = mask.split('||').sort((a: string, b: string) => { - return a.length - b.length; - }); - this._setMask(value as string); - return this._maskService.applyMask(`${value}`, this.mask); + const maskParts = mask.split('||'); + if (maskParts.length > 1) { + this._maskExpressionArray = maskParts.sort( + (a: string, b: string) => a.length - b.length + ); + this._setMask(processedValue as string); + return this._maskService.applyMask(`${processedValue}`, this.mask); } else { this._maskExpressionArray = []; - return this._maskService.applyMask(`${value}`, this.mask); + return this._maskService.applyMask(`${processedValue}`, this.mask); } } + if (mask.includes(MaskExpression.CURLY_BRACKETS_LEFT)) { return this._maskService.applyMask( - `${value}`, + `${processedValue}`, this._maskService._repeatPatternSymbols(mask) ); } + if (mask.startsWith(MaskExpression.SEPARATOR)) { if (config.decimalMarker) { this._maskService.decimalMarker = config.decimalMarker; @@ -65,30 +73,42 @@ export class NgxMaskPipe implements PipeTransform { this._maskService.leadZero = config.leadZero; } - value = String(value); + processedValue = String(processedValue); const localeDecimalMarker = this._maskService.currentLocaleDecimalMarker(); + if (!Array.isArray(this._maskService.decimalMarker)) { - value = + processedValue = this._maskService.decimalMarker !== localeDecimalMarker - ? value.replace(localeDecimalMarker, this._maskService.decimalMarker) - : value; + ? (processedValue as string).replace( + localeDecimalMarker, + this._maskService.decimalMarker + ) + : processedValue; } + if ( this._maskService.leadZero && - value && + processedValue && this._maskService.dropSpecialCharacters !== false ) { - value = this._maskService._checkPrecision(mask, value as string); + processedValue = this._maskService._checkPrecision(mask, processedValue as string); } + if (this._maskService.decimalMarker === MaskExpression.COMMA) { - value = value.toString().replace(MaskExpression.DOT, MaskExpression.COMMA); + processedValue = (processedValue as string).replace( + MaskExpression.DOT, + MaskExpression.COMMA + ); } + this._maskService.isNumberValue = true; } - if (value === null || value === undefined) { + + if (processedValue === null || typeof processedValue === 'undefined') { return this._maskService.applyMask('', mask); } - return this._maskService.applyMask(`${value}`, mask); + + return this._maskService.applyMask(`${processedValue}`, mask); } private _setMask(value: string) { diff --git a/projects/ngx-mask-lib/src/lib/ngx-mask.providers.ts b/projects/ngx-mask-lib/src/lib/ngx-mask.providers.ts index 8d7a5724..30f4c7d5 100644 --- a/projects/ngx-mask-lib/src/lib/ngx-mask.providers.ts +++ b/projects/ngx-mask-lib/src/lib/ngx-mask.providers.ts @@ -1,27 +1,23 @@ -import { EnvironmentProviders, inject, makeEnvironmentProviders, Provider } from '@angular/core'; +import type { EnvironmentProviders, Provider } from '@angular/core'; +import { inject, makeEnvironmentProviders } from '@angular/core'; -import { - NGX_MASK_CONFIG, - INITIAL_CONFIG, - initialConfig, - NEW_CONFIG, - optionsConfig, -} from './ngx-mask.config'; +import type { NgxMaskOptions } from './ngx-mask.config'; +import { NGX_MASK_CONFIG, INITIAL_CONFIG, initialConfig, NEW_CONFIG } from './ngx-mask.config'; import { NgxMaskService } from './ngx-mask.service'; /** * @internal */ -function _configFactory(): optionsConfig { - const initConfig = inject(INITIAL_CONFIG); - const configValue = inject optionsConfig)>(NEW_CONFIG); +function _configFactory(): NgxMaskOptions { + const initConfig = inject(INITIAL_CONFIG); + const configValue = inject NgxMaskOptions)>(NEW_CONFIG); return configValue instanceof Function ? { ...initConfig, ...configValue() } : { ...initConfig, ...configValue }; } -export function provideNgxMask(configValue?: optionsConfig | (() => optionsConfig)): Provider[] { +export function provideNgxMask(configValue?: NgxMaskOptions | (() => NgxMaskOptions)): Provider[] { return [ { provide: NEW_CONFIG, @@ -40,7 +36,7 @@ export function provideNgxMask(configValue?: optionsConfig | (() => optionsConfi } export function provideEnvironmentNgxMask( - configValue?: optionsConfig | (() => optionsConfig) + configValue?: NgxMaskOptions | (() => NgxMaskOptions) ): EnvironmentProviders { return makeEnvironmentProviders(provideNgxMask(configValue)); } diff --git a/projects/ngx-mask-lib/src/lib/ngx-mask.service.ts b/projects/ngx-mask-lib/src/lib/ngx-mask.service.ts index 55fa078a..64f3090f 100644 --- a/projects/ngx-mask-lib/src/lib/ngx-mask.service.ts +++ b/projects/ngx-mask-lib/src/lib/ngx-mask.service.ts @@ -1,7 +1,8 @@ import { ElementRef, inject, Injectable, Renderer2 } from '@angular/core'; import { DOCUMENT } from '@angular/common'; -import { NGX_MASK_CONFIG, IConfig } from './ngx-mask.config'; +import type { NgxMaskConfig } from './ngx-mask.config'; +import { NGX_MASK_CONFIG } from './ngx-mask.config'; import { NgxMaskApplierService } from './ngx-mask-applier.service'; import { MaskExpression } from './ngx-mask-expression.enum'; @@ -36,14 +37,14 @@ export class NgxMaskService extends NgxMaskApplierService { private _end!: number; - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-empty-function public onChange = (_: any) => {}; public readonly _elementRef = inject(ElementRef, { optional: true }); private readonly document = inject(DOCUMENT); - protected override _config = inject(NGX_MASK_CONFIG); + protected override _config = inject(NGX_MASK_CONFIG); private readonly _renderer = inject(Renderer2, { optional: true }); @@ -53,7 +54,7 @@ export class NgxMaskService extends NgxMaskApplierService { position = 0, justPasted = false, backspaced = false, - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-empty-function cb: (...args: any[]) => any = () => {} ): string { if (!maskExpression) { @@ -78,17 +79,17 @@ export class NgxMaskService extends NgxMaskApplierService { ? (inputValue[this.selStart] ?? MaskExpression.EMPTY_STRING) : MaskExpression.EMPTY_STRING; let newInputValue = ''; - if (this.hiddenInput !== undefined && !this.writingValue) { + let newPosition = position; + if (this.hiddenInput && !this.writingValue) { let actualResult: string[] = inputValue && inputValue.length === 1 ? inputValue.split(MaskExpression.EMPTY_STRING) : this.actualValue.split(MaskExpression.EMPTY_STRING); - // eslint-disable @typescript-eslint/no-unused-expressions - if (typeof this.selStart === 'object' && typeof this.selEnd === 'object') { this.selStart = Number(this.selStart); this.selEnd = Number(this.selEnd); } else { + // eslint-disable-next-line no-unused-expressions,@typescript-eslint/no-unused-expressions inputValue !== MaskExpression.EMPTY_STRING && actualResult.length ? typeof this.selStart === 'number' && typeof this.selEnd === 'number' ? inputValue.length > actualResult.length @@ -103,12 +104,9 @@ export class NgxMaskService extends NgxMaskApplierService { : null : (actualResult = []); } - if (this.showMaskTyped) { - if (!this.hiddenInput) { - inputValue = this.removeMask(inputValue); - } + if (this.showMaskTyped && !this.hiddenInput) { + newInputValue = this.removeMask(inputValue); } - // eslint-enable @typescript-eslint/no-unused-expressions newInputValue = this.actualValue.length && actualResult.length <= inputValue.length ? this.shiftTypedSymbols(actualResult.join(MaskExpression.EMPTY_STRING)) @@ -120,18 +118,24 @@ export class NgxMaskService extends NgxMaskApplierService { if ( backspaced && this.specialCharacters.indexOf( - this.maskExpression[position] ?? MaskExpression.EMPTY_STRING + this.maskExpression[newPosition] ?? MaskExpression.EMPTY_STRING ) !== -1 && this.showMaskTyped && !this.prefix ) { newInputValue = this._currentValue; } - if (this.deletedSpecialCharacter && position) { - if (this.specialCharacters.includes(this.actualValue.slice(position, position + 1))) { - position = position + 1; - } else if (maskExpression.slice(position - 1, position + 1) !== MaskExpression.MONTHS) { - position = position - 2; + if (this.deletedSpecialCharacter && newPosition) { + if ( + this.specialCharacters.includes( + this.actualValue.slice(newPosition, newPosition + 1) + ) + ) { + newPosition = newPosition + 1; + } else if ( + maskExpression.slice(newPosition - 1, newPosition + 1) !== MaskExpression.MONTHS + ) { + newPosition = newPosition - 2; } this.deletedSpecialCharacter = false; @@ -141,7 +145,7 @@ export class NgxMaskService extends NgxMaskApplierService { this.placeHolderCharacter.length === 1 && !this.leadZeroDateTime ) { - inputValue = this.removeMask(inputValue); + newInputValue = this.removeMask(inputValue); } if (this.maskChanged) { @@ -170,7 +174,7 @@ export class NgxMaskService extends NgxMaskApplierService { const result: string = super.applyMask( newInputValue, maskExpression, - position, + newPosition, justPasted, backspaced, cb @@ -205,6 +209,7 @@ export class NgxMaskService extends NgxMaskApplierService { (this._previousValue === this._currentValue && justPasted); } + // eslint-disable-next-line no-unused-expressions,@typescript-eslint/no-unused-expressions this._emitValue ? this.writingValue && this.triggerOnMaskChange ? requestAnimationFrame(() => this.formControlResult(result)) @@ -250,7 +255,7 @@ export class NgxMaskService extends NgxMaskApplierService { position: number, justPasted: boolean, backspaced: boolean, - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-empty-function cb: (...args: any[]) => any = () => {} ): void { const formElement = this._elementRef?.nativeElement; @@ -426,6 +431,7 @@ export class NgxMaskService extends NgxMaskApplierService { return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`; } const arr: string[] = []; + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < inputVal.length; i++) { const value = inputVal[i] ?? MaskExpression.EMPTY_STRING; if (!value) { @@ -467,6 +473,7 @@ export class NgxMaskService extends NgxMaskApplierService { return cpf; } const arr: string[] = []; + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < inputVal.length; i++) { const value = inputVal[i] ?? MaskExpression.EMPTY_STRING; if (!value) { @@ -524,6 +531,7 @@ export class NgxMaskService extends NgxMaskApplierService { */ private formControlResult(inputValue: string): void { if (this.writingValue || (!this.triggerOnMaskChange && this.maskChanged)) { + // eslint-disable-next-line no-unused-expressions,@typescript-eslint/no-unused-expressions this.triggerOnMaskChange && this.maskChanged ? this.onChange( this.outputTransformFn( @@ -652,28 +660,30 @@ export class NgxMaskService extends NgxMaskApplierService { } public _checkSymbols(result: string): string | number | undefined | null { - if (result === MaskExpression.EMPTY_STRING) { - return result; + let processedResult = result; + + if (processedResult === MaskExpression.EMPTY_STRING) { + return processedResult; } if ( this.maskExpression.startsWith(MaskExpression.PERCENT) && this.decimalMarker === MaskExpression.COMMA ) { - result = result.replace(MaskExpression.COMMA, MaskExpression.DOT); + processedResult = processedResult.replace(MaskExpression.COMMA, MaskExpression.DOT); } const separatorPrecision: number | null = this._retrieveSeparatorPrecision( this.maskExpression ); const separatorValue: string = this._replaceDecimalMarkerToDot( - this._retrieveSeparatorValue(result) + this._retrieveSeparatorValue(processedResult) ); if (!this.isNumberValue) { return separatorValue; } if (separatorPrecision) { - if (result === this.decimalMarker) { + if (processedResult === this.decimalMarker) { return null; } if (this.separatorLimit.length > 14) { @@ -711,18 +721,19 @@ export class NgxMaskService extends NgxMaskApplierService { public _checkPrecision(separatorExpression: string, separatorValue: string): number | string { const separatorPrecision = separatorExpression.slice(10, 11); + let value = separatorValue; if ( separatorExpression.indexOf('2') > 0 || (this.leadZero && Number(separatorPrecision) > 0) ) { if (this.decimalMarker === MaskExpression.COMMA && this.leadZero) { - separatorValue = separatorValue.replace(',', '.'); + value = value.replace(',', '.'); } return this.leadZero - ? Number(separatorValue).toFixed(Number(separatorPrecision)) - : Number(separatorValue).toFixed(2); + ? Number(value).toFixed(Number(separatorPrecision)) + : Number(value).toFixed(2); } - return this.numberToString(separatorValue); + return this.numberToString(value); } public _repeatPatternSymbols(maskExp: string): string { diff --git a/projects/ngx-mask-lib/src/test/add-prefix.spec.ts b/projects/ngx-mask-lib/src/test/add-prefix.spec.ts index e1e52029..5694b87d 100644 --- a/projects/ngx-mask-lib/src/test/add-prefix.spec.ts +++ b/projects/ngx-mask-lib/src/test/add-prefix.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; import { equal } from './utils/test-functions.component'; diff --git a/projects/ngx-mask-lib/src/test/add-suffix.spec.ts b/projects/ngx-mask-lib/src/test/add-suffix.spec.ts index 059d4c37..420767c8 100644 --- a/projects/ngx-mask-lib/src/test/add-suffix.spec.ts +++ b/projects/ngx-mask-lib/src/test/add-suffix.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; diff --git a/projects/ngx-mask-lib/src/test/allow-negative-numbers.spec.ts b/projects/ngx-mask-lib/src/test/allow-negative-numbers.spec.ts index 4d6e666f..2e105b52 100644 --- a/projects/ngx-mask-lib/src/test/allow-negative-numbers.spec.ts +++ b/projects/ngx-mask-lib/src/test/allow-negative-numbers.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; diff --git a/projects/ngx-mask-lib/src/test/basic-logic.spec.ts b/projects/ngx-mask-lib/src/test/basic-logic.spec.ts index 2e7526e6..b072e0af 100644 --- a/projects/ngx-mask-lib/src/test/basic-logic.spec.ts +++ b/projects/ngx-mask-lib/src/test/basic-logic.spec.ts @@ -1,5 +1,6 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { DebugElement } from '@angular/core'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; +import type { DebugElement } from '@angular/core'; import { By } from '@angular/platform-browser'; import { ReactiveFormsModule } from '@angular/forms'; @@ -512,7 +513,7 @@ describe('Directive: Mask', () => { component.form.setValue('1111a'); equal('1111a', '1111', fixture); expect(component.form.value).toBe('1111'); - component.mask = undefined; + component.mask = null; expect(component.form.value).toBe('1111'); }); @@ -769,11 +770,11 @@ describe('Directive: Mask', () => { equal('123456-1234567891/1234', '123456-1234567891/1234', fixture); }); - it('setValue undefined should return undefined ', () => { + it('setValue undefined should return null', () => { component.mask = '0000'; equal('1234', '1234', fixture); - component.form.setValue(undefined); - expect(component.form.value).toBe(undefined); + component.form.setValue(null); + expect(component.form.value).toBe(null); }); it('after resetValue should show in model same value', () => { diff --git a/projects/ngx-mask-lib/src/test/clear-if-not-match-the-mask.spec.ts b/projects/ngx-mask-lib/src/test/clear-if-not-match-the-mask.spec.ts index 0cc3d635..bc318931 100644 --- a/projects/ngx-mask-lib/src/test/clear-if-not-match-the-mask.spec.ts +++ b/projects/ngx-mask-lib/src/test/clear-if-not-match-the-mask.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; import { equal } from './utils/test-functions.component'; diff --git a/projects/ngx-mask-lib/src/test/complete-mask.spec.ts b/projects/ngx-mask-lib/src/test/complete-mask.spec.ts index 9b986861..89cae0a4 100644 --- a/projects/ngx-mask-lib/src/test/complete-mask.spec.ts +++ b/projects/ngx-mask-lib/src/test/complete-mask.spec.ts @@ -1,5 +1,6 @@ import { Component } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; import { provideNgxMask } from '../lib/ngx-mask.providers'; import { NgxMaskDirective } from '../lib/ngx-mask.directive'; diff --git a/projects/ngx-mask-lib/src/test/copy-paste.spec.ts b/projects/ngx-mask-lib/src/test/copy-paste.spec.ts index 97272731..45dd458f 100644 --- a/projects/ngx-mask-lib/src/test/copy-paste.spec.ts +++ b/projects/ngx-mask-lib/src/test/copy-paste.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; diff --git a/projects/ngx-mask-lib/src/test/cursor.cy-spec.ts b/projects/ngx-mask-lib/src/test/cursor.cy-spec.ts index e08e3be0..305bf1bf 100644 --- a/projects/ngx-mask-lib/src/test/cursor.cy-spec.ts +++ b/projects/ngx-mask-lib/src/test/cursor.cy-spec.ts @@ -50,11 +50,20 @@ describe('Test Date Hh:m0', () => { }, imports: [CypressTestMaskModule], }); - cy.get('#masked').type('77').should('have.prop', 'selectionStart', 3); + cy.get('#masked') + .type('77') + .should('have.prop', 'selectionStart', 3) + .should('have.value', '7/7'); cy.get('#masked').clear(); - cy.get('#masked').type('777').should('have.prop', 'selectionStart', 4); + cy.get('#masked') + .type('777') + .should('have.prop', 'selectionStart', 5) + .should('have.value', '7/7/7'); cy.get('#masked').clear(); - cy.get('#masked').type('1177').should('have.prop', 'selectionStart', 6); + cy.get('#masked') + .type('1177') + .should('have.prop', 'selectionStart', 6) + .should('have.value', '11/7/7'); }); it('Mask M0/d0/0000 check cursor', () => { @@ -64,11 +73,20 @@ describe('Test Date Hh:m0', () => { }, imports: [CypressTestMaskModule], }); - cy.get('#masked').type('88').should('have.prop', 'selectionStart', 3); + cy.get('#masked') + .type('88') + .should('have.prop', 'selectionStart', 3) + .should('have.value', '8/8'); cy.get('#masked').clear(); - cy.get('#masked').type('777').should('have.prop', 'selectionStart', 4); + cy.get('#masked') + .type('777') + .should('have.prop', 'selectionStart', 5) + .should('have.value', '7/7/7'); cy.get('#masked').clear(); - cy.get('#masked').type('1177').should('have.prop', 'selectionStart', 6); + cy.get('#masked') + .type('1177') + .should('have.prop', 'selectionStart', 6) + .should('have.value', '11/7/7'); }); it('Mask 0000/M0/d0 check cursor', () => { @@ -328,7 +346,7 @@ describe('Test Date Hh:m0', () => { imports: [CypressTestMaskModule], }); - cy.get('#masked').type('111111111111').should('have.value', '+11111111111'); + cy.get('#masked').type('11111111111').should('have.value', '+11111111111'); cy.get('#masked') .type('{backspace}') .should('have.value', '(111) 111-1111') diff --git a/projects/ngx-mask-lib/src/test/custom-date.spec.ts b/projects/ngx-mask-lib/src/test/custom-date.spec.ts index 42b15cf5..0cbfe9e5 100644 --- a/projects/ngx-mask-lib/src/test/custom-date.spec.ts +++ b/projects/ngx-mask-lib/src/test/custom-date.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; import { equal } from './utils/test-functions.component'; diff --git a/projects/ngx-mask-lib/src/test/custom-patterns.spec.ts b/projects/ngx-mask-lib/src/test/custom-patterns.spec.ts index e2d2c0f6..565b2336 100644 --- a/projects/ngx-mask-lib/src/test/custom-patterns.spec.ts +++ b/projects/ngx-mask-lib/src/test/custom-patterns.spec.ts @@ -1,11 +1,13 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; import { equal } from './utils/test-functions.component'; import { provideNgxMask } from '../lib/ngx-mask.providers'; import { NgxMaskDirective } from '../lib/ngx-mask.directive'; -import { IConfig, initialConfig } from 'ngx-mask'; +import type { NgxMaskConfig } from 'ngx-mask'; +import { initialConfig } from 'ngx-mask'; describe('Directive: Mask (Custom patterns)', () => { let fixture: ComponentFixture; @@ -42,7 +44,7 @@ describe('Directive: Mask (Provide custom patterns)', () => { B: { pattern: new RegExp('[a-zA-Z]'), optional: true }, }; - const ngxMaskConfigValue: Partial = { + const ngxMaskConfigValue: Partial = { patterns: { ...initialConfig.patterns, ...ngxMaskCustomPatterns }, }; @@ -86,7 +88,7 @@ describe('Directive: Mask (Provide custom patterns with symbol *)', () => { '*': { pattern: new RegExp('[a-zA-Z0-9]') }, }; - const ngxMaskConfigValue: Partial = { + const ngxMaskConfigValue: Partial = { patterns: { ...initialConfig.patterns, ...ngxMaskCustomPatterns }, }; @@ -133,7 +135,7 @@ describe('Directive: Mask (Provide custom patterns with symbol f and F)', () => let fixture: ComponentFixture; let component: TestMaskComponent; - const ngxMaskConfig: IConfig = { + const ngxMaskConfig: NgxMaskConfig = { ...initialConfig, patterns: { f: { @@ -188,7 +190,7 @@ describe('Directive: Mask (Provide custom patterns with symbol B optional)', () B: { pattern: new RegExp('[0-9,;]'), optional: true }, }; - const ngxMaskConfigValue: Partial = { + const ngxMaskConfigValue: Partial = { patterns: { ...initialConfig.patterns, ...ngxMaskCustomPatterns }, }; diff --git a/projects/ngx-mask-lib/src/test/custom-symbol-regexp.spec.ts b/projects/ngx-mask-lib/src/test/custom-symbol-regexp.spec.ts index 0b8b6c5e..0ac1bb90 100644 --- a/projects/ngx-mask-lib/src/test/custom-symbol-regexp.spec.ts +++ b/projects/ngx-mask-lib/src/test/custom-symbol-regexp.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; diff --git a/projects/ngx-mask-lib/src/test/default-config.spec.ts b/projects/ngx-mask-lib/src/test/default-config.spec.ts index 21ffe063..8806d780 100644 --- a/projects/ngx-mask-lib/src/test/default-config.spec.ts +++ b/projects/ngx-mask-lib/src/test/default-config.spec.ts @@ -1,12 +1,13 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule, FormControl } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; import { provideEnvironmentNgxMask } from '../lib/ngx-mask.providers'; import { NgxMaskDirective } from '../lib/ngx-mask.directive'; -import { optionsConfig } from '../lib/ngx-mask.config'; +import type { NgxMaskOptions } from '../lib/ngx-mask.config'; function createComponentWithDefaultConfig( - defaultConfig?: optionsConfig + defaultConfig?: NgxMaskOptions ): ComponentFixture { TestBed.configureTestingModule({ declarations: [TestMaskComponent], diff --git a/projects/ngx-mask-lib/src/test/delete.cy-spec.ts b/projects/ngx-mask-lib/src/test/delete.cy-spec.ts index ecd7e960..c711933f 100644 --- a/projects/ngx-mask-lib/src/test/delete.cy-spec.ts +++ b/projects/ngx-mask-lib/src/test/delete.cy-spec.ts @@ -304,7 +304,7 @@ describe('Directive: Mask (Delete)', () => { .should('have.value', '$ 1,234,567,890') .type('{leftArrow}'.repeat(3)) .type('{backspace}') - .should('have.prop', 'selectionStart', 10); + .should('have.prop', 'selectionStart', 11); }); it('should backspace with separator and prefix', () => { @@ -322,7 +322,7 @@ describe('Directive: Mask (Delete)', () => { .should('have.value', '$ 1.234.567.890') .type('{leftArrow}'.repeat(3)) .type('{backspace}') - .should('have.prop', 'selectionStart', 10); + .should('have.prop', 'selectionStart', 11); }); it('should backspace with showMaskTyped and leadZeroDateTime', () => { @@ -338,7 +338,7 @@ describe('Directive: Mask (Delete)', () => { cy.get('#masked') .type('12310000') .should('have.value', '12-31-0000') - .type('{backspace}'.repeat(8)) + .type('{backspace}'.repeat(10)) .should('have.value', '__-__-____'); }); @@ -355,7 +355,7 @@ describe('Directive: Mask (Delete)', () => { cy.get('#masked') .type('12310000') .should('have.value', '12/31/0000') - .type('{backspace}'.repeat(8)) + .type('{backspace}'.repeat(10)) .should('have.value', '__/__/____'); }); @@ -372,7 +372,7 @@ describe('Directive: Mask (Delete)', () => { cy.get('#masked') .type('12310000') .should('have.value', '12:31:0000') - .type('{backspace}'.repeat(8)) + .type('{backspace}'.repeat(10)) .should('have.value', '__:__:____'); }); @@ -602,4 +602,37 @@ describe('Directive: Mask (Delete)', () => { .type('{backspace}') .should('have.value', '4'); }); + + it('should backspace with mask Hh:m0', () => { + cy.mount(CypressTestMaskComponent, { + componentProperties: { + mask: 'Hh:m0', + showMaskTyped: true, + }, + imports: [CypressTestMaskModule], + }); + + cy.get('#masked') + .type('1234') + .should('have.value', '12:34') + .type('{backspace}'.repeat(4)) + .should('have.value', '__:__'); + }); + + it('should backspace with mask Hh:m0 and leadZeroDateTime', () => { + cy.mount(CypressTestMaskComponent, { + componentProperties: { + mask: 'Hh:m0', + showMaskTyped: true, + leadZeroDateTime: true, + }, + imports: [CypressTestMaskModule], + }); + + cy.get('#masked') + .type('344') + .should('have.value', '03:44') + .type('{backspace}'.repeat(5)) + .should('have.value', '__:__'); + }); }); diff --git a/projects/ngx-mask-lib/src/test/delete.spec.ts b/projects/ngx-mask-lib/src/test/delete.spec.ts index 53dccc64..62b6ebaa 100644 --- a/projects/ngx-mask-lib/src/test/delete.spec.ts +++ b/projects/ngx-mask-lib/src/test/delete.spec.ts @@ -1,6 +1,7 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; -import { DebugElement } from '@angular/core'; +import type { DebugElement } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; @@ -163,7 +164,9 @@ describe('Directive: Mask (Delete)', () => { keyCode: 8, target: inputTarget, - preventDefault: () => {}, + preventDefault: () => { + void 0; + }, }); debugElement.triggerEventHandler('input', { target: inputTarget }); expect(inputTarget.selectionStart).toEqual(2); @@ -186,7 +189,9 @@ describe('Directive: Mask (Delete)', () => { keyCode: 8, target: inputTarget, - preventDefault: () => {}, + preventDefault: () => { + void 0; + }, }); debugElement.triggerEventHandler('input', { target: inputTarget }); expect(inputTarget.selectionStart).toEqual(3); @@ -209,7 +214,9 @@ describe('Directive: Mask (Delete)', () => { keyCode: 8, target: inputTarget, - preventDefault: () => {}, + preventDefault: () => { + void 0; + }, }); debugElement.triggerEventHandler('input', { target: inputTarget }); expect(inputTarget.selectionStart).toEqual(2); @@ -232,7 +239,9 @@ describe('Directive: Mask (Delete)', () => { keyCode: 8, target: inputTarget, - preventDefault: () => {}, + preventDefault: () => { + void 0; + }, }); debugElement.triggerEventHandler('input', { target: inputTarget }); expect(inputTarget.selectionStart).toEqual(3); diff --git a/projects/ngx-mask-lib/src/test/drop-special-charaters.spec.ts b/projects/ngx-mask-lib/src/test/drop-special-charaters.spec.ts index 1d32980b..0827887e 100644 --- a/projects/ngx-mask-lib/src/test/drop-special-charaters.spec.ts +++ b/projects/ngx-mask-lib/src/test/drop-special-charaters.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; diff --git a/projects/ngx-mask-lib/src/test/dynamic.spec.ts b/projects/ngx-mask-lib/src/test/dynamic.spec.ts index 49b944b7..eb436594 100644 --- a/projects/ngx-mask-lib/src/test/dynamic.spec.ts +++ b/projects/ngx-mask-lib/src/test/dynamic.spec.ts @@ -1,9 +1,10 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; -import { DebugElement } from '@angular/core'; +import type { DebugElement } from '@angular/core'; import { provideNgxMask } from '../lib/ngx-mask.providers'; import { NgxMaskDirective } from '../lib/ngx-mask.directive'; import { equal } from './utils/test-functions.component'; diff --git a/projects/ngx-mask-lib/src/test/export-as.spec.ts b/projects/ngx-mask-lib/src/test/export-as.spec.ts index c8882c47..09df4b99 100644 --- a/projects/ngx-mask-lib/src/test/export-as.spec.ts +++ b/projects/ngx-mask-lib/src/test/export-as.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { Component, ViewChild } from '@angular/core'; diff --git a/projects/ngx-mask-lib/src/test/inputTransformFn.spec.ts b/projects/ngx-mask-lib/src/test/inputTransformFn.spec.ts index 52a34bae..a8e5a35e 100644 --- a/projects/ngx-mask-lib/src/test/inputTransformFn.spec.ts +++ b/projects/ngx-mask-lib/src/test/inputTransformFn.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; diff --git a/projects/ngx-mask-lib/src/test/mask.pipe.spec.ts b/projects/ngx-mask-lib/src/test/mask.pipe.spec.ts index a2e6cdf3..6cb7c216 100644 --- a/projects/ngx-mask-lib/src/test/mask.pipe.spec.ts +++ b/projects/ngx-mask-lib/src/test/mask.pipe.spec.ts @@ -1,7 +1,8 @@ import { TestBed } from '@angular/core/testing'; import { provideNgxMask } from '../lib/ngx-mask.providers'; import { NgxMaskPipe } from '../lib/ngx-mask.pipe'; -import { IConfig, NgxMaskDirective } from 'ngx-mask'; +import type { NgxMaskConfig } from 'ngx-mask'; +import { NgxMaskDirective } from 'ngx-mask'; describe('Pipe: Mask', () => { let maskPipe: NgxMaskPipe; @@ -33,7 +34,7 @@ describe('Pipe: Mask', () => { }); it('should custom pattern', () => { - const patterns: IConfig['patterns'] = { + const patterns: NgxMaskConfig['patterns'] = { P: { pattern: new RegExp('\\d'), }, @@ -171,7 +172,7 @@ describe('Pipe: Mask', () => { }); it('should work with custom pattern and hideInput', () => { - const SSN_PATTERNS: IConfig['patterns'] = { + const SSN_PATTERNS: NgxMaskConfig['patterns'] = { 0: { pattern: new RegExp('\\d') }, A: { pattern: new RegExp('\\d'), symbol: '●' }, }; diff --git a/projects/ngx-mask-lib/src/test/percent.spec.ts b/projects/ngx-mask-lib/src/test/percent.spec.ts index ffae64ae..46a8a688 100644 --- a/projects/ngx-mask-lib/src/test/percent.spec.ts +++ b/projects/ngx-mask-lib/src/test/percent.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; diff --git a/projects/ngx-mask-lib/src/test/place-holder-character.spec.ts b/projects/ngx-mask-lib/src/test/place-holder-character.spec.ts index 5e16f54c..92f19ef3 100644 --- a/projects/ngx-mask-lib/src/test/place-holder-character.spec.ts +++ b/projects/ngx-mask-lib/src/test/place-holder-character.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; diff --git a/projects/ngx-mask-lib/src/test/repeat-mask.spec.ts b/projects/ngx-mask-lib/src/test/repeat-mask.spec.ts index b5672603..fd20bf1d 100644 --- a/projects/ngx-mask-lib/src/test/repeat-mask.spec.ts +++ b/projects/ngx-mask-lib/src/test/repeat-mask.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; diff --git a/projects/ngx-mask-lib/src/test/secure-mask.spec.ts b/projects/ngx-mask-lib/src/test/secure-mask.spec.ts index 4cd3e2e3..a6e02619 100644 --- a/projects/ngx-mask-lib/src/test/secure-mask.spec.ts +++ b/projects/ngx-mask-lib/src/test/secure-mask.spec.ts @@ -1,11 +1,12 @@ -import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { fakeAsync, TestBed, tick } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; import { equal, typeTest } from './utils/test-functions.component'; import { provideNgxMask } from '../lib/ngx-mask.providers'; import { NgxMaskDirective } from '../lib/ngx-mask.directive'; -import { DebugElement } from '@angular/core'; +import type { DebugElement } from '@angular/core'; import { By } from '@angular/platform-browser'; describe('Directive: Mask (Secure)', () => { diff --git a/projects/ngx-mask-lib/src/test/separator-non-en-locale.spec.ts b/projects/ngx-mask-lib/src/test/separator-non-en-locale.spec.ts index 1bbe3a43..75391381 100644 --- a/projects/ngx-mask-lib/src/test/separator-non-en-locale.spec.ts +++ b/projects/ngx-mask-lib/src/test/separator-non-en-locale.spec.ts @@ -1,5 +1,7 @@ -import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; -import { DebugElement, LOCALE_ID } from '@angular/core'; +import type { ComponentFixture } from '@angular/core/testing'; +import { fakeAsync, TestBed, tick } from '@angular/core/testing'; +import type { DebugElement } from '@angular/core'; +import { LOCALE_ID } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; import { equal, typeTest } from './utils/test-functions.component'; diff --git a/projects/ngx-mask-lib/src/test/separator.spec.ts b/projects/ngx-mask-lib/src/test/separator.spec.ts index b0994ced..1e6df6a1 100644 --- a/projects/ngx-mask-lib/src/test/separator.spec.ts +++ b/projects/ngx-mask-lib/src/test/separator.spec.ts @@ -1,6 +1,7 @@ -import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { fakeAsync, TestBed, tick } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; -import { DebugElement } from '@angular/core'; +import type { DebugElement } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; import { equal, typeTest } from './utils/test-functions.component'; @@ -1724,7 +1725,6 @@ describe('Separator: Mask', () => { fixture.detectChanges(); inputElement.setSelectionRange(2, 2); - inputElement.selectionStart; expect(inputElement.selectionStart).toBe(2); const backspaceEvent = new KeyboardEvent('keydown', { @@ -1753,7 +1753,6 @@ describe('Separator: Mask', () => { fixture.detectChanges(); inputElement.setSelectionRange(2, 2); - inputElement.selectionStart; expect(inputElement.selectionStart).toBe(2); const backspaceEvent = new KeyboardEvent('keydown', { @@ -1782,7 +1781,6 @@ describe('Separator: Mask', () => { fixture.detectChanges(); inputElement.setSelectionRange(2, 2); - inputElement.selectionStart; expect(inputElement.selectionStart).toBe(2); const backspaceEvent = new KeyboardEvent('keydown', { diff --git a/projects/ngx-mask-lib/src/test/show-mask-typed.spec.ts b/projects/ngx-mask-lib/src/test/show-mask-typed.spec.ts index 1c765a69..28b9e2d8 100644 --- a/projects/ngx-mask-lib/src/test/show-mask-typed.spec.ts +++ b/projects/ngx-mask-lib/src/test/show-mask-typed.spec.ts @@ -1,11 +1,12 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; import { equal } from './utils/test-functions.component'; import { provideNgxMask } from '../lib/ngx-mask.providers'; import { NgxMaskDirective } from '../lib/ngx-mask.directive'; -import { DebugElement } from '@angular/core'; +import type { DebugElement } from '@angular/core'; import { By } from '@angular/platform-browser'; describe('Directive: Mask', () => { diff --git a/projects/ngx-mask-lib/src/test/test-sufix.spec.ts b/projects/ngx-mask-lib/src/test/test-sufix.spec.ts index 5a89fe59..baec7b6e 100644 --- a/projects/ngx-mask-lib/src/test/test-sufix.spec.ts +++ b/projects/ngx-mask-lib/src/test/test-sufix.spec.ts @@ -1,5 +1,6 @@ -import { DebugElement } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { DebugElement } from '@angular/core'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { TestMaskComponent } from './utils/test-component.component'; diff --git a/projects/ngx-mask-lib/src/test/time-mask.spec.ts b/projects/ngx-mask-lib/src/test/time-mask.spec.ts index 42019a6b..5355a101 100644 --- a/projects/ngx-mask-lib/src/test/time-mask.spec.ts +++ b/projects/ngx-mask-lib/src/test/time-mask.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; diff --git a/projects/ngx-mask-lib/src/test/trigger-on-mask-change.spec.ts b/projects/ngx-mask-lib/src/test/trigger-on-mask-change.spec.ts index 70b34e6e..2d84f3ea 100644 --- a/projects/ngx-mask-lib/src/test/trigger-on-mask-change.spec.ts +++ b/projects/ngx-mask-lib/src/test/trigger-on-mask-change.spec.ts @@ -1,11 +1,12 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { ReactiveFormsModule } from '@angular/forms'; import { TestMaskComponent } from './utils/test-component.component'; import { provideNgxMask } from '../lib/ngx-mask.providers'; import { NgxMaskDirective } from '../lib/ngx-mask.directive'; -import { DebugElement } from '@angular/core'; +import type { DebugElement } from '@angular/core'; import { equal } from './utils/test-functions.component'; describe('Directive: Mask (Trigger on mask change)', () => { diff --git a/projects/ngx-mask-lib/src/test/type-number.spec.ts b/projects/ngx-mask-lib/src/test/type-number.spec.ts index c2cd5041..b82144f1 100644 --- a/projects/ngx-mask-lib/src/test/type-number.spec.ts +++ b/projects/ngx-mask-lib/src/test/type-number.spec.ts @@ -1,6 +1,7 @@ import { Component } from '@angular/core'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { NgxMaskDirective, provideNgxMask } from 'ngx-mask'; import { equal } from './utils/test-functions.component'; diff --git a/projects/ngx-mask-lib/src/test/utils/cypress-test-component.component.ts b/projects/ngx-mask-lib/src/test/utils/cypress-test-component.component.ts index eff3a7a5..c3b6f7d8 100644 --- a/projects/ngx-mask-lib/src/test/utils/cypress-test-component.component.ts +++ b/projects/ngx-mask-lib/src/test/utils/cypress-test-component.component.ts @@ -1,7 +1,8 @@ import { Component, inject, Input } from '@angular/core'; import { FormControl } from '@angular/forms'; import { scan, startWith } from 'rxjs'; -import { IConfig, NGX_MASK_CONFIG } from 'ngx-mask'; +import type { NgxMaskConfig } from 'ngx-mask'; +import { NGX_MASK_CONFIG } from 'ngx-mask'; @Component({ selector: 'jsdaddy-open-source-test', @@ -33,7 +34,7 @@ import { IConfig, NGX_MASK_CONFIG } from 'ngx-mask'; `, }) export class CypressTestMaskComponent { - protected _config = inject(NGX_MASK_CONFIG); + protected _config = inject(NGX_MASK_CONFIG); @Input() public mask = ''; @Input() public hiddenInput = false; @@ -71,6 +72,6 @@ export class CypressTestMaskComponent { public readonly counter$ = this.form.valueChanges.pipe( startWith(0), - scan((_, __, index) => ++index) + scan((acc) => acc + 1, 0) ); } diff --git a/projects/ngx-mask-lib/src/test/utils/cypress-test-trigger-on-mask-change.component.ts b/projects/ngx-mask-lib/src/test/utils/cypress-test-trigger-on-mask-change.component.ts index eaf79213..4215ac72 100644 --- a/projects/ngx-mask-lib/src/test/utils/cypress-test-trigger-on-mask-change.component.ts +++ b/projects/ngx-mask-lib/src/test/utils/cypress-test-trigger-on-mask-change.component.ts @@ -1,4 +1,5 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; +import type { OnDestroy, OnInit } from '@angular/core'; +import { Component } from '@angular/core'; import { FormControl } from '@angular/forms'; import { Subject, takeUntil } from 'rxjs'; diff --git a/projects/ngx-mask-lib/src/test/utils/test-component.component.ts b/projects/ngx-mask-lib/src/test/utils/test-component.component.ts index 9cdcacc8..194ec9e8 100644 --- a/projects/ngx-mask-lib/src/test/utils/test-component.component.ts +++ b/projects/ngx-mask-lib/src/test/utils/test-component.component.ts @@ -1,7 +1,6 @@ import { ChangeDetectorRef, Component, inject } from '@angular/core'; import { FormControl } from '@angular/forms'; - -import { IConfig } from '../../lib/ngx-mask.config'; +import type { NgxMaskConfig } from 'ngx-mask'; @Component({ selector: 'jsdaddy-open-source-test', @@ -34,51 +33,51 @@ import { IConfig } from '../../lib/ngx-mask.config'; `, }) export class TestMaskComponent { - public mask!: string | undefined; + public mask!: string | null | undefined; public form: FormControl = new FormControl(); - public dropSpecialCharacters: IConfig['dropSpecialCharacters'] | undefined; + public dropSpecialCharacters: NgxMaskConfig['dropSpecialCharacters'] | undefined; - public clearIfNotMatch: IConfig['clearIfNotMatch'] | undefined; + public clearIfNotMatch: NgxMaskConfig['clearIfNotMatch'] | undefined; - public patterns: IConfig['patterns'] | undefined; + public patterns: NgxMaskConfig['patterns'] | undefined; - public prefix: IConfig['prefix'] = ''; + public prefix: NgxMaskConfig['prefix'] = ''; - public thousandSeparator: IConfig['thousandSeparator'] | undefined; + public thousandSeparator: NgxMaskConfig['thousandSeparator'] | undefined; - public decimalMarker: IConfig['decimalMarker'] | undefined; + public decimalMarker: NgxMaskConfig['decimalMarker'] | undefined; - public suffix: IConfig['suffix'] = ''; + public suffix: NgxMaskConfig['suffix'] = ''; - public specialCharacters: IConfig['specialCharacters'] | undefined; + public specialCharacters: NgxMaskConfig['specialCharacters'] | undefined; - public keepCharacterPositions: IConfig['keepCharacterPositions'] | undefined; + public keepCharacterPositions: NgxMaskConfig['keepCharacterPositions'] | undefined; - public showMaskTyped: IConfig['showMaskTyped'] | undefined; + public showMaskTyped: NgxMaskConfig['showMaskTyped'] | undefined; - public placeHolderCharacter: IConfig['placeHolderCharacter'] | undefined; + public placeHolderCharacter: NgxMaskConfig['placeHolderCharacter'] | undefined; - public hiddenInput: IConfig['hiddenInput'] | undefined; + public hiddenInput: NgxMaskConfig['hiddenInput'] | undefined; - public separatorLimit: IConfig['separatorLimit'] = ''; + public separatorLimit: NgxMaskConfig['separatorLimit'] = ''; - public allowNegativeNumbers: IConfig['allowNegativeNumbers'] | undefined; + public allowNegativeNumbers: NgxMaskConfig['allowNegativeNumbers'] | undefined; - public leadZeroDateTime: IConfig['leadZeroDateTime'] | undefined; + public leadZeroDateTime: NgxMaskConfig['leadZeroDateTime'] | undefined; - public leadZero: IConfig['leadZero'] | undefined; + public leadZero: NgxMaskConfig['leadZero'] | undefined; - public triggerOnMaskChange: IConfig['triggerOnMaskChange'] | undefined; + public triggerOnMaskChange: NgxMaskConfig['triggerOnMaskChange'] | undefined; - public validation: IConfig['validation'] | undefined; + public validation: NgxMaskConfig['validation'] | undefined; - public apm: IConfig['apm'] | undefined; + public apm: NgxMaskConfig['apm'] | undefined; - public inputTransformFn: IConfig['inputTransformFn'] | undefined; + public inputTransformFn: NgxMaskConfig['inputTransformFn'] | undefined; - public outputTransformFn: IConfig['outputTransformFn'] | undefined; + public outputTransformFn: NgxMaskConfig['outputTransformFn'] | undefined; public cdr = inject(ChangeDetectorRef); } diff --git a/projects/ngx-mask-lib/src/test/utils/test-functions.component.ts b/projects/ngx-mask-lib/src/test/utils/test-functions.component.ts index 1bc088c7..c55bb246 100644 --- a/projects/ngx-mask-lib/src/test/utils/test-functions.component.ts +++ b/projects/ngx-mask-lib/src/test/utils/test-functions.component.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line @typescript-eslint/no-explicit-any export function typeTest(inputValue: string, fixture: any): string { fixture.detectChanges(); @@ -10,7 +9,6 @@ export function typeTest(inputValue: string, fixture: any): string { return fixture.nativeElement.querySelector('input').value; } -// eslint-disable-next-line @typescript-eslint/no-explicit-any export function equal(value: string, expectedValue: string, fixture: any, async = false): void { typeTest(value, fixture); diff --git a/projects/ngx-mask-lib/src/test/validation.spec.ts b/projects/ngx-mask-lib/src/test/validation.spec.ts index 1fea7a8f..cc65a35e 100644 --- a/projects/ngx-mask-lib/src/test/validation.spec.ts +++ b/projects/ngx-mask-lib/src/test/validation.spec.ts @@ -1,4 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; import { Component } from '@angular/core'; import { ReactiveFormsModule, FormControl, Validators } from '@angular/forms'; diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 5c3ec560..12c7f28e 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -6,12 +6,7 @@ import { ComDocs, ComExamples } from 'src/assets/content/common-cases'; import { OthDocs, OthExamples } from 'src/assets/content/other'; import { OptionsComponent } from './options/options.component'; import { HeaderComponent } from '@open-source/header/header.component'; -import { - IComDoc, - IListItem, - IMaskOptions, - TExample, -} from '@open-source/accordion/content.interfaces'; +import type { ComDoc, ListItem, MaskOptions, TExample } from '@open-source/accordion/content.types'; import { SubHeaderComponent } from '@open-source/sub-header/sub-header.component'; import { AccordionComponent } from '@open-source/accordion/accordion.component'; import { FooterComponent } from '@open-source/footer/footer.component'; @@ -39,10 +34,10 @@ declare const VERSION: string; providers: [{ provide: VersionToken, useValue: VERSION }], }) export class AppComponent { - public docs = signal(ComDocs); - public examples = signal<(TExample | { _pipe: string })[]>(ComExamples); + public docs = signal(ComDocs); + public examples = signal<(TExample | { _pipe: string })[]>(ComExamples); - public readonly lists: IListItem[] = lists; + public readonly lists: ListItem[] = lists; public readonly githubMaskLink = LinkPath.NGX_MASK; public readonly title = 'Ngx-Mask'; public readonly subtitle = 'Angular plugin to make masks on form fields and html elements'; diff --git a/src/app/options/options.component.html b/src/app/options/options.component.html index efeaf2a0..f656d1c5 100644 --- a/src/app/options/options.component.html +++ b/src/app/options/options.component.html @@ -25,7 +25,7 @@ >

diff --git a/src/app/options/options.component.ts b/src/app/options/options.component.ts index efb90475..16d8b5b8 100644 --- a/src/app/options/options.component.ts +++ b/src/app/options/options.component.ts @@ -3,7 +3,6 @@ import { JsonPipe, NgOptimizedImage, NgTemplateOutlet } from '@angular/common'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { initialConfig, NgxMaskDirective, NgxMaskPipe } from 'ngx-mask'; import { HighlightModule } from 'ngx-highlightjs'; -import { IComDoc, IMaskOptions, TExample } from '@open-source/accordion/content.interfaces'; import { AssetPipe } from '@libraries/asset/asset.pipe'; import { IsEmptyPipe } from '@open-source/is-empty/is-empty.pipe'; import { ColorPipe } from '@open-source/color/color.pipe'; @@ -12,6 +11,7 @@ import { ScrollService } from '@open-source/scroll/scroll.service'; import { AccordionService } from '@open-source/accordion/accordion.service'; import { OpenSourcePath } from '@open-source/path/open-source.path'; import { toSignal } from '@angular/core/rxjs-interop'; +import type { ComDoc, MaskOptions, TExample } from '@open-source/accordion/content.types'; @Component({ selector: 'jsdaddy-open-source-options', @@ -35,8 +35,8 @@ import { toSignal } from '@angular/core/rxjs-interop'; ], }) export class OptionsComponent { - public cardDocs = input(); - public cardExamples = input<(TExample | { _pipe: string })[]>(); + public cardDocs = input(); + public cardExamples = input<(TExample | { _pipe: string })[]>(); public cards = viewChildren>('cards', { read: ElementRef, diff --git a/src/assets/content/common-cases.ts b/src/assets/content/common-cases.ts index 35944de0..70d807f5 100644 --- a/src/assets/content/common-cases.ts +++ b/src/assets/content/common-cases.ts @@ -1,7 +1,7 @@ import { UntypedFormControl } from '@angular/forms'; -import { IComDoc, IMaskOptions, TExample } from '@open-source/accordion/content.interfaces'; +import type { ComDoc, MaskOptions, TExample } from '@open-source/accordion/content.types'; -export const ComDocs: IComDoc[] = [ +export const ComDocs: ComDoc[] = [ { header: 'Date', text: '', @@ -100,7 +100,7 @@ export const ComDocs: IComDoc[] = [ }, ]; -export const ComExamples: TExample[] = [ +export const ComExamples: TExample[] = [ { _placeholder: 'Date', _mask: 'd0/M0/0000', diff --git a/src/assets/content/lists.ts b/src/assets/content/lists.ts index ebd643f6..88f0ebc7 100644 --- a/src/assets/content/lists.ts +++ b/src/assets/content/lists.ts @@ -1,6 +1,6 @@ -import { IListItem } from '@open-source/accordion/content.interfaces'; +import type { ListItem } from '@open-source/accordion/content.types'; -export const lists: IListItem[] = [ +export const lists: ListItem[] = [ { header: 'Common cases', id: 1, diff --git a/src/assets/content/optional.ts b/src/assets/content/optional.ts index 529fcc46..8f7255ce 100644 --- a/src/assets/content/optional.ts +++ b/src/assets/content/optional.ts @@ -1,7 +1,7 @@ import { UntypedFormControl } from '@angular/forms'; -import { IComDoc, IMaskOptions, TExample } from '@open-source/accordion/content.interfaces'; +import type { ComDoc, MaskOptions, TExample } from '@open-source/accordion/content.types'; -export const OptDocs: IComDoc[] = [ +export const OptDocs: ComDoc[] = [ { header: 'Prefix (string)', text: 'You can add prefix to you masked value', @@ -81,7 +81,7 @@ export const OptDocs: IComDoc[] = [ }, ]; -export const OptExamples: TExample[] = [ +export const OptExamples: TExample[] = [ { _placeholder: 'prefix', _prefix: '+7', diff --git a/src/assets/content/other.ts b/src/assets/content/other.ts index 772d0bb9..54176dda 100644 --- a/src/assets/content/other.ts +++ b/src/assets/content/other.ts @@ -1,7 +1,7 @@ import { UntypedFormControl } from '@angular/forms'; -import { IComDoc, IMaskOptions, TExample } from '@open-source/accordion/content.interfaces'; +import type { ComDoc, MaskOptions, TExample } from '@open-source/accordion/content.types'; -export const OthDocs: IComDoc[] = [ +export const OthDocs: ComDoc[] = [ { header: 'Secure input', text: 'You can hide symbols in input field and get the actual value in formcontrol', @@ -42,7 +42,7 @@ export const OthDocs: IComDoc[] = [ }, ]; -export const OthExamples: (TExample | { _pipe: string })[] = [ +export const OthExamples: (TExample | { _pipe: string })[] = [ { _placeholder: 'Secure input', _hiddenInput: true, diff --git a/src/assets/content/parser-and-formatter.ts b/src/assets/content/parser-and-formatter.ts index 97a687ac..b9f29108 100644 --- a/src/assets/content/parser-and-formatter.ts +++ b/src/assets/content/parser-and-formatter.ts @@ -1,7 +1,7 @@ -import { IComDoc, IMaskOptions, TExample } from '@open-source/accordion/content.interfaces'; import { UntypedFormControl } from '@angular/forms'; +import type { ComDoc, MaskOptions, TExample } from '@open-source/accordion/content.types'; -export const ParserAndFormatterDocs: IComDoc[] = [ +export const ParserAndFormatterDocs: ComDoc[] = [ { header: 'toUpperCase', text: 'You can hide symbols in input field and get the actual value in formcontrol', @@ -99,7 +99,7 @@ export const ParserAndFormatterDocs: IComDoc[] = [ }, ]; -export const FormatAndParserExamples: TExample[] = [ +export const FormatAndParserExamples: TExample[] = [ { _placeholder: 'S*', _mask: 'S*', diff --git a/src/assets/content/separators.ts b/src/assets/content/separators.ts index 1ce75f60..6faf570e 100644 --- a/src/assets/content/separators.ts +++ b/src/assets/content/separators.ts @@ -1,7 +1,7 @@ import { UntypedFormControl } from '@angular/forms'; -import { IComDoc, IMaskOptions, TExample } from '@open-source/accordion/content.interfaces'; +import type { ComDoc, MaskOptions, TExample } from '@open-source/accordion/content.types'; -export const SepDocs: IComDoc[] = [ +export const SepDocs: ComDoc[] = [ { header: 'Thousand separator', text: 'You can divide your input by thousands', @@ -39,7 +39,7 @@ export const SepDocs: IComDoc[] = [ }, ]; -export const SepExamples: TExample[] = [ +export const SepExamples: TExample[] = [ { _placeholder: 'Separator', _mask: 'separator', diff --git a/src/libraries b/src/libraries index 732a29a7..339053d4 160000 --- a/src/libraries +++ b/src/libraries @@ -1 +1 @@ -Subproject commit 732a29a701b8b29990f1d6c7cb5c9add02206940 +Subproject commit 339053d4cd781ffede25ca6049defbedd69c67b5 diff --git a/src/main.ts b/src/main.ts index 678e5a89..010e7965 100644 --- a/src/main.ts +++ b/src/main.ts @@ -8,9 +8,11 @@ import { provideHttpClient } from '@angular/common/http'; import { BaseHttpService } from '@libraries/base-http/base-http.service'; import { DOMAIN } from '@libraries/token/token'; import { GithubStarsService } from '@libraries/github/github-stars.service'; +import { provideExperimentalZonelessChangeDetection } from '@angular/core'; bootstrapApplication(AppComponent, { providers: [ + provideExperimentalZonelessChangeDetection(), GithubStarsService, provideHttpClient(), { @@ -28,4 +30,5 @@ bootstrapApplication(AppComponent, { }, }, ], + // eslint-disable-next-line no-console }).catch((err) => console.error(err)); diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 00000000..05fc0437 --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["**/*.ts"] +} diff --git a/tsconfig.json b/tsconfig.json index 2cffed9f..7ab3eef1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -28,7 +28,8 @@ "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "useDefineForClassFields": false, - "skipLibCheck": true + "skipLibCheck": true, + "noImplicitAny": true }, "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false,