From f664c02b0e4ae186d8627989363b091c4f1fdb17 Mon Sep 17 00:00:00 2001 From: Blackbaud-SteveBrush Date: Mon, 22 Apr 2019 17:06:56 -0400 Subject: [PATCH 1/9] Initial commit --- e2e/progress-indicator.e2e-spec.ts | 147 +-- package.json | 6 +- ...s-Indicator-Lg-1-chrome-1044x788-dpr-1.png | Bin 19541 -> 0 bytes ...s-Indicator-Lg-2-chrome-1044x788-dpr-1.png | Bin 19828 -> 0 bytes ...s-Indicator-Lg-3-chrome-1044x788-dpr-1.png | Bin 19697 -> 0 bytes ...cator-Lg-Passive-chrome-1044x788-dpr-1.png | Bin 8050 -> 0 bytes ...ator-Lg-Wizard-1-chrome-1044x788-dpr-1.png | Bin 15472 -> 0 bytes ...ator-Lg-Wizard-2-chrome-1044x788-dpr-1.png | Bin 14797 -> 0 bytes ...ator-Lg-Wizard-3-chrome-1044x788-dpr-1.png | Bin 15280 -> 0 bytes ...ss-Indicator-Xs-1-chrome-480x788-dpr-1.png | Bin 18753 -> 0 bytes ...ss-Indicator-Xs-1-chrome-481x788-dpr-1.png | Bin 18778 -> 0 bytes ...cator-Xs-Wizard-1-chrome-480x788-dpr-1.png | Bin 15116 -> 0 bytes ...cator-Xs-Wizard-1-chrome-481x788-dpr-1.png | Bin 16983 -> 0 bytes skyuxconfig.json | 5 + src/app/app-extras.module.ts | 33 +- .../progress-indicator.component.fixture.html | 122 ++- .../progress-indicator.component.fixture.ts | 159 +++- .../progress-indicator.module.fixture.ts | 29 + .../progress-indicator-item.component.html | 42 +- .../progress-indicator-item.component.scss | 82 +- .../progress-indicator-item.component.ts | 90 +- ...ogress-indicator-nav-button.component.html | 12 +- ...progress-indicator-nav-button.component.ts | 233 +++-- ...ress-indicator-reset-button.component.html | 19 +- ...ress-indicator-reset-button.component.scss | 5 - ...ogress-indicator-reset-button.component.ts | 50 +- ...ess-indicator-status-marker.component.html | 18 + ...ess-indicator-status-marker.component.scss | 130 +++ ...gress-indicator-status-marker.component.ts | 87 ++ .../progress-indicator-title.component.html | 8 +- .../progress-indicator-title.component.scss | 10 +- .../progress-indicator-title.component.ts | 4 +- .../progress-indicator.component.html | 42 +- .../progress-indicator.component.scss | 119 +-- .../progress-indicator.component.spec.ts | 838 +++++++++++------- .../progress-indicator.component.ts | 410 ++++++--- .../progress-indicator.module.ts | 43 +- .../scss/progress-indicator-variables.scss | 2 + .../modules/progress-indicator/types/index.ts | 9 +- .../types/progress-indicator-change.ts | 11 +- .../types/progress-indicator-display-mode.ts | 4 + .../types/progress-indicator-item-status.ts | 6 + .../types/progress-indicator-message-type.ts | 4 +- .../types/progress-indicator-message.ts | 18 + .../types/progress-indicator-mode.ts | 4 - .../progress-indicator-nav-button-type.ts | 1 + src/app/visual-styles.scss | 12 + ...indicator-horizontal-visual.component.html | 41 +- ...s-indicator-horizontal-visual.component.ts | 43 +- .../progress-indicator-visual.component.html | 332 ++++++- .../progress-indicator-visual.component.ts | 72 +- src/assets/locales/resources_en_US.json | 8 + 52 files changed, 2217 insertions(+), 1093 deletions(-) delete mode 100644 screenshots-baseline/progress-Indicator-Lg-1-chrome-1044x788-dpr-1.png delete mode 100644 screenshots-baseline/progress-Indicator-Lg-2-chrome-1044x788-dpr-1.png delete mode 100644 screenshots-baseline/progress-Indicator-Lg-3-chrome-1044x788-dpr-1.png delete mode 100644 screenshots-baseline/progress-Indicator-Lg-Passive-chrome-1044x788-dpr-1.png delete mode 100644 screenshots-baseline/progress-Indicator-Lg-Wizard-1-chrome-1044x788-dpr-1.png delete mode 100644 screenshots-baseline/progress-Indicator-Lg-Wizard-2-chrome-1044x788-dpr-1.png delete mode 100644 screenshots-baseline/progress-Indicator-Lg-Wizard-3-chrome-1044x788-dpr-1.png delete mode 100644 screenshots-baseline/progress-Indicator-Xs-1-chrome-480x788-dpr-1.png delete mode 100644 screenshots-baseline/progress-Indicator-Xs-1-chrome-481x788-dpr-1.png delete mode 100644 screenshots-baseline/progress-Indicator-Xs-Wizard-1-chrome-480x788-dpr-1.png delete mode 100644 screenshots-baseline/progress-Indicator-Xs-Wizard-1-chrome-481x788-dpr-1.png create mode 100644 src/app/public/modules/progress-indicator/fixtures/progress-indicator.module.fixture.ts delete mode 100644 src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.scss create mode 100644 src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.html create mode 100644 src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.scss create mode 100644 src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.ts create mode 100644 src/app/public/modules/progress-indicator/scss/progress-indicator-variables.scss create mode 100644 src/app/public/modules/progress-indicator/types/progress-indicator-display-mode.ts create mode 100644 src/app/public/modules/progress-indicator/types/progress-indicator-item-status.ts create mode 100644 src/app/public/modules/progress-indicator/types/progress-indicator-message.ts delete mode 100644 src/app/public/modules/progress-indicator/types/progress-indicator-mode.ts create mode 100644 src/app/public/modules/progress-indicator/types/progress-indicator-nav-button-type.ts create mode 100644 src/app/visual-styles.scss diff --git a/e2e/progress-indicator.e2e-spec.ts b/e2e/progress-indicator.e2e-spec.ts index d3495e6..4ad4927 100644 --- a/e2e/progress-indicator.e2e-spec.ts +++ b/e2e/progress-indicator.e2e-spec.ts @@ -1,99 +1,124 @@ -import { - element, - by -} from 'protractor'; - import { expect, SkyHostBrowser } from '@skyux-sdk/e2e'; -describe('Progress indicator component (lg)', () => { - beforeEach(() => { +import { + by, + element +} from 'protractor'; + +function performClick(query: string): void { + const elem = element(by.css(query)); + elem.click(); +} + +describe('Progress indicator', function () { + beforeEach(function () { SkyHostBrowser.get('visual/progress-indicator'); SkyHostBrowser.setWindowBreakpoint('lg'); }); - it('should show 1st step active and rest incomplete', (done) => { - expect('body').toMatchBaselineScreenshot(done, { - screenshotName: 'progress-indicator-lg-1' + describe('Vertical display', function () { + const screenshotElementId = 'app-screenshot-display-mode-vertical'; + + beforeEach(function () { + performClick(`#${screenshotElementId}-next-button`); + + SkyHostBrowser.moveCursorOffScreen(); + SkyHostBrowser.scrollTo(`#${screenshotElementId}`); }); - }); - it('should show 1st and 2nd steps complete and the 3rd as active', (done) => { - element(by.id(`btn-progress`)).click(); - element(by.id(`btn-progress`)).click(); - expect('body').toMatchBaselineScreenshot(done, { - screenshotName: 'progress-indicator-lg-2' + it('should match previous screenshot', function (done) { + expect(`#${screenshotElementId}`).toMatchBaselineScreenshot(done, { + screenshotName: 'progress-indicator-vertical' + }); }); - }); - it('should show 1st active, 2nd complete, and 3rd incomplete', (done) => { - element(by.id(`btn-progress`)).click(); - element(by.id(`btn-progress`)).click(); + it('should match previous screenshot (xs)', function (done) { + SkyHostBrowser.setWindowBreakpoint('xs'); - element(by.id(`btn-regress`)).click(); - element(by.id(`btn-regress`)).click(); - expect('body').toMatchBaselineScreenshot(done, { - screenshotName: 'progress-indicator-lg-3' + expect(`#${screenshotElementId}`).toMatchBaselineScreenshot(done, { + screenshotName: 'progress-indicator-vertical-xs' + }); }); }); - it('should match passive progress indicator screenshot', (done) => { - element(by.id(`btn-passive`)).click(); - expect('.sky-popover-container').toMatchBaselineScreenshot(done, { - screenshotName: 'progress-indicator-lg-passive' - }); - }); + describe('Horizontal display', function () { + const screenshotElementId = 'app-screenshot-display-mode-horizontal'; - describe('wizard', () => { - beforeEach(() => { - element(by.id(`btn-wizard`)).click(); + beforeEach(function () { + performClick(`#${screenshotElementId}-next-button button`); + + SkyHostBrowser.moveCursorOffScreen(); + SkyHostBrowser.scrollTo(`#${screenshotElementId}`); }); - it('should show 1st step active and rest incomplete', (done) => { - expect('.sky-modal').toMatchBaselineScreenshot(done, { - screenshotName: 'progress-indicator-lg-wizard-1' + it('should match previous screenshot', function (done) { + expect(`#${screenshotElementId}`).toMatchBaselineScreenshot(done, { + screenshotName: 'progress-indicator-horizontal' }); }); - it('should show 1st and 2nd steps complete and the 3rd as active', (done) => { - element(by.id(`btn-wizard-next`)).click(); - element(by.id(`btn-wizard-next`)).click(); - expect('.sky-modal').toMatchBaselineScreenshot(done, { - screenshotName: 'progress-indicator-lg-wizard-2' + it('should match disabled buttons previous screenshot', function (done) { + const buttonElement = element(by.id(`${screenshotElementId}-disable-buttons-button`)); + buttonElement.click(); + + expect(`#${screenshotElementId}`).toMatchBaselineScreenshot(done, { + screenshotName: 'progress-indicator-horizontal-disabled' }); }); - it('should show 1st active, 2nd complete, and 3rd incomplete', (done) => { - element(by.id(`btn-wizard-next`)).click(); - element(by.id(`btn-wizard-next`)).click(); + it('should match previous screenshot (xs)', function (done) { + SkyHostBrowser.setWindowBreakpoint('xs'); - element(by.id(`btn-wizard-previous`)).click(); - element(by.id(`btn-wizard-previous`)).click(); - expect('.sky-modal').toMatchBaselineScreenshot(done, { - screenshotName: 'progress-indicator-lg-wizard-3' + expect(`#${screenshotElementId}`).toMatchBaselineScreenshot(done, { + screenshotName: 'progress-indicator-horizontal-xs' }); }); }); -}); -describe('Progress indicator component (xs)', () => { - beforeEach(() => { - SkyHostBrowser.get('visual/progress-indicator'); - SkyHostBrowser.setWindowBreakpoint('xs'); - }); + describe('Passive mode', function () { + const screenshotElementId = 'app-screenshot-passive-mode'; - it('should show 1st step active and rest incomplete', (done) => { - expect('body').toMatchBaselineScreenshot(done, { - screenshotName: 'progress-indicator-xs-1' + beforeEach(function () { + SkyHostBrowser.moveCursorOffScreen(); + SkyHostBrowser.scrollTo(`#${screenshotElementId}`); + }); + + it('should match previous screenshot', function (done) { + expect(`#${screenshotElementId}`).toMatchBaselineScreenshot(done, { + screenshotName: 'progress-indicator-passive' + }); + }); + + it('should match previous screenshot (xs)', function (done) { + SkyHostBrowser.setWindowBreakpoint('xs'); + + expect(`#${screenshotElementId}`).toMatchBaselineScreenshot(done, { + screenshotName: 'progress-indicator-passive-xs' + }); }); }); - it('should show 1st step active and rest incomplete', (done) => { - element(by.id(`btn-wizard`)).click(); - expect('.sky-modal').toMatchBaselineScreenshot(done, { - screenshotName: 'progress-indicator-xs-wizard-1' + describe('Horizontal mode (modal)', function () { + beforeEach(function () { + performClick('#app-screenshot-open-modal-button'); + performClick('#app-screenshot-modal-next-button'); + }); + + it('should match previous screenshot', function (done) { + expect(`.sky-modal`).toMatchBaselineScreenshot(done, { + screenshotName: 'progress-indicator-modal' + }); + }); + + it('should match previous screenshot (xs)', function (done) { + SkyHostBrowser.setWindowBreakpoint('xs'); + + expect(`.sky-modal`).toMatchBaselineScreenshot(done, { + screenshotName: 'progress-indicator-modal-xs' + }); }); }); }); diff --git a/package.json b/package.json index c9d7c14..e719392 100644 --- a/package.json +++ b/package.json @@ -29,8 +29,8 @@ }, "dependencies": {}, "devDependencies": { - "@blackbaud/skyux": "2.38.0", - "@blackbaud/skyux-builder": "1.30.0", - "@skyux-sdk/builder-plugin-skyux": "1.0.0-rc.5" + "@blackbaud/skyux": "2.48.0", + "@blackbaud/skyux-builder": "1.33.1", + "@skyux-sdk/builder-plugin-skyux": "1.0.0" } } diff --git a/screenshots-baseline/progress-Indicator-Lg-1-chrome-1044x788-dpr-1.png b/screenshots-baseline/progress-Indicator-Lg-1-chrome-1044x788-dpr-1.png deleted file mode 100644 index 96a437f83c86b66f35101fdabab99e5185b78898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19541 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 AV*mgE diff --git a/screenshots-baseline/progress-Indicator-Lg-2-chrome-1044x788-dpr-1.png b/screenshots-baseline/progress-Indicator-Lg-2-chrome-1044x788-dpr-1.png deleted file mode 100644 index 6517602f86ed39f3456248e5ebd648dbb6e03ba8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19828 zcmeFYbx@q$(l1JIf=h4-?(QBuxCRe4cyMim0FO)(GaS=zn2``5jCB2<)QP~Q^1g@S@YmHjBG1_cER3x0k;ga`k9I+A9C zf>IQel@!zPcyrW&?1Kus^>Q8u$f{Z74;y77`r^D`nOE=1&dQ-|()7p^oIFT5vrMmi zNhg72Z7Y?@U7945pVmp5s!xXfBHfccuRj!A)|;DkzfIiG7B8Q>tm&6^`tW(b(7lgD zM)IGs9Qg+GpW-M8|F634V|V(4Tufda#^Ws0Z!>Cnj3DuWL=YG-Ft|n-I`Lc9_P`t3dlu{5@6EJz z=O&Ao##V69+NAxYoF*Cf_)kRygWJUq8nd|i%Y#EOCwX zL1J@KX&!vWqcZKJgdJ$^#!g$j1kRgpD4;=Eku)47&pjL!`JKgSD0QuFB|_Wp#WPuC zGKI&%_?2kc&vLU9ge~(8)Kv!hRe$ufCRiWsXXR+$4KP&)3C6FUNk1cc zBd1K+b(IYtVo7pC=nA^vqt|E8njj#nrn@C-Eu@JNsH19iR&M6L*=UY`VYy!7zn^RP z6ApTtG@K`&=jozzN#iK;$S$`tkv}2STd~{LO9i>Ad@rM>+ZDx*f$$pF2ea&1iBC%*h>EEZcl>4+mAzDu*4W>@~+|PGJ7y z?ojf&R-z-h^yn=%@@|F6wJO`JwStKRCyn^Wv!%}YAE$Rl>I7w7BT3FS%iQ9pA(@UpoG(+>uZ0PS}(Vw44 zbciVKD*?XN-YU6~t@=aDmGv&?J9s?)O(~^$`b48S^CqGwbxk|^GO_1j0$w`R+Uhm0fjwpjBzK;*#|6Pn}0}{W%E!_+u>HF@4YG6Yoi8}a+yxvM!t-Aiq z^`yZDtu5^=evW%|sq(ComJDTLs}Q30{scw%;$v*6 z;(bvFI_=XPGi9}A!XL_1f1mv>+ISv@SpzlA)1R&iP`G|KTRdvca<9_cq={CFFR@%A zVp{H#X!ra$ELZD~IKkeZvq^Lz60jGShgf^DTdiAcU8h!V?E;;ie^{JT6&#$_hqNVN z7DKUJv#ozys`*Q|Ouzis2=>Aw!7knV8h{~MwD#yaVmT5_+o3cQjna9M_#tlY@$wL`@YQIR#<+t!ky5K zOH2LtHyosg_N@Lst-}dQJ}ck5lY&YV^%CuN!u5$ zd=&<2G~rfA&UANgbKcLai`1X(s|pJG1q=Ry3OgDexd%?8dM~(72Q(N${n6zrkdGPk zsj?I}_v|a0`z1^kqLm8-d_hyKasN<8!*l``d6v?F&*W!jZ*+z(_8&pV(~F5R7X<)( z`x2={MZr7twpw=!5qf?iZ37oXJYE&XBJzld2ImGmQNh6mqS=eiNL!z$w&W(^BT}yg zzPPP0+n+3dBb%hc96sHEZr0hbbZ2(al-I|Vq!pggb95>DeU98t&ekWN8Z$v=U($b< zC2`n&*Hn?f%Cq0KV;vRH9!`?Vxg4!m8*B_*vPT9OMX8+JYzF7tZAR7o+&KXqz6ggd zxH0|#{P4I+8GP0F?--s!mx;suXoAqQ)6bYsC(@Zk3{(c@h32`rIa0o=!HDW9frHh!@4_DA^c|J=VyMZ zIOVM}9Zwv!MCq*NM4?SbiZcD_K-Vb(9zPEI?W53)kv&mUx;((a=D@r8WQmJAuGNfW z8FFr`>0-eFN>bX%L4vUQF~EEgm-&tljO*g0zoeGW+Nrc-4l_#Z`fXWeutg|3W3~ea zGXOGPfmc>Nio869$TTeV<=&(v#scunNH`ScsnB0h4uFktA!@EYXc zAc_3A$bJ)Dy@e6|SIEWyeONs!jqT$Xg}Yl`AHy=V&wpFQ7qK@q@|V35z9<(Q{4@tq z<+In+3O0QqGj$#-cx<>NKDiSL**GozS!vGsH_kI2_E1hbE@xN|tSCqqvWAl+e>~mm zAn~6T#tWGtMYS!+8+piJ^+to2*nK~ns4s{nvf8zU zYo@J>b)HKzx=Up*XJ}HWL3!LoW%6_nIM!8o>;f2fb8+N71%4jJ$LI?l=hc~}B_4B4 zJoCZO^jV7PPw;fH;tID>@~9;33QT>SqC64-&ul9qERWoq-)fD-C&_XIcWnCxv9k@iqMKwFr<9}JtcH=7;dqUztA%xP_;%cK~INY%D zsVF9jmFM{T@){w$O3a#rJR(ezKRWAtP)RkdV&~VQ^DV7M%2SM8r<420wzjrF zlH?N1DY|g$Q7rSF?a3zuJTeha!Rsb*gtq*(r4onbnS?m_`O5XpHh%f=9G7oMFho<+ zFno8+Pc&tnj#}~}ghpLXSG1bj}Lx<6rPJ zS#h7cq*T&;VLFe>^#?a4 zV&bqKx{AbuIg&QNsh8sgVwY<(JOtbmg%4yqy#yA7uEn5>Js=WxRz%Hpz!|`%M5hBj zsI2YZ8V2N%I;M2mhr4MbMm#d5e8taxE@Qz{rA+$wGnQHs%i`zTz^h@Yd(a;0iu;gKd9_(o$}Q^EljPX!mb(~7e2X`%x;Hdw6R}&e_>)A9#VLWfFO3*9t^A(&la~neth{l+>)=;c-}+s|c!b>-=9c zIeX-JA8*p-7Jp!kYRQd0RH)7i1{#k%ox=(}<>B-EB;o8Eql_C${O`LBZkrXdb8-bv zWJ#RW=@uWTr|yZs?2T<7$X=u&L|iqf%^WCS<$aD|(C*s7Qesn`vCe<1(gT@0k~SaI z@sH5TqlY}%hS75zc#|8mu%s&Y!biQP)Y(u-lT z-G9}qyxOE3SMhLmeZ|0E(RMbQC@*fNN_Mh0L5fzbMbw;XiaE30GuNr#55V zlUTCbLCxm*DR+NGm8;B=GX4~AeX%lZWTJJsLx)?OFtKq1U@%`5;?MLu8Mv2`c1JzM zJkyxTT-uwuWM4dNUu<3meH0iZ;|Mi#x6nbh&~Xo3+d1!y1+3!@40XT><*0*MII?`J z?Q8Aq2^2jt=BCvs7iVU5AZFV7smN&65Mk)>bVlio^uyJZdlL7Q`tUcI)p1>r@*6;x z?(#{;>1B~@#U7z4^E^!Q7xu;obQ-xkYCJ(XzK+-V>64ot>Y?tcq2|ya$ zGxqMU19gO(9aU}Uc#+59ZXFs05un*y<1^Z!{gfQ}(cR0BmV$`8dG;I)%6wtK%62EfEJLORU&@wFlm}=XN z^P`%4wv&^zFd1XpDG?e!e^`j&e6sw-9nNY-UFtzR&D(}l=na<*HJv-S#0Uoc@Wcc5 z&k;9;n>uA+A#S3>F4Xot<310&SpT8VWLS?Y)8!rhr{^Po*d-n9LQCb@7jqLm$pmid z)QZcLM6BiH?#1LLlLn0~`*wdhp0kcwD6AlRSbd-P-+?ngqcSC5RwaHl@q-`Cjc1$j zxMH=fJ;SLbDG8ryQUJoERsWY(8oMA_XZ)LM(4L`#n>w|)jK?cMI6y&?wdJM7EuE);K}7=j6V ztlcqI9P>D1)fLIjCuR)`;g^*Ys?ok~D+IaLKx<>zzYYWnccIdlc!W~=E_@RsA~d@b z4!<((g5IsE%+mrtC@l@${(etWK(ouKI)iY6FA~PB9PCghq}b3AX-{{At@OU|c>Ccq z2DW;lQ+C19`sE4^b}Xwu74|1zBgJQ4;>h!k#GK@m$`EU=i`(2z?N=sZC{NjrTS4{E zmlerLF&Ot2*)iF*28__V@)w(uekL5*TCB#Ju^_&RrsUaD+_^#OOB9W$38?KZ=JIlf z|J>U*AzFgDko9z*hu@e+*0!C++Hl!9jUMsw84q*dg@WM=GRyaYl{eEn&@G3F_-1gi z@z(hgsms#4{Kyi+!xu%FP1PUjB_OFi8!9ppld`;L2-<3F}} zy6{Ez^Z7e~$UwnXwFwaDaHa>J{~Xotez`E5U$Sb%|V?CHsw94}kt@Sk& zSFSm;6ES>ef#iRBN7Yq5r>?ClcYdQ^5aShHqzXsuAkaZ5`zZP)A%QED;GUY8jya$2 z1prUwCtgB+91g-d&X5tGG~r2gQaitaMhl+KZGP8j0zXbI8uCoggp-ou^xXw7DnXj9 z@uwin4`05V^mPXV6ONe%KLViNjmS;sjbZVz zhXfx%N6O3dtEjctcH^btCV$X}^^b%MsKcIaya3*l)7Qk#FtJT;`E1jGI$67pOw*peX2o38p&vY%cTQ+G{In8kfG5c z3ri>LjFF<>o1T27ayWFB0y$fQBcCMMCOz%z&-7*iV6VAK@x;`qKSp2S>37B?pbL7n z>U6!Sr%oFSJ0OHnHC-^H@9dn}Fh1jfxkMgqV-wzbMK_a_`Go2wWe|Av8pCpwMSyo)oI0(y|UcnJo~ROQGhA^hEzeNo@f$6m_!&o*Yi< z8@{igySJlS-M5Fkvprn{?W&j=&wG!#x0Fx*XqYdj(4&ppZX!ON3f4-b&b;r=xZzuT ztuH=QV&WNXzV)1;d6K0Z7!ujdt%XDrbj45yj$FaxIYesNPUdhWwAe7C=O?T6qE5fH z{%BH*PV>HA5xbtLpPb>I&3vis%JNgHc0DB|z@s%JX_|98Pb>fqijHA&pAofIXohJ{ ztfcd_F{+9Hab|aIoqW~sdABW*ijA&q~Fy)Y1a@z=QUrd z>1uWIbrimv5@C-Q5((L>6na}Mo2Rs*Q+4G?p{W1O!jg4I>DpL(QhoaLFY20BiA2fX z35s9uU=K5S>-GxpFh8z=jqk^Q(;v9G7HcJMG+)#@P1uro;JTRb?SgGZTUP24<+x|r zQv^kxP!iN`f7hx@qT552kUAOr;h9RLEbS&D0(4FpPMr1{yVy6z`a2C;yeJ$BcLc?F zp{*_cMnXCL_(EQ`*DJ&j>@UbcdrI-QgRhw#5`WYPk5Jwaj5qYy-(p5t{|v8yMDA=w zl?}xB%V*WKi;OBLyv4ZVNYB7+AEuxE@5jFD&AUiXeFhi^UnnRpmgMB;J8eBO zFz$!g-v3j#JKqzn3P`KB!$Xk!j|e`$SIrH7H1qg(qcd8DX0*IM(Vj}6{atoOt(Pej zV}TnrN_<p=1q1bf$Ps8&&`Wwer zPeD?$`_KPyaq*w4hySu60tJQI2C*I<$MKWRP6gBZy9K7+x;jU*qharQPQa`~DF6HD z-s9gFrkT>Pxi7BY`OiF2e*Hh;7POaxPpwIej0Rl^)2VxZmH1edJR>yy^qpDejLZ4^EU0crySd+I z9X53*(4sW<9}L8fq|1@9V^8hc{CUjVB~#*fms!|r=XapUAl*o&GAfH92L zCz8%Xjp~W+G3jM(gj<;`xcvL{#lsk+|F((n-sj2^Ws6ts+--+_?VWrBnwW>)um=Lq zkJENs59j$V(@cGbZDyt4cEipY|*89vA)rh8UQ=T{g_M5->#D#6-IZK!If7<5Oca z@6>lip)UAZn(^-Y8)j3LFs*^@;8o_dH{FW*y_~3g`8GsR>K5m{z`FU*23(e+!Kz5N zn|)(IK^-CbEZ&{co|EP`dU+?&gntp;y_~asFT*e{FLVd5ZFr)br9^Ui8tZxH)07hF zXFS=RnC%sG<#ke#9t+(u^vr4Fg{=6AhM+FXYJGSjRGE*X?PqfcfRzQDiUy(myEXW8 zv%RcGdi~$gDiVf}{^+s6gl9HJTM#Af2sQ2Vma=In1^-J6X$df?oUR; zvXu_s-s_T~(2|U#+?Xcp$RK}#Zc@7m({%ZMXZ&H0^GxKe zw*|J4V1(N$gsP8LLKv8ijG~p+hbptg{3r@Ec~F0YCDmidv_GA34aE}ga7`&jT$K?8 zF0{X3w!(&XX(~C|4O6w=T5$P@MCj1B;(zX8B3Ozmhxx3KgCqaGZFA+T>ZPq|tuLC| z&Lk~PH124B7FY6m(uTsRaqp*==!rivY$84^vdkj^Sv?Y41QMb&V;&J+I~?^)AAjt& z2PvdsDNA6tt^2+>h+L0?0%1LT{e)2Iw1yLMg$Fi>zpR=@KfTE&6%6d%$gQ*|C#XoC zxcL)e3Qx#Clqzybi_KR{D}RzR%y|3obz<1FMUTz8H72@#Ol(m9Z}8WNPJ*Vy0xTd0 za9?=1F*23C`4+J^Y>c`%KOI?DG+PT#sH-x5iok{iu=SJt5nzdn$w`(=y1twy+ZLGP zXdy?F6Pl50Lo2^3YXaX&^{NARIo^ZSRLdEUmt$}IfWqn(TFu*R^M&{>pm{TWe5)%Z z8_`|YQKo1x&4}*!PaWh8t}h*6p(rqUJ9k;b;bfsy*!c7wz5%s!$)tCaM6xel!ZIai zl$NLoiV`=9fYOL7vr2n7jgN72VdE<1tjC0Xi)1+?Y_WatF$-AhN>1?QtA_x2ir1<% z+d|P?E}1e>AtykQV3$3;DlH}ev*uNXO{$E!E*KSM6-dPU`c)nk0{8>g1FnbtXcOah zDheHPqNWsZiKHpHpE|E*K!2QKWG@G}<8*_|TLWwi`dDQ;>BEA{a&vY?iaDo%En@l2R@$;44z|`vko-Fv({8gKXTbqrcMOS4PfZx@9rufVy8}y!i(ERi z7Ex1%iY@Alquz}Q3%}S{5Y4+Kul{$~KSC3iAq}%_UAh+8PVzU8^ZxTZlM@*#^__BJ5y6EMu~@ssyBFMT;dzOwnxs5jiw!C`%{*v z_Jz!*Ln3(FK&eAdXH#6g#?VMy4gpt!5HzL524_LEwdOlrz5zs>on3VhUDrSlL5xbH zBhdpf3qx#r|4mlqh{EQ~vI%i42eH(>4~LaN)2rUNhv*Hh&`cy`rO;!5_NRT-X9HR= z4_~ln|I8*L7;I7Hm9fO%qHnHLF&9~Epr{9VaL{Vf^1C8t8LY+)d2pgGqL};*n1yv> z&vo&67TGjBkyXgR!yGG2T%8?0t(iEeE7n$HfIbwow{-C~ivlmM?_l-H}BL@K% zZ$_4x5n9Z~e$wc49x$eeHrqtH6H#EKDKLOV))Wn;ud^a#^8EfG+`oyI-O4~xC`ZXl zkMmsz&P3esbS8mtwIKRDIsh^Ntx33kB`(A;iRw}R_I-f>2T)v#V7|SU z|1po|KMf&R*&jpDaO5NH*3;O$r6|e{hVIQl-#S{ZcB2!Kn%=lGjRn4~YeY*M_6n)3 zqJ%v|cPn+*e(iVq8iOw}yeGC@-t1Skv{hb4bg4F52$Hv}V~30n6W@>-ftbpVUlIC! z3OT_lFFah|8+`uy@Ba-4qYAz}k-`!*$+1N4#8Fa;MmHvT5IzuA?T(pTjXysIq4yuH z4}G$Fd7E?dHXk_D8UwtY+9%_UYMgfY%fse0(xl(`E%6AU$>)Lo^(2o$QhxmQ_v}*a zWgJlq{gZB8ORw50R46yx%&_ z^no)nXwDe}+Sr`$20lt5+K?$DRNq?`XO(O?9Lbb_%|j7{2+|xG#5Bbm>WQofB(XAH zf8Vv8(BO0!tRmB{`_~Y!mcTZE_Fa2Z_Puj!p-zRghx!|ZHv@9?q9tJIRd@ZpJ2np(sa|6CIP_b zal%mbdmJ9s;+!1tumFR^c4ES=DX=@6VQQi4N((V=&@L z%fF3((*4p>#d*3gYIDSv9`2gn!fwIrmWqeEh;FRW`RDGOb6066pE|zkJCqhi;r_ zvm&m6c^Q4luW>(|Gp*BJa|2hvPrJ8CI{p1hgk%3+HyvB zd#aZAQHf}7@^%MRu+$4Kn=3H2&N-xS{eaKq?gK{{?N&81v0XxLi0a<+-#rNOyyJ{~ z?(`FMGu{YBh4m)t&!*3<$y3Z9b!H1@VV*)AH+>KNvvXnB?m%kjMRpo%8%QS21muZo zzpR6%4O;EZeAoe#_rc6-sc5H$|RH7V{JxfZ5jXCp2ZwOn_YPNbZ+= zYh=il6&>NM(^7{|E9zWo-22eu@^McFAWCV}&00-1R;wf5`_(pSsrr55@^`=gHF|(1 zOyb^BJ7O&Nut!@O8d8uYo=q17cM}g4?PgZ9GiRa#-<=;h{FR1ZxBV~RxRU3oxzGwJgagPIU}w0@!%=U=)T9B;{3I79NzluK^d4yTZ>OUOL+UbY%D*6{7YxJ)-ESSr;x;(^BLcqSPKl=~0gK7~lp& zSBG&5ip_|PUw%{+^0{4lw?Bn@HMzU+CG8DB!H+IN-QY)Z6$(O_4o4+-&3!Tp%V5*d znnck1$3`eE0<_Ku6gDT8s2tWtH?>A|LNDh8OiBv^b|U_vx*QX6q?@e_b|fktA8=U~lq{%SdOE~y#s$a~@GVd%)MHB> z#rn{d@`lT1A)_d1wx!vHsBAH_N+nA~y`quP*zOGr1WLbtfcn&6O36Sz4`6R_VBYU42LP&?_FJ~v{OM)8 z8L^x)8Xj>-@07IRfOF|NC~rCs@YwSs!UMp*y}X1}gRpc6F>j0F8`L@OfAvf8@3z_w z6J;vJ1|d6~&va9XENVw5ViOC}GkpyWY&EiyT+WkTRT==5P=MWmhkAB<8v%YarMEV- z$^Ewb(H}oc#OI-e<)u}aqZF=n`v6m5DDZXZW#BOh$ zIXwYr5K`fRAkNl5q_QFF`Xv{4aVr2}?zb$Tq%(#lmi4;l?v`HuUsD!?F3oVx+dD#i zFwT5EK8%?0>@6aB5Tlmjj@dVrAHC&AG#hXmnTQe3igDi&~*myJL2?3Mwm!GPaZpk2-+Rq6*KkL8K zVrvVt;XvLv6M+4V__iXB$jJ6Na|qZ3%|YCQenatzM=I&D(ZYV!&@N+(p`%p%%Y`zR zXp~p4cMdFR;BK&O{RoIk^0XplP`{Cfb8jbTU5U}*AYO(ODI`k?RM8;_43jRn#DH+G zZS21Z!1l|sZo5iDChz|IUxrivj}Y|Wq})*lBvT#qMP zIOzxcri^oaNWt>{;(wrh@_K;?swlYlMm`n;W_pYb1{YVu}^-ZD>Tx7h8QqJe`?XTdx=@lrsiv`R|F(ij^g^7(5)dAqQKc zQ)AW7g2BFxGug^nB=387xSU?bPRPA&hQC4JyH?oYQt#EkRv`wSGAM zS+-^gd#A5}hznk){fqS39r6?zm%?*q{c2zN&?%l3sbLtgHKN2t+VitIQ?$5J>~9`%iq2c3Ks6HR@7*4R34Az z86O;)XBcedV96N@L52wJ%L7e6A;7v0Kr0p z*yXWCi;svGSLiuWlTeB@ir%-8%8#6LDOteyEPSrD(QTylT=(j9LOh5t_g@c#zlat* z9k91!FCQ3GBjozx)K7i~Wfs#(XQCp{85liy2z-0RWvF2QQU9bLSqM$pe8dmnePG^~ zyi(A|y)s}(Eh4d1urcDxkd&&OKn07X+-8yrLoj_nxI@~XGW<$MwF$!B!UE2hnp3*2 zr~vQZ7h}OPjZ>M({T4no&%^7%+*wu^9FqTp(v|1|hY2pyg(K8+e)wQFr%M`*VlXae z;oe$WfZ&wL0zd$EpFF%QMHk@+`NvvAP!7Ph133O0jx(S!V#uT5O<|HP!0~`-HLV8s z_fQo4aTpuJhQT9U>e!w6lkp};wiT3(Lg7HtK?{CU3NKAre(4bG^OPWt#fJDQe&)dA z8lAoG}yd)lK2!%gs96_rcEfm%CILA%tzAZwPAR zS}lQiXJ2u33r4!#8J@Y*ZU@tu)u)(}3aUArL#kR5cw!pTzeG*SO>2$(v1UI0k>n|R zmO`N<2B&~Vwfp`&Re?HjHl^U`Q6$IYroynDleN@T-k6~NtW}7eIa@G@zwp}(HbSMy zU&Wp7`9OsoH^qF_K?i+CHBV0o+#YEXff%`+Cb3*?{xQ!xk{#;&YMM)&`MhvNV!6D0 zY`({KY0@Z&)PjCpii6KQ-{9L~P#}V6EJAYR;6;-FNBWX0v3#*c*iBycPYJfU@T_%d zeYMK?yN3jN(zM}(ZWSAx8t)0JUQ~h6BkuEM^KFieXq`)}7%Vaq-z#|`JQCQ@n5g=K z3ny)ksTU67OvbotSwK2)GS-!|8L+u|8FC)Igfnm?`lrjb#psmmvq6a-mt;7&9k1!P$|$*n#Au_51Wg5216})eOr#KF;L3U|O9;kr-p+4;|7p zqHGAHI_-L#L2UXVM+PawpfZdHD2OSX3x)$L%FV-V<^0IVw|>C43=1vxn+J#%!x_n? zdNm2I^0X6{$FP5um!g9h={&;j%2)Q6>jblYyA?Xi(Y$1cJE1#IwAK~dAdw7RO~k`y z@+feIFJWbyM*F_Ax1j^cl@^e6L3LFEGI$giQzd&jeO;(J3Q#%UC#8w~F>=NYIX`<*1)?fRB>{_VqTK{d4t)0B)1mdzp?jQHK@`FXdRaEVnPTRYnkc%-R8 z>iBa7G7{NJt1c8oYI7CVd0>z6FJ3xhEJsYSw1Sv*r6&SnFQDxMa&fJ_ErXtT-^J3r z3bX=|`3J;?7*ctrSAxZYe~4rE)1Zuo*u@3`-H!^L0q&k_+qx=)rxXZq12rH$$&$UW z%` zIlknKPcj%Q8lnQn`oKz=7fYjr9f4%&4LUZE{g(T7L({I>vX-U-@5vc@xDP43&1zHAz-U=&I`Ri=RiDEor54$R8$1T z&<-PX2E|ZRv`$1yN~&?NMn@`28IaRWsAMCqZ1AkkfNkz8mWzzy&1gdE89{3zUUh+8 zmZmWF4ruY^pi$(<(#gT3Ezd!+M&kwJz2N0Ak{?cU~JxP7U@xs@K)Bl zNxwm8-0t~C257JIWkVx_NvgkN0&q8UCfG6;d(TM31p@!Y*k33b@y4FucBp%%+%=Ix zg(KG#4wa7#bHpH;R`;BaN$3;U-^t`(pYI(6!X*KP68mH)i?

-ufE0?nbI1>ca>|6syj)-VudVE0C}^1btEm7BgHel&|yPf^6KLbE!ubfS78l>{A$i=1+JE?{Ynbv^+u!V z^At92a>T$+v{*;^;1xDHto zX#A74(;w4`T+FV7$M1lHr>^Oi^5U|(YLLc5^z29T=@{JM9*vRqGwr1qSi9>hV5>(e6tO9uA@Dtyq(?HG?1$R1JF(z?O&verOS=U)F34SQAtKCJPs{ZhH zJ(;MYqEr2kug87L&ipctNY{r5szZGU#RS&(cPedu7_pmJuQat5KvttnO3vzGYjLCv z-B8q7&|$g#q{GiWqGh(NKf2A32cBH5X8PhBvO7qZp9M7#tPd%6eP6-42~rwKkpHOy z=MORcQw2^ms`~%i@O*PEsmg>|*h*<*W#k*tC-M?nwDkq)%XjU(^U61zOFQvseT`Ob4}QY zuw7;Rdlg$#V*{u85DZB=zg@MqJkS2&+TN{BoL)Mm_21wrsD0g8_pt~0MPj2vQ;}Gt ztYLG|9DiRSTGg>c_%TLLA1X|^;zFl@HPo(wnhc7?O)if@TE<|s;6Yavx=!LFQF9q_t&PNO*=_p-lW{PwhvdoU@6L`@fE}VjLsUr619J<|7&>WQk5Ig ze&Kh=Elr_8)X{r#`{5B90Y4m)GW}jTP*+~K$PM8>fzm%B;}?#nCH2Ohb#<`Z4RhJc zRCKD%p^9v8wUNBWeU1xuvmx-X*5SA zFdoY{GzPpqwS)KRSYBATbH4;!7Wky3K3v`+Wm$ElnwGA~UYua@q)2ov(kQR21RBE4 z?GS~e4}W$H4k>KifyK~V8hu0%#N7U*G-ngf+ z#E$4Xh3^K|tVN2^d>%gM6j0?mc)(WRwSrCNPn?2JvX%~(pKMi;!hyy~&x(}-U9Nkmyl!@;^6wKa>qXs(uwhawH#%^E3S>iBU%W4#fA}o}+Y;he z3aZjituHdQv`N=+8PTd|Sxh>j7#AFh@F~BeI;vZ+F*l2>&9f(Jvchwg422D+U1Cag z85qm>=m8P5IJP42v|DSSpzSP{hy7j;StBQF`47+2V>9b9M9rH@u?;`0R1$JeJw#-I zJ4Z8?f(lV3wH!UqwG&0F4Y35R6TrIQ>SLJ};%-yg-D+yI-CDRSW{j1@o06$|_KE$m z7nI`e-aVqe7fT=48P&1644o5SAV8bOEqglqU21i- z>`OT-#Z`c+g8Bq!zesLz%0sH~fOz;caaASJThP^FYd@G`%zSqHBhqHo zVE6scT@oDWJ5@^CoFTGVkzVYnNsndC;S;IEv~PDb$Ehn4&h1Tt$yHmtQ(l9_ny#pw zbfddncLjlB zUmCOGg*oVoHPO98hR9i8WhT+dfv6y4^-J>d+_86lWimESGa}b@fT;dKhI^ zncMM5!5FlM^vG|`O{wRUj_X2z)BX+BI~{i>MQ&*d&v6*;i#rv@Lag&mLKUW$(Aw8i zq$8Pw-KWNN%fH$t26p0;UA9$f0|U7u7@ViJ=G<%pYeI>Jq5>gvbIiscVMZT}aMdp! zIHH4Ti{wNKjSy-|5TiJcF*; zXiF3;8Knye>D$IcLvEDzwYfMiR7%f-8(p7-dvrI)fpNR6kIjt0qUO4d{x=EAUhH*- z7R}SwUEqe_!k5zD*%@!l`V#K~DG@%3?DtG(H;nhLq5H2vWyrXgt8unkST-n8t-Mpx zSXor5>=P+nLy-`*Ao6U$Gc0Dal?}6$L8e*LaJ>!x#UAo-pS-ctF`lFFe#>M{%@M z;pu&-^n7=+dn9oFj$7H^FLOR_w&T?ygukI>vPXD8<||BN9-8d`EtuU05JzIOP3zb| zQNov}WuY@4s^+>liQPR<`^V#=bDW}?;C6m9_^B@}%8NH&ugpngwKgL+)5!y% zg*H%O3rg0vTyA_9=R~3dQxt~`)aZg^VJp>O4=Bt&mMQswE!y@$w}*zU+?(fe?&PPM zrq|m{JsLJ!2V}eYuiTYz5;W9CzW3Zb?;Iy83Pnb~xm}-Ma$1dVllrYtq?UPKG$m-N zx_9&{4{Q?e(*9&U9tO!~dHNnJwK_WBeYrpw|4kx#w4SK|M4Q5;!LZua3+xuk{Gc%P zp;VI*^~b|x&}ZVo!brPe?ME(&=Gy$gch!^X^UEB8I_C|O?PJ}nl}PM~*aZLB@`sB} z>uTM`?#P)$|Ma#Tv3xZaq|3`K3Jd<6EqU$Fzs`P^uOM@@Q6LoUGVMD1Ae9V>zT4UD zlNzl7LK*1P#Cv|ZD>paO_%+9#A&lAAKc6{talMqTZE7}KS$IwnOu#Z@%;{cUDo7P3Ac@pvl$QS;YU=SIK{iA1GZ z2!SM<8L@~yBBq<2kn6r%;+t5X)eT}Yh4Wd8K1F>j&!b`98$`C5-+x~o zIB<(|Y$5^Q{Zs%q!&z)drmxhxF+3KMC3|I=)$P6#+tou2|0zuyrr6-OAqSOc1POx7 zc&!o1(C;hLsg-XN$M!Zk%PH`JYuoGJRV6QAfP(4gdtYkxfYSOfERHAJ*K5>OMq37! zYGk{)0KPzSjZZm${q#ZL8R|!@{t55vulJztcx(_ivR9JGA8{!A z#~`99+D3NYX7hwJr{EcxMUDdUxd<_B4;-fF0NXr@eWPuP-4k?=98DDDy7MjkG#Veb z_vn?*X7B|_Ic7WS(N%zLy;vcq^8!^$LEazPj;h_Wfk#<7Egk&%+W}iVTVhcj4RjCEuT9~|aZ$w4$i63yjxJOf1Ulw+w+KFAqR{1prK< zNoZVJN$?^{M9t>* zA#W?~Z^NkkJJ2st0g}jR4aUfs%06&O>Rtk24XJkK5=gr~QoRSaIzH=E`9O82gr~xd z+4aotSI9doBk%LZk&>JR8iI*Sxf+~5!%3oBd^^X*?k&9Vf4FquyO?hfNp{>?>%`|v zNi*`JBFcil>1$<57quDa0{>2riLd=Y%F1Q~8eES?ZP`PdZRi{TEyEuB6^1D%Ww_w1 zs$0qdrqV$@69c{h$=E?daFX;u-U~sL&-2^FkkVO99fId+G;M?Hv4rm2Ym-Ugl_pXA z>YAFgzH3uz4nKHwLVFIEcG#5Cm7xg=1ex1XfNZBjC@Z(e*}Y77ty)i}5brK_EG|DC z!yxTpOkvth$8mI&tysQh)z*HsCno3Qt<&THzf!FEPqvMjKaV(NKOPe5C?Xd2eIp{O zp*00=PKGY(qWbT?v$ETkY3!~Osi#R(6rY2wOfq&VazE?)HArtegB}_`?UH#_m;3h- z-MlwWll$E|F41Mq=H~*hZo)S-=KnAef+Eha$OZv<1BRodOEYdZFg25W$bgy4FO zK-9h!*_kXqSM98c%kXiul}_fR-Hw*TQhNr|iT6EBtPwejP!i^dQcXOWNxou^p!UrP zPxk*azu(q>Pc2-xT-;Dl(PvXp-_&PkvnGDKXErIk?kuOykyi8cGHd$>+3z;UtNy&& zo1@ddYaUzwu{%y%^si4hopW4lpUaI!tb1(idY5+{+_3%8IrnGA)@Cx=_VY}WbXIDX z0$Y?5znsxLC{`z)e5^m^!mZGlgkA~HSBI)><{NeXGxmFE^h)5O^}H?aRTn#?8+&g! zmJ6J&T$+AvLwY*fcYW&ve0n#I$JT#J`MIDVslJlk*<$&bqx0rUeuoa^pWlV zrmtInF6Cdha^<^^Nd`Z0 z#^fuZYQ~e6UwGb`BXc9;(q8$;a_i3fC+1d*7h2y>`dKUdGUKWAwH5o0^zNE(fBal} z(^PHiAK}OT)`{ztU0nRtL@#UNiC5d%E_{6W)91%skwfc>j-v46@_ zCvW~*D|G*?+VUkGmsMHcRGBw-s_XLfX27OacYl6lwYjQ@w?gRBBDuuX-;E0{Mt)=F z&Hinq`Ap2sx?eAo?Dx$$X8QPkli>F)2`ox^YhsxqXC1kGxcNlYznF7dZdy#Mo@2apsmIxX zs8=fH?=9+S=~L|Pxs6QD#}ZsArl}&K|!HONs1~%LBYX6{$G280J+oQ z=Mq9e$+k#|3aPq5|L(!?LJQh{d0Cj8=boA5{${qMncmBe$=Ww z;X7(m#X^xcuinrI)}qlUOzo`_y!Vv5XGd;JxzCVYv~)2tXE{2^$j}SWlp18)%Z-N>{g>_Y<9ka)eqKWJXX96wp#;2 zx6_jutkJm43^qtwdkC#AC-Ta~3X`q|Gc3yt%NYN@f0b{ftc-IZ!0z7ZOStXzTh{Yf zzhI>Y&xetlxsl0X^ujw*Mn_&92P)oy}Nz%gZ{j*Kj)mAw1;srje<4sM6JRwKJ&CW7+ z?{>^VEb-6a$U(I`exk*?_~;BON?o^I<{{%DXP#A>}M zl3*3ABD_DFuE|gE^;rw0uKIid)5@;*xw+Bq?b*;-z8myfIz#TtGH2NB&d-yHkIaYM zU#6BMq8RMrQwZePee^*I1k*>RlgQD(#<8C~SgDIh)^+v6lTpcOKc%mh5??S*e5~zr zVzMPEt*p=u|4!K#HX2UlYAFFO_4?;kpCYsu-A9BAA8=V<`5w6;JrdTy}xYdC^XFiZ42Z;r#^t`7I^|+3drKD^8Q8zAkPQvSRF(Zfql18Lq%K?cg zwHn{tOCN|;Qfs<&ZJ7R^jU`OJsKHlkxl$^zzJ)XKz5J#rOqOBl;bIZQ&kivNz zE#pw|tBL6f06+=P(&ZLZ2Kl!tk<_NT@tAw*`f>C#aiQvG)h-u65+-NcD?CO@%v zXFU^a4l!qIv@iBCe%{K3KZrrecRqRX1jc)ulOE8S^&>dyIq=*imv4SMr|+uov{RmC z47hUF0Wr8aFo)j8bv(i;CLDM+f2^Xl2fvMQx=~{79}Xs3yu_b65rEEyn4XBYrE(sv z13f`(dSlkhzRyHc*veN){D>|v0@HM(nD>#rvn+c??7Pk=e|Ny}gB!8yHx8D)u|B_~ zFO|nCp&QdJ@T5&QI}IZGth83_OKnc~k10N0M5g(U#2=g|NR|f>47U(NUE-5f!e2js zxY5ymj%!>0hTQ3z@XwoFM0Fz=5g<_P`EA>6m3<`kZvIB{R?@*|uP- zz?5Q8K$>fT#)_>pr)sy=yis|=a?erCDyhFofqM#vh4=Pgvm^;MYB!zfJfqBj*&#$j zZMhMB$A!`7@O*)<`KurUDx2L#fQvw;X&JV(5tL%O#C*2n-Ko_&102lh_7+dJF290y z!&f0Eg})HvxWTQt{sk#*j+GULO`twG#id7Bt47Xr~q?1V`Rz)h0Zo4|vxH~X#x7gB$VD(%7;+FH~ z2j6$3j^4nQnT26S@2N+W=2ru47Qa%4*jU+rbWy?BthDkeMi}**jZzMeF1diSWcYn} zbi|EQy1C7l@Ty?om^pIE2*33~f+KGmM$d_wf4IjPX4sLE}aZ!?;?NKxhgy#?$s*bL)dtG5Lb5% zH>hJZ<8^HNJfT3mn4n-eNu`cMGBAKPTeXo|kh;<`6H1zRbzS7l*K7%RdCCDa2XBax z5_WCg*#azN=2^SWsTmaPY*CN^wKgKQw+PXvhO@K2S3vgo@vim3lP|ihB9D?W%HuYxhke|k5vfhPPV4Jh()gVAE0tTQw#0*30-26MjGdYi+NUJXk6qZQ zHqFzV9O)9aH-CdbmEs|Tqtl1|Qbivf8h5SI$kc|&!Zvipd|R1Te)i1T+UxToVdi>| z=1oDpgCBp&X(CgbVowk)e>5#zwF}Uu8_;r%j1dfl0ZD7Vkt%-51c-O^95ef5HgSd~ z0uS4{0WmPI9#BD9oL@RIDT1fPkcym2es3bvTd|xHHWba=+M2%|1mo!>nU*@4;dDuz zizC9y3+e5_em!Eh0knQS^%^KlM>_R$d&q2~FiZdv~a8D04iO zEr}DdHuG%}#R~ulZ_NU>;lEk&1X;_w=R%YF`?J2tSh8XxUI`kBUaHnPxm?&>w>Cr( ziyqZPv$0*Y(JW^m&h=gFN9OC(Q+jWIYJaZQ^U~>HSbOLYeK5vU&F>XgK9Vh5PE6jV zC}wSI0Dz8340O(Lz{SUWwl921ady>3x#}_q(Vp3&$CiWgnWGupk0qFM3FEUAMlkn6 z%-m;%2`o1FGOolQxW2OjcLrnMnr)|W#47_x1ePbKB@O!CwFB;JkC*|hRC2G9nJroI z$2=UN2ui!71h~&UU~^XT9FkIC;|`x$ohf6H5Mbn+#o}YX`E5F%>-Gi1Gm!F$?0lUG z{tVGzZoxZ@_RHtyB9YaSM~f_ zNFDFu*m7Z>*Al$-YIYCG!Y|sg-dzbVcM;rtqQz~>Ar~) z^CDJC;%T`vI<}>SAc7BNSD$RrP3`{(%&_U?>lxC^XiLVLvAR}$?i7Y6<=r;DDQ<{z=2zTH_Nv|r;#^DduneIUfq1q00SkyOyH9yZMy z&SB7fC;Vt~wp#MhNYU#IX#{)CLC2a-B_CZM+v|G> zJrgZ6D6bw2ge8x-0n-D<0k|iS04$}bUu1KJB0pnG+%gz{ox1tvRP~|F>Vu%Pob+Ds z>=vDt0K(1d0|4I2Zxj~e3dQ!wS`m!5T@PI*i0OC0?ZQ95z(k0o8Qt;iie<{9%Tgj= zozDc4z0yS+fcjkNg263_$(T=*sOa(-K^@$Y#Iu2LGkj){$fp&a@-zR+iO9ik&&LRsCQ>%{zpfouBmHA$dNGaV)kZ z#+8K?S!_Wq{b_7^chp-xHpAnd3A5*b%`8UANI1K4VE(;I*l|nb$_!QPYcB@^bwhme zZgzl`BEip0NoNMn5~#%Wkws4kn3FUEGE#28xbbdq+)MM^c$=Ac4;{9tItJo>^4wGm z@dM+f@wt9es;ZCIP`oSzl9$58Hnbu<-Atl*|Y+$yyuh?BShpedAp1?$hD?BTD)02Xa{gjgh zhrJR=5T|}wbPcf8cK#_SNyQL5dgaKs&geAXo%TZ6n1%$i5`XU>L6Q|3yM2rBBL~Bf zT59)CM0ZBcg_VfedPYHrAoQ7+kP(HO4#*P0Cn`oThJQ9|>d|%k+S78T8(ViELsC;I zDB)_6;L7VU9gkaDeV#{vcM@KevPuj#QuSXLKu>IV5q@obfT**;`p8=~zQy9Al1GJB z9&nXW?Y4rxx*U+A%~_8af*1Vnn^W9y%rn@7_6^ zt$l}~)uT6EYz$xj4Ycd3SY|aq&^c@%=VUP0ze;cC{_cmSfEQo(IImZ(m*5Tu4lE?F z{T_lm%W8|ooCzwhz3{T1lFL+?#LeKSC2XnoW)sOLnEAw$&b;NvAER&syDk)o59V|v z?TA|GXfavgs5GCLaJ^9e-x?6CL8Uk^o+CZLiOj_KO9CE zrP6KlHh8)-2{Y|rw+a!wW{vCqUA5qlyhe*JUj}^uuL*-=p)8IiROlUAA;_e&J*MAK zsz3BzX~J?q@Hh0&A!jp-OBhFPfXnO^s*M_kZ~6O|nrMpt-pFbfhxA4UIdTpbV)?J_H2Mrf#>9F-5e(__ zevZ6o;{$>t$RmN}6#6?%rD{C_)|I5|_vQ*y9p>WH60=6-_a&CEplTpP*>T-7IG__) zFc`9J2O%*glI&y`OUTpKb11rhi5_Z`hiyM*>+UkZVOSK zfLote^gxyAf80ykO>|U`aj=VBW=}8qj4c>We2pcN0k1r9B;h72VN@!!T_Yfh_;=z} z$FMcu7~#R)?|O2T)_}-tTQ+rABr|b~ux-?|dsx?0rmL``@PAqN<4#5Gw8ol@CRL;- z3xREp<;(;gyj@RA^-`g3fM;`+qfAChu`?dUuM>3Z~ej{p6TS^g{6}nKQqA){L zR7k5h_X;n=IW?vtWDG7#r6YLrEtKk!mCkH>8Z87@jKH8QC(95Ha*G)WzGhEeUwsFZ z*M#gsr6{A^39zCSDA>IAd!)M5wi5YwXx|=}-w}B8{G-d2%w+YIo9!*qo3QPHSbDw; z73qg~o7Jm@klC$EuCA3S0{M#yX&X{|B8HuY%JRdOq#S#1*D%=GVm(#opD83Cjx$6W zu9hYMezguZwpZKD?sMN2Waa8`P7tS-QEg5`fkr-~1E)sv7Y9ul{M>yBymn{-jLn-5 zr*9EUq@`$z@0?a9vcbdKdhmDIth$Lr+YJiO*O)o>o!Hj(r2gq@Em)I%p?O77>6z8Y zb2c^mZ7jLS|59}O^SlcxG>5=h5+$bxBR*{?=LZ6>=xR4y>lo`j+96>R69-FTgd-%? zc=P=@jZ2@stJVHPOn_0?exbpG1~Uo|aw!x4yF_obb)Mw;$=h z6p%KKPp`>$+OENo9;2_z6%6Z{Lq`&@=rt~O%%TrUG!LCpN?mVg-E=D5oFxs_qGA z&W4@H%YI0jdNqtuu{5r}qtGtkMiMUWp3z>oGZ(>z*y@BhEm!7VrrA|b?^GJlidbyE zLH9YMIes?wlw$5;H+)Su>jm~%uN`>n3K#cI8Q%Uv?38NWKD-eD&6{h-joCt`X{R?d zRA-@hZNjV*Y|X6|d@Q+!B??LG8J6;@@te0l(XP(7LN~+8ld=}i*-6PC@MyO9#Uilj zd-$;vHnW0`Y`a4RFrQOf*yad14HZv)p1mcwZrz-q#VsG92gJa)ZI0VVZZLaZwayst zBRMq+d9v@c{eO}@Kk9KiIP;Zma(M(fMc%3JHM~5IiO9ZTcdShH@-hg`db(3eASK@N zBTf%ZFEyxLgUk5s6-DZN2O=NWughdS0te4!*<`x70bth`qyFZwQJ;-SJ;N|#idaAG zqiw_90|S0L(3Pf$3g-qBSnmqza|3T#FY*Hi+HyU(dVF*du%8Wo^oNRJlVS_Wj>QbS zQv?tc=@`y2AU}w`9gjgjKlu_CRXMqZ(voDyLb}gT3#- zYe^N+zq(1$zgYc)5hi;Nh@*L-c&+o~-e(ETZozmF#=o-V3h)$BYcg_&l z>2a-dKd(#^mDiJNA|Aiixm1SaYpF+U2C-<1pmg-J{n$E7ehV4(%T1l*yKOG>J2*@o zQtI{IM_yhEh`N>GM=un6eHi#%*0@OfFir=3Nzki9yazZehq{w;Xa z>(CGhN!~`V%flU%qi2w!f0A=??cHHEoh(k^{;deimCe%vwO*+A?XpPCMQ_BBrDbRy zXjAZwpQZn#(i45-=^+s76|{^?=Zn_5A0VQmFQk4UN1*hUT`?pEZeyM3eKxvOZc1|0 z{-L46g{PfDp#CO?ShN|eiXcB)nA?yTSm>!0&ljFIz>oiKXNXY?=(B6l4k(Pjy#EsI z7+#;){@Wo^Q*E@`AvxKx=9Rq=GR7YDTN2(d+xt?~%tRR>3mQb3+d2yOcOnsbrLe%n%bjEkc>5hBYc4zz|^D$7dVJ^Fg<;cTALEVB;>4_(G~n%8L$w5 zi>uOzKIKYpE`91E@K}_{(rw)q+_Eo+N2DDbVc{l$;$frRzjCw2SKq)fW)xUsPss=B zP@^MVYtL?2t=3ZUdWXxY_?XP|$8s&G1rl#grsaP+N<)7N)SfHmF;~Uti0EfLVD7Z% zq_HBHZf_K%V(8Txy)lw!-aK|ixfKhZ;hYT#CS7u?Fb7!fSD23$t+ngF86>p(?*5Bj zGaB|wrqOP87($H`?|a*bG7*s~dKpPJ6p{-0zoiDBmcbm+t7ToUR8?C`FM%@e5IJd!g4$xFpu?oa2B%JYe z+fF31jD?Yq{<@gcylr>n87I$6MFw}omDMYDdj2Snw)ih!6DGXd2}KIC+Q>YKa14{@ z4q0+R=~$j8kFI{LImeZol9g?=S)*i(EJ{ti<#)r~P_LF*NzESDT+I3^D35Y>iv#j0 zjl`P;cAfBij%uYpCyo<$y4U_LCv2AZvM({k6q8Qm%p$Yi;R&gkd>vR z;`_I{pib|bNR5rVOFSQXKl6ka2ZlpyJKJ74a<(9xNyt;s0=1Y@G=LJWI?jK%gornp z4h~T%Qx#!hXG=ggeqAmElqU;HCjwbvcv+0`Bk^W(mPKw~%L!O2q~8(CORd)py;Hlo zV=zZV!U)Q>)X1$DRHiY2F&KKRzx<&D~1bGw4H~Y14Ps69}yzAlMI0wU!^l#b!-WlTf57gV`!oU{) zZV$v=L8=O=4&#e8DSwypdT(UGK`Q12)DJ@lliSCC3jPO36g))?#sGnyuuMHK8Tw@b zzA&|!Htgu(oY4OTTM-i5Bx0id#KiQ1<1ZR~F;6cmVp}hr+mawy((1B1jZ!)K90ay< zl8BKj@xMi^=g9WAm<}Sm#K&n}fWW>X42Mq0?IMXhrkcpznp#VKl^(X#3Pk*xt;Y!x zGKz|>j!*tX8wY#vy_a{yk`F*6*@OmgBLSc>?1}2H)~lGmRr6*(Bva|44Mh)(yD?@2 zmp8w?{DykUx@WL)cQtOH z(tvIZIw(6pCYosWljd$%Bgg`}nIf2X{?E zDhiyA1?`dU8wDy`6o89vSU#>XSd8;cM9Ad!&qi`zDlObRAM6W}Id(CpZJ=U!5#syi zBD_3k8P|>#g6qCF(#d%GpV~>BgBx(a5_Yp6I1=xqJ9$YP4S^6peGNuguOvH?+!^bpz)#2_`H)IQmaLLK-(|h^L6~6QCon0wf zFDEy`1y0rp68z8kU{rziaW$G%r__yvIIE$pyKEVymIJ0&dp!LswabYudR-h0`N#cp z^(s&3Yaknmv4lS{!BWZQB418o!{P3(Z_Jn*cGNO}$w-kmKn|=tVidCa!UD?t+00(= zcQ^9MtqjvV@x;VpndnPKGkV)tsCZTgGu4GH%$>gzhD@=^`EtASq8_J#)p7!JA88Sg zu}iVe9LR zrP~X|CR^T2mXH@)2i*jxxZ*_m3ispD5*^jInhR{o2z$jrnnyZ9w&Asd%PR zQ$nGIlbg*t&u<1&0%wB3)c!W4Twwvo`$2yvUBex?pJ2CjJ)}FH#g}DzAIiLZ`d$AB zg%8hYSAvpo{a|l4tzz8?&uNkW51|(ZymviPT86BI{_Em-W`gYewO|f0^S0Dw>C_a960E#gZ#dqGvN_yYc3dx?Yl7MSja6^=v9Sxpu^3hnI!tqv`hGu1Dx3#5@|K0VFs#yHEVvs?I*SqfcDOxj$ZTt~kN zD@(A{r{HV+Kpwmy9_SCdr)Xw&5+Vd#UVbmeWA>mDnJ~4^W{K>=m?Cq$>0^V+%wWZ5 zx>HFnFuRmW#UH(?`F&zywxxjeYG=N5uw-Pm{X^xn@8z@kMhdy5;IGi;N~|eSLVvWI zTBSEz%UvZ`rnRJvsfzZ9`zVT^{!V-6Owc=xetprHT6;HNeD%w)VSH+HXF}HxGh!eT zlPP@yvY2EuvG4y#K1e(m*QQ>eSquf97&2aH4xSi?o8(wouYu;N6Z<;Ue%2q`Z!@kj(?8o-PT1;N>voUWvKwb+xxQ!@CN z)Isob&({XS+SJE?-S{ z9PyYPqcQ8_oOCx-`f-%EbrO0N#JF{JxqV^iGL4b*Up$w-t=Gm~kJaO62%u^dBgvi+ zh5*aW`-i#3$HjdT;;vGo7VqLvLSe}=5DbN1UCP4_WXq87qFOmaFFMK(5x@;ZB+(t0 zlHV4B#{k<^$Q81tL8KupMkhI8;Is%e7-S!g83E6+d)Bkm69OdV3a8#h2ne*%RT<1U zFNS}@>HMsNk~A*)SyF{3gssr{@%|6^n8=Y7iF~=&c`$4MhR_8En&WjzRdGUg-B*XR zI!~C~)q7yib9<#2ep8sc8CEha}k+Bu6L)JJ&{64kz;nFSNS_{as$#z zY}YPwIQdzE zP&h9Kf6+BLp}l7?vtC9gAJXJic6p|3ZN|0x8B`;0HKpT@* zBCl67A-})3N=6jTLKJ-O#b-(d`tLNU7BvTKGyPESS`0;!$>)y6g+#LHk7ysC0N|eJ z>kCBI3kWq}e{keqI+wOP^$ebgZ1NCY;|+2hY%cN-u9uC%8qU-WOl&ax=6>O+JDBlx z*5?f?Vk3EK1XBK0{cY^Ik)6?ucbFGPU?jSkPexQzwd_!Qa!*ND=Xf>?6JleoNOd-x zJ=#)l7+Hehh4GRK!hVfrw(N;CEbU^L&u=6%%INQ7?SyZRl4bWd-_U_|@v?F{LW6KU zu`^CZcI)v?zA>rb%f`VD%eDb)^F1ANp735f@S;mD5j%bbrT6*nizgd7qN4p1zrR(O zKWC$&lM40^+_|YyGJJ))rk8sQGLyz(-F;4K_}{t8JP0oM)5RY3Qtd|a_|hEF`*N}? z>5eb(MXgk+5Zzzkqo~>o%6hgyn68QoFMMh(-fM`x7jgecwq4ZD@7*%=V(9Zn_>0E# z`Y(FXDtvPRyY@SLIS=Q&xQREW_p$^}R5zYOZ!LsgO&DYEb=O-JUFEIK>6a0mKF`Zr z{?HybY^5x5rjDsK&A(q_4C$JTEU8~MkONlImK6#zT-ZA&e95O-2lUF;o#u<)(FEdOi~kqLU79xaW*NK7nYnzHBE57^>PYxyE08L4e&kc$zMw;lyc@d`j467zr~Epq1_m|tOQnY`=H9x8SF<>5^Y-IBmFvuNy~5h z$ku-`IS^gE3{|K}vpxKDp@x(CCq${KbH(^;M!u zcH{{6ZfqukX6q7e$h>a%-_KFzhDdvud+$-RlRb`oDCUAZp%%xCHX&~G?JAA`V79`0yn;<1-HmmX-|(m!=ib2$eFk$GQGBTFR|UncCiO@ znYQTop`OdsMkBrJjnb4EGX(y#jxN^H1=b#3jWm+>5#fx5{SXO5-$eXJ*DIfvbpQH1 zA_2eX9&v^eNXIG(X>B*2x~qPbJ_=vb!AwzdnMUSM6{u7l9q|*U2IvucBU`Y)@T_+$ z;-khTv$`V{y7Ev-3D#B;d;(j4_NSH{#sYmzSlF-ZJH5=$pswZ?p*Y-s6<@@jw+&H1Z-JnqT!x35S26$dh%sC4@{(yZZdj*AgRCJM7N9gqm zQj^Z^tcUF9NdysOO@HG2!X*%KhNy;Kp>F$**~g@n8Tfon#!OfO$G{<%*1ekR%Tyng zHfl)zA=OD*ooTmvB+*&M?BV<&mB#og(GWHAC0PR(JueNIgOtC~TMCD9Hc{tUeEGBE z*?`Syepz-MS;}m@ji0$KT$95GYN{akY9ykvcGGBP_amw<6n3M)QUcV@_jEd}$tQsu8B@HhxXJ&qq_<;L-~f=Sl#H`1XZ zHSc~9t!w|m7>vvrQ8dQSC`R2m>#GmTd}2atsR88!3`hhc4?CcWqj$9;!`x~ zjzke*!Y_SBta^XxSCK)Zj@yhL@2p^UizU*TNsi64*)65-)9cLe(dUdA7uWdJH!+S< zG(STP{)zg~Z8T_fQLMEs`LI-XZx6~sVb-$7i!%5p_k@6D<{)No@;5bq5w(aH@7*^P z_{?q1v5MR97C{H737AN~IKL8TzBwP_1e}vyVVK_2-p;R72~<<&htXu2;O^RFt+V$I zzS~gg@OaSV&`PjwWlua11D6UuiC`J26!iN~_Xs~+>{*@&@q7OB##^3{MMwgC7t+tX zzl38gKV^n}AS%Eg|Ewf*rwt)D?DX8!@c3dBpJ^X2B%#S zrx*JN?wicUd)v6jzV6p?-PRbAH-H4gkQpAEr%ME&Gp9o6-#EHLkSs$4W@M%@3nBNI zT1cQV9pP#;2rSEqi@Uu-mF6pPVyJQ|jw4Uf-2!HcFY5TLV~md;U2AR6yMM{LrVEJ& zUBTklNSiRard(kkXorXI>7buCmqmn-*lzaN$i*j_jW`^mk3GZRkW=_s4Gz1Hi(7+v z{zv*>AS1I4K|pQHtDm8Ojlwh6l2CUNUgOeQogl36Qmj&w~W^Z9V+>aKy zw^1t%bYa(4+5ub(IO>aREm4^z*-p1hd;f$;oEU=X%2^@v`Ev zyORe)z5o(Nncg{%z88hw4a_iL+YA`#Mrm zQ?jrGKDq?vv3Zn9_pVpwYuDRTtFuUSi-tp6)cGbuUg8~h_)!Q0KT~Di{fr*Us3JE7 zdo`uB*z=50uf~p8UEMj08%*JF;3jX`E4vG8U%AaV7ewYv-NdsHq4UCn(%LyN{+s#g z;oFk&QNVW+44IR}oHw_=8f`qkSLz)Lh+#9yzrVBB-E!J)S=J-Ses7<@&-;q2&kH3^ zskWV`{F9s)_fRuC_BuN&vkeSCua^kE0NmPI)`B^|EH*Z-A^AfsAT^0AoZ-s$Lx~Pc zS|ItIjX1&W#O5^!+pW@$?w?Qy^r7$v(ChleZI*b9%Mo@LfX^K8?a0a&$|Jv86bbKi z;e_PU{)_3)-63&NW}lOv_&|2{_)r8DVUrY6??kH4ngG! zaIS6SI=B>L*bw}4>(JG$PULOMr1;Rq*=G+H-$?brjIzi;!1FQ=-Ts>)T^;6Sg2@Q zd0g>WA%wnW0*(T&K=KlxCT{rgZYAxM-x_`$rYR~oCI_D8)N1!8k zQt2A<5c8fJQWu4E_VL4!fbdUNNy&|XHTeA+&tEAV{)i%fAsqZ)j;S8b07MD%^S`IR zyC(kY==cACUxzL9alHax2M=pw`kx&X{~x&j^8KHjDF6Q%|B=rBI`O>LYE%I7nVX8G zu*EaMGkf2AvpXJ{3GBL8O!_Tr4VeDf47g`~4J~NI+>Sxp@nJh=|>{bRW1Q&n)6tuS!6^{)(KW!)< z*(?6hV}9n;D3(s5)oqOT67bg`WjNt{n#uZM)Fa*5dv zy_dE;7Gdv!D0;ZA~gPs8EGDZP~GrR)( zc6<^Yp;U?(ed?7ouNNqm-)qqd3T4HdiC^H&tNS@l!iCiIcKdbu}v(*|I9gisYr){wBQWlXa@cnuWHb+5=Y`lS{&w6;w?i4*7xbS1etT*>? zzl*pdEiCrSzIgx@9)gs5OgE$^J@HW^b40wf5g;G}w6Dvc3l`9=GFDBFXJN=03w}L4 z8257f8Y;+5LtiA^?~%sMNG<3794x@iqjnoHt9utpSA9JU!lwST&P&OCQ2KlSYF@G&r5IXQ=skU4U(&~m2mbd0MaXJrO`k)Uy|NT4$#Y~|q3wAdFOX6xdEeWmWg?rZxrcC$$u z=Q+%VQ{J5~c(3i`%HiIJY6BFN^D$#=pJfuC@?ivwzAv=mP`wkD@V2xT-9_5b(h6|< zYubmHJ8MR`aVsWM@JJL_-El;Gm!;M)<2UcpZQp(~Wl9ha!06!7M}RlljJc5GI?tP| zA>$5#^}BAS%J3<>lly+Ksr9&E6l()OK{k5t^t1F{y^${Iyl7`nBsFeq&v^96Yz{x3 zrv(dR^+dsRiFn(V6yE|PUV;-J;<}l-Fv};_=)g|_zwZ2J_4$%vMHVhJ@gRyLTgYN0 zBm1%|>%eU4<>ht9?B(rEqoS)jejNwtGG9wJ&9Z^ynZgDJB%}*BfAGECx&N68*xM;Z z7l|<_^^tc!#{63sxvW0^7%^1}lIiYfN(t%9TPrgCZP4(t0T;+Xg@rMcf_cv_&|#Uo zLJDsnXsJ>&YY`tMV`_hZ#lxFx=H-&Z6>@fI5Y&(Ejb-eB^@82)3jfV)R2tVeIvq+S zg_-3YY6J?$q`u_vEIyMIz^h?Sg*nbiwlN-tCQM-i?&N7ttqs`0JpbH!nup`big z>fafnqq7E?E&`-aPciMNqE3`~k-GO-*E^&}a=S8oxLSm$09RIZX&+T^FpbrmdS_>+?;3M-IB86?!x6t6H>UWx ztoBcKJ2a<8>@7zvG4D*LvH7y=Z`sEse6ZE!h(I@dPPMd|@i}!-gB#$e9dHRSf)&Qx-sC0SmhA^NMEIuv6eiHaO;mQ-ioQ=?W5Ce zjQSz$8HU8q*aG@V`hG(vng7p!)0$wdCm%B6^L}SjaLz zj{)Dml~wJst@)S$tE<=5a?u|&H&~Ym*K{oRvPo{eo~4jBr9oNG?DnoJ2A!(g(Fh*S zVJJ*V^wn)R?%a`)ZHu7_3d+C7bvjbTOy1iK_3}P?XNual>A_47pen3r0t-}eS{Scy z%{UOZtZcWz@UWViA~G;#f@S!$yjtN~MG=(-Ck0^)d*B>taH~Enwg3?AFBqA-H_2u! z?EUq^GG;39XQJ2`W)}AKO%3eh{AV^1XQ`&QVR&EO1i@nuI~)1+h!sJI_`1Eot^bf; zL)-Aw5H2PrqY)lLad`MJw+HH&C@m5uUEUzbQW0(^?=yFp$lI zrMNPIC8QjuVnc)@569P*d=-rTpgJbh{?0uy90iZCtLcvafx z7C7!fSg%lOc&g7oEDZOexop#(%f1ce{!)=+;c_p}8W}}l+g`QXQGE+=VRC+Sele~K z0#4PVIJ8}HpC1y+rnhJ2KDPZ_-Yu?$&|a?*-kRXqAf?DJmggBu`CpAMqXySPf7njx zQcbJ~H?_TO<_(Q0dX5u3xGnH4h$v_FgT==;X+yaGUJd&1D)7d6A> z$aKOnv6J#G&Wm@e_=Z6i1zPZQ}i7(s05(8PE?}gaE zS`(czufMKU0cLP-^W>m#A?{;vBXc~HKd?s$k){Ayh!}yz{KC6|8H9}Mis2nQ;E?dE zV>TwYQ;H%6=^zxJjg&cs+k!Qf{X2m7Qo*<--Qo7B&uw;_Rv4J(hS7&b`uzY!?JK_n zgHwK{E-v(%+o>JXCqurDVq!!MxE~jNZr^S-(e2q8PDvg!Jb6J zT#Pz+MySU!I^;f~2>BGSA$KbGXCvotiC?@lHpdrC2XVjqv!yCTW4!VX4$K-5mmw16 zXQ^7IiWHZlkHE?s9pZlMM)$g1A9p34`aad9H1% z-@JD!OBco~zaTE+>mNwlb|(4@3L&=zhyP&zFGCQ!{@dJ$|375ZFVI~~+v%Ik_i@W8 zVpo`HaAE#u(vIHuWX_}CHD$2UOT9cPKRWR@E@3ye+6UpH^UB;5}pRxep% z?l6^i*!YD}n9*QE`+9s^e6a2P`FUA z&ycs2;cYq1C*RHdxj)9e>0a2t`4;Sl)(Kts*QDBZ*eMKt5}^1x4ZS*DJ4c z$6jvHL0)YK_H99a1qxcNt+pA>FxFquoorH2DK!!+@G4cUC4+q5KVwe*uh(XZugb$u zwQq&Y_qQCvwrckkcnhKC$5UH@%z0iKuWMkxyPq=^b8mYixjFjcN!{soo5BOm-YVj- zXNlukx9pcHG^y$7cI_;`bs^t~=}fswTKygD&)fF_bADlM9;_a{PYspwp!(Z6XjIAL zkz>2{sS~hnQ=HcU?CvDw(7XD-)~PS*gGIPfL_|YjbD{pFSarZsv>BbORSu4H4&{T# zjkvlBx|>TJp9#~u?hJEF z!s=Yk9v~YvsipS*RN3mflYi69de%ut(3w0@$#69Xl$|>1>vi4vYULR1s}Vx~OSIn! z7XR)J1@d!Z^3{UX7Vqg}$d>uv34$Yu!rVZWEq~EMewa_*8oo{d++vo)@1K{%{Zq)Li|N9t=vMoBe>(4 zojK_p&k@+9r{?RmSm+O2c#9ONLAFsP(rJvT+}?s}y!Z8n-VCJ!YWD|=Hw|1)L5-hS zq?UcdVr!&pLt9snaFM|%&`2>b*p%?w+YbAD$5j>-9`b(%^ zHG%e>YHj$XPr`@leYs?X@+-f`SEZXNJ-NE&8tib7Eyio8a5Q!|0*2qDW_Cu55Nr3& zm$GFn`2}ON-5)2ySFCA-&DCJ{Q4O%tedjrFzo|0w_^JBER}f?6O>SQwkb>_{#!}IY z5ICWqyA`nIhSSl#+T6Uu0rTrEZzy+Qx`87|kK)CWDKz^DkU%cmS?dHHce}@I<3zNT zS-%J3#nbTqXhmw>Tic+t+EMoDY~oBTYSk3=m@N&>OQUb2L)g+K7^ z|D*V46eB817VbLqjYXa$Ge!iK%05Jj$-CG9q3Rm;Cd%xNF-fm&c;)6jq3*26?B%~6 z1=DVS%$ezvI}-)`a5#wVpkNRhR<-%_6ya=3YOTR zaLN^6F_nxDu5j#`MfC3tF|Z{efdf*8!3Z>2DB3#tXXb*fgDxJr=Jyg~gw>)Iz&CC7TZq4z2bHfbX{>imP)2`X-@ zTEo%zJNSez2$d(ZBy?;X5C3g zK=|xR=Hv(ck6#2JE-0yra>WGC<*C2-wVbn>j75lbJjYvL`98J=Zv6tKR(_{a{)J0n zO$!*q+G)azi}rgqI>=KPSfYiGe){n+l`+Aiu~b_3D3~X;`Oqm^@o1AI zKKh=e^qBFh(p*lN8q8Os`Rt3RyKMig6{wv_NXQWe z%CH#)a$1Q<$ZTA#FEa7!zP;gr64X3>&9>wP;z)Kj%Y!)^_mL+OT}9x-iL)KgAAHk5 z)4BcV&JLuJrO{J9>GyRGQpnu5gO_fqOwh^LpO_M#9rC{pxd&V8#tTn&)bf$Mm-Tzi ze5lMW-FVE#DV-6UE4Jon9ffXJ4pmE2W9F+3HXrD4Y^KN#8=c$Z(a;Fkc9d+%Sp9ew zH@9f5YkHVKqNLd#O}GWQ8p;B@y2RGdZ!cD;maLc4#*)|~S`g>Gg{cbpNE4b`_^}6@53bc# z?grOSD#lMlZq;>H);aMw;i;w~$X9oD=71g?(IqS8#_3efVP#3`p0mO7 zG!#@JrCHQ3O|wN?)OHnAbp`ughlt9BnM3^r1M6cc$0OhD2$ft#i>&z!jf`6ieX)XxNej7@7zrHc+4ty+X%9XWGkEE zexvfrK2%vNFIXGu`j0dS5g%?L=MLpEd>a<%56RMJVcpB|`dv15DMXL7ZRUXWR+1*; zte(bL3n7K2C1|F5z@5XEv%!`yXk>1&Wo^3E<}Fo9jV1Q51v=4iC=+gTcKWy02`EG7n~)nch_j=e>li%fuYxuqT z5;D+MuzvmI^FM3FZk`ZBNU32ecXF=u8Sq<$YdR(FJ#jCWI+;$oz7_T;_N_4$mN~NZ z4DEOd!JcGyYl^%3W!0b^D=e$WaQS=tT9AUtb&cVxCgN0QpPL`FZW+2W7}O0Jfu2wW z0@fjodn!d|JPxd4z*9P`mMXwj?6)TI@jKN9?f%zi{1WxF57KE6Vr=03+pX;(R_{_^ zpt*4?Q(Yd0hFT#yrp?jYAA=&ZI>%uf-@-`N0-yxT5IAxr3}8LJjeqdD5mG0z9vSvn zr9k+Yhgq}f&4GbY95n);O?-AmGJ*H*_wEpL4c*;01@z7BQB*oe-Z|Whz1O>|b4pZq zk?-S;+x)$X8BG+ZVv^y%Hx$8jAaUtc}o4liNZ7b@K~L**g9{)b7%xaHAZWgRoreGAsOsEo6o9F`SH>u0D1 zBXx|RKTkyYlPj^T@d?uGxcU)l3+pZoeTC!9eU9k>>!3D0qL{rk5 zt*_7kd7RkB9g#uPM5gaH#+FKD>nD8b6I4C}0Bb>|ZeW7DSLY6FeCOtJSrAhJ(zte8 z9GXNILO2ai+<;C5XUz>oVJDUMfG6FeQzV&m7T@40_W4-%O71TdGX{A8{|4+kC$dKh ztyDG_2Nifx^rD;#D&rxFs~6XUO_zi7`*aiW7pG$18*j@f6Pu%!tiH ze^cozmBnFq`Q>Y3$&*4>H=jL{%hlkPtD9IJZs2uZei+gY&gNzlj?n+MFZqHl|2x8# z*j$;s#q3`}j=u6VnWxgLzkPbADgW-pjpiwRASFkB{I>e+pz!AY{F6F)YLh?QaFH{) zmyj@jqfX4$ZfDj!zPB-F5A8U}6PNSh!RLN~yrNF?io9dTWwZ){115MsTeN(}pMP_E z`tqD+rd>>au_4i}Gjq4avxQUIonLO2{QXL=t}AV#?a7!~2fl2X=i)k}!SnVzThCb2 z`CqReL$*MA6KBl^~i}_?pAGpeTAvr->Yu$+y zuT#HkVtBru@#^W=HF=`1cCjCCo$UtJHD{if>+e7BD08HR&3MU0&TECbYPwZ-j!r5! z`&@F${$(hSX>Cm>7kAPgPtD24dbK8gdY3k7+SCFOcEg3eGw+>}*LbLRU2#%e?D1Vm zD_$ml$he~4vF6a()V5DI_DtuPX+M4X@g*NZ6eZTB-T8Y$W|@0?(x=BW6Bm2Ti|w`d zm36zmX0nCz`@|wbbW(yz@BsL5>BX&)Gfx9S3$>&ZYkPaGUS8=bn052 z;?!eL?%(eCq*9vgnsa+uy$k2Pw2R02fMa|~QI!_wO>0G;2L8M8E+*@KWAhfy{DZt( zOSR6vYoBud5r_M_>1U(2UEWY<3$nrGlrekU;)cbn7w&ukTM4xEw&joh5T9$yzIW88 z+efN%TNE1gzkR>N_}z@=#>7%^aSQBrmF>HevW(xnf#1!y&ncCj6ddz#^!BO{?z=XoeaHe##L)U=d^& z(lBX~&>l}uPfpPl2c9x%{S3T!WkpVb<>3#HLjnbZ_RZ1KI%Mz%T%>8fm+{#7;PHop z$+xFWneu?w%ggJ-4KqG@_UY2MR@pu6^l#;|xuDc>I?_+QeRF@osudiX@_wSCg%-a# zP(~MKUA6Lk6*hV5%zq-&MGi;)`yBe=;PJqTcin3{GoL;T629GjAhII0TI~3~Z9Av3 zhI~rSIQ`3Kk9N!HpV59?cUo&UmfOPzE-rUIUDE{0qaKyt>u*f_9)$Ts2h~u4JhrBooj9t<f%>xJvdJi590{2kjj(3teBvZ`u*EK3a1Wxni6-@e6SN4K;1dJ!)$KJsejRF6{8 zOh%T4d~0h9jHZ;3ka%fmi1H1DeCE#d<9n|}z%E!e>*z37%SdFXtFPaeC1zjw{`~;z zsG+8bP?127H3I)1@s1--IFyRfSKQap+1X5vj*cL&a(s4Z8`V8_=pl6kesxvVQv&w) z${2F}e@EV}A;y*%o3e>X=6;{DN<=nx)&4|FY&Lj)aesVfI{fQx)A1;%cS;a$Wg3*2 z3ffI?&0QTXEA5iXhcLG~@4bE;??HTF;T2`EpQOAy^H4ggZ74}=p!X3!#2P52O(5!P zc?cUWeP~jd6LAi|LF+Q8X_ROWQ+3Q`4K`}0k#wM5mAB#dP9=}}`%W{=|FU1t%)L8*>I#B;muro@{ ztVTJFcLxDu7sv+lt@Zla2&5!O31@#a`Zn5sC*-XC{>!t0-pfjOmr7@XiS{b%UEqMt z#Y2~UgWn=FiH*W(>(9z+mq33#le_mib07devBQo^gi8{*YTR22yo+|ayi3k5M0skH z9e8?9PFo{fSO--E$;N}i*WFsIHa6xV!%WcqArr1g8W{ak?>-7F{x=$4bPq`Sp%NJRcduIA6Es*4%4gYgn$P1odj}w6AgT@Ii z)a@7DaO9uMv>-&^lUo_h%+yo74-&uBW2UhM$!@$JGo}}n);$A`Y;N~s22V5CQ}Mb6 za|1~zW>eItrqP4tMcxl=woFP6O*iDeng*&ht?XkTICXj-YQ-L=6jHpL4Xw_O)_87r zK4ZGr>I?*;C5#wvckg%J0{INJZs`nM4tfg%`E%1+lTQ6)5*nJQtmU#a^^MG z+HRNQOo$*HHZ%;hfWWR*BiZQP8WfROkF`CJPxPYLjSI@w^#J*HwRe1+pNLr!b3V| z8$-Hz0BQWQ*$iiCP~^%8_khoCobh_DScLPEO!B@f`40)b=`04;D3&{~tpmHA(fe!N zkyKy(%%p6_@>H()0vp=j3HvY)?=e2}7CmAHX60;)1pm$f2>MX}&&+ub5Z#{OxJi>+ zSbmz>kzjKU!=!tqE$S@kA_eKhr}>9*;m`5`Ll4fm_I`ANm)RdXgu_Gr6|pRBX^cxE zPun#iKh&idTx}81moKi2ksb-Z`t7DF#(tb}mRaoe{xl|ce{^Xa$aZ8|eCUx}a3*17 zN;z<$qT&M$9^}U6s8qTod)yg_TO#@42T-K-Q5f@rb7%~)**)NJPx$Z?-1db}4xIPo zlAnp|jXn#Ro40ULVfao@J4<=aT!JUOX|EqjTN85-=cocCOSHx1Kx5NiezHrtQuUj{ z2*jBt?Z*oqUj;niw0dr)DK5?w;Vc7+BwuD(dka~&&P22e*%2+Cdr-N3lFOY}*0Q$> z!l@3ws|`tAm^GuBiD>!iSF&Nv$>~qP1GB%Glj>*6wQubnqHvF0ee(QWS1*wh)s8$?8qn|ATzsIGoak!x{E zKhZWPCZ0(Fprr@Z5pUbEU&?K74c?9AV-IPjejkW@RecM`{&;@nfAiyHOcQ3dnNeiO zC|(J`n}}FB33Vz`D0&|8D?j>TnUUiZAF0X-J>+6v6GZV}+zAJ|34YA=Pf_}JI2MFf zue~7`SWBsJV?znyqN8~7(x?Nd$~?8_a>j1Cvr`3dV)XW z&LC!J31Ysn_C{BFkc$BmyqZ>R&ef2m&W!4{F(%Sh_v3+EY1p;j(v+{|g5Hefk$f1l zpH@q0|CoUd__TQXyAB57VsbxTS1?SxLug`lCWIc}hV~1t(?_@MlEZsxcsbjRe0H)2 z3e!mhK_sX7pqRcI)-p?P29lX^Ejgkgb(ZJ6DMOhHEX+Srov+0Fv=;mP;k8og8UP<* zWZ4>?ccuLvVZRP#@qzp0OUFK^@HH7} z68zomZJfNGCo9Wl@8zuh?u6c!r=RF=%UzRaEzB;a0@Rp0&ka_=t2%Wkk=VmYcJ>#c$ z*iuXinRoMUWlBvdj=XKaFpLTfIAY z7oT(}?uZnGY3N&>-zfe0pnT}X7#-b?eIBeuxKD^GrUsrX_3HMvrN$|Vsfh{xz@Bpn z3MCLE`X!N~6W|`ET^7;-jui5TuL}an>>q2UA-iv}3L9rc`#p%xVE#5(>>GMFt=F*4JF$c&h zeD9eT2M>LAbss-;u{@ah)NZ&H4rQR8XCjS{q0*>W%J|ZgR4XKedZ9Jr%{2flh31zKCFdCyESHX`yoKK($LZg~n)Qv%l9)8lSqqyECOdRspXZfA&!I>Pu3CdHuM>z7 z*o`r`jn~0qpN<2k6v7W|nqAIBHX?lIDlReRo#(Np@CM?0Vgp0B@fXVB;9mH2IgzETh*F&5$+|qvNv2|d7j+U@_p*bHG z0ykbb%%GXGUvvlMrrNl$%Q^5fK4$yR^T}If;IgUXQ{ANv;!aras7Z6J3zrI5R6YvF zFa9BN*BiCv^qLl*`Y3f2voD$451-0xVb7t;AkHWW?eem3&c9OW_X+E}w|SD6`5E>r zAarKa*e17OeMq7AYM5utlA9W1>ZA{Zj&`!=eQ>RR-F?FybfBsVwuhmS=NcwcL)a{#=-Dm2kzJZuv zCx(j*!$$eJ3~lL&#^7;6*TR(9{#I2b>r&{{&iNyE?uh*n6wDEmpohOiD@P-N`X2%bb0vX`(_>aO z&HIGC=ulVX$tb*kAoIiUtDiql5$X&e*8F^BAT#~Xjb!8QAkHcwl8Wi17t2poHv(iw z7Gm%xMCHDOk0;98ieKEe(!gFb$Xb)|80#b|t@M8Tu4Q&kMz(}cW&1BBtGzAGOep+S z_&9TTs~Qzw29UBI1sEiIkusNzyD57a_}IPbPgZvz*G2WU^1aSmMW!rr0Snvk1Xiz& zf|9J$qzCHO>KEdIw*CRkODu5w=cne!bmg|w43dW-&c7*Y<&ursWn&=B^w6`b`v*Dc zVh-07zj=ME8+`5ik24r3D^UEe1M#(jL*Me}4pL7t_iabAq3TWx8WLJUkUv3#X{`mX z)5Bo#>)F&6A2Vik;bQg^Ye$gE>gwKgcZ!Uq0?D)<4d|WdBblOCr;pD{+x=@l=3d7 zGOSi%NJ8^Jbyn+=7JCzcl#1dZM2ZCK!2frIY1iZ1`esYtQ(IeF!Hl?LPauMd9a;&G zl+N`9RaJXZx{6X#V7+?v3IrelCp;DME_>7ePF63wjVvp=cHpiNAo3PpCS#fKqH|h+jvOmNDHX*JGrHz#{pK42us> zpJBRAFahbAktyIyCJLK?U0KPYvM-00y>$CNMyx_aFL|v18C&aEG=<{zOD4g_51>%w z8+`ZHR{^7oNq>miC#*N66V}DfO2U+(Ets(IU1q*y>-d7v7#|mTfZ??`&A>Ku$vW?< z9SutIoRl=HUOpjRw7owhDD!3T9wSM7-jgM}kDO4jtoV!x<}ZE<;kJEi+WTV^U_&J@ zQbc&##AP{Uif~e_JWaQ*;a|(k-LhG{Xha`2!@vcq&S2p6NMjT|(Cw?VFB7@RrR}D( z&0el^hgRnEJGz;j{wtnqfo9^A@(XsVqY^-1rkFopl6A#VA+1Lmw>TB8InYVeeq$On z@KhElpQo;5dYVlUgn2ngUHprKrB^ubZ!`;@s8m;Xe=SIG3CRKE0{%=*2x;mxr1MSx zLUJ&bwq$Z-TR!G^&kcqkwFw8t-}8fw5(6c6t@kkbD*DKm-8E<|{*{ zC{i6=qrNWlZ~0sOJCld)61N#li>EHeCdlSljT7x(oB z%__o9TeB9cs96fdjZsQN19`Jp0_Di4B{9-9+_Vu!+77-F7STIUeet4v~`?aQm6Y1Tbhsv!S>(;A8oWK|E z($>|2j7 zaUOD&Mc!Cl`QSwLQQ=mU?B;Kyo{jOvg)XL)&C=_`4VaU?xyQRBtQLWx{7QKWTEh4B2*{q1;-Cvot1E@B0!eL76x zG9m#r8GUk>2t2MibnN{pTT7hAcW#j<8kTRz&CiSL1sbO`Oo?P=U^0JKH>2&CmGma1 z?{zHPoLW(-@~LXjXAfEwd3%l+h-oPYXsSCJKIqSml;;V*qKM3 z%O9ppi-wUaAg8T+UBGh2{DC2iYNn(ci<^+_K%GX1bq@J$JL&8yTVOqbqIF-GdjKpj zb9vawT~;_|P#TQbZPhh-LOBk$->&WL#6eF@oclhLm9b_37*E0^+#0q%oBni*?7i4d z`M?-J)Wm9PQb;rW!xwTp__-zam+Nk9DN;i+CI(0c6K zAopFdKu=_C*lO`)6!guJVv=icdO0vwi-;S5(Axh?5z()=-t+bm#dSg=K!Vh}%*Rf^yzWWpW zszbh{qxE7s1T6HeN4qY6$I(6*Sqm)}D^Yty!C0$O^P&9B1*V8r+>^JZ`NrO)0+KhW z%g}J6h6yM-R9E9UVF!wo8AXfhk3Owpp83tm5ctLk))N4mORt0+8R+uG2^`QOHsJ7+ zHLW7N`@drL+!g#H-XWJ^qqdD(T{x}*XdaeM9-2A>&6A0X>91Hx0=-8^snS*A-qxFM zFAD4Q;tU>4ypE}3zXM6l@CuZtf+Mv7&j;xOT1?VD_yH~6U&nTGIHu`=qjFe6Vs8an z(3_u6@T1OFAfh{uIo_S&JuscF4-~fvnGkv6)JkDu{JiL$3Cp?LZQ_W`?H4)T+|{%m zY%P0LxCWc3QJjH`R`+it1(P;$(B3AU(h0)7f3~cM1yh?a=bM&e9uaSpphcvM=QlJ# zf#E+3$*wc6k5T9rg7%oZm+KRCfHGK#*FbZgCZxMp31spTR;0VjkE=#!8ryNG-h@3! z{6?>ToaXmf`ART+iiSK;lo;{x53ZhBYR((1Z3t}Uc){Z(6PRU0%KzRbr8cV=Jwzk# zB~vfq*9uti3*l8HjF>m~0Mf+JsD@ECK-EN9}lxDO&(&ule&xn4>o0LFqdtCfYRH|Klp0d9&(T7zYi zX8Hh1rZ+5}v1@|o4UbM#ug1Zo5Ky*p=;syI=#Ap#YaHQ0>(cZR5*hs3qUf6EeY7Nm zGD&Y+S;$4y1OjXZRyO zqKZpu{2jmkE7UEVDOL6I^UMaLD!T@#9IlDHwmdZA$c`-a)UJFGIKBWfM7D(4W>Mu( zj5(=_W?d)FF<3P>$!pIS0JVDA&L-K71^Z}GnqHBqXiq(6mqz^0Ko|!wjY0R7ATMuu zqHsrMyIC3a{eYGL!4W<-xLrS^R82!A$t)lt{e*Y%t?&aY)^Y(|uuvr3M~Y$0u}erK z=PBJc#<1Lfbn#W%-1Rs|2WNgjFRL#ZymD4B9&6P3@FGBs%CBn1bHhD!u6CV+Tt!9u z)REi7F^x`NLrnSsrD0YtoWbVw_+vCth(iqJ4dUMJW$_+cPPf@uR<`4=XL)(H*<}D(f?Q{Csf3)&FKl8LQ`*Dz zUGl27k_VC~YK>1h+3RQWFwtmekaf7DC&zGPwvilV$x8qF_j5L%9$gwTg zjx1lBW;qleuPh7iF=l|4bpsJKZB}L=qN1_}I%fZK!g~bytM}gBNDIR4iwiicH91sNaX6?`YUSeyFCjxObw_kiL<3TCp4Z zW6@W&IEi9L|2LiE>9_*^hwwTnV5+aA1ZJ}Dc}BqD%LS?PRnglt!g14xbrcWpz+V$% z+eXC2zkK=i`lW$^=&b8zhG&-`tf-ON=+>C`F6V+*O;e#LaPvvAk_^?iQmOOm`r!|( z7WThYHF!@B{YzJ9vUi_f2N^s2*F)*L@;Q=Og-wL@dm91da^oh#QPfvkWEyv%v=8V? zamm1;%l=;LVai;3DGNNMSh_}0iF+74(1uOeGR+#LOIv{1ZV2|nle}Pl%Ua6`615sP z0IeMC(px_#&y$|a1z7WOY$LTcF(*9@U0T>;c#_GtCCFYCs*MoC=#-O~6Jah3#aEQV= zPXJ~=tQaDjd(X`C`i^7xt2qLSyhJvVxYZ9<2-jmNezMps-oB9g`g6**Q})kY(*$w$ zVGg6HC4*m9d*P*)!1|36jW4TGhJ|1>KscOTCC(@-JKT_3bvYF8+YVf*GFHbyPXzj5 zAiC`v&fa+wQwZCS8napfPARW#5*Bz=bu}-5?7m04fJ1b)JgY93(E_s)6HAbhsGUOyM*9L{u!ZyyYt7n)2K0NC^2VO;|ImMJm%%Aac?(E&5#L8$FwQI;xi>xj$bG| zng83jn;cMzvlkSK1PXfp9}y&i;FY1F{!8bQ;^J^OKHej#V`Hv>U~0wp!~+19$YO4c zk@TeTu)g)p%_`YWbD@mmfG$wp7Uo%S_BCmR^;-};B|t*JU}eCB=Vw_DD%M$xFIFNY z#6%pz!il@Pj%Kcs_wK2Ha#MCDw z1#May8Uuqcz4+fhGRI_RLmM;_gP(hVM)hj{OkTHCrBUhG;Rg!cIlX^~AtR&RkA!vE z$7o_Hiaihrb#SW*#&w&@6NWSy3!r^>D>BItun zH38$@_ioiwT-CHdovn4xc2HW5&TDZd(mGe?Fh^mGHL~L3qScOT+Y28syp@%eYfG^j z)ipIpusGhY9QPHU9%xh+0SSpR0kRDYhT`DjHZEJJ5*#i4pUpWoHm1$)Ps6M`v;cDn z92$y+gM*`+iuJcgr(t4aW5ZG*eE6`C>F=pPFD)J(ULiLTX5BCrQJuZ|SLFZ0go{f^ zG$s1gEUdgTawScxVIGW$dRF+LlE1&y9eH5zJ$r?pN|czpbgXA8+RE=0EyDi`9p5WX diff --git a/screenshots-baseline/progress-Indicator-Lg-Wizard-1-chrome-1044x788-dpr-1.png b/screenshots-baseline/progress-Indicator-Lg-Wizard-1-chrome-1044x788-dpr-1.png deleted file mode 100644 index 1c1a61087e855f13d27c01361d913327dac1fbe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15472 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 diff --git a/screenshots-baseline/progress-Indicator-Lg-Wizard-2-chrome-1044x788-dpr-1.png b/screenshots-baseline/progress-Indicator-Lg-Wizard-2-chrome-1044x788-dpr-1.png deleted file mode 100644 index ad46ae8776868cd103a2f601927f923b15933d65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14797 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 diff --git a/screenshots-baseline/progress-Indicator-Lg-Wizard-3-chrome-1044x788-dpr-1.png b/screenshots-baseline/progress-Indicator-Lg-Wizard-3-chrome-1044x788-dpr-1.png deleted file mode 100644 index e924dc4128fe82514e1ba0a243e5c797da1bc4ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15280 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%0Df#?sYe~t;rQmHrSZC>y{VXAAwU)DkK)sK9YHseu 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 Q4*&oF07*qoM6N<$f-6n)oB#j- diff --git a/screenshots-baseline/progress-Indicator-Xs-1-chrome-481x788-dpr-1.png b/screenshots-baseline/progress-Indicator-Xs-1-chrome-481x788-dpr-1.png deleted file mode 100644 index d2d392c57a0f8929e1e184c38ab1c1fe182b56e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18778 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 diff --git a/screenshots-baseline/progress-Indicator-Xs-Wizard-1-chrome-480x788-dpr-1.png b/screenshots-baseline/progress-Indicator-Xs-Wizard-1-chrome-480x788-dpr-1.png deleted file mode 100644 index 23b2364c2893df681a79b4b3916a31cb87827ae0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15116 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 KqV$tt;Qs-8O;=k0 diff --git a/screenshots-baseline/progress-Indicator-Xs-Wizard-1-chrome-481x788-dpr-1.png b/screenshots-baseline/progress-Indicator-Xs-Wizard-1-chrome-481x788-dpr-1.png deleted file mode 100644 index 8e488cb0e9137ed197343cc5f95f01dd1944dde1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16983 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 diff --git a/skyuxconfig.json b/skyuxconfig.json index d5688c4..77b64cf 100644 --- a/skyuxconfig.json +++ b/skyuxconfig.json @@ -3,6 +3,11 @@ "name": "skyux-progress-indicator", "mode": "easy", "compileMode": "aot", + "app": { + "styles": [ + "src/app/visual-styles.scss" + ] + }, "skyuxModules": [ "SkyErrorModule" ], diff --git a/src/app/app-extras.module.ts b/src/app/app-extras.module.ts index 2e1d6a3..9e795a0 100644 --- a/src/app/app-extras.module.ts +++ b/src/app/app-extras.module.ts @@ -3,46 +3,31 @@ import { } from '@angular/core'; import { - CommonModule -} from '@angular/common'; - -import { - SkyCheckboxModule -} from '@skyux/forms'; - -import { - SkyModalModule, - SkyModalService + SkyModalModule } from '@skyux/modals'; import { SkyPopoverModule } from '@skyux/popovers'; +import { + SkyAppLinkModule +} from '@skyux/router'; + import { SkyProgressIndicatorModule -} from './public/modules/progress-indicator'; +} from './public'; import { ProgressIndicatorWizardDemoComponent } from './visual/progress-indicator/progress-indicator-horizontal-visual.component'; @NgModule({ - imports: [ - CommonModule, - SkyProgressIndicatorModule, - SkyCheckboxModule, - SkyModalModule, - SkyPopoverModule - ], exports: [ - SkyProgressIndicatorModule, - SkyCheckboxModule, + SkyAppLinkModule, SkyModalModule, - SkyPopoverModule - ], - providers: [ - SkyModalService + SkyPopoverModule, + SkyProgressIndicatorModule ], entryComponents: [ ProgressIndicatorWizardDemoComponent diff --git a/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.html b/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.html index 16a049f..e6c2e34 100644 --- a/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.html +++ b/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.html @@ -1,102 +1,82 @@ - - - Do all the things + + Waterfall -

- - -
+ Waterfall content 1 -
- - -
+ Waterfall content 2
-
- - -
+ Waterfall content 3
- + - Reset all the things + Reset (legacy) + + + + - + - - + + +
+ + + + + +
+ + + -
+ \ No newline at end of file diff --git a/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.ts b/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.ts index 87ddeef..50d8a2f 100644 --- a/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.ts +++ b/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.ts @@ -1,81 +1,150 @@ import { Component, + ChangeDetectionStrategy, + ElementRef, ViewChild, - QueryList, ViewChildren, - ChangeDetectorRef, - ChangeDetectionStrategy + QueryList, + TemplateRef } from '@angular/core'; import { - SkyProgressIndicatorComponent, - SkyProgressIndicatorMessageType, - SkyProgressIndicatorChange -} from '..'; + Subject +} from 'rxjs/Subject'; + +import { + SkyProgressIndicatorItemComponent +} from '../progress-indicator-item/progress-indicator-item.component'; + import { SkyProgressIndicatorNavButtonComponent -} from '../progress-indicator-nav-button'; +} from '../progress-indicator-nav-button/progress-indicator-nav-button.component'; + import { SkyProgressIndicatorResetButtonComponent -} from '../progress-indicator-reset-button'; +} from '../progress-indicator-reset-button/progress-indicator-reset-button.component'; + import { - SkyProgressIndicatorDisplayMode -} from '../types/progress-indicator-mode'; + SkyProgressIndicatorDisplayMode, + SkyProgressIndicatorMessage, + SkyProgressIndicatorMessageType, + SkyProgressIndicatorNavButtonType, + SkyProgressIndicatorChange +} from '../types'; + +import { + SkyProgressIndicatorComponent +} from '../progress-indicator.component'; @Component({ - selector: 'test-progress-indicator', + selector: 'sky-progress-indicator-fixture', templateUrl: './progress-indicator.component.fixture.html', changeDetection: ChangeDetectionStrategy.OnPush }) -export class ProgressIndicatorTestComponent { - public displayMode: SkyProgressIndicatorDisplayMode; - public isPassive: boolean; - public startingIndex: number; +export class SkyProgressIndicatorFixtureComponent { - public previousButtonText: string; - public previousButtonType = 'previous'; - public previousButtonDisabled: boolean; + @ViewChild(SkyProgressIndicatorComponent) + public emptyProgressIndicator: SkyProgressIndicatorComponent; - public nextButtonText: string; - public nextButtonType = 'next'; - public nextButtonDisabled: boolean; + @ViewChild(SkyProgressIndicatorComponent) + public progressIndicator: SkyProgressIndicatorComponent; - public resetButtonDisabled: boolean; + @ViewChild('progressIndicator', { read: TemplateRef }) + public progressIndicatorTemplateRef: TemplateRef; - public activeIndex = 0; - public resetWasClicked = false; - public progressChangesEmitted = false; + @ViewChild(SkyProgressIndicatorResetButtonComponent) + public resetButtonComponentLegacy: SkyProgressIndicatorResetButtonComponent; - @ViewChild(SkyProgressIndicatorComponent) - public progressIndicator: SkyProgressIndicatorComponent; + @ViewChild('legacyResetButton', { read: ElementRef }) + public legacyResetButton: ElementRef; + + @ViewChild('legacyIsolatedResetButton', { read: ElementRef }) + public legacyIsolatedResetButton: ElementRef; + + @ViewChild('defaultNavButton', { read: SkyProgressIndicatorNavButtonComponent }) + public defaultNavButtonComponent: SkyProgressIndicatorNavButtonComponent; + + @ViewChild('defaultNavButton', { read: ElementRef }) + public defaultNavButtonElement: ElementRef; + + @ViewChildren(SkyProgressIndicatorItemComponent) + public progressItems: QueryList; @ViewChildren(SkyProgressIndicatorNavButtonComponent) - public navButtons: QueryList; + public navButtonComponents: QueryList; - @ViewChild(SkyProgressIndicatorResetButtonComponent) - public resetButton: SkyProgressIndicatorResetButtonComponent; + @ViewChildren(SkyProgressIndicatorNavButtonComponent, { read: ElementRef }) + public navButtonElements: QueryList; - public get isHorizontal() { - return this.displayMode === SkyProgressIndicatorDisplayMode.Horizontal; - } + // Progress indicator component inputs. + public displayMode: SkyProgressIndicatorDisplayMode; + public isPassive: boolean; + public messageStream = new Subject(); + public startingIndex: number; - constructor(private changeDetector: ChangeDetectorRef) { } + // Nav button inputs. + public disabled: boolean; - public progress(): void { - this.progressIndicator.messageStream.next(SkyProgressIndicatorMessageType.Progress); + // Template values. + public buttonConfigs: { + text?: string; + type: SkyProgressIndicatorNavButtonType; + }[]; + public defaultNavButtonProgressIndicatorRef: SkyProgressIndicatorComponent; + public lastChange: SkyProgressIndicatorChange; + public showNavButtons = false; + public showIsolatedLegacyResetButton = false; + public progressIndicatorTemplateRefLegacy: SkyProgressIndicatorComponent; + + constructor() { + this.buttonConfigs = [ + { + type: 'finish' + }, + { + type: 'next' + }, + { + type: 'previous' + }, + { + type: 'reset' + } + ]; + } + + public onProgressChanges(change: SkyProgressIndicatorChange): void { + this.lastChange = change; } - public regress(): void { - this.progressIndicator.messageStream.next(SkyProgressIndicatorMessageType.Regress); + public onResetClick(): void { } + + public sendMessage(message: SkyProgressIndicatorMessage): void { + this.messageStream.next(message); } - public resetClicked(): void { - this.resetWasClicked = true; + public sendMessageLegacy(type: SkyProgressIndicatorMessageType): void { + this.messageStream.next(type); } - public updateIndex(changes: SkyProgressIndicatorChange): void { - this.progressChangesEmitted = true; - this.activeIndex = changes.activeIndex; - this.changeDetector.detectChanges(); + public setNavButtonText(): void { + this.buttonConfigs = [ + { + text: 'My Finish', + type: 'finish' + }, + { + text: 'My Next', + type: 'next' + }, + { + text: 'My Previous', + type: 'previous' + }, + { + text: 'My Reset', + type: 'reset' + } + ]; } } diff --git a/src/app/public/modules/progress-indicator/fixtures/progress-indicator.module.fixture.ts b/src/app/public/modules/progress-indicator/fixtures/progress-indicator.module.fixture.ts new file mode 100644 index 0000000..3b80573 --- /dev/null +++ b/src/app/public/modules/progress-indicator/fixtures/progress-indicator.module.fixture.ts @@ -0,0 +1,29 @@ +import { + CommonModule +} from '@angular/common'; + +import { + NgModule +} from '@angular/core'; + +import { + SkyProgressIndicatorModule +} from '../progress-indicator.module'; + +import { + SkyProgressIndicatorFixtureComponent +} from './progress-indicator.component.fixture'; + +@NgModule({ + declarations: [ + SkyProgressIndicatorFixtureComponent + ], + imports: [ + CommonModule, + SkyProgressIndicatorModule + ], + exports: [ + SkyProgressIndicatorFixtureComponent + ] +}) +export class SkyProgressIndicatorFixtureModule { } diff --git a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.html b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.html index f707f01..421f479 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.html +++ b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.html @@ -1,24 +1,28 @@ -
-
- {{ displayTitle }} -
-
-
-
+ +
- +
+ {{ titlePrefix }}{{ title }} +
+
+ + + +
diff --git a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.scss b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.scss index 21c07cd..d8c6323 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.scss +++ b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.scss @@ -1,87 +1,25 @@ @import "~@skyux/theme/scss/mixins"; @import "~@skyux/theme/scss/_compat/mixins"; +@import "../scss/progress-indicator-variables"; -.sky-progress-indicator-item-heading { +.sky-progress-indicator-item { display: flex; - align-items: center; - line-height: 15px; + margin-bottom: -$icon-offset; } -.sky-progress-indicator-item-step::before { - box-sizing: border-box; - content: ''; - background-color: white; - margin-left: 3px; - width: 15px; - height: 15px; - border: $sky-border-color-neutral-medium solid 2px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - border-radius: 15px; +.sky-progress-indicator-item-main { + flex: 1 1 100%; } -.sky-progress-indicator-item-step-active { - &::before { - border-color: $sky-highlight-color-success; - } - &:not(.sky-progress-indicator-item-passive)::before { - background-color: $sky-highlight-color-success; - } -} - -.sky-progress-indicator-item-step-complete { - font-size: 15px; - - &::before { - margin-left: 3px; - margin-right: 0; - margin-top: $sky-margin-half; - margin-bottom: $sky-margin-half; - } - - div { - display: inline; - font-size: 15px; - } -} - -.sky-progress-indicator-item-title:not(.sky-emphasized) { - margin-left: $sky-margin-plus-half; -} - -.sky-progress-indicator-item-line { - margin-left: $sky-margin; +.sky-progress-indicator-item-content { min-height: $sky-margin-double; padding-top: $sky-margin; padding-bottom: $sky-margin-triple; +} - &.sky-progress-indicator-item-passive { - padding-top: $sky-margin-plus-half; - padding-bottom: $sky-margin-double; - } - - &.sky-progress-indicator-item-horizontal { - padding-top: $sky-margin-double; - } - - &.sky-progress-indicator-item-line-inactive { +.sky-progress-indicator-item-status-incomplete { + // Incomplete items should have reduced height. + .sky-progress-indicator-item-content { padding: 0; } - - &:not(.sky-progress-indicator-item-horizontal) { - border-left: $sky-highlight-color-success solid 1px; - - &.sky-progress-indicator-item-line-next-inactive { - border-left-color: $sky-border-color-neutral-medium; - } - - &.sky-progress-indicator-item-last { - border-left: none; - } - - .sky-progress-indicator-item-content { - display: flex; - justify-content: center; - } - } } diff --git a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.ts b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.ts index ff7a7f7..37be4b9 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.ts @@ -1,63 +1,79 @@ import { + ChangeDetectionStrategy, + ChangeDetectorRef, Component, Input } from '@angular/core'; import { - SkyProgressIndicatorDisplayMode -} from '../types/progress-indicator-mode'; + SkyProgressIndicatorItemStatus +} from '../types'; @Component({ selector: 'sky-progress-indicator-item', templateUrl: './progress-indicator-item.component.html', - styleUrls: ['./progress-indicator-item.component.scss'] + styleUrls: ['./progress-indicator-item.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush }) export class SkyProgressIndicatorItemComponent { - public itemNumber: number; - public isActive = false; - public isComplete = false; - public isLastItem = false; - public displayMode = SkyProgressIndicatorDisplayMode.Vertical; - public isPassive = false; - public isNextToInactive = true; @Input() public title: string; - public get displayTitle(): string { - if (this.isPassive) { - return this.isActive || this.isComplete ? this.title : ''; - } else { - return this.itemNumber + ' - ' + this.title; - } + public get status(): SkyProgressIndicatorItemStatus { + return this._status; } - public get isLineDisplayed(): boolean { - return !(this.isHorizontal || this.isPassive) || this.isPassive && !this.isLastItem || this.isActive; + public set status(value: SkyProgressIndicatorItemStatus) { + if (value === this._status) { + return; + } + + this._status = value; + this.changeDetector.markForCheck(); } - public get headingClassList(): {[className: string]: boolean} { - return { - 'sky-text-success': this.isComplete && !this.isActive && !this.isHorizontal, - 'sky-progress-indicator-item-passive': this.isPassive, - 'sky-progress-indicator-item-step': !this.isHorizontal && (!this.isComplete || this.isActive), - 'sky-progress-indicator-item-step-active': this.isActive, - 'sky-progress-indicator-item-step-complete': this.isComplete && !this.isActive && !this.isHorizontal - }; + public get statusName(): string { + let name: string; + + /* tslint:disable-next-line:switch-default */ + switch (this.status) { + case SkyProgressIndicatorItemStatus.Active: + name = 'active'; + break; + + case SkyProgressIndicatorItemStatus.Complete: + name = 'complete'; + break; + + case SkyProgressIndicatorItemStatus.Incomplete: + name = 'incomplete'; + break; + + case SkyProgressIndicatorItemStatus.Pending: + name = 'pending'; + break; + } + + return name; } - public get lineClassList(): {[className: string]: boolean} { - return { - 'sky-deemphasized': this.isPassive, - 'sky-progress-indicator-item-passive': this.isPassive, - 'sky-progress-indicator-item-horizontal': this.isHorizontal, - 'sky-progress-indicator-item-last': this.isLastItem, - 'sky-progress-indicator-item-line-inactive': !this.isActive && !this.isComplete, - 'sky-progress-indicator-item-line-next-inactive': this.isNextToInactive - }; + public isVisible = false; + public showStatusMarker = true; + public showTitle = true; + public titlePrefix: string; + + private _status: SkyProgressIndicatorItemStatus; + + constructor( + private changeDetector: ChangeDetectorRef + ) { } + + public showStepNumber(step: number): void { + this.titlePrefix = `${step} - `; } - public get isHorizontal(): boolean { - return this.displayMode === SkyProgressIndicatorDisplayMode.Horizontal; + public hideStepNumber(): void { + this.titlePrefix = ''; } } diff --git a/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.html b/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.html index 51cc6f7..50984e8 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.html +++ b/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.html @@ -1,11 +1,9 @@ - diff --git a/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.ts b/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.ts index 2509398..e9f94b3 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.ts @@ -1,27 +1,30 @@ import { - Component, - Input, ChangeDetectionStrategy, ChangeDetectorRef, + Component, + Input, + OnDestroy, OnInit, - OnDestroy + Optional } from '@angular/core'; import { - Subject, BehaviorSubject -} from 'rxjs'; + Subject +} from 'rxjs/Subject'; + +import 'rxjs/add/operator/distinctUntilChanged'; + +import 'rxjs/add/operator/takeUntil'; import { - SkyLibResourcesService -} from '@skyux/i18n'; + SkyProgressIndicatorChange, + SkyProgressIndicatorMessageType, + SkyProgressIndicatorNavButtonType +} from '../types'; import { SkyProgressIndicatorComponent } from '../progress-indicator.component'; -import { - SkyProgressIndicatorMessageType, - SkyProgressIndicatorChange -} from '../types'; @Component({ selector: 'sky-progress-indicator-nav-button', @@ -29,84 +32,202 @@ import { changeDetection: ChangeDetectionStrategy.OnPush }) export class SkyProgressIndicatorNavButtonComponent implements OnInit, OnDestroy { - @Input() - public progressIndicator: SkyProgressIndicatorComponent; - @Input() public buttonText: string; @Input() - public get buttonType(): string { - return this._buttonType || 'next'; + public set buttonType(value: SkyProgressIndicatorNavButtonType) { + this._buttonType = value; } - public set buttonType(value: string) { - if (value && (value.toLowerCase() === 'next' || value.toLowerCase() === 'previous')) { - this._buttonType = value; - this.publishButtonText(); + + public get buttonType(): SkyProgressIndicatorNavButtonType { + if (this._buttonType === undefined) { + return 'next'; } + + return this._buttonType; } @Input() + public set disabled(value: boolean) { + this._disabled = value; + this.changeDetector.markForCheck(); + } + public get disabled(): boolean { - if (this._disabled !== undefined) { - return this._disabled; + const buttonType = this.buttonType; + const activeIndex = this.lastProgressChange.activeIndex; + const isLastStep = (activeIndex === this.lastProgressChange.itemStatuses.length - 1); + + if ( + buttonType === 'previous' && + activeIndex === 0 + ) { + return true; } - if (this.buttonType === 'previous') { - return this.activeIndex === 0; + if ( + buttonType === 'next' && + isLastStep + ) { + return true; } - return this.activeIndex >= this.progressIndicator.progressItems.length - 1; + return this._disabled || false; } - public set disabled(value: boolean) { - this._disabled = value; + + @Input() + public progressIndicator: SkyProgressIndicatorComponent; + + public get cssClassNames(): string { + const buttonType = this.buttonType; + + const classNames = [ + `sky-progress-indicator-nav-button-${this.buttonType}` + ]; + + switch (buttonType) { + case 'next': + case 'finish': + classNames.push('sky-btn-primary'); + break; + + case 'reset': + classNames.push('sky-btn-link'); + break; + + default: + classNames.push('sky-btn-default'); + break; + } + + return classNames.join(' '); + } + + public get buttonLabelResourceString(): string { + return `skyux_progress_indicator_navigator_${this.buttonType}`; + } + + public set isVisible(value: boolean) { + this._isVisible = value; + this.changeDetector.markForCheck(); } - public buttonTextStream = new BehaviorSubject(''); + public get isVisible(): boolean { + return this._isVisible || false; + } - private idle = new Subject(); - private _buttonType: string; + private lastProgressChange: SkyProgressIndicatorChange; + private ngUnsubscribe = new Subject(); + + private _buttonType: SkyProgressIndicatorNavButtonType; private _disabled: boolean; - private activeIndex = 0; + private _isVisible: boolean; constructor( - private resourcesService: SkyLibResourcesService, - private changeDetector: ChangeDetectorRef + private changeDetector: ChangeDetectorRef, + @Optional() private parentComponent: SkyProgressIndicatorComponent ) { } public ngOnInit(): void { + if (!this.progressIndicator) { + if (!this.parentComponent) { + throw new Error( + 'The `` component requires a reference to ' + + 'the `` component it controls. For example:\n' + + '\n' + + '\n' + + '\n' + + '' + ); + } + + this.progressIndicator = this.parentComponent; + } + + if (this.buttonType === 'finish') { + // The `hasFinishButton` field was added to support legacy API. + // Some implementations only include a next button; we cannot + // assume that every implementation includes both a finish button and a next button. + this.progressIndicator.hasFinishButton = true; + } + this.progressIndicator.progressChanges - .takeUntil(this.idle) - .subscribe((changes: SkyProgressIndicatorChange) => { - this.activeIndex = changes.activeIndex; - this.changeDetector.detectChanges(); - }); + .distinctUntilChanged() + .takeUntil(this.ngUnsubscribe) + .subscribe((change: SkyProgressIndicatorChange) => { + this.lastProgressChange = change; + this.updateButtonVisibility(change); + }); } public ngOnDestroy(): void { - this.idle.next(); - this.idle.unsubscribe(); + this.ngUnsubscribe.next(); + this.ngUnsubscribe.complete(); } - public buttonClick(): void { - if (this.buttonType === 'previous') { - this.progressIndicator.messageStream.next(SkyProgressIndicatorMessageType.Regress); - } else { - this.progressIndicator.messageStream.next(SkyProgressIndicatorMessageType.Progress); + public onClick(): void { + let type: SkyProgressIndicatorMessageType; + + switch (this.buttonType) { + case 'finish': + type = SkyProgressIndicatorMessageType.Finish; + break; + + case 'next': + type = SkyProgressIndicatorMessageType.Progress; + break; + + case 'previous': + type = SkyProgressIndicatorMessageType.Regress; + break; + + case 'reset': + type = SkyProgressIndicatorMessageType.Reset; + break; + + default: + break; } + + this.progressIndicator.sendMessage({ + type + }); } - private publishButtonText(): void { - if (this.buttonText) { - this.buttonTextStream.next(this.buttonText); - } else if (this.buttonType === 'previous') { - this.resourcesService.getString('skyux_progress_indicator_navigator_previous').subscribe((value: string) => { - this.buttonTextStream.next(value); - }); - } else { - this.resourcesService.getString('skyux_progress_indicator_navigator_next').subscribe((value: string) => { - this.buttonTextStream.next(value); - }); + private updateButtonVisibility(change: SkyProgressIndicatorChange): void { + const isLastStep = (change.activeIndex === change.itemStatuses.length - 1); + const buttonType = this.buttonType; + + // Hide the button if all steps are complete + // (except for the reset button) + if ( + buttonType !== 'reset' && + change.isFinished + ) { + this.isVisible = false; + return; + } + + if (buttonType === 'finish') { + this.isVisible = isLastStep; + return; } + + // Hide the next button on the last step only if a finish button exists. + if ( + buttonType === 'next' && + isLastStep && + this.progressIndicator.hasFinishButton + ) { + this.isVisible = false; + return; + } + + this.isVisible = true; } } diff --git a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.html b/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.html index 6babcff..7a28007 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.html +++ b/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.html @@ -1,7 +1,12 @@ - +
+ +
diff --git a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.scss b/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.scss deleted file mode 100644 index fe69bb4..0000000 --- a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.scss +++ /dev/null @@ -1,5 +0,0 @@ -:host() { - display: flex; - justify-content: center; - margin-top: 20px; -} diff --git a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts b/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts index 9f393fd..4d5d4a1 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts @@ -1,49 +1,67 @@ import { - Component, - Input, ChangeDetectionStrategy, - Output, + ChangeDetectorRef, + Component, EventEmitter, - OnDestroy + Input, + OnDestroy, + Output } from '@angular/core'; -import { - SkyProgressIndicatorComponent -} from '../progress-indicator.component'; import { SkyProgressIndicatorMessageType } from '../types'; +import { + SkyProgressIndicatorComponent +} from '../progress-indicator.component'; + @Component({ selector: 'sky-progress-indicator-reset-button', templateUrl: './progress-indicator-reset-button.component.html', - styleUrls: ['./progress-indicator-reset-button.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush }) export class SkyProgressIndicatorResetButtonComponent implements OnDestroy { @Input() - public progressIndicator: SkyProgressIndicatorComponent; + public set disabled(value: boolean) { + this._disabled = value; + this.changeDetector.markForCheck(); + } - @Input() public get disabled(): boolean { return this._disabled || false; } - public set disabled(value: boolean) { - this._disabled = value; - } + + @Input() + public progressIndicator: SkyProgressIndicatorComponent; @Output() public resetClick = new EventEmitter(); private _disabled: boolean; - public resetProgress(): void { - this.resetClick.emit(); - this.progressIndicator.messageStream.next(SkyProgressIndicatorMessageType.Reset); + constructor( + private changeDetector: ChangeDetectorRef + ) { + console.warn( + 'The `` component is deprecated. Please use the following instead:\n' + + '' + ); } public ngOnDestroy(): void { this.resetClick.complete(); } + + public onClick(): void { + this.resetClick.emit(); + + this.progressIndicator.sendMessage({ + type: SkyProgressIndicatorMessageType.Reset + }); + } } diff --git a/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.html b/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.html new file mode 100644 index 0000000..d1ee535 --- /dev/null +++ b/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.html @@ -0,0 +1,18 @@ + diff --git a/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.scss b/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.scss new file mode 100644 index 0000000..6362f77 --- /dev/null +++ b/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.scss @@ -0,0 +1,130 @@ +@import "~@skyux/theme/scss/mixins"; +@import "~@skyux/theme/scss/_compat/mixins"; +@import "../scss/progress-indicator-variables"; + +:host { + display: flex; + flex: 1 0 auto; +} + +.sky-progress-indicator-status-marker { + display: flex; + + &.sky-progress-indicator-status-marker-mode-vertical { + flex-basis: $status-marker-width; + flex-grow: 0; + flex-direction: column; + margin-right: $status-marker-width; + + .sky-progress-indicator-status-marker-icon { + margin-top: $icon-offset; + width: $status-marker-width; + + > ::ng-deep sky-icon { + margin-left: -1px; + } + } + + .sky-progress-indicator-status-marker-line { + margin: 0 auto; + width: 1px; + } + } + + &.sky-progress-indicator-status-marker-mode-horizontal { + flex-direction: row; + width: 100%; + padding-left: 5px; + + .sky-progress-indicator-status-marker-icon { + height: $status-marker-width; + } + + .sky-progress-indicator-status-marker-line { + margin: auto 0; + height: 1px; + } + + &.sky-progress-indicator-status-marker-status-complete { + .sky-progress-indicator-status-marker-icon { + border: 0; + margin-right: 5px; + } + } + + &.sky-progress-indicator-status-marker-status-active { + .sky-progress-indicator-status-marker-icon { + position: relative; + + &:before { + content: ''; + display: block; + width: 5px; + height: 1px; + background-color: $sky-highlight-color-success; + position: absolute; + left: -7px; + top: 5px; + } + } + } + + &.sky-progress-indicator-status-marker-status-incomplete { + .sky-progress-indicator-status-marker-icon { + position: relative; + + &:before { + content: ''; + display: block; + width: 5px; + height: 1px; + background-color: $sky-border-color-neutral-medium; + position: absolute; + left: -7px; + top: 5px; + } + } + } + } +} + +.sky-progress-indicator-status-marker-icon { + border-radius: $status-marker-width; + border: 2px solid $sky-border-color-neutral-medium; + flex: 0 0 $status-marker-width; +} + +.sky-progress-indicator-status-marker-line { + background-color: $sky-border-color-neutral-medium; + flex: 1 0 auto; +} + +.sky-progress-indicator-status-marker-status-active { + .sky-progress-indicator-status-marker-icon { + background-color: $sky-highlight-color-success; + border-color: transparent; + } +} + +.sky-progress-indicator-status-marker-status-pending { + .sky-progress-indicator-status-marker-icon { + border-color: $sky-highlight-color-success; + } +} + +.sky-progress-indicator-status-marker-status-complete { + .sky-progress-indicator-status-marker-icon { + border-color: transparent; + color: $sky-highlight-color-success; + margin-top: 0; + + > ::ng-deep sky-icon { + display: inline-flex; + vertical-align: top; + } + } + + .sky-progress-indicator-status-marker-line { + background-color: $sky-highlight-color-success; + } +} diff --git a/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.ts b/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.ts new file mode 100644 index 0000000..79567bd --- /dev/null +++ b/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.ts @@ -0,0 +1,87 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input +} from '@angular/core'; + +import { + SkyProgressIndicatorDisplayMode, + SkyProgressIndicatorItemStatus +} from '../types'; + +@Component({ + selector: 'sky-progress-indicator-status-marker', + templateUrl: './progress-indicator-status-marker.component.html', + styleUrls: ['./progress-indicator-status-marker.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class SkyProgressIndicatorStatusMarkerComponent { + @Input() + public set displayMode(value: SkyProgressIndicatorDisplayMode) { + this._displayMode = value; + } + + public get displayMode(): SkyProgressIndicatorDisplayMode { + if (this._displayMode === undefined) { + return SkyProgressIndicatorDisplayMode.Vertical; + } + + return this._displayMode; + } + + @Input() + public set status(value: SkyProgressIndicatorItemStatus) { + this._status = value; + this.changeDetector.markForCheck(); + } + + public get cssClassNames(): string { + const classNames = [ + `sky-progress-indicator-status-marker-mode-${this.displayModeName}`, + `sky-progress-indicator-status-marker-status-${this.statusName}` + ]; + + return classNames.join(' '); + } + + public get displayModeName(): string { + if (this.displayMode === SkyProgressIndicatorDisplayMode.Vertical) { + return 'vertical'; + } + + return 'horizontal'; + } + + public get statusName(): string { + let name: string; + + /* tslint:disable-next-line:switch-default */ + switch (this._status) { + case SkyProgressIndicatorItemStatus.Active: + name = 'active'; + break; + + case SkyProgressIndicatorItemStatus.Complete: + name = 'complete'; + break; + + case SkyProgressIndicatorItemStatus.Incomplete: + name = 'incomplete'; + break; + + case SkyProgressIndicatorItemStatus.Pending: + name = 'pending'; + break; + } + + return name; + } + + private _displayMode: SkyProgressIndicatorDisplayMode; + private _status: SkyProgressIndicatorItemStatus; + + constructor( + private changeDetector: ChangeDetectorRef + ) { } +} diff --git a/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.html b/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.html index 7e3edc4..1871609 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.html +++ b/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.html @@ -1,4 +1,6 @@ -

+
-

+
diff --git a/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.scss b/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.scss index 63cb9ea..68135df 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.scss +++ b/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.scss @@ -1,4 +1,8 @@ -:host() { - display: flex; - justify-content: center; +@import "~@skyux/theme/scss/mixins"; +@import "~@skyux/theme/scss/_compat/mixins"; + +.sky-progress-indicator-title { + line-height: 1.1; + margin: 0 0 $sky-margin-triple; + text-align: center; } diff --git a/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.ts b/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.ts index 11ff8a7..9d1bb8f 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.ts @@ -1,10 +1,12 @@ import { + ChangeDetectionStrategy, Component } from '@angular/core'; @Component({ selector: 'sky-progress-indicator-title', templateUrl: './progress-indicator-title.component.html', - styleUrls: ['./progress-indicator-title.component.scss'] + styleUrls: ['./progress-indicator-title.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush }) export class SkyProgressIndicatorTitleComponent { } diff --git a/src/app/public/modules/progress-indicator/progress-indicator.component.html b/src/app/public/modules/progress-indicator/progress-indicator.component.html index d764a5b..27129d3 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator.component.html +++ b/src/app/public/modules/progress-indicator/progress-indicator.component.html @@ -1,39 +1,15 @@ -
-
-
-
-
-
-
-
+
-
-
diff --git a/src/app/public/modules/progress-indicator/progress-indicator.component.scss b/src/app/public/modules/progress-indicator/progress-indicator.component.scss index ab38655..ab9ea47 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator.component.scss +++ b/src/app/public/modules/progress-indicator/progress-indicator.component.scss @@ -1,70 +1,87 @@ @import "~@skyux/theme/scss/mixins"; @import "~@skyux/theme/scss/_compat/mixins"; +@import "./scss/progress-indicator-variables"; -.sky-progress-indicator-items { - &:not(.sky-progress-indicator-items-horizontal) { - max-width: 400px; - min-width: 250px; - margin: 0 auto; - vertical-align: middle; +.sky-progress-indicator { + ::ng-deep { + sky-progress-indicator-item:last-of-type { + // Hide the last item's line. + .sky-progress-indicator-status-marker-line { + display: none; + } + } } } -.sky-progress-indicator-display { - display: flex; - margin-bottom: $sky-margin; -} +.sky-progress-indicator-mode-vertical { + max-width: 400px; + min-width: 250px; + margin: 0 auto; -.sky-progress-indicator-display-item { - display: flex; -} + /** + * Overwrite item styles for vertical display mode. + */ + ::ng-deep { + .sky-progress-indicator-item-content { + text-align: center; -.sky-progress-indicator-display-item-step { - width: 15px; - height: 15px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - border-radius: 15px; - border: 2px solid $sky-border-color-neutral-medium; - background-color: white; -} + // Accommodate the width of the status marker to make the content centered. + margin-left: -$status-marker-width * 2; + } -.sky-progress-indicator-display-item-step-active { - background: $sky-highlight-color-success; - border-color: $sky-highlight-color-success !important; + sky-progress-indicator-nav-button, + .sky-progress-indicator-reset-button { + display: block; + padding-top: $sky-padding-triple; + padding-left: $sky-margin-plus-half; + } + } } -.sky-progress-indicator-display-item-step-complete { - width: 15px; - height: 15px; - font-size: 15px; - margin-top: -2px; +.sky-progress-indicator-mode-horizontal { + /** + * Overwrite item styles for vertical display mode. + */ + ::ng-deep { + .sky-progress-indicator-item-title { + font-weight: 600; + font-size: 16px; + } + } } -.sky-progress-indicator-display-item-line { - height: 1px; - width: 30px; - background-color: $sky-highlight-color-success; - margin-top: 7px; +.sky-progress-indicator-status-markers { + display: flex; + margin-bottom: $sky-margin; - &.sky-progress-indicator-display-item-line-next-check { - width: 25px; - margin-right: $sky-margin-half; - margin-left: 0px; - } + /** + * Overwrite status marker styles based on their position in the series. + */ + ::ng-deep { + sky-progress-indicator-status-marker { + // Restrict the marker's width in horizontal mode. + flex-basis: 45px; + flex-grow: 0; - &.sky-progress-indicator-display-item-line-check { - width: 20px; - margin-right: $sky-margin-half; - margin-left: $sky-margin-half; + &:first-of-type { + margin-left: -5px; - &:not(.sky-progress-indicator-display-item-line-next-check) { - width: 25px; - margin-right: 0px; - } - } + // Remove the line segment for the first marker in the series. + .sky-progress-indicator-status-marker { + .sky-progress-indicator-status-marker-icon { + &:before { + display: none !important; + } + } + } + } - &.sky-progress-indicator-display-item-line-next-inactive { - background-color: $sky-border-color-neutral-medium; + // Remove the line from the last marker in the series. + &:last-of-type { + .sky-progress-indicator-status-marker-line { + display: none; + } + } + } } } diff --git a/src/app/public/modules/progress-indicator/progress-indicator.component.spec.ts b/src/app/public/modules/progress-indicator/progress-indicator.component.spec.ts index 268a090..0326ae1 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator.component.spec.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator.component.spec.ts @@ -1,428 +1,668 @@ import { + async, + ComponentFixture, fakeAsync, TestBed, - ComponentFixture, - tick, - async + tick } from '@angular/core/testing'; -import { - SkyLibResourcesService -} from '@skyux/i18n'; - -import { - SkyLibResourcesTestService -} from '@skyux/i18n/testing'; - import { expect } from '@skyux-sdk/testing'; import { - SkyWindowRefService -} from '@skyux/core'; + SkyProgressIndicatorFixtureComponent +} from './fixtures/progress-indicator.component.fixture'; import { - SkyProgressIndicatorModule, - SkyProgressIndicatorMessageType -} from '.'; + SkyProgressIndicatorFixtureModule +} from './fixtures/progress-indicator.module.fixture'; import { - ProgressIndicatorTestComponent -} from './fixtures/progress-indicator.component.fixture'; + SkyProgressIndicatorDisplayMode, + SkyProgressIndicatorItemStatus, + SkyProgressIndicatorMessageType, + SkyProgressIndicatorNavButtonType +} from './types'; import { - SkyProgressIndicatorDisplayMode -} from './types/progress-indicator-mode'; + SkyProgressIndicatorComponent +} from './progress-indicator.component'; describe('Progress indicator component', function () { + let fixture: ComponentFixture; + let componentInstance: SkyProgressIndicatorFixtureComponent; + let progressIndicator: SkyProgressIndicatorComponent; + let consoleWarnSpy: jasmine.Spy; + + function detectChanges(): void { + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + tick(); + } + + function stepBackward(): void { + componentInstance.sendMessage({ + type: SkyProgressIndicatorMessageType.Regress + }); + detectChanges(); + } + + function stepForward(): void { + componentInstance.sendMessage({ + type: SkyProgressIndicatorMessageType.Progress + }); + detectChanges(); + } + + function gotoStep(index?: number): void { + componentInstance.sendMessage({ + type: SkyProgressIndicatorMessageType.GoTo, + data: { + activeIndex: index + } + }); + detectChanges(); + } + + function verifyItemStatuses(statuses: SkyProgressIndicatorItemStatus[]): void { + componentInstance.progressItems.forEach((item, i) => { + expect(item.status).toEqual(statuses[i]); + }); + } + + function verifyActiveIndex(index: number): void { + expect(componentInstance.lastChange.activeIndex).toEqual(index); + } - let fixture: ComponentFixture; - let componentInstance: any; + function getNavButtonElement(type: SkyProgressIndicatorNavButtonType): any { + return fixture.nativeElement.querySelector( + `.progress-indicator-fixture-external-nav-buttons .sky-progress-indicator-nav-button-${type}` + ); + } - beforeEach(() => { + function getStepHeadingElements(): NodeList { + return fixture.nativeElement.querySelectorAll('.sky-progress-indicator-item-title'); + } + + beforeEach(function () { TestBed.configureTestingModule({ imports: [ - SkyProgressIndicatorModule - ], - declarations: [ - ProgressIndicatorTestComponent - ], - providers: [ - SkyWindowRefService, - { - provide: SkyLibResourcesService, - useClass: SkyLibResourcesTestService - } + SkyProgressIndicatorFixtureModule ] }); - fixture = TestBed.createComponent(ProgressIndicatorTestComponent); + fixture = TestBed.createComponent(SkyProgressIndicatorFixtureComponent); + componentInstance = fixture.componentInstance; + progressIndicator = componentInstance.progressIndicator; + + consoleWarnSpy = spyOn(console, 'warn'); }); - it('should not run the progressChanges emitter until a tick has occurred.', fakeAsync(() => { - fixture.detectChanges(); - expect(fixture.componentInstance.progressChangesEmitted).toBeFalsy(); - tick(); - expect(fixture.componentInstance.progressChangesEmitted).toBeTruthy(); + it('should set defaults', fakeAsync(function () { + detectChanges(); + + expect(progressIndicator.displayMode).toEqual(SkyProgressIndicatorDisplayMode.Vertical); + expect(progressIndicator.isPassive).toEqual(false); + expect(progressIndicator.startingIndex).toEqual(0); })); - it('should use horizontal display if set', fakeAsync(() => { - fixture.componentInstance.displayMode = SkyProgressIndicatorDisplayMode.Horizontal; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - componentInstance = fixture.componentInstance.progressIndicator; - let element = fixture.nativeElement; + it('should emit progress changes initially', fakeAsync(function () { + const spy = spyOn(componentInstance, 'onProgressChanges').and.callThrough(); - expect(componentInstance.isHorizontal).toBeTruthy(); - for (let item of componentInstance.progressItems.toArray()) { - expect(item.isHorizontal).toBeTruthy(); - } + detectChanges(); - expect(element.querySelector('.sky-progress-indicator-display')).toBeTruthy(); - expect(element.querySelector('.sky-progress-indicator-item-step')).toBeFalsy(); + expect(spy).toHaveBeenCalled(); })); - it('should use passive mode if set', fakeAsync(() => { - fixture.componentInstance.isPassive = true; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - componentInstance = fixture.componentInstance.progressIndicator; + it('should use horizontal display if set', fakeAsync(function () { + componentInstance.displayMode = SkyProgressIndicatorDisplayMode.Horizontal; + + detectChanges(); - expect(componentInstance.isPassive).toBeTruthy(); - for (let item of componentInstance.progressItems.toArray()) { - expect(item.isPassive).toBeTruthy(); - } + const element = fixture.nativeElement; + + expect(element.querySelector('.sky-progress-indicator-status-markers')).toBeTruthy(); + expect(element.querySelector('.sky-progress-indicator-item .sky-progress-indicator-status-marker')).toBeFalsy(); })); - // May be removed in the future if support is added - it('should not use passive mode if set for horizontal display', fakeAsync(() => { - fixture.componentInstance.displayMode = SkyProgressIndicatorDisplayMode.Horizontal; - fixture.componentInstance.isPassive = true; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - componentInstance = fixture.componentInstance.progressIndicator; + it('should use starting index if set', fakeAsync(function () { + componentInstance.startingIndex = 2; + + detectChanges(); - expect(componentInstance.isPassive).toBeFalsy(); - for (let item of componentInstance.progressItems.toArray()) { - expect(item.isPassive).toBeFalsy(); - } + verifyActiveIndex(2); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Active + ]); })); - it('should use starting index if set', fakeAsync(() => { - fixture.componentInstance.startingIndex = 2; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - componentInstance = fixture.componentInstance.progressIndicator; - let itemArr = componentInstance.progressItems.toArray(); + it('should show step number in heading', fakeAsync(function () { + componentInstance.displayMode = SkyProgressIndicatorDisplayMode.Vertical; - expect(componentInstance.activeIndex).toBe(2); - expect(itemArr[0].isComplete).toBeTruthy(); - expect(itemArr[0].isActive).toBeFalsy(); + detectChanges(); - expect(itemArr[1].isComplete).toBeTruthy(); - expect(itemArr[1].isActive).toBeFalsy(); + const stepHeadingElements = getStepHeadingElements(); + const headingElement = stepHeadingElements.item(0); - expect(itemArr[2].isComplete).toBeFalsy(); - expect(itemArr[2].isActive).toBeTruthy(); + expect(headingElement.textContent.trim()).toEqual('1 - Do the first thing'); })); - describe('standard setup', () => { - beforeEach(fakeAsync(() => { - fixture.detectChanges(); - tick(); - componentInstance = fixture.componentInstance.progressIndicator; - })); + it('should handle empty progress indicator', fakeAsync(function () { + expect(componentInstance.emptyProgressIndicator.itemStatuses).toEqual([]); + })); - it('should use vertical display by default', fakeAsync(() => { - let element = fixture.nativeElement; + describe('Passive mode', function () { + beforeEach(function () { + componentInstance.isPassive = true; + }); - expect(componentInstance.isHorizontal).toBeFalsy(); - for (let item of componentInstance.progressItems.toArray()) { - expect(item.isHorizontal).toBeFalsy(); - } + it('should use passive mode if set', fakeAsync(function () { + detectChanges(); - expect(element.querySelector('.sky-progress-indicator-display')).toBeFalsy(); - expect(element.querySelector('.sky-progress-indicator-item-step')).toBeTruthy(); + expect(progressIndicator.isPassive).toEqual(true); })); - it('should not use passive mode by default', fakeAsync(() => { - expect(componentInstance.isPassive).toBeFalsy(); - for (let item of componentInstance.progressItems.toArray()) { - expect(item.isPassive).toBeFalsy(); - } + it('should set active step to Pending instead of Active', fakeAsync(function () { + detectChanges(); + + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Pending, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); })); - it('should set item numbers', () => { - componentInstance.progressItems.forEach((item: any, index: number) => { - expect(item.itemNumber).toBe(index + 1); - }); - }); + it('should hide the step number in the heading', fakeAsync(function () { + detectChanges(); - it('should advance progress and complete current item when a complete message is received.', () => { - expect(componentInstance.activeIndex).toBe(0); - expect(componentInstance.progressItems.first.isActive).toBeTruthy(); - expect(componentInstance.progressItems.first.isComplete).toBeFalsy(); + const stepHeadingElements = getStepHeadingElements(); + const headingElement = stepHeadingElements.item(0); - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Progress); - fixture.detectChanges(); + expect(headingElement.textContent.trim()).toEqual('Do the first thing'); + })); - expect(componentInstance.activeIndex).toBe(1); - expect(componentInstance.progressItems.first.isActive).toBeFalsy(); - expect(componentInstance.progressItems.first.isComplete).toBeTruthy(); - expect(componentInstance.progressItems.first.isNextToInactive).toBeFalsy(); + it('should not use passive mode if set for horizontal display', fakeAsync(function () { + componentInstance.displayMode = SkyProgressIndicatorDisplayMode.Horizontal; - expect(componentInstance.progressItems.toArray()[1].isActive).toBeTruthy(); - expect(componentInstance.progressItems.toArray()[1].isComplete).toBeFalsy(); - }); + detectChanges(); - it('should not advance once past the final step', () => { - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Progress); - fixture.detectChanges(); - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Progress); - fixture.detectChanges(); - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Progress); - fixture.detectChanges(); + expect(progressIndicator.isPassive).toEqual(false); + })); + }); - expect(componentInstance.activeIndex).toBe(3); - expect(componentInstance.progressItems.last.isActive).toBeFalsy(); - expect(componentInstance.progressItems.last.isComplete).toBeTruthy(); + describe('Message stream', function () { + it('should navigate through the steps', fakeAsync(function () { + detectChanges(); + + verifyActiveIndex(0); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); + + stepForward(); + + verifyActiveIndex(1); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete + ]); + + stepBackward(); + + verifyActiveIndex(0); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); + })); - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Progress); - fixture.detectChanges(); + it('should not progress past final step', fakeAsync(function () { + detectChanges(); - expect(componentInstance.activeIndex).toBe(3); - }); + stepForward(); + stepForward(); + stepForward(); - it('should not regress when on the first step', () => { - expect(componentInstance.activeIndex).toBe(0); - expect(componentInstance.progressItems.first.isActive).toBeTruthy(); - expect(componentInstance.progressItems.first.isComplete).toBeFalsy(); + verifyActiveIndex(2); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Active + ]); - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Regress); - fixture.detectChanges(); + stepForward(); - expect(componentInstance.activeIndex).toBe(0); - expect(componentInstance.progressItems.first.isActive).toBeTruthy(); - expect(componentInstance.progressItems.first.isComplete).toBeFalsy(); - }); + verifyActiveIndex(2); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Active + ]); + })); - it('should leave completed tasks marked as such when regressing progress', () => { - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Progress); - fixture.detectChanges(); - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Progress); - fixture.detectChanges(); + it('should not regress before first step', fakeAsync(function () { + detectChanges(); - expect(componentInstance.progressItems.first.isComplete).toBeTruthy(); - expect(componentInstance.progressItems.first.isActive).toBeFalsy(); - expect(componentInstance.progressItems.first.isNextToInactive).toBeFalsy(); + verifyActiveIndex(0); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); - expect(componentInstance.progressItems.toArray()[1].isComplete).toBeTruthy(); - expect(componentInstance.progressItems.toArray()[1].isActive).toBeFalsy(); - expect(componentInstance.progressItems.first.isNextToInactive).toBeFalsy(); + stepBackward(); - expect(componentInstance.progressItems.last.isComplete).toBeFalsy(); - expect(componentInstance.progressItems.last.isActive).toBeTruthy(); + verifyActiveIndex(0); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); + })); - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Regress); - fixture.detectChanges(); - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Regress); - fixture.detectChanges(); + it('should reset progress', fakeAsync(function () { + componentInstance.startingIndex = 2; - expect(componentInstance.progressItems.first.isComplete).toBeTruthy(); - expect(componentInstance.progressItems.first.isActive).toBeTruthy(); - expect(componentInstance.progressItems.first.isNextToInactive).toBeFalsy(); + detectChanges(); - expect(componentInstance.progressItems.toArray()[1].isComplete).toBeTruthy(); - expect(componentInstance.progressItems.toArray()[1].isActive).toBeFalsy(); - expect(componentInstance.progressItems.toArray()[1].isNextToInactive).toBeTruthy(); + verifyActiveIndex(2); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Active + ]); - expect(componentInstance.progressItems.last.isComplete).toBeFalsy(); - expect(componentInstance.progressItems.last.isActive).toBeFalsy(); - }); + componentInstance.sendMessage({ + type: SkyProgressIndicatorMessageType.Reset + }); - it('should reset progress when a reset progress message is passed', () => { - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Progress); - fixture.detectChanges(); - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Progress); - fixture.detectChanges(); + detectChanges(); - expect(componentInstance.progressItems.first.isComplete).toBeTruthy(); - expect(componentInstance.progressItems.first.isActive).toBeFalsy(); - expect(componentInstance.progressItems.first.isNextToInactive).toBeFalsy(); + verifyActiveIndex(0); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); + })); - expect(componentInstance.progressItems.toArray()[1].isComplete).toBeTruthy(); - expect(componentInstance.progressItems.toArray()[1].isActive).toBeFalsy(); - expect(componentInstance.progressItems.first.isNextToInactive).toBeFalsy(); + it('should goto a specific step', fakeAsync(function () { + detectChanges(); - expect(componentInstance.progressItems.last.isComplete).toBeFalsy(); - expect(componentInstance.progressItems.last.isActive).toBeTruthy(); + gotoStep(1); - componentInstance.messageStream.next(SkyProgressIndicatorMessageType.Reset); - fixture.detectChanges(); + verifyActiveIndex(1); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete + ]); + })); - expect(componentInstance.progressItems.first.isComplete).toBeFalsy(); - expect(componentInstance.progressItems.first.isActive).toBeTruthy(); - expect(componentInstance.progressItems.first.isNextToInactive).toBeTruthy(); + it('should handle out-of-range indexes', fakeAsync(function () { + detectChanges(); - expect(componentInstance.progressItems.toArray()[1].isComplete).toBeFalsy(); - expect(componentInstance.progressItems.toArray()[1].isActive).toBeFalsy(); - expect(componentInstance.progressItems.first.isNextToInactive).toBeTruthy(); + gotoStep(100); - expect(componentInstance.progressItems.last.isComplete).toBeFalsy(); - expect(componentInstance.progressItems.last.isActive).toBeFalsy(); - }); + verifyActiveIndex(2); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Active + ]); - it('should throw an error when an unknown message is passed', () => { - try { - componentInstance.messageStream.next(4); - fail('Should have thrown an exception.'); - } catch (e) { - expect(e).toBe('SkyProgressIndicatorMessageType unrecognized.'); - } - }); - }); + gotoStep(-20); - describe('progress indicator nav buttons', () => { - it('should be able to control progress', fakeAsync(() => { - fixture.detectChanges(); - tick(); - componentInstance = fixture.componentInstance.progressIndicator; - let debugElement = fixture.nativeElement; - let prevButton = debugElement.querySelector('#previous-btn button'); - let nextButton = debugElement.querySelector('#next-btn button'); - let resetButton = debugElement.querySelector('#reset-btn button'); - - // next button - nextButton.click(); - fixture.detectChanges(); - tick(); - fixture.detectChanges(); + verifyActiveIndex(0); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); + })); - expect(componentInstance.activeIndex).toBe(1); - expect(componentInstance.progressItems.first.isActive).toBeFalsy(); - expect(componentInstance.progressItems.first.isComplete).toBeTruthy(); + it('should warn when goto is called without an active index', fakeAsync(function () { + detectChanges(); - expect(componentInstance.progressItems.toArray()[1].isActive).toBeTruthy(); - expect(componentInstance.progressItems.toArray()[1].isComplete).toBeFalsy(); + gotoStep(undefined); - // previous button - prevButton.click(); - fixture.detectChanges(); - tick(); - fixture.detectChanges(); + expect(consoleWarnSpy).toHaveBeenCalled(); + })); - expect(componentInstance.activeIndex).toBe(0); - expect(componentInstance.progressItems.first.isActive).toBeTruthy(); - expect(componentInstance.progressItems.first.isComplete).toBeTruthy(); + it('should finish all steps', fakeAsync(function () { + detectChanges(); - expect(componentInstance.progressItems.toArray()[1].isActive).toBeFalsy(); - expect(componentInstance.progressItems.toArray()[1].isComplete).toBeFalsy(); + const spy = spyOn(componentInstance, 'onProgressChanges').and.callThrough(); - nextButton.click(); - fixture.detectChanges(); - tick(); - fixture.detectChanges(); + componentInstance.sendMessage({ + type: SkyProgressIndicatorMessageType.Finish + }); - nextButton.click(); - fixture.detectChanges(); - tick(); - fixture.detectChanges(); + detectChanges(); + + verifyActiveIndex(2); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete + ]); + + expect(spy).toHaveBeenCalledWith({ + activeIndex: 2, + isFinished: true, + itemStatuses: [ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete + ] + }); + })); - resetButton.click(); - fixture.detectChanges(); - tick(); - fixture.detectChanges(); + it('should handle undefined message types', fakeAsync(function () { + detectChanges(); + + const spy = spyOn(progressIndicator as any, 'updateSteps').and.callThrough(); - expect(componentInstance.activeIndex).toBe(0); - expect(componentInstance.progressItems.first.isActive).toBeTruthy(); - expect(componentInstance.progressItems.first.isComplete).toBeFalsy(); + componentInstance.sendMessage({ + type: 1000 + }); - expect(componentInstance.progressItems.toArray()[1].isActive).toBeFalsy(); - expect(componentInstance.progressItems.toArray()[1].isComplete).toBeFalsy(); + detectChanges(); - expect(fixture.componentInstance.resetWasClicked).toBeTruthy(); + expect(spy).not.toHaveBeenCalled(); })); + }); - it('should use inputted button type', fakeAsync(() => { - fixture.componentInstance.previousButtonType = 'next'; - fixture.detectChanges(); - tick(); + describe('Navigation buttons', function () { + beforeEach(function () { + componentInstance.showNavButtons = true; + componentInstance.defaultNavButtonProgressIndicatorRef = componentInstance.progressIndicator; + }); + + it('should set defaults', fakeAsync(() => { + detectChanges(); + + const defaultButtonComponent = componentInstance.defaultNavButtonComponent; + const defaultButtonElement = componentInstance.defaultNavButtonElement.nativeElement; - expect(fixture.componentInstance.navButtons.first.buttonType).toBe('next'); + expect(defaultButtonComponent.buttonType).toEqual('next'); + expect(defaultButtonElement.textContent).toContain('Next'); + + let buttonElement = getNavButtonElement('previous'); + expect(buttonElement.textContent).toContain('Previous'); + + buttonElement = getNavButtonElement('next'); + expect(buttonElement.textContent).toContain('Next'); + + buttonElement = getNavButtonElement('reset'); + expect(buttonElement.textContent).toContain('Reset'); + + // Show finish button. + gotoStep(4); + + detectChanges(); + + buttonElement = getNavButtonElement('finish'); + expect(buttonElement.textContent).toContain('Finish'); })); - it('should default button type to next', fakeAsync(() => { - fixture.componentInstance.previousButtonType = undefined; - fixture.detectChanges(); - tick(); + it('should navigate between the steps', fakeAsync(function () { + detectChanges(); + + verifyActiveIndex(0); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); + + const previousButtonElement = getNavButtonElement('previous'); + const nextButtonElement = getNavButtonElement('next'); + + nextButtonElement.click(); + detectChanges(); + + verifyActiveIndex(1); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete + ]); + + previousButtonElement.click(); + detectChanges(); + + verifyActiveIndex(0); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); + + gotoStep(4); + detectChanges(); + + verifyActiveIndex(2); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Active + ]); + + const finishButtonElement = getNavButtonElement('finish'); + finishButtonElement.click(); + + detectChanges(); + + verifyActiveIndex(2); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Complete + ]); + })); + + it('should reset the steps', fakeAsync(function () { + detectChanges(); + + gotoStep(1); + detectChanges(); + + verifyActiveIndex(1); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete + ]); - expect(fixture.componentInstance.navButtons.first.buttonType).toBe('next'); + const resetButton = fixture.nativeElement.querySelector( + '.progress-indicator-fixture-internal-nav-button button' + ); + + resetButton.click(); + detectChanges(); + + verifyActiveIndex(0); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); })); - it('should use inputted button text', fakeAsync(() => { - fixture.componentInstance.previousButtonText = 'good text'; - fixture.detectChanges(); - tick(); + it('should do nothing if buttonType unrecognized', fakeAsync(function () { + detectChanges(); + + verifyActiveIndex(0); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); + + const defaultButtonComponent = componentInstance.defaultNavButtonComponent; + const defaultButtonElement = componentInstance.defaultNavButtonElement.nativeElement.querySelector('button'); - expect(fixture.componentInstance.navButtons.first.buttonText).toBe('good text'); + const clickSpy = spyOn(defaultButtonComponent, 'onClick').and.callThrough(); + + defaultButtonComponent.buttonType = 'foobar' as any; + + defaultButtonElement.click(); + detectChanges(); + + expect(clickSpy).toHaveBeenCalled(); + verifyActiveIndex(0); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete, + SkyProgressIndicatorItemStatus.Incomplete + ]); })); - it('should default button text for each button type', fakeAsync(() => { - fixture.detectChanges(); - tick(); + it('should hide the next button and show the finish button on the last step', fakeAsync(function () { + detectChanges(); + + let nextButtonElement = getNavButtonElement('next'); + let finishButtonElement = getNavButtonElement('finish'); - expect(fixture.nativeElement.querySelector('#previous-btn button').innerText.trim()).toBe('Previous'); - expect(fixture.nativeElement.querySelector('#next-btn button').innerText.trim()).toBe('Next'); + expect(nextButtonElement).toBeTruthy(); + expect(finishButtonElement).toBeFalsy(); + + gotoStep(2); + detectChanges(); + + nextButtonElement = getNavButtonElement('next'); + finishButtonElement = getNavButtonElement('finish'); + + expect(nextButtonElement).toBeFalsy(); + expect(finishButtonElement).toBeTruthy(); })); - it('should use inputted disabled state', fakeAsync(() => { - fixture.componentInstance.previousButtonDisabled = true; - fixture.componentInstance.nextButtonDisabled = true; - fixture.componentInstance.resetButtonDisabled = true; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - let buttonElements = fixture.nativeElement.querySelectorAll('sky-progress-indicator-nav-button button'); - let resetButton = fixture.nativeElement.querySelector('#reset-btn button'); + it('should not hide the next button if the finish button does not exist', fakeAsync(function () { + // Create a custom button config that does not include a finish button. + componentInstance.buttonConfigs = [ + { + type: 'previous' + }, + { + type: 'next' + } + ]; + + detectChanges(); + + let nextButtonElement = getNavButtonElement('next'); + + expect(nextButtonElement).toBeTruthy(); - expect(fixture.componentInstance.navButtons.first.disabled).toBeTruthy(); - expect(buttonElements[0].disabled).toBeTruthy(); + gotoStep(2); + detectChanges(); - expect(fixture.componentInstance.navButtons.last.disabled).toBeTruthy(); - expect(buttonElements[1].disabled).toBeTruthy(); + nextButtonElement = getNavButtonElement('next'); - expect(fixture.componentInstance.resetButton.disabled).toBeTruthy(); - expect(resetButton.disabled).toBeTruthy(); + expect(nextButtonElement).toBeTruthy(); + expect(nextButtonElement.disabled).toBeTruthy(); })); - it('should be accessible', async(() => { + it('should throw error if progress indicator not set as an input', fakeAsync(function () { + componentInstance.defaultNavButtonProgressIndicatorRef = undefined; + + try { + detectChanges(); + fail('It should throw error!'); + } catch (error) { + expect(error).toExist(); + } + })); + }); + + describe('Accessibility', function () { + it('should be accessible', async(function () { fixture.detectChanges(); fixture.whenStable().then(() => { expect(fixture.nativeElement).toBeAccessible(); }); })); - it('should be accessible in passive mode', async(() => { - fixture.componentInstance.isPassive = true; + it('should be accessible in passive mode', async(function () { + componentInstance.isPassive = true; fixture.detectChanges(); fixture.whenStable().then(() => { expect(fixture.nativeElement).toBeAccessible(); }); })); - it('should be accessible with disabled buttons', async(() => { - fixture.componentInstance.previousButtonDisabled = true; - fixture.componentInstance.nextButtonDisabled = true; - fixture.componentInstance.resetButtonDisabled = true; + it('should be accessible with disabled buttons', async(function () { + componentInstance.disabled = true; fixture.detectChanges(); fixture.whenStable().then(() => { expect(fixture.nativeElement).toBeAccessible(); }); })); }); + + describe('Deprecated features', function () { + it('should warn when message stream called with only the type', fakeAsync(function () { + detectChanges(); + + componentInstance.sendMessageLegacy(SkyProgressIndicatorMessageType.Progress); + + detectChanges(); + + expect(consoleWarnSpy).toHaveBeenCalled(); + + verifyActiveIndex(1); + verifyItemStatuses([ + SkyProgressIndicatorItemStatus.Complete, + SkyProgressIndicatorItemStatus.Active, + SkyProgressIndicatorItemStatus.Incomplete + ]); + })); + + it('should warn if using template reference variable with legacy reset button', fakeAsync(function () { + detectChanges(); + + componentInstance.progressIndicatorTemplateRefLegacy = componentInstance.progressIndicator; + + detectChanges(); + + expect(consoleWarnSpy).toHaveBeenCalled(); + })); + + it('should support legacy reset button located inside progress indicator component', fakeAsync(function () { + detectChanges(); + + const resetClickSpy = spyOn(componentInstance, 'onResetClick'); + + componentInstance.legacyResetButton.nativeElement.querySelector('button').click(); + + detectChanges(); + + expect(resetClickSpy).toHaveBeenCalled(); + })); + + it('should support legacy reset button located outside progress indicator component', fakeAsync(function () { + componentInstance.showIsolatedLegacyResetButton = true; + + detectChanges(); + + const resetClickSpy = spyOn(componentInstance, 'onResetClick'); + + detectChanges(); + + componentInstance.legacyIsolatedResetButton.nativeElement.querySelector('button').click(); + + detectChanges(); + + expect(resetClickSpy).toHaveBeenCalled(); + })); + }); }); diff --git a/src/app/public/modules/progress-indicator/progress-indicator.component.ts b/src/app/public/modules/progress-indicator/progress-indicator.component.ts index a0ddf1a..d8243d1 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator.component.ts @@ -1,219 +1,349 @@ import { AfterContentInit, + ChangeDetectionStrategy, Component, ContentChildren, - EventEmitter, Input, + OnInit, OnDestroy, - Optional, Output, - QueryList + QueryList, + ChangeDetectorRef } from '@angular/core'; +import { + SkyAppWindowRef +} from '@skyux/core'; + import { Subject } from 'rxjs/Subject'; +import 'rxjs/add/operator/takeUntil'; + import { - SkyWindowRefService -} from '@skyux/core'; + SkyProgressIndicatorItemComponent +} from './progress-indicator-item/progress-indicator-item.component'; import { SkyProgressIndicatorChange, + SkyProgressIndicatorDisplayMode, + SkyProgressIndicatorItemStatus, + SkyProgressIndicatorMessage, SkyProgressIndicatorMessageType } from './types'; -import { - SkyProgressIndicatorItemComponent -} from './progress-indicator-item'; - -import { - SkyProgressIndicatorDisplayMode -} from './types/progress-indicator-mode'; - @Component({ selector: 'sky-progress-indicator', templateUrl: './progress-indicator.component.html', - styleUrls: ['./progress-indicator.component.scss'] + styleUrls: ['./progress-indicator.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush }) -export class SkyProgressIndicatorComponent implements AfterContentInit, OnDestroy { +export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, OnDestroy { @Input() - public startingIndex: number; - - @Input() - public get displayMode(): SkyProgressIndicatorDisplayMode { - return this._displayMode || SkyProgressIndicatorDisplayMode.Vertical; - } public set displayMode(value: SkyProgressIndicatorDisplayMode) { this._displayMode = value; } - public get isHorizontal(): boolean { - return this.displayMode === SkyProgressIndicatorDisplayMode.Horizontal; + public get displayMode(): SkyProgressIndicatorDisplayMode { + if (this._displayMode === undefined) { + return SkyProgressIndicatorDisplayMode.Vertical; + } + + return this._displayMode; } @Input() - public get isPassive(): boolean { - // Passive mode is not supported for horizontal displays at the moment - return false || (this._isPassive && !this.isHorizontal); - } public set isPassive(value: boolean) { this._isPassive = value; } + public get isPassive(): boolean { + // Currently, passive mode is not supported for horizontal displays. + if (this.displayMode === SkyProgressIndicatorDisplayMode.Horizontal) { + return false; + } + + return this._isPassive || false; + } + @Input() - public messageStream = new Subject(); + public set messageStream(value: Subject) { + if (value) { + this._messageStream = value; + } + } + + @Input() + public set startingIndex(value: number) { + this._startingIndex = value; + } + + public get startingIndex(): number { + return this._startingIndex || 0; + } @Output() - public progressChanges = new EventEmitter(); + public progressChanges = new Subject(); - @ContentChildren(SkyProgressIndicatorItemComponent) - public progressItems: QueryList; + public get cssClassNames(): string { + const classNames = [ + `sky-progress-indicator-mode-${this.displayModeName}` + ]; - private activeIndex = 0; - private _displayMode: SkyProgressIndicatorDisplayMode; - private _isPassive: boolean; - private ngUnsubscribe = new Subject(); + if (this.isPassive) { + classNames.push('sky-progress-indicator-passive'); + } - constructor( - @Optional() private windowService: SkyWindowRefService - ) {} + return classNames.join(' '); + } - public ngAfterContentInit(): void { - // Set up observation of progress command messages - this.messageStream - .takeUntil(this.ngUnsubscribe) - .subscribe((messageType: SkyProgressIndicatorMessageType) => { - switch (messageType) { - case SkyProgressIndicatorMessageType.Progress: - this.progress(); - break; - - case SkyProgressIndicatorMessageType.Regress: - this.regress(); - break; - - case SkyProgressIndicatorMessageType.Reset: - this.resetProgress(); - break; - - default: - throw 'SkyProgressIndicatorMessageType unrecognized.'; - } - this.progressChanges.emit({ - activeIndex: this.activeIndex - }); - }); + public get displayModeName(): string { + if (this.displayMode === SkyProgressIndicatorDisplayMode.Vertical) { + return 'vertical'; + } - // Set the initial index - if (this.startingIndex && this.startingIndex < this.progressItems.length) { - this.activeIndex = this.startingIndex; + return 'horizontal'; + } - const startingItem = this.getItemByIndex(this.startingIndex); - startingItem.isActive = true; + public get hasFinishButton(): boolean { + return this._hasFinishButton || false; + } - this.progressItems.forEach((item, index) => { - if (index < this.startingIndex) { - item.isComplete = true; - item.isNextToInactive = false; - } - }); - } else { - const firstItem = this.getItemByIndex(this.activeIndex); - if (firstItem) { - firstItem.isActive = true; - } + public set hasFinishButton(value: boolean) { + this._hasFinishButton = value; + } + + public get itemStatuses(): SkyProgressIndicatorItemStatus[] { + if (!this.itemComponents) { + return []; } - // A timeout is needed to ensure that subscriptions are executed after all Angular lifecycle hooks have completed. - // For example, if a subscriber executed `detectChanges`, it would short-circuit any remaining lifecycle hooks. - this.windowService.getWindow().setTimeout(() => { - this.progressChanges.emit({ - activeIndex: this.activeIndex - }); - }); + const statuses = this.itemComponents.map(c => c.status); + + // Update the view whenever item statuses change. + this.changeDetector.markForCheck(); + + return statuses; + } + + @ContentChildren(SkyProgressIndicatorItemComponent) + private itemComponents: QueryList; + + private get activeIndex(): number { + return this._activeIndex || 0; + } + + private set activeIndex(value: number) { + const lastIndex = this.itemComponents.length - 1; - // Set the last item - const lastItem = this.getItemByIndex(this.progressItems.length - 1); - if (lastItem) { - lastItem.isLastItem = true; + if (value > lastIndex) { + value = lastIndex; } - // Set the horizontal state - this.progressItems.forEach((element, index) => { - element.displayMode = this.displayMode; - element.itemNumber = index + 1; - element.isPassive = this.isPassive; + if (value < 0) { + value = 0; + } + + this._activeIndex = value; + } + + private ngUnsubscribe = new Subject(); + + private _activeIndex: number; + private _displayMode: SkyProgressIndicatorDisplayMode; + private _hasFinishButton: boolean; + private _isPassive: boolean; + private _messageStream = new Subject(); + private _startingIndex: number; + + constructor( + private changeDetector: ChangeDetectorRef, + private windowRef: SkyAppWindowRef + ) { } + + public ngOnInit(): void { + this.subscribeToMessageStream(); + } + + public ngAfterContentInit(): void { + this.activeIndex = this.startingIndex; + + this.updateSteps(); + + // Wait for item components' change detection to complete + // before notifying changes to the consumer. + this.windowRef.nativeWindow.setTimeout(() => { + this.notifyChange(); }); } public ngOnDestroy(): void { this.ngUnsubscribe.next(); - this.ngUnsubscribe.unsubscribe(); + this.ngUnsubscribe.complete(); } - public isNextToCheck(index: number): boolean { - let nextItem = this.getItemByIndex(index + 1); - return nextItem && nextItem.isComplete && !nextItem.isActive; + public sendMessage(message: SkyProgressIndicatorMessage): void { + this._messageStream.next(message); } - private progress(): void { - if (this.activeIndex === this.progressItems.length) { + private gotoNextStep(): void { + const nextIndex = this.activeIndex + 1; + const lastIndex = this.itemComponents.length - 1; + + if (nextIndex > lastIndex) { return; } - const completedItem = this.getItemByIndex(this.activeIndex); - - this.activeIndex += 1; - const activeItem = this.getItemByIndex(this.activeIndex); - if (completedItem) { - completedItem.isActive = false; - completedItem.isComplete = true; - completedItem.isNextToInactive = false; - } - if (activeItem) { - activeItem.isActive = true; - } + this.gotoStep(nextIndex); } - private regress(): void { - if (this.activeIndex === 0) { + private gotoPreviousStep(): void { + const previousIndex = this.activeIndex - 1; + + if (previousIndex < 0) { return; } - const inactiveItem = this.getItemByIndex(this.activeIndex); - this.activeIndex -= 1; - const activeItem = this.getItemByIndex(this.activeIndex); + this.gotoStep(previousIndex); + } - if (inactiveItem) { - inactiveItem.isActive = false; - } - if (activeItem) { - activeItem.isActive = true; + private gotoStep(index: number): void { + this.activeIndex = index; + this.updateSteps(); + this.notifyChange(); + } - if (inactiveItem && !inactiveItem.isComplete) { - activeItem.isNextToInactive = true; - } - } + private finishSteps(): void { + this.activeIndex = this.itemComponents.length - 1; + + this.itemComponents.forEach((component) => { + component.status = SkyProgressIndicatorItemStatus.Complete; + }); + + this.notifyChange({ + isFinished: true + }); } - private resetProgress(): void { - this.activeIndex = 0; - this.progressItems.forEach((item: SkyProgressIndicatorItemComponent) => { - item.isActive = false; - item.isComplete = false; - item.isNextToInactive = true; + private resetSteps(): void { + this.gotoStep(0); + } + + private updateSteps(): void { + const activeIndex = this.activeIndex; + const isPassive = this.isPassive; + const isVertical = (this.displayMode === SkyProgressIndicatorDisplayMode.Vertical); + + this.itemComponents.forEach((component, i) => { + + // Set visibility. + component.isVisible = ( + activeIndex === i || + isVertical + ); + + // Set status. + if (activeIndex === i) { + if (isPassive) { + component.status = SkyProgressIndicatorItemStatus.Pending; + } else { + component.status = SkyProgressIndicatorItemStatus.Active; + } + } else if (activeIndex > i) { + component.status = SkyProgressIndicatorItemStatus.Complete; + } else { + component.status = SkyProgressIndicatorItemStatus.Incomplete; + } + + // Show or hide the status markers. + component.showStatusMarker = isVertical; + + // Show or hide the step number. + if (isPassive) { + component.hideStepNumber(); + } else { + component.showStepNumber(i + 1); + } + + // If we're in passive mode, don't show titles for incomplete items. + component.showTitle = !( + isPassive && + activeIndex < i + ); }); - const firstItem = this.getItemByIndex(this.activeIndex); - if (firstItem) { - firstItem.isActive = true; + } + + private handleIncomingMessage(message: SkyProgressIndicatorMessage | SkyProgressIndicatorMessageType): void { + const value: any = message; + + let type: SkyProgressIndicatorMessageType; + + // Prints a deprecation warning if the consumer provides only `SkyProgressIndicatorMessageType`. + if (value.type === undefined) { + console.warn( + 'The progress indicator component\'s `messageStream` input was ' + + 'set to `Subject`. This is a ' + + 'deprecated type and will be removed in the next major version release. ' + + 'Instead, set the `messageStream` input to `Subject`.' + ); + + type = value; + } else { + type = value.type; + } + + switch (type) { + case SkyProgressIndicatorMessageType.Finish: + this.finishSteps(); + break; + + case SkyProgressIndicatorMessageType.Progress: + this.gotoNextStep(); + break; + + case SkyProgressIndicatorMessageType.Regress: + this.gotoPreviousStep(); + break; + + case SkyProgressIndicatorMessageType.Reset: + this.resetSteps(); + break; + + case SkyProgressIndicatorMessageType.GoTo: + if ( + !value.data || + value.data.activeIndex === undefined + ) { + console.warn( + 'Please provide a step index to travel to!' + ); + return; + } + + this.gotoStep(value.data.activeIndex); + break; + + default: + break; } } - private getItemByIndex(index: number): SkyProgressIndicatorItemComponent { - return this.progressItems.find((item: any, i: number) => { - return (i === index); - }); + private subscribeToMessageStream(): void { + this._messageStream + .takeUntil(this.ngUnsubscribe) + .subscribe((message) => { + this.handleIncomingMessage(message); + }); + } + + private notifyChange(change?: SkyProgressIndicatorChange): void { + this.progressChanges.next( + Object.assign({}, { + activeIndex: this.activeIndex, + itemStatuses: this.itemStatuses + }, change) + ); } } diff --git a/src/app/public/modules/progress-indicator/progress-indicator.module.ts b/src/app/public/modules/progress-indicator/progress-indicator.module.ts index 1def178..f5f0a2d 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator.module.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator.module.ts @@ -1,53 +1,76 @@ import { NgModule } from '@angular/core'; + import { CommonModule } from '@angular/common'; +import { + SkyAppWindowRef +} from '@skyux/core'; + import { SkyI18nModule } from '@skyux/i18n'; import { - SkyProgressIndicatorResourcesModule -} from '../shared'; + SkyIconModule +} from '@skyux/indicators'; import { - SkyProgressIndicatorItemComponent -} from './progress-indicator-item'; + SkyProgressIndicatorResourcesModule +} from '../shared/progress-indicator-resources.module'; + import { SkyProgressIndicatorComponent } from './progress-indicator.component'; + +import { + SkyProgressIndicatorItemComponent +} from './progress-indicator-item/progress-indicator-item.component'; + import { SkyProgressIndicatorNavButtonComponent -} from './progress-indicator-nav-button'; +} from './progress-indicator-nav-button/progress-indicator-nav-button.component'; + import { SkyProgressIndicatorResetButtonComponent -} from './progress-indicator-reset-button'; +} from './progress-indicator-reset-button/progress-indicator-reset-button.component'; + +import { + SkyProgressIndicatorStatusMarkerComponent +} from './progress-indicator-status-marker/progress-indicator-status-marker.component'; + import { SkyProgressIndicatorTitleComponent -} from './progress-indicator-title'; +} from './progress-indicator-title/progress-indicator-title.component'; @NgModule({ declarations: [ - SkyProgressIndicatorItemComponent, SkyProgressIndicatorComponent, + SkyProgressIndicatorItemComponent, SkyProgressIndicatorNavButtonComponent, SkyProgressIndicatorResetButtonComponent, + SkyProgressIndicatorStatusMarkerComponent, SkyProgressIndicatorTitleComponent ], imports: [ - SkyI18nModule, CommonModule, + SkyI18nModule, + SkyIconModule, SkyProgressIndicatorResourcesModule ], exports: [ - SkyProgressIndicatorItemComponent, SkyProgressIndicatorComponent, + SkyProgressIndicatorItemComponent, SkyProgressIndicatorNavButtonComponent, SkyProgressIndicatorResetButtonComponent, + SkyProgressIndicatorStatusMarkerComponent, SkyProgressIndicatorTitleComponent + ], + providers: [ + SkyAppWindowRef ] }) export class SkyProgressIndicatorModule { } diff --git a/src/app/public/modules/progress-indicator/scss/progress-indicator-variables.scss b/src/app/public/modules/progress-indicator/scss/progress-indicator-variables.scss new file mode 100644 index 0000000..c25eb10 --- /dev/null +++ b/src/app/public/modules/progress-indicator/scss/progress-indicator-variables.scss @@ -0,0 +1,2 @@ +$icon-offset: 1px; +$status-marker-width: $sky-margin-plus-half; diff --git a/src/app/public/modules/progress-indicator/types/index.ts b/src/app/public/modules/progress-indicator/types/index.ts index c2af488..b9f2eaa 100644 --- a/src/app/public/modules/progress-indicator/types/index.ts +++ b/src/app/public/modules/progress-indicator/types/index.ts @@ -1,3 +1,6 @@ -export { SkyProgressIndicatorChange } from './progress-indicator-change'; -export { SkyProgressIndicatorMessageType } from './progress-indicator-message-type'; -export { SkyProgressIndicatorDisplayMode } from './progress-indicator-mode'; +export * from './progress-indicator-change'; +export * from './progress-indicator-display-mode'; +export * from './progress-indicator-item-status'; +export * from './progress-indicator-message-type'; +export * from './progress-indicator-message'; +export * from './progress-indicator-nav-button-type'; diff --git a/src/app/public/modules/progress-indicator/types/progress-indicator-change.ts b/src/app/public/modules/progress-indicator/types/progress-indicator-change.ts index dc22e22..7c5fc67 100644 --- a/src/app/public/modules/progress-indicator/types/progress-indicator-change.ts +++ b/src/app/public/modules/progress-indicator/types/progress-indicator-change.ts @@ -1,9 +1,12 @@ import { - SkyProgressIndicatorItemComponent -} from '../progress-indicator-item'; + SkyProgressIndicatorItemStatus +} from './progress-indicator-item-status'; export interface SkyProgressIndicatorChange { + activeIndex?: number; - items?: SkyProgressIndicatorItemComponent[]; - activeItem?: SkyProgressIndicatorItemComponent; + + isFinished?: boolean; + + itemStatuses?: SkyProgressIndicatorItemStatus[]; } diff --git a/src/app/public/modules/progress-indicator/types/progress-indicator-display-mode.ts b/src/app/public/modules/progress-indicator/types/progress-indicator-display-mode.ts new file mode 100644 index 0000000..72d8c90 --- /dev/null +++ b/src/app/public/modules/progress-indicator/types/progress-indicator-display-mode.ts @@ -0,0 +1,4 @@ +export const enum SkyProgressIndicatorDisplayMode { + Horizontal = 0, + Vertical +} diff --git a/src/app/public/modules/progress-indicator/types/progress-indicator-item-status.ts b/src/app/public/modules/progress-indicator/types/progress-indicator-item-status.ts new file mode 100644 index 0000000..cb27c54 --- /dev/null +++ b/src/app/public/modules/progress-indicator/types/progress-indicator-item-status.ts @@ -0,0 +1,6 @@ +export const enum SkyProgressIndicatorItemStatus { + Active = 0, + Complete, + Incomplete, + Pending +} diff --git a/src/app/public/modules/progress-indicator/types/progress-indicator-message-type.ts b/src/app/public/modules/progress-indicator/types/progress-indicator-message-type.ts index 9d8be15..dee86b1 100644 --- a/src/app/public/modules/progress-indicator/types/progress-indicator-message-type.ts +++ b/src/app/public/modules/progress-indicator/types/progress-indicator-message-type.ts @@ -1,5 +1,7 @@ export enum SkyProgressIndicatorMessageType { Progress = 0, Regress = 1, - Reset = 2 + Reset = 2, + Finish = 3, + GoTo = 4 } diff --git a/src/app/public/modules/progress-indicator/types/progress-indicator-message.ts b/src/app/public/modules/progress-indicator/types/progress-indicator-message.ts new file mode 100644 index 0000000..5ad42c8 --- /dev/null +++ b/src/app/public/modules/progress-indicator/types/progress-indicator-message.ts @@ -0,0 +1,18 @@ +import { + SkyProgressIndicatorMessageType +} from './progress-indicator-message-type'; + +export interface SkyProgressIndicatorMessage { + type: SkyProgressIndicatorMessageType; + + data?: { + /** + * Used in conjunction with SkyProgressIndicatorMessageType.GoTo + * to travel to a specific step by specifying an index number. + */ + activeIndex?: number; + + // Allow any other data to be passed. + [key: string]: any; + }; +} diff --git a/src/app/public/modules/progress-indicator/types/progress-indicator-mode.ts b/src/app/public/modules/progress-indicator/types/progress-indicator-mode.ts deleted file mode 100644 index c4386d3..0000000 --- a/src/app/public/modules/progress-indicator/types/progress-indicator-mode.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum SkyProgressIndicatorDisplayMode { - Vertical = 0, - Horizontal = 1 -} diff --git a/src/app/public/modules/progress-indicator/types/progress-indicator-nav-button-type.ts b/src/app/public/modules/progress-indicator/types/progress-indicator-nav-button-type.ts new file mode 100644 index 0000000..c96a62d --- /dev/null +++ b/src/app/public/modules/progress-indicator/types/progress-indicator-nav-button-type.ts @@ -0,0 +1 @@ +export type SkyProgressIndicatorNavButtonType = 'next' | 'previous' | 'finish' | 'reset'; diff --git a/src/app/visual-styles.scss b/src/app/visual-styles.scss new file mode 100644 index 0000000..fdaacd5 --- /dev/null +++ b/src/app/visual-styles.scss @@ -0,0 +1,12 @@ +#skypages-header { + display: none; +} + +body { + background-color: #fff; + padding: 20px; +} + +.app-screenshot { + padding: 15px; +} diff --git a/src/app/visual/progress-indicator/progress-indicator-horizontal-visual.component.html b/src/app/visual/progress-indicator/progress-indicator-horizontal-visual.component.html index c9a8190..adfa493 100644 --- a/src/app/visual/progress-indicator/progress-indicator-horizontal-visual.component.html +++ b/src/app/visual/progress-indicator/progress-indicator-horizontal-visual.component.html @@ -3,64 +3,55 @@ {{ title }} + -
- -
+ Content 1
-
- - - Select this checkbox to enable step 3. - - -
+ Content 2
-
- Some other content. -
+ Content 3
+
+ + + + + + + + + + + + + + + + + + Content 4 + + + + + + +

+ Interact with the progress indicator programmatically +

- + + + + + +

+ + +

+ Horizontal mode +

+ +
+ - + + Content 1 + - + Content 2 + + + + Content 3 + + + + Content 4 + + + + + + + - + - - + - + + +
- +

+ +

+ +

+ Horizontal mode (no finish button) +

- +
+ + Content 1 + + + + Content 2 + + + + Content 3 + + + + Content 4 + + + + + + + + +
+ +

+ Horizontal mode (modal) +

+ +

+ +

+ +

+ Passive mode +

+ +
+ @@ -44,33 +258,55 @@ > - +
- - - + + + + + + + + + + + + + +

+ Legacy components +

+ + - Open wizard - + Old reset button + diff --git a/src/app/visual/progress-indicator/progress-indicator-visual.component.ts b/src/app/visual/progress-indicator/progress-indicator-visual.component.ts index 93387d2..8918cde 100644 --- a/src/app/visual/progress-indicator/progress-indicator-visual.component.ts +++ b/src/app/visual/progress-indicator/progress-indicator-visual.component.ts @@ -1,15 +1,21 @@ import { - Component + Component, + OnDestroy } from '@angular/core'; +import { + SkyModalService +} from '@skyux/modals'; + import { Subject -} from 'rxjs'; +} from 'rxjs/Subject'; import { - SkyProgressIndicatorMessageType, - SkyModalService -} from '@blackbaud/skyux/dist/core'; + SkyProgressIndicatorChange, + SkyProgressIndicatorMessage, + SkyProgressIndicatorMessageType +} from '../../public'; import { ProgressIndicatorWizardDemoComponent @@ -19,24 +25,56 @@ import { selector: 'progress-indicator-visual', templateUrl: './progress-indicator-visual.component.html' }) -export class ProgressIndicatorVisualComponent { - public step1 = false; - public step2 = false; - public step3 = false; +export class ProgressIndicatorVisualComponent implements OnDestroy { + + public disabled: boolean; + public messageStream = new Subject(); + public messageStreamHorizontal = new Subject(); + public startingIndex: number; + + constructor( + private modalService: SkyModalService + ) { } + + public ngOnDestroy(): void { + this.messageStream.complete(); + this.messageStreamHorizontal.complete(); + } + + public onPreviousClick(): void { + this.sendMessage({ + type: SkyProgressIndicatorMessageType.Regress + }); + } - public messageStream = new Subject(); + public onNextClick(): void { + this.sendMessage({ + type: SkyProgressIndicatorMessageType.Progress + }); + } - constructor(private modal: SkyModalService) { } + public onGoToClick(): void { + this.sendMessage({ + type: SkyProgressIndicatorMessageType.GoTo, + data: { + activeIndex: 0 + } + }); + } + + public onProgressChanges(change: SkyProgressIndicatorChange): void { + console.log('Progress change:', change); + } - public progress(): void { - this.messageStream.next(SkyProgressIndicatorMessageType.Progress); + public disableNavButtons(): void { + this.disabled = !this.disabled; } - public regress(): void { - this.messageStream.next(SkyProgressIndicatorMessageType.Regress); + public sendMessage(message: any): void { + this.messageStream.next(message); } - public openWizard(): void { - this.modal.open(ProgressIndicatorWizardDemoComponent); + public openModal(): void { + this.modalService.open(ProgressIndicatorWizardDemoComponent); } } diff --git a/src/assets/locales/resources_en_US.json b/src/assets/locales/resources_en_US.json index 37f4c0e..ee255e6 100644 --- a/src/assets/locales/resources_en_US.json +++ b/src/assets/locales/resources_en_US.json @@ -1,4 +1,8 @@ { + "skyux_progress_indicator_navigator_finish": { + "_description": "Text displayed on a wizard's finish button.", + "message": "Finish" + }, "skyux_progress_indicator_navigator_next": { "_description": "Text displayed on a wizard's next button.", "message": "Next" @@ -6,5 +10,9 @@ "skyux_progress_indicator_navigator_previous": { "_description": "Text displayed on a wizard's previous button.", "message": "Previous" + }, + "skyux_progress_indicator_navigator_reset": { + "_description": "Text displayed on a wizard's reset button.", + "message": "Reset" } } From da48d3c4326589c29153ef7380841628d5e28367 Mon Sep 17 00:00:00 2001 From: Blackbaud-SteveBrush Date: Mon, 22 Apr 2019 17:19:47 -0400 Subject: [PATCH 2/9] Fix e2e tests --- e2e/progress-indicator.e2e-spec.ts | 23 +++++++++++++++++++ .../progress-indicator.component.fixture.ts | 4 ++-- .../progress-indicator-visual.component.html | 7 +++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/e2e/progress-indicator.e2e-spec.ts b/e2e/progress-indicator.e2e-spec.ts index 4ad4927..46d9d66 100644 --- a/e2e/progress-indicator.e2e-spec.ts +++ b/e2e/progress-indicator.e2e-spec.ts @@ -99,6 +99,29 @@ describe('Progress indicator', function () { screenshotName: 'progress-indicator-passive-xs' }); }); + + it('should match previous popover screenshot', function (done) { + expect(`#${screenshotElementId}`).toMatchBaselineScreenshot(done, { + screenshotName: 'progress-indicator-passive' + }); + }); + }); + + describe('Passive mode (popover)', function () { + const screenshotElementId = 'app-screenshot-passive-mode-popover'; + + beforeEach(function () { + SkyHostBrowser.moveCursorOffScreen(); + SkyHostBrowser.scrollTo(`#${screenshotElementId}`); + + performClick(`#${screenshotElementId}-button`); + }); + + it('should match previous screenshot', function (done) { + expect(`#${screenshotElementId}-target .sky-popover`).toMatchBaselineScreenshot(done, { + screenshotName: 'progress-indicator-passive-popover' + }); + }); }); describe('Horizontal mode (modal)', function () { diff --git a/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.ts b/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.ts index 50d8a2f..cad0532 100644 --- a/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.ts +++ b/src/app/public/modules/progress-indicator/fixtures/progress-indicator.component.fixture.ts @@ -56,10 +56,10 @@ export class SkyProgressIndicatorFixtureComponent { public resetButtonComponentLegacy: SkyProgressIndicatorResetButtonComponent; @ViewChild('legacyResetButton', { read: ElementRef }) - public legacyResetButton: ElementRef; + public legacyResetButton: ElementRef; @ViewChild('legacyIsolatedResetButton', { read: ElementRef }) - public legacyIsolatedResetButton: ElementRef; + public legacyIsolatedResetButton: ElementRef; @ViewChild('defaultNavButton', { read: SkyProgressIndicatorNavButtonComponent }) public defaultNavButtonComponent: SkyProgressIndicatorNavButtonComponent; diff --git a/src/app/visual/progress-indicator/progress-indicator-visual.component.html b/src/app/visual/progress-indicator/progress-indicator-visual.component.html index 862f410..36d9240 100644 --- a/src/app/visual/progress-indicator/progress-indicator-visual.component.html +++ b/src/app/visual/progress-indicator/progress-indicator-visual.component.html @@ -268,9 +268,13 @@

Passive mode (in popover)

-
+
Date: Wed, 1 May 2019 15:51:43 -0400 Subject: [PATCH 3/9] Updated console warn --- .../progress-indicator-reset-button.component.ts | 2 +- .../progress-indicator/progress-indicator.component.ts | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts b/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts index 4d5d4a1..11a8e43 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts @@ -45,7 +45,7 @@ export class SkyProgressIndicatorResetButtonComponent implements OnDestroy { private changeDetector: ChangeDetectorRef ) { console.warn( - 'The `` component is deprecated. Please use the following instead:\n' + + '[Deprecation warning] The `` component is deprecated. Please use the following instead:\n' + '`. This is a ' + 'deprecated type and will be removed in the next major version release. ' + 'Instead, set the `messageStream` input to `Subject`.' @@ -317,7 +317,13 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, value.data.activeIndex === undefined ) { console.warn( - 'Please provide a step index to travel to!' + 'A message type of `SkyProgressIndicatorMessageType.GoTo` was passed to the progress ' + + 'indicator, but no step index was provided. You can pass the desired active ' + + 'index via:\n' + + '{\n' + + ' type: SkyProgressIndicatorMessageType.GoTo,\n' + + ' data: { activeIndex: 0 }\n' + + '}' ); return; } From bb3005174575904d78eb7fea2d9c5cb91dd355a3 Mon Sep 17 00:00:00 2001 From: Blackbaud-SteveBrush Date: Wed, 1 May 2019 15:52:47 -0400 Subject: [PATCH 4/9] Update deps --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e719392..211765a 100644 --- a/package.json +++ b/package.json @@ -29,8 +29,8 @@ }, "dependencies": {}, "devDependencies": { - "@blackbaud/skyux": "2.48.0", - "@blackbaud/skyux-builder": "1.33.1", + "@blackbaud/skyux": "2.48.3", + "@blackbaud/skyux-builder": "1.34.0", "@skyux-sdk/builder-plugin-skyux": "1.0.0" } } From 1295a3af3172c18306358afaaa6059b61254efaf Mon Sep 17 00:00:00 2001 From: Blackbaud-SteveBrush Date: Mon, 6 May 2019 14:10:29 -0400 Subject: [PATCH 5/9] Some changes --- .../progress-indicator.component.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/app/public/modules/progress-indicator/progress-indicator.component.ts b/src/app/public/modules/progress-indicator/progress-indicator.component.ts index 2e175ca..7dfd8f5 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator.component.ts @@ -1,14 +1,15 @@ import { AfterContentInit, ChangeDetectionStrategy, + ChangeDetectorRef, Component, ContentChildren, + EventEmitter, Input, - OnInit, OnDestroy, + OnInit, Output, - QueryList, - ChangeDetectorRef + QueryList } from '@angular/core'; import { @@ -85,7 +86,7 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, } @Output() - public progressChanges = new Subject(); + public progressChanges = new EventEmitter(); public get cssClassNames(): string { const classNames = [ @@ -275,7 +276,9 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, }); } - private handleIncomingMessage(message: SkyProgressIndicatorMessage | SkyProgressIndicatorMessageType): void { + private handleIncomingMessage( + message: SkyProgressIndicatorMessage | SkyProgressIndicatorMessageType + ): void { const value: any = message; let type: SkyProgressIndicatorMessageType; From ab8360ab724af4fa5ca02512c154a14cef285d78 Mon Sep 17 00:00:00 2001 From: Blackbaud-SteveBrush Date: Mon, 6 May 2019 14:45:05 -0400 Subject: [PATCH 6/9] Removed unnecessary changes --- .../progress-indicator.component.ts | 39 +++++++++++-------- .../modules/progress-indicator/types/index.ts | 2 +- ...lay-mode.ts => progress-indicator-mode.ts} | 0 3 files changed, 23 insertions(+), 18 deletions(-) rename src/app/public/modules/progress-indicator/types/{progress-indicator-display-mode.ts => progress-indicator-mode.ts} (100%) diff --git a/src/app/public/modules/progress-indicator/progress-indicator.component.ts b/src/app/public/modules/progress-indicator/progress-indicator.component.ts index 2e175ca..526d659 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator.component.ts @@ -3,6 +3,7 @@ import { ChangeDetectionStrategy, Component, ContentChildren, + EventEmitter, Input, OnInit, OnDestroy, @@ -69,7 +70,9 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, } @Input() - public set messageStream(value: Subject) { + public set messageStream( + value: Subject + ) { if (value) { this._messageStream = value; } @@ -85,7 +88,7 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, } @Output() - public progressChanges = new Subject(); + public progressChanges = new EventEmitter(); public get cssClassNames(): string { const classNames = [ @@ -138,15 +141,15 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, private set activeIndex(value: number) { const lastIndex = this.itemComponents.length - 1; - if (value > lastIndex) { - value = lastIndex; - } + let newIndex = value; - if (value < 0) { - value = 0; + if (value > lastIndex) { + newIndex = lastIndex; + } else if (value < 0) { + newIndex = 0; } - this._activeIndex = value; + this._activeIndex = newIndex; } private ngUnsubscribe = new Subject(); @@ -275,7 +278,9 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, }); } - private handleIncomingMessage(message: SkyProgressIndicatorMessage | SkyProgressIndicatorMessageType): void { + private handleIncomingMessage( + message: SkyProgressIndicatorMessage | SkyProgressIndicatorMessageType + ): void { const value: any = message; let type: SkyProgressIndicatorMessageType; @@ -283,10 +288,10 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, // Prints a deprecation warning if the consumer provides only `SkyProgressIndicatorMessageType`. if (value.type === undefined) { console.warn( - '[Deprecation warning] The progress indicator component\'s `messageStream` input was ' + - 'set to `Subject`. This is a ' + - 'deprecated type and will be removed in the next major version release. ' + - 'Instead, set the `messageStream` input to `Subject`.' + '[Deprecation warning] The progress indicator component\'s `messageStream` input is set ' + + 'to `Subject`. We will remove this deprecated type in ' + + 'the next major version release. Instead, set the `messageStream` input to a value of ' + + '`Subject`.' ); type = value; @@ -295,10 +300,6 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, } switch (type) { - case SkyProgressIndicatorMessageType.Finish: - this.finishSteps(); - break; - case SkyProgressIndicatorMessageType.Progress: this.gotoNextStep(); break; @@ -307,6 +308,10 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, this.gotoPreviousStep(); break; + case SkyProgressIndicatorMessageType.Finish: + this.finishSteps(); + break; + case SkyProgressIndicatorMessageType.Reset: this.resetSteps(); break; diff --git a/src/app/public/modules/progress-indicator/types/index.ts b/src/app/public/modules/progress-indicator/types/index.ts index b9f2eaa..7900e08 100644 --- a/src/app/public/modules/progress-indicator/types/index.ts +++ b/src/app/public/modules/progress-indicator/types/index.ts @@ -1,6 +1,6 @@ export * from './progress-indicator-change'; -export * from './progress-indicator-display-mode'; export * from './progress-indicator-item-status'; export * from './progress-indicator-message-type'; export * from './progress-indicator-message'; +export * from './progress-indicator-mode'; export * from './progress-indicator-nav-button-type'; diff --git a/src/app/public/modules/progress-indicator/types/progress-indicator-display-mode.ts b/src/app/public/modules/progress-indicator/types/progress-indicator-mode.ts similarity index 100% rename from src/app/public/modules/progress-indicator/types/progress-indicator-display-mode.ts rename to src/app/public/modules/progress-indicator/types/progress-indicator-mode.ts From daf7f41c04e041583bea59a15eb2ec00bb50065b Mon Sep 17 00:00:00 2001 From: Blackbaud-SteveBrush Date: Mon, 6 May 2019 14:47:05 -0400 Subject: [PATCH 7/9] Fixed enum --- .../types/progress-indicator-item-status.ts | 2 +- .../progress-indicator/types/progress-indicator-mode.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/public/modules/progress-indicator/types/progress-indicator-item-status.ts b/src/app/public/modules/progress-indicator/types/progress-indicator-item-status.ts index cb27c54..2d3b342 100644 --- a/src/app/public/modules/progress-indicator/types/progress-indicator-item-status.ts +++ b/src/app/public/modules/progress-indicator/types/progress-indicator-item-status.ts @@ -1,4 +1,4 @@ -export const enum SkyProgressIndicatorItemStatus { +export enum SkyProgressIndicatorItemStatus { Active = 0, Complete, Incomplete, diff --git a/src/app/public/modules/progress-indicator/types/progress-indicator-mode.ts b/src/app/public/modules/progress-indicator/types/progress-indicator-mode.ts index 72d8c90..921288b 100644 --- a/src/app/public/modules/progress-indicator/types/progress-indicator-mode.ts +++ b/src/app/public/modules/progress-indicator/types/progress-indicator-mode.ts @@ -1,4 +1,4 @@ -export const enum SkyProgressIndicatorDisplayMode { - Horizontal = 0, - Vertical +export enum SkyProgressIndicatorDisplayMode { + Vertical = 0, + Horizontal } From 0280ab1be406d254187e068b75f963ccb7d5000e Mon Sep 17 00:00:00 2001 From: Blackbaud-SteveBrush Date: Wed, 8 May 2019 12:04:09 -0400 Subject: [PATCH 8/9] Some adjustments based on PR feedback --- package.json | 2 +- .../progress-indicator-item.component.html | 8 ++++---- .../progress-indicator-item.component.scss | 6 +++--- .../progress-indicator-item.component.ts | 12 +++++++++++- .../progress-indicator-nav-button.component.ts | 2 +- ...gress-indicator-reset-button.component.html | 18 +++++++----------- ...rogress-indicator-reset-button.component.ts | 7 ++----- .../progress-indicator.component.html | 2 +- .../progress-indicator.component.scss | 8 ++++---- .../progress-indicator.component.spec.ts | 18 +++++++++++++++--- .../progress-indicator.component.ts | 2 +- .../types/progress-indicator-change.ts | 2 +- ...ss-indicator-horizontal-visual.component.ts | 2 +- .../progress-indicator-visual.component.html | 6 ++++-- 14 files changed, 56 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index 406d1f1..42695f4 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "dependencies": {}, "devDependencies": { "@blackbaud/skyux": "2.49.0", - "@blackbaud/skyux-builder": "1.34.1", + "@blackbaud/skyux-builder": "1.35.0", "@skyux-sdk/builder-plugin-skyux": "1.0.0" } } diff --git a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.html b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.html index 421f479..cf9ae6a 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.html +++ b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.html @@ -8,17 +8,17 @@
- {{ titlePrefix }}{{ title }} + {{ formattedTitle }}
diff --git a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.scss b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.scss index d8c6323..8c5a74e 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.scss +++ b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.scss @@ -7,11 +7,11 @@ margin-bottom: -$icon-offset; } -.sky-progress-indicator-item-main { +.sky-progress-indicator-item-content { flex: 1 1 100%; } -.sky-progress-indicator-item-content { +.sky-progress-indicator-item-body { min-height: $sky-margin-double; padding-top: $sky-margin; padding-bottom: $sky-margin-triple; @@ -19,7 +19,7 @@ .sky-progress-indicator-item-status-incomplete { // Incomplete items should have reduced height. - .sky-progress-indicator-item-content { + .sky-progress-indicator-item-body { padding: 0; } } diff --git a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.ts b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.ts index 37be4b9..00fd6ad 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.ts @@ -20,7 +20,16 @@ export class SkyProgressIndicatorItemComponent { @Input() public title: string; + public get formattedTitle(): string { + return `${this.titlePrefix}${this.title}`; + } + public get status(): SkyProgressIndicatorItemStatus { + /* istanbul ignore next */ + if (this._status === undefined) { + return SkyProgressIndicatorItemStatus.Incomplete; + } + return this._status; } @@ -61,7 +70,8 @@ export class SkyProgressIndicatorItemComponent { public isVisible = false; public showStatusMarker = true; public showTitle = true; - public titlePrefix: string; + + private titlePrefix: string; private _status: SkyProgressIndicatorItemStatus; diff --git a/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.ts b/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.ts index e9f94b3..2ccad6b 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.ts @@ -207,7 +207,7 @@ export class SkyProgressIndicatorNavButtonComponent implements OnInit, OnDestroy // (except for the reset button) if ( buttonType !== 'reset' && - change.isFinished + change.isComplete ) { this.isVisible = false; return; diff --git a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.html b/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.html index 7a28007..cbb34c4 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.html +++ b/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.html @@ -1,12 +1,8 @@ -
- -
+ + diff --git a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts b/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts index d930712..e53380f 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.ts @@ -46,11 +46,8 @@ export class SkyProgressIndicatorResetButtonComponent implements OnDestroy { ) { console.warn( '[Deprecation warning] The `` component is ' + - 'deprecated. Please use the following instead:\n' + - '' + 'deprecated. Please use the `` component instead, with ' + + '`buttonType` set to "reset".' ); } diff --git a/src/app/public/modules/progress-indicator/progress-indicator.component.html b/src/app/public/modules/progress-indicator/progress-indicator.component.html index 27129d3..cf11868 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator.component.html +++ b/src/app/public/modules/progress-indicator/progress-indicator.component.html @@ -3,7 +3,7 @@ [ngClass]="cssClassNames" >
{ + expect(fixture.nativeElement).toBeAccessible(); + }); + })); + it('should be accessible in passive mode', async(function () { componentInstance.isPassive = true; fixture.detectChanges(); diff --git a/src/app/public/modules/progress-indicator/progress-indicator.component.ts b/src/app/public/modules/progress-indicator/progress-indicator.component.ts index 526d659..eb6d71f 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator.component.ts @@ -226,7 +226,7 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, }); this.notifyChange({ - isFinished: true + isComplete: true }); } diff --git a/src/app/public/modules/progress-indicator/types/progress-indicator-change.ts b/src/app/public/modules/progress-indicator/types/progress-indicator-change.ts index 7c5fc67..0a92684 100644 --- a/src/app/public/modules/progress-indicator/types/progress-indicator-change.ts +++ b/src/app/public/modules/progress-indicator/types/progress-indicator-change.ts @@ -6,7 +6,7 @@ export interface SkyProgressIndicatorChange { activeIndex?: number; - isFinished?: boolean; + isComplete?: boolean; itemStatuses?: SkyProgressIndicatorItemStatus[]; } diff --git a/src/app/visual/progress-indicator/progress-indicator-horizontal-visual.component.ts b/src/app/visual/progress-indicator/progress-indicator-horizontal-visual.component.ts index 75c778e..0da9abc 100644 --- a/src/app/visual/progress-indicator/progress-indicator-horizontal-visual.component.ts +++ b/src/app/visual/progress-indicator/progress-indicator-horizontal-visual.component.ts @@ -27,7 +27,7 @@ export class ProgressIndicatorWizardDemoComponent { ) { } public onProgressChanges(changes: SkyProgressIndicatorChange): void { - if (changes.isFinished) { + if (changes.isComplete) { this.instance.save(); } } diff --git a/src/app/visual/progress-indicator/progress-indicator-visual.component.html b/src/app/visual/progress-indicator/progress-indicator-visual.component.html index 36d9240..7332b88 100644 --- a/src/app/visual/progress-indicator/progress-indicator-visual.component.html +++ b/src/app/visual/progress-indicator/progress-indicator-visual.component.html @@ -156,8 +156,8 @@

@@ -179,7 +179,9 @@

Horizontal mode (no finish button)

-
+
Date: Mon, 13 May 2019 09:29:10 -0400 Subject: [PATCH 9/9] PR feedback --- ...ess-indicator-status-marker.component.scss | 6 +----- .../progress-indicator.component.ts | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.scss b/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.scss index 6362f77..6ff5a86 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.scss +++ b/src/app/public/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.scss @@ -2,13 +2,9 @@ @import "~@skyux/theme/scss/_compat/mixins"; @import "../scss/progress-indicator-variables"; -:host { - display: flex; - flex: 1 0 auto; -} - .sky-progress-indicator-status-marker { display: flex; + height: 100%; &.sky-progress-indicator-status-marker-mode-vertical { flex-basis: $status-marker-width; diff --git a/src/app/public/modules/progress-indicator/progress-indicator.component.ts b/src/app/public/modules/progress-indicator/progress-indicator.component.ts index eb6d71f..12b7aaa 100644 --- a/src/app/public/modules/progress-indicator/progress-indicator.component.ts +++ b/src/app/public/modules/progress-indicator/progress-indicator.component.ts @@ -123,12 +123,7 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, return []; } - const statuses = this.itemComponents.map(c => c.status); - - // Update the view whenever item statuses change. - this.changeDetector.markForCheck(); - - return statuses; + return this.itemComponents.map(c => c.status); } @ContentChildren(SkyProgressIndicatorItemComponent) @@ -248,18 +243,21 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, ); // Set status. + let status: SkyProgressIndicatorItemStatus; if (activeIndex === i) { if (isPassive) { - component.status = SkyProgressIndicatorItemStatus.Pending; + status = SkyProgressIndicatorItemStatus.Pending; } else { - component.status = SkyProgressIndicatorItemStatus.Active; + status = SkyProgressIndicatorItemStatus.Active; } } else if (activeIndex > i) { - component.status = SkyProgressIndicatorItemStatus.Complete; + status = SkyProgressIndicatorItemStatus.Complete; } else { - component.status = SkyProgressIndicatorItemStatus.Incomplete; + status = SkyProgressIndicatorItemStatus.Incomplete; } + component.status = status; + // Show or hide the status markers. component.showStatusMarker = isVertical; @@ -339,6 +337,9 @@ export class SkyProgressIndicatorComponent implements OnInit, AfterContentInit, default: break; } + + // Update the view after a message is received. + this.changeDetector.markForCheck(); } private subscribeToMessageStream(): void {